diff --git a/utilities/load-testing/src/edu/cornell/mannlib/vitro/utilities/loadtesting/OutputMarshaller2.java b/utilities/load-testing/src/edu/cornell/mannlib/vitro/utilities/loadtesting/OutputMarshaller2.java new file mode 100644 index 00000000..d9339698 --- /dev/null +++ b/utilities/load-testing/src/edu/cornell/mannlib/vitro/utilities/loadtesting/OutputMarshaller2.java @@ -0,0 +1,177 @@ +/* $This file is distributed under the terms of the license in /doc/license.txt$ */ + +package edu.cornell.mannlib.vitro.utilities.loadtesting; + +import java.io.PrintWriter; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.Set; +import java.util.TreeSet; + +/** + * Write the merged data to an HTML page. + * + * This version assumes that there are three files, and that they are 1.1.1, RDB + * and SDB, in that order. It compares the SDB results to the others. + */ +public class OutputMarshaller2 { + private final List reportData; + private final List columnsToCompare; + private final TestResultsFileData columnToCompareAgainst; + private final int howManyToCompare; + private final PrintWriter w; + private final List testNames; + + public OutputMarshaller2(List reportData, PrintWriter w) { + this.reportData = reportData; + this.howManyToCompare = reportData.size() - 1; + this.columnsToCompare = reportData.subList(0, howManyToCompare); + this.columnToCompareAgainst = reportData.get(howManyToCompare); + + this.w = w; + this.testNames = assembleListOfTestNames(); + } + + public void marshall() { + writePageHeader(); + writeTestDataTable(); + writePageFooter(); + } + + private List assembleListOfTestNames() { + Set names = new TreeSet(); + for (TestResultsFileData filedata : reportData) { + names.addAll(filedata.getTestMap().keySet()); + } + return new ArrayList(names); + } + + private void writePageHeader() { + w.println(""); + w.println(""); + w.println(" "); + w.println(""); + w.println(""); + } + + private void writeTestDataTable() { + w.println(""); + writeTestDataHeader(); + for (String testName : testNames) { + writeTestDataRow(testName); + } + w.println("
"); + } + + private void writeTestDataHeader() { + // header first row + w.println(" "); + w.println("  "); + for (TestResultsFileData fileData : reportData) { + w.println(" " + fileData.getVivoVersion() + + "
" + fileData.getResultsFilename() + "
" + + formatDate(fileData.getCreated()) + ""); + } + w.println(" performance ratios"); + w.println(" "); + + // header second row + w.println(" "); + w.println(" Test Name"); + for (int i = 0; i < reportData.size(); i++) { + w.println(" iterations"); + w.println(" time (min/max)"); + } + for (int i = 0; i < howManyToCompare; i++) { + switch (i) { + case 0: + w.println(" vs 1.1.1"); + break; + case 1: + w.println(" vs RDB"); + break; + default: + w.println("  "); + break; + } + } + w.println(" "); + } + + private void writeTestDataRow(String testName) { + w.println(" "); + w.println(" " + testName + ""); + for (TestResultsFileData fileData : reportData) { + writeTestDataCellForFile(fileData, testName); + } + for (TestResultsFileData fileData : columnsToCompare) { + writeComparisonDataCell(fileData, testName); + } + w.println(" "); + } + + private void writeTestDataCellForFile(TestResultsFileData fileData, + String testName) { + TestResultInfo testData = fileData.getTestMap().get(testName); + + String count = (testData == null) ? " " : ("" + testData + .getCount()); + String averageTime = (testData == null) ? " " + : ("" + formatTime(testData.getAverageTime())); + String minTime = (testData == null) ? " " + : ("" + formatTime(testData.getMinTime())); + String maxTime = (testData == null) ? " " + : ("" + formatTime(testData.getMaxTime())); + + w.println(" " + count + ""); + w.println(" "); + w.println(" "); + w.println(" "); + w.println(" "); + w.println(" "); + w.println(" "); + w.println(" "); + w.println(" "); + w.println(" "); + w.println("
" + averageTime + "" + minTime + "
" + maxTime + "
"); + w.println(" "); + } + + private void writeComparisonDataCell(TestResultsFileData fileData, + String testName) { + TestResultInfo testData = fileData.getTestMap().get(testName); + TestResultInfo baselineTestData = columnToCompareAgainst.getTestMap() + .get(testName); + + String ratioWithBaseline = " "; + if ((testData != null) && (baselineTestData != null)) { + ratioWithBaseline = percentage(baselineTestData.getAverageTime(), + testData.getAverageTime()); + } + + w.println(" " + ratioWithBaseline + ""); + } + + private String percentage(float value, float baseline) { + float ratio = value / baseline; + return String.format("%1$8.2f%%", ratio * 100.0); + } + + public String formatTime(float time) { + return String.format("%1$8.3f", time); + } + + public String formatDate(long date) { + return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss") + .format(new Date(date)); + } + + private void writePageFooter() { + w.println(""); + w.println(""); + } + +} diff --git a/utilities/load-testing/src/edu/cornell/mannlib/vitro/utilities/loadtesting/ReportsMerger.java b/utilities/load-testing/src/edu/cornell/mannlib/vitro/utilities/loadtesting/ReportsMerger.java index 16008b9d..af9fd4fb 100644 --- a/utilities/load-testing/src/edu/cornell/mannlib/vitro/utilities/loadtesting/ReportsMerger.java +++ b/utilities/load-testing/src/edu/cornell/mannlib/vitro/utilities/loadtesting/ReportsMerger.java @@ -51,7 +51,7 @@ public class ReportsMerger { private void produceOutput() { PrintWriter writer = parms.getOutputWriter(); - new OutputMarshaller(reportData, writer).marshall(); + new OutputMarshaller2(reportData, writer).marshall(); writer.flush(); writer.close(); }