From 78e8bf5f92d96f638b3503513ac5d95c491a0da3 Mon Sep 17 00:00:00 2001 From: Mike Derevyanko <58083002+mderevyankoaqa@users.noreply.github.com> Date: Tue, 21 Jun 2022 11:41:05 +0300 Subject: [PATCH 1/3] Supported JMeter 5.5 (#54) Co-authored-by: Mikhail.Derevyanko --- README.md | 10 +++++----- build.gradle | 10 +++++----- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index 2914633..b3b74c4 100644 --- a/README.md +++ b/README.md @@ -20,7 +20,7 @@

-Support my Ukrainian Family +Support my Ukrainian Family ❤️ Donate with PayPal @@ -30,7 +30,7 @@

-Like what you see? +Like what you see? 😍
Coffee2 @@ -54,7 +54,7 @@ Notes: if you need to save the errors you got wile the test to csv like file and This plugin can be used while the functional testing and load tests as well. ## Important notes -The plugin allows 5 errors happened one by one, then plugin will stop importing the results after that! See details in the logs. +🚨 The plugin allows 5 errors happened one by one, then plugin will stop importing the results after that! See details in the logs. Counter will be refreshed at least you have 4 fails. This is protection to avoid OOM error. The option can be configured in the settings (the key name is `influxDBThresholdError` see the [Plugin configuration](https://github.com/mderevyankoaqa/jmeter-influxdb2-listener-plugin/tree/main#plugin-configuration) for the details). You need to be careful with that option and know the hardware resources to store data in the memory. @@ -65,8 +65,8 @@ Pay attention on "Sending metrics performance tuning" chapter, see below. ## Compatibility The supported versions: * Java 11 - make sure that you have it (its minimum version). -* InfluxDB v2.0, see release notes: https://docs.influxdata.com/influxdb/v2.0/reference/release-notes/influxdb/ (1.8 is not supported) -* JMeter 5.4.3 only. +* InfluxDB v2.x, see release notes: https://docs.influxdata.com/influxdb/v2.0/reference/release-notes/influxdb/ (1.8 is not supported) +* JMeter 5.5.0 only. * The current board and plugin were tested on Grafana 8.5.4 and InfluxDB 2.2.0, JAVA 15. ## Maven Support diff --git a/build.gradle b/build.gradle index ab8cac7..e11a7a3 100644 --- a/build.gradle +++ b/build.gradle @@ -24,7 +24,7 @@ repositories { sourceCompatibility = 11 group = 'io.github.mderevyankoaqa' -version = '2.3' +version = '2.4' def title = 'JMeterInfluxDB2Listener' def archiveName = 'jmeter-plugins-influxdb2-listener' @@ -41,10 +41,10 @@ def archiveName = 'jmeter-plugins-influxdb2-listener' } dependencies { - implementation group: 'org.apache.jmeter', name: 'ApacheJMeter_core', version: '5.4.3' - implementation group: 'org.apache.jmeter', name: 'ApacheJMeter_java', version: '5.4.3' - implementation group: 'org.apache.jmeter', name: 'ApacheJMeter_components', version: '5.4.3' - implementation group: 'org.apache.jmeter', name: 'jorphan', version: '5.4.3' + implementation group: 'org.apache.jmeter', name: 'ApacheJMeter_core', version: '5.5' + implementation group: 'org.apache.jmeter', name: 'ApacheJMeter_java', version: '5.5' + implementation group: 'org.apache.jmeter', name: 'ApacheJMeter_components', version: '5.5' + implementation group: 'org.apache.jmeter', name: 'jorphan', version: '5.5' implementation group: 'com.influxdb', name: 'influxdb-client-java', version: '6.1.0' implementation group: 'org.apache.commons', name: 'commons-lang3', version: '3.12.0' From 9ebdff92a207228256e138910b8214dc16ce3067 Mon Sep 17 00:00:00 2001 From: ushklianik <76432241+ushklianik@users.noreply.github.com> Date: Sun, 25 Sep 2022 12:01:56 +0300 Subject: [PATCH 2/3] New sample type tag (#67) These changes allow you to save to the database whether it is a request or a transaction. Which greatly simplifies data visualization and determining what is a request and what is a transaction controller. Co-authored-by: ushklianik --- build.gradle | 2 ++ .../InfluxDatabaseBackendListenerClient.java | 7 +++++++ .../visualizer/config/RequestMeasurement.java | 5 +++++ .../result/SampleResultPointContext.java | 17 +++++++++++++++++ .../result/SampleResultPointProvider.java | 1 + 5 files changed, 32 insertions(+) diff --git a/build.gradle b/build.gradle index e11a7a3..64c831c 100644 --- a/build.gradle +++ b/build.gradle @@ -47,6 +47,7 @@ def archiveName = 'jmeter-plugins-influxdb2-listener' implementation group: 'org.apache.jmeter', name: 'jorphan', version: '5.5' implementation group: 'com.influxdb', name: 'influxdb-client-java', version: '6.1.0' implementation group: 'org.apache.commons', name: 'commons-lang3', version: '3.12.0' + implementation group: 'org.apache.jmeter', name: 'ApacheJMeter_http', version: '5.4.3' components { withModule("org.apache.jmeter:ApacheJMeter_core", JMeterRule) @@ -54,6 +55,7 @@ def archiveName = 'jmeter-plugins-influxdb2-listener' withModule("org.apache.jmeter:ApacheJMeter_components", JMeterRule) withModule("org.apache.jmeter:jorphan", JMeterRule) withModule("org.apache.jmeter:ApacheJMeter", JMeterRule) + withModule("org.apache.jmeter:ApacheJMeter_http", JMeterRule) } } diff --git a/src/main/java/io/github/mderevyankoaqa/influxdb2/visualizer/InfluxDatabaseBackendListenerClient.java b/src/main/java/io/github/mderevyankoaqa/influxdb2/visualizer/InfluxDatabaseBackendListenerClient.java index 1435d12..58633b1 100644 --- a/src/main/java/io/github/mderevyankoaqa/influxdb2/visualizer/InfluxDatabaseBackendListenerClient.java +++ b/src/main/java/io/github/mderevyankoaqa/influxdb2/visualizer/InfluxDatabaseBackendListenerClient.java @@ -24,6 +24,7 @@ import java.util.concurrent.ScheduledFuture; import java.util.concurrent.ScheduledThreadPoolExecutor; import java.util.concurrent.TimeUnit; +import org.apache.jmeter.protocol.http.sampler.HTTPSampleResult; /** @@ -124,6 +125,11 @@ public void handleSampleResults(List sampleResults, BackendListene for (SampleResult sampleResult : allSampleResults) { getUserMetrics().add(sampleResult); + // Determine the type of sample, whether it is a request or a transaction controller + String sampleType = "transaction"; + if (sampleResult instanceof HTTPSampleResult){ + sampleType = "request"; + } if ((null != regexForSamplerList && sampleResult.getSampleLabel().matches(regexForSamplerList)) || samplersToFilter.contains(sampleResult.getSampleLabel())) { @@ -133,6 +139,7 @@ public void handleSampleResults(List sampleResults, BackendListene sampleResultContext.setTestName(this.testName); sampleResultContext.setNodeName(this.nodeName); sampleResultContext.setSampleResult(sampleResult); + sampleResultContext.setSampleType(sampleType); sampleResultContext.setTimeToSet(System.currentTimeMillis() * ONE_MS_IN_NANOSECONDS + this.getUniqueNumberForTheSamplerThread()); sampleResultContext.setErrorBodyToBeSaved(context.getBooleanParameter(KEY_INCLUDE_BODY_OF_FAILURES, false)); sampleResultContext.setResponseBodyLength(this.influxDBConfig.getResponseBodyLength()); diff --git a/src/main/java/io/github/mderevyankoaqa/influxdb2/visualizer/config/RequestMeasurement.java b/src/main/java/io/github/mderevyankoaqa/influxdb2/visualizer/config/RequestMeasurement.java index 5bba455..28a436f 100644 --- a/src/main/java/io/github/mderevyankoaqa/influxdb2/visualizer/config/RequestMeasurement.java +++ b/src/main/java/io/github/mderevyankoaqa/influxdb2/visualizer/config/RequestMeasurement.java @@ -58,6 +58,11 @@ interface Tags { * The result, can be pass or fail. */ String RESULT = "result"; + + /** + * sampleType represents the type of sample, whether it is a request or a transaction controller. + */ + String SAMPLE_TYPE = "sampleType"; } /** diff --git a/src/main/java/io/github/mderevyankoaqa/influxdb2/visualizer/result/SampleResultPointContext.java b/src/main/java/io/github/mderevyankoaqa/influxdb2/visualizer/result/SampleResultPointContext.java index 0e779f6..e4b7041 100644 --- a/src/main/java/io/github/mderevyankoaqa/influxdb2/visualizer/result/SampleResultPointContext.java +++ b/src/main/java/io/github/mderevyankoaqa/influxdb2/visualizer/result/SampleResultPointContext.java @@ -15,6 +15,7 @@ public class SampleResultPointContext { private String testName; boolean errorBodyToBeSaved; private int ResponseBodyLength; + private String sampleType; /** * Checks whether the body of the failed repose is going to be saved. @@ -127,4 +128,20 @@ public int getResponseBodyLength() { public void setResponseBodyLength(int responseBodyLength) { this.ResponseBodyLength = responseBodyLength; } + + /** + * Sets sampleType. + * @param sampleType represents the type of sample, whether it is a request or a transaction controller. + */ + public void setSampleType(String sampleType) { + this.sampleType = sampleType; + } + + /** + * Gets the SampleType. + * @return returns SampleType. + */ + public String getSampleType() { + return this.sampleType; + } } diff --git a/src/main/java/io/github/mderevyankoaqa/influxdb2/visualizer/result/SampleResultPointProvider.java b/src/main/java/io/github/mderevyankoaqa/influxdb2/visualizer/result/SampleResultPointProvider.java index 61f3056..1154283 100644 --- a/src/main/java/io/github/mderevyankoaqa/influxdb2/visualizer/result/SampleResultPointProvider.java +++ b/src/main/java/io/github/mderevyankoaqa/influxdb2/visualizer/result/SampleResultPointProvider.java @@ -106,6 +106,7 @@ private Point getDefaultPoint() { .addTag(RequestMeasurement.Tags.NODE_NAME, this.sampleResultContext.getNodeName()) .addTag(RequestMeasurement.Tags.RESULT_CODE, this.sampleResultContext.getSampleResult().getResponseCode()) .addTag(RequestMeasurement.Tags.ERROR_MSG, this.getAssertionFailure()) + .addTag(RequestMeasurement.Tags.SAMPLE_TYPE, this.sampleResultContext.getSampleType()) .addTag(RequestMeasurement.Tags.ERROR_RESPONSE_BODY, this.getErrorBodyToBeSaved(this.sampleResultContext.isErrorBodyToBeSaved())) .addField(RequestMeasurement.Fields.ERROR_COUNT, this.sampleResultContext.getSampleResult().getErrorCount()) .addField(RequestMeasurement.Fields.REQUEST_COUNT, this.sampleResultContext.getSampleResult().getSampleCount()) From 930a061fa82310ec697a3d0120cb1f9189676cca Mon Sep 17 00:00:00 2001 From: Mikhail Derevyanko Date: Thu, 29 Sep 2022 13:19:29 +0300 Subject: [PATCH 3/3] Libs update: the influxdb-client-java to 6.5.0 and gradle to 7.5.1, readme and borad updated as well --- README.md | 9 +- build.gradle | 9 +- ...b2.visualizer) - influxdb v2.0 (Flux).json | 679 ++++++++++++------ gradle/wrapper/gradle-wrapper.properties | 2 +- img/filterById.png | Bin 0 -> 8978 bytes img/filterByType.png | Bin 0 -> 7842 bytes .../InfluxDatabaseBackendListenerClient.java | 8 +- .../visualizer/config/RequestMeasurement.java | 2 +- .../result/SampleResultPointContext.java | 18 +- .../result/SampleResultPointProvider.java | 2 +- 10 files changed, 470 insertions(+), 259 deletions(-) create mode 100644 img/filterById.png create mode 100644 img/filterByType.png diff --git a/README.md b/README.md index b3b74c4..ddb8c87 100644 --- a/README.md +++ b/README.md @@ -67,7 +67,7 @@ The supported versions: * Java 11 - make sure that you have it (its minimum version). * InfluxDB v2.x, see release notes: https://docs.influxdata.com/influxdb/v2.0/reference/release-notes/influxdb/ (1.8 is not supported) * JMeter 5.5.0 only. -* The current board and plugin were tested on Grafana 8.5.4 and InfluxDB 2.2.0, JAVA 15. +* The current board and plugin were tested on Grafana 9.1.6 and InfluxDB 2.2.0, JAVA 15. ## Maven Support Please see the latest release here https://search.maven.org/artifact/io.github.mderevyankoaqa/jmeter-plugins-influxdb2-listener. @@ -192,9 +192,14 @@ Notes: when test has been interrupted from UI; the processes may not be finished See deployment instructions here https://grafana.com/grafana/dashboards/13644 Dashboard helps: +* Filter the results by Run Id or Type (can be requests or transactions). + ![](img/filterById.png) + + ![](img/filterByType.png) + + * Monitor throughput with active users. ![](img/grafana1.png) - * Overview and analise the response time, distribution as well. Added the filters to see requests with status "pass", "fail". ![](img/grafana2.png) diff --git a/build.gradle b/build.gradle index 64c831c..9767540 100644 --- a/build.gradle +++ b/build.gradle @@ -24,7 +24,7 @@ repositories { sourceCompatibility = 11 group = 'io.github.mderevyankoaqa' -version = '2.4' +version = '2.5' def title = 'JMeterInfluxDB2Listener' def archiveName = 'jmeter-plugins-influxdb2-listener' @@ -45,7 +45,7 @@ def archiveName = 'jmeter-plugins-influxdb2-listener' implementation group: 'org.apache.jmeter', name: 'ApacheJMeter_java', version: '5.5' implementation group: 'org.apache.jmeter', name: 'ApacheJMeter_components', version: '5.5' implementation group: 'org.apache.jmeter', name: 'jorphan', version: '5.5' - implementation group: 'com.influxdb', name: 'influxdb-client-java', version: '6.1.0' + implementation group: 'com.influxdb', name: 'influxdb-client-java', version: '6.5.0' implementation group: 'org.apache.commons', name: 'commons-lang3', version: '3.12.0' implementation group: 'org.apache.jmeter', name: 'ApacheJMeter_http', version: '5.4.3' @@ -132,6 +132,11 @@ publishing { name = 'Pierre Brun' email = 'pbrun.pro@gmail.com' } + developer { + id = 'ushklianik' + name = 'Uladzislau Shklianik' + email = 'Uladzislau_Shklianik@epam.com' + } } scm { connection = 'scm:git:git:github.com/mderevyankoaqa/jmeter-influxdb2-listener-plugin.git' diff --git a/dashboard/JMeter Load Test (org.md.jmeter.influxdb2.visualizer) - influxdb v2.0 (Flux).json b/dashboard/JMeter Load Test (org.md.jmeter.influxdb2.visualizer) - influxdb v2.0 (Flux).json index 57c85ba..15bcf0c 100644 --- a/dashboard/JMeter Load Test (org.md.jmeter.influxdb2.visualizer) - influxdb v2.0 (Flux).json +++ b/dashboard/JMeter Load Test (org.md.jmeter.influxdb2.visualizer) - influxdb v2.0 (Flux).json @@ -9,8 +9,8 @@ "pluginName": "InfluxDB" } ], - "__elements": [ - { + "__elements": { + "NKdhkbj7k": { "name": "Porcessing Time = Latency - Connect Time ", "uid": "NKdhkbj7k", "kind": 1, @@ -26,6 +26,8 @@ "mode": "palette-classic" }, "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", "axisLabel": "", "axisPlacement": "auto", "barAlignment": 0, @@ -58,7 +60,8 @@ "mode": "absolute", "steps": [ { - "color": "green" + "color": "green", + "value": null }, { "color": "red", @@ -116,13 +119,6 @@ } ] }, - "gridPos": { - "h": 10, - "w": 24, - "x": 0, - "y": 151 - }, - "id": 87, "links": [], "options": { "legend": { @@ -132,7 +128,8 @@ "min" ], "displayMode": "table", - "placement": "right" + "placement": "right", + "showLegend": true }, "tooltip": { "mode": "multi", @@ -143,6 +140,10 @@ "targets": [ { "alias": "$tag_requestName", + "datasource": { + "type": "influxdb", + "uid": "${DS_INFLUXDB2.0_JMETER}" + }, "groupBy": [ { "params": [ @@ -166,7 +167,7 @@ "measurement": "requestsRaw", "orderByTime": "ASC", "policy": "autogen", - "query": "from(bucket: v.bucket)\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"requestsRaw\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"processingTime\")\r\n |> group (columns: [\"requestName\"])\r\n |> aggregateWindow(every: [[aggregation]]s, fn: mean, createEmpty: false)", + "query": "from(bucket: v.bucket)\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"requestsRaw\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"processingTime\")\r\n |> filter(fn: (r) => r[\"runId\"] =~ /${runId:regex}/)\r\n |> filter(fn: (r) => r[\"samplerType\"] =~ /${samplerType:regex}/)\r\n |> group (columns: [\"requestName\"])\r\n |> aggregateWindow(every: [[aggregation]]s, fn: mean, createEmpty: false)", "rawQuery": true, "refId": "D", "resultFormat": "time_series", @@ -184,8 +185,7 @@ } ] ], - "tags": [], - "datasource": "${DS_INFLUXDB2.0_JMETER}" + "tags": [] } ], "title": "Porcessing Time = Latency - Connect Time ", @@ -193,7 +193,7 @@ "type": "timeseries" } } - ], + }, "__requires": [ { "type": "panel", @@ -211,7 +211,7 @@ "type": "grafana", "id": "grafana", "name": "Grafana", - "version": "8.5.4" + "version": "9.1.6" }, { "type": "datasource", @@ -276,13 +276,19 @@ "uid": "${DS_INFLUXDB2.0_JMETER}" }, "enable": true, + "hide": false, "iconColor": "rgb(23, 255, 0)", - "mappings": {}, + "mappings": { + "tags": { + "source": "field", + "value": "placeholder {nodeName=\"Test-Node\", runId=\"R006\", testName=\"Test\", type=\"started\"}" + } + }, "name": "Test Start", "showIn": 0, "tagsColumn": "type", "target": { - "query": "from(bucket: v.bucket)\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"testStartEnd\")\r\n |> filter(fn: (r) => r[\"type\"] == \"started\")\r\n |> aggregateWindow(every: v.windowPeriod, fn: last, createEmpty: false)" + "query": "from(bucket: v.bucket)\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"testStartEnd\")\r\n |> filter(fn: (r) => r[\"type\"] == \"started\")\r\n |> filter(fn: (r) => r[\"runId\"] =~ /${runId:regex}/)\r\n |> aggregateWindow(every: v.windowPeriod, fn: last, createEmpty: false)" }, "titleColumn": "testName" }, @@ -298,7 +304,7 @@ "showIn": 0, "tagsColumn": "type", "target": { - "query": "from(bucket: v.bucket)\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"testStartEnd\")\r\n |> filter(fn: (r) => r[\"type\"] == \"finished\")\r\n |> aggregateWindow(every: v.windowPeriod, fn: last, createEmpty: false)" + "query": "from(bucket: v.bucket)\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"testStartEnd\")\r\n |> filter(fn: (r) => r[\"type\"] == \"finished\")\r\n |> filter(fn: (r) => r[\"runId\"] =~ /${runId:regex}/)\r\n |> aggregateWindow(every: v.windowPeriod, fn: last, createEmpty: false)" }, "titleColumn": "testName" } @@ -310,7 +316,6 @@ "gnetId": 13644, "graphTooltip": 1, "id": null, - "iteration": 1655192906717, "links": [], "liveNow": false, "panels": [ @@ -395,16 +400,20 @@ "text": {}, "textMode": "auto" }, - "pluginVersion": "8.5.4", + "pluginVersion": "9.1.6", "targets": [ { + "datasource": { + "type": "influxdb", + "uid": "${DS_INFLUXDB2.0_JMETER}" + }, "dsType": "influxdb", "groupBy": [], "hide": false, "measurement": "virtualUsers", "orderByTime": "ASC", "policy": "default", - "query": "from(bucket: v.bucket)\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"virtualUsers\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"meanActiveThreads\")\r\n |> aggregateWindow(every: [[aggregation]]s, fn: last, createEmpty: false)\r\n |> yield(name: \"last\")", + "query": "from(bucket: v.bucket)\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"virtualUsers\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"meanActiveThreads\")\r\n |> filter(fn: (r) => r[\"runId\"] =~ /${runId:regex}/)\r\n |> group(columns: [\"_field\"])\r\n |> aggregateWindow(every: [[aggregation]]s, fn: last, createEmpty: false) \r\n |> yield(name: \"last\")\r\n ", "rawQuery": true, "refId": "C", "resultFormat": "time_series", @@ -418,8 +427,7 @@ } ] ], - "tags": [], - "datasource": "${DS_INFLUXDB2.0_JMETER}" + "tags": [] } ], "title": "Active Users", @@ -489,7 +497,7 @@ "text": {}, "textMode": "auto" }, - "pluginVersion": "8.5.4", + "pluginVersion": "9.1.6", "targets": [ { "datasource": { @@ -502,7 +510,7 @@ "measurement": "virtualUsers", "orderByTime": "ASC", "policy": "default", - "query": " from(bucket: v.bucket)\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"requestsRaw\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"responseTime\")\r\n |> group(columns: [\"_field\"])\r\n |> aggregateWindow(every: ${aggregation}s, fn: count, createEmpty: false) \r\n |> toFloat() \r\n |> map(fn: (r) => ({ r with _value: float(v: r._value /float(v: ${aggregation})) }))\r\n", + "query": " from(bucket: v.bucket)\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"requestsRaw\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"responseTime\")\r\n |> filter(fn: (r) => r[\"runId\"] =~ /${runId:regex}/)\r\n |> filter(fn: (r) => r[\"samplerType\"] =~ /${samplerType:regex}/)\r\n |> group(columns: [\"_field\"])\r\n |> aggregateWindow(every: ${aggregation}s, fn: count, createEmpty: false) \r\n |> toFloat() \r\n |> map(fn: (r) => ({ r with _value: float(v: r._value /float(v: ${aggregation})) }))\r\n", "rawQuery": true, "refId": "A", "resultFormat": "time_series", @@ -588,9 +596,13 @@ "text": {}, "textMode": "auto" }, - "pluginVersion": "8.5.4", + "pluginVersion": "9.1.6", "targets": [ { + "datasource": { + "type": "influxdb", + "uid": "${DS_INFLUXDB2.0_JMETER}" + }, "groupBy": [ { "params": [ @@ -608,7 +620,7 @@ "measurement": "requestsRaw", "orderByTime": "ASC", "policy": "default", - "query": "from(bucket: v.bucket)\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"requestsRaw\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"sentBytes\")\r\n |> group(columns: [\"runId\"], mode: \"by\")\r\n |> sum()\r\n", + "query": "from(bucket: v.bucket)\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"requestsRaw\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"sentBytes\")\r\n |> filter(fn: (r) => r[\"runId\"] =~ /${runId:regex}/)\r\n |> filter(fn: (r) => r[\"samplerType\"] =~ /${samplerType:regex}/)\r\n |> group(columns: [\"_field\"])\r\n |> sum()\r\n", "rawQuery": true, "refId": "A", "resultFormat": "time_series", @@ -626,8 +638,7 @@ } ] ], - "tags": [], - "datasource": "${DS_INFLUXDB2.0_JMETER}" + "tags": [] } ], "title": "Sent Bytes", @@ -697,7 +708,7 @@ "text": {}, "textMode": "auto" }, - "pluginVersion": "8.5.4", + "pluginVersion": "9.1.6", "targets": [ { "datasource": { @@ -722,7 +733,7 @@ "measurement": "requestsRaw", "orderByTime": "ASC", "policy": "default", - "query": "from(bucket: v.bucket)\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"requestsRaw\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"receivedBytes\")\r\n |> group(columns: [\"runId\"], mode: \"by\")\r\n |> sum()\r\n", + "query": "from(bucket: v.bucket)\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"requestsRaw\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"receivedBytes\")\r\n |> filter(fn: (r) => r[\"runId\"] =~ /${runId:regex}/)\r\n |> filter(fn: (r) => r[\"samplerType\"] =~ /${samplerType:regex}/)\r\n |> group(columns: [\"_field\"])\r\n |> sum()\r\n", "rawQuery": true, "refId": "A", "resultFormat": "time_series", @@ -811,16 +822,20 @@ "text": {}, "textMode": "auto" }, - "pluginVersion": "8.5.4", + "pluginVersion": "9.1.6", "targets": [ { + "datasource": { + "type": "influxdb", + "uid": "${DS_INFLUXDB2.0_JMETER}" + }, "dsType": "influxdb", "groupBy": [], "hide": false, "measurement": "virtualUsers", "orderByTime": "ASC", "policy": "default", - "query": "from(bucket: v.bucket)\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"requestsRaw\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"errorCount\")\r\n |> group(columns: [\"runId\"])\r\n |> sum()\r\n", + "query": "from(bucket: v.bucket)\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"requestsRaw\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"errorCount\")\r\n |> filter(fn: (r) => r[\"runId\"] =~ /${runId:regex}/)\r\n |> filter(fn: (r) => r[\"samplerType\"] =~ /${samplerType:regex}/)\r\n |> group(columns: [\"_field\"])\r\n |> sum()\r\n", "rawQuery": true, "refId": "B", "resultFormat": "time_series", @@ -834,8 +849,7 @@ } ] ], - "tags": [], - "datasource": "${DS_INFLUXDB2.0_JMETER}" + "tags": [] } ], "title": "Errors Count", @@ -907,16 +921,20 @@ }, "textMode": "auto" }, - "pluginVersion": "8.5.4", + "pluginVersion": "9.1.6", "targets": [ { + "datasource": { + "type": "influxdb", + "uid": "${DS_INFLUXDB2.0_JMETER}" + }, "dsType": "influxdb", "groupBy": [], "hide": false, "measurement": "virtualUsers", "orderByTime": "ASC", "policy": "default", - "query": "from(bucket: v.bucket)\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"requestsRaw\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"responseTime\")\r\n |> group(columns: [\"_field\"])\r\n |> count()", + "query": "from(bucket: v.bucket)\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"requestsRaw\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"responseTime\")\r\n |> filter(fn: (r) => r[\"runId\"] =~ /${runId:regex}/)\r\n |> filter(fn: (r) => r[\"samplerType\"] =~ /${samplerType:regex}/)\r\n |> group(columns: [\"_field\"])\r\n |> count()", "rawQuery": true, "refId": "A", "resultFormat": "time_series", @@ -930,8 +948,7 @@ } ] ], - "tags": [], - "datasource": "${DS_INFLUXDB2.0_JMETER}" + "tags": [] } ], "title": "Request Count", @@ -1004,15 +1021,19 @@ "showThresholdMarkers": true, "text": {} }, - "pluginVersion": "8.5.4", + "pluginVersion": "9.1.6", "targets": [ { + "datasource": { + "type": "influxdb", + "uid": "${DS_INFLUXDB2.0_JMETER}" + }, "dsType": "influxdb", "groupBy": [], "measurement": "virtualUsers", "orderByTime": "ASC", "policy": "default", - "query": "successfulPercentages = () => {\r\n\r\ncountResponseTime=from(bucket: v.bucket)\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"requestsRaw\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"responseTime\")\r\n |> group(columns: [\"runId\"])\r\n |> count()\r\n |> toFloat()\r\n |> keep(columns: [\"_value\", \"runId\"])\r\n \r\nsumerrorCount=from(bucket: v.bucket)\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"requestsRaw\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"errorCount\")\r\n |> group(columns: [\"runId\"]) \r\n |> sum()\r\n |> toFloat()\r\n |> keep(columns: [\"_value\", \"runId\"])\r\n \r\n return join(\r\n tables:{countResponseTime:countResponseTime, sumerrorCount:sumerrorCount},\r\n on:[\"runId\"]\r\n )\r\n |> map(fn:(r) => ({\r\n \r\n percentage: 1.0 - r._value_sumerrorCount / r._value_countResponseTime \r\n })) \r\n \r\n}\r\n\r\nsuccessfulPercentages()", + "query": "successfulPercentages = () => {\r\n\r\ncountResponseTime=from(bucket: v.bucket)\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"requestsRaw\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"responseTime\")\r\n |> filter(fn: (r) => r[\"runId\"] =~ /${runId:regex}/)\r\n |> filter(fn: (r) => r[\"samplerType\"] =~ /${samplerType:regex}/)\r\n |> group(columns: [\"runId\"])\r\n |> count()\r\n |> toFloat()\r\n |> keep(columns: [\"_value\", \"runId\"])\r\n \r\nsumerrorCount=from(bucket: v.bucket)\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"requestsRaw\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"errorCount\")\r\n |> filter(fn: (r) => r[\"runId\"] =~ /${runId:regex}/)\r\n |> filter(fn: (r) => r[\"samplerType\"] =~ /${samplerType:regex}/)\r\n |> group(columns: [\"runId\"]) \r\n |> sum()\r\n |> toFloat()\r\n |> keep(columns: [\"_value\", \"runId\"])\r\n \r\n return join(\r\n tables:{countResponseTime:countResponseTime, sumerrorCount:sumerrorCount},\r\n on:[\"runId\"]\r\n )\r\n |> map(fn:(r) => ({\r\n \r\n percentage: 1.0 - r._value_sumerrorCount / r._value_countResponseTime \r\n })) \r\n \r\n}\r\n\r\nsuccessfulPercentages()", "rawQuery": true, "refId": "A", "resultFormat": "time_series", @@ -1026,8 +1047,7 @@ } ] ], - "tags": [], - "datasource": "${DS_INFLUXDB2.0_JMETER}" + "tags": [] } ], "title": "Success Rate", @@ -1099,15 +1119,19 @@ "showThresholdMarkers": true, "text": {} }, - "pluginVersion": "8.5.4", + "pluginVersion": "9.1.6", "targets": [ { + "datasource": { + "type": "influxdb", + "uid": "${DS_INFLUXDB2.0_JMETER}" + }, "dsType": "influxdb", "groupBy": [], "measurement": "virtualUsers", "orderByTime": "ASC", "policy": "default", - "query": "failuresPercentages = () => {\r\n\r\ncountResponseTime=from(bucket: v.bucket)\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"requestsRaw\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"responseTime\")\r\n |> group(columns: [\"runId\"])\r\n |> count()\r\n |> toFloat()\r\n |> keep(columns: [\"_value\", \"runId\"])\r\n \r\nsumerrorCount=from(bucket: v.bucket)\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"requestsRaw\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"errorCount\")\r\n |> group(columns: [\"runId\"])\r\n |> sum()\r\n |> toFloat()\r\n |> keep(columns: [\"_value\", \"runId\"])\r\n \r\n return join(\r\n tables:{countResponseTime:countResponseTime, sumerrorCount:sumerrorCount},\r\n on:[\"runId\"]\r\n )\r\n |> map(fn:(r) => ({\r\n \r\n percentage: r._value_sumerrorCount / r._value_countResponseTime \r\n })) \r\n}\r\n\r\nfailuresPercentages()", + "query": "failuresPercentages = () => {\r\n\r\ncountResponseTime=from(bucket: v.bucket)\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"requestsRaw\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"responseTime\")\r\n |> filter(fn: (r) => r[\"runId\"] =~ /${runId:regex}/)\r\n |> filter(fn: (r) => r[\"samplerType\"] =~ /${samplerType:regex}/)\r\n |> group(columns: [\"runId\"])\r\n |> count()\r\n |> toFloat()\r\n |> keep(columns: [\"_value\", \"runId\"])\r\n \r\nsumerrorCount=from(bucket: v.bucket)\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"requestsRaw\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"errorCount\")\r\n |> filter(fn: (r) => r[\"runId\"] =~ /${runId:regex}/)\r\n |> filter(fn: (r) => r[\"samplerType\"] =~ /${samplerType:regex}/)\r\n |> group(columns: [\"runId\"])\r\n |> sum()\r\n |> toFloat()\r\n |> keep(columns: [\"_value\", \"runId\"])\r\n \r\n return join(\r\n tables:{countResponseTime:countResponseTime, sumerrorCount:sumerrorCount},\r\n on:[\"runId\"]\r\n )\r\n |> map(fn:(r) => ({\r\n \r\n percentage: r._value_sumerrorCount / r._value_countResponseTime \r\n })) \r\n}\r\n\r\nfailuresPercentages()", "rawQuery": true, "refId": "A", "resultFormat": "time_series", @@ -1121,8 +1145,7 @@ } ] ], - "tags": [], - "datasource": "${DS_INFLUXDB2.0_JMETER}" + "tags": [] } ], "title": "Error Rate", @@ -1157,6 +1180,8 @@ "mode": "palette-classic" }, "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", "axisLabel": "Throughput", "axisPlacement": "auto", "barAlignment": 0, @@ -1259,7 +1284,8 @@ "min" ], "displayMode": "table", - "placement": "bottom" + "placement": "bottom", + "showLegend": true }, "tooltip": { "mode": "multi", @@ -1293,7 +1319,7 @@ "measurement": "requestsRaw", "orderByTime": "ASC", "policy": "default", - "query": " from(bucket: v.bucket)\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"requestsRaw\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"responseTime\")\r\n |> group(columns: [\"_field\"])\r\n |> aggregateWindow(every: ${aggregation}s, fn: count, createEmpty: false) \r\n |> toFloat() \r\n |> map(fn: (r) => ({ r with _value: float(v: r._value /float(v: ${aggregation})) }))\r\n", + "query": "\r\n \r\n from(bucket: v.bucket)\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"requestsRaw\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"responseTime\") \r\n |> filter(fn: (r) => r[\"runId\"] =~ /${runId:regex}/)\r\n |> group(columns: [\"_field\"])\r\n |> aggregateWindow(every: ${aggregation}s, fn: count, createEmpty: false) \r\n |> toFloat() \r\n |> map(fn: (r) => ({ r with _value: float(v: r._value /float(v: ${aggregation})) }))\r\n", "rawQuery": true, "refId": "B", "resultFormat": "time_series", @@ -1334,7 +1360,7 @@ ], "orderByTime": "ASC", "policy": "default", - "query": " from(bucket: v.bucket)\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"virtualUsers\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"meanActiveThreads\")\r\n |> aggregateWindow(every: [[aggregation]]s, fn: mean, createEmpty: false)\r\n |> keep(columns: [\"_time\", \"_value\", \"_field\"])\r\n ", + "query": " from(bucket: v.bucket)\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"virtualUsers\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"meanActiveThreads\")\r\n |> filter(fn: (r) => r[\"runId\"] =~ /${runId:regex}/) \r\n |> aggregateWindow(every: [[aggregation]]s, fn: mean, createEmpty: false)\r\n |> keep(columns: [\"_time\", \"_value\", \"_field\"])\r\n ", "refId": "A", "resultFormat": "time_series", "select": [ @@ -1370,6 +1396,8 @@ "mode": "palette-classic" }, "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", "axisLabel": "Throughput", "axisPlacement": "auto", "barAlignment": 0, @@ -1460,7 +1488,8 @@ "min" ], "displayMode": "table", - "placement": "bottom" + "placement": "bottom", + "showLegend": true }, "tooltip": { "mode": "multi", @@ -1494,7 +1523,7 @@ "measurement": "requestsRaw", "orderByTime": "ASC", "policy": "default", - "query": " from(bucket: v.bucket)\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"requestsRaw\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"responseTime\")\r\n |> group(columns: [\"requestName\"])\r\n |> aggregateWindow(every: ${aggregation}s, fn: count, createEmpty: false) \r\n |> toFloat() \r\n |> map(fn: (r) => ({ r with _value: float(v: r._value /float(v: ${aggregation})) }))\r\n", + "query": " from(bucket: v.bucket)\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"requestsRaw\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"responseTime\")\r\n |> filter(fn: (r) => r[\"runId\"] =~ /${runId:regex}/)\r\n |> filter(fn: (r) => r[\"samplerType\"] =~ /${samplerType:regex}/)\r\n |> group(columns: [\"requestName\"])\r\n |> aggregateWindow(every: ${aggregation}s, fn: count, createEmpty: false) \r\n |> toFloat() \r\n |> map(fn: (r) => ({ r with _value: float(v: r._value /float(v: ${aggregation})) }))\r\n", "rawQuery": true, "refId": "B", "resultFormat": "time_series", @@ -1535,7 +1564,7 @@ ], "orderByTime": "ASC", "policy": "default", - "query": " from(bucket: v.bucket)\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"virtualUsers\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"meanActiveThreads\")\r\n |> aggregateWindow(every: [[aggregation]]s, fn: mean, createEmpty: false)\r\n |> keep(columns: [\"_time\", \"_value\", \"_field\"])", + "query": " from(bucket: v.bucket)\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"virtualUsers\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"meanActiveThreads\")\r\n |> filter(fn: (r) => r[\"runId\"] =~ /${runId:regex}/) \r\n |> aggregateWindow(every: [[aggregation]]s, fn: mean, createEmpty: false)\r\n |> keep(columns: [\"_time\", \"_value\", \"_field\"])", "refId": "A", "resultFormat": "time_series", "select": [ @@ -1571,6 +1600,8 @@ "mode": "palette-classic" }, "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", "axisLabel": "Throughput", "axisPlacement": "auto", "barAlignment": 0, @@ -1673,7 +1704,8 @@ "min" ], "displayMode": "table", - "placement": "bottom" + "placement": "bottom", + "showLegend": true }, "tooltip": { "mode": "multi", @@ -1707,7 +1739,7 @@ "measurement": "requestsRaw", "orderByTime": "ASC", "policy": "default", - "query": " from(bucket: v.bucket)\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"requestsRaw\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"errorCount\")\r\n |> filter(fn: (r) => r[\"_value\"] == 1)\r\n |> group(columns: [\"_field\"])\r\n |> aggregateWindow(every: ${aggregation}s, fn: count, createEmpty: false) \r\n |> toFloat() \r\n |> map(fn: (r) => ({ r with _value: float(v: r._value /float(v: ${aggregation})) }))\r\n", + "query": " from(bucket: v.bucket)\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"requestsRaw\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"errorCount\")\r\n |> filter(fn: (r) => r[\"_value\"] == 1)\r\n |> filter(fn: (r) => r[\"runId\"] =~ /${runId:regex}/)\r\n |> filter(fn: (r) => r[\"samplerType\"] =~ /${samplerType:regex}/)\r\n |> group(columns: [\"_field\"])\r\n |> aggregateWindow(every: ${aggregation}s, fn: count, createEmpty: false) \r\n |> toFloat() \r\n |> map(fn: (r) => ({ r with _value: float(v: r._value /float(v: ${aggregation})) }))\r\n", "rawQuery": true, "refId": "B", "resultFormat": "time_series", @@ -1748,7 +1780,7 @@ ], "orderByTime": "ASC", "policy": "default", - "query": " from(bucket: v.bucket)\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"virtualUsers\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"meanActiveThreads\")\r\n |> aggregateWindow(every: [[aggregation]]s, fn: mean, createEmpty: false)\r\n |> keep(columns: [\"_time\", \"_value\", \"_field\"])", + "query": " from(bucket: v.bucket)\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"virtualUsers\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"meanActiveThreads\")\r\n |> filter(fn: (r) => r[\"runId\"] =~ /${runId:regex}/) \r\n |> aggregateWindow(every: [[aggregation]]s, fn: mean, createEmpty: false)\r\n |> keep(columns: [\"_time\", \"_value\", \"_field\"])", "refId": "A", "resultFormat": "time_series", "select": [ @@ -1784,6 +1816,8 @@ "mode": "palette-classic" }, "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", "axisLabel": "Throughput", "axisPlacement": "auto", "barAlignment": 0, @@ -1874,7 +1908,8 @@ "min" ], "displayMode": "table", - "placement": "bottom" + "placement": "bottom", + "showLegend": true }, "tooltip": { "mode": "multi", @@ -1908,7 +1943,7 @@ "measurement": "requestsRaw", "orderByTime": "ASC", "policy": "default", - "query": " from(bucket: v.bucket)\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"requestsRaw\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"responseTime\")\r\n |> filter(fn: (r) => r[\"result\"] == \"pass\")\r\n |> group(columns: [\"requestName\"])\r\n |> aggregateWindow(every: ${aggregation}s, fn: count, createEmpty: false) \r\n |> toFloat() \r\n |> map(fn: (r) => ({ r with _value: float(v: r._value /float(v: ${aggregation})) }))\r\n", + "query": " from(bucket: v.bucket)\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"requestsRaw\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"responseTime\")\r\n |> filter(fn: (r) => r[\"result\"] == \"pass\")\r\n |> filter(fn: (r) => r[\"runId\"] =~ /${runId:regex}/)\r\n |> filter(fn: (r) => r[\"samplerType\"] =~ /${samplerType:regex}/)\r\n |> group(columns: [\"requestName\"])\r\n |> aggregateWindow(every: ${aggregation}s, fn: count, createEmpty: false) \r\n |> toFloat() \r\n |> map(fn: (r) => ({ r with _value: float(v: r._value /float(v: ${aggregation})) }))\r\n", "rawQuery": true, "refId": "B", "resultFormat": "time_series", @@ -1949,7 +1984,7 @@ ], "orderByTime": "ASC", "policy": "default", - "query": " from(bucket: v.bucket)\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"virtualUsers\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"meanActiveThreads\")\r\n |> aggregateWindow(every: [[aggregation]]s, fn: mean, createEmpty: false)\r\n |> keep(columns: [\"_time\", \"_value\", \"_field\"])", + "query": " from(bucket: v.bucket)\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"virtualUsers\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"meanActiveThreads\")\r\n |> filter(fn: (r) => r[\"runId\"] =~ /${runId:regex}/)\r\n |> aggregateWindow(every: [[aggregation]]s, fn: mean, createEmpty: false)\r\n |> keep(columns: [\"_time\", \"_value\", \"_field\"])", "refId": "A", "resultFormat": "time_series", "select": [ @@ -1985,6 +2020,8 @@ "mode": "palette-classic" }, "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", "axisLabel": "Throughput", "axisPlacement": "auto", "barAlignment": 0, @@ -2075,7 +2112,8 @@ "min" ], "displayMode": "table", - "placement": "bottom" + "placement": "bottom", + "showLegend": true }, "tooltip": { "mode": "multi", @@ -2109,7 +2147,7 @@ "measurement": "requestsRaw", "orderByTime": "ASC", "policy": "default", - "query": " from(bucket: v.bucket)\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"requestsRaw\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"responseTime\")\r\n |> filter(fn: (r) => r[\"result\"] == \"fail\" )\r\n |> group(columns: [\"requestName\"])\r\n |> aggregateWindow(every: ${aggregation}s, fn: count, createEmpty: false) \r\n |> toFloat() \r\n |> map(fn: (r) => ({ r with _value: float(v: r._value /float(v: ${aggregation})) }))\r\n", + "query": " from(bucket: v.bucket)\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"requestsRaw\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"responseTime\")\r\n |> filter(fn: (r) => r[\"result\"] == \"fail\" )\r\n |> filter(fn: (r) => r[\"runId\"] =~ /${runId:regex}/)\r\n |> filter(fn: (r) => r[\"samplerType\"] =~ /${samplerType:regex}/)\r\n |> group(columns: [\"requestName\"])\r\n |> aggregateWindow(every: ${aggregation}s, fn: count, createEmpty: false) \r\n |> toFloat() \r\n |> map(fn: (r) => ({ r with _value: float(v: r._value /float(v: ${aggregation})) }))\r\n", "rawQuery": true, "refId": "B", "resultFormat": "time_series", @@ -2150,7 +2188,7 @@ ], "orderByTime": "ASC", "policy": "default", - "query": " from(bucket: v.bucket)\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"virtualUsers\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"meanActiveThreads\")\r\n |> aggregateWindow(every: [[aggregation]]s, fn: mean, createEmpty: false)\r\n |> keep(columns: [\"_time\", \"_value\", \"_field\"])", + "query": " from(bucket: v.bucket)\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"virtualUsers\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"meanActiveThreads\")\r\n |> filter(fn: (r) => r[\"runId\"] =~ /${runId:regex}/) \r\n |> aggregateWindow(every: [[aggregation]]s, fn: mean, createEmpty: false)\r\n |> keep(columns: [\"_time\", \"_value\", \"_field\"])", "refId": "A", "resultFormat": "time_series", "select": [ @@ -2186,6 +2224,8 @@ "mode": "palette-classic" }, "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", "axisLabel": "Throughput", "axisPlacement": "auto", "barAlignment": 0, @@ -2247,7 +2287,8 @@ "min" ], "displayMode": "table", - "placement": "bottom" + "placement": "bottom", + "showLegend": true }, "tooltip": { "mode": "multi", @@ -2280,7 +2321,7 @@ "measurement": "requestsRaw", "orderByTime": "ASC", "policy": "default", - "query": " from(bucket: v.bucket)\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"requestsRaw\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"responseTime\")\r\n |> group(columns: [\"responseCode\"])\r\n |> aggregateWindow(every: ${aggregation}s, fn: count, createEmpty: false) \r\n |> toFloat() \r\n |> map(fn: (r) => ({ r with _value: float(v: r._value /float(v: ${aggregation})) }))", + "query": " from(bucket: v.bucket)\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"requestsRaw\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"responseTime\")\r\n |> filter(fn: (r) => r[\"runId\"] =~ /${runId:regex}/)\r\n |> filter(fn: (r) => r[\"samplerType\"] =~ /${samplerType:regex}/)\r\n |> group(columns: [\"responseCode\"])\r\n |> aggregateWindow(every: ${aggregation}s, fn: count, createEmpty: false) \r\n |> toFloat() \r\n |> map(fn: (r) => ({ r with _value: float(v: r._value /float(v: ${aggregation})) }))", "rawQuery": true, "refId": "C", "resultFormat": "time_series", @@ -2338,6 +2379,8 @@ "mode": "palette-classic" }, "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", "axisLabel": "Response Time, ms", "axisPlacement": "auto", "barAlignment": 0, @@ -2473,7 +2516,8 @@ "min" ], "displayMode": "table", - "placement": "bottom" + "placement": "bottom", + "showLegend": true }, "tooltip": { "mode": "multi", @@ -2506,7 +2550,7 @@ "measurement": "requestsRaw", "orderByTime": "ASC", "policy": "default", - "query": "from(bucket: v.bucket)\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"requestsRaw\")\n |> filter(fn: (r) => r[\"_field\"] == \"responseTime\")\n |> group(columns: [\"requestName\"])\n |> aggregateWindow(every: [[aggregation]]s, fn: mean, createEmpty: false)", + "query": "from(bucket: v.bucket)\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"requestsRaw\")\n |> filter(fn: (r) => r[\"_field\"] == \"responseTime\")\n |> filter(fn: (r) => r[\"runId\"] =~ /${runId:regex}/)\n |> filter(fn: (r) => r[\"samplerType\"] =~ /${samplerType:regex}/)\n |> group(columns: [\"requestName\"])\n |> aggregateWindow(every: [[aggregation]]s, fn: mean, createEmpty: false)", "rawQuery": true, "refId": "A", "resultFormat": "time_series", @@ -2553,7 +2597,7 @@ ], "orderByTime": "ASC", "policy": "default", - "query": " from(bucket: v.bucket)\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"virtualUsers\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"meanActiveThreads\")\r\n |> aggregateWindow(every: [[aggregation]]s, fn: mean, createEmpty: false)\r\n |> keep(columns: [\"_time\", \"_value\", \"_field\"])", + "query": " from(bucket: v.bucket)\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"virtualUsers\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"meanActiveThreads\")\r\n |> filter(fn: (r) => r[\"runId\"] =~ /${runId:regex}/)\r\n |> aggregateWindow(every: [[aggregation]]s, fn: mean, createEmpty: false)\r\n |> keep(columns: [\"_time\", \"_value\", \"_field\"])", "refId": "B", "resultFormat": "time_series", "select": [ @@ -2587,6 +2631,8 @@ "mode": "palette-classic" }, "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", "axisLabel": "Response Time, ms", "axisPlacement": "auto", "barAlignment": 0, @@ -2722,7 +2768,8 @@ "min" ], "displayMode": "table", - "placement": "bottom" + "placement": "bottom", + "showLegend": true }, "tooltip": { "mode": "multi", @@ -2755,7 +2802,7 @@ "measurement": "requestsRaw", "orderByTime": "ASC", "policy": "default", - "query": "from(bucket: v.bucket)\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"requestsRaw\")\n |> filter(fn: (r) => r[\"_field\"] == \"responseTime\")\n |> filter(fn: (r) => r[\"result\"] == \"pass\")\n |> group(columns: [\"requestName\"])\n |> aggregateWindow(every: [[aggregation]]s, fn: mean, createEmpty: false)", + "query": "from(bucket: v.bucket)\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"requestsRaw\")\n |> filter(fn: (r) => r[\"_field\"] == \"responseTime\")\n |> filter(fn: (r) => r[\"result\"] == \"pass\")\n |> filter(fn: (r) => r[\"runId\"] =~ /${runId:regex}/)\n |> filter(fn: (r) => r[\"samplerType\"] =~ /${samplerType:regex}/)\n |> group(columns: [\"requestName\"])\n |> aggregateWindow(every: [[aggregation]]s, fn: mean, createEmpty: false)", "rawQuery": true, "refId": "A", "resultFormat": "time_series", @@ -2802,7 +2849,7 @@ ], "orderByTime": "ASC", "policy": "default", - "query": " from(bucket: v.bucket)\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"virtualUsers\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"meanActiveThreads\")\r\n |> aggregateWindow(every: [[aggregation]]s, fn: mean, createEmpty: false)\r\n |> keep(columns: [\"_time\", \"_value\", \"_field\"])", + "query": " from(bucket: v.bucket)\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"virtualUsers\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"meanActiveThreads\")\r\n |> filter(fn: (r) => r[\"runId\"] =~ /${runId:regex}/)\r\n |> aggregateWindow(every: [[aggregation]]s, fn: mean, createEmpty: false)\r\n |> keep(columns: [\"_time\", \"_value\", \"_field\"])", "refId": "B", "resultFormat": "time_series", "select": [ @@ -2836,6 +2883,8 @@ "mode": "palette-classic" }, "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", "axisLabel": "Response Time, ms", "axisPlacement": "auto", "barAlignment": 0, @@ -2971,7 +3020,8 @@ "min" ], "displayMode": "table", - "placement": "bottom" + "placement": "bottom", + "showLegend": true }, "tooltip": { "mode": "multi", @@ -3004,7 +3054,7 @@ "measurement": "requestsRaw", "orderByTime": "ASC", "policy": "default", - "query": "from(bucket: v.bucket)\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"requestsRaw\")\n |> filter(fn: (r) => r[\"_field\"] == \"responseTime\")\n |> filter(fn: (r) => r[\"result\"] == \"fail\")\n |> group(columns: [\"requestName\"])\n |> aggregateWindow(every: [[aggregation]]s, fn: mean, createEmpty: false)", + "query": "from(bucket: v.bucket)\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"requestsRaw\")\n |> filter(fn: (r) => r[\"_field\"] == \"responseTime\")\n |> filter(fn: (r) => r[\"result\"] == \"fail\")\n |> filter(fn: (r) => r[\"runId\"] =~ /${runId:regex}/)\n |> filter(fn: (r) => r[\"samplerType\"] =~ /${samplerType:regex}/)\n |> group(columns: [\"requestName\"])\n |> aggregateWindow(every: [[aggregation]]s, fn: mean, createEmpty: false)", "rawQuery": true, "refId": "A", "resultFormat": "time_series", @@ -3051,7 +3101,7 @@ ], "orderByTime": "ASC", "policy": "default", - "query": " from(bucket: v.bucket)\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"virtualUsers\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"meanActiveThreads\")\r\n |> aggregateWindow(every: [[aggregation]]s, fn: mean, createEmpty: false)\r\n |> keep(columns: [\"_time\", \"_value\", \"_field\"])", + "query": " from(bucket: v.bucket)\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"virtualUsers\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"meanActiveThreads\")\r\n |> filter(fn: (r) => r[\"runId\"] =~ /${runId:regex}/)\r\n |> aggregateWindow(every: [[aggregation]]s, fn: mean, createEmpty: false)\r\n |> keep(columns: [\"_time\", \"_value\", \"_field\"])", "refId": "B", "resultFormat": "time_series", "select": [ @@ -3085,6 +3135,8 @@ "mode": "palette-classic" }, "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", "axisLabel": "Response Time, ms", "axisPlacement": "auto", "barAlignment": 0, @@ -3220,7 +3272,8 @@ "min" ], "displayMode": "table", - "placement": "bottom" + "placement": "bottom", + "showLegend": true }, "tooltip": { "mode": "multi", @@ -3231,6 +3284,10 @@ "targets": [ { "alias": "$tag_requestName", + "datasource": { + "type": "influxdb", + "uid": "${DS_INFLUXDB2.0_JMETER}" + }, "dsType": "influxdb", "groupBy": [ { @@ -3249,7 +3306,7 @@ "measurement": "requestsRaw", "orderByTime": "ASC", "policy": "default", - "query": "from(bucket: v.bucket)\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"requestsRaw\")\n |> filter(fn: (r) => r[\"_field\"] == \"responseTime\")\n |> group(columns: [\"requestName\"])\n |> aggregateWindow(every: [[aggregation]]s, fn: max, createEmpty: false)\n |> keep(columns: [\"_time\", \"_value\", \"requestName\"])", + "query": "from(bucket: v.bucket)\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"requestsRaw\")\n |> filter(fn: (r) => r[\"_field\"] == \"responseTime\")\n |> filter(fn: (r) => r[\"runId\"] == \"${runId}\")\n |> group(columns: [\"requestName\"])\n |> aggregateWindow(every: [[aggregation]]s, fn: max, createEmpty: false)\n |> keep(columns: [\"_time\", \"_value\", \"requestName\"])", "rawQuery": true, "refId": "A", "resultFormat": "time_series", @@ -3273,10 +3330,13 @@ "operator": "=~", "value": "/^$request$/" } - ], - "datasource": "${DS_INFLUXDB2.0_JMETER}" + ] }, { + "datasource": { + "type": "influxdb", + "uid": "${DS_INFLUXDB2.0_JMETER}" + }, "groupBy": [ { "params": [ @@ -3293,7 +3353,7 @@ ], "orderByTime": "ASC", "policy": "default", - "query": " from(bucket: v.bucket)\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"virtualUsers\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"meanActiveThreads\")\r\n |> aggregateWindow(every: [[aggregation]]s, fn: mean, createEmpty: false)\r\n |> keep(columns: [\"_time\", \"_value\", \"_field\"])", + "query": " from(bucket: v.bucket)\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"virtualUsers\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"meanActiveThreads\")\r\n |> filter(fn: (r) => r[\"runId\"] =~ /${runId:regex}/)\r\n |> aggregateWindow(every: [[aggregation]]s, fn: mean, createEmpty: false)\r\n |> keep(columns: [\"_time\", \"_value\", \"_field\"])", "refId": "B", "resultFormat": "time_series", "select": [ @@ -3310,8 +3370,7 @@ } ] ], - "tags": [], - "datasource": "${DS_INFLUXDB2.0_JMETER}" + "tags": [] } ], "title": "MAX Response Times (no filters)", @@ -3434,9 +3493,13 @@ "showHeader": true, "sortBy": [] }, - "pluginVersion": "8.5.4", + "pluginVersion": "9.1.6", "targets": [ { + "datasource": { + "type": "influxdb", + "uid": "${DS_INFLUXDB2.0_JMETER}" + }, "groupBy": [ { "params": [ @@ -3453,7 +3516,7 @@ ], "orderByTime": "ASC", "policy": "default", - "query": "get_percent_500 = () => {\r\nfcount_500=from(bucket: v.bucket)\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"requestsRaw\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"responseTime\")\r\n |> filter(fn: (r) => r[\"_value\"] <= 500)\r\n |> group(columns: [\"requestName\"])\r\n |> count()\r\n |> toFloat()\r\n |> group()\r\n |> keep(columns: [\"_value\", \"requestName\"])\r\n\r\n count=from(bucket: v.bucket)\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"requestsRaw\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"responseTime\")\r\n |> group(columns: [\"requestName\"])\r\n |> count()\r\n |> toFloat()\r\n |> group()\r\n |> keep(columns: [\"_value\", \"requestName\"])\r\n \r\n return join(\r\n tables:{fcount_500:fcount_500, count:count},\r\n on:[\"requestName\"]\r\n )\r\n |> map(fn:(r) => ({\r\n \"Request Name\": r.requestName,\r\n \"Response time is <= 500, (%)\": r._value_fcount_500 * 100.0/ r._value_count, \r\n })) \r\n}\r\nget_percent_500()\r\n\r\n", + "query": "get_percent_500 = () => {\r\nfcount_500=from(bucket: v.bucket)\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"requestsRaw\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"responseTime\")\r\n |> filter(fn: (r) => r[\"_value\"] <= 500)\r\n |> filter(fn: (r) => r[\"runId\"] =~ /${runId:regex}/)\r\n |> filter(fn: (r) => r[\"samplerType\"] =~ /${samplerType:regex}/)\r\n |> group(columns: [\"requestName\"])\r\n |> count()\r\n |> toFloat()\r\n |> group()\r\n |> keep(columns: [\"_value\", \"requestName\"])\r\n\r\n count=from(bucket: v.bucket)\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"requestsRaw\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"responseTime\")\r\n |> filter(fn: (r) => r[\"runId\"] =~ /${runId:regex}/)\r\n |> filter(fn: (r) => r[\"samplerType\"] =~ /${samplerType:regex}/)\r\n |> group(columns: [\"requestName\"])\r\n |> count()\r\n |> toFloat()\r\n |> group()\r\n |> keep(columns: [\"_value\", \"requestName\"])\r\n \r\n return join(\r\n tables:{fcount_500:fcount_500, count:count},\r\n on:[\"requestName\"]\r\n )\r\n |> map(fn:(r) => ({\r\n \"Request Name\": r.requestName,\r\n \"Response time is <= 500, (%)\": r._value_fcount_500 * 100.0/ r._value_count, \r\n })) \r\n}\r\nget_percent_500()\r\n\r\n", "refId": "A", "resultFormat": "time_series", "select": [ @@ -3470,10 +3533,13 @@ } ] ], - "tags": [], - "datasource": "${DS_INFLUXDB2.0_JMETER}" + "tags": [] }, { + "datasource": { + "type": "influxdb", + "uid": "${DS_INFLUXDB2.0_JMETER}" + }, "groupBy": [ { "params": [ @@ -3490,7 +3556,7 @@ ], "orderByTime": "ASC", "policy": "default", - "query": "get_percent_1000 = () => {\r\n\r\nfcount_1000=from(bucket: v.bucket)\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"requestsRaw\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"responseTime\")\r\n |> filter(fn: (r) => r[\"_value\"] <= 1000)\r\n |> group(columns: [\"requestName\"])\r\n |> count()\r\n |> toFloat()\r\n |> group()\r\n |> keep(columns: [\"_value\", \"requestName\"]) \r\n \r\n count=from(bucket: v.bucket)\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"requestsRaw\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"responseTime\")\r\n |> group(columns: [\"requestName\"])\r\n |> count()\r\n |> toFloat()\r\n |> group()\r\n |> keep(columns: [\"_value\", \"requestName\"])\r\n \r\n return join(\r\n tables:{fcount_1000:fcount_1000, count:count},\r\n on:[\"requestName\"]\r\n )\r\n |> map(fn:(r) => ({\r\n \"Request Name\": r.requestName,\r\n \"Response time is <= 1000, (%)\": r._value_fcount_1000 * 100.0/ r._value_count, \r\n })) \r\n}\r\nget_percent_1000()", + "query": "get_percent_1000 = () => {\r\n\r\nfcount_1000=from(bucket: v.bucket)\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"requestsRaw\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"responseTime\")\r\n |> filter(fn: (r) => r[\"_value\"] <= 1000)\r\n |> filter(fn: (r) => r[\"runId\"] =~ /${runId:regex}/)\r\n |> filter(fn: (r) => r[\"samplerType\"] =~ /${samplerType:regex}/)\r\n |> group(columns: [\"requestName\"])\r\n |> count()\r\n |> toFloat()\r\n |> group()\r\n |> keep(columns: [\"_value\", \"requestName\"]) \r\n \r\n count=from(bucket: v.bucket)\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"requestsRaw\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"responseTime\")\r\n |> filter(fn: (r) => r[\"runId\"] =~ /${runId:regex}/)\r\n |> filter(fn: (r) => r[\"samplerType\"] =~ /${samplerType:regex}/)\r\n |> group(columns: [\"requestName\"])\r\n |> count()\r\n |> toFloat()\r\n |> group()\r\n |> keep(columns: [\"_value\", \"requestName\"])\r\n \r\n return join(\r\n tables:{fcount_1000:fcount_1000, count:count},\r\n on:[\"requestName\"]\r\n )\r\n |> map(fn:(r) => ({\r\n \"Request Name\": r.requestName,\r\n \"Response time is <= 1000, (%)\": r._value_fcount_1000 * 100.0/ r._value_count, \r\n })) \r\n}\r\nget_percent_1000()", "refId": "B", "resultFormat": "time_series", "select": [ @@ -3507,10 +3573,13 @@ } ] ], - "tags": [], - "datasource": "${DS_INFLUXDB2.0_JMETER}" + "tags": [] }, { + "datasource": { + "type": "influxdb", + "uid": "${DS_INFLUXDB2.0_JMETER}" + }, "groupBy": [ { "params": [ @@ -3527,7 +3596,7 @@ ], "orderByTime": "ASC", "policy": "default", - "query": "get_percent_1500 = () => {\r\n\r\nfcount_1500=from(bucket: v.bucket)\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"requestsRaw\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"responseTime\")\r\n |> filter(fn: (r) => r[\"_value\"] <= 1500)\r\n |> group(columns: [\"requestName\"])\r\n |> count()\r\n |> toFloat()\r\n |> group()\r\n |> keep(columns: [\"_value\", \"requestName\"]) \r\n \r\n count=from(bucket: v.bucket)\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"requestsRaw\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"responseTime\")\r\n |> group(columns: [\"requestName\"])\r\n |> count()\r\n |> toFloat()\r\n |> group()\r\n |> keep(columns: [\"_value\", \"requestName\"])\r\n \r\n return join(\r\n tables:{fcount_1500:fcount_1500, count:count},\r\n on:[\"requestName\"]\r\n )\r\n |> map(fn:(r) => ({\r\n \"Request Name\": r.requestName,\r\n \"Response time is <= 1500, (%)\": r._value_fcount_1500 * 100.0/ r._value_count, \r\n })) \r\n}\r\nget_percent_1500()", + "query": "get_percent_1500 = () => {\r\n\r\nfcount_1500=from(bucket: v.bucket)\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"requestsRaw\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"responseTime\")\r\n |> filter(fn: (r) => r[\"_value\"] <= 1500)\r\n |> filter(fn: (r) => r[\"runId\"] =~ /${runId:regex}/)\r\n |> filter(fn: (r) => r[\"samplerType\"] =~ /${samplerType:regex}/) \r\n |> group(columns: [\"requestName\"])\r\n |> count()\r\n |> toFloat()\r\n |> group()\r\n |> keep(columns: [\"_value\", \"requestName\"]) \r\n \r\n count=from(bucket: v.bucket)\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"requestsRaw\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"responseTime\")\r\n |> filter(fn: (r) => r[\"runId\"] =~ /${runId:regex}/)\r\n |> filter(fn: (r) => r[\"samplerType\"] =~ /${samplerType:regex}/)\r\n |> group(columns: [\"requestName\"])\r\n |> count()\r\n |> toFloat()\r\n |> group()\r\n |> keep(columns: [\"_value\", \"requestName\"])\r\n \r\n return join(\r\n tables:{fcount_1500:fcount_1500, count:count},\r\n on:[\"requestName\"]\r\n )\r\n |> map(fn:(r) => ({\r\n \"Request Name\": r.requestName,\r\n \"Response time is <= 1500, (%)\": r._value_fcount_1500 * 100.0/ r._value_count, \r\n })) \r\n}\r\nget_percent_1500()", "refId": "C", "resultFormat": "time_series", "select": [ @@ -3544,10 +3613,13 @@ } ] ], - "tags": [], - "datasource": "${DS_INFLUXDB2.0_JMETER}" + "tags": [] }, { + "datasource": { + "type": "influxdb", + "uid": "${DS_INFLUXDB2.0_JMETER}" + }, "groupBy": [ { "params": [ @@ -3564,7 +3636,7 @@ ], "orderByTime": "ASC", "policy": "default", - "query": "get_percent_2000 = () => {\r\n\r\nfcount_2000=from(bucket: v.bucket)\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"requestsRaw\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"responseTime\")\r\n |> filter(fn: (r) => r[\"_value\"] <= 2000)\r\n |> group(columns: [\"requestName\"])\r\n |> count()\r\n |> toFloat()\r\n |> group()\r\n |> keep(columns: [\"_value\", \"requestName\"]) \r\n \r\n count=from(bucket: v.bucket)\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"requestsRaw\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"responseTime\")\r\n |> group(columns: [\"requestName\"])\r\n |> count()\r\n |> toFloat()\r\n |> group()\r\n |> keep(columns: [\"_value\", \"requestName\"])\r\n \r\n return join(\r\n tables:{fcount_2000:fcount_2000, count:count},\r\n on:[\"requestName\"]\r\n )\r\n |> map(fn:(r) => ({\r\n \"Request Name\": r.requestName,\r\n \"Response time is <= 2000, (%)\": r._value_fcount_2000 * 100.0/ r._value_count, \r\n })) \r\n}\r\nget_percent_2000()", + "query": "get_percent_2000 = () => {\r\n\r\nfcount_2000=from(bucket: v.bucket)\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"requestsRaw\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"responseTime\")\r\n |> filter(fn: (r) => r[\"_value\"] <= 2000)\r\n |> filter(fn: (r) => r[\"runId\"] =~ /${runId:regex}/)\r\n |> filter(fn: (r) => r[\"samplerType\"] =~ /${samplerType:regex}/)\r\n |> group(columns: [\"requestName\"])\r\n |> count()\r\n |> toFloat()\r\n |> group()\r\n |> keep(columns: [\"_value\", \"requestName\"]) \r\n \r\n count=from(bucket: v.bucket)\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"requestsRaw\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"responseTime\")\r\n |> filter(fn: (r) => r[\"runId\"] =~ /${runId:regex}/)\r\n |> filter(fn: (r) => r[\"samplerType\"] =~ /${samplerType:regex}/)\r\n |> group(columns: [\"requestName\"])\r\n |> count()\r\n |> toFloat()\r\n |> group()\r\n |> keep(columns: [\"_value\", \"requestName\"])\r\n \r\n return join(\r\n tables:{fcount_2000:fcount_2000, count:count},\r\n on:[\"requestName\"]\r\n )\r\n |> map(fn:(r) => ({\r\n \"Request Name\": r.requestName,\r\n \"Response time is <= 2000, (%)\": r._value_fcount_2000 * 100.0/ r._value_count, \r\n })) \r\n}\r\nget_percent_2000()", "refId": "D", "resultFormat": "time_series", "select": [ @@ -3581,10 +3653,13 @@ } ] ], - "tags": [], - "datasource": "${DS_INFLUXDB2.0_JMETER}" + "tags": [] }, { + "datasource": { + "type": "influxdb", + "uid": "${DS_INFLUXDB2.0_JMETER}" + }, "groupBy": [ { "params": [ @@ -3602,7 +3677,7 @@ "hide": false, "orderByTime": "ASC", "policy": "default", - "query": "get_percent_5000 = () => {\r\n\r\nfcount_5000=from(bucket: v.bucket)\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"requestsRaw\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"responseTime\")\r\n |> filter(fn: (r) => r[\"_value\"] <= 5000)\r\n |> group(columns: [\"requestName\"])\r\n |> count()\r\n |> toFloat()\r\n |> group()\r\n |> keep(columns: [\"_value\", \"requestName\"]) \r\n \r\n count=from(bucket: v.bucket)\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"requestsRaw\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"responseTime\")\r\n |> group(columns: [\"requestName\"])\r\n |> count()\r\n |> toFloat()\r\n |> group()\r\n |> keep(columns: [\"_value\", \"requestName\"])\r\n \r\n return join(\r\n tables:{fcount_5000:fcount_5000, count:count},\r\n on:[\"requestName\"]\r\n )\r\n |> map(fn:(r) => ({\r\n \"Request Name\": r.requestName,\r\n \"Response time is <= 5000, (%)\": r._value_fcount_5000 * 100.0/ r._value_count, \r\n })) \r\n}\r\nget_percent_5000()\r\n\r\n", + "query": "get_percent_5000 = () => {\r\n\r\nfcount_5000=from(bucket: v.bucket)\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"requestsRaw\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"responseTime\")\r\n |> filter(fn: (r) => r[\"_value\"] <= 5000)\r\n |> filter(fn: (r) => r[\"runId\"] =~ /${runId:regex}/)\r\n |> filter(fn: (r) => r[\"samplerType\"] =~ /${samplerType:regex}/)\r\n |> group(columns: [\"requestName\"])\r\n |> count()\r\n |> toFloat()\r\n |> group()\r\n |> keep(columns: [\"_value\", \"requestName\"]) \r\n \r\n count=from(bucket: v.bucket)\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"requestsRaw\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"responseTime\")\r\n |> filter(fn: (r) => r[\"runId\"] =~ /${runId:regex}/)\r\n |> filter(fn: (r) => r[\"samplerType\"] =~ /${samplerType:regex}/)\r\n |> group(columns: [\"requestName\"])\r\n |> count()\r\n |> toFloat()\r\n |> group()\r\n |> keep(columns: [\"_value\", \"requestName\"])\r\n \r\n return join(\r\n tables:{fcount_5000:fcount_5000, count:count},\r\n on:[\"requestName\"]\r\n )\r\n |> map(fn:(r) => ({\r\n \"Request Name\": r.requestName,\r\n \"Response time is <= 5000, (%)\": r._value_fcount_5000 * 100.0/ r._value_count, \r\n })) \r\n}\r\nget_percent_5000()\r\n\r\n", "refId": "E", "resultFormat": "time_series", "select": [ @@ -3619,8 +3694,7 @@ } ] ], - "tags": [], - "datasource": "${DS_INFLUXDB2.0_JMETER}" + "tags": [] } ], "title": "Response Times Distribution, % (no filters)", @@ -3689,7 +3763,7 @@ "valueSize": 15 } }, - "pluginVersion": "8.5.4", + "pluginVersion": "9.1.6", "targets": [ { "datasource": { @@ -3697,7 +3771,7 @@ "uid": "${DS_INFLUXDB2.0_JMETER}" }, "hide": false, - "query": "from(bucket: v.bucket)\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"requestsRaw\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"responseTime\")\r\n |> group(columns: [\"requestName\"])\r\n |> toFloat()\r\n |> quantile(q: 0.90)\r\n |> group(columns: [\"requestName\"])\r\n |> keep(columns: [ \"_value\", \"requestName\"])\r\n |> rename(columns: {_value: \"request\"})\r\n\r\n", + "query": "from(bucket: v.bucket)\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"requestsRaw\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"responseTime\")\r\n |> filter(fn: (r) => r[\"runId\"] =~ /${runId:regex}/)\r\n |> filter(fn: (r) => r[\"samplerType\"] =~ /${samplerType:regex}/)\r\n |> group(columns: [\"requestName\"])\r\n |> toFloat()\r\n |> quantile(q: 0.90)\r\n |> group(columns: [\"requestName\"])\r\n |> keep(columns: [ \"_value\", \"requestName\"])\r\n |> rename(columns: {_value: \"request\"})\r\n\r\n", "refId": "A" } ], @@ -3760,7 +3834,7 @@ "valueSize": 15 } }, - "pluginVersion": "8.5.4", + "pluginVersion": "9.1.6", "targets": [ { "datasource": { @@ -3768,7 +3842,7 @@ "uid": "${DS_INFLUXDB2.0_JMETER}" }, "hide": false, - "query": "from(bucket: v.bucket)\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"requestsRaw\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"responseTime\")\r\n |> group(columns: [\"requestName\"])\r\n |> toFloat()\r\n |> quantile(q: 0.95)\r\n |> group(columns: [\"requestName\"])\r\n |> keep(columns: [ \"_value\", \"requestName\"])\r\n |> rename(columns: {_value: \"request\"})\r\n\r\n", + "query": "from(bucket: v.bucket)\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"requestsRaw\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"responseTime\")\r\n |> filter(fn: (r) => r[\"runId\"] =~ /${runId:regex}/)\r\n |> filter(fn: (r) => r[\"samplerType\"] =~ /${samplerType:regex}/)\r\n |> group(columns: [\"requestName\"])\r\n |> toFloat()\r\n |> quantile(q: 0.95)\r\n |> group(columns: [\"requestName\"])\r\n |> keep(columns: [ \"_value\", \"requestName\"])\r\n |> rename(columns: {_value: \"request\"})\r\n\r\n", "refId": "A" } ], @@ -4024,7 +4098,7 @@ } ] }, - "pluginVersion": "8.5.4", + "pluginVersion": "9.1.6", "targets": [ { "datasource": { @@ -4047,8 +4121,8 @@ ], "orderByTime": "ASC", "policy": "default", - "query": "from(bucket: v.bucket)\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"requestsRaw\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"responseTime\")\r\n |> group(columns: [\"requestName\"])\r\n |> mean()\r\n |> group()\r\n |> rename(columns: {\"_value\": \"Avg\"})\r\n |> keep(columns: [\"Avg\", \"requestName\"])\r\n\r\n ", - "refId": "B", + "query": "from(bucket: v.bucket)\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"requestsRaw\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"responseTime\")\r\n |> filter(fn: (r) => r[\"runId\"] =~ /${runId:regex}/)\r\n |> filter(fn: (r) => r[\"samplerType\"] =~ /${samplerType:regex}/)\r\n |> group(columns: [\"requestName\"])\r\n |> mean()\r\n |> group()\r\n |> rename(columns: {\"_value\": \"Avg\"})\r\n |> keep(columns: [\"Avg\", \"requestName\"])\r\n\r\n ", + "refId": "AVG", "resultFormat": "time_series", "select": [ [ @@ -4087,8 +4161,8 @@ ], "orderByTime": "ASC", "policy": "default", - "query": "from(bucket: v.bucket)\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"requestsRaw\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"responseTime\")\r\n |> group(columns: [\"requestName\"])\r\n |> count()\r\n |> group()\r\n |> rename(columns: {\"_value\": \"Count\"})\r\n |> keep(columns: [\"requestName\", \"Count\"])", - "refId": "D", + "query": "from(bucket: v.bucket)\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"requestsRaw\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"responseTime\")\r\n |> filter(fn: (r) => r[\"runId\"] =~ /${runId:regex}/)\r\n |> filter(fn: (r) => r[\"samplerType\"] =~ /${samplerType:regex}/)\r\n |> group(columns: [\"requestName\"])\r\n |> count()\r\n |> group()\r\n |> rename(columns: {\"_value\": \"Count\"})\r\n |> keep(columns: [\"requestName\", \"Count\"])", + "refId": "Request Name", "resultFormat": "time_series", "select": [ [ @@ -4127,8 +4201,8 @@ ], "orderByTime": "ASC", "policy": "default", - "query": "from(bucket: v.bucket)\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"requestsRaw\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"responseTime\")\r\n |> group(columns: [\"requestName\"])\r\n |> max()\r\n |> group()\r\n |> rename(columns: {\"_value\": \"Max\"})\r\n |> keep(columns: [\"Max\", \"requestName\"])", - "refId": "C", + "query": "from(bucket: v.bucket)\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"requestsRaw\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"responseTime\")\r\n |> filter(fn: (r) => r[\"runId\"] =~ /${runId:regex}/)\r\n |> filter(fn: (r) => r[\"samplerType\"] =~ /${samplerType:regex}/)\r\n |> group(columns: [\"requestName\"])\r\n |> max()\r\n |> group()\r\n |> rename(columns: {\"_value\": \"Max\"})\r\n |> keep(columns: [\"Max\", \"requestName\"])", + "refId": "Max", "resultFormat": "time_series", "select": [ [ @@ -4167,8 +4241,8 @@ ], "orderByTime": "ASC", "policy": "default", - "query": "from(bucket: v.bucket)\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"requestsRaw\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"responseTime\")\r\n |> group(columns: [\"requestName\"])\r\n |> toFloat()\r\n |> median()\r\n |> group()\r\n |> rename(columns: {\"_value\": \"Median\"})\r\n |> keep(columns: [\"Median\", \"requestName\"])", - "refId": "A", + "query": "from(bucket: v.bucket)\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"requestsRaw\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"responseTime\")\r\n |> filter(fn: (r) => r[\"runId\"] =~ /${runId:regex}/)\r\n |> filter(fn: (r) => r[\"samplerType\"] =~ /${samplerType:regex}/)\r\n |> group(columns: [\"requestName\"])\r\n |> toFloat()\r\n |> median()\r\n |> group()\r\n |> rename(columns: {\"_value\": \"Median\"})\r\n |> keep(columns: [\"Median\", \"requestName\"])", + "refId": "Median", "resultFormat": "time_series", "select": [ [ @@ -4207,8 +4281,8 @@ ], "orderByTime": "ASC", "policy": "default", - "query": "from(bucket: v.bucket)\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"requestsRaw\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"responseTime\")\r\n |> group(columns: [\"requestName\"])\r\n |> toFloat()\r\n |> quantile(q: 0.90)\r\n |> group()\r\n |> rename(columns: {\"_value\": \"90%\"})\r\n |> keep(columns: [\"90%\", \"requestName\"])", - "refId": "E", + "query": "from(bucket: v.bucket)\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"requestsRaw\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"responseTime\")\r\n |> filter(fn: (r) => r[\"runId\"] =~ /${runId:regex}/)\r\n |> filter(fn: (r) => r[\"samplerType\"] =~ /${samplerType:regex}/)\r\n |> group(columns: [\"requestName\"])\r\n |> toFloat()\r\n |> quantile(q: 0.90)\r\n |> group()\r\n |> rename(columns: {\"_value\": \"90%\"})\r\n |> keep(columns: [\"90%\", \"requestName\"])", + "refId": "90 %", "resultFormat": "time_series", "select": [ [ @@ -4247,8 +4321,8 @@ ], "orderByTime": "ASC", "policy": "default", - "query": "from(bucket: v.bucket)\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"requestsRaw\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"responseTime\")\r\n |> group(columns: [\"requestName\"])\r\n |> toFloat()\r\n |> quantile(q: 0.95)\r\n |> group()\r\n |> rename(columns: {\"_value\": \"95%\"})\r\n |> keep(columns: [\"95%\", \"requestName\"])", - "refId": "F", + "query": "from(bucket: v.bucket)\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"requestsRaw\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"responseTime\")\r\n |> filter(fn: (r) => r[\"runId\"] =~ /${runId:regex}/)\r\n |> filter(fn: (r) => r[\"samplerType\"] =~ /${samplerType:regex}/)\r\n |> group(columns: [\"requestName\"])\r\n |> toFloat()\r\n |> quantile(q: 0.95)\r\n |> group()\r\n |> rename(columns: {\"_value\": \"95%\"})\r\n |> keep(columns: [\"95%\", \"requestName\"])", + "refId": "95 %", "resultFormat": "time_series", "select": [ [ @@ -4287,8 +4361,8 @@ ], "orderByTime": "ASC", "policy": "default", - "query": "from(bucket: v.bucket)\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"requestsRaw\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"responseTime\")\r\n |> group(columns: [\"requestName\"])\r\n |> toFloat()\r\n |> quantile(q: 0.99)\r\n |> group()\r\n |> rename(columns: {\"_value\": \"99%\"})\r\n |> keep(columns: [\"99%\", \"requestName\"])", - "refId": "G", + "query": "from(bucket: v.bucket)\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"requestsRaw\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"responseTime\")\r\n |> filter(fn: (r) => r[\"runId\"] =~ /${runId:regex}/)\r\n |> filter(fn: (r) => r[\"samplerType\"] =~ /${samplerType:regex}/)\r\n |> group(columns: [\"requestName\"])\r\n |> toFloat()\r\n |> quantile(q: 0.99)\r\n |> group()\r\n |> rename(columns: {\"_value\": \"99%\"})\r\n |> keep(columns: [\"99%\", \"requestName\"])", + "refId": "99 %", "resultFormat": "time_series", "select": [ [ @@ -4327,8 +4401,8 @@ ], "orderByTime": "ASC", "policy": "default", - "query": "from(bucket: v.bucket)\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"requestsRaw\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"responseTime\")\r\n |> group(columns: [\"requestName\"])\r\n |> stddev()\r\n |> group()\r\n |> rename(columns: {\"_value\": \"stddev\"})\r\n |> keep(columns: [\"stddev\", \"requestName\"])", - "refId": "H", + "query": "from(bucket: v.bucket)\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"requestsRaw\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"responseTime\")\r\n |> filter(fn: (r) => r[\"runId\"] =~ /${runId:regex}/)\r\n |> filter(fn: (r) => r[\"samplerType\"] =~ /${samplerType:regex}/)\r\n |> group(columns: [\"requestName\"])\r\n |> stddev()\r\n |> group()\r\n |> rename(columns: {\"_value\": \"stddev\"})\r\n |> keep(columns: [\"stddev\", \"requestName\"])", + "refId": "stddev", "resultFormat": "time_series", "select": [ [ @@ -4367,8 +4441,8 @@ ], "orderByTime": "ASC", "policy": "default", - "query": "tpsCalculator = () => {\r\ncount = from(bucket: v.bucket)\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"requestsRaw\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"count\")\r\n |> group(columns: [\"requestName\"])\r\n |> count()\r\n |> toFloat()\r\n |> group()\r\n |> keep(columns: [\"_value\", \"requestName\"])\r\n\r\n integral = from(bucket: v.bucket)\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"requestsRaw\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"count\")\r\n |> group(columns: [\"requestName\"])\r\n |> integral()\r\n |> toFloat()\r\n |> group() \r\n |> keep(columns: [\"_value\", \"requestName\"])\r\n \r\n return join(\r\n tables:{count:count, integral:integral},\r\n on:[\"requestName\"]\r\n )\r\n |> map(fn:(r) => ({\r\n requestName: r.requestName,\r\n TPS: r._value_count / r._value_integral,\r\n TPM: (r._value_count / r._value_integral) * 60.0,\r\n TPH: (r._value_count / r._value_integral) * 60.0 * 60.0, \r\n })) \r\n}\r\n\r\ntpsCalculator()", - "refId": "I", + "query": "tpsCalculator = () => {\r\ncount = from(bucket: v.bucket)\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"requestsRaw\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"count\")\r\n |> filter(fn: (r) => r[\"runId\"] =~ /${runId:regex}/)\r\n |> filter(fn: (r) => r[\"samplerType\"] =~ /${samplerType:regex}/)\r\n |> group(columns: [\"requestName\"])\r\n |> count()\r\n |> toFloat()\r\n |> group()\r\n |> keep(columns: [\"_value\", \"requestName\"])\r\n\r\n integral = from(bucket: v.bucket)\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"requestsRaw\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"count\")\r\n |> filter(fn: (r) => r[\"runId\"] =~ /${runId:regex}/)\r\n |> filter(fn: (r) => r[\"samplerType\"] =~ /${samplerType:regex}/)\r\n |> group(columns: [\"requestName\"])\r\n |> integral()\r\n |> toFloat()\r\n |> group() \r\n |> keep(columns: [\"_value\", \"requestName\"])\r\n \r\n return join(\r\n tables:{count:count, integral:integral},\r\n on:[\"requestName\"]\r\n )\r\n |> map(fn:(r) => ({\r\n requestName: r.requestName,\r\n TPS: r._value_count / r._value_integral,\r\n TPM: (r._value_count / r._value_integral) * 60.0,\r\n TPH: (r._value_count / r._value_integral) * 60.0 * 60.0, \r\n })) \r\n}\r\n\r\ntpsCalculator()", + "refId": "TPS", "resultFormat": "time_series", "select": [ [ @@ -4407,8 +4481,8 @@ ], "orderByTime": "ASC", "policy": "default", - "query": "failuresPercentages = () => {\r\n\r\ncountResponseTime=from(bucket: v.bucket)\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"requestsRaw\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"responseTime\")\r\n |> group(columns: [\"requestName\"] )\r\n |> count()\r\n |> group()\r\n |> toFloat()\r\n |> keep(columns: [\"_value\", \"requestName\"])\r\n\r\n \r\nsumerrorCount=from(bucket: v.bucket)\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"requestsRaw\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"errorCount\")\r\n |> group(columns: [\"requestName\"] )\r\n |> sum()\r\n |> group()\r\n |> toFloat()\r\n |> keep(columns: [\"_value\", \"requestName\"])\r\n\r\n return join(\r\n tables:{countResponseTime:countResponseTime, sumerrorCount:sumerrorCount},\r\n on:[\"requestName\"]\r\n )\r\n |> map(fn:(r) => ({\r\n requestName: r.requestName,\r\n ErrorRate: r._value_sumerrorCount / r._value_countResponseTime \r\n })) \r\n}\r\n\r\nfailuresPercentages()", - "refId": "J", + "query": "failuresPercentages = () => {\r\n\r\ncountResponseTime=from(bucket: v.bucket)\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"requestsRaw\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"responseTime\")\r\n |> filter(fn: (r) => r[\"runId\"] =~ /${runId:regex}/)\r\n |> filter(fn: (r) => r[\"samplerType\"] =~ /${samplerType:regex}/)\r\n |> group(columns: [\"requestName\"] )\r\n |> count()\r\n |> group()\r\n |> toFloat()\r\n |> keep(columns: [\"_value\", \"requestName\"])\r\n\r\n \r\nsumerrorCount=from(bucket: v.bucket)\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"requestsRaw\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"errorCount\")\r\n |> filter(fn: (r) => r[\"runId\"] =~ /${runId:regex}/)\r\n |> filter(fn: (r) => r[\"samplerType\"] =~ /${samplerType:regex}/)\r\n |> group(columns: [\"requestName\"] )\r\n |> sum()\r\n |> group()\r\n |> toFloat()\r\n |> keep(columns: [\"_value\", \"requestName\"])\r\n\r\n return join(\r\n tables:{countResponseTime:countResponseTime, sumerrorCount:sumerrorCount},\r\n on:[\"requestName\"]\r\n )\r\n |> map(fn:(r) => ({\r\n requestName: r.requestName,\r\n ErrorRate: r._value_sumerrorCount / r._value_countResponseTime \r\n })) \r\n}\r\n\r\nfailuresPercentages()", + "refId": "Error %", "resultFormat": "time_series", "select": [ [ @@ -4470,7 +4544,8 @@ "mode": "absolute", "steps": [ { - "color": "green" + "color": "green", + "value": null } ] }, @@ -4504,7 +4579,8 @@ "mode": "absolute", "steps": [ { - "color": "green" + "color": "green", + "value": null }, { "color": "#1F78C1", @@ -4656,7 +4732,7 @@ "h": 10, "w": 24, "x": 0, - "y": 102 + "y": 104 }, "id": 115, "links": [], @@ -4677,7 +4753,7 @@ } ] }, - "pluginVersion": "8.5.4", + "pluginVersion": "9.1.6", "targets": [ { "datasource": { @@ -4700,8 +4776,8 @@ ], "orderByTime": "ASC", "policy": "default", - "query": "from(bucket: v.bucket)\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"requestsRaw\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"responseTime\")\r\n |> filter(fn: (r) => r[\"result\"] == \"pass\")\r\n |> group(columns: [\"requestName\"])\r\n |> mean()\r\n |> group()\r\n |> rename(columns: {\"_value\": \"Avg\"})\r\n |> keep(columns: [\"Avg\", \"requestName\"])\r\n\r\n ", - "refId": "B", + "query": "from(bucket: v.bucket)\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"requestsRaw\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"responseTime\")\r\n |> filter(fn: (r) => r[\"result\"] == \"pass\")\r\n |> filter(fn: (r) => r[\"runId\"] =~ /${runId:regex}/)\r\n |> filter(fn: (r) => r[\"samplerType\"] =~ /${samplerType:regex}/)\r\n |> group(columns: [\"requestName\"])\r\n |> mean()\r\n |> group()\r\n |> rename(columns: {\"_value\": \"Avg\"})\r\n |> keep(columns: [\"Avg\", \"requestName\"])\r\n\r\n ", + "refId": "AVG", "resultFormat": "time_series", "select": [ [ @@ -4740,8 +4816,8 @@ ], "orderByTime": "ASC", "policy": "default", - "query": "from(bucket: v.bucket)\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"requestsRaw\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"responseTime\")\r\n |> filter(fn: (r) => r[\"result\"] == \"pass\")\r\n |> group(columns: [\"requestName\"])\r\n |> count()\r\n |> group()\r\n |> rename(columns: {\"_value\": \"Count\"})\r\n |> keep(columns: [\"requestName\", \"Count\"])", - "refId": "D", + "query": "from(bucket: v.bucket)\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"requestsRaw\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"responseTime\")\r\n |> filter(fn: (r) => r[\"result\"] == \"pass\")\r\n |> filter(fn: (r) => r[\"runId\"] =~ /${runId:regex}/)\r\n |> filter(fn: (r) => r[\"samplerType\"] =~ /${samplerType:regex}/)\r\n |> group(columns: [\"requestName\"])\r\n |> count()\r\n |> group()\r\n |> rename(columns: {\"_value\": \"Count\"})\r\n |> keep(columns: [\"requestName\", \"Count\"])", + "refId": "Request Name & Count", "resultFormat": "time_series", "select": [ [ @@ -4780,8 +4856,8 @@ ], "orderByTime": "ASC", "policy": "default", - "query": "from(bucket: v.bucket)\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"requestsRaw\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"responseTime\")\r\n |> filter(fn: (r) => r[\"result\"] == \"pass\")\r\n |> group(columns: [\"requestName\"])\r\n |> max()\r\n |> group()\r\n |> rename(columns: {\"_value\": \"Max\"})\r\n |> keep(columns: [\"Max\", \"requestName\"])", - "refId": "C", + "query": "from(bucket: v.bucket)\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"requestsRaw\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"responseTime\")\r\n |> filter(fn: (r) => r[\"result\"] == \"pass\")\r\n |> filter(fn: (r) => r[\"runId\"] =~ /${runId:regex}/)\r\n |> filter(fn: (r) => r[\"samplerType\"] =~ /${samplerType:regex}/)\r\n |> group(columns: [\"requestName\"])\r\n |> max()\r\n |> group()\r\n |> rename(columns: {\"_value\": \"Max\"})\r\n |> keep(columns: [\"Max\", \"requestName\"])", + "refId": "Max", "resultFormat": "time_series", "select": [ [ @@ -4820,8 +4896,8 @@ ], "orderByTime": "ASC", "policy": "default", - "query": "from(bucket: v.bucket)\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"requestsRaw\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"responseTime\")\r\n |> group(columns: [\"requestName\"])\r\n |> toFloat()\r\n |> median()\r\n |> group()\r\n |> rename(columns: {\"_value\": \"Median\"})\r\n |> keep(columns: [\"Median\", \"requestName\"])", - "refId": "A", + "query": "from(bucket: v.bucket)\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"requestsRaw\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"responseTime\")\r\n |> filter(fn: (r) => r[\"result\"] == \"pass\")\r\n |> filter(fn: (r) => r[\"runId\"] =~ /${runId:regex}/)\r\n |> filter(fn: (r) => r[\"samplerType\"] =~ /${samplerType:regex}/)\r\n |> group(columns: [\"requestName\"])\r\n |> toFloat()\r\n |> median()\r\n |> group()\r\n |> rename(columns: {\"_value\": \"Median\"})\r\n |> keep(columns: [\"Median\", \"requestName\"])", + "refId": "Median", "resultFormat": "time_series", "select": [ [ @@ -4860,8 +4936,8 @@ ], "orderByTime": "ASC", "policy": "default", - "query": "from(bucket: v.bucket)\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"requestsRaw\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"responseTime\")\r\n |> group(columns: [\"requestName\"])\r\n |> toFloat()\r\n |> quantile(q: 0.90)\r\n |> group()\r\n |> rename(columns: {\"_value\": \"90%\"})\r\n |> keep(columns: [\"90%\", \"requestName\"])", - "refId": "E", + "query": "from(bucket: v.bucket)\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"requestsRaw\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"responseTime\")\r\n |> filter(fn: (r) => r[\"result\"] == \"pass\")\r\n |> filter(fn: (r) => r[\"runId\"] =~ /${runId:regex}/)\r\n |> filter(fn: (r) => r[\"samplerType\"] =~ /${samplerType:regex}/)\r\n |> group(columns: [\"requestName\"])\r\n |> toFloat()\r\n |> quantile(q: 0.90)\r\n |> group()\r\n |> rename(columns: {\"_value\": \"90%\"})\r\n |> keep(columns: [\"90%\", \"requestName\"])", + "refId": "90%", "resultFormat": "time_series", "select": [ [ @@ -4900,8 +4976,8 @@ ], "orderByTime": "ASC", "policy": "default", - "query": "from(bucket: v.bucket)\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"requestsRaw\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"responseTime\")\r\n |> group(columns: [\"requestName\"])\r\n |> toFloat()\r\n |> quantile(q: 0.95)\r\n |> group()\r\n |> rename(columns: {\"_value\": \"95%\"})\r\n |> keep(columns: [\"95%\", \"requestName\"])", - "refId": "F", + "query": "from(bucket: v.bucket)\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"requestsRaw\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"responseTime\")\r\n |> filter(fn: (r) => r[\"result\"] == \"pass\")\r\n |> filter(fn: (r) => r[\"runId\"] =~ /${runId:regex}/)\r\n |> filter(fn: (r) => r[\"samplerType\"] =~ /${samplerType:regex}/)\r\n |> group(columns: [\"requestName\"])\r\n |> toFloat()\r\n |> quantile(q: 0.95)\r\n |> group()\r\n |> rename(columns: {\"_value\": \"95%\"})\r\n |> keep(columns: [\"95%\", \"requestName\"])", + "refId": "95 %", "resultFormat": "time_series", "select": [ [ @@ -4940,8 +5016,8 @@ ], "orderByTime": "ASC", "policy": "default", - "query": "from(bucket: v.bucket)\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"requestsRaw\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"responseTime\")\r\n |> filter(fn: (r) => r[\"result\"] == \"pass\")\r\n |> group(columns: [\"requestName\"])\r\n |> toFloat()\r\n |> quantile(q: 0.99)\r\n |> group()\r\n |> rename(columns: {\"_value\": \"99%\"})\r\n |> keep(columns: [\"99%\", \"requestName\"])", - "refId": "G", + "query": "from(bucket: v.bucket)\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"requestsRaw\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"responseTime\")\r\n |> filter(fn: (r) => r[\"result\"] == \"pass\")\r\n |> filter(fn: (r) => r[\"runId\"] =~ /${runId:regex}/)\r\n |> filter(fn: (r) => r[\"samplerType\"] =~ /${samplerType:regex}/)\r\n |> group(columns: [\"requestName\"])\r\n |> toFloat()\r\n |> quantile(q: 0.99)\r\n |> group()\r\n |> rename(columns: {\"_value\": \"99%\"})\r\n |> keep(columns: [\"99%\", \"requestName\"])", + "refId": "99 %", "resultFormat": "time_series", "select": [ [ @@ -4980,8 +5056,8 @@ ], "orderByTime": "ASC", "policy": "default", - "query": "from(bucket: v.bucket)\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"requestsRaw\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"responseTime\")\r\n |> filter(fn: (r) => r[\"result\"] == \"pass\")\r\n |> group(columns: [\"requestName\"])\r\n |> stddev()\r\n |> group()\r\n |> rename(columns: {\"_value\": \"stddev\"})\r\n |> keep(columns: [\"stddev\", \"requestName\"])", - "refId": "H", + "query": "from(bucket: v.bucket)\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"requestsRaw\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"responseTime\")\r\n |> filter(fn: (r) => r[\"result\"] == \"pass\")\r\n |> filter(fn: (r) => r[\"runId\"] =~ /${runId:regex}/)\r\n |> filter(fn: (r) => r[\"samplerType\"] =~ /${samplerType:regex}/)\r\n |> group(columns: [\"requestName\"])\r\n |> stddev()\r\n |> group()\r\n |> rename(columns: {\"_value\": \"stddev\"})\r\n |> keep(columns: [\"stddev\", \"requestName\"])", + "refId": "STDDEV", "resultFormat": "time_series", "select": [ [ @@ -5020,8 +5096,8 @@ ], "orderByTime": "ASC", "policy": "default", - "query": "tpsCalculator = () => {\r\ncount = from(bucket: v.bucket)\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"requestsRaw\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"count\")\r\n |> filter(fn: (r) => r[\"result\"] == \"pass\")\r\n |> group(columns: [\"requestName\"])\r\n |> count()\r\n |> toFloat()\r\n |> group()\r\n |> keep(columns: [\"_value\", \"requestName\"])\r\n\r\n integral = from(bucket: v.bucket)\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"requestsRaw\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"count\")\r\n |> filter(fn: (r) => r[\"result\"] == \"pass\")\r\n |> group(columns: [\"requestName\"])\r\n |> integral()\r\n |> toFloat()\r\n |> group() \r\n |> keep(columns: [\"_value\", \"requestName\"])\r\n \r\n return join(\r\n tables:{count:count, integral:integral},\r\n on:[\"requestName\"]\r\n )\r\n |> map(fn:(r) => ({\r\n requestName: r.requestName,\r\n TPS: r._value_count / r._value_integral,\r\n TPM: (r._value_count / r._value_integral) * 60.0,\r\n TPH: (r._value_count / r._value_integral) * 60.0 * 60.0, \r\n })) \r\n}\r\n\r\ntpsCalculator()", - "refId": "I", + "query": "tpsCalculator = () => {\r\ncount = from(bucket: v.bucket)\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"requestsRaw\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"count\")\r\n |> filter(fn: (r) => r[\"result\"] == \"pass\")\r\n |> filter(fn: (r) => r[\"runId\"] =~ /${runId:regex}/)\r\n |> filter(fn: (r) => r[\"samplerType\"] =~ /${samplerType:regex}/)\r\n |> group(columns: [\"requestName\"])\r\n |> count()\r\n |> toFloat()\r\n |> group()\r\n |> keep(columns: [\"_value\", \"requestName\"])\r\n\r\n integral = from(bucket: v.bucket)\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"requestsRaw\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"count\")\r\n |> filter(fn: (r) => r[\"result\"] == \"pass\")\r\n |> filter(fn: (r) => r[\"runId\"] =~ /${runId:regex}/)\r\n |> filter(fn: (r) => r[\"samplerType\"] =~ /${samplerType:regex}/)\r\n |> group(columns: [\"requestName\"])\r\n |> integral()\r\n |> toFloat()\r\n |> group() \r\n |> keep(columns: [\"_value\", \"requestName\"])\r\n \r\n return join(\r\n tables:{count:count, integral:integral},\r\n on:[\"requestName\"]\r\n )\r\n |> map(fn:(r) => ({\r\n requestName: r.requestName,\r\n TPS: r._value_count / r._value_integral,\r\n TPM: (r._value_count / r._value_integral) * 60.0,\r\n TPH: (r._value_count / r._value_integral) * 60.0 * 60.0, \r\n })) \r\n}\r\n\r\ntpsCalculator()", + "refId": "TPS", "resultFormat": "time_series", "select": [ [ @@ -5060,8 +5136,8 @@ ], "orderByTime": "ASC", "policy": "default", - "query": "failuresPercentages = () => {\r\n\r\ncountResponseTime=from(bucket: v.bucket)\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"requestsRaw\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"responseTime\")\r\n\r\n |> group(columns: [\"requestName\"] )\r\n |> count()\r\n |> group()\r\n |> toFloat()\r\n |> keep(columns: [\"_value\", \"requestName\"])\r\n\r\n \r\nsumerrorCount=from(bucket: v.bucket)\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"requestsRaw\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"errorCount\")\r\n |> group(columns: [\"requestName\"] )\r\n |> sum()\r\n |> group()\r\n |> toFloat()\r\n |> keep(columns: [\"_value\", \"requestName\"])\r\n\r\n return join(\r\n tables:{countResponseTime:countResponseTime, sumerrorCount:sumerrorCount},\r\n on:[\"requestName\"]\r\n )\r\n |> map(fn:(r) => ({\r\n requestName: r.requestName,\r\n ErrorRate: r._value_sumerrorCount / r._value_countResponseTime \r\n })) \r\n}\r\n\r\nfailuresPercentages()", - "refId": "J", + "query": "failuresPercentages = () => {\r\n\r\ncountResponseTime=from(bucket: v.bucket)\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"requestsRaw\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"responseTime\")\r\n |> filter(fn: (r) => r[\"result\"] == \"pass\")\r\n |> filter(fn: (r) => r[\"runId\"] =~ /${runId:regex}/)\r\n |> filter(fn: (r) => r[\"samplerType\"] =~ /${samplerType:regex}/)\r\n |> group(columns: [\"requestName\"] )\r\n |> count()\r\n |> group()\r\n |> toFloat()\r\n |> keep(columns: [\"_value\", \"requestName\"])\r\n\r\n \r\nsumerrorCount=from(bucket: v.bucket)\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"requestsRaw\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"errorCount\")\r\n |> filter(fn: (r) => r[\"result\"] == \"pass\")\r\n |> filter(fn: (r) => r[\"runId\"] =~ /${runId:regex}/)\r\n |> filter(fn: (r) => r[\"samplerType\"] =~ /${samplerType:regex}/)\r\n |> group(columns: [\"requestName\"] )\r\n |> sum()\r\n |> group()\r\n |> toFloat()\r\n |> keep(columns: [\"_value\", \"requestName\"])\r\n\r\n return join(\r\n tables:{countResponseTime:countResponseTime, sumerrorCount:sumerrorCount},\r\n on:[\"requestName\"]\r\n )\r\n |> map(fn:(r) => ({\r\n requestName: r.requestName,\r\n ErrorRate: r._value_sumerrorCount / r._value_countResponseTime \r\n })) \r\n}\r\n\r\nfailuresPercentages()", + "refId": "Error %", "resultFormat": "time_series", "select": [ [ @@ -5100,7 +5176,7 @@ "h": 2, "w": 24, "x": 0, - "y": 112 + "y": 114 }, "height": "180", "id": 25, @@ -5109,7 +5185,7 @@ "content": "

The following panels show aggregated metrics for all requests

", "mode": "html" }, - "pluginVersion": "8.5.4", + "pluginVersion": "9.1.6", "transparent": true, "type": "text" } @@ -5150,7 +5226,8 @@ "mode": "absolute", "steps": [ { - "color": "green" + "color": "green", + "value": null }, { "color": "red", @@ -5214,7 +5291,7 @@ "h": 13, "w": 24, "x": 0, - "y": 103 + "y": 105 }, "id": 96, "links": [], @@ -5235,9 +5312,13 @@ } ] }, - "pluginVersion": "8.5.4", + "pluginVersion": "9.1.6", "targets": [ { + "datasource": { + "type": "influxdb", + "uid": "${DS_INFLUXDB2.0_JMETER}" + }, "groupBy": [ { "params": [ @@ -5261,7 +5342,7 @@ "measurement": "responseError", "orderByTime": "ASC", "policy": "autogen", - "query": "from(bucket: v.bucket)\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"requestsRaw\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"errorCount\")\r\n |> filter(fn: (r) => r[\"_value\"] == 1)\r\n |> group(columns: [\"requestName\", \"errorMessage\", \"responseCode\"]) \r\n |> sum()\r\n |> keep(columns: [\"requestName\", \"errorMessage\", \"responseCode\", \"_value\"])\r\n |> group()\r\n |> rename(columns: {\"_value\": \"Count\"})", + "query": "from(bucket: v.bucket)\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"requestsRaw\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"errorCount\")\r\n |> filter(fn: (r) => r[\"_value\"] == 1)\r\n |> filter(fn: (r) => r[\"runId\"] =~ /${runId:regex}/)\r\n |> filter(fn: (r) => r[\"samplerType\"] =~ /${samplerType:regex}/)\r\n |> group(columns: [\"requestName\", \"errorMessage\", \"responseCode\"]) \r\n |> sum()\r\n |> keep(columns: [\"requestName\", \"errorMessage\", \"responseCode\", \"_value\"])\r\n |> group()\r\n |> rename(columns: {\"_value\": \"Count\"})", "rawQuery": true, "refId": "C", "resultFormat": "table", @@ -5279,8 +5360,7 @@ } ] ], - "tags": [], - "datasource": "${DS_INFLUXDB2.0_JMETER}" + "tags": [] } ], "title": "Errors Summary", @@ -5325,7 +5405,8 @@ "mode": "absolute", "steps": [ { - "color": "green" + "color": "green", + "value": null }, { "color": "red", @@ -5389,7 +5470,7 @@ "h": 13, "w": 24, "x": 0, - "y": 104 + "y": 131 }, "id": 95, "links": [], @@ -5411,10 +5492,14 @@ } ] }, - "pluginVersion": "8.5.4", + "pluginVersion": "9.1.6", "targets": [ { "alias": "", + "datasource": { + "type": "influxdb", + "uid": "${DS_INFLUXDB2.0_JMETER}" + }, "groupBy": [ { "params": [ @@ -5431,7 +5516,7 @@ ], "orderByTime": "ASC", "policy": "default", - "query": "\r\nfrom(bucket: v.bucket)\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"requestsRaw\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"errorCount\")\r\n |> filter(fn: (r) => r[\"_value\"] == 1)\r\n |> group(columns: [\"requestName\", \"responseCode\", \"errorMessage\", \"errorResponseBody\"])\r\n |> sum()\r\n |> group()\r\n |> keep(columns: [\"requestName\", \"errorMessage\", \"errorResponseBody\", \"responseCode\", \"_value\"])\r\n |> rename(columns: {\"_value\": \"Count\"})", + "query": "\r\nfrom(bucket: v.bucket)\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"requestsRaw\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"errorCount\")\r\n |> filter(fn: (r) => r[\"_value\"] == 1)\r\n |> filter(fn: (r) => r[\"runId\"] =~ /${runId:regex}/)\r\n |> filter(fn: (r) => r[\"samplerType\"] =~ /${samplerType:regex}/)\r\n |> group(columns: [\"requestName\", \"responseCode\", \"errorMessage\", \"errorResponseBody\"])\r\n |> sum()\r\n |> group()\r\n |> keep(columns: [\"requestName\", \"errorMessage\", \"errorResponseBody\", \"responseCode\", \"_value\"])\r\n |> rename(columns: {\"_value\": \"Count\"})", "rawQuery": true, "refId": "A", "resultFormat": "table", @@ -5449,8 +5534,7 @@ } ] ], - "tags": [], - "datasource": "${DS_INFLUXDB2.0_JMETER}" + "tags": [] } ], "title": "Error Deteils ", @@ -5485,6 +5569,8 @@ "mode": "palette-classic" }, "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", "axisLabel": "", "axisPlacement": "auto", "barAlignment": 0, @@ -5517,7 +5603,8 @@ "mode": "absolute", "steps": [ { - "color": "green" + "color": "green", + "value": null }, { "color": "red", @@ -5579,7 +5666,7 @@ "h": 8, "w": 24, "x": 0, - "y": 105 + "y": 145 }, "id": 77, "links": [], @@ -5591,7 +5678,8 @@ "min" ], "displayMode": "table", - "placement": "right" + "placement": "right", + "showLegend": true }, "tooltip": { "mode": "multi", @@ -5602,6 +5690,10 @@ "targets": [ { "alias": "$tag_requestName", + "datasource": { + "type": "influxdb", + "uid": "${DS_INFLUXDB2.0_JMETER}" + }, "groupBy": [ { "params": [ @@ -5625,7 +5717,7 @@ "measurement": "requestsRaw", "orderByTime": "ASC", "policy": "autogen", - "query": "from(bucket: v.bucket)\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"requestsRaw\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"latency\") \r\n |> group (columns: [\"requestName\"])\r\n |> aggregateWindow(every: [[aggregation]]s, fn: mean, createEmpty: false)\r\n", + "query": "from(bucket: v.bucket)\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"requestsRaw\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"latency\") \r\n |> filter(fn: (r) => r[\"runId\"] =~ /${runId:regex}/)\r\n |> filter(fn: (r) => r[\"samplerType\"] =~ /${samplerType:regex}/)\r\n |> group (columns: [\"requestName\"])\r\n |> aggregateWindow(every: [[aggregation]]s, fn: mean, createEmpty: false)\r\n", "rawQuery": true, "refId": "D", "resultFormat": "time_series", @@ -5643,8 +5735,7 @@ } ] ], - "tags": [], - "datasource": "${DS_INFLUXDB2.0_JMETER}" + "tags": [] } ], "title": "Latency", @@ -5662,6 +5753,8 @@ "mode": "palette-classic" }, "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", "axisLabel": "", "axisPlacement": "auto", "barAlignment": 0, @@ -5694,7 +5787,8 @@ "mode": "absolute", "steps": [ { - "color": "green" + "color": "green", + "value": null }, { "color": "red", @@ -5756,7 +5850,7 @@ "h": 9, "w": 24, "x": 0, - "y": 113 + "y": 153 }, "id": 86, "links": [], @@ -5768,7 +5862,8 @@ "min" ], "displayMode": "table", - "placement": "right" + "placement": "right", + "showLegend": true }, "tooltip": { "mode": "multi", @@ -5779,6 +5874,10 @@ "targets": [ { "alias": "$tag_requestName", + "datasource": { + "type": "influxdb", + "uid": "${DS_INFLUXDB2.0_JMETER}" + }, "groupBy": [ { "params": [ @@ -5802,7 +5901,7 @@ "measurement": "requestsRaw", "orderByTime": "ASC", "policy": "autogen", - "query": "from(bucket: v.bucket)\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"requestsRaw\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"connectTime\")\r\n |> group (columns: [\"requestName\"])\r\n |> aggregateWindow(every: [[aggregation]]s, fn: mean, createEmpty: false)\r\n", + "query": "from(bucket: v.bucket)\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"requestsRaw\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"connectTime\")\r\n |> filter(fn: (r) => r[\"runId\"] =~ /${runId:regex}/)\r\n |> filter(fn: (r) => r[\"samplerType\"] =~ /${samplerType:regex}/)\r\n |> group (columns: [\"requestName\"])\r\n |> aggregateWindow(every: [[aggregation]]s, fn: mean, createEmpty: false)\r\n", "rawQuery": true, "refId": "D", "resultFormat": "time_series", @@ -5820,8 +5919,7 @@ } ] ], - "tags": [], - "datasource": "${DS_INFLUXDB2.0_JMETER}" + "tags": [] } ], "title": "Connect", @@ -5840,6 +5938,8 @@ "mode": "palette-classic" }, "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", "axisLabel": "", "axisPlacement": "auto", "barAlignment": 0, @@ -5872,7 +5972,8 @@ "mode": "absolute", "steps": [ { - "color": "green" + "color": "green", + "value": null }, { "color": "red", @@ -5888,7 +5989,7 @@ "h": 10, "w": 24, "x": 0, - "y": 122 + "y": 162 }, "id": 50, "links": [], @@ -5900,7 +6001,8 @@ "mean" ], "displayMode": "table", - "placement": "right" + "placement": "right", + "showLegend": true }, "tooltip": { "mode": "multi", @@ -5911,6 +6013,10 @@ "targets": [ { "alias": "Sent Bytes", + "datasource": { + "type": "influxdb", + "uid": "${DS_INFLUXDB2.0_JMETER}" + }, "groupBy": [ { "params": [ @@ -5935,7 +6041,7 @@ "measurement": "requestsRaw", "orderByTime": "ASC", "policy": "default", - "query": "from(bucket: v.bucket)\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"requestsRaw\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"receivedBytes\")\r\n |> group(columns: [\"_field\"])\r\n |> aggregateWindow(every: [[aggregation]]s, fn: mean, createEmpty: false)", + "query": "from(bucket: v.bucket)\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"requestsRaw\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"receivedBytes\")\r\n |> filter(fn: (r) => r[\"runId\"] =~ /${runId:regex}/)\r\n |> filter(fn: (r) => r[\"samplerType\"] =~ /${samplerType:regex}/)\r\n |> group(columns: [\"_field\"])\r\n |> aggregateWindow(every: [[aggregation]]s, fn: mean, createEmpty: false)", "rawQuery": true, "refId": "A", "resultFormat": "time_series", @@ -5959,11 +6065,14 @@ "operator": "!=", "value": "select tag value" } - ], - "datasource": "${DS_INFLUXDB2.0_JMETER}" + ] }, { "alias": "Received Bytes", + "datasource": { + "type": "influxdb", + "uid": "${DS_INFLUXDB2.0_JMETER}" + }, "groupBy": [ { "params": [ @@ -5987,7 +6096,7 @@ "measurement": "requestsRaw", "orderByTime": "ASC", "policy": "default", - "query": "from(bucket: v.bucket)\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"requestsRaw\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"sentBytes\")\r\n |> group(columns: [\"_field\"])\r\n |> aggregateWindow(every: [[aggregation]]s, fn: mean, createEmpty: false)", + "query": "from(bucket: v.bucket)\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"requestsRaw\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"sentBytes\")\r\n |> filter(fn: (r) => r[\"runId\"] == \"${runId}\")\r\n |> group(columns: [\"_field\"])\r\n |> aggregateWindow(every: [[aggregation]]s, fn: mean, createEmpty: false)", "rawQuery": true, "refId": "B", "resultFormat": "time_series", @@ -6011,8 +6120,7 @@ "operator": "!=", "value": "select tag value" } - ], - "datasource": "${DS_INFLUXDB2.0_JMETER}" + ] } ], "title": "Bytes Throughput Over Time", @@ -6030,6 +6138,8 @@ "mode": "palette-classic" }, "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", "axisLabel": "", "axisPlacement": "auto", "barAlignment": 0, @@ -6062,7 +6172,8 @@ "mode": "absolute", "steps": [ { - "color": "green" + "color": "green", + "value": null }, { "color": "red", @@ -6078,7 +6189,7 @@ "h": 9, "w": 24, "x": 0, - "y": 132 + "y": 172 }, "id": 49, "links": [], @@ -6090,7 +6201,8 @@ "mean" ], "displayMode": "table", - "placement": "right" + "placement": "right", + "showLegend": true }, "tooltip": { "mode": "multi", @@ -6101,6 +6213,10 @@ "targets": [ { "alias": "$tag_requestName", + "datasource": { + "type": "influxdb", + "uid": "${DS_INFLUXDB2.0_JMETER}" + }, "groupBy": [ { "params": [ @@ -6124,7 +6240,7 @@ "measurement": "requestsRaw", "orderByTime": "ASC", "policy": "default", - "query": "from(bucket: v.bucket)\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"requestsRaw\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"sentBytes\")\r\n |> group (columns: [\"requestName\"])\r\n |> aggregateWindow(every: [[aggregation]]s, fn: mean, createEmpty: false)", + "query": "from(bucket: v.bucket)\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"requestsRaw\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"sentBytes\")\r\n |> filter(fn: (r) => r[\"runId\"] =~ /${runId:regex}/)\r\n |> filter(fn: (r) => r[\"samplerType\"] =~ /${samplerType:regex}/)\r\n |> group (columns: [\"requestName\"])\r\n |> aggregateWindow(every: [[aggregation]]s, fn: mean, createEmpty: false)", "rawQuery": true, "refId": "A", "resultFormat": "time_series", @@ -6148,8 +6264,7 @@ "operator": "!=", "value": "select tag value" } - ], - "datasource": "${DS_INFLUXDB2.0_JMETER}" + ] } ], "title": "Sent Bytes per Request", @@ -6167,6 +6282,8 @@ "mode": "palette-classic" }, "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", "axisLabel": "", "axisPlacement": "auto", "barAlignment": 0, @@ -6199,7 +6316,8 @@ "mode": "absolute", "steps": [ { - "color": "green" + "color": "green", + "value": null }, { "color": "red", @@ -6215,7 +6333,7 @@ "h": 10, "w": 24, "x": 0, - "y": 141 + "y": 181 }, "id": 48, "links": [], @@ -6227,7 +6345,8 @@ "mean" ], "displayMode": "table", - "placement": "right" + "placement": "right", + "showLegend": true }, "tooltip": { "mode": "multi", @@ -6238,6 +6357,10 @@ "targets": [ { "alias": "$tag_requestName", + "datasource": { + "type": "influxdb", + "uid": "${DS_INFLUXDB2.0_JMETER}" + }, "groupBy": [ { "params": [ @@ -6261,7 +6384,7 @@ "measurement": "requestsRaw", "orderByTime": "ASC", "policy": "default", - "query": "from(bucket: v.bucket)\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"requestsRaw\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"receivedBytes\")\r\n |> group (columns: [\"requestName\"])\r\n |> aggregateWindow(every: [[aggregation]]s, fn: mean, createEmpty: false)", + "query": "from(bucket: v.bucket)\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"requestsRaw\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"receivedBytes\")\r\n |> filter(fn: (r) => r[\"runId\"] =~ /${runId:regex}/)\r\n |> filter(fn: (r) => r[\"samplerType\"] =~ /${samplerType:regex}/)\r\n |> group (columns: [\"requestName\"])\r\n |> aggregateWindow(every: [[aggregation]]s, fn: mean, createEmpty: false)", "rawQuery": true, "refId": "A", "resultFormat": "time_series", @@ -6285,8 +6408,7 @@ "operator": "!=", "value": "select tag value" } - ], - "datasource": "${DS_INFLUXDB2.0_JMETER}" + ] } ], "title": "Received Bytes per Request", @@ -6305,6 +6427,8 @@ "mode": "palette-classic" }, "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", "axisLabel": "", "axisPlacement": "auto", "barAlignment": 0, @@ -6337,7 +6461,8 @@ "mode": "absolute", "steps": [ { - "color": "green" + "color": "green", + "value": null }, { "color": "red", @@ -6399,7 +6524,7 @@ "h": 10, "w": 24, "x": 0, - "y": 151 + "y": 191 }, "id": 87, "libraryPanel": { @@ -6414,7 +6539,7 @@ }, "folderName": "General", "folderUid": "", - "updated": "2022-06-13T22:38:22+03:00", + "updated": "2022-09-30T15:19:37+03:00", "updatedBy": { "avatarUrl": "/avatar/46d229b033af06a191ff2267bca9ae56", "id": 1, @@ -6424,7 +6549,7 @@ "name": "Porcessing Time = Latency - Connect Time ", "type": "timeseries", "uid": "NKdhkbj7k", - "version": 1 + "version": 3 }, "links": [], "options": { @@ -6435,7 +6560,8 @@ "min" ], "displayMode": "table", - "placement": "right" + "placement": "right", + "showLegend": true }, "tooltip": { "mode": "multi", @@ -6446,6 +6572,10 @@ "targets": [ { "alias": "$tag_requestName", + "datasource": { + "type": "influxdb", + "uid": "${DS_INFLUXDB2.0_JMETER}" + }, "groupBy": [ { "params": [ @@ -6469,7 +6599,7 @@ "measurement": "requestsRaw", "orderByTime": "ASC", "policy": "autogen", - "query": "from(bucket: v.bucket)\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"requestsRaw\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"processingTime\")\r\n |> group (columns: [\"requestName\"])\r\n |> aggregateWindow(every: [[aggregation]]s, fn: mean, createEmpty: false)", + "query": "from(bucket: v.bucket)\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"requestsRaw\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"processingTime\")\r\n |> filter(fn: (r) => r[\"runId\"] =~ /${runId:regex}/)\r\n |> filter(fn: (r) => r[\"samplerType\"] =~ /${samplerType:regex}/)\r\n |> group (columns: [\"requestName\"])\r\n |> aggregateWindow(every: [[aggregation]]s, fn: mean, createEmpty: false)", "rawQuery": true, "refId": "D", "resultFormat": "time_series", @@ -6487,8 +6617,7 @@ } ] ], - "tags": [], - "datasource": "${DS_INFLUXDB2.0_JMETER}" + "tags": [] } ], "title": "Porcessing Time = Latency - Connect Time ", @@ -6506,7 +6635,7 @@ "h": 2, "w": 24, "x": 0, - "y": 161 + "y": 201 }, "height": "180", "id": 97, @@ -6515,7 +6644,7 @@ "content": "

The following panels show aggregated metrics for selected request \"[[request]]\"

", "mode": "html" }, - "pluginVersion": "8.5.4", + "pluginVersion": "9.1.6", "transparent": true, "type": "text" } @@ -6552,6 +6681,8 @@ "mode": "palette-classic" }, "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", "axisLabel": "Response Time", "axisPlacement": "auto", "barAlignment": 0, @@ -6655,7 +6786,8 @@ "legend": { "calcs": [], "displayMode": "list", - "placement": "bottom" + "placement": "bottom", + "showLegend": true }, "tooltip": { "mode": "multi", @@ -6666,6 +6798,10 @@ "targets": [ { "alias": "Mean", + "datasource": { + "type": "influxdb", + "uid": "${DS_INFLUXDB2.0_JMETER}" + }, "dsType": "influxdb", "groupBy": [ { @@ -6685,9 +6821,9 @@ "measurement": "requestsRaw", "orderByTime": "ASC", "policy": "default", - "query": " from(bucket: v.bucket)\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"requestsRaw\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"responseTime\")\r\n |> filter(fn: (r) => r[\"requestName\"] == \"${request}\")\r\n |> group(columns: [\"requestName\"])\r\n |> aggregateWindow(every: ${aggregation}s, fn: mean, createEmpty: false) \r\n |> keep(columns: [\"_time\", \"_value\"])\r\n |> rename(columns: {_value: \"Response Time. AVG\"})", + "query": " from(bucket: v.bucket)\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"requestsRaw\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"responseTime\")\r\n |> filter(fn: (r) => r[\"requestName\"] == \"${request}\")\r\n |> filter(fn: (r) => r[\"runId\"] =~ /${runId:regex}/) \r\n |> group(columns: [\"requestName\"])\r\n |> aggregateWindow(every: ${aggregation}s, fn: mean, createEmpty: false) \r\n |> keep(columns: [\"_time\", \"_value\"])\r\n |> rename(columns: {_value: \"Response Time. AVG\"})", "rawQuery": true, - "refId": "A", + "refId": "AVG", "resultFormat": "time_series", "select": [ [ @@ -6709,11 +6845,14 @@ "operator": "=~", "value": "/^$request$/" } - ], - "datasource": "${DS_INFLUXDB2.0_JMETER}" + ] }, { "alias": "90 perc", + "datasource": { + "type": "influxdb", + "uid": "${DS_INFLUXDB2.0_JMETER}" + }, "dsType": "influxdb", "groupBy": [ { @@ -6733,9 +6872,9 @@ "measurement": "requestsRaw", "orderByTime": "ASC", "policy": "default", - "query": " from(bucket: v.bucket)\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"requestsRaw\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"responseTime\")\r\n |> filter(fn: (r) => r[\"requestName\"] == \"${request}\")\r\n |> group(columns: [\"requestName\"])\r\n |> aggregateWindow(every: ${aggregation}s, fn: max, createEmpty: false) \r\n |> keep(columns: [\"_time\", \"_value\"])\r\n |> rename(columns: {_value: \"Response Time. MAX\"})", + "query": " from(bucket: v.bucket)\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"requestsRaw\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"responseTime\")\r\n |> filter(fn: (r) => r[\"requestName\"] == \"${request}\")\r\n |> filter(fn: (r) => r[\"runId\"] =~ /${runId:regex}/)\r\n |> filter(fn: (r) => r[\"samplerType\"] =~ /${samplerType:regex}/)\r\n |> group(columns: [\"requestName\"])\r\n |> aggregateWindow(every: ${aggregation}s, fn: max, createEmpty: false) \r\n |> keep(columns: [\"_time\", \"_value\"])\r\n |> rename(columns: {_value: \"Response Time. MAX\"})", "rawQuery": true, - "refId": "B", + "refId": "MAX", "resultFormat": "time_series", "select": [ [ @@ -6759,11 +6898,14 @@ "operator": "=~", "value": "/^$request$/" } - ], - "datasource": "${DS_INFLUXDB2.0_JMETER}" + ] }, { "alias": "95 perc", + "datasource": { + "type": "influxdb", + "uid": "${DS_INFLUXDB2.0_JMETER}" + }, "dsType": "influxdb", "groupBy": [ { @@ -6783,9 +6925,9 @@ "measurement": "requestsRaw", "orderByTime": "ASC", "policy": "default", - "query": " from(bucket: v.bucket)\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"requestsRaw\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"responseTime\")\r\n |> filter(fn: (r) => r[\"requestName\"] == \"${request}\")\r\n |> toFloat()\r\n |> group(columns: [\"requestName\"])\r\n |> aggregateWindow(every: ${aggregation}s, fn: median, createEmpty: false) \r\n |> keep(columns: [\"_time\", \"_value\"])\r\n |> rename(columns: {_value: \"Response Time. Median\"})", + "query": " from(bucket: v.bucket)\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"requestsRaw\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"responseTime\")\r\n |> filter(fn: (r) => r[\"requestName\"] == \"${request}\")\r\n |> filter(fn: (r) => r[\"runId\"] =~ /${runId:regex}/)\r\n |> filter(fn: (r) => r[\"samplerType\"] =~ /${samplerType:regex}/)\r\n |> toFloat()\r\n |> group(columns: [\"requestName\"])\r\n |> aggregateWindow(every: ${aggregation}s, fn: median, createEmpty: false) \r\n |> keep(columns: [\"_time\", \"_value\"])\r\n |> rename(columns: {_value: \"Response Time. Median\"})", "rawQuery": true, - "refId": "D", + "refId": "Median", "resultFormat": "time_series", "select": [ [ @@ -6809,10 +6951,13 @@ "operator": "=~", "value": "/^$request$/" } - ], - "datasource": "${DS_INFLUXDB2.0_JMETER}" + ] }, { + "datasource": { + "type": "influxdb", + "uid": "${DS_INFLUXDB2.0_JMETER}" + }, "groupBy": [ { "params": [ @@ -6829,8 +6974,8 @@ ], "orderByTime": "ASC", "policy": "default", - "query": "from(bucket: v.bucket)\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"requestsRaw\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"latency\") \r\n |> filter(fn: (r) => r[\"requestName\"] == \"${request}\")\r\n |> group (columns: [\"requestName\"])\r\n |> aggregateWindow(every: [[aggregation]]s, fn: mean, createEmpty: false)\r\n |> keep(columns: [\"_time\", \"_value\"])\r\n |> rename(columns: {_value: \"Latency\"})\r\n", - "refId": "C", + "query": "from(bucket: v.bucket)\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"requestsRaw\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"latency\") \r\n |> filter(fn: (r) => r[\"requestName\"] == \"${request}\")\r\n |> filter(fn: (r) => r[\"runId\"] =~ /${runId:regex}/)\r\n |> filter(fn: (r) => r[\"samplerType\"] =~ /${samplerType:regex}/)\r\n |> group (columns: [\"requestName\"])\r\n |> aggregateWindow(every: [[aggregation]]s, fn: mean, createEmpty: false)\r\n |> keep(columns: [\"_time\", \"_value\"])\r\n |> rename(columns: {_value: \"Latency\"})\r\n", + "refId": "Latency", "resultFormat": "time_series", "select": [ [ @@ -6846,8 +6991,7 @@ } ] ], - "tags": [], - "datasource": "${DS_INFLUXDB2.0_JMETER}" + "tags": [] } ], "title": "Response Times [[request]]", @@ -6866,6 +7010,8 @@ "mode": "palette-classic" }, "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", "axisLabel": "Throughput", "axisPlacement": "auto", "barAlignment": 0, @@ -6931,7 +7077,8 @@ "min" ], "displayMode": "table", - "placement": "bottom" + "placement": "bottom", + "showLegend": true }, "tooltip": { "mode": "multi", @@ -6942,6 +7089,10 @@ "targets": [ { "alias": "Throughput", + "datasource": { + "type": "influxdb", + "uid": "${DS_INFLUXDB2.0_JMETER}" + }, "dsType": "influxdb", "groupBy": [ { @@ -6960,7 +7111,7 @@ "measurement": "requestsRaw", "orderByTime": "ASC", "policy": "default", - "query": " from(bucket: v.bucket)\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"requestsRaw\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"responseTime\")\r\n |> filter(fn: (r) => r[\"requestName\"] == \"${request}\")\r\n |> group(columns: [\"requestName\"])\r\n |> aggregateWindow(every: ${aggregation}s, fn: count, createEmpty: false) \r\n |> toFloat() \r\n |> map(fn: (r) => ({ r with _value: float(v: r._value /float(v: ${aggregation})) }))\r\n", + "query": " from(bucket: v.bucket)\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"requestsRaw\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"responseTime\")\r\n |> filter(fn: (r) => r[\"requestName\"] == \"${request}\")\r\n |> filter(fn: (r) => r[\"runId\"] =~ /${runId:regex}/)\r\n |> group(columns: [\"requestName\"])\r\n |> aggregateWindow(every: ${aggregation}s, fn: count, createEmpty: false) \r\n |> toFloat() \r\n |> map(fn: (r) => ({ r with _value: float(v: r._value /float(v: ${aggregation})) }))\r\n", "rawQuery": true, "refId": "A", "resultFormat": "time_series", @@ -6984,8 +7135,7 @@ "operator": "=~", "value": "/^$request$/" } - ], - "datasource": "${DS_INFLUXDB2.0_JMETER}" + ] } ], "title": "Throughput per second [[request]] ", @@ -7002,6 +7152,8 @@ "mode": "palette-classic" }, "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", "axisLabel": "errors / interval", "axisPlacement": "auto", "barAlignment": 0, @@ -7066,7 +7218,8 @@ "min" ], "displayMode": "table", - "placement": "bottom" + "placement": "bottom", + "showLegend": true }, "tooltip": { "mode": "multi", @@ -7077,6 +7230,10 @@ "targets": [ { "alias": "Errors per Second", + "datasource": { + "type": "influxdb", + "uid": "${DS_INFLUXDB2.0_JMETER}" + }, "dsType": "influxdb", "groupBy": [ { @@ -7095,7 +7252,7 @@ "measurement": "requestsRaw", "orderByTime": "ASC", "policy": "default", - "query": " from(bucket: v.bucket)\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"requestsRaw\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"errorCount\")\r\n |> filter(fn: (r) => r[\"_value\"] == 1)\r\n |> filter(fn: (r) => r[\"requestName\"] == \"${request}\")\r\n |> group(columns: [\"_field\", \"requestName\"])\r\n |> aggregateWindow(every: ${aggregation}s, fn: count, createEmpty: false) \r\n |> toFloat() \r\n |> map(fn: (r) => ({ r with _value: float(v: r._value /float(v: ${aggregation})) }))\r\n", + "query": " from(bucket: v.bucket)\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"requestsRaw\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"errorCount\")\r\n |> filter(fn: (r) => r[\"_value\"] == 1)\r\n |> filter(fn: (r) => r[\"requestName\"] == \"${request}\")\r\n |> filter(fn: (r) => r[\"runId\"] =~ /${runId:regex}/)\r\n |> group(columns: [\"_field\", \"requestName\"])\r\n |> aggregateWindow(every: ${aggregation}s, fn: count, createEmpty: false) \r\n |> toFloat() \r\n |> map(fn: (r) => ({ r with _value: float(v: r._value /float(v: ${aggregation})) }))\r\n", "rawQuery": true, "refId": "A", "resultFormat": "time_series", @@ -7119,8 +7276,7 @@ "operator": "=~", "value": "/^$request$/" } - ], - "datasource": "${DS_INFLUXDB2.0_JMETER}" + ] } ], "title": "Error Rate [[request]]", @@ -7164,6 +7320,7 @@ "legend": { "displayMode": "list", "placement": "bottom", + "showLegend": true, "values": [] }, "pieType": "pie", @@ -7187,7 +7344,7 @@ "uid": "${DS_INFLUXDB2.0_JMETER}" }, "hide": false, - "query": "from(bucket: v.bucket)\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"requestsRaw\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"count\") \r\n |> filter(fn: (r) => r[\"requestName\"] == \"${request}\")\r\n |> group(columns: [\"requestName\", \"responseCode\"])\r\n |> toFloat()\r\n |> sum()\r\n |> keep(columns: [ \"requestName\", \"responseCode\", \"_value\"])\r\n |> rename(columns: {_value: \"request\"})\r\n\r\n \r\n \r\n ", + "query": "from(bucket: v.bucket)\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"requestsRaw\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"count\") \r\n |> filter(fn: (r) => r[\"requestName\"] == \"${request}\")\r\n |> filter(fn: (r) => r[\"runId\"] =~ /${runId:regex}/)\r\n |> group(columns: [\"requestName\", \"responseCode\"])\r\n |> toFloat()\r\n |> sum()\r\n |> keep(columns: [ \"requestName\", \"responseCode\", \"_value\"])\r\n |> rename(columns: {_value: \"request\"})\r\n\r\n \r\n \r\n ", "refId": "A" } ], @@ -7197,7 +7354,7 @@ } ], "refresh": false, - "schemaVersion": 36, + "schemaVersion": 37, "style": "dark", "tags": [], "templating": { @@ -7219,16 +7376,16 @@ "refresh": 2, "regex": "", "skipUrlSync": false, - "sort": 0, + "sort": 1, "type": "query", "useTags": false }, { "auto": false, "current": { - "selected": true, - "text": "10s", - "value": "10" + "selected": false, + "text": "30s", + "value": "30" }, "hide": 0, "includeAll": false, @@ -7242,12 +7399,12 @@ "value": "1" }, { - "selected": true, + "selected": false, "text": "10s", "value": "10" }, { - "selected": false, + "selected": true, "text": "30s", "value": "30" }, @@ -7277,12 +7434,56 @@ "refresh": 0, "skipUrlSync": false, "type": "custom" + }, + { + "allValue": "", + "current": {}, + "datasource": { + "type": "influxdb", + "uid": "${DS_INFLUXDB2.0_JMETER}" + }, + "definition": "import \"influxdata/influxdb/schema\"\r\n\r\nschema.measurementTagValues(\r\n bucket: v.bucket,\r\n measurement: \"requestsRaw\",\r\n tag: \"runId\"\r\n)", + "description": "You can filter the data using run id", + "hide": 0, + "includeAll": true, + "label": "Run Id", + "multi": true, + "name": "runId", + "options": [], + "query": "import \"influxdata/influxdb/schema\"\r\n\r\nschema.measurementTagValues(\r\n bucket: v.bucket,\r\n measurement: \"requestsRaw\",\r\n tag: \"runId\"\r\n)", + "refresh": 2, + "regex": "", + "skipUrlSync": false, + "sort": 1, + "type": "query" + }, + { + "allValue": "", + "current": {}, + "datasource": { + "type": "influxdb", + "uid": "${DS_INFLUXDB2.0_JMETER}" + }, + "definition": "import \"influxdata/influxdb/schema\"\r\n\r\nschema.measurementTagValues(\r\n bucket: v.bucket,\r\n measurement: \"requestsRaw\",\r\n tag: \"samplerType\"\r\n)", + "description": "There is the possibility to filter the requests or transactions ", + "hide": 0, + "includeAll": true, + "label": "Type", + "multi": false, + "name": "samplerType", + "options": [], + "query": "import \"influxdata/influxdb/schema\"\r\n\r\nschema.measurementTagValues(\r\n bucket: v.bucket,\r\n measurement: \"requestsRaw\",\r\n tag: \"samplerType\"\r\n)", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 1, + "type": "query" } ] }, "time": { - "from": "2022-06-13T19:52:41.319Z", - "to": "2022-06-13T19:55:16.620Z" + "from": "now-5m", + "to": "now" }, "timepicker": { "refresh_intervals": [ @@ -7312,6 +7513,6 @@ "timezone": "browser", "title": "JMeter Load Test (org.md.jmeter.influxdb2.visualizer) - influxdb v2.0 (Flux)", "uid": "b4kP_KoMzasadasdasd", - "version": 50, + "version": 49, "weekStart": "" } \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 4fb2c58..4549584 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ #Fri Apr 17 22:39:55 EEST 2020 -distributionUrl=https\://services.gradle.org/distributions/gradle-7.4.2-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.5.1-all.zip distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStorePath=wrapper/dists diff --git a/img/filterById.png b/img/filterById.png new file mode 100644 index 0000000000000000000000000000000000000000..55048164cfd87c0786a946617d5682e2f8fed2c3 GIT binary patch literal 8978 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 literal 0 HcmV?d00001 diff --git a/img/filterByType.png b/img/filterByType.png new file mode 100644 index 0000000000000000000000000000000000000000..76d076de54b4291b3b8ffa1c693c529b4527c403 GIT binary patch literal 7842 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 sampleResults, BackendListene for (SampleResult sampleResult : allSampleResults) { getUserMetrics().add(sampleResult); // Determine the type of sample, whether it is a request or a transaction controller - String sampleType = "transaction"; + String samplerType = "transaction"; if (sampleResult instanceof HTTPSampleResult){ - sampleType = "request"; + samplerType = "request"; } if ((null != regexForSamplerList && sampleResult.getSampleLabel().matches(regexForSamplerList)) @@ -139,7 +139,7 @@ public void handleSampleResults(List sampleResults, BackendListene sampleResultContext.setTestName(this.testName); sampleResultContext.setNodeName(this.nodeName); sampleResultContext.setSampleResult(sampleResult); - sampleResultContext.setSampleType(sampleType); + sampleResultContext.setSamplerType(samplerType); sampleResultContext.setTimeToSet(System.currentTimeMillis() * ONE_MS_IN_NANOSECONDS + this.getUniqueNumberForTheSamplerThread()); sampleResultContext.setErrorBodyToBeSaved(context.getBooleanParameter(KEY_INCLUDE_BODY_OF_FAILURES, false)); sampleResultContext.setResponseBodyLength(this.influxDBConfig.getResponseBodyLength()); diff --git a/src/main/java/io/github/mderevyankoaqa/influxdb2/visualizer/config/RequestMeasurement.java b/src/main/java/io/github/mderevyankoaqa/influxdb2/visualizer/config/RequestMeasurement.java index 28a436f..51e14d5 100644 --- a/src/main/java/io/github/mderevyankoaqa/influxdb2/visualizer/config/RequestMeasurement.java +++ b/src/main/java/io/github/mderevyankoaqa/influxdb2/visualizer/config/RequestMeasurement.java @@ -62,7 +62,7 @@ interface Tags { /** * sampleType represents the type of sample, whether it is a request or a transaction controller. */ - String SAMPLE_TYPE = "sampleType"; + String SAMPLE_TYPE = "samplerType"; } /** diff --git a/src/main/java/io/github/mderevyankoaqa/influxdb2/visualizer/result/SampleResultPointContext.java b/src/main/java/io/github/mderevyankoaqa/influxdb2/visualizer/result/SampleResultPointContext.java index e4b7041..2fe7dab 100644 --- a/src/main/java/io/github/mderevyankoaqa/influxdb2/visualizer/result/SampleResultPointContext.java +++ b/src/main/java/io/github/mderevyankoaqa/influxdb2/visualizer/result/SampleResultPointContext.java @@ -15,7 +15,7 @@ public class SampleResultPointContext { private String testName; boolean errorBodyToBeSaved; private int ResponseBodyLength; - private String sampleType; + private String samplerType; /** * Checks whether the body of the failed repose is going to be saved. @@ -130,18 +130,18 @@ public void setResponseBodyLength(int responseBodyLength) { } /** - * Sets sampleType. - * @param sampleType represents the type of sample, whether it is a request or a transaction controller. + * Sets samplerType. + * @param samplerType represents the type of sample, whether it is a request or a transaction controller. */ - public void setSampleType(String sampleType) { - this.sampleType = sampleType; + public void setSamplerType(String samplerType) { + this.samplerType = samplerType; } /** - * Gets the SampleType. - * @return returns SampleType. + * Gets the SamplerType. + * @return returns SamplerType. */ - public String getSampleType() { - return this.sampleType; + public String getSamplerType() { + return this.samplerType; } } diff --git a/src/main/java/io/github/mderevyankoaqa/influxdb2/visualizer/result/SampleResultPointProvider.java b/src/main/java/io/github/mderevyankoaqa/influxdb2/visualizer/result/SampleResultPointProvider.java index 1154283..e871aa9 100644 --- a/src/main/java/io/github/mderevyankoaqa/influxdb2/visualizer/result/SampleResultPointProvider.java +++ b/src/main/java/io/github/mderevyankoaqa/influxdb2/visualizer/result/SampleResultPointProvider.java @@ -106,7 +106,7 @@ private Point getDefaultPoint() { .addTag(RequestMeasurement.Tags.NODE_NAME, this.sampleResultContext.getNodeName()) .addTag(RequestMeasurement.Tags.RESULT_CODE, this.sampleResultContext.getSampleResult().getResponseCode()) .addTag(RequestMeasurement.Tags.ERROR_MSG, this.getAssertionFailure()) - .addTag(RequestMeasurement.Tags.SAMPLE_TYPE, this.sampleResultContext.getSampleType()) + .addTag(RequestMeasurement.Tags.SAMPLE_TYPE, this.sampleResultContext.getSamplerType()) .addTag(RequestMeasurement.Tags.ERROR_RESPONSE_BODY, this.getErrorBodyToBeSaved(this.sampleResultContext.isErrorBodyToBeSaved())) .addField(RequestMeasurement.Fields.ERROR_COUNT, this.sampleResultContext.getSampleResult().getErrorCount()) .addField(RequestMeasurement.Fields.REQUEST_COUNT, this.sampleResultContext.getSampleResult().getSampleCount())