in shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/common/file/jmeter/BenchmarkResultParser.java [18:79]
public static Map benchmarkStatistic(String filePath, int skipBegin, int skipEnd) {
int failCount = 0;
int successCount = 0;
FileInputStream fileStream = null;
Map result = new HashMap(1,1);
List jMeterCostsList = new ArrayList<>(10);
List jMeterTimeList = new ArrayList<>(10);
if (new File(filePath).exists()) {
try {
int totalCount = 0;
fileStream = new FileInputStream(filePath);
InputStreamReader readStream = new InputStreamReader(fileStream);
BufferedReader reader = new BufferedReader(readStream);
String eachJMeterResult = "";
while ((eachJMeterResult = reader.readLine()) != null) {
totalCount = totalCount + 1;
if (totalCount > skipBegin && totalCount < skipEnd) {
Map eachPerformanceInfo = BenchmarkResultRowParser.convertResult(eachJMeterResult);
jMeterCostsList.add(eachPerformanceInfo.get("jMeterCost"));
jMeterTimeList.add(eachPerformanceInfo.get("jMeterTime"));
if ("true".equals(eachPerformanceInfo.get("isJMeterSuccess"))) {
successCount = successCount + 1;
} else {
failCount = failCount + 1;
}
}
}
if (jMeterCostsList.size() > 0) {
int concurrentCount = jMeterCostsList.size();
double startTime = Double.valueOf((Double) jMeterTimeList.get(0)).doubleValue();
double endTime = Double.valueOf((Double) jMeterTimeList.get(concurrentCount - 1)).doubleValue();
double totalTimeCost = (endTime - startTime) / 1000;
double benchmarkTps = concurrentCount / totalTimeCost;
if (filePath.contains("insertupdatedelete")) {
benchmarkTps = benchmarkTps * 4;
}
Collections.sort(jMeterCostsList);
int tp50thIndex = (int) 0.5 * jMeterCostsList.size();
double tp50th = Double.valueOf((Double) jMeterCostsList.get(tp50thIndex)).doubleValue();
int tp90thIndex = (int) 0.9 * jMeterCostsList.size();
double tp90th = Double.valueOf((Double) jMeterCostsList.get(tp90thIndex)).doubleValue();
int tp95thIndex = (int) 0.95 * jMeterCostsList.size();
double tp95th = Double.valueOf((Double) jMeterCostsList.get(tp95thIndex)).doubleValue();
double maxCost = Double.valueOf((Double) jMeterCostsList.get(concurrentCount - 1)).doubleValue();
double minCost = Double.valueOf((Double) jMeterCostsList.get(0)).doubleValue();
result.put("tps", benchmarkTps);
result.put("total", concurrentCount);
result.put("tp50th", tp50th);
result.put("tp90th", tp90th);
result.put("tp95th", tp95th);
result.put("maxCost", maxCost);
result.put("minCost", minCost);
}
} catch (FileNotFoundException ex) {
ex.printStackTrace();
} catch (IOException ex) {
ex.printStackTrace();
}
}
return result;
}