/* * Copyright 2013 the original author or authors. * * Licensed 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.gradle.performance.results; import com.google.common.base.Joiner; import com.google.common.collect.Lists; import org.gradle.api.Transformer; import org.gradle.reporting.ReportRenderer; import java.io.IOException; import java.io.PrintWriter; import java.io.Writer; import java.util.Date; import java.util.List; public class TestDataGenerator extends ReportRenderer<PerformanceTestHistory, Writer> { protected final FormatSupport format = new FormatSupport(); @Override public void render(PerformanceTestHistory testHistory, Writer output) throws IOException { PrintWriter out = new PrintWriter(output); List<? extends PerformanceTestExecution> sortedResults = Lists.reverse(testHistory.getExecutions()); out.println("{"); out.println("\"executionLabels\": ["); for (int i = 0; i < sortedResults.size(); i++) { PerformanceTestExecution results = sortedResults.get(i); if (i > 0) { out.println(", "); } out.print("{"); out.print("\"id\": \"" + results.getExecutionId() + "\""); out.print(", \"branch\":\"" + results.getVcsBranch() + "\""); out.print(", \"date\":\"" + format.date(new Date(results.getStartTime())) + "\""); out.print(", \"commits\":[\""); out.print(Joiner.on("\",\"").join(results.getVcsCommits())); out.print("\"]"); out.print("}"); } out.println("],"); out.print("\"totalTime\":"); render(testHistory, new Transformer<String, MeasuredOperationList>() { public String transform(MeasuredOperationList original) { return format.seconds(original.getTotalTime().getMedian()); } }, out); out.println("}"); out.flush(); } void render(PerformanceTestHistory testHistory, Transformer<String, MeasuredOperationList> valueRenderer, PrintWriter out) { List<? extends PerformanceTestExecution> sortedResults = Lists.reverse(testHistory.getExecutions()); out.println(" ["); List<String> labels = testHistory.getScenarioLabels(); for (int i = 0; i < labels.size(); i++) { if (i > 0) { out.println(","); } out.println(" {"); out.println(" \"label\": \"" + labels.get(i) + "\","); out.print("\"data\": ["); boolean empty = true; for (int j = 0; j < sortedResults.size(); j++) { PerformanceTestExecution results = sortedResults.get(j); MeasuredOperationList measuredOperations = results.getScenarios().get(i); if (!measuredOperations.isEmpty()) { if (!empty) { out.print(", "); } out.print("[" + j + ", " + valueRenderer.transform(measuredOperations) + "]"); empty = false; } } out.println("]"); out.print(" }"); } out.println(); out.println("]"); } }