From c324e2401437284beeae41408203f63b39696480 Mon Sep 17 00:00:00 2001 From: Mark Nellemann Date: Thu, 25 Mar 2021 16:46:04 +0100 Subject: [PATCH] Work on nextract naming. --- gradle.properties | 2 +- .../java/biz/nellemann/hmci/InfluxClient.java | 194 ++++--- .../biz/nellemann/hmci/LogicalPartition.java | 117 +++-- .../biz/nellemann/hmci/ManagedSystem.java | 494 +++++++++++++----- .../java/biz/nellemann/hmci/Measurement.java | 4 +- .../java/biz/nellemann/hmci/SystemEnergy.java | 8 +- .../nellemann/hmci/pcm/GenericAdapter.java | 26 +- .../java/biz/nellemann/hmci/pcm/Network.java | 1 + .../hmci/pcm/PhysicalProcessorPool.java | 21 +- .../biz/nellemann/hmci/pcm/ServerMemory.java | 3 + .../nellemann/hmci/pcm/SystemFirmware.java | 16 + .../java/biz/nellemann/hmci/pcm/UtilInfo.java | 6 +- .../biz/nellemann/hmci/pcm/UtilSample.java | 1 + .../hmci/pcm/VirtualFiberChannelAdapter.java | 26 +- .../hmci/LogicalPartitionTest.groovy | 31 +- .../nellemann/hmci/ManagedSystemTest.groovy | 18 +- 16 files changed, 709 insertions(+), 259 deletions(-) create mode 100644 src/main/java/biz/nellemann/hmci/pcm/SystemFirmware.java diff --git a/gradle.properties b/gradle.properties index 0974f2a..c54020f 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,3 +1,3 @@ id = hmci group = biz.nellemann.hmci -version = 1.1.6 +version = 1.2.1 diff --git a/src/main/java/biz/nellemann/hmci/InfluxClient.java b/src/main/java/biz/nellemann/hmci/InfluxClient.java index 66e5abb..61fe8c9 100644 --- a/src/main/java/biz/nellemann/hmci/InfluxClient.java +++ b/src/main/java/biz/nellemann/hmci/InfluxClient.java @@ -132,58 +132,120 @@ class InfluxClient { return; } - getSystemMemory(system, timestamp).forEach( it -> batchPoints.point(it) ); + getSystemDetails(system, timestamp).forEach( it -> batchPoints.point(it) ); getSystemProcessor(system, timestamp).forEach( it -> batchPoints.point(it) ); + getSystemPhysicalProcessorPool(system, timestamp).forEach( it -> batchPoints.point(it) ); getSystemSharedProcessorPools(system, timestamp).forEach( it -> batchPoints.point(it) ); - getSystemSharedAdapters(system, timestamp).forEach( it -> batchPoints.point(it) ); - getSystemFiberChannelAdapters(system, timestamp).forEach( it -> batchPoints.point(it) ); - getSystemVirtualEthernetAdapters(system, timestamp).forEach( it -> batchPoints.point(it) ); - getSystemViosMemory(system, timestamp).forEach( it -> batchPoints.point(it) ); + getSystemMemory(system, timestamp).forEach( it -> batchPoints.point(it) ); + + getSystemViosDetails(system, timestamp).forEach(it -> batchPoints.point(it) ); getSystemViosProcessor(system, timestamp).forEach( it -> batchPoints.point(it) ); + getSystemViosMemory(system, timestamp).forEach( it -> batchPoints.point(it) ); + + getSystemViosNetworkLpars(system, timestamp).forEach(it -> batchPoints.point(it) ); + getSystemViosNetworkGenericAdapters(system, timestamp).forEach(it -> batchPoints.point(it) ); + getSystemViosNetworkSharedAdapters(system, timestamp).forEach(it -> batchPoints.point(it) ); + getSystemViosNetworkVirtualAdapters(system, timestamp).forEach(it -> batchPoints.point(it) ); + + getSystemViosStorageLpars(system, timestamp).forEach(it -> batchPoints.point(it) ); + getSystemViosFiberChannelAdapters(system, timestamp).forEach(it -> batchPoints.point(it) ); + getSystemViosStoragePhysicalAdapters(system, timestamp).forEach(it -> batchPoints.point(it) ); + getSystemViosStorageVirtualAdapters(system, timestamp).forEach(it -> batchPoints.point(it) ); } - private static List getSystemMemory(ManagedSystem system, Instant timestamp) { - List metrics = system.getMemoryMetrics(); - return processMeasurementMap(metrics, timestamp, "SystemMemory"); + // TODO: server_details + + private static List getSystemDetails(ManagedSystem system, Instant timestamp) { + List metrics = system.getDetails(); + return processMeasurementMap(metrics, timestamp, "server_details"); } private static List getSystemProcessor(ManagedSystem system, Instant timestamp) { List metrics = system.getProcessorMetrics(); - return processMeasurementMap(metrics, timestamp, "SystemProcessor"); + return processMeasurementMap(metrics, timestamp, "server_processor"); + } + + private static List getSystemPhysicalProcessorPool (ManagedSystem system, Instant timestamp) { + List metrics = system.getPhysicalProcessorPool(); + return processMeasurementMap(metrics, timestamp, "server_physicalProcessorPool"); } private static List getSystemSharedProcessorPools(ManagedSystem system, Instant timestamp) { List metrics = system.getSharedProcessorPools(); - return processMeasurementMap(metrics, timestamp, "SystemSharedProcessorPool"); + return processMeasurementMap(metrics, timestamp, "server_sharedProcessorPool"); } - private static List getSystemSharedAdapters(ManagedSystem system, Instant timestamp) { - List metrics = system.getSystemSharedAdapters(); - return processMeasurementMap(metrics, timestamp, "SystemSharedAdapters"); + private static List getSystemMemory(ManagedSystem system, Instant timestamp) { + List metrics = system.getMemoryMetrics(); + return processMeasurementMap(metrics, timestamp, "server_memory"); } - private static List getSystemFiberChannelAdapters(ManagedSystem system, Instant timestamp) { - List metrics = system.getSystemFiberChannelAdapters(); - return processMeasurementMap(metrics, timestamp, "SystemFiberChannelAdapters"); - } - - private static List getSystemVirtualEthernetAdapters(ManagedSystem system, Instant timestamp) { - List metrics = system.getSystemVirtualEthernetAdapters(); - return processMeasurementMap(metrics, timestamp, "SystemVirtualEthernetAdapters"); - } - - private static List getSystemViosMemory(ManagedSystem system, Instant timestamp) { - List metrics = system.getViosMemoryMetrics(); - return processMeasurementMap(metrics, timestamp, "SystemViosMemory"); + private static List getSystemViosDetails(ManagedSystem system, Instant timestamp) { + List metrics = system.getViosDetails(); + return processMeasurementMap(metrics, timestamp, "vios_details"); } private static List getSystemViosProcessor(ManagedSystem system, Instant timestamp) { List metrics = system.getViosProcessorMetrics(); - return processMeasurementMap(metrics, timestamp, "SystemViosProcessor"); + return processMeasurementMap(metrics, timestamp, "vios_processor"); } + private static List getSystemViosMemory(ManagedSystem system, Instant timestamp) { + List metrics = system.getViosMemoryMetrics(); + return processMeasurementMap(metrics, timestamp, "vios_memory"); + } + + private static List getSystemViosNetworkLpars(ManagedSystem system, Instant timestamp) { + List metrics = system.getViosNetworkLpars(); + return processMeasurementMap(metrics, timestamp, "vios_network_lpars"); + } + + private static List getSystemViosNetworkVirtualAdapters(ManagedSystem system, Instant timestamp) { + List metrics = system.getViosNetworkVirtualAdapters(); + return processMeasurementMap(metrics, timestamp, "vios_network_virtual"); + } + + private static List getSystemViosNetworkSharedAdapters(ManagedSystem system, Instant timestamp) { + List metrics = system.getViosNetworkSharedAdapters(); + return processMeasurementMap(metrics, timestamp, "vios_network_shared"); + } + + private static List getSystemViosNetworkGenericAdapters(ManagedSystem system, Instant timestamp) { + List metrics = system.getViosNetworkGenericAdapters(); + return processMeasurementMap(metrics, timestamp, "vios_network_generic"); + } + + + private static List getSystemViosStorageLpars(ManagedSystem system, Instant timestamp) { + List metrics = system.getViosStorageLpars(); + return processMeasurementMap(metrics, timestamp, "vios_storage_lpars"); + } + + private static List getSystemViosFiberChannelAdapters(ManagedSystem system, Instant timestamp) { + List metrics = system.getViosStorageFiberChannelAdapters(); + return processMeasurementMap(metrics, timestamp, "vios_storage_FC"); + } + + /* + private static List getSystemViosSharedStoragePools(ManagedSystem system, Instant timestamp) { + List metrics = system.getViosStorageSharedStoragePools(); + return processMeasurementMap(metrics, timestamp, "vios_storage_SSP"); + }*/ + + private static List getSystemViosStoragePhysicalAdapters(ManagedSystem system, Instant timestamp) { + List metrics = system.getViosStoragePhysicalAdapters(); + return processMeasurementMap(metrics, timestamp, "vios_storage_physical"); + } + + private static List getSystemViosStorageVirtualAdapters(ManagedSystem system, Instant timestamp) { + List metrics = system.getViosStorageVirtualAdapters(); + return processMeasurementMap(metrics, timestamp, "vios_storage_virtual"); + } + + + /* Logical Partitions @@ -202,39 +264,44 @@ class InfluxClient { return; } - getPartitionAffinityScore(partition, timestamp).forEach( it -> batchPoints.point(it)); + getPartitionDetails(partition, timestamp).forEach( it -> batchPoints.point(it)); getPartitionMemory(partition, timestamp).forEach( it -> batchPoints.point(it)); getPartitionProcessor(partition, timestamp).forEach( it -> batchPoints.point(it)); - getPartitionVirtualEthernetAdapter(partition, timestamp).forEach( it -> batchPoints.point(it)); - getPartitionVirtualFiberChannelAdapter(partition, timestamp).forEach( it -> batchPoints.point(it)); + getPartitionNetworkVirtual(partition, timestamp).forEach(it -> batchPoints.point(it)); + getPartitionStorageVirtualGeneric(partition, timestamp).forEach(it -> batchPoints.point(it)); + getPartitionStorageVirtualFibreChannel(partition, timestamp).forEach(it -> batchPoints.point(it)); } - private static List getPartitionAffinityScore(LogicalPartition partition, Instant timestamp) { - List metrics = partition.getAffinityScore(); - return processMeasurementMap(metrics, timestamp, "PartitionAffinityScore"); - } - - private static List getPartitionMemory(LogicalPartition partition, Instant timestamp) { - List metrics = partition.getMemoryMetrics(); - return processMeasurementMap(metrics, timestamp, "PartitionMemory"); + private static List getPartitionDetails(LogicalPartition partition, Instant timestamp) { + List metrics = partition.getDetails(); + return processMeasurementMap(metrics, timestamp, "lpar_details"); } private static List getPartitionProcessor(LogicalPartition partition, Instant timestamp) { List metrics = partition.getProcessorMetrics(); - return processMeasurementMap(metrics, timestamp, "PartitionProcessor"); + return processMeasurementMap(metrics, timestamp, "lpar_processor"); } - private static List getPartitionVirtualEthernetAdapter(LogicalPartition partition, Instant timestamp) { + private static List getPartitionMemory(LogicalPartition partition, Instant timestamp) { + List metrics = partition.getMemoryMetrics(); + return processMeasurementMap(metrics, timestamp, "lpar_memory"); + } + + private static List getPartitionNetworkVirtual(LogicalPartition partition, Instant timestamp) { List metrics = partition.getVirtualEthernetAdapterMetrics(); - return processMeasurementMap(metrics, timestamp, "PartitionVirtualEthernetAdapters"); + return processMeasurementMap(metrics, timestamp, "lpar_network_virtual"); } - private static List getPartitionVirtualFiberChannelAdapter(LogicalPartition partition, Instant timestamp) { - List metrics = partition.getVirtualFiberChannelAdaptersMetrics(); - return processMeasurementMap(metrics, timestamp, "PartitionVirtualFiberChannelAdapters"); + private static List getPartitionStorageVirtualGeneric(LogicalPartition partition, Instant timestamp) { + List metrics = partition.getVirtualGenericAdapterMetrics(); + return processMeasurementMap(metrics, timestamp, "lpar_storage_generic"); } + private static List getPartitionStorageVirtualFibreChannel(LogicalPartition partition, Instant timestamp) { + List metrics = partition.getVirtualFibreChannelAdapterMetrics(); + return processMeasurementMap(metrics, timestamp, "lpar_storage_virtual"); + } /* @@ -262,12 +329,12 @@ class InfluxClient { private static List getSystemEnergyPower(SystemEnergy system, Instant timestamp) { List metrics = system.getPowerMetrics(); - return processMeasurementMap(metrics, timestamp, "SystemEnergyPower"); + return processMeasurementMap(metrics, timestamp, "server_energy_power"); } private static List getSystemEnergyTemperature(SystemEnergy system, Instant timestamp) { List metrics = system.getThermalMetrics(); - return processMeasurementMap(metrics, timestamp, "SystemEnergyThermal"); + return processMeasurementMap(metrics, timestamp, "server_energy_thermal"); } @@ -280,24 +347,33 @@ class InfluxClient { List listOfPoints = new ArrayList<>(); measurements.forEach( m -> { + Point.Builder builder = Point.measurement(measurement) + .time(timestamp.toEpochMilli(), TimeUnit.MILLISECONDS); + // Iterate fields m.fields.forEach((fieldName, fieldValue) -> { + log.trace("processMeasurementMap() " + measurement + " - fieldName: " + fieldName + ", fieldValue: " + fieldValue); - - Point.Builder builder = Point.measurement(measurement) - .time(timestamp.toEpochMilli(), TimeUnit.MILLISECONDS) - .tag("name", fieldName) - .addField("value", fieldValue); - - // For each field, we add all tags - m.tags.forEach((tagName, tagValue) -> { - builder.tag(tagName, tagValue); - log.trace("processMeasurementMap() " + measurement + " - tagName: " + tagName + ", tagValue: " + tagValue); - }); - - listOfPoints.add(builder.build()); + if(fieldValue instanceof Number) { + Number num = (Number) fieldValue; + builder.addField(fieldName, num); + } else if(fieldValue instanceof Boolean) { + Boolean bol = (Boolean) fieldValue; + builder.addField(fieldName, bol); + } else { + String str = (String) fieldValue; + builder.addField(fieldName, str); + } }); + // Iterate tags + m.tags.forEach((tagName, tagValue) -> { + log.trace("processMeasurementMap() " + measurement + " - tagName: " + tagName + ", tagValue: " + tagValue); + builder.tag(tagName, tagValue); + }); + + listOfPoints.add(builder.build()); + }); return listOfPoints; diff --git a/src/main/java/biz/nellemann/hmci/LogicalPartition.java b/src/main/java/biz/nellemann/hmci/LogicalPartition.java index 51a448e..8fb1bcc 100644 --- a/src/main/java/biz/nellemann/hmci/LogicalPartition.java +++ b/src/main/java/biz/nellemann/hmci/LogicalPartition.java @@ -47,34 +47,40 @@ class LogicalPartition extends MetaSystem { } - List getAffinityScore() { + // LPAR Details + List getDetails() { List list = new ArrayList<>(); Map tagsMap = new HashMap<>(); - tagsMap.put("system", system.name); - tagsMap.put("partition", name); - log.trace("getAffinityScore() - tags: " + tagsMap.toString()); + tagsMap.put("servername", system.name); + tagsMap.put("lparname", name); + log.trace("getDetails() - tags: " + tagsMap.toString()); - Map fieldsMap = new HashMap<>(); + Map fieldsMap = new HashMap<>(); + fieldsMap.put("id", metrics.systemUtil.sample.lparsUtil.id); + fieldsMap.put("type", metrics.systemUtil.sample.lparsUtil.type); + fieldsMap.put("state", metrics.systemUtil.sample.lparsUtil.state); + fieldsMap.put("osType", metrics.systemUtil.sample.lparsUtil.osType); fieldsMap.put("affinityScore", metrics.systemUtil.sample.lparsUtil.affinityScore); - log.trace("getAffinityScore() - fields: " + fieldsMap.toString()); + log.trace("getDetails() - fields: " + fieldsMap.toString()); list.add(new Measurement(tagsMap, fieldsMap)); return list; } + // LPAR Memory List getMemoryMetrics() { List list = new ArrayList<>(); Map tagsMap = new HashMap<>(); - tagsMap.put("system", system.name); - tagsMap.put("partition", name); + tagsMap.put("servername", system.name); + tagsMap.put("lparname", name); log.trace("getMemoryMetrics() - tags: " + tagsMap.toString()); - Map fieldsMap = new HashMap<>(); + Map fieldsMap = new HashMap<>(); fieldsMap.put("logicalMem", metrics.systemUtil.sample.lparsUtil.memory.logicalMem); fieldsMap.put("backedPhysicalMem", metrics.systemUtil.sample.lparsUtil.memory.backedPhysicalMem); log.trace("getMemoryMetrics() - fields: " + fieldsMap.toString()); @@ -84,27 +90,31 @@ class LogicalPartition extends MetaSystem { } + // LPAR Processor List getProcessorMetrics() { List list = new ArrayList<>(); HashMap tagsMap = new HashMap<>(); - tagsMap.put("system", system.name); - tagsMap.put("partition", name); + tagsMap.put("servername", system.name); + tagsMap.put("lparname", name); log.trace("getProcessorMetrics() - tags: " + tagsMap.toString()); - HashMap fieldsMap = new HashMap<>(); + HashMap fieldsMap = new HashMap<>(); fieldsMap.put("utilizedProcUnits", metrics.systemUtil.sample.lparsUtil.processor.utilizedProcUnits); + fieldsMap.put("entitledProcUnits", metrics.systemUtil.sample.lparsUtil.processor.entitledProcUnits); + fieldsMap.put("donatedProcUnits", metrics.systemUtil.sample.lparsUtil.processor.donatedProcUnits); + fieldsMap.put("idleProcUnits", metrics.systemUtil.sample.lparsUtil.processor.idleProcUnits); + fieldsMap.put("maxProcUnits", metrics.systemUtil.sample.lparsUtil.processor.maxProcUnits); fieldsMap.put("maxVirtualProcessors", metrics.systemUtil.sample.lparsUtil.processor.maxVirtualProcessors); fieldsMap.put("currentVirtualProcessors", metrics.systemUtil.sample.lparsUtil.processor.currentVirtualProcessors); - //fieldsMap.donatedProcUnits: metrics.systemUtil.utilSamples.first().lparsUtil.first().processor.donatedProcUnits.first(), - fieldsMap.put("entitledProcUnits", metrics.systemUtil.sample.lparsUtil.processor.entitledProcUnits); - //fieldsMap.idleProcUnits: metrics.systemUtil.utilSamples.first().lparsUtil.first().processor.idleProcUnits.first(), - //fieldsMap.maxProcUnits: metrics.systemUtil.utilSamples.first().lparsUtil.first().processor.maxProcUnits.first(), fieldsMap.put("utilizedCappedProcUnits", metrics.systemUtil.sample.lparsUtil.processor.utilizedCappedProcUnits); fieldsMap.put("utilizedUncappedProcUnits", metrics.systemUtil.sample.lparsUtil.processor.utilizedUncappedProcUnits); fieldsMap.put("timePerInstructionExecution", metrics.systemUtil.sample.lparsUtil.processor.timeSpentWaitingForDispatch); fieldsMap.put("timeSpentWaitingForDispatch", metrics.systemUtil.sample.lparsUtil.processor.timePerInstructionExecution); + fieldsMap.put("mode", metrics.systemUtil.sample.lparsUtil.processor.mode); + fieldsMap.put("weight", metrics.systemUtil.sample.lparsUtil.processor.weight); + fieldsMap.put("poolId", metrics.systemUtil.sample.lparsUtil.processor.poolId); log.trace("getProcessorMetrics() - fields: " + fieldsMap.toString()); list.add(new Measurement(tagsMap, fieldsMap)); @@ -112,6 +122,7 @@ class LogicalPartition extends MetaSystem { } + // LPAR Network - Virtual List getVirtualEthernetAdapterMetrics() { List list = new ArrayList<>(); @@ -119,19 +130,29 @@ class LogicalPartition extends MetaSystem { metrics.systemUtil.sample.lparsUtil.network.virtualEthernetAdapters.forEach( adapter -> { HashMap tagsMap = new HashMap<>(); - tagsMap.put("system", system.name); - tagsMap.put("partition", name); - tagsMap.put("sea", adapter.sharedEthernetAdapterId); + tagsMap.put("servername", system.name); + tagsMap.put("lparname", name); + tagsMap.put("location", adapter.physicalLocation); tagsMap.put("viosId", adapter.viosId.toString()); tagsMap.put("vlanId", adapter.vlanId.toString()); tagsMap.put("vswitchId", adapter.vswitchId.toString()); log.trace("getVirtualEthernetAdapterMetrics() - tags: " + tagsMap.toString()); - HashMap fieldsMap = new HashMap<>(); + HashMap fieldsMap = new HashMap<>(); + fieldsMap.put("droppedPackets", adapter.droppedPackets); + fieldsMap.put("droppedPhysicalPackets", adapter.droppedPhysicalPackets); + fieldsMap.put("isPortVlanId", adapter.isPortVlanId); fieldsMap.put("receivedPhysicalBytes", adapter.receivedPhysicalBytes); + fieldsMap.put("receivedPhysicalPackets", adapter.receivedPhysicalPackets); fieldsMap.put("sentPhysicalBytes", adapter.sentPhysicalBytes); + fieldsMap.put("sentPhysicalPackets", adapter.sentPhysicalPackets); fieldsMap.put("receivedBytes", adapter.receivedBytes); + fieldsMap.put("receivedPackets", adapter.receivedPackets); fieldsMap.put("sentBytes", adapter.sentBytes); + fieldsMap.put("sentPackets", adapter.sentPackets); + fieldsMap.put("transferredBytes", adapter.transferredBytes); + fieldsMap.put("transferredPhysicalBytes", adapter.transferredPhysicalBytes); + fieldsMap.put("sharedEthernetAdapterId", adapter.sharedEthernetAdapterId); log.trace("getVirtualEthernetAdapterMetrics() - fields: " + fieldsMap.toString()); list.add(new Measurement(tagsMap, fieldsMap)); @@ -141,23 +162,27 @@ class LogicalPartition extends MetaSystem { } - List getVirtualFiberChannelAdaptersMetrics() { + // LPAR Storage - Virtual Generic + List getVirtualGenericAdapterMetrics() { List list = new ArrayList<>(); - metrics.systemUtil.sample.lparsUtil.storage.virtualFiberChannelAdapters.forEach( adapter -> { + metrics.systemUtil.sample.lparsUtil.storage.genericVirtualAdapters.forEach( adapter -> { HashMap tagsMap = new HashMap<>(); - tagsMap.put("system", system.name); - tagsMap.put("partition", name); + tagsMap.put("servername", system.name); + tagsMap.put("lparname", name); tagsMap.put("viosId", adapter.viosId.toString()); - tagsMap.put("wwpn", adapter.wwpn); - log.trace("getVirtualFiberChannelAdaptersMetrics() - tags: " + tagsMap.toString()); + tagsMap.put("location", adapter.physicalLocation); + tagsMap.put("id", adapter.id); + log.trace("getVirtualGenericAdapterMetrics() - tags: " + tagsMap.toString()); - HashMap fieldsMap = new HashMap<>(); - fieldsMap.put("transmittedBytes", adapter.transmittedBytes.get(0)); - fieldsMap.put("writeBytes", adapter.writeBytes.get(0)); - fieldsMap.put("readBytes", adapter.readBytes.get(0)); - log.trace("getVirtualFiberChannelAdaptersMetrics() - fields: " + fieldsMap.toString()); + HashMap fieldsMap = new HashMap<>(); + fieldsMap.put("numOfReads", adapter.numOfReads); + fieldsMap.put("numOfWrites", adapter.numOfWrites); + fieldsMap.put("writeBytes", adapter.writeBytes); + fieldsMap.put("readBytes", adapter.readBytes); + fieldsMap.put("type", adapter.type); + log.trace("getVirtualGenericAdapterMetrics() - fields: " + fieldsMap.toString()); list.add(new Measurement(tagsMap, fieldsMap)); }); @@ -165,4 +190,34 @@ class LogicalPartition extends MetaSystem { return list; } + // LPAR Storage - Virtual FC + List getVirtualFibreChannelAdapterMetrics() { + + List list = new ArrayList<>(); + metrics.systemUtil.sample.lparsUtil.storage.virtualFiberChannelAdapters.forEach( adapter -> { + + HashMap tagsMap = new HashMap<>(); + tagsMap.put("servername", system.name); + tagsMap.put("lparname", name); + tagsMap.put("viosId", adapter.viosId.toString()); + tagsMap.put("location", adapter.physicalLocation); + log.trace("getVirtualFibreChannelAdapterMetrics() - tags: " + tagsMap.toString()); + + HashMap fieldsMap = new HashMap<>(); + fieldsMap.put("numOfReads", adapter.numOfReads); + fieldsMap.put("numOfWrites", adapter.numOfWrites); + fieldsMap.put("writeBytes", adapter.writeBytes); + fieldsMap.put("readBytes", adapter.readBytes); + //fieldsMap.put("transmittedBytes", adapter.transmittedBytes); + //fieldsMap.put("wwpn", adapter.wwpn); + //fieldsMap.put("wwpn2", adapter.wwpn2); + log.trace("getVirtualFibreChannelAdapterMetrics() - fields: " + fieldsMap.toString()); + + list.add(new Measurement(tagsMap, fieldsMap)); + }); + + return list; + } + + } diff --git a/src/main/java/biz/nellemann/hmci/ManagedSystem.java b/src/main/java/biz/nellemann/hmci/ManagedSystem.java index 74e25b7..5a0d05a 100644 --- a/src/main/java/biz/nellemann/hmci/ManagedSystem.java +++ b/src/main/java/biz/nellemann/hmci/ManagedSystem.java @@ -52,36 +52,62 @@ class ManagedSystem extends MetaSystem { } + List getDetails() { + + List list = new ArrayList<>(); + + HashMap tagsMap = new HashMap<>(); + tagsMap.put("servername", name); + log.trace("getDetails() - tags: " + tagsMap.toString()); + + 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.toString()); + + list.add(new Measurement(tagsMap, fieldsMap)); + return list; + } + + + // Memory List getMemoryMetrics() { List list = new ArrayList<>(); HashMap tagsMap = new HashMap<>(); - tagsMap.put("system", name); + tagsMap.put("servername", name); log.trace("getMemoryMetrics() - tags: " + tagsMap.toString()); - Map fieldsMap = new HashMap<>(); + 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.toString()); list.add(new Measurement(tagsMap, fieldsMap)); - return list; } + // Processor List getProcessorMetrics() { List list = new ArrayList<>(); HashMap tagsMap = new HashMap<>(); - tagsMap.put("system", name); + tagsMap.put("servername", name); log.trace("getProcessorMetrics() - tags: " + tagsMap.toString()); - HashMap fieldsMap = new HashMap<>(); + 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); @@ -92,20 +118,24 @@ class ManagedSystem extends MetaSystem { return list; } - + // Shared ProcessorPools List getSharedProcessorPools() { List list = new ArrayList<>(); - metrics.systemUtil.sample.serverUtil.sharedProcessorPool.forEach(adapter -> { + metrics.systemUtil.sample.serverUtil.sharedProcessorPool.forEach(sharedProcessorPool -> { HashMap tagsMap = new HashMap<>(); - tagsMap.put("system", name); - tagsMap.put("pool", adapter.name); + tagsMap.put("servername", name); + tagsMap.put("pool", sharedProcessorPool.id); + tagsMap.put("poolname", sharedProcessorPool.name); log.trace("getSharedProcessorPools() - tags: " + tagsMap.toString()); - HashMap fieldsMap = new HashMap<>(); - fieldsMap.put("assignedProcUnits", adapter.assignedProcUnits); - fieldsMap.put("availableProcUnits", adapter.availableProcUnits); + 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.toString()); list.add(new Measurement(tagsMap, fieldsMap)); @@ -115,18 +145,65 @@ class ManagedSystem extends MetaSystem { } - // VIOs Memory + // Physical ProcessorPool + List getPhysicalProcessorPool() { + + List list = new ArrayList<>(); + + HashMap tagsMap = new HashMap<>(); + tagsMap.put("servername", name); + log.trace("getPhysicalProcessorPool() - tags: " + tagsMap.toString()); + + 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.toString()); + + 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.toString()); + + 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.toString()); + + 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("system", name); - tagsMap.put("vios", vios.name); + tagsMap.put("servername", name); + tagsMap.put("viosname", vios.name); log.trace("getViosMemoryMetrics() - tags: " + tagsMap.toString()); - HashMap fieldsMap = new HashMap<>(); + HashMap fieldsMap = new HashMap<>(); Number assignedMem = getNumberMetricObject(vios.memory.assignedMem); Number utilizedMem = getNumberMetricObject(vios.memory.utilizedMem); if(assignedMem != null) { @@ -137,7 +214,7 @@ class ManagedSystem extends MetaSystem { } if(assignedMem != null && utilizedMem != null) { Number usedMemPct = (utilizedMem.intValue() * 100 ) / assignedMem.intValue(); - fieldsMap.put("utilizedMemPct", usedMemPct.floatValue()); + fieldsMap.put("utilizedPct", usedMemPct.floatValue()); } log.trace("getViosMemoryMetrics() - fields: " + fieldsMap.toString()); @@ -148,26 +225,30 @@ class ManagedSystem extends MetaSystem { } - // VIOs Processor + // VIO Processor List getViosProcessorMetrics() { List list = new ArrayList<>(); metrics.systemUtil.sample.viosUtil.forEach(vios -> { HashMap tagsMap = new HashMap<>(); - tagsMap.put("system", name); - tagsMap.put("vios", vios.name); + tagsMap.put("servername", name); + tagsMap.put("viosname", vios.name); log.trace("getViosProcessorMetrics() - tags: " + tagsMap.toString()); - HashMap fieldsMap = new HashMap<>(); + HashMap fieldsMap = new HashMap<>(); fieldsMap.put("utilizedProcUnits", vios.processor.utilizedProcUnits); - fieldsMap.put("maxVirtualProcessors", vios.processor.maxVirtualProcessors); - fieldsMap.put("currentVirtualProcessors", vios.processor.currentVirtualProcessors); - fieldsMap.put("entitledProcUnits", vios.processor.entitledProcUnits); fieldsMap.put("utilizedCappedProcUnits", vios.processor.utilizedCappedProcUnits); fieldsMap.put("utilizedUncappedProcUnits", vios.processor.utilizedUncappedProcUnits); - fieldsMap.put("timePerInstructionExecution", vios.processor.timeSpentWaitingForDispatch); + 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); log.trace("getViosProcessorMetrics() - fields: " + fieldsMap.toString()); list.add(new Measurement(tagsMap, fieldsMap)); @@ -177,8 +258,30 @@ class ManagedSystem extends MetaSystem { } - // VIOs - List getSystemSharedAdapters() { + // 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.toString()); + + HashMap fieldsMap = new HashMap<>(); + fieldsMap.put("clientlpars", vios.network.clientLpars.size()); + log.trace("getViosNetworkLpars() - fields: " + fieldsMap.toString()); + + list.add(new Measurement(tagsMap, fieldsMap)); + }); + + return list; + } + + + // VIO Network - Shared + List getViosNetworkSharedAdapters() { List list = new ArrayList<>(); metrics.systemUtil.sample.viosUtil.forEach(vios -> { @@ -186,48 +289,23 @@ class ManagedSystem extends MetaSystem { vios.network.sharedAdapters.forEach(adapter -> { HashMap tagsMap = new HashMap<>(); - tagsMap.put("system", name); - tagsMap.put("type", adapter.type); - tagsMap.put("vios", vios.name); - tagsMap.put("device", adapter.physicalLocation); - log.trace("getSystemSharedAdapters() - tags: " + tagsMap.toString()); + tagsMap.put("servername", name); + tagsMap.put("viosname", vios.name); + //tagsMap.put("id", adapter.id); + tagsMap.put("location", adapter.physicalLocation); + log.trace("getViosNetworkSharedAdapters() - tags: " + tagsMap.toString()); - HashMap fieldsMap = new HashMap<>(); + 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("getSystemSharedAdapters() - fields: " + fieldsMap.toString()); - - list.add(new Measurement(tagsMap, fieldsMap)); - }); - - }); - - return list; - } - - // VIOs - List getSystemFiberChannelAdapters() { - - List list = new ArrayList<>(); - metrics.systemUtil.sample.viosUtil.forEach( vios -> { - log.trace("getSystemFiberChannelAdapters() - VIOS: " + vios.name); - - vios.storage.fiberChannelAdapters.forEach( adapter -> { - - HashMap tagsMap = new HashMap<>(); - tagsMap.put("id", adapter.id); - tagsMap.put("system", name); - tagsMap.put("wwpn", adapter.wwpn); - tagsMap.put("vios", vios.name); - tagsMap.put("device", adapter.physicalLocation); - log.trace("getSystemFiberChannelAdapters() - tags: " + tagsMap.toString()); - - HashMap fieldsMap = new HashMap<>(); - fieldsMap.put("writeBytes", adapter.writeBytes); - fieldsMap.put("readBytes", adapter.readBytes); - fieldsMap.put("transmittedBytes", adapter.transmittedBytes); - log.trace("getSystemFiberChannelAdapters() - fields: " + fieldsMap.toString()); + fieldsMap.put("physicalLocation", adapter.physicalLocation); + log.trace("getViosNetworkSharedAdapters() - fields: " + fieldsMap.toString()); list.add(new Measurement(tagsMap, fieldsMap)); }); @@ -238,73 +316,8 @@ class ManagedSystem extends MetaSystem { } - // VIOs - /* - List getSystemGenericPhysicalAdapters() { - - List list = new ArrayList<>(); - - metrics.systemUtil.sample.viosUtil.forEach( vios -> { - - vios.storage.genericPhysicalAdapters.forEach( adapter -> { - - HashMap tagsMap = new HashMap(); - tagsMap.put("id", adapter.id); - tagsMap.put("system", name); - tagsMap.put("vios", vios.name); - tagsMap.put("device", adapter.physicalLocation); - log.trace("getSystemGenericPhysicalAdapters() - tags: " + tagsMap.toString()); - - HashMap fieldsMap = new HashMap(); - fieldsMap.put("writeBytes", adapter.writeBytes); - fieldsMap.put("readBytes", adapter.readBytes); - fieldsMap.put("transmittedBytes", adapter.transmittedBytes); - log.trace("getSystemGenericPhysicalAdapters() - fields: " + fieldsMap.toString()); - - list.add(new Measurement(tagsMap, fieldsMap)); - }); - - }); - - return list; - } - */ - - - // VIOs - /* - List getSystemGenericVirtualAdapters() { - - List list = new ArrayList<>(); - - metrics.systemUtil.sample.viosUtil.forEach( vios -> { - - vios.storage.genericVirtualAdapters.forEach( adapter -> { - - HashMap tagsMap = new HashMap(); - tagsMap.put("id", adapter.id); - tagsMap.put("system", name); - tagsMap.put("vios", vios.name); - tagsMap.put("device", adapter.physicalLocation); - log.trace("getSystemGenericVirtualAdapters() - tags: " + tagsMap.toString()); - - HashMap fieldsMap = new HashMap(); - fieldsMap.put("writeBytes", adapter.writeBytes); - fieldsMap.put("readBytes", adapter.readBytes); - fieldsMap.put("transmittedBytes", adapter.transmittedBytes); - log.trace("getSystemGenericVirtualAdapters() - fields: " + fieldsMap.toString()); - - list.add(new Measurement(tagsMap, fieldsMap)); - }); - - }); - - return list; - } - */ - - // VIOs - List getSystemVirtualEthernetAdapters() { + // VIO Network - Virtual + List getViosNetworkVirtualAdapters() { List list = new ArrayList<>(); @@ -313,15 +326,29 @@ class ManagedSystem extends MetaSystem { vios.network.virtualEthernetAdapters.forEach( adapter -> { HashMap tagsMap = new HashMap<>(); - tagsMap.put("system", name); - tagsMap.put("vios", vios.name); - tagsMap.put("device", adapter.physicalLocation); - log.trace("getSystemGenericVirtualAdapters() - tags: " + tagsMap.toString()); + 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.toString()); - HashMap fieldsMap = new HashMap<>(); - fieldsMap.put("sentBytes", adapter.sentBytes); + HashMap fieldsMap = new HashMap<>(); + fieldsMap.put("droppedPackets", adapter.droppedPackets); + fieldsMap.put("droppedPhysicalPackets", adapter.droppedPhysicalPackets); + fieldsMap.put("isPortVlanId", adapter.isPortVlanId); fieldsMap.put("receivedBytes", adapter.receivedBytes); - log.trace("getSystemGenericVirtualAdapters() - fields: " + fieldsMap.toString()); + 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); + fieldsMap.put("physicalLocation", adapter.physicalLocation); + log.trace("getViosNetworkVirtualAdapters() - fields: " + fieldsMap.toString()); list.add(new Measurement(tagsMap, fieldsMap)); }); @@ -331,4 +358,193 @@ class ManagedSystem extends MetaSystem { 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.toString()); + + 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.toString()); + + 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.toString()); + + HashMap fieldsMap = new HashMap<>(); + fieldsMap.put("clientlpars", vios.storage.clientLpars.size()); + log.trace("getViosStorageLpars() - fields: " + fieldsMap.toString()); + + 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("servername", name); + tagsMap.put("viosname", vios.name); + tagsMap.put("location", adapter.physicalLocation); + log.trace("getViosStorageFiberChannelAdapters() - tags: " + tagsMap.toString()); + + HashMap fieldsMap = new HashMap<>(); + fieldsMap.put("id", adapter.id); + 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("getViosStorageFiberChannelAdapters() - fields: " + fieldsMap.toString()); + + list.add(new Measurement(tagsMap, fieldsMap)); + }); + + }); + + return list; + } + + // VIO Storage SSP TODO + List getViosStorageSharedStoragePools() { + + List list = new ArrayList<>(); + metrics.systemUtil.sample.viosUtil.forEach( vios -> { + log.trace("getViosStorageSharedStoragePools() - VIOS: " + vios.name); + + 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)); + }); + + }); + + 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.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("type", adapter.type); + fieldsMap.put("physicalLocation", adapter.physicalLocation); + log.trace("getViosStoragePhysicalAdapters() - fields: " + fieldsMap.toString()); + + 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.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("type", adapter.type); + fieldsMap.put("physicalLocation", adapter.physicalLocation); + log.trace("getViosStorageVirtualAdapters() - fields: " + fieldsMap.toString()); + + list.add(new Measurement(tagsMap, fieldsMap)); + }); + + }); + + return list; + } } diff --git a/src/main/java/biz/nellemann/hmci/Measurement.java b/src/main/java/biz/nellemann/hmci/Measurement.java index 3b22441..5bbfbfb 100644 --- a/src/main/java/biz/nellemann/hmci/Measurement.java +++ b/src/main/java/biz/nellemann/hmci/Measurement.java @@ -20,9 +20,9 @@ import java.util.Map; public class Measurement { final Map tags; - final Map fields; + final Map fields; - Measurement(Map tags, Map fields) { + Measurement(Map tags, Map fields) { this.tags = tags; this.fields = fields; } diff --git a/src/main/java/biz/nellemann/hmci/SystemEnergy.java b/src/main/java/biz/nellemann/hmci/SystemEnergy.java index a4854b5..678c78e 100644 --- a/src/main/java/biz/nellemann/hmci/SystemEnergy.java +++ b/src/main/java/biz/nellemann/hmci/SystemEnergy.java @@ -47,10 +47,10 @@ class SystemEnergy extends MetaSystem { List list = new ArrayList<>(); HashMap tagsMap = new HashMap<>(); - tagsMap.put("system", system.name); + tagsMap.put("servername", system.name); log.trace("getPowerMetrics() - tags: " + tagsMap.toString()); - Map fieldsMap = new HashMap<>(); + Map fieldsMap = new HashMap<>(); fieldsMap.put("powerReading", metrics.systemUtil.sample.energyUtil.powerUtil.powerReading); log.trace("getPowerMetrics() - fields: " + fieldsMap.toString()); @@ -64,10 +64,10 @@ class SystemEnergy extends MetaSystem { List list = new ArrayList<>(); HashMap tagsMap = new HashMap<>(); - tagsMap.put("system", system.name); + tagsMap.put("servername", system.name); log.trace("getThermalMetrics() - tags: " + tagsMap.toString()); - Map fieldsMap = new HashMap<>(); + Map fieldsMap = new HashMap<>(); for(Temperature t : metrics.systemUtil.sample.energyUtil.thermalUtil.cpuTemperatures) { fieldsMap.put("cpuTemperature_" + t.entityInstance, t.temperatureReading); diff --git a/src/main/java/biz/nellemann/hmci/pcm/GenericAdapter.java b/src/main/java/biz/nellemann/hmci/pcm/GenericAdapter.java index 49fec9f..1aa39c8 100644 --- a/src/main/java/biz/nellemann/hmci/pcm/GenericAdapter.java +++ b/src/main/java/biz/nellemann/hmci/pcm/GenericAdapter.java @@ -1,5 +1,7 @@ package biz.nellemann.hmci.pcm; +import com.serjltt.moshi.adapters.FirstElement; + import java.util.ArrayList; import java.util.List; @@ -8,11 +10,23 @@ public class GenericAdapter { public String id = ""; public String type = ""; public String physicalLocation = ""; - public List receivedPackets = new ArrayList<>(); - public List sentPackets = new ArrayList<>(); - public List droppedPackets = new ArrayList<>(); - public List sentBytes = new ArrayList<>(); - public List receivedBytes = new ArrayList<>(); - public List transferredBytes = new ArrayList<>(); + + @FirstElement + public Number receivedPackets = 0.0; + + @FirstElement + public Number sentPackets = 0.0; + + @FirstElement + public Number droppedPackets = 0.0; + + @FirstElement + public Number sentBytes = 0.0; + + @FirstElement + public Number receivedBytes = 0.0; + + @FirstElement + public Number transferredBytes = 0.0; } diff --git a/src/main/java/biz/nellemann/hmci/pcm/Network.java b/src/main/java/biz/nellemann/hmci/pcm/Network.java index dd2df78..d0449e5 100644 --- a/src/main/java/biz/nellemann/hmci/pcm/Network.java +++ b/src/main/java/biz/nellemann/hmci/pcm/Network.java @@ -5,6 +5,7 @@ import java.util.List; public class Network { + public List clientLpars = new ArrayList<>(); public List genericAdapters = new ArrayList<>(); public List sharedAdapters = new ArrayList<>(); public List virtualEthernetAdapters = new ArrayList<>(); diff --git a/src/main/java/biz/nellemann/hmci/pcm/PhysicalProcessorPool.java b/src/main/java/biz/nellemann/hmci/pcm/PhysicalProcessorPool.java index 9f63bea..1d42657 100644 --- a/src/main/java/biz/nellemann/hmci/pcm/PhysicalProcessorPool.java +++ b/src/main/java/biz/nellemann/hmci/pcm/PhysicalProcessorPool.java @@ -1,14 +1,25 @@ package biz.nellemann.hmci.pcm; +import com.serjltt.moshi.adapters.FirstElement; + import java.util.ArrayList; import java.util.List; public class PhysicalProcessorPool { - public List assignedProcUnits = new ArrayList<>(); - public List utilizedProcUnits = new ArrayList<>(); - public List availableProcUnits = new ArrayList<>(); - public List configuredProcUnits = new ArrayList<>(); - public List borrowedProcUnits = new ArrayList<>(); + @FirstElement + public Number assignedProcUnits = 0.0; + + @FirstElement + public Number utilizedProcUnits = 0.0; + + @FirstElement + public Number availableProcUnits = 0.0; + + @FirstElement + public Number configuredProcUnits = 0.0; + + @FirstElement + public Number borrowedProcUnits = 0.0; } diff --git a/src/main/java/biz/nellemann/hmci/pcm/ServerMemory.java b/src/main/java/biz/nellemann/hmci/pcm/ServerMemory.java index e143482..dee9616 100644 --- a/src/main/java/biz/nellemann/hmci/pcm/ServerMemory.java +++ b/src/main/java/biz/nellemann/hmci/pcm/ServerMemory.java @@ -16,4 +16,7 @@ public class ServerMemory { @FirstElement public Number assignedMemToLpars = 0.0; + @FirstElement + public Number virtualPersistentMem = 0.0; + } diff --git a/src/main/java/biz/nellemann/hmci/pcm/SystemFirmware.java b/src/main/java/biz/nellemann/hmci/pcm/SystemFirmware.java new file mode 100644 index 0000000..2938367 --- /dev/null +++ b/src/main/java/biz/nellemann/hmci/pcm/SystemFirmware.java @@ -0,0 +1,16 @@ +package biz.nellemann.hmci.pcm; + +import com.serjltt.moshi.adapters.FirstElement; + +import java.util.ArrayList; +import java.util.List; + +public class SystemFirmware { + + @FirstElement + public Number utilizedProcUnits = 0.0; + + @FirstElement + public Number assignedMem = 0.0; + +} diff --git a/src/main/java/biz/nellemann/hmci/pcm/UtilInfo.java b/src/main/java/biz/nellemann/hmci/pcm/UtilInfo.java index a5e44b3..39dc0ed 100644 --- a/src/main/java/biz/nellemann/hmci/pcm/UtilInfo.java +++ b/src/main/java/biz/nellemann/hmci/pcm/UtilInfo.java @@ -1,5 +1,7 @@ package biz.nellemann.hmci.pcm; +import com.serjltt.moshi.adapters.FirstElement; + import java.util.ArrayList; import java.util.List; @@ -13,6 +15,8 @@ public class UtilInfo { public String mtms = ""; public String name = ""; public String uuid = ""; - public List metricArrayOrder = new ArrayList<>(); + + @FirstElement + public String metricArrayOrder = ""; } diff --git a/src/main/java/biz/nellemann/hmci/pcm/UtilSample.java b/src/main/java/biz/nellemann/hmci/pcm/UtilSample.java index fea35c2..2f9a3d4 100644 --- a/src/main/java/biz/nellemann/hmci/pcm/UtilSample.java +++ b/src/main/java/biz/nellemann/hmci/pcm/UtilSample.java @@ -9,6 +9,7 @@ public class UtilSample { public String sampleType = ""; public SampleInfo sampleInfo = new SampleInfo(); + public SystemFirmware systemFirmwareUtil = new SystemFirmware(); public ServerUtil serverUtil = new ServerUtil(); public EnergyUtil energyUtil = new EnergyUtil(); public List viosUtil = new ArrayList<>(); diff --git a/src/main/java/biz/nellemann/hmci/pcm/VirtualFiberChannelAdapter.java b/src/main/java/biz/nellemann/hmci/pcm/VirtualFiberChannelAdapter.java index fd9401d..a946805 100644 --- a/src/main/java/biz/nellemann/hmci/pcm/VirtualFiberChannelAdapter.java +++ b/src/main/java/biz/nellemann/hmci/pcm/VirtualFiberChannelAdapter.java @@ -1,5 +1,7 @@ package biz.nellemann.hmci.pcm; +import com.serjltt.moshi.adapters.FirstElement; + import java.util.ArrayList; import java.util.List; @@ -10,11 +12,23 @@ public class VirtualFiberChannelAdapter { public String physicalLocation = ""; public String physicalPortWWPN = ""; public Integer viosId = 0; - public List numOfReads = new ArrayList<>(); - public List numOfWrites = new ArrayList<>(); - public List readBytes = new ArrayList<>(); - public List writeBytes = new ArrayList<>(); - public List runningSpeed = new ArrayList<>(); - public List transmittedBytes = new ArrayList<>(); + + @FirstElement + public Number numOfReads = 0.0; + + @FirstElement + public Number numOfWrites = 0.0; + + @FirstElement + public Number readBytes = 0.0; + + @FirstElement + public Number writeBytes = 0.0; + + @FirstElement + public Number runningSpeed = 0.0; + + @FirstElement + public Number transmittedBytes = 0.0; } diff --git a/src/test/groovy/biz/nellemann/hmci/LogicalPartitionTest.groovy b/src/test/groovy/biz/nellemann/hmci/LogicalPartitionTest.groovy index 0b08cac..95f9e7a 100644 --- a/src/test/groovy/biz/nellemann/hmci/LogicalPartitionTest.groovy +++ b/src/test/groovy/biz/nellemann/hmci/LogicalPartitionTest.groovy @@ -24,6 +24,29 @@ class LogicalPartitionTest extends Specification { } + + void "test getDetails"() { + + setup: + def testFile = new File(getClass().getResource('/pcm-data-logical-partition.json').toURI()) + def testJson = testFile.getText('UTF-8') + ManagedSystem system = new ManagedSystem("e09834d1-c930-3883-bdad-405d8e26e166", "Test Name","Test Type", "Test Model", "Test S/N") + LogicalPartition lpar = new LogicalPartition("2DE05DB6-8AD5-448F-8327-0F488D287E82", "9Flash01", "OS400", system) + + when: + lpar.processMetrics(testJson) + List listOfMeasurements = lpar.getDetails() + + then: + listOfMeasurements.size() == 1 + listOfMeasurements.first().fields['affinityScore'] == 100.0 + listOfMeasurements.first().fields['osType'] == 'Linux' + listOfMeasurements.first().fields['type'] == 'AIX/Linux' + listOfMeasurements.first().tags['lparname'] == '9Flash01' + + } + + void "test getMemoryMetrics"() { setup: @@ -39,7 +62,7 @@ class LogicalPartitionTest extends Specification { then: listOfMeasurements.size() == 1 listOfMeasurements.first().fields['logicalMem'] == 8192.000 - listOfMeasurements.first().tags['partition'] == '9Flash01' + listOfMeasurements.first().tags['lparname'] == '9Flash01' } @@ -58,7 +81,7 @@ class LogicalPartitionTest extends Specification { then: listOfMeasurements.size() == 1 listOfMeasurements.first().fields['utilizedProcUnits'] == 0.001 - listOfMeasurements.first().tags['partition'] == '9Flash01' + listOfMeasurements.first().tags['lparname'] == '9Flash01' } @@ -77,7 +100,7 @@ class LogicalPartitionTest extends Specification { then: listOfMeasurements.size() == 1 listOfMeasurements.first().fields['receivedBytes'] == 276.467 - listOfMeasurements.first().tags['sea'] == 'ent5' + listOfMeasurements.first().tags['location'] == 'U9009.42A.21F64EV-V13-C32' } void "test getVirtualFiberChannelAdaptersMetrics"() { @@ -90,7 +113,7 @@ class LogicalPartitionTest extends Specification { when: lpar.processMetrics(testJson) - List listOfMeasurements = lpar.getVirtualFiberChannelAdaptersMetrics() + List listOfMeasurements = lpar.getVirtualFibreChannelAdapterMetrics() then: listOfMeasurements.size() == 4 diff --git a/src/test/groovy/biz/nellemann/hmci/ManagedSystemTest.groovy b/src/test/groovy/biz/nellemann/hmci/ManagedSystemTest.groovy index cf12150..95a7e8f 100644 --- a/src/test/groovy/biz/nellemann/hmci/ManagedSystemTest.groovy +++ b/src/test/groovy/biz/nellemann/hmci/ManagedSystemTest.groovy @@ -24,6 +24,23 @@ class ManagedSystemTest extends Specification { } + void "test getDetails"() { + + setup: + def testFile = new File(getClass().getResource('/pcm-data-managed-system.json').toURI()) + def testJson = testFile.getText('UTF-8') + ManagedSystem system = new ManagedSystem("e09834d1-c930-3883-bdad-405d8e26e166", "Test Name","Test Type", "Test Model", "Test S/N") + + when: + system.processMetrics(testJson) + List listOfMeasurements = system.getDetails() + + then: + listOfMeasurements.size() == 1 + listOfMeasurements.first().tags['servername'] == 'Test Name' + listOfMeasurements.first().fields['utilizedProcUnits'] == 0.0 + listOfMeasurements.first().fields['assignedMem'] == 5632.0 + } void "test getMemoryMetrics"() { @@ -103,7 +120,6 @@ class ManagedSystemTest extends Specification { listOfMeasurements.size() == 2 listOfMeasurements.first().fields['assignedMem'] == 8192.000 listOfMeasurements.first().fields['utilizedMem'] == 2093.000 - listOfMeasurements.first().fields['utilizedMemPct'] == 25.000 } void "test getViosProcessorMetrics"() {