
com.blinkfox.stalker.output.OutputConsole Maven / Gradle / Ivy
package com.blinkfox.stalker.output;
import com.blinkfox.minitable.MiniTable;
import com.blinkfox.stalker.config.Options;
import com.blinkfox.stalker.kit.StrKit;
import com.blinkfox.stalker.result.MeasureResult;
import java.util.Arrays;
import java.util.List;
import lombok.extern.slf4j.Slf4j;
/**
* 在控制台输出结果的实现类.
*
* 控制台输出的结果示例如下:
* +----------------------------------------------------------------------------------------------------------------+
* | threads: 1000, concurrens: 100, warmups:5, runs: 5, printErrorLog: false |
* +-----------+-------+---------+---------+---------+---------+---------+----------+---------+---------------------+
* | Costs | Total | Success | Failure | Sum | Avg | Min | Max | StdDev | 95% LowerConfidence |
* +-----------+-------+---------+---------+---------+---------+---------+----------+---------+---------------------+
* | 397.15 ms | 5000 | 4968 | 32 | 23.44 s | 4.72 ms | 2.01 ms | 13.26 ms | 1.81 ms | 4.67 ms |
* +-----------+-------+---------+---------+---------+---------+---------+----------+---------+---------------------+
*
* @author blinkfox on 2019-01-11.
* @since v1.0.0
*/
@Slf4j
public class OutputConsole implements MeasureOutput {
/**
* 表头数据的数组.
*/
private static final List HEADERS = Arrays.asList("", "Costs", "Total", "Success", "Failure", "Throughput",
"Sum", "Avg", "Min", "Max", "StdDev", "95% LowerConfidence", "95% UpperConfidence");
/**
* 将测量的相关参数和统计结果等信息输出出来.
*
* @param options 测量的选项参数
* @param measureResults 多个测量统计结果的不定集合
*/
@Override
public Object output(Options options, MeasureResult... measureResults) {
// 渲染并打印结果.
String result = this.getRenderResult(options, measureResults);
log.warn("\n{}", result);
return result;
}
/**
* 获取最终需要渲染的结果.
*
* @param options 测量运行的相关选项参数
* @param measureResults 多个测量统计结果的不定集合
* @return 结果字符串
*/
private String getRenderResult(Options options, MeasureResult... measureResults) {
if (options == null || measureResults == null) {
throw new IllegalArgumentException("options or measureResult is null.");
}
// 根据options的值, 拼接title.
String title;
if (options.getDuration() != null) {
title = StrKit.join("duration: ", options.getDuration().toString(),
", concurrens: ", options.getConcurrens(), ", warmups:", options.getWarmups(),
", runs: ", options.getRuns(), ", printErrorLog: ", options.isPrintErrorLog());
} else {
title = StrKit.join("threads: ", options.getThreads(),
", concurrens: ", options.getConcurrens(), ", warmups:", options.getWarmups(),
", runs: ", options.getRuns(), ", printErrorLog: ", options.isPrintErrorLog());
}
String name = options.getName();
title = StrKit.isEmpty(name) ? title : StrKit.join("name: ", name, ", ", title);
// 拼接各个测量结果的字符串表头和内容.
MiniTable table = new MiniTable(title).addHeaders(HEADERS);
for (int i = 0, len = measureResults.length; i < len; i++) {
MeasureResult result = measureResults[i];
table.addDatas(i + 1, result.getEasyReadCosts(),
result.getTotal(), result.getSuccess(), result.getFailure(), result.getEasyReadThroughput(),
result.getEasyReadSum(), result.getEasyReadAvg(), result.getEasyReadMin(), result.getEasyReadMax(),
result.getEasyReadStdDev(), result.getEasyReadLowerConfidence(),
result.getEasyReadUpperConfidence());
}
return table.render();
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy