Author: pmouawad Date: Mon Jan 7 11:15:03 2019 New Revision: 1850626 URL: http://svn.apache.org/viewvc?rev=1850626&view=rev Log: Bug 63059 - Create a new JSonExporter that exports as JSON the content of data computed for HTML Dashboard Statistics table
Contributed by UbikLoadPack (https://ubikloadpack.com) Bugzilla Id: 63059 Added: jmeter/trunk/src/core/org/apache/jmeter/report/dashboard/JsonExporter.java (with props) jmeter/trunk/src/core/org/apache/jmeter/report/dashboard/SamplingStatistic.java (with props) Modified: jmeter/trunk/LICENSE jmeter/trunk/bin/reportgenerator.properties jmeter/trunk/build.properties jmeter/trunk/build.xml jmeter/trunk/eclipse.classpath jmeter/trunk/lib/ (props changed) jmeter/trunk/lib/aareadme.txt jmeter/trunk/res/maven/ApacheJMeter_parent.pom jmeter/trunk/xdocs/changes.xml Modified: jmeter/trunk/LICENSE URL: http://svn.apache.org/viewvc/jmeter/trunk/LICENSE?rev=1850626&r1=1850625&r2=1850626&view=diff ============================================================================== --- jmeter/trunk/LICENSE [utf-8] (original) +++ jmeter/trunk/LICENSE [utf-8] Mon Jan 7 11:15:03 2019 @@ -251,6 +251,9 @@ The following software is provided under * caffeine-2.6.2.jar * darcula.jar * freemarker-2.3.28.jar (AL2.0, see licenses/bin for additional info) +* jackson-annotations-2.9.8.jar +* jackson-core-2.9.8.jar +* jackson-databind-2.9.8.jar * json-path-2.4.0.jar * json-smart-2.3.jar * mongo-java-driver-2.11.3.jar Modified: jmeter/trunk/bin/reportgenerator.properties URL: http://svn.apache.org/viewvc/jmeter/trunk/bin/reportgenerator.properties?rev=1850626&r1=1850625&r2=1850626&view=diff ============================================================================== --- jmeter/trunk/bin/reportgenerator.properties (original) +++ jmeter/trunk/bin/reportgenerator.properties Mon Jan 7 11:15:03 2019 @@ -192,3 +192,8 @@ jmeter.reportgenerator.exporter.html.cla # Indicates whether only controller samples are displayed on graphs that support it. #jmeter.reportgenerator.exporter.html.show_controllers_only=false + +# JSON Export that generates statistics.json + +jmeter.reportgenerator.exporter.json.classname=org.apache.jmeter.report.dashboard.JsonExporter +jmeter.reportgenerator.exporter.json.property.output_dir=report-output \ No newline at end of file Modified: jmeter/trunk/build.properties URL: http://svn.apache.org/viewvc/jmeter/trunk/build.properties?rev=1850626&r1=1850625&r2=1850626&view=diff ============================================================================== --- jmeter/trunk/build.properties (original) +++ jmeter/trunk/build.properties Mon Jan 7 11:15:03 2019 @@ -210,6 +210,21 @@ httpcore-nio.jar = httpco httpcore-nio.loc = ${maven2.repo}/org/apache/httpcomponents/httpcore-nio/${httpcore-nio.version} httpcore-nio.sha512 = 002AF5F72B68A4FF1B1FF46B788013283D195E1D62EE1D7B102AA930B30F77F7E215A6D18EDBEA0FCCD18FB1FA3A66CC4AEF6070D72D6D1886F0044DFE0E16C7 +jackson-annotations.version = 2.9.8 +jackson-annotations.jar = jackson-annotations-${jackson-annotations.version}.jar +jackson-annotations.loc = ${maven2.repo}/com/fasterxml/jackson/core/jackson-annotations/${jackson-annotations.version} +jackson-annotations.sha512 = 05A7A203623DF2E7A2C338D589871C07258E7552F4C55B3F45BBBD77B5E04B7A77F96779F19394182B20DE98DB419496AB0ADB6D5D28C42F8FFEA1C76C82D8AF + +jackson-core.version = 2.9.8 +jackson-core.jar = jackson-core-${jackson-core.version}.jar +jackson-core.loc = ${maven2.repo}/com/fasterxml/jackson/core/jackson-core/${jackson-core.version} +jackson-core.sha512 = 695C4BF0C5BF72910DC09CD6062FAA7690ECE110F874DADE86D5E3D6EE5598E57572517200D7A31816AB599F01350E5AAC9A671FFB826650F385EA97E4BC0D98 + +jackson-databind.version = 2.9.8 +jackson-databind.jar = jackson-databind-${jackson-databind.version}.jar +jackson-databind.loc = ${maven2.repo}/com/fasterxml/jackson/core/jackson-databind/${jackson-databind.version} +jackson-databind.sha512 = 720F2D2779CBFD4B470CB5106AB3944EF12717330534B94F99D8D81D1F07BBA809A30BC92E296ECB31CB76C2FEAA06870B7EDFF5A081C7EFED9C3AC7E5CEBE2F + jakarta-oro.version = 2.0.8 jakarta-oro.jar = oro-${jakarta-oro.version}.jar jakarta-oro.loc = ${maven2.repo}/oro/oro/${jakarta-oro.version} Modified: jmeter/trunk/build.xml URL: http://svn.apache.org/viewvc/jmeter/trunk/build.xml?rev=1850626&r1=1850625&r2=1850626&view=diff ============================================================================== --- jmeter/trunk/build.xml (original) +++ jmeter/trunk/build.xml Mon Jan 7 11:15:03 2019 @@ -420,6 +420,9 @@ <include name="${lib.dir}/${httpcore-nio.jar}"/> <include name="${lib.dir}/${httpmime.jar}"/> <include name="${lib.dir}/${jakarta-oro.jar}"/> + <include name="${lib.dir}/${jackson-annotations.jar}"/> + <include name="${lib.dir}/${jackson-core.jar}"/> + <include name="${lib.dir}/${jackson-databind.jar}"/> <include name="${lib.dir}/${javamail.jar}"/> <include name="${lib.dir}/${jcharts.jar}"/> <include name="${lib.dir}/${jcl-over-slf4j.jar}"/> @@ -507,6 +510,9 @@ <pathelement location="${lib.dir}/${httpcore-nio.jar}"/> <pathelement location="${lib.dir}/${httpmime.jar}"/> <pathelement location="${lib.dir}/${jakarta-oro.jar}"/> + <pathelement location="${lib.dir}/${jackson-annotations.jar}"/> + <pathelement location="${lib.dir}/${jackson-core.jar}"/> + <pathelement location="${lib.dir}/${jackson-databind.jar}"/> <pathelement location="${lib.dir}/${javamail.jar}"/> <pathelement location="${lib.dir}/${jcharts.jar}"/> <pathelement location="${lib.dir}/${jms.jar}"/> @@ -3384,6 +3390,9 @@ run JMeter unless all the JMeter jars ar <process_jarfile jarname="httpcore-nio"/> <process_jarfile jarname="httpmime"/> <process_jarfile jarname="jakarta-oro"/> + <process_jarfile jarname="jackson-annotations"/> + <process_jarfile jarname="jackson-core"/> + <process_jarfile jarname="jackson-databind"/> <process_jarfile jarname="javamail"/> <process_jarfile jarname="jcharts"/> <process_jarfile jarname="jdom" dest.dir="${lib.doc}"/> Modified: jmeter/trunk/eclipse.classpath URL: http://svn.apache.org/viewvc/jmeter/trunk/eclipse.classpath?rev=1850626&r1=1850625&r2=1850626&view=diff ============================================================================== --- jmeter/trunk/eclipse.classpath (original) +++ jmeter/trunk/eclipse.classpath Mon Jan 7 11:15:03 2019 @@ -74,6 +74,9 @@ <classpathentry kind="lib" path="lib/httpcore-nio-4.4.10.jar"/> <classpathentry kind="lib" path="lib/httpcore-4.4.10.jar"/> <classpathentry kind="lib" path="lib/httpmime-4.5.6.jar"/> + <classpathentry kind="lib" path="lib/jackson-annotations-2.9.8.jar"/> + <classpathentry kind="lib" path="lib/jackson-core-2.9.8.jar"/> + <classpathentry kind="lib" path="lib/jackson-databind-2.9.8.jar"/> <classpathentry kind="lib" path="lib/javax.activation-api-1.2.0.jar"/> <classpathentry kind="lib" path="lib/javax.activation-1.2.0.jar"/> <classpathentry kind="lib" path="lib/jcharts-0.7.5.jar"/> Propchange: jmeter/trunk/lib/ ------------------------------------------------------------------------------ --- svn:ignore (original) +++ svn:ignore Mon Jan 7 11:15:03 2019 @@ -33,6 +33,9 @@ httpclient-4.5.6.jar httpcore-4.4.10.jar httpcore-nio-4.4.10.jar httpmime-4.5.6.jar +jackson-annotations-2.9.8.jar +jackson-core-2.9.8.jar +jackson-databind-2.9.8.jar javax.activation-api-1.2.0.jar javax.activation-1.2.0.jar jcharts-0.7.5.jar Modified: jmeter/trunk/lib/aareadme.txt URL: http://svn.apache.org/viewvc/jmeter/trunk/lib/aareadme.txt?rev=1850626&r1=1850625&r2=1850626&view=diff ============================================================================== --- jmeter/trunk/lib/aareadme.txt (original) +++ jmeter/trunk/lib/aareadme.txt Mon Jan 7 11:15:03 2019 @@ -123,6 +123,14 @@ javax.activation-1.2.0.jar ---------------------- - used by SMTP Sampler +jackson-annotations-2.9.8 (com.fasterxml.jackson) +---------------------- + +Used by JsonExporter in report generator (com.fasterxml.jackson) +---------------------- +jackson-annotations-2.9.8 (https://github.com/FasterXML/jackson-annotations) +jackson-core-2.9.8 (https://github.com/FasterXML/jackson-core) +jackson-databind-2.9.8 (https://github.com/FasterXML/jackson-databind) jCharts-0.7.5 (org.jCharts) ------------- Modified: jmeter/trunk/res/maven/ApacheJMeter_parent.pom URL: http://svn.apache.org/viewvc/jmeter/trunk/res/maven/ApacheJMeter_parent.pom?rev=1850626&r1=1850625&r2=1850626&view=diff ============================================================================== --- jmeter/trunk/res/maven/ApacheJMeter_parent.pom (original) +++ jmeter/trunk/res/maven/ApacheJMeter_parent.pom Mon Jan 7 11:15:03 2019 @@ -82,6 +82,7 @@ under the License. <httpcore.version>4.4.10</httpcore.version> <httpcore-nio.version>4.4.10</httpcore-nio.version> <httpmime.version>4.5.6</httpmime.version> + <jackson.version>2.9.8</jackson.version> <jakarta-oro.version>2.0.8</jakarta-oro.version> <javax.activation-api.version>1.2.0</javax.activation-api.version> <javax.activation.version>1.2.0</javax.activation.version> @@ -267,6 +268,21 @@ under the License. <version>${jakarta-oro.version}</version> </dependency> <dependency> + <groupId>com.fasterxml.jackson.core</groupId> + <artifactId>jackson-databind</artifactId> + <version>${jackson.version}</version> + </dependency> + <dependency> + <groupId>com.fasterxml.jackson.core</groupId> + <artifactId>jackson-annotations</artifactId> + <version>${jackson.version}</version> + </dependency> + <dependency> + <groupId>com.fasterxml.jackson.core</groupId> + <artifactId>jackson-core</artifactId> + <version>${jackson.version}</version> + </dependency> + <dependency> <groupId>jcharts</groupId> <artifactId>jcharts</artifactId> <version>0.7.5</version> Added: jmeter/trunk/src/core/org/apache/jmeter/report/dashboard/JsonExporter.java URL: http://svn.apache.org/viewvc/jmeter/trunk/src/core/org/apache/jmeter/report/dashboard/JsonExporter.java?rev=1850626&view=auto ============================================================================== --- jmeter/trunk/src/core/org/apache/jmeter/report/dashboard/JsonExporter.java (added) +++ jmeter/trunk/src/core/org/apache/jmeter/report/dashboard/JsonExporter.java Mon Jan 7 11:15:03 2019 @@ -0,0 +1,137 @@ +/* + * 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.report.dashboard; + +import java.io.File; +import java.io.FileFilter; +import java.io.FileWriter; +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +import org.apache.commons.io.FileUtils; +import org.apache.commons.lang3.StringUtils; +import org.apache.jmeter.JMeter; +import org.apache.jmeter.report.config.ExporterConfiguration; +import org.apache.jmeter.report.config.ReportGeneratorConfiguration; +import org.apache.jmeter.report.processor.ListResultData; +import org.apache.jmeter.report.processor.MapResultData; +import org.apache.jmeter.report.processor.SampleContext; +import org.apache.jmeter.report.processor.ValueResultData; +import org.apache.jmeter.util.JMeterUtils; +import org.apache.jorphan.util.JOrphanUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.ObjectWriter; + +/** + * Implementation of {@link DataExporter} that exports statistics to JSON + * + * @since 5.1 + */ +public class JsonExporter extends AbstractDataExporter { + private static final Logger LOGGER = LoggerFactory.getLogger(JsonExporter.class); + public static final String OUTPUT_FILENAME = "statistics.json"; + private static final FileFilter JSON_FILE_FILTER = + file -> file.isFile() && file.getName().equals(OUTPUT_FILENAME); + + + public JsonExporter() { + super(); + } + + @Override + public void export(SampleContext context, File file, ReportGeneratorConfiguration reportGeneratorConfiguration) + throws ExportException { + Object data = context.getData().get(ReportGenerator.STATISTICS_SUMMARY_CONSUMER_NAME); + if (data instanceof MapResultData) { + LOGGER.info("Found data for consumer {}Â in context", ReportGenerator.STATISTICS_SUMMARY_CONSUMER_NAME); + MapResultData result = (MapResultData) data; + Map<String, SamplingStatistic> statistics = new HashMap<>(); + MapResultData overallData = (MapResultData) result.getResult("overall"); + LOGGER.info("Creating statistics for overall"); + createStatistic(statistics, overallData); + + ListResultData itemsData = (ListResultData) result.getResult("items"); + LOGGER.info("Creating statistics for other transactions"); + itemsData.forEach(r -> createStatistic(statistics, (MapResultData)r)); + + LOGGER.info("Checking output folder"); + File outputDir = checkAndGetOutputFolder(reportGeneratorConfiguration); + + File outputFile = new File(outputDir, OUTPUT_FILENAME); + LOGGER.info("Writing statistics JSON to {}", outputFile); + ObjectWriter objectWriter = new ObjectMapper().writerWithDefaultPrettyPrinter(); + try (FileWriter fileWriter = new FileWriter(outputFile)) { + objectWriter.writeValue(fileWriter, statistics); + } catch (IOException e) { + throw new ExportException("Error generating JSON statistics file to " + outputFile +" for "+statistics, e); + } + } + } + + /** + * Check folder and return output folder. + * @param reportGeneratorConfiguration {@link ReportGeneratorConfiguration} + * @return {@link File} output folder + * @throws ExportException + */ + private File checkAndGetOutputFolder(ReportGeneratorConfiguration reportGeneratorConfiguration) + throws ExportException { + final ExporterConfiguration exportCfg = reportGeneratorConfiguration + .getExportConfigurations().get(getName()); + // Get output directory property value + File outputDir = getPropertyFromConfig(exportCfg, HtmlTemplateExporter.OUTPUT_DIR, + new File(JMeterUtils.getJMeterBinDir(), HtmlTemplateExporter.OUTPUT_DIR_NAME_DEFAULT), File.class); + String globallyDefinedOutputDir = JMeterUtils.getProperty(JMeter.JMETER_REPORT_OUTPUT_DIR_PROPERTY); + if(!StringUtils.isEmpty(globallyDefinedOutputDir)) { + outputDir = new File(globallyDefinedOutputDir); + } + + JOrphanUtils.canSafelyWriteToFolder(outputDir, JSON_FILE_FILTER); + try { + FileUtils.forceMkdir(outputDir); + } catch (IOException ex) { + throw new ExportException("Error creating output folder "+outputDir.getAbsolutePath(), ex); + } + return outputDir; + } + + private void createStatistic(Map<String, SamplingStatistic> statistics, MapResultData resultData) { + LOGGER.debug("Creating statistics for result data:{}", resultData); + SamplingStatistic statistic = new SamplingStatistic(); + ListResultData listResultData = (ListResultData) resultData.getResult("data"); + statistic.setTransaction((String) ((ValueResultData)listResultData.get(0)).getValue()); + statistic.setSampleCount((Long) ((ValueResultData)listResultData.get(1)).getValue()); + statistic.setErrorCount((Long) ((ValueResultData)listResultData.get(2)).getValue()); + statistic.setErrorPct(((Double) ((ValueResultData)listResultData.get(3)).getValue()).floatValue()); + statistic.setMeanResTime((Double) ((ValueResultData)listResultData.get(4)).getValue()); + statistic.setMinResTime((Long) ((ValueResultData)listResultData.get(5)).getValue()); + statistic.setMaxResTime((Long) ((ValueResultData)listResultData.get(6)).getValue()); + statistic.setPct1ResTime((Double) ((ValueResultData)listResultData.get(7)).getValue()); + statistic.setPct2ResTime((Double) ((ValueResultData)listResultData.get(8)).getValue()); + statistic.setPct3ResTime((Double) ((ValueResultData)listResultData.get(9)).getValue()); + statistic.setThroughput((Double) ((ValueResultData)listResultData.get(10)).getValue()); + statistic.setReceivedKBytesPerSec((Double) ((ValueResultData)listResultData.get(11)).getValue()); + statistic.setSentKBytesPerSec((Double) ((ValueResultData)listResultData.get(12)).getValue()); + statistics.put(statistic.getTransaction(), statistic); + } +} Propchange: jmeter/trunk/src/core/org/apache/jmeter/report/dashboard/JsonExporter.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: jmeter/trunk/src/core/org/apache/jmeter/report/dashboard/JsonExporter.java ------------------------------------------------------------------------------ svn:mime-type = text/plain Added: jmeter/trunk/src/core/org/apache/jmeter/report/dashboard/SamplingStatistic.java URL: http://svn.apache.org/viewvc/jmeter/trunk/src/core/org/apache/jmeter/report/dashboard/SamplingStatistic.java?rev=1850626&view=auto ============================================================================== --- jmeter/trunk/src/core/org/apache/jmeter/report/dashboard/SamplingStatistic.java (added) +++ jmeter/trunk/src/core/org/apache/jmeter/report/dashboard/SamplingStatistic.java Mon Jan 7 11:15:03 2019 @@ -0,0 +1,226 @@ +/* + * 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.report.dashboard; + +/** + * Statistics about a Transaction (Sampler or TransactionController) + * @since 5.1 + * + */ +public class SamplingStatistic { + private String transaction; + private long sampleCount; + private long errorCount; + private float errorPct; + private double meanResTime; + private double minResTime; + private double maxResTime; + private double pct1ResTime; + private double pct2ResTime; + private double pct3ResTime; + private double throughput; + private double receivedKBytesPerSec; + private double sentKBytesPerSec; + + public SamplingStatistic() { + super(); + } + + /** + * @return the transaction + */ + public String getTransaction() { + return transaction; + } + + /** + * @param transaction the transaction to set + */ + public void setTransaction(String transaction) { + this.transaction = transaction; + } + + /** + * @return the sampleCount + */ + public long getSampleCount() { + return sampleCount; + } + + /** + * @param sampleCount the sampleCount to set + */ + public void setSampleCount(long sampleCount) { + this.sampleCount = sampleCount; + } + + /** + * @return the errorCount + */ + public long getErrorCount() { + return errorCount; + } + + /** + * @param errorCount the errorCount to set + */ + public void setErrorCount(long errorCount) { + this.errorCount = errorCount; + } + + /** + * @return the errorPct + */ + public float getErrorPct() { + return errorPct; + } + + /** + * @param errorPct the errorPct to set + */ + public void setErrorPct(float errorPct) { + this.errorPct = errorPct; + } + + /** + * @return the meanResTime + */ + public double getMeanResTime() { + return meanResTime; + } + + /** + * @param meanResTime the meanResTime to set + */ + public void setMeanResTime(double meanResTime) { + this.meanResTime = meanResTime; + } + + /** + * @return the minResTime + */ + public double getMinResTime() { + return minResTime; + } + + /** + * @param minResTime the minResTime to set + */ + public void setMinResTime(double minResTime) { + this.minResTime = minResTime; + } + + /** + * @return the maxResTime + */ + public double getMaxResTime() { + return maxResTime; + } + + /** + * @param maxResTime the maxResTime to set + */ + public void setMaxResTime(double maxResTime) { + this.maxResTime = maxResTime; + } + + /** + * @return the pct1ResTime + */ + public double getPct1ResTime() { + return pct1ResTime; + } + + /** + * @param pct1ResTime the pct1ResTime to set + */ + public void setPct1ResTime(double pct1ResTime) { + this.pct1ResTime = pct1ResTime; + } + + /** + * @return the pct2ResTime + */ + public double getPct2ResTime() { + return pct2ResTime; + } + + /** + * @param pct2ResTime the pct2ResTime to set + */ + public void setPct2ResTime(double pct2ResTime) { + this.pct2ResTime = pct2ResTime; + } + + /** + * @return the pct3ResTime + */ + public double getPct3ResTime() { + return pct3ResTime; + } + + /** + * @param pct3ResTime the pct3ResTime to set + */ + public void setPct3ResTime(double pct3ResTime) { + this.pct3ResTime = pct3ResTime; + } + + /** + * @return the throughput + */ + public double getThroughput() { + return throughput; + } + + /** + * @param throughput the throughput to set + */ + public void setThroughput(double throughput) { + this.throughput = throughput; + } + + /** + * @return the receivedKBytesPerSec + */ + public double getReceivedKBytesPerSec() { + return receivedKBytesPerSec; + } + + /** + * @param receivedKBytesPerSec the receivedKBytesPerSec to set + */ + public void setReceivedKBytesPerSec(double receivedKBytesPerSec) { + this.receivedKBytesPerSec = receivedKBytesPerSec; + } + + /** + * @return the sentKBytesPerSec + */ + public double getSentKBytesPerSec() { + return sentKBytesPerSec; + } + + /** + * @param sentKBytesPerSec the sentKBytesPerSec to set + */ + public void setSentKBytesPerSec(double sentKBytesPerSec) { + this.sentKBytesPerSec = sentKBytesPerSec; + } +} Propchange: jmeter/trunk/src/core/org/apache/jmeter/report/dashboard/SamplingStatistic.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: jmeter/trunk/src/core/org/apache/jmeter/report/dashboard/SamplingStatistic.java ------------------------------------------------------------------------------ svn:mime-type = text/plain Modified: jmeter/trunk/xdocs/changes.xml URL: http://svn.apache.org/viewvc/jmeter/trunk/xdocs/changes.xml?rev=1850626&r1=1850625&r2=1850626&view=diff ============================================================================== --- jmeter/trunk/xdocs/changes.xml [utf-8] (original) +++ jmeter/trunk/xdocs/changes.xml [utf-8] Mon Jan 7 11:15:03 2019 @@ -117,6 +117,7 @@ of previous time slot as a base. Startin <ul> <li><bug>62883</bug>Report / Dashboard : Change the way percentiles are computed for Response Time Percentiles Over Time (successful responses) graph</li> <li><bug>63060</bug>Report Generator: A generator should only check for folder/files it generates and only delete those ones</li> + <li><bug>63059</bug>Create a new JSonExporter that exports as JSON the content of data computed for HTML Dashboard Statistics table. Contributed by Ubik Load Pack (support at ubikloadpack.com)</li> </ul> <h3>General</h3>
