public void doRespondingTimeGraph(StaplerRequest request, StaplerResponse response) throws IOException { PerformanceReportPosition performanceReportPosition = new PerformanceReportPosition(); request.bindParameters(performanceReportPosition); String performanceReportNameFile = performanceReportPosition.getPerformanceReportPosition(); if (performanceReportNameFile == null) { if (getPerformanceReportList().size() == 1) { performanceReportNameFile = getPerformanceReportList().get(0); } else { return; } } if (ChartUtil.awtProblemCause != null) { // not available. send out error message response.sendRedirect2(request.getContextPath() + "/images/headless.png"); return; } DataSetBuilder<String, NumberOnlyBuildLabel> dataSetBuilderAverage = new DataSetBuilder<String, NumberOnlyBuildLabel>(); List<?> builds = getProject().getBuilds(); List<Integer> buildsLimits = getFirstAndLastBuild(request, builds); int nbBuildsToAnalyze = builds.size(); for (Iterator<?> iterator = builds.iterator(); iterator.hasNext(); ) { AbstractBuild<?, ?> currentBuild = (AbstractBuild<?, ?>) iterator.next(); if (nbBuildsToAnalyze <= buildsLimits.get(1) && buildsLimits.get(0) <= nbBuildsToAnalyze) { NumberOnlyBuildLabel label = new NumberOnlyBuildLabel(currentBuild); PerformanceBuildAction performanceBuildAction = currentBuild.getAction(PerformanceBuildAction.class); if (performanceBuildAction == null) { continue; } PerformanceReport performanceReport = performanceBuildAction .getPerformanceReportMap() .getPerformanceReport(performanceReportNameFile); if (performanceReport == null) { nbBuildsToAnalyze--; continue; } dataSetBuilderAverage.add( performanceReport.getMedian(), Messages.ProjectAction_Median(), label); dataSetBuilderAverage.add( performanceReport.getAverage(), Messages.ProjectAction_Average(), label); dataSetBuilderAverage.add( performanceReport.get90Line(), Messages.ProjectAction_Line90(), label); } nbBuildsToAnalyze--; } ChartUtil.generateGraph( request, response, createRespondingTimeChart(dataSetBuilderAverage.build()), 400, 200); }
@Override public Collection<PerformanceReport> parse( AbstractBuild<?, ?> build, Collection<File> reports, TaskListener listener) throws IOException { List<PerformanceReport> result = new ArrayList<PerformanceReport>(); PrintStream logger = listener.getLogger(); for (File f : reports) { final PerformanceReport r = new PerformanceReport(); r.setReportFileName(f.getName()); logger.println("Performance: Parsing JMeter report file " + f.getName()); BufferedReader reader = new BufferedReader(new FileReader(f)); try { String line = reader.readLine(); if (line != null && skipFirstLine) { logger.println("Performance: Skipping first line"); line = reader.readLine(); } while (line != null) { HttpSample sample = getSample(line); if (sample != null) { try { r.addSample(sample); } catch (SAXException e) { throw new RuntimeException("Unnable to add sample for line " + line, e); } } line = reader.readLine(); } } finally { if (reader != null) reader.close(); } result.add(r); } return result; }
private DataSetBuilder getTrendReportData( final StaplerRequest request, String performanceReportNameFile) { DataSetBuilder<String, NumberOnlyBuildLabel> dataSet = new DataSetBuilder<String, NumberOnlyBuildLabel>(); List<?> builds = getProject().getBuilds(); List<Integer> buildsLimits = getFirstAndLastBuild(request, builds); int nbBuildsToAnalyze = builds.size(); for (Iterator<?> iterator = builds.iterator(); iterator.hasNext(); ) { AbstractBuild<?, ?> currentBuild = (AbstractBuild<?, ?>) iterator.next(); if (nbBuildsToAnalyze <= buildsLimits.get(1) && buildsLimits.get(0) <= nbBuildsToAnalyze) { NumberOnlyBuildLabel label = new NumberOnlyBuildLabel(currentBuild); PerformanceBuildAction performanceBuildAction = currentBuild.getAction(PerformanceBuildAction.class); if (performanceBuildAction == null) { continue; } PerformanceReport report = null; report = performanceBuildAction .getPerformanceReportMap() .getPerformanceReport(performanceReportNameFile); if (report == null) { nbBuildsToAnalyze--; continue; } dataSet.add(Math.round(report.getAverage()), Messages.ProjectAction_Average(), label); dataSet.add(Math.round(report.getMedian()), Messages.ProjectAction_Median(), label); dataSet.add(Math.round(report.get90Line()), Messages.ProjectAction_Line90(), label); dataSet.add(Math.round(report.getMin()), Messages.ProjectAction_Minimum(), label); dataSet.add(Math.round(report.getMax()), Messages.ProjectAction_Maximum(), label); dataSet.add( Math.round(report.errorPercent()), Messages.ProjectAction_PercentageOfErrors(), label); dataSet.add(Math.round(report.countErrors()), Messages.ProjectAction_Errors(), label); } nbBuildsToAnalyze--; } return dataSet; }