Hello Philippe, I commit a grafana template ( json format ) in the extra folder of JMeter. But I don't understand what you want with a test plan, as the Backend Listener work only with a Influxdb server.
2017-06-08 13:59 GMT+02:00 Philippe Mouawad <philippe.moua...@gmail.com>: > Hello Maxime, > To simplify testing would it be possible to provide a sample grafana and > test plan ? > > Thanks > > On Thursday, June 8, 2017, <mchassagn...@apache.org> wrote: > > > Author: mchassagneux > > Date: Thu Jun 8 11:53:42 2017 > > New Revision: 1798048 > > > > URL: http://svn.apache.org/viewvc?rev=1798048&view=rev > > Log: > > InfluxdbBackendListener : add number of errors by response code and > > message for each transaction > > Bugzilla Id: 61167 > > > > Added: > > jmeter/trunk/src/components/org/apache/jmeter/visualizers/ > > backend/ErrorMetric.java > > Modified: > > jmeter/trunk/src/components/org/apache/jmeter/visualizers/ > > backend/SamplerMetric.java > > jmeter/trunk/src/components/org/apache/jmeter/visualizers/ > > backend/influxdb/InfluxdbBackendListenerClient.java > > > > Added: jmeter/trunk/src/components/org/apache/jmeter/visualizers/ > > backend/ErrorMetric.java > > URL: http://svn.apache.org/viewvc/jmeter/trunk/src/components/ > > org/apache/jmeter/visualizers/backend/ErrorMetric.java?rev= > > 1798048&view=auto > > ============================================================ > > ================== > > --- jmeter/trunk/src/components/org/apache/jmeter/visualizers/ > backend/ErrorMetric.java > > (added) > > +++ jmeter/trunk/src/components/org/apache/jmeter/visualizers/ > backend/ErrorMetric.java > > Thu Jun 8 11:53:42 2017 > > @@ -0,0 +1,82 @@ > > +/* > > + * Licensed to the Apache Software Foundation (ASF) under one or more > > + * contributor license agreements. See the NOTICE file distributed with > > + * this work for additional information regarding copyright ownership. > > + * The ASF licenses this file to You under the Apache License, Version > 2.0 > > + * (the "License"); you may not use this file except in compliance with > > + * the License. You may obtain a copy of the License at > > + * > > + * http://www.apache.org/licenses/LICENSE-2.0 > > + * > > + * Unless required by applicable law or agreed to in writing, software > > + * distributed under the License is distributed on an "AS IS" BASIS, > > + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or > > implied. > > + * See the License for the specific language governing permissions and > > + * limitations under the License. > > + * > > + */ > > + > > +package org.apache.jmeter.visualizers.backend; > > + > > +import org.apache.jmeter.samplers.SampleResult; > > + > > +/** > > + * Object representing an error by a response code and response message > > + * @since 3.3 > > + */ > > +public class ErrorMetric { > > + > > + private String responseCode = ""; > > + private String responseMessage = ""; > > + > > + public ErrorMetric() { > > + } > > + > > + public ErrorMetric(SampleResult result) { > > + responseCode = result.getResponseCode(); > > + responseMessage = result.getResponseMessage(); > > + } > > + > > + /** > > + * @return the response code , '0' if he code is empty > > + */ > > + public String getResponseCode() { > > + if (responseCode.isEmpty()) { > > + return "0"; > > + } else { > > + return responseCode; > > + } > > + } > > + > > + /** > > + * @return the response message , 'none' if he code is empty > > + */ > > + public String getResponseMessage() { > > + if (responseMessage.isEmpty()) { > > + return "None"; > > + } else { > > + return responseMessage; > > + } > > + } > > + > > + @Override > > + public boolean equals(Object other) { > > + if (!(other instanceof ErrorMetric)) { > > + return false; > > + } > > + > > + ErrorMetric otherError = (ErrorMetric) other; > > + if (getResponseCode().equalsIgnoreCase(otherError. > > getResponseCode()) > > + && getResponseMessage().equalsIgnoreCase(otherError. > getResponseMessage())) > > { > > + return true; > > + } else { > > + return false; > > + } > > + } > > + > > + @Override > > + public int hashCode() { > > + return getResponseCode().hashCode() + > > getResponseMessage().hashCode(); > > + } > > + > > +} > > > > Modified: jmeter/trunk/src/components/org/apache/jmeter/visualizers/ > > backend/SamplerMetric.java > > URL: http://svn.apache.org/viewvc/jmeter/trunk/src/components/ > > org/apache/jmeter/visualizers/backend/SamplerMetric.java? > > rev=1798048&r1=1798047&r2=1798048&view=diff > > ============================================================ > > ================== > > --- jmeter/trunk/src/components/org/apache/jmeter/visualizers/ > backend/SamplerMetric.java > > (original) > > +++ jmeter/trunk/src/components/org/apache/jmeter/visualizers/ > backend/SamplerMetric.java > > Thu Jun 8 11:53:42 2017 > > @@ -21,6 +21,7 @@ package org.apache.jmeter.visualizers.ba > > import java.util.ArrayList; > > import java.util.Arrays; > > import java.util.Collections; > > +import java.util.HashMap; > > import java.util.List; > > > > import org.apache.commons.math3.stat.descriptive.DescriptiveStatistics; > > @@ -61,6 +62,8 @@ public class SamplerMetric { > > private int successes; > > private int failures; > > private int hits; > > + private HashMap<ErrorMetric, Integer> errors = new > > HashMap<ErrorMetric, Integer>(); > > + > > > > /** > > * > > @@ -95,7 +98,9 @@ public class SamplerMetric { > > successes+=result.getSampleCount()-result.getErrorCount(); > > } else { > > failures+=result.getErrorCount(); > > - } > > + ErrorMetric error = new ErrorMetric(result); > > + errors.put(error, errors.getOrDefault(error, 0) + > > result.getErrorCount() ); > > + } > > long time = result.getTime(); > > allResponsesStats.addValue(time); > > pctResponseStats.addValue(time); > > @@ -140,6 +145,7 @@ public class SamplerMetric { > > default: > > // This cannot happen > > } > > + errors.clear(); > > successes = 0; > > failures = 0; > > hits = 0; > > @@ -302,4 +308,12 @@ public class SamplerMetric { > > public int getHits() { > > return hits; > > } > > + > > + /** > > + * Returns details of errors occurs > > + * @return errors > > + */ > > + public HashMap<ErrorMetric, Integer> getErrors() { > > + return errors; > > + } > > } > > > > Modified: jmeter/trunk/src/components/org/apache/jmeter/visualizers/ > > backend/influxdb/InfluxdbBackendListenerClient.java > > URL: http://svn.apache.org/viewvc/jmeter/trunk/src/components/ > > org/apache/jmeter/visualizers/backend/influxdb/ > > InfluxdbBackendListenerClient.java?rev=1798048&r1=1798047& > > r2=1798048&view=diff > > ============================================================ > > ================== > > --- jmeter/trunk/src/components/org/apache/jmeter/visualizers/ > > backend/influxdb/InfluxdbBackendListenerClient.java (original) > > +++ jmeter/trunk/src/components/org/apache/jmeter/visualizers/ > > backend/influxdb/InfluxdbBackendListenerClient.java Thu Jun 8 11:53:42 > > 2017 > > @@ -62,8 +62,11 @@ public class InfluxdbBackendListenerClie > > > > private static final String TAG_TRANSACTION = ",transaction="; > > > > - private static final String TAG_STATUS = ",status="; > > + // As influxdb can't rename tag for now, keep the old name for > > backward compatibility > > + private static final String TAG_STATUS = ",statut="; > > private static final String TAG_APPLICATION = ",application="; > > + private static final String TAG_RESPONSE_CODE = ",responseCode="; > > + private static final String TAG_RESPONSE_MESSAGE = > > ",responseMessage="; > > > > private static final String METRIC_COUNT = "count="; > > private static final String METRIC_COUNT_ERROR = "countError="; > > @@ -172,8 +175,24 @@ public class InfluxdbBackendListenerClie > > // FOR KO STATUS > > addMetric(transaction, metric.getFailures(), true, TAG_KO, > > metric.getKoMean(), metric.getKoMinTime(), > > metric.getKoMaxTime(), koPercentiles.values(), > > metric::getKoPercentile); > > + > > + metric.getErrors().forEach((error, count) -> > > addErrorMetric(transaction, error.getResponseCode(), > > + error.getResponseMessage(), count)); > > } > > > > + private void addErrorMetric(String transaction, String responseCode, > > String responseMessage, long count) { > > + if (count > 0) { > > + StringBuilder tag = new StringBuilder(70); > > + tag.append(TAG_APPLICATION).append(application); > > + tag.append(TAG_TRANSACTION).append(transaction); > > + tag.append(TAG_RESPONSE_CODE).append( > > AbstractInfluxdbMetricsSender.tagToStringValue(responseCode)); > > + tag.append(TAG_RESPONSE_MESSAGE).append( > > AbstractInfluxdbMetricsSender.tagToStringValue(responseMessage)); > > + > > + StringBuilder field = new StringBuilder(30); > > + field.append(METRIC_COUNT).append(count); > > + influxdbMetricsManager.addMetric(measurement, > > tag.toString(), field.toString()); > > + } > > + } > > > > private void addMetric(String transaction, int count, boolean > > includeResponseCode, > > String statut, double mean, double minTime, double maxTime, > > > > > > > > -- > Cordialement. > Philippe Mouawad. >