diff --git a/README.md b/README.md index f541545..ed39e54 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ Metrics includes: - *Managed Systems* - the physical Power servers - *Logical Partitions* - the virtualized servers running AIX, Linux and IBM-i (AS/400) - - *Virtual I/O Servers* - the i/o partition(s) taking care of network and storage + - *Virtual I/O Servers* - the i/o partition(s) virtualizing network and storage - *Energy* - power consumption and temperatures (needs to be enabled and is not available for Power7, E870, E880 and E980) ![architecture](https://bitbucket.org/mnellemann/hmci/downloads/HMCi.png) @@ -71,7 +71,7 @@ Install *HMCi* on a host, which can connect to the Power HMC through HTTPS, and ### Compatibility with nextract Plus -From version 1.2 *HMCi* is made compatible with the similar [nextract Plus](https://www.ibm.com/support/pages/nextract-plus-hmc-rest-api-performance-statistics) tool from Nigel Griffiths. This means you can use the excellent Grafana [dashboards](https://grafana.com/grafana/dashboards/13819) made by Nigel with *HMCi*. +From version 1.2 *HMCi* is made compatible with the similar [nextract Plus](https://www.ibm.com/support/pages/nextract-plus-hmc-rest-api-performance-statistics) tool from Nigel Griffiths. This means that the Grafana [dashboards](https://grafana.com/grafana/dashboards/13819) made by Nigel are compatible with *HMCi*. ### Start InfluxDB and Grafana at boot on RedHat 7+ @@ -110,7 +110,7 @@ Restart the HMCi service on *systemd* based Linux systems: ```shell systemctl restart hmci -journalctl -u hmci # to check log output +journalctl -f -u hmci # to check log output ``` @@ -119,11 +119,10 @@ journalctl -u hmci # to check log output To install (or upgrade) on AIX, you need to pass the *--ignoreos* flag to the *rpm* command: ```shell -rpm -i --ignoreos hmci-x.y.z-n.noarch.rpm +rpm -Uvh --ignoreos hmci-x.y.z-n.noarch.rpm ``` - ## Grafana Screenshots Below are screenshots of the provided Grafana dashboards (found in the **doc/** folder), which can be used as a starting point. @@ -132,6 +131,7 @@ Below are screenshots of the provided Grafana dashboards (found in the **doc/** - [hmci-vois.png](https://bitbucket.org/mnellemann/hmci/downloads/hmci-vios-dashboard.png) - [hmci-lpars](https://bitbucket.org/mnellemann/hmci/downloads/hmci-lpars-dashboard.png) + ## Known problems ### Incomplete test of metrics diff --git a/build.gradle b/build.gradle index 2667016..927dd6e 100644 --- a/build.gradle +++ b/build.gradle @@ -19,8 +19,8 @@ repositories { dependencies { annotationProcessor 'info.picocli:picocli-codegen:4.6.1' implementation 'info.picocli:picocli:4.6.1' - implementation 'org.jsoup:jsoup:1.14.1' - implementation 'com.squareup.okhttp3:okhttp:4.9.1' + implementation 'org.jsoup:jsoup:1.14.3' + implementation 'com.squareup.okhttp3:okhttp:4.9.2' implementation 'com.squareup.moshi:moshi:1.12.0' implementation 'com.serjltt.moshi:moshi-lazy-adapters:2.2' implementation 'org.tomlj:tomlj:1.0.0' @@ -29,12 +29,13 @@ dependencies { implementation 'org.slf4j:slf4j-simple:1.7.32' testImplementation 'org.spockframework:spock-core:2.0-groovy-3.0' - testImplementation 'com.squareup.okhttp3:mockwebserver:4.9.1' + testImplementation 'com.squareup.okhttp3:mockwebserver:4.9.2' testImplementation 'org.slf4j:slf4j-simple:1.7.32' } application { mainClass.set('biz.nellemann.hmci.Application') + applicationDefaultJvmArgs = [ "-server", "-Xms256m", "-Xmx1024m", "-XX:+UseG1GC" ] } test { @@ -78,7 +79,7 @@ buildDeb { } jacoco { - toolVersion = "0.8.6" + toolVersion = "0.8.7" } jacocoTestReport { @@ -95,7 +96,7 @@ jacocoTestCoverageVerification { violationRules { rule { limit { - minimum = 0.4 // TODO: Raise when more tests are implemented + minimum = 0.5 // TODO: Raise when more tests are implemented } } } @@ -117,5 +118,14 @@ jar { } } +tasks.create("packages") { + group "build" + + dependsOn ":build" + dependsOn ":buildDeb" + dependsOn ":buildRpm" + +} + sourceCompatibility = 1.8 targetCompatibility = 1.8 diff --git a/doc/IBM Power - HMCi - Logical Partitions-1623356281973.json b/doc/IBM Power - HMCi - Logical Partitions-1634298885351.json similarity index 81% rename from doc/IBM Power - HMCi - Logical Partitions-1623356281973.json rename to doc/IBM Power - HMCi - Logical Partitions-1634298885351.json index 1b84bf0..a08043d 100644 --- a/doc/IBM Power - HMCi - Logical Partitions-1623356281973.json +++ b/doc/IBM Power - HMCi - Logical Partitions-1634298885351.json @@ -12,15 +12,15 @@ "__requires": [ { "type": "panel", - "id": "gauge", - "name": "Gauge", + "id": "bargauge", + "name": "Bar gauge", "version": "" }, { "type": "grafana", "id": "grafana", "name": "Grafana", - "version": "8.0.0" + "version": "8.1.4" }, { "type": "panel", @@ -45,6 +45,12 @@ "id": "table", "name": "Table", "version": "" + }, + { + "type": "panel", + "id": "timeseries", + "name": "Time series", + "version": "" } ], "annotations": { @@ -57,6 +63,12 @@ "hide": true, "iconColor": "rgba(0, 211, 255, 1)", "name": "Annotations & Alerts", + "target": { + "limit": 100, + "matchAny": false, + "tags": [], + "type": "dashboard" + }, "type": "dashboard" } ] @@ -66,7 +78,7 @@ "gnetId": 1510, "graphTooltip": 0, "id": null, - "iteration": 1623355370775, + "iteration": 1634297424099, "links": [], "panels": [ { @@ -113,15 +125,21 @@ { "matcher": { "id": "byName", - "options": "Affinity Score" + "options": "Name" }, "properties": [ { - "id": "color", - "value": { - "mode": "continuous-RdYlGr" - } - }, + "id": "custom.width", + "value": 362 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Utilization vCPU" + }, + "properties": [ { "id": "unit", "value": "percent" @@ -133,200 +151,67 @@ { "id": "color", "value": { - "mode": "continuous-RdYlGr" + "mode": "continuous-GrYlRd" } }, { - "id": "custom.width", - "value": 372 + "id": "max", + "value": 100 } ] }, { "matcher": { "id": "byName", - "options": "ID" + "options": "Weight" }, "properties": [ { "id": "custom.width", - "value": 126 - } - ] - } - ] - }, - "gridPos": { - "h": 7, - "w": 12, - "x": 0, - "y": 1 - }, - "id": 31, - "options": { - "frameIndex": 0, - "showHeader": true, - "sortBy": [] - }, - "pluginVersion": "8.0.0", - "targets": [ - { - "alias": "", - "groupBy": [ - { - "params": [ - "lparname" - ], - "type": "tag" - } - ], - "measurement": "lpar_details", - "orderByTime": "ASC", - "policy": "default", - "query": "SELECT last(\"id\") AS \"ID\", \"osType\" AS \"OS\", \"state\" AS \"State\", \"affinityScore\" AS \"Affinity Score\" FROM \"lpar_details\" WHERE (\"servername\" =~ /^$ServerName$/) AND (\"lparname\" =~ /^$LPAR$/) AND $timeFilter GROUP BY \"lparname\"", - "queryType": "randomWalk", - "rawQuery": false, - "refId": "A", - "resultFormat": "table", - "select": [ - [ - { - "params": [ - "id" - ], - "type": "field" - }, - { - "params": [], - "type": "last" - }, - { - "params": [ - "id" - ], - "type": "alias" - } - ], - [ - { - "params": [ - "type" - ], - "type": "field" - } - ], - [ - { - "params": [ - "affinityScore" - ], - "type": "field" - } - ], - [ - { - "params": [ - "state" - ], - "type": "field" - } - ], - [ - { - "params": [ - "osType" - ], - "type": "field" - } - ] - ], - "tags": [ - { - "key": "lparname", - "operator": "=~", - "value": "/^$LPAR$/" - } - ] - } - ], - "timeFrom": null, - "timeShift": null, - "title": "LPAR Details", - "transformations": [ - { - "id": "organize", - "options": { - "excludeByName": { - "Time": true, - "type": true - }, - "indexByName": {}, - "renameByName": { - "affinityScore": "Affinity Score", - "id": "ID", - "lparname": "Name", - "osType": "OS", - "state": "State", - "type": "Type" - } - } - }, - { - "id": "sortBy", - "options": { - "fields": {}, - "sort": [ - { - "field": "Name" - } - ] - } - } - ], - "type": "table" - }, - { - "datasource": "${DS_INFLUXDB-HMCI}", - "description": "", - "fieldConfig": { - "defaults": { - "color": { - "mode": "continuous-RdYlGr" - }, - "custom": { - "align": "center", - "displayMode": "auto", - "filterable": true - }, - "mappings": [], - "thresholds": { - "mode": "percentage", - "steps": [ - { - "color": "green", - "value": null + "value": 104 } ] }, - "unit": "none" - }, - "overrides": [ { "matcher": { "id": "byName", - "options": "Name" + "options": "eCPU" }, "properties": [ { "id": "custom.width", - "value": 293 + "value": 82 } ] }, { "matcher": { "id": "byName", - "options": "Utilization" + "options": "VP" + }, + "properties": [ + { + "id": "custom.width", + "value": 68 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Mode" + }, + "properties": [ + { + "id": "custom.width", + "value": 116 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Utilization eCPU" }, "properties": [ { @@ -348,68 +233,98 @@ { "matcher": { "id": "byName", - "options": "Weight" + "options": "eCPU" }, "properties": [ { "id": "custom.width", - "value": 104 + "value": 96 } ] }, { "matcher": { "id": "byName", - "options": "Entitled" + "options": "vCPU" }, "properties": [ { "id": "custom.width", - "value": 111 + "value": 75 } ] }, { "matcher": { "id": "byName", - "options": "VP" + "options": "Affinity Score" }, "properties": [ + { + "id": "unit", + "value": "percent" + }, + { + "id": "custom.displayMode", + "value": "basic" + }, + { + "id": "max", + "value": 100 + }, { "id": "custom.width", - "value": 108 + "value": 817 } ] }, { "matcher": { "id": "byName", - "options": "Mode" + "options": "ID" }, "properties": [ { "id": "custom.width", - "value": 121 + "value": 115 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "State" + }, + "properties": [ + { + "id": "custom.width", + "value": 212 } ] } ] }, "gridPos": { - "h": 7, - "w": 12, - "x": 12, + "h": 8, + "w": 24, + "x": 0, "y": 1 }, "id": 32, "options": { + "frameIndex": 0, "showHeader": true, - "sortBy": [] + "sortBy": [ + { + "desc": false, + "displayName": "Name" + } + ] }, - "pluginVersion": "8.0.0", + "pluginVersion": "8.1.4", "targets": [ { - "alias": "Read", + "alias": "Details", "groupBy": [ { "params": [ @@ -422,7 +337,7 @@ "measurement": "lpar_details", "orderByTime": "ASC", "policy": "default", - "query": "SELECT last(\"weight\") AS \"Weight\", last(\"entitledProcUnits\") AS \"Entitled\", last(\"currentVirtualProcessors\") AS \"VP\", (last(\"utilizedProcUnits\") / last(\"maxProcUnits\")) * 100 AS \"Utilization\", last(\"mode\") AS \"Mode\" FROM \"lpar_processor\" WHERE (\"servername\" =~ /^$ServerName$/) AND (\"lparname\" =~ /^$LPAR$/) AND $timeFilter GROUP BY \"lparname\" fill(previous)", + "query": "SELECT last(\"weight\") AS \"Weight\", last(\"mode\") AS \"Mode\", last(\"entitledProcUnits\") AS \"eCPU\", (last(\"utilizedProcUnits\") / last(\"entitledProcUnits\")) * 100 AS \"Utilization eCPU\", last(\"currentVirtualProcessors\") AS \"vCPU\", (last(\"utilizedProcUnits\") / last(\"maxProcUnits\")) * 100 AS \"Utilization vCPU\" FROM \"lpar_processor\" WHERE (\"servername\" =~ /^$ServerName$/) AND (\"lparname\" =~ /^$LPAR$/) AND $timeFilter GROUP BY \"lparname\" fill(previous)", "queryType": "randomWalk", "rawQuery": true, "refId": "A", @@ -486,11 +401,19 @@ "value": "/^$LPAR$/" } ] + }, + { + "alias": "Details", + "hide": false, + "query": "SELECT last(\"id\") AS \"ID\", last(\"state\") as \"State\", last(\"osType\") as \"OS Type\", last(\"affinityScore\") as \"Affinity Score\" FROM \"lpar_details\" WHERE (\"lparname\" =~ /^$LPAR$/) AND $timeFilter GROUP BY \"lparname\" fill(previous)", + "rawQuery": true, + "refId": "B", + "resultFormat": "table" } ], "timeFrom": null, "timeShift": null, - "title": "LPAR Processor", + "title": "Overview", "transformations": [ { "id": "organize", @@ -522,6 +445,7 @@ } } ], + "transparent": true, "type": "table" }, { @@ -531,7 +455,149 @@ "h": 1, "w": 24, "x": 0, - "y": 8 + "y": 9 + }, + "id": 21, + "panels": [], + "repeat": null, + "title": "Processors", + "type": "row" + }, + { + "datasource": "${DS_INFLUXDB-HMCI}", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "area" + } + }, + "links": [], + "mappings": [], + "max": 110, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "#EAB839", + "value": 75 + }, + { + "color": "red", + "value": 90 + } + ] + }, + "unit": "percent" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 24, + "x": 0, + "y": 10 + }, + "id": 2, + "links": [], + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom" + }, + "tooltip": { + "mode": "multi" + } + }, + "pluginVersion": "8.1.4", + "targets": [ + { + "alias": "$tag_lparname", + "groupBy": [ + { + "params": [ + "$__interval" + ], + "type": "time" + }, + { + "params": [ + "null" + ], + "type": "fill" + } + ], + "hide": false, + "measurement": "/^$ServerName$/", + "orderByTime": "ASC", + "policy": "default", + "query": "SELECT (last(\"utilizedProcUnits\") / last(\"maxProcUnits\")) * 100 AS \"usage\" FROM \"lpar_processor\" WHERE (\"servername\" =~ /^$ServerName$/ AND \"lparname\" =~ /^$LPAR$/) AND $timeFilter GROUP BY time($interval), \"lparname\", \"servername\" fill(null)", + "rawQuery": true, + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "value" + ], + "type": "field" + }, + { + "params": [], + "type": "mean" + } + ] + ], + "tags": [] + } + ], + "timeFrom": null, + "timeShift": null, + "title": "Processor Units - Utilization Percentage", + "transformations": [], + "type": "timeseries" + }, + { + "collapsed": false, + "datasource": "${DS_INFLUXDB-HMCI}", + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 18 }, "id": 18, "panels": [], @@ -558,22 +624,22 @@ "fillGradient": 1, "grid": {}, "gridPos": { - "h": 7, + "h": 9, "w": 12, "x": 0, - "y": 9 + "y": 19 }, "hiddenSeries": false, "id": 11, "legend": { - "alignAsTable": true, + "alignAsTable": false, "avg": true, "current": false, "hideEmpty": true, "hideZero": true, "max": true, "min": true, - "show": false, + "show": true, "sort": "avg", "sortDesc": true, "total": false, @@ -587,13 +653,13 @@ "alertThreshold": true }, "percentage": false, - "pluginVersion": "8.0.0", + "pluginVersion": "8.1.4", "pointradius": 5, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, - "stack": false, + "stack": true, "steppedLine": false, "style": {}, "targets": [ @@ -632,7 +698,7 @@ }, { "params": [], - "type": "mean" + "type": "last" } ] ], @@ -714,22 +780,22 @@ "fillGradient": 1, "grid": {}, "gridPos": { - "h": 7, + "h": 9, "w": 12, "x": 12, - "y": 9 + "y": 19 }, "hiddenSeries": false, "id": 19, "legend": { - "alignAsTable": true, + "alignAsTable": false, "avg": true, "current": false, "hideEmpty": true, "hideZero": true, "max": true, "min": true, - "show": false, + "show": true, "sort": "avg", "sortDesc": true, "total": false, @@ -743,13 +809,13 @@ "alertThreshold": true }, "percentage": false, - "pluginVersion": "8.0.0", + "pluginVersion": "8.1.4", "pointradius": 5, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, - "stack": false, + "stack": true, "steppedLine": false, "style": {}, "targets": [ @@ -788,7 +854,7 @@ }, { "params": [], - "type": "mean" + "type": "last" } ] ], @@ -865,22 +931,22 @@ "fillGradient": 1, "grid": {}, "gridPos": { - "h": 4, + "h": 7, "w": 12, "x": 0, - "y": 16 + "y": 28 }, "hiddenSeries": false, "id": 13, "legend": { - "alignAsTable": true, + "alignAsTable": false, "avg": true, "current": false, "hideEmpty": true, "hideZero": true, "max": true, "min": true, - "show": false, + "show": true, "sort": "avg", "sortDesc": true, "total": false, @@ -894,13 +960,13 @@ "alertThreshold": true }, "percentage": false, - "pluginVersion": "8.0.0", + "pluginVersion": "8.1.4", "pointradius": 5, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, - "stack": false, + "stack": true, "steppedLine": false, "style": {}, "targets": [ @@ -1046,10 +1112,10 @@ "fillGradient": 1, "grid": {}, "gridPos": { - "h": 4, + "h": 7, "w": 12, "x": 12, - "y": 16 + "y": 28 }, "hiddenSeries": false, "id": 12, @@ -1075,13 +1141,13 @@ "alertThreshold": true }, "percentage": false, - "pluginVersion": "8.0.0", + "pluginVersion": "8.1.4", "pointradius": 5, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, - "stack": false, + "stack": true, "steppedLine": false, "style": {}, "targets": [ @@ -1220,7 +1286,7 @@ "h": 1, "w": 24, "x": 0, - "y": 20 + "y": 35 }, "id": 15, "panels": [], @@ -1249,10 +1315,10 @@ "fillGradient": 2, "grid": {}, "gridPos": { - "h": 6, + "h": 8, "w": 12, "x": 0, - "y": 21 + "y": 36 }, "hiddenSeries": false, "id": 8, @@ -1279,7 +1345,7 @@ "alertThreshold": true }, "percentage": false, - "pluginVersion": "8.0.0", + "pluginVersion": "8.1.4", "pointradius": 5, "points": false, "renderer": "flot", @@ -1289,7 +1355,7 @@ } ], "spaceLength": 10, - "stack": false, + "stack": true, "steppedLine": false, "style": {}, "targets": [ @@ -1415,10 +1481,10 @@ "fillGradient": 2, "grid": {}, "gridPos": { - "h": 6, + "h": 8, "w": 12, "x": 12, - "y": 21 + "y": 36 }, "hiddenSeries": false, "id": 16, @@ -1444,7 +1510,7 @@ "alertThreshold": true }, "percentage": false, - "pluginVersion": "8.0.0", + "pluginVersion": "8.1.4", "pointradius": 5, "points": false, "renderer": "flot", @@ -1454,7 +1520,7 @@ } ], "spaceLength": 10, - "stack": false, + "stack": true, "steppedLine": false, "style": {}, "targets": [ @@ -1567,272 +1633,7 @@ "h": 1, "w": 24, "x": 0, - "y": 27 - }, - "id": 21, - "panels": [], - "repeat": null, - "title": "Processors", - "type": "row" - }, - { - "aliasColors": {}, - "bars": false, - "content": "", - "dashLength": 10, - "dashes": false, - "datasource": "${DS_INFLUXDB-HMCI}", - "decimals": 2, - "editable": true, - "error": false, - "fieldConfig": { - "defaults": { - "links": [] - }, - "overrides": [] - }, - "fill": 0, - "fillGradient": 0, - "grid": {}, - "gridPos": { - "h": 8, - "w": 14, - "x": 0, - "y": 28 - }, - "hiddenSeries": false, - "id": 2, - "legend": { - "alignAsTable": false, - "avg": false, - "current": false, - "max": false, - "min": false, - "rightSide": false, - "show": true, - "sort": "avg", - "sortDesc": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, - "links": [], - "mode": "", - "nullPointMode": "connected", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "8.0.0", - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "style": {}, - "targets": [ - { - "alias": "$tag_lparname", - "groupBy": [ - { - "params": [ - "$__interval" - ], - "type": "time" - }, - { - "params": [ - "null" - ], - "type": "fill" - } - ], - "hide": false, - "measurement": "/^$ServerName$/", - "orderByTime": "ASC", - "policy": "default", - "query": "SELECT (last(\"utilizedProcUnits\") / last(\"maxProcUnits\")) * 100 AS \"usage\" FROM \"lpar_processor\" WHERE (\"servername\" =~ /^$ServerName$/ AND \"lparname\" =~ /^$LPAR$/) AND $timeFilter GROUP BY time($interval), \"lparname\", \"servername\" fill(null)", - "rawQuery": true, - "refId": "A", - "resultFormat": "time_series", - "select": [ - [ - { - "params": [ - "value" - ], - "type": "field" - }, - { - "params": [], - "type": "mean" - } - ] - ], - "tags": [] - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Processor Units - Utilization Percentage", - "tooltip": { - "msResolution": false, - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "transformations": [], - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "$$hashKey": "object:4943", - "decimals": null, - "format": "percent", - "label": "", - "logBase": 1, - "max": "110", - "min": "0", - "show": true - }, - { - "$$hashKey": "object:4944", - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": false - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "datasource": "${DS_INFLUXDB-HMCI}", - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "decimals": 2, - "links": [], - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "#EAB839", - "value": 65 - }, - { - "color": "orange", - "value": 80 - }, - { - "color": "red", - "value": 95 - } - ] - }, - "unit": "percent" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 10, - "x": 14, - "y": 28 - }, - "id": 34, - "links": [], - "options": { - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "showThresholdLabels": false, - "showThresholdMarkers": true, - "text": {} - }, - "pluginVersion": "8.0.0", - "targets": [ - { - "alias": "$tag_lparname", - "groupBy": [ - { - "params": [ - "$__interval" - ], - "type": "time" - }, - { - "params": [ - "null" - ], - "type": "fill" - } - ], - "hide": false, - "measurement": "/^$ServerName$/", - "orderByTime": "ASC", - "policy": "default", - "query": "SELECT (last(\"utilizedProcUnits\") / last(\"maxProcUnits\")) * 100 AS \"usage\" FROM \"lpar_processor\" WHERE (\"servername\" =~ /^$ServerName$/ AND \"lparname\" =~ /^$LPAR$/) AND $timeFilter GROUP BY time($interval), \"lparname\", \"servername\" fill(null)", - "rawQuery": true, - "refId": "A", - "resultFormat": "time_series", - "select": [ - [ - { - "params": [ - "value" - ], - "type": "field" - }, - { - "params": [], - "type": "mean" - } - ] - ], - "tags": [] - } - ], - "timeFrom": null, - "timeShift": null, - "title": "Processor Units - Utilization Percentage", - "transformations": [], - "type": "gauge" - }, - { - "collapsed": false, - "datasource": "${DS_INFLUXDB-HMCI}", - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 36 + "y": 44 }, "id": 23, "panels": [], @@ -1841,27 +1642,21 @@ "type": "row" }, { + "cacheTimeout": null, "datasource": "${DS_INFLUXDB-HMCI}", "description": "", "fieldConfig": { "defaults": { + "color": { + "mode": "thresholds" + }, "mappings": [], - "max": 100, - "min": 0, "thresholds": { - "mode": "absolute", + "mode": "percentage", "steps": [ - { - "color": "red", - "value": null - }, - { - "color": "yellow", - "value": 70 - }, { "color": "green", - "value": 100 + "value": null } ] }, @@ -1873,10 +1668,15 @@ "h": 8, "w": 12, "x": 0, - "y": 37 + "y": 45 }, "id": 9, + "interval": null, + "links": [], "options": { + "colorMode": "background", + "graphMode": "area", + "justifyMode": "center", "orientation": "auto", "reduceOptions": { "calcs": [ @@ -1885,11 +1685,10 @@ "fields": "", "values": false }, - "showThresholdLabels": false, - "showThresholdMarkers": true, - "text": {} + "text": {}, + "textMode": "auto" }, - "pluginVersion": "8.0.0", + "pluginVersion": "8.1.4", "targets": [ { "alias": "$tag_lparname", @@ -1952,7 +1751,7 @@ "timeFrom": null, "timeShift": null, "title": "NUMA Affinity Score", - "type": "gauge" + "type": "stat" }, { "cacheTimeout": null, @@ -1981,14 +1780,12 @@ "h": 8, "w": 12, "x": 12, - "y": 37 + "y": 45 }, "id": 33, "links": [], "options": { - "colorMode": "value", - "graphMode": "area", - "justifyMode": "auto", + "displayMode": "basic", "orientation": "auto", "reduceOptions": { "calcs": [ @@ -1997,10 +1794,10 @@ "fields": "", "values": false }, - "text": {}, - "textMode": "auto" + "showUnfilled": true, + "text": {} }, - "pluginVersion": "8.0.0", + "pluginVersion": "8.1.4", "targets": [ { "alias": "$tag_lparname", @@ -2063,10 +1860,10 @@ "timeFrom": null, "timeShift": null, "title": "Memory Assigned", - "type": "stat" + "type": "bargauge" } ], - "refresh": "1m", + "refresh": "30s", "schemaVersion": 30, "style": "dark", "tags": [ @@ -2129,12 +1926,12 @@ ] }, "time": { - "from": "now-6h", + "from": "now-3h", "now": false, - "to": "now-1m" + "to": "now-30s" }, "timepicker": { - "nowDelay": "1m", + "nowDelay": "30s", "refresh_intervals": [ "30s", "1m", @@ -2160,5 +1957,5 @@ "timezone": "browser", "title": "IBM Power - HMCi - Logical Partitions", "uid": "Xl7oHESGz", - "version": 29 + "version": 47 } \ No newline at end of file diff --git a/doc/IBM Power - HMCi - System Resources-1623356293052.json b/doc/IBM Power - HMCi - System Resources-1628756348926.json similarity index 74% rename from doc/IBM Power - HMCi - System Resources-1623356293052.json rename to doc/IBM Power - HMCi - System Resources-1628756348926.json index a109ecc..cd29ee7 100644 --- a/doc/IBM Power - HMCi - System Resources-1623356293052.json +++ b/doc/IBM Power - HMCi - System Resources-1628756348926.json @@ -10,11 +10,17 @@ } ], "__requires": [ + { + "type": "panel", + "id": "gauge", + "name": "Gauge", + "version": "" + }, { "type": "grafana", "id": "grafana", "name": "Grafana", - "version": "8.0.0" + "version": "8.0.6" }, { "type": "panel", @@ -27,6 +33,12 @@ "id": "influxdb", "name": "InfluxDB", "version": "1.0.0" + }, + { + "type": "panel", + "id": "stat", + "name": "Stat", + "version": "" } ], "annotations": { @@ -48,7 +60,7 @@ "gnetId": 1465, "graphTooltip": 0, "id": null, - "iteration": 1623356287981, + "iteration": 1628746731767, "links": [], "panels": [ { @@ -97,12 +109,12 @@ "legend": { "alignAsTable": false, "avg": false, - "current": true, + "current": false, "max": false, "min": false, "show": true, "total": false, - "values": true + "values": false }, "lines": true, "linewidth": 1, @@ -113,7 +125,7 @@ "alertThreshold": true }, "percentage": false, - "pluginVersion": "8.0.0", + "pluginVersion": "8.0.6", "pointradius": 5, "points": false, "renderer": "flot", @@ -124,7 +136,7 @@ "style": {}, "targets": [ { - "alias": "$tag_poolname - $col - ", + "alias": "$tag_poolname", "dsType": "influxdb", "groupBy": [ { @@ -145,6 +157,12 @@ ], "type": "tag" }, + { + "params": [ + "pool" + ], + "type": "tag" + }, { "params": [ "null" @@ -156,6 +174,8 @@ "measurement": "server_sharedProcessorPool", "orderByTime": "ASC", "policy": "default", + "query": "SELECT mean(\"utilizedProcUnits\") AS \"utilized\" FROM \"server_sharedProcessorPool\" WHERE (\"servername\" =~ /^$ServerName$/) AND $timeFilter GROUP BY time($interval), \"servername\", \"poolname\", \"pool\" fill(null)", + "rawQuery": false, "refId": "A", "resultFormat": "time_series", "select": [ @@ -172,7 +192,7 @@ }, { "params": [ - "Utilized Proc. Units" + "utilized" ], "type": "alias" } @@ -191,7 +211,448 @@ "timeFrom": null, "timeRegions": [], "timeShift": null, - "title": "Shared Processor Pools", + "title": "Shared Processor Pools - Core Utilization", + "tooltip": { + "msResolution": false, + "shared": true, + "sort": 0, + "value_type": "cumulative" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "$$hashKey": "object:3244", + "format": "short", + "label": "cores", + "logBase": 1, + "max": null, + "min": "0", + "show": true + }, + { + "$$hashKey": "object:3245", + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "datasource": null, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 2, + "mappings": [], + "max": 100, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "#EAB839", + "value": 70 + }, + { + "color": "orange", + "value": 80 + }, + { + "color": "red", + "value": 90 + } + ] + }, + "unit": "percent" + }, + "overrides": [] + }, + "gridPos": { + "h": 9, + "w": 7, + "x": 12, + "y": 1 + }, + "id": 29, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "auto" + }, + "pluginVersion": "8.0.6", + "targets": [ + { + "alias": "$tag_poolname", + "groupBy": [ + { + "params": [ + "$__interval" + ], + "type": "time" + }, + { + "params": [ + "poolname" + ], + "type": "tag" + }, + { + "params": [ + "null" + ], + "type": "fill" + } + ], + "measurement": "server_sharedProcessorPool", + "orderByTime": "ASC", + "policy": "default", + "query": "SELECT (mean(\"utilizedProcUnits\") / mean(\"assignedProcUnits\")) * 100 AS \"Utilization\" FROM \"server_sharedProcessorPool\" WHERE (\"servername\" =~ /^$ServerName$/) AND $timeFilter GROUP BY time($__interval), \"poolname\" fill(null)", + "rawQuery": true, + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "utilizedProcUnits" + ], + "type": "field" + }, + { + "params": [], + "type": "mean" + } + ] + ], + "tags": [ + { + "key": "servername", + "operator": "=~", + "value": "/^$ServerName$/" + } + ] + } + ], + "title": "Shared Processor Pools - Utilization Percentage", + "type": "stat" + }, + { + "datasource": null, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 2, + "displayName": "Physical Pool", + "mappings": [], + "max": 98, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "#EAB839", + "value": 70 + }, + { + "color": "orange", + "value": 80 + }, + { + "color": "red", + "value": 90 + } + ] + }, + "unit": "percent" + }, + "overrides": [] + }, + "gridPos": { + "h": 9, + "w": 5, + "x": 19, + "y": 1 + }, + "id": 30, + "options": { + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "text": {} + }, + "pluginVersion": "8.0.6", + "targets": [ + { + "alias": "", + "groupBy": [ + { + "params": [ + "$__interval" + ], + "type": "time" + }, + { + "params": [ + "poolname" + ], + "type": "tag" + }, + { + "params": [ + "null" + ], + "type": "fill" + } + ], + "measurement": "server_sharedProcessorPool", + "orderByTime": "ASC", + "policy": "default", + "query": "SELECT (mean(\"utilizedProcUnits\") / mean(\"availableProcUnits\")) * 100 AS \"Utilization\" FROM \"server_physicalProcessorPool\" WHERE (\"servername\" =~ /^$ServerName$/) AND $timeFilter GROUP BY time($__interval) fill(null)", + "rawQuery": true, + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "utilizedProcUnits" + ], + "type": "field" + }, + { + "params": [], + "type": "mean" + } + ] + ], + "tags": [ + { + "key": "servername", + "operator": "=~", + "value": "/^$ServerName$/" + } + ] + } + ], + "title": "Processor Pool - Utilization Percentage", + "type": "gauge" + }, + { + "aliasColors": {}, + "bars": false, + "content": "", + "dashLength": 10, + "dashes": false, + "datasource": "${DS_INFLUXDB-HMCI}", + "decimals": 2, + "description": "", + "editable": true, + "error": false, + "fieldConfig": { + "defaults": { + "links": [] + }, + "overrides": [] + }, + "fill": 1, + "fillGradient": 1, + "grid": {}, + "gridPos": { + "h": 9, + "w": 12, + "x": 0, + "y": 10 + }, + "hiddenSeries": false, + "id": 27, + "legend": { + "alignAsTable": false, + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "mode": "", + "nullPointMode": "connected", + "options": { + "alertThreshold": false + }, + "percentage": false, + "pluginVersion": "8.0.6", + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "style": {}, + "targets": [ + { + "alias": "$col", + "dsType": "influxdb", + "groupBy": [ + { + "params": [ + "$interval" + ], + "type": "time" + }, + { + "params": [ + "servername" + ], + "type": "tag" + }, + { + "params": [ + "null" + ], + "type": "fill" + } + ], + "hide": false, + "measurement": "server_physicalProcessorPool", + "orderByTime": "ASC", + "policy": "default", + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "utilizedProcUnits" + ], + "type": "field" + }, + { + "params": [], + "type": "mean" + }, + { + "params": [ + "utlized" + ], + "type": "alias" + } + ], + [ + { + "params": [ + "borrowedProcUnits" + ], + "type": "field" + }, + { + "params": [], + "type": "mean" + }, + { + "params": [ + "borrowed" + ], + "type": "alias" + } + ], + [ + { + "params": [ + "availableProcUnits" + ], + "type": "field" + }, + { + "params": [], + "type": "mean" + }, + { + "params": [ + "available" + ], + "type": "alias" + } + ], + [ + { + "params": [ + "configuredProcUnits" + ], + "type": "field" + }, + { + "params": [], + "type": "mean" + }, + { + "params": [ + "configured" + ], + "type": "alias" + } + ] + ], + "tags": [ + { + "key": "servername", + "operator": "=~", + "value": "/^$ServerName$/" + } + ] + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Physical Processor Pool - Core Utilization", "tooltip": { "msResolution": false, "shared": true, @@ -254,7 +715,7 @@ "h": 9, "w": 12, "x": 12, - "y": 1 + "y": 10 }, "hiddenSeries": false, "id": 2, @@ -277,7 +738,7 @@ "alertThreshold": true }, "percentage": false, - "pluginVersion": "8.0.0", + "pluginVersion": "8.0.6", "pointradius": 5, "points": false, "renderer": "flot", @@ -288,7 +749,7 @@ "style": {}, "targets": [ { - "alias": "Utilized", + "alias": "$col", "dsType": "influxdb", "groupBy": [ { @@ -327,47 +788,14 @@ { "params": [], "type": "mean" + }, + { + "params": [ + "utilized" + ], + "type": "alias" } - ] - ], - "tags": [ - { - "key": "servername", - "operator": "=~", - "value": "/^$ServerName$/" - } - ] - }, - { - "alias": "Available", - "dsType": "influxdb", - "groupBy": [ - { - "params": [ - "$interval" - ], - "type": "time" - }, - { - "params": [ - "servername" - ], - "type": "tag" - }, - { - "params": [ - "null" - ], - "type": "fill" - } - ], - "hide": false, - "measurement": "server_processor", - "orderByTime": "ASC", - "policy": "default", - "refId": "B", - "resultFormat": "time_series", - "select": [ + ], [ { "params": [ @@ -378,47 +806,14 @@ { "params": [], "type": "mean" + }, + { + "params": [ + "available" + ], + "type": "alias" } - ] - ], - "tags": [ - { - "key": "servername", - "operator": "=~", - "value": "/^$ServerName$/" - } - ] - }, - { - "alias": "Configurable", - "dsType": "influxdb", - "groupBy": [ - { - "params": [ - "$interval" - ], - "type": "time" - }, - { - "params": [ - "servername" - ], - "type": "tag" - }, - { - "params": [ - "null" - ], - "type": "fill" - } - ], - "hide": false, - "measurement": "server_processor", - "orderByTime": "ASC", - "policy": "default", - "refId": "C", - "resultFormat": "time_series", - "select": [ + ], [ { "params": [ @@ -429,57 +824,12 @@ { "params": [], "type": "mean" - } - ] - ], - "tags": [ - { - "key": "servername", - "operator": "=~", - "value": "/^$ServerName$/" - } - ] - }, - { - "alias": "Total", - "dsType": "influxdb", - "groupBy": [ - { - "params": [ - "$interval" - ], - "type": "time" - }, - { - "params": [ - "servername" - ], - "type": "tag" - }, - { - "params": [ - "null" - ], - "type": "fill" - } - ], - "hide": false, - "measurement": "server_processor", - "orderByTime": "ASC", - "policy": "default", - "refId": "D", - "resultFormat": "time_series", - "select": [ - [ - { - "params": [ - "totalProcUnits" - ], - "type": "field" }, { - "params": [], - "type": "mean" + "params": [ + "configurable" + ], + "type": "alias" } ] ], @@ -496,7 +846,7 @@ "timeFrom": null, "timeRegions": [], "timeShift": null, - "title": "Processor Units", + "title": "Processor Units - Core Utilization", "tooltip": { "msResolution": false, "shared": true, @@ -553,13 +903,204 @@ "overrides": [] }, "fill": 1, - "fillGradient": 1, + "fillGradient": 2, "grid": {}, "gridPos": { "h": 9, "w": 12, "x": 0, - "y": 10 + "y": 19 + }, + "hiddenSeries": false, + "id": 11, + "legend": { + "alignAsTable": false, + "avg": false, + "current": false, + "hideEmpty": true, + "hideZero": true, + "max": false, + "min": false, + "rightSide": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "mode": "", + "nullPointMode": "connected", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "8.0.6", + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "style": {}, + "targets": [ + { + "alias": "$tag_vlanId - $col", + "dsType": "influxdb", + "groupBy": [ + { + "params": [ + "$interval" + ], + "type": "time" + }, + { + "params": [ + "servername" + ], + "type": "tag" + }, + { + "params": [ + "vlanId" + ], + "type": "tag" + }, + { + "params": [ + "null" + ], + "type": "fill" + } + ], + "hide": false, + "measurement": "lpar_net_virtual", + "orderByTime": "ASC", + "policy": "default", + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "receivedBytes" + ], + "type": "field" + }, + { + "params": [], + "type": "mean" + }, + { + "params": [ + "recv" + ], + "type": "alias" + } + ], + [ + { + "params": [ + "sentBytes" + ], + "type": "field" + }, + { + "params": [], + "type": "mean" + }, + { + "params": [ + " *-1" + ], + "type": "math" + }, + { + "params": [ + "sent" + ], + "type": "alias" + } + ] + ], + "tags": [ + { + "key": "servername", + "operator": "=~", + "value": "/^$ServerName$/" + } + ] + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Network Throughput - VLAN", + "tooltip": { + "msResolution": false, + "shared": true, + "sort": 2, + "value_type": "cumulative" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "$$hashKey": "object:1686", + "format": "binBps", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "$$hashKey": "object:1687", + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "content": "", + "dashLength": 10, + "dashes": false, + "datasource": "${DS_INFLUXDB-HMCI}", + "description": "", + "editable": true, + "error": false, + "fieldConfig": { + "defaults": { + "links": [] + }, + "overrides": [] + }, + "fill": 1, + "fillGradient": 1, + "grid": {}, + "gridPos": { + "h": 9, + "w": 12, + "x": 12, + "y": 19 }, "hiddenSeries": false, "id": 16, @@ -585,7 +1126,7 @@ "alertThreshold": true }, "percentage": false, - "pluginVersion": "8.0.0", + "pluginVersion": "8.0.6", "pointradius": 5, "points": false, "renderer": "flot", @@ -697,197 +1238,6 @@ "alignLevel": null } }, - { - "aliasColors": {}, - "bars": false, - "content": "", - "dashLength": 10, - "dashes": false, - "datasource": "${DS_INFLUXDB-HMCI}", - "description": "", - "editable": true, - "error": false, - "fieldConfig": { - "defaults": { - "links": [] - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 2, - "grid": {}, - "gridPos": { - "h": 9, - "w": 12, - "x": 12, - "y": 10 - }, - "hiddenSeries": false, - "id": 11, - "legend": { - "alignAsTable": false, - "avg": false, - "current": false, - "hideEmpty": true, - "hideZero": true, - "max": false, - "min": false, - "rightSide": false, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, - "links": [], - "mode": "", - "nullPointMode": "connected", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "8.0.0", - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "style": {}, - "targets": [ - { - "alias": "VLAN-$tag_vlanId $col", - "dsType": "influxdb", - "groupBy": [ - { - "params": [ - "$interval" - ], - "type": "time" - }, - { - "params": [ - "servername" - ], - "type": "tag" - }, - { - "params": [ - "vlanId" - ], - "type": "tag" - }, - { - "params": [ - "null" - ], - "type": "fill" - } - ], - "hide": false, - "measurement": "lpar_net_virtual", - "orderByTime": "ASC", - "policy": "default", - "refId": "A", - "resultFormat": "time_series", - "select": [ - [ - { - "params": [ - "receivedBytes" - ], - "type": "field" - }, - { - "params": [], - "type": "mean" - }, - { - "params": [ - "recv" - ], - "type": "alias" - } - ], - [ - { - "params": [ - "sentBytes" - ], - "type": "field" - }, - { - "params": [], - "type": "mean" - }, - { - "params": [ - " *-1" - ], - "type": "math" - }, - { - "params": [ - "sent" - ], - "type": "alias" - } - ] - ], - "tags": [ - { - "key": "servername", - "operator": "=~", - "value": "/^$ServerName$/" - } - ] - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Network - Partitions", - "tooltip": { - "msResolution": false, - "shared": true, - "sort": 2, - "value_type": "cumulative" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "$$hashKey": "object:1686", - "format": "binBps", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "$$hashKey": "object:1687", - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": false - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, { "aliasColors": {}, "bars": false, @@ -908,7 +1258,7 @@ "h": 10, "w": 12, "x": 0, - "y": 19 + "y": 28 }, "hiddenSeries": false, "id": 26, @@ -930,7 +1280,7 @@ "alertThreshold": true }, "percentage": false, - "pluginVersion": "8.0.0", + "pluginVersion": "8.0.6", "pointradius": 2, "points": false, "renderer": "flot", @@ -1113,7 +1463,7 @@ "h": 10, "w": 12, "x": 12, - "y": 19 + "y": 28 }, "hiddenSeries": false, "id": 22, @@ -1133,7 +1483,7 @@ "alertThreshold": true }, "percentage": false, - "pluginVersion": "8.0.0", + "pluginVersion": "8.0.6", "pointradius": 2, "points": false, "renderer": "flot", @@ -1234,7 +1584,7 @@ } } ], - "refresh": "1m", + "refresh": "30s", "schemaVersion": 30, "style": "dark", "tags": [ @@ -1271,12 +1621,12 @@ ] }, "time": { - "from": "now-2d", + "from": "now-24h", "now": false, - "to": "now-1m" + "to": "now-30s" }, "timepicker": { - "nowDelay": "1m", + "nowDelay": "30s", "refresh_intervals": [ "30s", "1m", @@ -1302,5 +1652,5 @@ "timezone": "browser", "title": "IBM Power - HMCi - System Resources", "uid": "ClJhHPIGz", - "version": 7 + "version": 20 } \ No newline at end of file diff --git a/doc/hmci.service b/doc/hmci.service index d7b7038..bc05fef 100644 --- a/doc/hmci.service +++ b/doc/hmci.service @@ -3,9 +3,9 @@ Description=HMC Insights Service [Service] #User=nobody -#Group=nogroup -TimeoutStartSec=0 -Restart=always +#Group=nobody +TimeoutSec=20 +Restart=on-failure ExecStart=/opt/hmci/bin/hmci [Install] diff --git a/gradle.properties b/gradle.properties index ef18501..e5bdee7 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,3 +1,3 @@ id = hmci group = biz.nellemann.hmci -version = 1.2.3 +version = 1.2.5 diff --git a/src/main/java/biz/nellemann/hmci/HmcInstance.java b/src/main/java/biz/nellemann/hmci/HmcInstance.java index e2a4a0c..27335f9 100644 --- a/src/main/java/biz/nellemann/hmci/HmcInstance.java +++ b/src/main/java/biz/nellemann/hmci/HmcInstance.java @@ -59,8 +59,7 @@ class HmcInstance implements Runnable { if(configHmc.trace != null) { try { traceDir = new File(configHmc.trace); - traceDir.mkdirs(); - if(traceDir.canWrite()) { + if(traceDir.mkdirs() && traceDir.canWrite()) { doTrace = true; } else { log.warn("HmcInstance() - can't write to trace dir: " + traceDir.toString()); @@ -155,12 +154,12 @@ class HmcInstance implements Runnable { hmcRestClient.enableEnergyMonitoring(system); } - // Get LPAR's for this system + // Get partitions for this system try { - hmcRestClient.getLogicalPartitionsForManagedSystem(system).forEach(tmpPartitions::put); + tmpPartitions.putAll(hmcRestClient.getLogicalPartitionsForManagedSystem(system)); if(!tmpPartitions.isEmpty()) { partitions.clear(); - tmpPartitions.forEach(partitions::put); + partitions.putAll(tmpPartitions); } } catch (Exception e) { log.warn("discover() - getLogicalPartitions", e); @@ -205,7 +204,7 @@ class HmcInstance implements Runnable { try { - // Get LPAR's for this system + // Get partitions for this system partitions.forEach((partitionId, partition) -> { // Get and process metrics for this partition diff --git a/src/main/java/biz/nellemann/hmci/HmcRestClient.java b/src/main/java/biz/nellemann/hmci/HmcRestClient.java index 350bcd2..02a4e41 100644 --- a/src/main/java/biz/nellemann/hmci/HmcRestClient.java +++ b/src/main/java/biz/nellemann/hmci/HmcRestClient.java @@ -167,7 +167,7 @@ public class HmcRestClient { Map managedSystemsMap = new HashMap<>(); // Do not try to parse empty response - if(responseBody == null || responseBody.isEmpty() || responseBody.length() <= 1) { + if(responseBody == null || responseBody.length() <= 1) { responseErrors++; return managedSystemsMap; } @@ -207,7 +207,7 @@ public class HmcRestClient { Map partitionMap = new HashMap<>(); // Do not try to parse empty response - if(responseBody == null || responseBody.isEmpty() || responseBody.length() <= 1) { + if(responseBody == null || responseBody.length() <= 1) { responseErrors++; return partitionMap; } @@ -247,7 +247,7 @@ public class HmcRestClient { String jsonBody = null; // Do not try to parse empty response - if(responseBody == null || responseBody.isEmpty() || responseBody.length() <= 1) { + if(responseBody == null || responseBody.length() <= 1) { responseErrors++; log.warn("getPcmDataForManagedSystem() - empty response, skipping: " + system.name); return null; @@ -256,9 +256,9 @@ public class HmcRestClient { try { Document doc = Jsoup.parse(responseBody); Element entry = doc.select("feed > entry").first(); - Element link = entry.select("link[href]").first(); + Element link = Objects.requireNonNull(entry).select("link[href]").first(); - if(link.attr("type").equals("application/json")) { + if(Objects.requireNonNull(link).attr("type").equals("application/json")) { String href = link.attr("href"); log.trace("getPcmDataForManagedSystem() - json url: " + href); jsonBody = sendGetRequest(new URL(href)); @@ -285,7 +285,7 @@ public class HmcRestClient { String jsonBody = null; // Do not try to parse empty response - if(responseBody == null || responseBody.isEmpty() || responseBody.length() <= 1) { + if(responseBody == null || responseBody.length() <= 1) { responseErrors++; log.warn("getPcmDataForLogicalPartition() - empty response, skipping: " + partition.name); return null; @@ -294,9 +294,9 @@ public class HmcRestClient { try { Document doc = Jsoup.parse(responseBody); Element entry = doc.select("feed > entry").first(); - Element link = entry.select("link[href]").first(); + Element link = Objects.requireNonNull(entry).select("link[href]").first(); - if(link.attr("type").equals("application/json")) { + if(Objects.requireNonNull(link).attr("type").equals("application/json")) { String href = link.attr("href"); log.trace("getPcmDataForLogicalPartition() - json url: " + href); jsonBody = sendGetRequest(new URL(href)); @@ -325,7 +325,7 @@ public class HmcRestClient { //log.info(responseBody); // Do not try to parse empty response - if(responseBody == null || responseBody.isEmpty() || responseBody.length() <= 1) { + if(responseBody == null || responseBody.length() <= 1) { responseErrors++; log.trace("getPcmDataForEnergy() - empty response"); return null; @@ -334,9 +334,9 @@ public class HmcRestClient { try { Document doc = Jsoup.parse(responseBody); Element entry = doc.select("feed > entry").first(); - Element link = entry.select("link[href]").first(); + Element link = Objects.requireNonNull(entry).select("link[href]").first(); - if(link.attr("type").equals("application/json")) { + if(Objects.requireNonNull(link).attr("type").equals("application/json")) { String href = link.attr("href"); log.trace("getPcmDataForEnergy() - json url: " + href); jsonBody = sendGetRequest(new URL(href)); @@ -363,7 +363,7 @@ public class HmcRestClient { String jsonBody = null; // Do not try to parse empty response - if(responseBody == null || responseBody.isEmpty() || responseBody.length() <= 1) { + if(responseBody == null || responseBody.length() <= 1) { responseErrors++; log.warn("enableEnergyMonitoring() - empty response"); return; @@ -374,16 +374,16 @@ public class HmcRestClient { doc.outputSettings().prettyPrint(false); doc.outputSettings().charset("US-ASCII"); Element entry = doc.select("feed > entry").first(); - Element link1 = entry.select("EnergyMonitoringCapable").first(); + Element link1 = Objects.requireNonNull(entry).select("EnergyMonitoringCapable").first(); Element link2 = entry.select("EnergyMonitorEnabled").first(); - if(link1.text().equals("true")) { + if(Objects.requireNonNull(link1).text().equals("true")) { log.debug("enableEnergyMonitoring() - EnergyMonitoringCapable == true"); - if(link2.text().equals("false")) { + if(Objects.requireNonNull(link2).text().equals("false")) { //log.warn("enableEnergyMonitoring() - EnergyMonitorEnabled == false"); link2.text("true"); - Document content = Jsoup.parse(doc.select("Content").first().html(), "", Parser.xmlParser()); + Document content = Jsoup.parse(Objects.requireNonNull(doc.select("Content").first()).html(), "", Parser.xmlParser()); content.outputSettings().escapeMode(Entities.EscapeMode.xhtml); content.outputSettings().prettyPrint(false); content.outputSettings().charset("UTF-8"); @@ -514,7 +514,7 @@ public class HmcRestClient { final SSLContext sslContext = SSLContext.getInstance("SSL"); sslContext.init(null, trustAllCerts, new SecureRandom()); - // Create an ssl socket factory with our all-trusting manager + // Create a ssl socket factory with our all-trusting manager final SSLSocketFactory sslSocketFactory = sslContext.getSocketFactory(); OkHttpClient.Builder builder = new OkHttpClient.Builder(); diff --git a/src/main/java/biz/nellemann/hmci/LogicalPartition.java b/src/main/java/biz/nellemann/hmci/LogicalPartition.java index 4bcc2fb..7a9c73c 100644 --- a/src/main/java/biz/nellemann/hmci/LogicalPartition.java +++ b/src/main/java/biz/nellemann/hmci/LogicalPartition.java @@ -55,7 +55,7 @@ class LogicalPartition extends MetaSystem { Map tagsMap = new HashMap<>(); tagsMap.put("servername", system.name); tagsMap.put("lparname", name); - log.trace("getDetails() - tags: " + tagsMap.toString()); + log.trace("getDetails() - tags: " + tagsMap); Map fieldsMap = new HashMap<>(); fieldsMap.put("id", metrics.systemUtil.sample.lparsUtil.id); @@ -63,7 +63,7 @@ class LogicalPartition extends MetaSystem { 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("getDetails() - fields: " + fieldsMap.toString()); + log.trace("getDetails() - fields: " + fieldsMap); list.add(new Measurement(tagsMap, fieldsMap)); return list; @@ -78,12 +78,12 @@ class LogicalPartition extends MetaSystem { Map tagsMap = new HashMap<>(); tagsMap.put("servername", system.name); tagsMap.put("lparname", name); - log.trace("getMemoryMetrics() - tags: " + tagsMap.toString()); + log.trace("getMemoryMetrics() - tags: " + tagsMap); 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()); + log.trace("getMemoryMetrics() - fields: " + fieldsMap); list.add(new Measurement(tagsMap, fieldsMap)); return list; @@ -98,7 +98,7 @@ class LogicalPartition extends MetaSystem { HashMap tagsMap = new HashMap<>(); tagsMap.put("servername", system.name); tagsMap.put("lparname", name); - log.trace("getProcessorMetrics() - tags: " + tagsMap.toString()); + log.trace("getProcessorMetrics() - tags: " + tagsMap); HashMap fieldsMap = new HashMap<>(); fieldsMap.put("utilizedProcUnits", metrics.systemUtil.sample.lparsUtil.processor.utilizedProcUnits); @@ -115,7 +115,7 @@ class LogicalPartition extends MetaSystem { 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()); + log.trace("getProcessorMetrics() - fields: " + fieldsMap); list.add(new Measurement(tagsMap, fieldsMap)); return list; @@ -136,7 +136,7 @@ class LogicalPartition extends MetaSystem { tagsMap.put("viosId", adapter.viosId.toString()); tagsMap.put("vlanId", adapter.vlanId.toString()); tagsMap.put("vswitchId", adapter.vswitchId.toString()); - log.trace("getVirtualEthernetAdapterMetrics() - tags: " + tagsMap.toString()); + log.trace("getVirtualEthernetAdapterMetrics() - tags: " + tagsMap); HashMap fieldsMap = new HashMap<>(); fieldsMap.put("droppedPackets", adapter.droppedPackets); @@ -153,7 +153,7 @@ class LogicalPartition extends MetaSystem { fieldsMap.put("transferredBytes", adapter.transferredBytes); fieldsMap.put("transferredPhysicalBytes", adapter.transferredPhysicalBytes); fieldsMap.put("sharedEthernetAdapterId", adapter.sharedEthernetAdapterId); - log.trace("getVirtualEthernetAdapterMetrics() - fields: " + fieldsMap.toString()); + log.trace("getVirtualEthernetAdapterMetrics() - fields: " + fieldsMap); list.add(new Measurement(tagsMap, fieldsMap)); }); @@ -174,7 +174,7 @@ class LogicalPartition extends MetaSystem { tagsMap.put("viosId", adapter.viosId.toString()); tagsMap.put("location", adapter.physicalLocation); tagsMap.put("id", adapter.id); - log.trace("getVirtualGenericAdapterMetrics() - tags: " + tagsMap.toString()); + log.trace("getVirtualGenericAdapterMetrics() - tags: " + tagsMap); HashMap fieldsMap = new HashMap<>(); fieldsMap.put("numOfReads", adapter.numOfReads); @@ -182,7 +182,7 @@ class LogicalPartition extends MetaSystem { fieldsMap.put("writeBytes", adapter.writeBytes); fieldsMap.put("readBytes", adapter.readBytes); fieldsMap.put("type", adapter.type); - log.trace("getVirtualGenericAdapterMetrics() - fields: " + fieldsMap.toString()); + log.trace("getVirtualGenericAdapterMetrics() - fields: " + fieldsMap); list.add(new Measurement(tagsMap, fieldsMap)); }); @@ -201,7 +201,7 @@ class LogicalPartition extends MetaSystem { tagsMap.put("lparname", name); tagsMap.put("viosId", adapter.viosId.toString()); tagsMap.put("location", adapter.physicalLocation); - log.trace("getVirtualFibreChannelAdapterMetrics() - tags: " + tagsMap.toString()); + log.trace("getVirtualFibreChannelAdapterMetrics() - tags: " + tagsMap); HashMap fieldsMap = new HashMap<>(); fieldsMap.put("numOfReads", adapter.numOfReads); @@ -213,7 +213,7 @@ class LogicalPartition extends MetaSystem { fieldsMap.put("transferredByte", adapter.transmittedBytes); // TODO: Must be error in dashboard, remove when checked. //fieldsMap.put("wwpn", adapter.wwpn); //fieldsMap.put("wwpn2", adapter.wwpn2); - log.trace("getVirtualFibreChannelAdapterMetrics() - fields: " + fieldsMap.toString()); + log.trace("getVirtualFibreChannelAdapterMetrics() - fields: " + fieldsMap); list.add(new Measurement(tagsMap, fieldsMap)); }); diff --git a/src/main/java/biz/nellemann/hmci/ManagedSystem.java b/src/main/java/biz/nellemann/hmci/ManagedSystem.java index c37e0af..362003a 100644 --- a/src/main/java/biz/nellemann/hmci/ManagedSystem.java +++ b/src/main/java/biz/nellemann/hmci/ManagedSystem.java @@ -58,7 +58,7 @@ class ManagedSystem extends MetaSystem { HashMap tagsMap = new HashMap<>(); tagsMap.put("servername", name); - log.trace("getDetails() - tags: " + tagsMap.toString()); + log.trace("getDetails() - tags: " + tagsMap); Map fieldsMap = new HashMap<>(); fieldsMap.put("mtm", String.format("%s-%s %s", type, model, serialNumber)); @@ -69,7 +69,7 @@ class ManagedSystem extends MetaSystem { 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()); + log.trace("getDetails() - fields: " + fieldsMap); list.add(new Measurement(tagsMap, fieldsMap)); return list; @@ -83,7 +83,7 @@ class ManagedSystem extends MetaSystem { HashMap tagsMap = new HashMap<>(); tagsMap.put("servername", name); - log.trace("getMemoryMetrics() - tags: " + tagsMap.toString()); + log.trace("getMemoryMetrics() - tags: " + tagsMap); Map fieldsMap = new HashMap<>(); fieldsMap.put("totalMem", metrics.systemUtil.sample.serverUtil.memory.totalMem); @@ -91,7 +91,7 @@ class ManagedSystem extends MetaSystem { 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()); + log.trace("getMemoryMetrics() - fields: " + fieldsMap); list.add(new Measurement(tagsMap, fieldsMap)); return list; @@ -105,14 +105,14 @@ class ManagedSystem extends MetaSystem { HashMap tagsMap = new HashMap<>(); tagsMap.put("servername", name); - log.trace("getProcessorMetrics() - tags: " + tagsMap.toString()); + log.trace("getProcessorMetrics() - tags: " + tagsMap); HashMap fieldsMap = new HashMap<>(); fieldsMap.put("totalProcUnits", metrics.systemUtil.sample.serverUtil.processor.totalProcUnits); fieldsMap.put("utilizedProcUnits", metrics.systemUtil.sample.serverUtil.processor.utilizedProcUnits); fieldsMap.put("availableProcUnits", metrics.systemUtil.sample.serverUtil.processor.availableProcUnits); fieldsMap.put("configurableProcUnits", metrics.systemUtil.sample.serverUtil.processor.configurableProcUnits); - log.trace("getProcessorMetrics() - fields: " + fieldsMap.toString()); + log.trace("getProcessorMetrics() - fields: " + fieldsMap); list.add(new Measurement(tagsMap, fieldsMap)); return list; @@ -128,7 +128,7 @@ class ManagedSystem extends MetaSystem { tagsMap.put("servername", name); tagsMap.put("pool", sharedProcessorPool.id); tagsMap.put("poolname", sharedProcessorPool.name); - log.trace("getSharedProcessorPools() - tags: " + tagsMap.toString()); + log.trace("getSharedProcessorPools() - tags: " + tagsMap); HashMap fieldsMap = new HashMap<>(); fieldsMap.put("assignedProcUnits", sharedProcessorPool.assignedProcUnits); @@ -136,7 +136,7 @@ class ManagedSystem extends MetaSystem { fieldsMap.put("utilizedProcUnits", sharedProcessorPool.utilizedProcUnits); fieldsMap.put("borrowedProcUnits", sharedProcessorPool.borrowedProcUnits); fieldsMap.put("configuredProcUnits", sharedProcessorPool.configuredProcUnits); - log.trace("getSharedProcessorPools() - fields: " + fieldsMap.toString()); + log.trace("getSharedProcessorPools() - fields: " + fieldsMap); list.add(new Measurement(tagsMap, fieldsMap)); }); @@ -152,7 +152,7 @@ class ManagedSystem extends MetaSystem { HashMap tagsMap = new HashMap<>(); tagsMap.put("servername", name); - log.trace("getPhysicalProcessorPool() - tags: " + tagsMap.toString()); + log.trace("getPhysicalProcessorPool() - tags: " + tagsMap); HashMap fieldsMap = new HashMap<>(); fieldsMap.put("assignedProcUnits", metrics.systemUtil.sample.serverUtil.physicalProcessorPool.assignedProcUnits); @@ -160,7 +160,7 @@ class ManagedSystem extends MetaSystem { 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()); + log.trace("getPhysicalProcessorPool() - fields: " + fieldsMap); list.add(new Measurement(tagsMap, fieldsMap)); return list; @@ -176,14 +176,14 @@ class ManagedSystem extends MetaSystem { HashMap tagsMap = new HashMap<>(); tagsMap.put("servername", name); tagsMap.put("viosname", vios.name); - log.trace("getViosDetails() - tags: " + tagsMap.toString()); + log.trace("getViosDetails() - tags: " + tagsMap); HashMap fieldsMap = new HashMap<>(); fieldsMap.put("viosid", vios.id); fieldsMap.put("viosstate", vios.state); fieldsMap.put("viosname", vios.name); fieldsMap.put("affinityScore", vios.affinityScore); - log.trace("getViosDetails() - fields: " + fieldsMap.toString()); + log.trace("getViosDetails() - fields: " + fieldsMap); list.add(new Measurement(tagsMap, fieldsMap)); }); @@ -201,7 +201,7 @@ class ManagedSystem extends MetaSystem { HashMap tagsMap = new HashMap<>(); tagsMap.put("servername", name); tagsMap.put("viosname", vios.name); - log.trace("getViosMemoryMetrics() - tags: " + tagsMap.toString()); + log.trace("getViosMemoryMetrics() - tags: " + tagsMap); HashMap fieldsMap = new HashMap<>(); Number assignedMem = getNumberMetricObject(vios.memory.assignedMem); @@ -216,7 +216,7 @@ class ManagedSystem extends MetaSystem { Number usedMemPct = (utilizedMem.intValue() * 100 ) / assignedMem.intValue(); fieldsMap.put("utilizedPct", usedMemPct.floatValue()); } - log.trace("getViosMemoryMetrics() - fields: " + fieldsMap.toString()); + log.trace("getViosMemoryMetrics() - fields: " + fieldsMap); list.add(new Measurement(tagsMap, fieldsMap)); }); @@ -234,7 +234,7 @@ class ManagedSystem extends MetaSystem { HashMap tagsMap = new HashMap<>(); tagsMap.put("servername", name); tagsMap.put("viosname", vios.name); - log.trace("getViosProcessorMetrics() - tags: " + tagsMap.toString()); + log.trace("getViosProcessorMetrics() - tags: " + tagsMap); HashMap fieldsMap = new HashMap<>(); fieldsMap.put("utilizedProcUnits", vios.processor.utilizedProcUnits); @@ -249,7 +249,8 @@ class ManagedSystem extends MetaSystem { fieldsMap.put("timeSpentWaitingForDispatch", vios.processor.timePerInstructionExecution); fieldsMap.put("timePerInstructionExecution", vios.processor.timeSpentWaitingForDispatch); fieldsMap.put("weight", vios.processor.weight); - log.trace("getViosProcessorMetrics() - fields: " + fieldsMap.toString()); + fieldsMap.put("mode", vios.processor.mode); + log.trace("getViosProcessorMetrics() - fields: " + fieldsMap); list.add(new Measurement(tagsMap, fieldsMap)); }); @@ -267,11 +268,11 @@ class ManagedSystem extends MetaSystem { HashMap tagsMap = new HashMap<>(); tagsMap.put("servername", name); tagsMap.put("viosname", vios.name); - log.trace("getViosNetworkLpars() - tags: " + tagsMap.toString()); + log.trace("getViosNetworkLpars() - tags: " + tagsMap); HashMap fieldsMap = new HashMap<>(); fieldsMap.put("clientlpars", vios.network.clientLpars.size()); - log.trace("getViosNetworkLpars() - fields: " + fieldsMap.toString()); + log.trace("getViosNetworkLpars() - fields: " + fieldsMap); list.add(new Measurement(tagsMap, fieldsMap)); }); @@ -293,7 +294,7 @@ class ManagedSystem extends MetaSystem { tagsMap.put("viosname", vios.name); //tagsMap.put("id", adapter.id); tagsMap.put("location", adapter.physicalLocation); - log.trace("getViosNetworkSharedAdapters() - tags: " + tagsMap.toString()); + log.trace("getViosNetworkSharedAdapters() - tags: " + tagsMap); HashMap fieldsMap = new HashMap<>(); fieldsMap.put("id", adapter.id); @@ -304,8 +305,7 @@ class ManagedSystem extends MetaSystem { fieldsMap.put("receivedPackets", adapter.receivedPackets); fieldsMap.put("droppedPackets", adapter.droppedPackets); fieldsMap.put("transferredBytes", adapter.transferredBytes); - fieldsMap.put("physicalLocation", adapter.physicalLocation); - log.trace("getViosNetworkSharedAdapters() - fields: " + fieldsMap.toString()); + log.trace("getViosNetworkSharedAdapters() - fields: " + fieldsMap); list.add(new Measurement(tagsMap, fieldsMap)); }); @@ -331,7 +331,7 @@ class ManagedSystem extends MetaSystem { tagsMap.put("systemname", name); tagsMap.put("viosname", vios.name); tagsMap.put("location", adapter.physicalLocation); - log.trace("getViosNetworkVirtualAdapters() - tags: " + tagsMap.toString()); + log.trace("getViosNetworkVirtualAdapters() - tags: " + tagsMap); HashMap fieldsMap = new HashMap<>(); fieldsMap.put("droppedPackets", adapter.droppedPackets); @@ -347,8 +347,7 @@ class ManagedSystem extends MetaSystem { 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()); + log.trace("getViosNetworkVirtualAdapters() - fields: " + fieldsMap); list.add(new Measurement(tagsMap, fieldsMap)); }); @@ -373,7 +372,7 @@ class ManagedSystem extends MetaSystem { tagsMap.put("servername", name); tagsMap.put("viosname", vios.name); tagsMap.put("location", adapter.physicalLocation); - log.trace("getViosNetworkGenericAdapters() - tags: " + tagsMap.toString()); + log.trace("getViosNetworkGenericAdapters() - tags: " + tagsMap); HashMap fieldsMap = new HashMap<>(); fieldsMap.put("sentBytes", adapter.sentBytes); @@ -382,7 +381,7 @@ class ManagedSystem extends MetaSystem { fieldsMap.put("receivedPackets", adapter.receivedPackets); fieldsMap.put("droppedPackets", adapter.droppedPackets); fieldsMap.put("transferredBytes", adapter.transferredBytes); - log.trace("getViosNetworkGenericAdapters() - fields: " + fieldsMap.toString()); + log.trace("getViosNetworkGenericAdapters() - fields: " + fieldsMap); list.add(new Measurement(tagsMap, fieldsMap)); }); @@ -401,11 +400,11 @@ class ManagedSystem extends MetaSystem { HashMap tagsMap = new HashMap<>(); tagsMap.put("servername", name); tagsMap.put("viosname", vios.name); - log.trace("getViosStorageLpars() - tags: " + tagsMap.toString()); + log.trace("getViosStorageLpars() - tags: " + tagsMap); HashMap fieldsMap = new HashMap<>(); fieldsMap.put("clientlpars", vios.storage.clientLpars.size()); - log.trace("getViosStorageLpars() - fields: " + fieldsMap.toString()); + log.trace("getViosStorageLpars() - fields: " + fieldsMap); list.add(new Measurement(tagsMap, fieldsMap)); }); @@ -427,7 +426,7 @@ class ManagedSystem extends MetaSystem { tagsMap.put("servername", name); tagsMap.put("viosname", vios.name); tagsMap.put("location", adapter.physicalLocation); - log.trace("getViosStorageFiberChannelAdapters() - tags: " + tagsMap.toString()); + log.trace("getViosStorageFiberChannelAdapters() - tags: " + tagsMap); HashMap fieldsMap = new HashMap<>(); fieldsMap.put("numOfReads", adapter.numOfReads); @@ -435,8 +434,7 @@ class ManagedSystem extends MetaSystem { 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()); + log.trace("getViosStorageFiberChannelAdapters() - fields: " + fieldsMap); list.add(new Measurement(tagsMap, fieldsMap)); }); @@ -494,7 +492,7 @@ class ManagedSystem extends MetaSystem { tagsMap.put("viosname", vios.name); tagsMap.put("id", adapter.id); tagsMap.put("location", adapter.physicalLocation); - log.trace("getViosStoragePhysicalAdapters() - tags: " + tagsMap.toString()); + log.trace("getViosStoragePhysicalAdapters() - tags: " + tagsMap); HashMap fieldsMap = new HashMap<>(); fieldsMap.put("numOfReads", adapter.numOfReads); @@ -503,8 +501,7 @@ class ManagedSystem extends MetaSystem { 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()); + log.trace("getViosStoragePhysicalAdapters() - fields: " + fieldsMap); list.add(new Measurement(tagsMap, fieldsMap)); }); @@ -529,7 +526,7 @@ class ManagedSystem extends MetaSystem { tagsMap.put("viosname", vios.name); tagsMap.put("location", adapter.physicalLocation); tagsMap.put("id", adapter.id); - log.trace("getViosStorageVirtualAdapters() - tags: " + tagsMap.toString()); + log.trace("getViosStorageVirtualAdapters() - tags: " + tagsMap); HashMap fieldsMap = new HashMap<>(); fieldsMap.put("numOfReads", adapter.numOfReads); @@ -538,8 +535,7 @@ class ManagedSystem extends MetaSystem { 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()); + log.trace("getViosStorageVirtualAdapters() - fields: " + fieldsMap); list.add(new Measurement(tagsMap, fieldsMap)); }); diff --git a/src/main/java/biz/nellemann/hmci/SystemEnergy.java b/src/main/java/biz/nellemann/hmci/SystemEnergy.java index 678c78e..f020127 100644 --- a/src/main/java/biz/nellemann/hmci/SystemEnergy.java +++ b/src/main/java/biz/nellemann/hmci/SystemEnergy.java @@ -48,11 +48,11 @@ class SystemEnergy extends MetaSystem { HashMap tagsMap = new HashMap<>(); tagsMap.put("servername", system.name); - log.trace("getPowerMetrics() - tags: " + tagsMap.toString()); + log.trace("getPowerMetrics() - tags: " + tagsMap); Map fieldsMap = new HashMap<>(); fieldsMap.put("powerReading", metrics.systemUtil.sample.energyUtil.powerUtil.powerReading); - log.trace("getPowerMetrics() - fields: " + fieldsMap.toString()); + log.trace("getPowerMetrics() - fields: " + fieldsMap); list.add(new Measurement(tagsMap, fieldsMap)); return list; @@ -65,7 +65,7 @@ class SystemEnergy extends MetaSystem { HashMap tagsMap = new HashMap<>(); tagsMap.put("servername", system.name); - log.trace("getThermalMetrics() - tags: " + tagsMap.toString()); + log.trace("getThermalMetrics() - tags: " + tagsMap); Map fieldsMap = new HashMap<>(); @@ -82,7 +82,7 @@ class SystemEnergy extends MetaSystem { fieldsMap.put("baseboardTemperature_" + t.entityInstance, t.temperatureReading); }*/ - log.trace("getThermalMetrics() - fields: " + fieldsMap.toString()); + log.trace("getThermalMetrics() - fields: " + fieldsMap); list.add(new Measurement(tagsMap, fieldsMap)); return list; } diff --git a/src/main/java/biz/nellemann/hmci/pcm/EnergyUtil.java b/src/main/java/biz/nellemann/hmci/pcm/EnergyUtil.java index 3834a1d..a17bfed 100644 --- a/src/main/java/biz/nellemann/hmci/pcm/EnergyUtil.java +++ b/src/main/java/biz/nellemann/hmci/pcm/EnergyUtil.java @@ -1,6 +1,6 @@ package biz.nellemann.hmci.pcm; -public class EnergyUtil { - public PowerUtil powerUtil = new PowerUtil(); - public ThermalUtil thermalUtil = new ThermalUtil(); +public final class EnergyUtil { + public final PowerUtil powerUtil = new PowerUtil(); + public final ThermalUtil thermalUtil = new ThermalUtil(); } diff --git a/src/main/java/biz/nellemann/hmci/pcm/FiberChannelAdapter.java b/src/main/java/biz/nellemann/hmci/pcm/FiberChannelAdapter.java index 736929b..ddb13bb 100644 --- a/src/main/java/biz/nellemann/hmci/pcm/FiberChannelAdapter.java +++ b/src/main/java/biz/nellemann/hmci/pcm/FiberChannelAdapter.java @@ -2,7 +2,7 @@ package biz.nellemann.hmci.pcm; import com.serjltt.moshi.adapters.FirstElement; -public class FiberChannelAdapter { +public final class FiberChannelAdapter { public String id = ""; public String wwpn = ""; diff --git a/src/main/java/biz/nellemann/hmci/pcm/GenericAdapter.java b/src/main/java/biz/nellemann/hmci/pcm/GenericAdapter.java index 1aa39c8..c9bb58b 100644 --- a/src/main/java/biz/nellemann/hmci/pcm/GenericAdapter.java +++ b/src/main/java/biz/nellemann/hmci/pcm/GenericAdapter.java @@ -2,10 +2,7 @@ package biz.nellemann.hmci.pcm; import com.serjltt.moshi.adapters.FirstElement; -import java.util.ArrayList; -import java.util.List; - -public class GenericAdapter { +public final class GenericAdapter { public String id = ""; public String type = ""; diff --git a/src/main/java/biz/nellemann/hmci/pcm/GenericPhysicalAdapters.java b/src/main/java/biz/nellemann/hmci/pcm/GenericPhysicalAdapters.java index 173ce0a..3c92347 100644 --- a/src/main/java/biz/nellemann/hmci/pcm/GenericPhysicalAdapters.java +++ b/src/main/java/biz/nellemann/hmci/pcm/GenericPhysicalAdapters.java @@ -2,7 +2,7 @@ package biz.nellemann.hmci.pcm; import com.serjltt.moshi.adapters.FirstElement; -public class GenericPhysicalAdapters { +public final class GenericPhysicalAdapters { public String id = ""; public String type = ""; diff --git a/src/main/java/biz/nellemann/hmci/pcm/GenericVirtualAdapter.java b/src/main/java/biz/nellemann/hmci/pcm/GenericVirtualAdapter.java index 13fd9b8..bdf218f 100644 --- a/src/main/java/biz/nellemann/hmci/pcm/GenericVirtualAdapter.java +++ b/src/main/java/biz/nellemann/hmci/pcm/GenericVirtualAdapter.java @@ -3,7 +3,7 @@ package biz.nellemann.hmci.pcm; import com.serjltt.moshi.adapters.FirstElement; -public class GenericVirtualAdapter { +public final class GenericVirtualAdapter { public String id = ""; public String type = ""; diff --git a/src/main/java/biz/nellemann/hmci/pcm/LparMemory.java b/src/main/java/biz/nellemann/hmci/pcm/LparMemory.java index 6ed81c1..2c2aa25 100644 --- a/src/main/java/biz/nellemann/hmci/pcm/LparMemory.java +++ b/src/main/java/biz/nellemann/hmci/pcm/LparMemory.java @@ -2,7 +2,7 @@ package biz.nellemann.hmci.pcm; import com.serjltt.moshi.adapters.FirstElement; -public class LparMemory { +public final class LparMemory { @FirstElement public Number logicalMem = 0.0; diff --git a/src/main/java/biz/nellemann/hmci/pcm/LparProcessor.java b/src/main/java/biz/nellemann/hmci/pcm/LparProcessor.java index c39e76c..bd3bf36 100644 --- a/src/main/java/biz/nellemann/hmci/pcm/LparProcessor.java +++ b/src/main/java/biz/nellemann/hmci/pcm/LparProcessor.java @@ -2,7 +2,7 @@ package biz.nellemann.hmci.pcm; import com.serjltt.moshi.adapters.FirstElement; -public class LparProcessor { +public final class LparProcessor { public Integer poolId = 0; public Integer weight = 0; diff --git a/src/main/java/biz/nellemann/hmci/pcm/LparUtil.java b/src/main/java/biz/nellemann/hmci/pcm/LparUtil.java index c50e730..81af1dc 100644 --- a/src/main/java/biz/nellemann/hmci/pcm/LparUtil.java +++ b/src/main/java/biz/nellemann/hmci/pcm/LparUtil.java @@ -1,6 +1,6 @@ package biz.nellemann.hmci.pcm; -public class LparUtil { +public final class LparUtil { public Integer id = 0; public String uuid = ""; @@ -10,9 +10,9 @@ public class LparUtil { public String osType = ""; public Number affinityScore = 0.0f; - public LparMemory memory = new LparMemory(); - public LparProcessor processor = new LparProcessor(); - public Network network = new Network(); - public Storage storage = new Storage(); + public final LparMemory memory = new LparMemory(); + public final LparProcessor processor = new LparProcessor(); + public final Network network = new Network(); + public final Storage storage = new Storage(); } diff --git a/src/main/java/biz/nellemann/hmci/pcm/Network.java b/src/main/java/biz/nellemann/hmci/pcm/Network.java index d0449e5..cbd963d 100644 --- a/src/main/java/biz/nellemann/hmci/pcm/Network.java +++ b/src/main/java/biz/nellemann/hmci/pcm/Network.java @@ -3,11 +3,11 @@ package biz.nellemann.hmci.pcm; import java.util.ArrayList; import java.util.List; -public class Network { +public final class Network { - public List clientLpars = new ArrayList<>(); - public List genericAdapters = new ArrayList<>(); - public List sharedAdapters = new ArrayList<>(); - public List virtualEthernetAdapters = new ArrayList<>(); + public final List clientLpars = new ArrayList<>(); + public final List genericAdapters = new ArrayList<>(); + public final List sharedAdapters = new ArrayList<>(); + public final List virtualEthernetAdapters = new ArrayList<>(); } diff --git a/src/main/java/biz/nellemann/hmci/pcm/PcmData.java b/src/main/java/biz/nellemann/hmci/pcm/PcmData.java index 345d558..ee634d4 100644 --- a/src/main/java/biz/nellemann/hmci/pcm/PcmData.java +++ b/src/main/java/biz/nellemann/hmci/pcm/PcmData.java @@ -1,7 +1,7 @@ package biz.nellemann.hmci.pcm; -public class PcmData { +public final class PcmData { - public SystemUtil systemUtil = new SystemUtil(); + public final SystemUtil systemUtil = new SystemUtil(); } diff --git a/src/main/java/biz/nellemann/hmci/pcm/PhysicalProcessorPool.java b/src/main/java/biz/nellemann/hmci/pcm/PhysicalProcessorPool.java index 1d42657..8ffe855 100644 --- a/src/main/java/biz/nellemann/hmci/pcm/PhysicalProcessorPool.java +++ b/src/main/java/biz/nellemann/hmci/pcm/PhysicalProcessorPool.java @@ -2,10 +2,7 @@ package biz.nellemann.hmci.pcm; import com.serjltt.moshi.adapters.FirstElement; -import java.util.ArrayList; -import java.util.List; - -public class PhysicalProcessorPool { +public final class PhysicalProcessorPool { @FirstElement public Number assignedProcUnits = 0.0; diff --git a/src/main/java/biz/nellemann/hmci/pcm/PowerUtil.java b/src/main/java/biz/nellemann/hmci/pcm/PowerUtil.java index dc292d6..741485e 100644 --- a/src/main/java/biz/nellemann/hmci/pcm/PowerUtil.java +++ b/src/main/java/biz/nellemann/hmci/pcm/PowerUtil.java @@ -3,7 +3,7 @@ package biz.nellemann.hmci.pcm; import com.serjltt.moshi.adapters.FirstElement; -public class PowerUtil { +public final class PowerUtil { @FirstElement public Number powerReading = 0.0; diff --git a/src/main/java/biz/nellemann/hmci/pcm/SampleInfo.java b/src/main/java/biz/nellemann/hmci/pcm/SampleInfo.java index 80217c8..5dfc631 100644 --- a/src/main/java/biz/nellemann/hmci/pcm/SampleInfo.java +++ b/src/main/java/biz/nellemann/hmci/pcm/SampleInfo.java @@ -1,6 +1,6 @@ package biz.nellemann.hmci.pcm; -public class SampleInfo { +public final class SampleInfo { public String timeStamp = ""; public Integer status = 0; diff --git a/src/main/java/biz/nellemann/hmci/pcm/ServerMemory.java b/src/main/java/biz/nellemann/hmci/pcm/ServerMemory.java index dee9616..5aa3324 100644 --- a/src/main/java/biz/nellemann/hmci/pcm/ServerMemory.java +++ b/src/main/java/biz/nellemann/hmci/pcm/ServerMemory.java @@ -2,7 +2,7 @@ package biz.nellemann.hmci.pcm; import com.serjltt.moshi.adapters.FirstElement; -public class ServerMemory { +public final class ServerMemory { @FirstElement public Number totalMem = 0.0; diff --git a/src/main/java/biz/nellemann/hmci/pcm/ServerProcessor.java b/src/main/java/biz/nellemann/hmci/pcm/ServerProcessor.java index 7969872..387a971 100644 --- a/src/main/java/biz/nellemann/hmci/pcm/ServerProcessor.java +++ b/src/main/java/biz/nellemann/hmci/pcm/ServerProcessor.java @@ -2,7 +2,7 @@ package biz.nellemann.hmci.pcm; import com.serjltt.moshi.adapters.FirstElement; -public class ServerProcessor { +public final class ServerProcessor { @FirstElement public Number totalProcUnits = 0.0; diff --git a/src/main/java/biz/nellemann/hmci/pcm/ServerUtil.java b/src/main/java/biz/nellemann/hmci/pcm/ServerUtil.java index cf066d5..d5fab0d 100644 --- a/src/main/java/biz/nellemann/hmci/pcm/ServerUtil.java +++ b/src/main/java/biz/nellemann/hmci/pcm/ServerUtil.java @@ -3,11 +3,11 @@ package biz.nellemann.hmci.pcm; import java.util.ArrayList; import java.util.List; -public class ServerUtil { +public final class ServerUtil { - public ServerProcessor processor = new ServerProcessor(); - public ServerMemory memory = new ServerMemory(); - public PhysicalProcessorPool physicalProcessorPool = new PhysicalProcessorPool(); - public List sharedProcessorPool = new ArrayList<>(); + public final ServerProcessor processor = new ServerProcessor(); + public final ServerMemory memory = new ServerMemory(); + public final PhysicalProcessorPool physicalProcessorPool = new PhysicalProcessorPool(); + public final List sharedProcessorPool = new ArrayList<>(); } diff --git a/src/main/java/biz/nellemann/hmci/pcm/SharedAdapter.java b/src/main/java/biz/nellemann/hmci/pcm/SharedAdapter.java index dfb6f98..d9ac58e 100644 --- a/src/main/java/biz/nellemann/hmci/pcm/SharedAdapter.java +++ b/src/main/java/biz/nellemann/hmci/pcm/SharedAdapter.java @@ -2,7 +2,7 @@ package biz.nellemann.hmci.pcm; import com.serjltt.moshi.adapters.FirstElement; -public class SharedAdapter { +public final class SharedAdapter { public String id = ""; public String type = ""; diff --git a/src/main/java/biz/nellemann/hmci/pcm/SharedProcessorPool.java b/src/main/java/biz/nellemann/hmci/pcm/SharedProcessorPool.java index d39cd6d..aaddbf0 100644 --- a/src/main/java/biz/nellemann/hmci/pcm/SharedProcessorPool.java +++ b/src/main/java/biz/nellemann/hmci/pcm/SharedProcessorPool.java @@ -2,7 +2,7 @@ package biz.nellemann.hmci.pcm; import com.serjltt.moshi.adapters.FirstElement; -public class SharedProcessorPool { +public final class SharedProcessorPool { public String id = ""; public String name = ""; diff --git a/src/main/java/biz/nellemann/hmci/pcm/Storage.java b/src/main/java/biz/nellemann/hmci/pcm/Storage.java index 7dd9240..7b31588 100644 --- a/src/main/java/biz/nellemann/hmci/pcm/Storage.java +++ b/src/main/java/biz/nellemann/hmci/pcm/Storage.java @@ -3,12 +3,12 @@ package biz.nellemann.hmci.pcm; import java.util.ArrayList; import java.util.List; -public class Storage { +public final class Storage { - public List clientLpars = new ArrayList<>(); - public List genericPhysicalAdapters = new ArrayList<>(); - public List genericVirtualAdapters = new ArrayList<>(); - public List fiberChannelAdapters = new ArrayList<>(); - public List virtualFiberChannelAdapters = new ArrayList<>(); + public final List clientLpars = new ArrayList<>(); + public final List genericPhysicalAdapters = new ArrayList<>(); + public final List genericVirtualAdapters = new ArrayList<>(); + public final List fiberChannelAdapters = new ArrayList<>(); + public final List virtualFiberChannelAdapters = new ArrayList<>(); } diff --git a/src/main/java/biz/nellemann/hmci/pcm/SystemFirmware.java b/src/main/java/biz/nellemann/hmci/pcm/SystemFirmware.java index 2938367..aadc923 100644 --- a/src/main/java/biz/nellemann/hmci/pcm/SystemFirmware.java +++ b/src/main/java/biz/nellemann/hmci/pcm/SystemFirmware.java @@ -2,10 +2,7 @@ package biz.nellemann.hmci.pcm; import com.serjltt.moshi.adapters.FirstElement; -import java.util.ArrayList; -import java.util.List; - -public class SystemFirmware { +public final class SystemFirmware { @FirstElement public Number utilizedProcUnits = 0.0; diff --git a/src/main/java/biz/nellemann/hmci/pcm/SystemUtil.java b/src/main/java/biz/nellemann/hmci/pcm/SystemUtil.java index 783cb93..cebb612 100644 --- a/src/main/java/biz/nellemann/hmci/pcm/SystemUtil.java +++ b/src/main/java/biz/nellemann/hmci/pcm/SystemUtil.java @@ -3,7 +3,7 @@ package biz.nellemann.hmci.pcm; import com.serjltt.moshi.adapters.FirstElement; import com.squareup.moshi.Json; -public class SystemUtil { +public final class SystemUtil { public UtilInfo utilInfo; diff --git a/src/main/java/biz/nellemann/hmci/pcm/Temperature.java b/src/main/java/biz/nellemann/hmci/pcm/Temperature.java index 2edb162..e7b74b2 100644 --- a/src/main/java/biz/nellemann/hmci/pcm/Temperature.java +++ b/src/main/java/biz/nellemann/hmci/pcm/Temperature.java @@ -2,7 +2,7 @@ package biz.nellemann.hmci.pcm; import com.serjltt.moshi.adapters.FirstElement; -public class Temperature { +public final class Temperature { public String entityId = ""; public String entityInstance = ""; diff --git a/src/main/java/biz/nellemann/hmci/pcm/ThermalUtil.java b/src/main/java/biz/nellemann/hmci/pcm/ThermalUtil.java index cdf1143..08cfbfd 100644 --- a/src/main/java/biz/nellemann/hmci/pcm/ThermalUtil.java +++ b/src/main/java/biz/nellemann/hmci/pcm/ThermalUtil.java @@ -3,10 +3,10 @@ package biz.nellemann.hmci.pcm; import java.util.ArrayList; import java.util.List; -public class ThermalUtil { +public final class ThermalUtil { - public List inletTemperatures = new ArrayList<>(); - public List cpuTemperatures = new ArrayList<>(); - public List baseboardTemperatures = new ArrayList<>(); + public final List inletTemperatures = new ArrayList<>(); + public final List cpuTemperatures = new ArrayList<>(); + public final List baseboardTemperatures = new ArrayList<>(); } diff --git a/src/main/java/biz/nellemann/hmci/pcm/UtilInfo.java b/src/main/java/biz/nellemann/hmci/pcm/UtilInfo.java index 39dc0ed..8d655f5 100644 --- a/src/main/java/biz/nellemann/hmci/pcm/UtilInfo.java +++ b/src/main/java/biz/nellemann/hmci/pcm/UtilInfo.java @@ -2,10 +2,7 @@ package biz.nellemann.hmci.pcm; import com.serjltt.moshi.adapters.FirstElement; -import java.util.ArrayList; -import java.util.List; - -public class UtilInfo { +public final class UtilInfo { public String version = ""; public String metricType = ""; diff --git a/src/main/java/biz/nellemann/hmci/pcm/UtilSample.java b/src/main/java/biz/nellemann/hmci/pcm/UtilSample.java index 2f9a3d4..c0a1da5 100644 --- a/src/main/java/biz/nellemann/hmci/pcm/UtilSample.java +++ b/src/main/java/biz/nellemann/hmci/pcm/UtilSample.java @@ -5,16 +5,16 @@ import com.serjltt.moshi.adapters.FirstElement; import java.util.ArrayList; import java.util.List; -public class UtilSample { +public final 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<>(); + public final SampleInfo sampleInfo = new SampleInfo(); + public final SystemFirmware systemFirmwareUtil = new SystemFirmware(); + public final ServerUtil serverUtil = new ServerUtil(); + public final EnergyUtil energyUtil = new EnergyUtil(); + public final List viosUtil = new ArrayList<>(); @FirstElement - public LparUtil lparsUtil = new LparUtil(); + public final LparUtil lparsUtil = new LparUtil(); } diff --git a/src/main/java/biz/nellemann/hmci/pcm/ViosMemory.java b/src/main/java/biz/nellemann/hmci/pcm/ViosMemory.java index c9a2831..cb8af1a 100644 --- a/src/main/java/biz/nellemann/hmci/pcm/ViosMemory.java +++ b/src/main/java/biz/nellemann/hmci/pcm/ViosMemory.java @@ -2,7 +2,7 @@ package biz.nellemann.hmci.pcm; import com.serjltt.moshi.adapters.FirstElement; -public class ViosMemory { +public final class ViosMemory { @FirstElement public Number assignedMem = 0.0; diff --git a/src/main/java/biz/nellemann/hmci/pcm/ViosUtil.java b/src/main/java/biz/nellemann/hmci/pcm/ViosUtil.java index ecccba4..e46e991 100644 --- a/src/main/java/biz/nellemann/hmci/pcm/ViosUtil.java +++ b/src/main/java/biz/nellemann/hmci/pcm/ViosUtil.java @@ -1,6 +1,6 @@ package biz.nellemann.hmci.pcm; -public class ViosUtil { +public final class ViosUtil { public String id = ""; public String uuid = ""; @@ -8,9 +8,9 @@ public class ViosUtil { public String state = ""; public Integer affinityScore = 0; - public ViosMemory memory = new ViosMemory(); - public LparProcessor processor = new LparProcessor(); - public Network network = new Network(); - public Storage storage = new Storage(); + public final ViosMemory memory = new ViosMemory(); + public final LparProcessor processor = new LparProcessor(); + public final Network network = new Network(); + public final Storage storage = new Storage(); } diff --git a/src/main/java/biz/nellemann/hmci/pcm/VirtualEthernetAdapter.java b/src/main/java/biz/nellemann/hmci/pcm/VirtualEthernetAdapter.java index d09c7da..afd4a89 100644 --- a/src/main/java/biz/nellemann/hmci/pcm/VirtualEthernetAdapter.java +++ b/src/main/java/biz/nellemann/hmci/pcm/VirtualEthernetAdapter.java @@ -3,7 +3,7 @@ package biz.nellemann.hmci.pcm; import com.serjltt.moshi.adapters.FirstElement; -public class VirtualEthernetAdapter { +public final class VirtualEthernetAdapter { public String physicalLocation = ""; public Integer vlanId = 0; diff --git a/src/main/java/biz/nellemann/hmci/pcm/VirtualFiberChannelAdapter.java b/src/main/java/biz/nellemann/hmci/pcm/VirtualFiberChannelAdapter.java index a946805..41dd33d 100644 --- a/src/main/java/biz/nellemann/hmci/pcm/VirtualFiberChannelAdapter.java +++ b/src/main/java/biz/nellemann/hmci/pcm/VirtualFiberChannelAdapter.java @@ -2,10 +2,7 @@ package biz.nellemann.hmci.pcm; import com.serjltt.moshi.adapters.FirstElement; -import java.util.ArrayList; -import java.util.List; - -public class VirtualFiberChannelAdapter { +public final class VirtualFiberChannelAdapter { public String wwpn = ""; public String wwpn2 = ""; diff --git a/src/test/groovy/biz/nellemann/hmci/ManagedSystemTest.groovy b/src/test/groovy/biz/nellemann/hmci/ManagedSystemTest.groovy index 95a7e8f..d4aa7f0 100644 --- a/src/test/groovy/biz/nellemann/hmci/ManagedSystemTest.groovy +++ b/src/test/groovy/biz/nellemann/hmci/ManagedSystemTest.groovy @@ -135,8 +135,165 @@ class ManagedSystemTest extends Specification { then: listOfMeasurements.size() == 2 + listOfMeasurements.first().fields['mode'] == "share_idle_procs_active" listOfMeasurements.first().fields['entitledProcUnits'] == 1.0 listOfMeasurements.first().fields['utilizedCappedProcUnits'] == 0.12 } + + void "test getViosNetworkLpars"() { + + 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.getViosNetworkLpars() + + then: + listOfMeasurements.size() == 2 + listOfMeasurements.first().tags['viosname'] == "VIOS1" + listOfMeasurements.first().fields['clientlpars'] == 1 + } + + + void "test getViosNetworkSharedAdapters"() { + + 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.getViosNetworkSharedAdapters() + + then: + listOfMeasurements.size() == 2 + listOfMeasurements.first().tags['viosname'] == "VIOS1" + listOfMeasurements.first().tags['location'] == "U8247.22L.213C1BA-V1-C2-T1" + listOfMeasurements.first().fields['type'] == "sea" + listOfMeasurements.first().fields['transferredBytes'] == 14180.2d + } + + + void "test getViosNetworkVirtualAdapters"() { + + 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.getViosNetworkVirtualAdapters() + + then: + listOfMeasurements.size() == 4 + listOfMeasurements.first().tags['viosname'] == "VIOS1" + listOfMeasurements.first().tags['location'] == "U8247.22L.213C1BA-V1-C2" + listOfMeasurements.first().tags['vswitchid'] == "0" + listOfMeasurements.first().fields['transferredBytes'] == 8245.4d + } + + + void "test getViosNetworkGenericAdapters"() { + + 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.getViosNetworkGenericAdapters() + + then: + listOfMeasurements.size() == 6 + listOfMeasurements.first().tags['viosname'] == "VIOS1" + listOfMeasurements.first().tags['location'] == "U78CB.001.WZS0BYF-P1-C10-T3" + listOfMeasurements.first().fields['receivedBytes'] == 1614.567d + listOfMeasurements.first().fields['sentBytes'] == 3511.833d + } + + + void "test getViosStorageLpars"() { + + 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.getViosStorageLpars() + + then: + listOfMeasurements.size() == 2 + listOfMeasurements.first().tags['viosname'] == "VIOS1" + listOfMeasurements.first().fields['clientlpars'] == 1 + } + + + void "test getViosStorageFiberChannelAdapters"() { + + 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.getViosStorageFiberChannelAdapters() + + then: + listOfMeasurements.size() == 4 + listOfMeasurements.first().tags['viosname'] == "VIOS1" + listOfMeasurements.first().tags['location'] == "U78CB.001.WZS0BYF-P1-C12-T1" + listOfMeasurements.first().fields['numOfReads'] == 0.0 + listOfMeasurements.first().fields['numOfWrites'] == 0.067d + } + + + void "test getViosStoragePhysicalAdapters"() { + + 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.getViosStoragePhysicalAdapters() + + then: + listOfMeasurements.size() == 2 + listOfMeasurements.first().tags['viosname'] == "VIOS1" + listOfMeasurements.first().tags['location'] == "U78CB.001.WZS0BYF-P1-C14-T1" + listOfMeasurements.first().fields['numOfReads'] == 0.0 + listOfMeasurements.first().fields['numOfWrites'] == 19.467d + } + + + void "test getViosStorageVirtualAdapters"() { + + 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.getViosStorageVirtualAdapters() + + then: + listOfMeasurements.size() == 3 + listOfMeasurements.first().tags['viosname'] == "VIOS1" + listOfMeasurements.first().tags['location'] == "U8247.22L.213C1BA-V1-C6" + listOfMeasurements.first().fields['numOfReads'] == 0.0 + listOfMeasurements.first().fields['numOfWrites'] == 0.0 + } + } diff --git a/src/test/groovy/biz/nellemann/hmci/SystemEnergyTest.groovy b/src/test/groovy/biz/nellemann/hmci/SystemEnergyTest.groovy index 541e5bc..95e5304 100644 --- a/src/test/groovy/biz/nellemann/hmci/SystemEnergyTest.groovy +++ b/src/test/groovy/biz/nellemann/hmci/SystemEnergyTest.groovy @@ -23,4 +23,40 @@ class SystemEnergyTest extends Specification { system.energy.metrics.systemUtil.sample.energyUtil.thermalUtil.baseboardTemperatures.first().temperatureReading == 45.0 } + + void "test power readings for ManagedSystem Energy"() { + + setup: + def testFile = new File(getClass().getResource('/pcm-data-energy.json').toURI()) + def testJson = testFile.getText('UTF-8') + + when: + ManagedSystem system = new ManagedSystem("e09834d1-c930-3883-bdad-405d8e26e166", "Test Name","Test Type", "Test Model", "Test S/N") + system.energy.processMetrics(testJson) + List measurements = system.energy.getPowerMetrics() + + then: + measurements.first().tags.get('servername') == 'Test Name' + measurements.first().fields.get('powerReading') == 542.0f + } + + + void "test thermal readings for ManagedSystem Energy"() { + + setup: + def testFile = new File(getClass().getResource('/pcm-data-energy.json').toURI()) + def testJson = testFile.getText('UTF-8') + + when: + ManagedSystem system = new ManagedSystem("e09834d1-c930-3883-bdad-405d8e26e166", "Test Name","Test Type", "Test Model", "Test S/N") + system.energy.processMetrics(testJson) + List measurements = system.energy.getThermalMetrics() + + then: + measurements.first().tags.get('servername') == 'Test Name' + measurements.first().fields.get('cpuTemperature_1') == 46.0f + measurements.first().fields.get('cpuTemperature_2') == 54.0f + measurements.first().fields.get('inletTemperature_1') == 26.0f + } + }