Initial work on preparing metrics and writing those to InfluxDB

This commit is contained in:
Mark Nellemann 2020-08-11 16:26:16 +02:00
parent 05909c7267
commit 30726da763
16 changed files with 345 additions and 1083 deletions

26
README.md Normal file
View File

@ -0,0 +1,26 @@
# HMC Insights
Small Java-based utility to fetch metrics from one or more HMC's and push those to an InfluxDB time-series database.
## TODO Liste
- Use TOML for configuration file, to support multiple HMC's - https://github.com/tomlj/tomlj
## Usage Instructions
...
## Development Information
### InfluxDB for test and development
Start the influxdb container
docker run --name=influxdb -d -p 8086:8086 influxdb
Use the influx client from the container
docker exec -it influxdb influx

View File

@ -25,6 +25,7 @@ dependencies {
implementation 'org.codehaus.groovy:groovy-all:3.0.5'
implementation 'com.squareup.okhttp3:okhttp:4.8.0'
implementation 'org.influxdb:influxdb-java:2.19'
// implementation 'org.tomlj:tomlj:1.0.0'
implementation 'org.slf4j:slf4j-api:1.7.+'
runtimeOnly 'ch.qos.logback:logback-classic:1.+'

View File

@ -9,6 +9,7 @@ import groovy.util.logging.Slf4j
class App {
HmcClient hmc
InfluxClient influx
Map<String,ManagedSystem> systems = new HashMap<String, ManagedSystem>()
Map<String, LogicalPartition> partitions = new HashMap<String, LogicalPartition>()
@ -19,36 +20,40 @@ class App {
def cli = new CliBuilder()
cli.h(longOpt: 'help', 'display usage')
cli.v(longOpt: 'version', 'display version')
cli.c(longOpt: 'config', args: 1, required: true, defaultValue: '~/.config/hmci.properties', 'configuration file')
cli.c(longOpt: 'config', args: 1, required: true, defaultValue: '~/.config/hmci.toml', 'configuration file')
OptionAccessor options = cli.parse(args)
if (options.h) cli.usage()
if(options.c) {
//println("TODO: Use configuration file: " + options.config)
File configurationFile = new File((String)options.config)
if(configurationFile.exists()) {
log.info("Configuration file found at: " + configurationFile.toString())
} else {
log.warn("No configuration file found at: " + configurationFile.toString())
}
}
// TODO: Read configuration file or create new empty file,
// pass the properties or configuration bean to App.
println("HMC Insights")
hmc = new HmcClient("https://10.32.64.39:12443", "hmci", "hmcihmci")
hmc.login()
scanHmc()
getMetricsForSystems()
//getMetricsForPartitions()
scan()
metricsForSystems()
metricsForPartitions()
writeMetricsForManagedSystems()
hmc?.logoff()
influx?.logoff()
}
void scan() {
void scanHmc() {
try {
@ -79,7 +84,7 @@ class App {
}
void metricsForSystems() {
void getMetricsForSystems() {
try {
@ -105,7 +110,7 @@ class App {
}
void metricsForPartitions() {
void getMetricsForPartitions() {
try {
@ -132,6 +137,18 @@ class App {
}
}
void writeMetricsForManagedSystems() {
if(!influx) {
influx = new InfluxClient("http://127.0.0.1:8086", "root", "", "hmci")
influx.login()
}
systems.each {systemId, system ->
influx.writeManagedSystem(system)
}
}
static void main(String... args) {
new App(args)

View File

@ -109,9 +109,6 @@ class HmcClient {
* @return
*/
Map<String, ManagedSystem> getManagedSystems() {
log.debug("getManagedSystems()")
URL url = new URL(String.format("%s/rest/api/uom/ManagedSystem", baseUrl))
Response response = getResponse(url)
String responseBody = response.body.string()
@ -121,13 +118,15 @@ class HmcClient {
feed?.entry?.each { entry ->
entry.content.each { content ->
content.ManagedSystem.each { system ->
ManagedSystem managedSystem = new ManagedSystem(entry.id as String)
managedSystem.name = system.SystemName
managedSystem.model = system.MachineTypeModelAndSerialNumber.Model
managedSystem.type = system.MachineTypeModelAndSerialNumber.MachineType
managedSystem.serialNumber = system.MachineTypeModelAndSerialNumber.SerialNumber
ManagedSystem managedSystem = new ManagedSystem(
entry.id as String,
system.SystemName as String,
system.MachineTypeModelAndSerialNumber?.MachineType as String,
system.MachineTypeModelAndSerialNumber?.Model as String,
system.MachineTypeModelAndSerialNumber?.SerialNumber as String
)
managedSystemsMap.put(managedSystem.id, managedSystem)
log.debug("getManagedSystems() " + managedSystem.toString())
log.debug("getManagedSystems() - Found system: " + managedSystem.toString())
}
}
}
@ -144,8 +143,6 @@ class HmcClient {
* @return
*/
Map<String, LogicalPartition> getLogicalPartitionsForManagedSystemWithId(String systemId) {
log.debug("getLogicalPartitionsForManagedSystem() - systemId: " + systemId)
URL url = new URL(String.format("%s/rest/api/uom/ManagedSystem/%s/LogicalPartition", baseUrl, systemId))
Response response = getResponse(url)
String responseBody = response.body.string()
@ -157,9 +154,12 @@ class HmcClient {
entry.content.each { content ->
//log.debug("Content")
content.LogicalPartition.each { partition ->
LogicalPartition logicalPartition = new LogicalPartition(partition.PartitionUUID as String, systemId)
logicalPartition.name = partition.PartitionName
logicalPartition.type = partition.PartitionType
LogicalPartition logicalPartition = new LogicalPartition(
partition.PartitionUUID as String,
systemId as String,
partition.PartitionName as String,
partition.PartitionType as String
)
partitionMap.put(logicalPartition.id, logicalPartition)
log.debug("getLogicalPartitionsForManagedSystem() - Found partition: " + logicalPartition.toString())
}
@ -178,7 +178,7 @@ class HmcClient {
*/
String getPcmDataForManagedSystem(String systemId) {
log.debug("getPcmDataForManagedSystem() - " + systemId)
URL url = new URL(String.format("%s/rest/api/pcm/ManagedSystem/%s/ProcessedMetrics?NoOfSamples=1", baseUrl, systemId))
URL url = new URL(String.format("%s/rest/api/pcm/ManagedSystem/%s/ProcessedMetrics?NoOfSamples=0", baseUrl, systemId))
Response response = getResponse(url)
String responseBody = response.body.string()
@ -206,7 +206,7 @@ class HmcClient {
String getPcmDataForLogicalPartition(String systemId, String partitionId) {
log.debug(String.format("getPcmDataForLogicalPartition() - %s @ %s", partitionId, systemId))
URL url = new URL(String.format("%s/rest/api/pcm/ManagedSystem/%s/LogicalPartition/%s/ProcessedMetrics?NoOfSamples=1", baseUrl, systemId, partitionId))
URL url = new URL(String.format("%s/rest/api/pcm/ManagedSystem/%s/LogicalPartition/%s/ProcessedMetrics?NoOfSamples=0", baseUrl, systemId, partitionId))
Response response = getResponse(url)
String responseBody = response.body.string()

View File

@ -1,5 +1,159 @@
package biz.nellemann.hmci
import groovy.util.logging.Slf4j
import org.influxdb.dto.BatchPoints
import java.time.Instant
import java.util.concurrent.TimeUnit
import org.influxdb.InfluxDB
import org.influxdb.BatchOptions
import org.influxdb.InfluxDBFactory
import org.influxdb.dto.QueryResult
import org.influxdb.dto.Query
import org.influxdb.dto.Point
@Slf4j
class InfluxClient {
final String url
final String username
final String password
final String database
InfluxDB influxDB
InfluxClient(String url, String username, String password, String database) {
this.url = url
this.username = username
this.password = password
this.database = database
}
void login() {
if(!influxDB) {
influxDB = InfluxDBFactory.connect(url, username, password);
createDatabase()
}
}
void logoff() {
influxDB?.close();
}
void createDatabase() {
try {
// Create a database...
// https://docs.influxdata.com/influxdb/v1.7/query_language/database_management/
influxDB.query(new Query("CREATE DATABASE " + database));
influxDB.setDatabase(database);
// ... and a retention policy, if necessary.
// https://docs.influxdata.com/influxdb/v1.7/query_language/database_management/
/*String retentionPolicyName = "one_day_only";
influxDB.query(new Query("CREATE RETENTION POLICY " + retentionPolicyName
+ " ON " + database + " DURATION 1d REPLICATION 1 DEFAULT"));
influxDB.setRetentionPolicy(retentionPolicyName);*/
// Enable batch writes to get better performance.
influxDB.enableBatch(BatchOptions.DEFAULTS);
} catch(Exception e) {
log.error("createDatabase()", e)
}
}
void write() {
// Write points to InfluxDB.
influxDB.write(Point.measurement("h2o_feet")
.time(System.currentTimeMillis(), TimeUnit.MILLISECONDS)
.tag("location", "santa_monica")
.addField("level description", "below 3 feet")
.addField("water_level", 2.064d)
.build());
influxDB.write(Point.measurement("h2o_feet")
.time(System.currentTimeMillis(), TimeUnit.MILLISECONDS)
.tag("location", "coyote_creek")
.addField("level description", "between 6 and 9 feet")
.addField("water_level", 8.12d)
.build());
}
void read() {
// Query your data using InfluxQL.
// https://docs.influxdata.com/influxdb/v1.7/query_language/data_exploration/#the-basic-select-statement
QueryResult queryResult = influxDB.query(new Query("SELECT * FROM h2o_feet"));
println(queryResult);
}
void writeManagedSystem(ManagedSystem system) {
if(system.metrics == null) {
log.warn("writeManagedSystem() - null metrics, skipping")
return
}
Instant timestamp = system.getTimestamp()
if(!timestamp) {
log.warn("writeManagedSystem() - no timestamp, skipping")
return
}
BatchPoints batchPoints = BatchPoints
.database(database)
//.retentionPolicy("defaultPolicy")
.build();
/*
ServerProcessor processor
ServerMemory memory
PhysicalProcessorPool physicalProcessorPool
SharedProcessorPool sharedProcessorPool
+ VIOS
*/
batchPoints.point(getSystemMemory(system, timestamp));
batchPoints.point(getSystemProcessor(system, timestamp));
influxDB.write(batchPoints);
}
private static Point getSystemMemory(ManagedSystem system, Instant timestamp) {
Point.Builder point1Builder = Point.measurement("SystemMemory")
.time(timestamp.toEpochMilli(), TimeUnit.MILLISECONDS)
.tag("name", system.name)
Map memoryMap = system.getMemoryMetrics()
memoryMap.each {fieldName, fieldValue ->
point1Builder.addField(fieldName, fieldValue)
}
return point1Builder.build();
}
private static Point getSystemProcessor(ManagedSystem system, Instant timestamp) {
Point.Builder point1Builder = Point.measurement("SystemProcessor")
.time(timestamp.toEpochMilli(), TimeUnit.MILLISECONDS)
.tag("name", system.name)
Map memoryMap = system.getProcessorMetrics()
memoryMap.each {fieldName, fieldValue ->
point1Builder.addField(fieldName, fieldValue)
}
return point1Builder.build();
}
}

View File

@ -1,34 +1,24 @@
package biz.nellemann.hmci
import biz.nellemann.hmci.pojo.PcmData
import biz.nellemann.hmci.pojo.SystemUtil
import groovy.json.JsonSlurper
import groovy.util.logging.Slf4j
@Slf4j
class LogicalPartition {
class LogicalPartition extends MetaSystem {
public String id
public String name
public String type
public String systemId
protected PcmData metrics
LogicalPartition(String id, String systemId) {
LogicalPartition(String id, String systemId, String name, String type) {
this.id = id
this.systemId = systemId
this.name = name
this.type = type
}
String toString() {
return "[${id}] ${name} (${type})"
}
void processMetrics(String json) {
log.debug("processMetrics()")
def pcmMap = new JsonSlurper().parseText(json)
metrics = new PcmData(pcmMap as Map)
}
}

View File

@ -1,12 +1,10 @@
package biz.nellemann.hmci
import biz.nellemann.hmci.pojo.PcmData
import groovy.json.JsonSlurper
import groovy.util.logging.Slf4j
@Slf4j
class ManagedSystem {
class ManagedSystem extends MetaSystem {
public String id
public String name
@ -14,10 +12,13 @@ class ManagedSystem {
public String model
public String serialNumber
protected PcmData metrics
ManagedSystem(String id) {
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
}
String toString() {
@ -25,10 +26,26 @@ class ManagedSystem {
}
void processMetrics(String json) {
log.debug("processMetrics()")
def pcmMap = new JsonSlurper().parseText(json)
metrics = new PcmData(pcmMap as Map)
Map<String,BigDecimal> getMemoryMetrics() {
HashMap<String, BigDecimal> map = [
totalMem: metrics.systemUtil.utilSamples.first().serverUtil.memory.totalMem.first(),
availableMem: metrics.systemUtil.utilSamples.first().serverUtil.memory.availableMem.first(),
configurableMem: metrics.systemUtil.utilSamples.first().serverUtil.memory.configurableMem.first(),
assignedMemToLpars: metrics.systemUtil.utilSamples.first().serverUtil.memory.assignedMemToLpars.first()
]
return map
}
Map<String,BigDecimal> getProcessorMetrics() {
HashMap<String, BigDecimal> map = [
availableProcUnits: metrics.systemUtil.utilSamples.first().serverUtil.processor.availableProcUnits.first(),
]
return map
}
}

View File

@ -0,0 +1,36 @@
package biz.nellemann.hmci
import biz.nellemann.hmci.pojo.PcmData
import groovy.json.JsonSlurper
import groovy.util.logging.Slf4j
import java.time.Instant
import java.time.format.DateTimeFormatter
import java.time.format.DateTimeParseException
@Slf4j
class MetaSystem {
protected PcmData metrics
void processMetrics(String json) {
def pcmMap = new JsonSlurper().parseText(json)
metrics = new PcmData(pcmMap as Map)
}
Instant getTimestamp() {
String timeStamp = metrics.systemUtil.utilSamples.first().sampleInfo.timeStamp
Instant instant
try {
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss[XXX][X]");
instant = Instant.from(dateTimeFormatter.parse(timeStamp))
} catch(DateTimeParseException e) {
log.warn("getTimestamp() - parse error: " + timeStamp)
}
return instant
}
}

View File

@ -0,0 +1,11 @@
package biz.nellemann.hmci.pojo
import groovy.transform.ToString
@ToString
class SampleInfo {
String timeStamp
Integer status
}

View File

@ -6,6 +6,7 @@ import groovy.transform.ToString
class UtilSample {
String sampleType
SampleInfo sampleInfo
ServerUtil serverUtil
List<ViosUtil> viosUtil
List<LparUtil> lparsUtil

View File

@ -44,8 +44,8 @@ class HmcClientTest extends Specification {
mockServer.enqueue(new MockResponse().setBody(testXml));
when:
ManagedSystem system = new ManagedSystem("e09834d1-c930-3883-bdad-405d8e26e166")
Map<String, ManagedSystem> partitions = hmc.getLogicalPartitionsForManagedSystemWithId(system.id)
ManagedSystem system = new ManagedSystem("e09834d1-c930-3883-bdad-405d8e26e166", "Test Name","Test Type", "Test Model", "Test S/N")
Map<String, LogicalPartition> partitions = hmc.getLogicalPartitionsForManagedSystemWithId(system.id)
then:
partitions.size() == 12

View File

@ -0,0 +1,37 @@
package biz.nellemann.hmci
import okhttp3.mockwebserver.MockWebServer
import spock.lang.Specification
class InfluxClientTest extends Specification {
InfluxClient influxClient
def setup() {
influxClient = new InfluxClient("http://localhost:8086", "root", "", "hmci")
influxClient.login()
}
def cleanup() {
influxClient.logoff()
}
void "write some managed system data to influx"() {
setup:
def testFile = new File(getClass().getResource('/pcm-data-managed-system.json').toURI())
def testJson = testFile.getText('UTF-8')
when:
ManagedSystem system = new ManagedSystem("e09834d1-c930-3883-bdad-405d8e26e166", "TestSystem", "TestType", "TestModel", "Test s/n")
system.processMetrics(testJson)
influxClient.writeManagedSystem(system)
then:
system.metrics.systemUtil.utilInfo.name == "S822L-8247-213C1BA"
}
}

View File

@ -12,7 +12,7 @@ class LogicalPartitionTest extends Specification {
def testJson = testFile.getText('UTF-8')
when:
LogicalPartition lpar = new LogicalPartition("2DE05DB6-8AD5-448F-8327-0F488D287E82", "e09834d1-c930-3883-bdad-405d8e26e166")
LogicalPartition lpar = new LogicalPartition("2DE05DB6-8AD5-448F-8327-0F488D287E82", "e09834d1-c930-3883-bdad-405d8e26e166", "9Flash01", "OS400")
lpar.processMetrics(testJson)
then:

View File

@ -11,7 +11,7 @@ class ManagedSystemTest extends Specification {
def testJson = testFile.getText('UTF-8')
when:
ManagedSystem system = new ManagedSystem("e09834d1-c930-3883-bdad-405d8e26e166")
ManagedSystem system = new ManagedSystem("e09834d1-c930-3883-bdad-405d8e26e166", "Test Name","Test Type", "Test Model", "Test S/N")
system.processMetrics(testJson)
then:

View File

@ -1,223 +0,0 @@
{
"utilInfo": {
"version": "1.3.0",
"metricType": "Processed",
"frequency": 30,
"startTimeStamp": "2020-08-07T12:37:30+0200",
"endTimeStamp": "2020-08-07T12:37:30+0200",
"mtms": "9009-42A*21F64EV",
"name": "Server-9009-42A-SN21F64EV",
"uuid": "b597e4da-2aab-3f52-8616-341d62153559",
"metricArrayOrder": [
"AVG"
]
},
"utilSamples": [
{
"sampleType": "LogicalPartition",
"sampleInfo": {
"timeStamp": "2020-08-07T12:37:30+0200",
"status": 2,
"errorInfo": [
{
"errId": "3004",
"errMsg": "Failed to fetch SRIOV adapter physical port statistics due to a technical error.",
"uuid": "b597e4da-2aab-3f52-8616-341d62153559",
"reportedBy": "ManagedSystem",
"occurrenceCount": 1
},
{
"errId": "3004",
"errMsg": "Failed to fetch SRIOV adapter physical port statistics due to a technical error.",
"uuid": "b597e4da-2aab-3f52-8616-341d62153559",
"reportedBy": "ManagedSystem",
"occurrenceCount": 1
}
]
},
"lparsUtil": [
{
"id": 10,
"uuid": "2DE05DB6-8AD5-448F-8327-0F488D287E82",
"name": "P9-PowerVC",
"state": "Running",
"type": "AIX/Linux",
"osType": "Linux",
"affinityScore": 100,
"memory": {
"logicalMem": [
112640.000
],
"backedPhysicalMem": [
112640.000
]
},
"processor": {
"poolId": 0,
"weight": 128,
"mode": "uncap",
"maxVirtualProcessors": [
8.000
],
"currentVirtualProcessors": [
4.000
],
"maxProcUnits": [
8.000
],
"entitledProcUnits": [
1.000
],
"utilizedProcUnits": [
0.574
],
"utilizedCappedProcUnits": [
0.498
],
"utilizedUncappedProcUnits": [
0.076
],
"idleProcUnits": [
0.376
],
"donatedProcUnits": [
0.000
],
"timeSpentWaitingForDispatch": [
0.000
],
"timePerInstructionExecution": [
0.000
]
},
"network": {
"virtualEthernetAdapters": [
{
"physicalLocation": "U9009.42A.21F64EV-V10-C2",
"vlanId": 1,
"vswitchId": 0,
"isPortVlanId": true,
"viosId": 1,
"sharedEthernetAdapterId": "ent5",
"receivedPackets": [
11.933
],
"sentPackets": [
7.767
],
"droppedPackets": [
0.000
],
"sentBytes": [
2020.467
],
"receivedBytes": [
4291.167
],
"receivedPhysicalPackets": [
11.933
],
"sentPhysicalPackets": [
7.767
],
"droppedPhysicalPackets": [
0.000
],
"sentPhysicalBytes": [
2020.467
],
"receivedPhysicalBytes": [
4291.167
],
"transferredBytes": [
6311.634
],
"transferredPhysicalBytes": [
6311.634
]
}
]
},
"storage": {
"genericVirtualAdapters": [
{
"id": "vhost5",
"type": "virtual",
"viosId": 1,
"physicalLocation": "U9009.42A.21F64EV-V10-C3",
"numOfReads": [
0.000
],
"numOfWrites": [
0.000
],
"readBytes": [
0.000
],
"writeBytes": [
0.000
],
"transmittedBytes": [
null
]
}
],
"virtualFiberChannelAdapters": [
{
"wwpn": "c050760b1d10002a",
"wwpn2": "c050760b1d10002b",
"physicalLocation": "U9009.42A.21F64EV-V10-C87",
"physicalPortWWPN": "100000109b89aca8",
"viosId": 1,
"numOfReads": [
0.000
],
"numOfWrites": [
2.867
],
"readBytes": [
0.000
],
"writeBytes": [
138786.133
],
"runningSpeed": [
8.000
],
"transmittedBytes": [
0.000
]
},
{
"wwpn": "c050760b1d10002c",
"wwpn2": "c050760b1d10002d",
"physicalLocation": "U9009.42A.21F64EV-V10-C88",
"physicalPortWWPN": "100000109b7db96a",
"viosId": 2,
"numOfReads": [
0.000
],
"numOfWrites": [
2.933
],
"readBytes": [
0.000
],
"writeBytes": [
140731.733
],
"runningSpeed": [
8.000
],
"transmittedBytes": [
0.000
]
}
]
}
}
]
}
]
}
}

View File

@ -1,805 +0,0 @@
{
"systemUtil": {
"utilInfo": {
"version": "1.3.0",
"metricType": "Processed",
"frequency": 30,
"startTimeStamp": "2020-08-07T10:44:00+0200",
"endTimeStamp": "2020-08-07T10:44:00+0200",
"mtms": "8247-22L*213C1BA",
"name": "S822L-8247-213C1BA",
"uuid": "e09834d1-c930-3883-bdad-405d8e26e166",
"metricArrayOrder": [
"AVG"
]
},
"utilSamples": [
{
"sampleType": "ManagedSystem",
"sampleInfo": {
"timeStamp": "2020-08-07T10:44:00+0200",
"status": 0
},
"systemFirmwareUtil": {
"utilizedProcUnits": [
0.000
],
"assignedMem": [
5632.000
]
},
"serverUtil": {
"processor": {
"totalProcUnits": [
24.000
],
"utilizedProcUnits": [
0.017
],
"availableProcUnits": [
16.000
],
"configurableProcUnits": [
24.000
]
},
"memory": {
"totalMem": [
1048576.000
],
"availableMem": [
1001984.000
],
"configurableMem": [
1048576.000
],
"assignedMemToLpars": [
40960.000
]
},
"physicalProcessorPool": {
"assignedProcUnits": [
23.879
],
"utilizedProcUnits": [
0.007
],
"availableProcUnits": [
23.872
],
"configuredProcUnits": [
0.000
],
"borrowedProcUnits": [
16.000
]
},
"sharedProcessorPool": [
{
"id": 0,
"name": "DefaultPool",
"assignedProcUnits": [
23.879
],
"utilizedProcUnits": [
0.005
],
"availableProcUnits": [
23.874
],
"configuredProcUnits": [
6.000
],
"borrowedProcUnits": [
16.000
]
}
]
},
"viosUtil": [
{
"id": 1,
"uuid": "2F30379A-860B-4661-A24E-CD8E449C81AC",
"name": "VIOS1",
"state": "Running",
"affinityScore": 100,
"memory": {
"assignedMem": [
8192.000
],
"utilizedMem": [
2061.000
]
},
"processor": {
"weight": 0,
"mode": "share_idle_procs_active",
"maxVirtualProcessors": [
2.000
],
"currentVirtualProcessors": [
0.000
],
"maxProcUnits": [
2.000
],
"entitledProcUnits": [
1.000
],
"utilizedProcUnits": [
0.006
],
"utilizedCappedProcUnits": [
0.079
],
"utilizedUncappedProcUnits": [
0.000
],
"idleProcUnits": [
0.073
],
"donatedProcUnits": [
0.921
],
"timeSpentWaitingForDispatch": [
0.000
],
"timePerInstructionExecution": [
51.000
]
},
"network": {
"clientLpars": [
"62F4D488-C838-41E2-B83B-E68E004E3B63"
],
"genericAdapters": [
{
"id": "ent2",
"type": "physical",
"physicalLocation": "U78CB.001.WZS0BYF-P1-C10-T3",
"receivedPackets": [
29.733
],
"sentPackets": [
25.900
],
"droppedPackets": [
0.000
],
"sentBytes": [
7508.933
],
"receivedBytes": [
5676.000
],
"transferredBytes": [
13184.933
]
},
{
"id": "ent6",
"type": "virtual",
"physicalLocation": "U8247.22L.213C1BA-V1-C3-T1",
"receivedPackets": [
12.967
],
"sentPackets": [
9.700
],
"droppedPackets": [
0.000
],
"sentBytes": [
3348.667
],
"receivedBytes": [
2401.733
],
"transferredBytes": [
5750.400
]
},
{
"id": "ent4",
"type": "virtual",
"physicalLocation": "U8247.22L.213C1BA-V1-C2-T1",
"receivedPackets": [
26.900
],
"sentPackets": [
33.800
],
"droppedPackets": [
0.000
],
"sentBytes": [
8853.333
],
"receivedBytes": [
8214.933
],
"transferredBytes": [
17068.266
]
}
],
"sharedAdapters": [
{
"id": "ent5",
"type": "sea",
"physicalLocation": "U8247.22L.213C1BA-V1-C2-T1",
"receivedPackets": [
56.633
],
"sentPackets": [
59.700
],
"droppedPackets": [
0.000
],
"sentBytes": [
16362.267
],
"receivedBytes": [
13890.933
],
"transferredBytes": [
30253.200
],
"bridgedAdapters": [
"ent2",
"ent4",
"ent4"
]
}
],
"virtualEthernetAdapters": [
{
"physicalLocation": "U8247.22L.213C1BA-V1-C2",
"vlanId": 1,
"vswitchId": 0,
"isPortVlanId": true,
"receivedPackets": [
10.467
],
"sentPackets": [
14.667
],
"droppedPackets": [
0.000
],
"sentBytes": [
1931.333
],
"receivedBytes": [
3875.433
],
"receivedPhysicalPackets": [
0.000
],
"sentPhysicalPackets": [
0.000
],
"droppedPhysicalPackets": [
0.000
],
"sentPhysicalBytes": [
0.000
],
"receivedPhysicalBytes": [
0.000
],
"transferredBytes": [
5806.766
],
"transferredPhysicalBytes": [
0.000
]
},
{
"physicalLocation": "U8247.22L.213C1BA-V1-C3",
"vlanId": 1,
"vswitchId": 0,
"isPortVlanId": true,
"receivedPackets": [
6.100
],
"sentPackets": [
1.700
],
"droppedPackets": [
0.000
],
"sentBytes": [
1420.533
],
"receivedBytes": [
575.100
],
"receivedPhysicalPackets": [
6.100
],
"sentPhysicalPackets": [
1.700
],
"droppedPhysicalPackets": [
0.000
],
"sentPhysicalBytes": [
1420.533
],
"receivedPhysicalBytes": [
575.100
],
"transferredBytes": [
1995.633
],
"transferredPhysicalBytes": [
1995.633
]
}
]
},
"storage": {
"clientLpars": [
"62F4D488-C838-41E2-B83B-E68E004E3B63"
],
"genericPhysicalAdapters": [
{
"id": "sissas0",
"type": "sas",
"physicalLocation": "U78CB.001.WZS0BYF-P1-C14-T1",
"numOfReads": [
0.000
],
"numOfWrites": [
4.533
],
"readBytes": [
0.000
],
"writeBytes": [
2321.067
],
"transmittedBytes": [
2321.067
]
}
],
"genericVirtualAdapters": [
{
"id": "vhost1",
"type": "virtual",
"physicalLocation": "U8247.22L.213C1BA-V1-C6",
"numOfReads": [
0.000
],
"numOfWrites": [
0.000
],
"readBytes": [
0.000
],
"writeBytes": [
0.000
],
"transmittedBytes": [
0.000
]
},
{
"id": "vhost0",
"type": "virtual",
"physicalLocation": "U8247.22L.213C1BA-V1-C5",
"numOfReads": [
0.500
],
"numOfWrites": [
0.500
],
"readBytes": [
256.000
],
"writeBytes": [
256.000
],
"transmittedBytes": [
512.000
]
},
{
"id": "vhost2",
"type": "virtual",
"physicalLocation": "U8247.22L.213C1BA-V1-C7",
"numOfReads": [
0.000
],
"numOfWrites": [
0.000
],
"readBytes": [
0.000
],
"writeBytes": [
0.000
],
"transmittedBytes": [
0.000
]
}
],
"fiberChannelAdapters": [
{
"id": "fcs0",
"wwpn": "10000090faba5108",
"physicalLocation": "U78CB.001.WZS0BYF-P1-C12-T1",
"numOfPorts": 3,
"numOfReads": [
0.000
],
"numOfWrites": [
0.467
],
"readBytes": [
0.000
],
"writeBytes": [
30583.467
],
"runningSpeed": [
8.000
],
"transmittedBytes": [
30583.467
]
},
{
"id": "fcs1",
"wwpn": "10000090faba5109",
"physicalLocation": "U78CB.001.WZS0BYF-P1-C12-T2",
"numOfPorts": 0,
"numOfReads": [
0.000
],
"numOfWrites": [
0.000
],
"readBytes": [
0.000
],
"writeBytes": [
0.000
],
"runningSpeed": [
0.000
],
"transmittedBytes": [
0.000
]
}
]
}
},
{
"id": 2,
"uuid": "2BA128CE-38E4-4522-B823-7471633C2717",
"name": "VIOS2",
"state": "Running",
"affinityScore": 100,
"memory": {
"assignedMem": [
8192.000
],
"utilizedMem": [
2090.000
]
},
"processor": {
"weight": 0,
"mode": "share_idle_procs_active",
"maxVirtualProcessors": [
2.000
],
"currentVirtualProcessors": [
0.000
],
"maxProcUnits": [
2.000
],
"entitledProcUnits": [
1.000
],
"utilizedProcUnits": [
0.005
],
"utilizedCappedProcUnits": [
0.042
],
"utilizedUncappedProcUnits": [
0.000
],
"idleProcUnits": [
0.037
],
"donatedProcUnits": [
0.958
],
"timeSpentWaitingForDispatch": [
0.000
],
"timePerInstructionExecution": [
52.000
]
},
"network": {
"genericAdapters": [
{
"id": "ent6",
"type": "virtual",
"physicalLocation": "U8247.22L.213C1BA-V2-C3-T1",
"receivedPackets": [
12.233
],
"sentPackets": [
9.000
],
"droppedPackets": [
0.000
],
"sentBytes": [
3011.200
],
"receivedBytes": [
2265.067
],
"transferredBytes": [
5276.267
]
},
{
"id": "ent4",
"type": "virtual",
"physicalLocation": "U8247.22L.213C1BA-V2-C2-T1",
"receivedPackets": [
4.600
],
"sentPackets": [
1.000
],
"droppedPackets": [
0.000
],
"sentBytes": [
706.000
],
"receivedBytes": [
3247.600
],
"transferredBytes": [
3953.600
]
},
{
"id": "ent2",
"type": "physical",
"physicalLocation": "U78CB.001.WZS0BYF-P1-C6-T3",
"receivedPackets": [
5.167
],
"sentPackets": [
0.000
],
"droppedPackets": [
0.000
],
"sentBytes": [
0.000
],
"receivedBytes": [
380.333
],
"transferredBytes": [
380.333
]
}
],
"sharedAdapters": [
{
"id": "ent5",
"type": "sea",
"physicalLocation": "U8247.22L.213C1BA-V2-C2-T1",
"receivedPackets": [
9.767
],
"sentPackets": [
1.000
],
"droppedPackets": [
0.000
],
"sentBytes": [
706.000
],
"receivedBytes": [
3627.933
],
"transferredBytes": [
4333.933
],
"bridgedAdapters": [
"ent2",
"ent4",
"ent4"
]
}
],
"virtualEthernetAdapters": [
{
"physicalLocation": "U8247.22L.213C1BA-V2-C2",
"vlanId": 1,
"vswitchId": 0,
"isPortVlanId": true,
"receivedPackets": [
0.000
],
"sentPackets": [
0.000
],
"droppedPackets": [
0.000
],
"sentBytes": [
0.000
],
"receivedBytes": [
0.000
],
"receivedPhysicalPackets": [
0.000
],
"sentPhysicalPackets": [
0.000
],
"droppedPhysicalPackets": [
0.000
],
"sentPhysicalBytes": [
0.000
],
"receivedPhysicalBytes": [
0.000
],
"transferredBytes": [
0.000
],
"transferredPhysicalBytes": [
0.000
]
},
{
"physicalLocation": "U8247.22L.213C1BA-V2-C3",
"vlanId": 1,
"vswitchId": 0,
"isPortVlanId": true,
"receivedPackets": [
5.867
],
"sentPackets": [
1.567
],
"droppedPackets": [
0.000
],
"sentBytes": [
1306.633
],
"receivedBytes": [
517.900
],
"receivedPhysicalPackets": [
5.867
],
"sentPhysicalPackets": [
1.567
],
"droppedPhysicalPackets": [
0.000
],
"sentPhysicalBytes": [
1306.633
],
"receivedPhysicalBytes": [
517.900
],
"transferredBytes": [
1824.533
],
"transferredPhysicalBytes": [
1824.533
]
}
]
},
"storage": {
"clientLpars": [
"62F4D488-C838-41E2-B83B-E68E004E3B63"
],
"genericPhysicalAdapters": [
{
"id": "sissas1",
"type": "sas",
"physicalLocation": "U78CB.001.WZS0BYF-P1-C15-T1",
"numOfReads": [
0.000
],
"numOfWrites": [
6.400
],
"readBytes": [
0.000
],
"writeBytes": [
3276.800
],
"transmittedBytes": [
3276.800
]
}
],
"fiberChannelAdapters": [
{
"id": "fcs1",
"wwpn": "10000090fab674d7",
"physicalLocation": "U78CB.001.WZS0BYF-P1-C2-T2",
"numOfPorts": 0,
"numOfReads": [
0.000
],
"numOfWrites": [
0.000
],
"readBytes": [
0.000
],
"writeBytes": [
0.000
],
"runningSpeed": [
0.000
],
"transmittedBytes": [
0.000
]
},
{
"id": "fcs0",
"wwpn": "10000090fab674d6",
"physicalLocation": "U78CB.001.WZS0BYF-P1-C2-T1",
"numOfPorts": 3,
"numOfReads": [
0.000
],
"numOfWrites": [
0.400
],
"readBytes": [
0.000
],
"writeBytes": [
26214.400
],
"runningSpeed": [
8.000
],
"transmittedBytes": [
26214.400
]
}
]
}
}
]
}
]
}
}