Initial work on preparing metrics and writing those to InfluxDB
This commit is contained in:
parent
05909c7267
commit
30726da763
26
README.md
Normal file
26
README.md
Normal 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
|
|
@ -25,6 +25,7 @@ dependencies {
|
||||||
implementation 'org.codehaus.groovy:groovy-all:3.0.5'
|
implementation 'org.codehaus.groovy:groovy-all:3.0.5'
|
||||||
implementation 'com.squareup.okhttp3:okhttp:4.8.0'
|
implementation 'com.squareup.okhttp3:okhttp:4.8.0'
|
||||||
implementation 'org.influxdb:influxdb-java:2.19'
|
implementation 'org.influxdb:influxdb-java:2.19'
|
||||||
|
// implementation 'org.tomlj:tomlj:1.0.0'
|
||||||
implementation 'org.slf4j:slf4j-api:1.7.+'
|
implementation 'org.slf4j:slf4j-api:1.7.+'
|
||||||
runtimeOnly 'ch.qos.logback:logback-classic:1.+'
|
runtimeOnly 'ch.qos.logback:logback-classic:1.+'
|
||||||
|
|
||||||
|
|
|
@ -9,6 +9,7 @@ import groovy.util.logging.Slf4j
|
||||||
class App {
|
class App {
|
||||||
|
|
||||||
HmcClient hmc
|
HmcClient hmc
|
||||||
|
InfluxClient influx
|
||||||
|
|
||||||
Map<String,ManagedSystem> systems = new HashMap<String, ManagedSystem>()
|
Map<String,ManagedSystem> systems = new HashMap<String, ManagedSystem>()
|
||||||
Map<String, LogicalPartition> partitions = new HashMap<String, LogicalPartition>()
|
Map<String, LogicalPartition> partitions = new HashMap<String, LogicalPartition>()
|
||||||
|
@ -19,36 +20,40 @@ class App {
|
||||||
def cli = new CliBuilder()
|
def cli = new CliBuilder()
|
||||||
cli.h(longOpt: 'help', 'display usage')
|
cli.h(longOpt: 'help', 'display usage')
|
||||||
cli.v(longOpt: 'version', 'display version')
|
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)
|
OptionAccessor options = cli.parse(args)
|
||||||
if (options.h) cli.usage()
|
if (options.h) cli.usage()
|
||||||
|
|
||||||
if(options.c) {
|
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,
|
// TODO: Read configuration file or create new empty file,
|
||||||
// pass the properties or configuration bean to App.
|
// pass the properties or configuration bean to App.
|
||||||
|
|
||||||
println("HMC Insights")
|
|
||||||
|
|
||||||
hmc = new HmcClient("https://10.32.64.39:12443", "hmci", "hmcihmci")
|
hmc = new HmcClient("https://10.32.64.39:12443", "hmci", "hmcihmci")
|
||||||
hmc.login()
|
hmc.login()
|
||||||
|
scanHmc()
|
||||||
|
getMetricsForSystems()
|
||||||
|
//getMetricsForPartitions()
|
||||||
|
|
||||||
scan()
|
writeMetricsForManagedSystems()
|
||||||
|
|
||||||
metricsForSystems()
|
|
||||||
|
|
||||||
metricsForPartitions()
|
|
||||||
|
|
||||||
hmc?.logoff()
|
hmc?.logoff()
|
||||||
|
influx?.logoff()
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void scan() {
|
void scanHmc() {
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
|
||||||
|
@ -79,7 +84,7 @@ class App {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void metricsForSystems() {
|
void getMetricsForSystems() {
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
|
||||||
|
@ -105,7 +110,7 @@ class App {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void metricsForPartitions() {
|
void getMetricsForPartitions() {
|
||||||
|
|
||||||
try {
|
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) {
|
static void main(String... args) {
|
||||||
new App(args)
|
new App(args)
|
||||||
|
|
|
@ -109,9 +109,6 @@ class HmcClient {
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
Map<String, ManagedSystem> getManagedSystems() {
|
Map<String, ManagedSystem> getManagedSystems() {
|
||||||
|
|
||||||
log.debug("getManagedSystems()")
|
|
||||||
|
|
||||||
URL url = new URL(String.format("%s/rest/api/uom/ManagedSystem", baseUrl))
|
URL url = new URL(String.format("%s/rest/api/uom/ManagedSystem", baseUrl))
|
||||||
Response response = getResponse(url)
|
Response response = getResponse(url)
|
||||||
String responseBody = response.body.string()
|
String responseBody = response.body.string()
|
||||||
|
@ -121,13 +118,15 @@ class HmcClient {
|
||||||
feed?.entry?.each { entry ->
|
feed?.entry?.each { entry ->
|
||||||
entry.content.each { content ->
|
entry.content.each { content ->
|
||||||
content.ManagedSystem.each { system ->
|
content.ManagedSystem.each { system ->
|
||||||
ManagedSystem managedSystem = new ManagedSystem(entry.id as String)
|
ManagedSystem managedSystem = new ManagedSystem(
|
||||||
managedSystem.name = system.SystemName
|
entry.id as String,
|
||||||
managedSystem.model = system.MachineTypeModelAndSerialNumber.Model
|
system.SystemName as String,
|
||||||
managedSystem.type = system.MachineTypeModelAndSerialNumber.MachineType
|
system.MachineTypeModelAndSerialNumber?.MachineType as String,
|
||||||
managedSystem.serialNumber = system.MachineTypeModelAndSerialNumber.SerialNumber
|
system.MachineTypeModelAndSerialNumber?.Model as String,
|
||||||
|
system.MachineTypeModelAndSerialNumber?.SerialNumber as String
|
||||||
|
)
|
||||||
managedSystemsMap.put(managedSystem.id, managedSystem)
|
managedSystemsMap.put(managedSystem.id, managedSystem)
|
||||||
log.debug("getManagedSystems() " + managedSystem.toString())
|
log.debug("getManagedSystems() - Found system: " + managedSystem.toString())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -144,8 +143,6 @@ class HmcClient {
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
Map<String, LogicalPartition> getLogicalPartitionsForManagedSystemWithId(String systemId) {
|
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))
|
URL url = new URL(String.format("%s/rest/api/uom/ManagedSystem/%s/LogicalPartition", baseUrl, systemId))
|
||||||
Response response = getResponse(url)
|
Response response = getResponse(url)
|
||||||
String responseBody = response.body.string()
|
String responseBody = response.body.string()
|
||||||
|
@ -157,9 +154,12 @@ class HmcClient {
|
||||||
entry.content.each { content ->
|
entry.content.each { content ->
|
||||||
//log.debug("Content")
|
//log.debug("Content")
|
||||||
content.LogicalPartition.each { partition ->
|
content.LogicalPartition.each { partition ->
|
||||||
LogicalPartition logicalPartition = new LogicalPartition(partition.PartitionUUID as String, systemId)
|
LogicalPartition logicalPartition = new LogicalPartition(
|
||||||
logicalPartition.name = partition.PartitionName
|
partition.PartitionUUID as String,
|
||||||
logicalPartition.type = partition.PartitionType
|
systemId as String,
|
||||||
|
partition.PartitionName as String,
|
||||||
|
partition.PartitionType as String
|
||||||
|
)
|
||||||
partitionMap.put(logicalPartition.id, logicalPartition)
|
partitionMap.put(logicalPartition.id, logicalPartition)
|
||||||
log.debug("getLogicalPartitionsForManagedSystem() - Found partition: " + logicalPartition.toString())
|
log.debug("getLogicalPartitionsForManagedSystem() - Found partition: " + logicalPartition.toString())
|
||||||
}
|
}
|
||||||
|
@ -178,7 +178,7 @@ class HmcClient {
|
||||||
*/
|
*/
|
||||||
String getPcmDataForManagedSystem(String systemId) {
|
String getPcmDataForManagedSystem(String systemId) {
|
||||||
log.debug("getPcmDataForManagedSystem() - " + 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)
|
Response response = getResponse(url)
|
||||||
String responseBody = response.body.string()
|
String responseBody = response.body.string()
|
||||||
|
|
||||||
|
@ -206,7 +206,7 @@ class HmcClient {
|
||||||
String getPcmDataForLogicalPartition(String systemId, String partitionId) {
|
String getPcmDataForLogicalPartition(String systemId, String partitionId) {
|
||||||
|
|
||||||
log.debug(String.format("getPcmDataForLogicalPartition() - %s @ %s", partitionId, systemId))
|
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)
|
Response response = getResponse(url)
|
||||||
String responseBody = response.body.string()
|
String responseBody = response.body.string()
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,159 @@
|
||||||
package biz.nellemann.hmci
|
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 {
|
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();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,34 +1,24 @@
|
||||||
package biz.nellemann.hmci
|
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
|
import groovy.util.logging.Slf4j
|
||||||
|
|
||||||
@Slf4j
|
@Slf4j
|
||||||
class LogicalPartition {
|
class LogicalPartition extends MetaSystem {
|
||||||
|
|
||||||
public String id
|
public String id
|
||||||
public String name
|
public String name
|
||||||
public String type
|
public String type
|
||||||
public String systemId
|
public String systemId
|
||||||
|
|
||||||
protected PcmData metrics
|
LogicalPartition(String id, String systemId, String name, String type) {
|
||||||
|
|
||||||
LogicalPartition(String id, String systemId) {
|
|
||||||
this.id = id
|
this.id = id
|
||||||
this.systemId = systemId
|
this.systemId = systemId
|
||||||
|
this.name = name
|
||||||
|
this.type = type
|
||||||
}
|
}
|
||||||
|
|
||||||
String toString() {
|
String toString() {
|
||||||
return "[${id}] ${name} (${type})"
|
return "[${id}] ${name} (${type})"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void processMetrics(String json) {
|
|
||||||
log.debug("processMetrics()")
|
|
||||||
def pcmMap = new JsonSlurper().parseText(json)
|
|
||||||
metrics = new PcmData(pcmMap as Map)
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,12 +1,10 @@
|
||||||
package biz.nellemann.hmci
|
package biz.nellemann.hmci
|
||||||
|
|
||||||
|
|
||||||
import biz.nellemann.hmci.pojo.PcmData
|
|
||||||
import groovy.json.JsonSlurper
|
|
||||||
import groovy.util.logging.Slf4j
|
import groovy.util.logging.Slf4j
|
||||||
|
|
||||||
|
|
||||||
@Slf4j
|
@Slf4j
|
||||||
class ManagedSystem {
|
class ManagedSystem extends MetaSystem {
|
||||||
|
|
||||||
public String id
|
public String id
|
||||||
public String name
|
public String name
|
||||||
|
@ -14,10 +12,13 @@ class ManagedSystem {
|
||||||
public String model
|
public String model
|
||||||
public String serialNumber
|
public String serialNumber
|
||||||
|
|
||||||
protected PcmData metrics
|
|
||||||
|
|
||||||
ManagedSystem(String id) {
|
ManagedSystem(String id, String name, String type, String model, String serialNumber) {
|
||||||
this.id = id
|
this.id = id
|
||||||
|
this.name = name
|
||||||
|
this.type = type
|
||||||
|
this.model = model
|
||||||
|
this.serialNumber = serialNumber
|
||||||
}
|
}
|
||||||
|
|
||||||
String toString() {
|
String toString() {
|
||||||
|
@ -25,10 +26,26 @@ class ManagedSystem {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void processMetrics(String json) {
|
Map<String,BigDecimal> getMemoryMetrics() {
|
||||||
log.debug("processMetrics()")
|
|
||||||
def pcmMap = new JsonSlurper().parseText(json)
|
HashMap<String, BigDecimal> map = [
|
||||||
metrics = new PcmData(pcmMap as 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
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
36
src/main/groovy/biz/nellemann/hmci/MetaSystem.groovy
Normal file
36
src/main/groovy/biz/nellemann/hmci/MetaSystem.groovy
Normal 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
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
11
src/main/groovy/biz/nellemann/hmci/pojo/SampleInfo.groovy
Normal file
11
src/main/groovy/biz/nellemann/hmci/pojo/SampleInfo.groovy
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
package biz.nellemann.hmci.pojo
|
||||||
|
|
||||||
|
import groovy.transform.ToString
|
||||||
|
|
||||||
|
@ToString
|
||||||
|
class SampleInfo {
|
||||||
|
|
||||||
|
String timeStamp
|
||||||
|
Integer status
|
||||||
|
|
||||||
|
}
|
|
@ -6,6 +6,7 @@ import groovy.transform.ToString
|
||||||
class UtilSample {
|
class UtilSample {
|
||||||
|
|
||||||
String sampleType
|
String sampleType
|
||||||
|
SampleInfo sampleInfo
|
||||||
ServerUtil serverUtil
|
ServerUtil serverUtil
|
||||||
List<ViosUtil> viosUtil
|
List<ViosUtil> viosUtil
|
||||||
List<LparUtil> lparsUtil
|
List<LparUtil> lparsUtil
|
||||||
|
|
|
@ -44,8 +44,8 @@ class HmcClientTest extends Specification {
|
||||||
mockServer.enqueue(new MockResponse().setBody(testXml));
|
mockServer.enqueue(new MockResponse().setBody(testXml));
|
||||||
|
|
||||||
when:
|
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")
|
||||||
Map<String, ManagedSystem> partitions = hmc.getLogicalPartitionsForManagedSystemWithId(system.id)
|
Map<String, LogicalPartition> partitions = hmc.getLogicalPartitionsForManagedSystemWithId(system.id)
|
||||||
|
|
||||||
then:
|
then:
|
||||||
partitions.size() == 12
|
partitions.size() == 12
|
||||||
|
|
37
src/test/groovy/biz/nellemann/hmci/InfluxClientTest.groovy
Normal file
37
src/test/groovy/biz/nellemann/hmci/InfluxClientTest.groovy
Normal 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"
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
|
@ -12,7 +12,7 @@ class LogicalPartitionTest extends Specification {
|
||||||
def testJson = testFile.getText('UTF-8')
|
def testJson = testFile.getText('UTF-8')
|
||||||
|
|
||||||
when:
|
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)
|
lpar.processMetrics(testJson)
|
||||||
|
|
||||||
then:
|
then:
|
||||||
|
|
|
@ -11,7 +11,7 @@ class ManagedSystemTest extends Specification {
|
||||||
def testJson = testFile.getText('UTF-8')
|
def testJson = testFile.getText('UTF-8')
|
||||||
|
|
||||||
when:
|
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)
|
system.processMetrics(testJson)
|
||||||
|
|
||||||
then:
|
then:
|
||||||
|
|
|
@ -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
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -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
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
Loading…
Reference in a new issue