/* * Copyright 2020 Mark Nellemann * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package biz.nellemann.hmci; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; class ManagedSystem extends MetaSystem { private final static Logger log = LoggerFactory.getLogger(ManagedSystem.class); //public final String hmcId; public final String id; public final String name; public final String type; public final String model; public final String serialNumber; public final SystemEnergy energy; ManagedSystem(String id, String name, String type, String model, String serialNumber) { this.id = id; this.name = name; this.type = type; this.model = model; this.serialNumber = serialNumber; this.energy = new SystemEnergy(this); } @Override public String toString() { return String.format("[%s] %s (%s-%s %s)", id, name, type, model, serialNumber); } List getDetails() { List list = new ArrayList<>(); HashMap tagsMap = new HashMap<>(); tagsMap.put("servername", name); log.trace("getDetails() - tags: {}", tagsMap); Map fieldsMap = new HashMap<>(); fieldsMap.put("mtm", String.format("%s-%s %s", type, model, serialNumber)); fieldsMap.put("APIversion", metrics.systemUtil.utilInfo.version); fieldsMap.put("metric", metrics.systemUtil.utilInfo.metricType); fieldsMap.put("frequency", metrics.systemUtil.utilInfo.frequency); fieldsMap.put("nextract", "HMCi"); fieldsMap.put("name", name); fieldsMap.put("utilizedProcUnits", metrics.systemUtil.sample.systemFirmwareUtil.utilizedProcUnits); fieldsMap.put("assignedMem", metrics.systemUtil.sample.systemFirmwareUtil.assignedMem); log.trace("getDetails() - fields: {}", fieldsMap); list.add(new Measurement(tagsMap, fieldsMap)); return list; } // Memory List getMemoryMetrics() { List list = new ArrayList<>(); HashMap tagsMap = new HashMap<>(); tagsMap.put("servername", name); log.trace("getMemoryMetrics() - tags: {}", tagsMap); Map fieldsMap = new HashMap<>(); fieldsMap.put("totalMem", metrics.systemUtil.sample.serverUtil.memory.totalMem); fieldsMap.put("availableMem", metrics.systemUtil.sample.serverUtil.memory.availableMem); fieldsMap.put("configurableMem", metrics.systemUtil.sample.serverUtil.memory.configurableMem); fieldsMap.put("assignedMemToLpars", metrics.systemUtil.sample.serverUtil.memory.assignedMemToLpars); fieldsMap.put("virtualPersistentMem", metrics.systemUtil.sample.serverUtil.memory.virtualPersistentMem); log.trace("getMemoryMetrics() - fields: {}", fieldsMap); list.add(new Measurement(tagsMap, fieldsMap)); return list; } // Processor List getProcessorMetrics() { List list = new ArrayList<>(); HashMap tagsMap = new HashMap<>(); tagsMap.put("servername", name); log.trace("getProcessorMetrics() - tags: {}", tagsMap); HashMap fieldsMap = new HashMap<>(); fieldsMap.put("totalProcUnits", metrics.systemUtil.sample.serverUtil.processor.totalProcUnits); fieldsMap.put("utilizedProcUnits", metrics.systemUtil.sample.serverUtil.processor.utilizedProcUnits); fieldsMap.put("availableProcUnits", metrics.systemUtil.sample.serverUtil.processor.availableProcUnits); fieldsMap.put("configurableProcUnits", metrics.systemUtil.sample.serverUtil.processor.configurableProcUnits); log.trace("getProcessorMetrics() - fields: {}", fieldsMap); list.add(new Measurement(tagsMap, fieldsMap)); return list; } // Shared ProcessorPools List getSharedProcessorPools() { List list = new ArrayList<>(); metrics.systemUtil.sample.serverUtil.sharedProcessorPool.forEach(sharedProcessorPool -> { HashMap tagsMap = new HashMap<>(); tagsMap.put("servername", name); tagsMap.put("pool", sharedProcessorPool.id); tagsMap.put("poolname", sharedProcessorPool.name); log.trace("getSharedProcessorPools() - tags: {}", tagsMap); HashMap fieldsMap = new HashMap<>(); fieldsMap.put("assignedProcUnits", sharedProcessorPool.assignedProcUnits); fieldsMap.put("availableProcUnits", sharedProcessorPool.availableProcUnits); fieldsMap.put("utilizedProcUnits", sharedProcessorPool.utilizedProcUnits); fieldsMap.put("borrowedProcUnits", sharedProcessorPool.borrowedProcUnits); fieldsMap.put("configuredProcUnits", sharedProcessorPool.configuredProcUnits); log.trace("getSharedProcessorPools() - fields: {}", fieldsMap); list.add(new Measurement(tagsMap, fieldsMap)); }); return list; } // Physical ProcessorPool List getPhysicalProcessorPool() { List list = new ArrayList<>(); HashMap tagsMap = new HashMap<>(); tagsMap.put("servername", name); log.trace("getPhysicalProcessorPool() - tags: {}", tagsMap); HashMap fieldsMap = new HashMap<>(); fieldsMap.put("assignedProcUnits", metrics.systemUtil.sample.serverUtil.physicalProcessorPool.assignedProcUnits); fieldsMap.put("availableProcUnits", metrics.systemUtil.sample.serverUtil.physicalProcessorPool.availableProcUnits); fieldsMap.put("utilizedProcUnits", metrics.systemUtil.sample.serverUtil.physicalProcessorPool.utilizedProcUnits); fieldsMap.put("configuredProcUnits", metrics.systemUtil.sample.serverUtil.physicalProcessorPool.configuredProcUnits); fieldsMap.put("borrowedProcUnits", metrics.systemUtil.sample.serverUtil.physicalProcessorPool.borrowedProcUnits); log.trace("getPhysicalProcessorPool() - fields: {}", fieldsMap); list.add(new Measurement(tagsMap, fieldsMap)); return list; } // VIO Details List getViosDetails() { List list = new ArrayList<>(); metrics.systemUtil.sample.viosUtil.forEach(vios -> { HashMap tagsMap = new HashMap<>(); tagsMap.put("servername", name); tagsMap.put("viosname", vios.name); log.trace("getViosDetails() - tags: {}", tagsMap); HashMap fieldsMap = new HashMap<>(); fieldsMap.put("viosid", vios.id); fieldsMap.put("viosstate", vios.state); fieldsMap.put("viosname", vios.name); fieldsMap.put("affinityScore", vios.affinityScore); log.trace("getViosDetails() - fields: {}", fieldsMap); list.add(new Measurement(tagsMap, fieldsMap)); }); return list; } // VIO Memory List getViosMemoryMetrics() { List list = new ArrayList<>(); metrics.systemUtil.sample.viosUtil.forEach(vios -> { HashMap tagsMap = new HashMap<>(); tagsMap.put("servername", name); tagsMap.put("viosname", vios.name); log.trace("getViosMemoryMetrics() - tags: {}", tagsMap); HashMap fieldsMap = new HashMap<>(); Number assignedMem = getNumberMetricObject(vios.memory.assignedMem); Number utilizedMem = getNumberMetricObject(vios.memory.utilizedMem); if(assignedMem != null) { fieldsMap.put("assignedMem", vios.memory.assignedMem); } if(utilizedMem != null) { fieldsMap.put("utilizedMem", vios.memory.utilizedMem); } if(assignedMem != null && utilizedMem != null) { Number usedMemPct = (utilizedMem.intValue() * 100 ) / assignedMem.intValue(); fieldsMap.put("utilizedPct", usedMemPct.floatValue()); } log.trace("getViosMemoryMetrics() - fields: {}", fieldsMap); list.add(new Measurement(tagsMap, fieldsMap)); }); return list; } // VIO Processor List getViosProcessorMetrics() { List list = new ArrayList<>(); metrics.systemUtil.sample.viosUtil.forEach(vios -> { HashMap tagsMap = new HashMap<>(); tagsMap.put("servername", name); tagsMap.put("viosname", vios.name); log.trace("getViosProcessorMetrics() - tags: {}", tagsMap); HashMap fieldsMap = new HashMap<>(); fieldsMap.put("utilizedProcUnits", vios.processor.utilizedProcUnits); fieldsMap.put("utilizedCappedProcUnits", vios.processor.utilizedCappedProcUnits); fieldsMap.put("utilizedUncappedProcUnits", vios.processor.utilizedUncappedProcUnits); fieldsMap.put("currentVirtualProcessors", vios.processor.currentVirtualProcessors); fieldsMap.put("maxVirtualProcessors", vios.processor.maxVirtualProcessors); fieldsMap.put("maxProcUnits", vios.processor.maxProcUnits); fieldsMap.put("entitledProcUnits", vios.processor.entitledProcUnits); fieldsMap.put("donatedProcUnits", vios.processor.donatedProcUnits); fieldsMap.put("idleProcUnits", vios.processor.idleProcUnits); fieldsMap.put("timeSpentWaitingForDispatch", vios.processor.timePerInstructionExecution); fieldsMap.put("timePerInstructionExecution", vios.processor.timeSpentWaitingForDispatch); fieldsMap.put("weight", vios.processor.weight); fieldsMap.put("mode", vios.processor.mode); log.trace("getViosProcessorMetrics() - fields: {}", fieldsMap); list.add(new Measurement(tagsMap, fieldsMap)); }); return list; } // VIOs - Network List getViosNetworkLpars() { List list = new ArrayList<>(); metrics.systemUtil.sample.viosUtil.forEach(vios -> { HashMap tagsMap = new HashMap<>(); tagsMap.put("servername", name); tagsMap.put("viosname", vios.name); log.trace("getViosNetworkLpars() - tags: {}", tagsMap); HashMap fieldsMap = new HashMap<>(); fieldsMap.put("clientlpars", vios.network.clientLpars.size()); log.trace("getViosNetworkLpars() - fields: {}", fieldsMap); list.add(new Measurement(tagsMap, fieldsMap)); }); return list; } // VIO Network - Shared List getViosNetworkSharedAdapters() { List list = new ArrayList<>(); metrics.systemUtil.sample.viosUtil.forEach(vios -> { vios.network.sharedAdapters.forEach(adapter -> { HashMap tagsMap = new HashMap<>(); tagsMap.put("servername", name); tagsMap.put("viosname", vios.name); //tagsMap.put("id", adapter.id); tagsMap.put("location", adapter.physicalLocation); log.trace("getViosNetworkSharedAdapters() - tags: {}", tagsMap); HashMap fieldsMap = new HashMap<>(); fieldsMap.put("id", adapter.id); fieldsMap.put("type", adapter.type); fieldsMap.put("sentBytes", adapter.sentBytes); fieldsMap.put("sentPackets", adapter.sentPackets); fieldsMap.put("receivedBytes", adapter.receivedBytes); fieldsMap.put("receivedPackets", adapter.receivedPackets); fieldsMap.put("droppedPackets", adapter.droppedPackets); fieldsMap.put("transferredBytes", adapter.transferredBytes); log.trace("getViosNetworkSharedAdapters() - fields: {}", fieldsMap); list.add(new Measurement(tagsMap, fieldsMap)); }); }); return list; } // VIO Network - Virtual List getViosNetworkVirtualAdapters() { List list = new ArrayList<>(); metrics.systemUtil.sample.viosUtil.forEach( vios -> { vios.network.virtualEthernetAdapters.forEach( adapter -> { HashMap tagsMap = new HashMap<>(); tagsMap.put("vlanid", String.valueOf(adapter.vlanId)); tagsMap.put("vswitchid", String.valueOf(adapter.vswitchId)); tagsMap.put("systemname", name); tagsMap.put("viosname", vios.name); tagsMap.put("location", adapter.physicalLocation); log.trace("getViosNetworkVirtualAdapters() - tags: {}", tagsMap); HashMap fieldsMap = new HashMap<>(); fieldsMap.put("droppedPackets", adapter.droppedPackets); fieldsMap.put("droppedPhysicalPackets", adapter.droppedPhysicalPackets); fieldsMap.put("isPortVlanId", adapter.isPortVlanId); fieldsMap.put("receivedBytes", adapter.receivedBytes); fieldsMap.put("receivedPackets", adapter.receivedPackets); fieldsMap.put("receivedPhysicalBytes", adapter.receivedPhysicalBytes); fieldsMap.put("receivedPhysicalPackets", adapter.receivedPhysicalPackets); fieldsMap.put("sentBytes", adapter.sentBytes); fieldsMap.put("sentPackets", adapter.sentPackets); fieldsMap.put("sentPhysicalBytes", adapter.sentPhysicalBytes); fieldsMap.put("sentPhysicalPackets", adapter.sentPhysicalPackets); fieldsMap.put("transferredBytes", adapter.transferredBytes); fieldsMap.put("transferredPhysicalBytes", adapter.transferredPhysicalBytes); log.trace("getViosNetworkVirtualAdapters() - fields: {}", fieldsMap); list.add(new Measurement(tagsMap, fieldsMap)); }); }); return list; } // VIO Network - Generic List getViosNetworkGenericAdapters() { List list = new ArrayList<>(); metrics.systemUtil.sample.viosUtil.forEach( vios -> { vios.network.genericAdapters.forEach( adapter -> { HashMap tagsMap = new HashMap<>(); tagsMap.put("id", adapter.id); tagsMap.put("servername", name); tagsMap.put("viosname", vios.name); tagsMap.put("location", adapter.physicalLocation); log.trace("getViosNetworkGenericAdapters() - tags: {}", tagsMap); HashMap fieldsMap = new HashMap<>(); fieldsMap.put("sentBytes", adapter.sentBytes); fieldsMap.put("sentPackets", adapter.sentPackets); fieldsMap.put("receivedBytes", adapter.receivedBytes); fieldsMap.put("receivedPackets", adapter.receivedPackets); fieldsMap.put("droppedPackets", adapter.droppedPackets); fieldsMap.put("transferredBytes", adapter.transferredBytes); log.trace("getViosNetworkGenericAdapters() - fields: {}", fieldsMap); list.add(new Measurement(tagsMap, fieldsMap)); }); }); return list; } // VIOs - Storage List getViosStorageLpars() { List list = new ArrayList<>(); metrics.systemUtil.sample.viosUtil.forEach(vios -> { HashMap tagsMap = new HashMap<>(); tagsMap.put("servername", name); tagsMap.put("viosname", vios.name); log.trace("getViosStorageLpars() - tags: {}", tagsMap); HashMap fieldsMap = new HashMap<>(); fieldsMap.put("clientlpars", vios.storage.clientLpars.size()); log.trace("getViosStorageLpars() - fields: {}", fieldsMap); list.add(new Measurement(tagsMap, fieldsMap)); }); return list; } // VIO Storage FC List getViosStorageFiberChannelAdapters() { List list = new ArrayList<>(); metrics.systemUtil.sample.viosUtil.forEach( vios -> { log.trace("getViosStorageFiberChannelAdapters() - VIOS: {}", vios.name); vios.storage.fiberChannelAdapters.forEach( adapter -> { HashMap tagsMap = new HashMap<>(); tagsMap.put("id", adapter.id); tagsMap.put("servername", name); tagsMap.put("viosname", vios.name); tagsMap.put("location", adapter.physicalLocation); log.trace("getViosStorageFiberChannelAdapters() - tags: {}", tagsMap); HashMap fieldsMap = new HashMap<>(); fieldsMap.put("numOfReads", adapter.numOfReads); fieldsMap.put("numOfWrites", adapter.numOfWrites); fieldsMap.put("readBytes", adapter.readBytes); fieldsMap.put("writeBytes", adapter.writeBytes); fieldsMap.put("transmittedBytes", adapter.transmittedBytes); log.trace("getViosStorageFiberChannelAdapters() - fields: {}", fieldsMap); list.add(new Measurement(tagsMap, fieldsMap)); }); }); return list; } // VIO Storage SSP TODO List getViosStorageSharedStoragePools() { List list = new ArrayList<>(); /* metrics.systemUtil.sample.viosUtil.forEach( vios -> { vios.storage.fiberChannelAdapters.forEach( adapter -> { HashMap tagsMap = new HashMap<>(); tagsMap.put("servername", name); tagsMap.put("viosname", vios.name); tagsMap.put("id", adapter.id); tagsMap.put("location", adapter.physicalLocation); log.trace("getViosStorageSharedStoragePools() - tags: " + tagsMap.toString()); HashMap fieldsMap = new HashMap<>(); fieldsMap.put("numOfReads", adapter.numOfReads); fieldsMap.put("numOfWrites", adapter.numOfWrites); fieldsMap.put("readBytes", adapter.readBytes); fieldsMap.put("writeBytes", adapter.writeBytes); fieldsMap.put("transmittedBytes", adapter.transmittedBytes); fieldsMap.put("physicalLocation", adapter.physicalLocation); log.trace("getViosStorageSharedStoragePools() - fields: " + fieldsMap.toString()); list.add(new Measurement(tagsMap, fieldsMap)); }); log.trace("getViosStorageSharedStoragePools() - VIOS: " + vios.name); }); */ return list; } // VIO Storage - Physical List getViosStoragePhysicalAdapters() { List list = new ArrayList<>(); metrics.systemUtil.sample.viosUtil.forEach( vios -> { log.trace("getViosStoragePhysicalAdapters() - VIOS: {}", vios.name); vios.storage.genericPhysicalAdapters.forEach( adapter -> { HashMap tagsMap = new HashMap<>(); tagsMap.put("servername", name); tagsMap.put("viosname", vios.name); tagsMap.put("id", adapter.id); tagsMap.put("location", adapter.physicalLocation); log.trace("getViosStoragePhysicalAdapters() - tags: {}", tagsMap); HashMap fieldsMap = new HashMap<>(); fieldsMap.put("numOfReads", adapter.numOfReads); fieldsMap.put("numOfWrites", adapter.numOfWrites); fieldsMap.put("readBytes", adapter.readBytes); fieldsMap.put("writeBytes", adapter.writeBytes); fieldsMap.put("transmittedBytes", adapter.transmittedBytes); fieldsMap.put("type", adapter.type); log.trace("getViosStoragePhysicalAdapters() - fields: {}", fieldsMap); list.add(new Measurement(tagsMap, fieldsMap)); }); }); return list; } // VIO Storage - Virtual List getViosStorageVirtualAdapters() { List list = new ArrayList<>(); metrics.systemUtil.sample.viosUtil.forEach( vios -> { log.trace("getViosStorageVirtualAdapters() - VIOS: {}", vios.name); vios.storage.genericVirtualAdapters.forEach( adapter -> { HashMap tagsMap = new HashMap<>(); tagsMap.put("servername", name); tagsMap.put("viosname", vios.name); tagsMap.put("location", adapter.physicalLocation); tagsMap.put("id", adapter.id); log.trace("getViosStorageVirtualAdapters() - tags: {}", tagsMap); HashMap fieldsMap = new HashMap<>(); fieldsMap.put("numOfReads", adapter.numOfReads); fieldsMap.put("numOfWrites", adapter.numOfWrites); fieldsMap.put("readBytes", adapter.readBytes); fieldsMap.put("writeBytes", adapter.writeBytes); fieldsMap.put("transmittedBytes", adapter.transmittedBytes); fieldsMap.put("type", adapter.type); log.trace("getViosStorageVirtualAdapters() - fields: {}", fieldsMap); list.add(new Measurement(tagsMap, fieldsMap)); }); }); return list; } }