Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Json output format correction #121

Open
wants to merge 13 commits into
base: master
Choose a base branch
from
93 changes: 63 additions & 30 deletions src/com/oltpbenchmark/benchmarks/tpcc/JsonMetricsHelper.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.oltpbenchmark.benchmarks.tpcc.pojo.TpccRunResults;
import com.oltpbenchmark.util.LatencyMetricsUtil;
import com.oltpbenchmark.util.FileUtil;
import com.oltpbenchmark.util.LatencyMetricsUtil;
import org.apache.log4j.Logger;

import java.io.File;
Expand Down Expand Up @@ -42,11 +42,11 @@ public void setTestResults(String tpmc, String efficiency, String throughput) {
}

public void addLatency(String op, List<Integer> latencyList, List<Integer> connLatencyList) {
tpccRunResults.Latencies.add(getLatencyValueList(op, latencyList, connLatencyList));
tpccRunResults.Latencies.put(op,getLatencyValueList(null, latencyList, connLatencyList));
}

public void addFailureLatency(String op, List<Integer> latencyList, List<Integer> connLatencyList) {
tpccRunResults.FailureLatencies.add(getLatencyValueList(op, latencyList, connLatencyList));
tpccRunResults.FailureLatencies.put(op,getLatencyValueList(null, latencyList, connLatencyList));
}

public void addWorkerTaskLatency(String op, String task, List<Integer> latencyList) {
Expand All @@ -56,20 +56,20 @@ public void addWorkerTaskLatency(String op, String task, List<Integer> latencyLi
tpccRunResults.WorkerTaskLatency.get(op).add(getLatencyValueList(task, latencyList, null));
}

public void addRetry(String op, int count,int[] retryOpList) {
public void addRetry(String op, int count, int[] retryOpList) {
TpccRunResults.RetryAttemptsData retryObj = tpccRunResults.new RetryAttemptsData();
retryObj.count = count;
retryObj.retriesFailureCount = Arrays.asList(retryOpList);
tpccRunResults.RetryAttempts.put(op,retryObj);
tpccRunResults.RetryAttempts.put(op, retryObj);
}

private TpccRunResults.LatencyList getLatencyValueList(String op, List<Integer> latencyList,
private TpccRunResults.LatencyList getLatencyValueList(String task, List<Integer> latencyList,
List<Integer> connAcqLatencyList) {
DecimalFormat df = new DecimalFormat();
df.setMaximumFractionDigits(2);
df.setGroupingUsed(false);
TpccRunResults.LatencyList valueList = tpccRunResults.new LatencyList();
valueList.Transaction = op;
valueList.WorkerTask = task;
valueList.Count = latencyList.size();
valueList.avgLatency = Double.parseDouble(df.format(LatencyMetricsUtil.getAverageLatency(latencyList)));
valueList.P99Latency = Double.parseDouble(df.format(LatencyMetricsUtil.getP99Latency(latencyList)));
Expand All @@ -79,6 +79,7 @@ private TpccRunResults.LatencyList getLatencyValueList(String op, List<Integer>
return valueList;
}


/* Writes the Json object to a JSON file */
public void writeMetricsToJSONFile() {
String outputDirectory = "results/json";
Expand Down Expand Up @@ -136,6 +137,7 @@ public static void mergeJsonResults(String dirPath) {
int numNewOrder = 0;

int filesMergedIdx = 0;
boolean firstFile = true;
for (TpccRunResults tpccResult : listTpccRunResults) {

if(filesMergedIdx == 0) {
Expand All @@ -152,21 +154,30 @@ public static void mergeJsonResults(String dirPath) {
tpccResult.Results.throughput, filesMergedIdx);
}


List<TpccRunResults.LatencyList> latList = tpccResult.Latencies;
for (int i = 0; i < latList.size() ; i++) {
TpccRunResults.LatencyList opLatency = latList.get(i);
Map<String, TpccRunResults.LatencyList> latList = tpccResult.Latencies;
for (Map.Entry<String, TpccRunResults.LatencyList> entry : latList.entrySet()) {
String op = entry.getKey();
TpccRunResults.LatencyList opLatency = entry.getValue();
TpccRunResults.LatencyList latency;
if(opLatency.Transaction.equalsIgnoreCase("NewOrder"))
if (op.equalsIgnoreCase("NewOrder"))
numNewOrder += opLatency.Count;
if(filesMergedIdx == 0) {
latency = opLatency;
latency.minLatency = latency.maxLatency = latency.avgLatency;
latency.maxConnAcqLatency = latency.minConnAcqLatency = latency.connectionAcqLatency;
mergedTpccResults.Latencies.add(latency);

if (!mergedTpccResults.Latencies.containsKey(op)) {
latency = mergedTpccResults.new LatencyList();
latency.avgLatency = opLatency.avgLatency;
latency.minLatency = opLatency.avgLatency;
latency.maxLatency = opLatency.avgLatency;
latency.P99Latency = opLatency.P99Latency;
latency.connectionAcqLatency = opLatency.connectionAcqLatency;
latency.minConnAcqLatency = opLatency.connectionAcqLatency;
latency.maxConnAcqLatency = opLatency.connectionAcqLatency;
mergedTpccResults.Latencies.put(op,latency);
} else {
latency = mergedTpccResults.Latencies.get(i);
latency.Count += opLatency.Count;
latency = mergedTpccResults.Latencies.get(op);
latency.avgLatency = computeAverage(latency.avgLatency,
opLatency.avgLatency, filesMergedIdx);
latency.connectionAcqLatency = computeAverage(latency.connectionAcqLatency,
opLatency.connectionAcqLatency, filesMergedIdx);
latency.minLatency = latency.minLatency > opLatency.avgLatency ?
opLatency.avgLatency : latency.minLatency;
latency.maxLatency = latency.maxLatency < opLatency.avgLatency ?
Expand All @@ -181,20 +192,26 @@ public static void mergeJsonResults(String dirPath) {
latency.connectionAcqLatency = computeAverage(latency.connectionAcqLatency,
opLatency.connectionAcqLatency, filesMergedIdx);
}
mergedTpccResults.Latencies.set(i, latency);
latency.Count += opLatency.Count;
mergedTpccResults.Latencies.put(op, latency);

}

List<TpccRunResults.LatencyList> failureLatList = tpccResult.FailureLatencies;
for (int i = 0; i < failureLatList.size() ; i++) {
TpccRunResults.LatencyList opLatency = failureLatList.get(i);
Map<String, TpccRunResults.LatencyList> failureLatList = tpccResult.FailureLatencies;
for (Map.Entry<String, TpccRunResults.LatencyList> entry : failureLatList.entrySet()) {
String op = entry.getKey();
TpccRunResults.LatencyList opLatency = entry.getValue();
TpccRunResults.LatencyList failureLat;
if (filesMergedIdx == 0) {
failureLat = opLatency;
failureLat.minConnAcqLatency = failureLat.maxConnAcqLatency = opLatency.connectionAcqLatency;
failureLat.minLatency = failureLat.maxLatency = opLatency.avgLatency;
mergedTpccResults.FailureLatencies.add(failureLat);
if (mergedTpccResults.FailureLatencies.containsKey(op)) {
failureLat = mergedTpccResults.new LatencyList();
failureLat.minLatency = opLatency.avgLatency;
failureLat.maxLatency = opLatency.avgLatency;
failureLat.P99Latency = opLatency.P99Latency;
failureLat.minConnAcqLatency = opLatency.connectionAcqLatency;
failureLat.maxConnAcqLatency = opLatency.connectionAcqLatency;
mergedTpccResults.FailureLatencies.put(op, failureLat);
} else {
failureLat = mergedTpccResults.FailureLatencies.get(i);
failureLat = mergedTpccResults.FailureLatencies.get(op);
failureLat.minLatency = failureLat.minLatency > opLatency.avgLatency ?
opLatency.avgLatency : failureLat.minLatency;
failureLat.maxLatency = failureLat.maxLatency < opLatency.avgLatency ?
Expand All @@ -210,7 +227,17 @@ public static void mergeJsonResults(String dirPath) {
failureLat.connectionAcqLatency = computeAverage(failureLat.connectionAcqLatency,
opLatency.connectionAcqLatency, filesMergedIdx);
}
mergedTpccResults.FailureLatencies.set(i, failureLat);

failureLat.Count += opLatency.Count;
if (failureLat.avgLatency != null) {
failureLat.avgLatency = computeAverage(failureLat.avgLatency,
opLatency.avgLatency, filesMergedIdx);
} else failureLat.avgLatency = opLatency.avgLatency;
if (failureLat.connectionAcqLatency != null) {
failureLat.connectionAcqLatency = computeAverage(failureLat.connectionAcqLatency,
opLatency.connectionAcqLatency, filesMergedIdx);
} else failureLat.connectionAcqLatency = opLatency.connectionAcqLatency;
mergedTpccResults.FailureLatencies.put(op, failureLat);
}

Map<String, TpccRunResults.RetryAttemptsData> retryAttempts = tpccResult.RetryAttempts;
Expand Down Expand Up @@ -242,8 +269,14 @@ public static void mergeJsonResults(String dirPath) {
double tpmc = 1.0 * numNewOrder * 60 / mergedTpccResults.TestConfiguration.runTimeInSecs;
mergedTpccResults.Results.efficiency = 1.0 * tpmc * 100 / mergedTpccResults.TestConfiguration.totalWarehouses / 12.86;
mergedTpccResults.Results.tpmc = tpmc;
if (mergedTpccResults.RetryAttempts.size() == 0) mergedTpccResults.RetryAttempts = null;
if (mergedTpccResults.WorkerTaskLatency.size() == 0)
mergedTpccResults.WorkerTaskLatency = null;

jsonHelper.writeMetricsToJSONFile();
}

public static void main(String[] args) {
mergeJsonResults(args[0]);
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package com.oltpbenchmark.benchmarks.tpcc.pojo;

import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
Expand All @@ -11,19 +10,19 @@ public class TpccRunResults {

public RunResults Results = new RunResults();

public List<LatencyList> Latencies = new ArrayList<>();
public Map<String, LatencyList> Latencies = new LinkedHashMap<>();

public List<LatencyList> FailureLatencies = new ArrayList<>();
public Map<String, LatencyList> FailureLatencies = new LinkedHashMap<>();

public Map<String, List<LatencyList>> WorkerTaskLatency = new LinkedHashMap<>();

public Map<String, RetryAttemptsData> RetryAttempts = new LinkedHashMap<>();

public class LatencyList {
public String Transaction;
public String WorkerTask;
public int Count;
public Double minLatency;
public Double avgLatency;
public Double minLatency;
public Double maxLatency;
public Double P99Latency;
public Double connectionAcqLatency;
Expand Down