/* * JMeter Report Server * Copyright (C) 2010 eXcentia * dev@sonar.codehaus.org * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 3 of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02 */ package es.excentia.jmeter.report.server.service.impl; import java.io.OutputStream; import java.util.Map; import es.excentia.jmeter.report.client.data.GlobalSummary; import es.excentia.jmeter.report.client.data.Measure; import es.excentia.jmeter.report.client.serialization.GlobalSummaryWriter; import es.excentia.jmeter.report.client.serialization.MeasureWriter; import es.excentia.jmeter.report.client.serialization.StreamReader; import es.excentia.jmeter.report.client.serialization.StreamWriter; import es.excentia.jmeter.report.client.serialization.Transformer; import es.excentia.jmeter.report.server.report.OkBytesAverage; import es.excentia.jmeter.report.server.report.OkCounter; import es.excentia.jmeter.report.server.report.OkResponseTimeAverage; import es.excentia.jmeter.report.server.report.Report; import es.excentia.jmeter.report.server.report.TransOrder; import es.excentia.jmeter.report.server.report.transmapsimp.BytesOkAvgDevPercentTransMapSimp; import es.excentia.jmeter.report.server.report.transmapsimp.BytesOkAvgDevTransMapSimp; import es.excentia.jmeter.report.server.report.transmapsimp.BytesOkAvgTransMapSimp; import es.excentia.jmeter.report.server.report.transmapsimp.ErrorTotalTransMapSimp; import es.excentia.jmeter.report.server.report.transmapsimp.OkTotalTransMapSimp; import es.excentia.jmeter.report.server.report.transmapsimp.ResponseTimeOkAvgDevPercentTransMapSimp; import es.excentia.jmeter.report.server.report.transmapsimp.ResponseTimeOkAvgDevTransMapSimp; import es.excentia.jmeter.report.server.report.transmapsimp.ResponseTimeOkAvgTransMapSimp; import es.excentia.jmeter.report.server.service.OperationService; import es.excentia.jmeter.report.server.service.ReaderService; import es.excentia.jmeter.report.server.service.ServiceFactory; import es.excentia.jmeter.report.server.testresults.xmlbeans.HttpSample; import es.excentia.jmeter.report.server.transformer.BucketMeasuresTransformerFactory; public class OperationServiceImpl implements OperationService { protected ReaderService readerService = ServiceFactory.get(ReaderService.class); public void writeBucketMeasures(OutputStream os, String config, String metric, int millisBucket) { StreamReader<HttpSample> reader = readerService.getHttpSampleReaderByTestConfig(config); StreamWriter<Measure> writer = new MeasureWriter(os); Transformer<HttpSample, Measure> transformer = BucketMeasuresTransformerFactory .get(metric, reader, writer, millisBucket); transformer.transform(); } public GlobalSummary getGlobalSummary(String config) { // Get report with necessary data to fill the GlobalSummary Report report = new Report(); report.addData(OkCounter.class, Report.SCOPE_ALL); report.addData(OkResponseTimeAverage.class, Report.SCOPE_ALL); report.addData(OkBytesAverage.class, Report.SCOPE_ALL); report.addData(TransOrder.class, Report.SCOPE_TRANS_GLOBAL); report.extract(config); // Fill GlobalSummary GlobalSummary globalSummary = new GlobalSummary(); globalSummary.setTestDesc(config); globalSummary.setUsersLogged(report.getNumUsersLogged()); globalSummary.setTestDuration(report.getTestDuration()); // Requests OkCounter okCounter = report.getDataRequestGlobal(OkCounter.class); globalSummary.setRequestsTotal(okCounter.getTotal()); globalSummary.setRequestsOkTotal(okCounter.getCounter()); globalSummary.setRequestsErrorTotal(okCounter.getOpositeCounter()); globalSummary.setRequestsErrorPercent(okCounter.getOpositePercent()); globalSummary.setRequestsOkPerMinute(okCounter.getCounterPerMinute()); globalSummary.setRequestsOkPerMinuteAndUser(okCounter.getCounterPerMinuteAndUser()); OkResponseTimeAverage okResponseTimeAverage = report.getDataRequestGlobal(OkResponseTimeAverage.class); globalSummary.setRequestsResponseTimeOkAvg(okResponseTimeAverage.getAverage()); globalSummary.setRequestsResponseTimeOkAvgDev(okResponseTimeAverage.getDeviation()); globalSummary.setRequestsResponseTimeOkAvgDevPercent(okResponseTimeAverage.getDeviationPercent()); OkBytesAverage okBytesAverage = report.getDataRequestGlobal(OkBytesAverage.class); globalSummary.setRequestsBytesOkAvg(okBytesAverage.getAverage()); globalSummary.setRequestsBytesOkAvgDev(okBytesAverage.getDeviation()); globalSummary.setRequestsBytesOkAvgDevPercent(okBytesAverage.getDeviationPercent()); // Transactions okCounter = report.getDataTransGlobal(OkCounter.class); globalSummary.setTransTotal(okCounter.getTotal()); globalSummary.setTransOkTotal(okCounter.getCounter()); globalSummary.setTransErrorTotal(okCounter.getOpositeCounter()); globalSummary.setTransErrorPercent(okCounter.getOpositePercent()); globalSummary.setTransOkPerMinute(okCounter.getCounterPerMinute()); globalSummary.setTransOkPerMinuteAndUser(okCounter.getCounterPerMinuteAndUser()); okResponseTimeAverage = report.getDataTransGlobal(OkResponseTimeAverage.class); globalSummary.setTransResponseTimeOkAvg(okResponseTimeAverage.getAverage()); globalSummary.setTransResponseTimeOkAvgDev(okResponseTimeAverage.getDeviation()); globalSummary.setTransResponseTimeOkAvgDevPercent(okResponseTimeAverage.getDeviationPercent()); okBytesAverage = report.getDataTransGlobal(OkBytesAverage.class); globalSummary.setTransBytesOkAvg(okBytesAverage.getAverage()); globalSummary.setTransBytesOkAvgDev(okBytesAverage.getDeviation()); globalSummary.setTransBytesOkAvgDevPercent(okBytesAverage.getDeviationPercent()); // Tipos de transacciones TransOrder transOrder = report.getDataTransGlobal(TransOrder.class); globalSummary.setTransOrder(transOrder.getTransOrderedList()); // OkCounter Map<String, OkCounter> mapOkCounter = report.getDataTransType(OkCounter.class); globalSummary.setTransMapOkTotal(new OkTotalTransMapSimp().toSimpleMap(mapOkCounter)); globalSummary.setTransMapErrorTotal(new ErrorTotalTransMapSimp().toSimpleMap(mapOkCounter)); // OkResponseTimeAverage Map<String, OkResponseTimeAverage> mapOkRespTimeAvg = report.getDataTransType(OkResponseTimeAverage.class); globalSummary.setTransMapResponseTimeOkAvg(new ResponseTimeOkAvgTransMapSimp().toSimpleMap(mapOkRespTimeAvg)); globalSummary.setTransMapResponseTimeOkAvgDev(new ResponseTimeOkAvgDevTransMapSimp().toSimpleMap(mapOkRespTimeAvg)); globalSummary.setTransMapResponseTimeOkAvgDevPercent(new ResponseTimeOkAvgDevPercentTransMapSimp().toSimpleMap(mapOkRespTimeAvg)); // OkBytesAverage Map<String, OkBytesAverage> mapOkBytesAvg = report.getDataTransType(OkBytesAverage.class); globalSummary.setTransMapBytesOkAvg(new BytesOkAvgTransMapSimp().toSimpleMap(mapOkBytesAvg)); globalSummary.setTransMapBytesOkAvgDev(new BytesOkAvgDevTransMapSimp().toSimpleMap(mapOkBytesAvg)); globalSummary.setTransMapBytesOkAvgDevPercent(new BytesOkAvgDevPercentTransMapSimp().toSimpleMap(mapOkBytesAvg)); return globalSummary; } public void writeGlobalSummary(OutputStream os, String config) { GlobalSummary summary = getGlobalSummary(config); new GlobalSummaryWriter(os).write(summary); } }