diff --git a/README.md b/README.md index c2a92da..563ecad 100644 --- a/README.md +++ b/README.md @@ -93,6 +93,11 @@ Below are screenshots of the provided Grafana dashboards (found in the **doc/** ## Known problems +### Incomplete test of metrics + +I have not been able to test and verify all types of metric data. If you encounter any missing or wrong data, please contact me, so I can try to fix it. It is possible to run **hmci** with *-d -d* to log JSON data received by the HCM, which can help me implement missing data. + + ### Naming collision You can't have partitions (or Virtual I/O Servers) on different Systems with the same name, as these cannot be distinguished when metrics are diff --git a/build.gradle b/build.gradle index e71e29a..2667016 100644 --- a/build.gradle +++ b/build.gradle @@ -19,18 +19,18 @@ repositories { dependencies { annotationProcessor 'info.picocli:picocli-codegen:4.6.1' implementation 'info.picocli:picocli:4.6.1' - implementation 'org.jsoup:jsoup:1.13.1' + implementation 'org.jsoup:jsoup:1.14.1' implementation 'com.squareup.okhttp3:okhttp:4.9.1' - implementation 'com.squareup.moshi:moshi:1.11.0' + implementation 'com.squareup.moshi:moshi:1.12.0' implementation 'com.serjltt.moshi:moshi-lazy-adapters:2.2' implementation 'org.tomlj:tomlj:1.0.0' implementation 'org.influxdb:influxdb-java:2.21' - implementation 'org.slf4j:slf4j-api:1.7.30' - implementation 'org.slf4j:slf4j-simple:1.7.30' + implementation 'org.slf4j:slf4j-api:1.7.32' + 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 "org.slf4j:slf4j-simple:1.7.30" + testImplementation 'org.slf4j:slf4j-simple:1.7.32' } application { @@ -84,8 +84,8 @@ jacoco { jacocoTestReport { group = "verification" reports { - xml.enabled false - csv.enabled false + xml.required = false + csv.required = false html.destination file("${buildDir}/reports/coverage") } } diff --git a/doc/IBM Power - HMCi - Virtual I_O Servers-1623369593625.json b/doc/IBM Power - HMCi - Virtual I_O Servers-1628512660875.json similarity index 69% rename from doc/IBM Power - HMCi - Virtual I_O Servers-1623369593625.json rename to doc/IBM Power - HMCi - Virtual I_O Servers-1628512660875.json index 972c015..3954382 100644 --- a/doc/IBM Power - HMCi - Virtual I_O Servers-1623369593625.json +++ b/doc/IBM Power - HMCi - Virtual I_O Servers-1628512660875.json @@ -20,7 +20,7 @@ "type": "grafana", "id": "grafana", "name": "Grafana", - "version": "8.0.0" + "version": "8.0.6" }, { "type": "panel", @@ -60,7 +60,7 @@ "gnetId": 1465, "graphTooltip": 0, "id": null, - "iteration": 1623369402365, + "iteration": 1628491801565, "links": [], "panels": [ { @@ -148,7 +148,7 @@ "showHeader": true, "sortBy": [] }, - "pluginVersion": "8.0.0", + "pluginVersion": "8.0.6", "targets": [ { "alias": "Read", @@ -278,8 +278,8 @@ "overrides": [] }, "gridPos": { - "h": 9, - "w": 7, + "h": 11, + "w": 6, "x": 0, "y": 5 }, @@ -297,7 +297,7 @@ "showThresholdMarkers": true, "text": {} }, - "pluginVersion": "8.0.0", + "pluginVersion": "8.0.6", "targets": [ { "alias": "$tag_viosname", @@ -382,9 +382,9 @@ "fillGradient": 0, "grid": {}, "gridPos": { - "h": 9, - "w": 17, - "x": 7, + "h": 11, + "w": 18, + "x": 6, "y": 5 }, "hiddenSeries": false, @@ -409,7 +409,7 @@ "alertThreshold": true }, "percentage": false, - "pluginVersion": "8.0.0", + "pluginVersion": "8.0.6", "pointradius": 5, "points": false, "renderer": "flot", @@ -547,10 +547,10 @@ "fillGradient": 1, "grid": {}, "gridPos": { - "h": 18, - "w": 12, + "h": 15, + "w": 15, "x": 0, - "y": 14 + "y": 16 }, "hiddenSeries": false, "id": 18, @@ -574,7 +574,7 @@ "alertThreshold": true }, "percentage": false, - "pluginVersion": "8.0.0", + "pluginVersion": "8.0.6", "pointradius": 5, "points": false, "renderer": "flot", @@ -793,10 +793,10 @@ "fillGradient": 1, "grid": {}, "gridPos": { - "h": 18, - "w": 12, - "x": 12, - "y": 14 + "h": 15, + "w": 9, + "x": 15, + "y": 16 }, "hiddenSeries": false, "id": 17, @@ -820,7 +820,7 @@ "alertThreshold": true }, "percentage": false, - "pluginVersion": "8.0.0", + "pluginVersion": "8.0.6", "pointradius": 5, "points": false, "renderer": "flot", @@ -1045,9 +1045,478 @@ "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": 15, + "w": 15, + "x": 0, + "y": 31 + }, + "hiddenSeries": false, + "id": 22, + "legend": { + "alignAsTable": false, + "avg": false, + "current": false, + "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_viosname: $tag_id ($tag_location) read", + "dsType": "influxdb", + "groupBy": [ + { + "params": [ + "$interval" + ], + "type": "time" + }, + { + "params": [ + "viosname" + ], + "type": "tag" + }, + { + "params": [ + "location" + ], + "type": "tag" + }, + { + "params": [ + "id" + ], + "type": "tag" + }, + { + "params": [ + "null" + ], + "type": "fill" + } + ], + "hide": false, + "measurement": "vios_storage_vFC", + "orderByTime": "ASC", + "policy": "default", + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "readBytes" + ], + "type": "field" + }, + { + "params": [], + "type": "mean" + } + ] + ], + "tags": [ + { + "key": "servername", + "operator": "=~", + "value": "/^$ServerName$/" + }, + { + "condition": "AND", + "key": "viosname", + "operator": "=~", + "value": "/^$ViosName$/" + } + ] + }, + { + "alias": "$tag_viosname: $tag_id ($tag_location) write", + "dsType": "influxdb", + "groupBy": [ + { + "params": [ + "$interval" + ], + "type": "time" + }, + { + "params": [ + "viosname" + ], + "type": "tag" + }, + { + "params": [ + "location" + ], + "type": "tag" + }, + { + "params": [ + "id" + ], + "type": "tag" + }, + { + "params": [ + "null" + ], + "type": "fill" + } + ], + "hide": false, + "measurement": "vios_storage_vFC", + "orderByTime": "ASC", + "policy": "default", + "refId": "B", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "writeBytes" + ], + "type": "field" + }, + { + "params": [], + "type": "mean" + }, + { + "params": [ + "*-1" + ], + "type": "math" + } + ] + ], + "tags": [ + { + "key": "servername", + "operator": "=~", + "value": "/^$ServerName$/" + }, + { + "condition": "AND", + "key": "viosname", + "operator": "=~", + "value": "/^$ViosName$/" + } + ] + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Virtual Fiber Channel Adapters - $ServerName - $ViosName", + "tooltip": { + "msResolution": false, + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "$$hashKey": "object:2511", + "format": "Bps", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "$$hashKey": "object:2512", + "format": "none", + "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": [], + "unit": "bytes" + }, + "overrides": [] + }, + "fill": 1, + "fillGradient": 1, + "grid": {}, + "gridPos": { + "h": 15, + "w": 9, + "x": 15, + "y": 31 + }, + "hiddenSeries": false, + "id": 23, + "legend": { + "alignAsTable": false, + "avg": false, + "current": false, + "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_viosname - read", + "dsType": "influxdb", + "groupBy": [ + { + "params": [ + "$interval" + ], + "type": "time" + }, + { + "params": [ + "viosname" + ], + "type": "tag" + }, + { + "params": [ + "null" + ], + "type": "fill" + } + ], + "hide": false, + "measurement": "vios_storage_physical", + "orderByTime": "ASC", + "policy": "default", + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "readBytes" + ], + "type": "field" + }, + { + "params": [], + "type": "mean" + } + ] + ], + "tags": [ + { + "key": "servername", + "operator": "=~", + "value": "/^$ServerName$/" + }, + { + "condition": "AND", + "key": "viosname", + "operator": "=~", + "value": "/^$ViosName$/" + } + ] + }, + { + "alias": "$tag_viosname - write", + "dsType": "influxdb", + "groupBy": [ + { + "params": [ + "$interval" + ], + "type": "time" + }, + { + "params": [ + "viosname" + ], + "type": "tag" + }, + { + "params": [ + "null" + ], + "type": "fill" + } + ], + "hide": false, + "measurement": "vios_storage_physical", + "orderByTime": "ASC", + "policy": "default", + "refId": "B", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "writeBytes" + ], + "type": "field" + }, + { + "params": [], + "type": "mean" + }, + { + "params": [ + "*-1" + ], + "type": "math" + } + ] + ], + "tags": [ + { + "key": "servername", + "operator": "=~", + "value": "/^$ServerName$/" + }, + { + "condition": "AND", + "key": "viosname", + "operator": "=~", + "value": "/^$ViosName$/" + } + ] + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Physical Storage - $ServerName - $ViosName", + "tooltip": { + "msResolution": false, + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "$$hashKey": "object:2622", + "format": "bytes", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "$$hashKey": "object:2623", + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } } ], - "refresh": "1m", + "refresh": "30s", "schemaVersion": 30, "style": "dark", "tags": [ @@ -1112,12 +1581,12 @@ ] }, "time": { - "from": "now-2d", + "from": "now-6h", "now": false, - "to": "now-1m" + "to": "now-30s" }, "timepicker": { - "nowDelay": "1m", + "nowDelay": "30s", "refresh_intervals": [ "30s", "1m", @@ -1143,5 +1612,5 @@ "timezone": "browser", "title": "IBM Power - HMCi - Virtual I/O Servers", "uid": "DDNEv5vGz", - "version": 4 + "version": 10 } \ No newline at end of file diff --git a/gradle.properties b/gradle.properties index 900db79..ef18501 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,3 +1,3 @@ id = hmci group = biz.nellemann.hmci -version = 1.2.2 +version = 1.2.3 diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index e708b1c..7454180 100644 Binary files a/gradle/wrapper/gradle-wrapper.jar and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 0f80bbf..69a9715 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.0.2-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.1-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew index 4f906e0..744e882 100755 --- a/gradlew +++ b/gradlew @@ -72,7 +72,7 @@ case "`uname`" in Darwin* ) darwin=true ;; - MINGW* ) + MSYS* | MINGW* ) msys=true ;; NONSTOP* ) diff --git a/src/main/java/biz/nellemann/hmci/ManagedSystem.java b/src/main/java/biz/nellemann/hmci/ManagedSystem.java index da61972..c37e0af 100644 --- a/src/main/java/biz/nellemann/hmci/ManagedSystem.java +++ b/src/main/java/biz/nellemann/hmci/ManagedSystem.java @@ -423,13 +423,13 @@ class ManagedSystem extends MetaSystem { vios.storage.fiberChannelAdapters.forEach( adapter -> { HashMap tagsMap = new HashMap<>(); + tagsMap.put("id", adapter.id); tagsMap.put("servername", name); tagsMap.put("viosname", vios.name); tagsMap.put("location", adapter.physicalLocation); log.trace("getViosStorageFiberChannelAdapters() - tags: " + tagsMap.toString()); HashMap fieldsMap = new HashMap<>(); - fieldsMap.put("id", adapter.id); fieldsMap.put("numOfReads", adapter.numOfReads); fieldsMap.put("numOfWrites", adapter.numOfWrites); fieldsMap.put("readBytes", adapter.readBytes);