in metron-stellar/stellar-common/src/main/java/org/apache/metron/stellar/common/benchmark/StellarMicrobenchmark.java [220:279]
public static void main(String... argv) throws IOException {
CommandLine cli = BenchmarkOptions.parse(new PosixParser(), argv);
if(!BenchmarkOptions.EXPRESSIONS.has(cli)) {
throw new IllegalStateException("You must at least specify an expressions file.");
}
File expressionsFile = new File(BenchmarkOptions.EXPRESSIONS.get(cli));
Optional<File> variablesFile = Optional.ofNullable(!BenchmarkOptions.VARIABLES.has(cli)
?null
:new File(BenchmarkOptions.VARIABLES.get(cli))
);
Optional<File> output = Optional.ofNullable(!BenchmarkOptions.OUTPUT.has(cli)
?null
:new File(BenchmarkOptions.OUTPUT.get(cli))
);
List<String> lines = Files.readLines(expressionsFile, Charset.defaultCharset());
Map<String, Object> variables = new HashMap<>();
if (variablesFile.isPresent()) {
variables = JSONUtils.INSTANCE.load(new FileInputStream(variablesFile.get()), JSONUtils.MAP_SUPPLIER);
}
int numTimes = DEFAULT_NUM_TIMES;
if (BenchmarkOptions.NUM_TIMES.has(cli)) {
numTimes = Integer.parseInt(BenchmarkOptions.NUM_TIMES.get(cli));
}
int warmup = DEFAULT_WARMUP;
if (BenchmarkOptions.WARMUP.has(cli)) {
warmup = Integer.parseInt(BenchmarkOptions.WARMUP.get(cli));
}
Double[] percentiles = DEFAULT_PERCENTILES;
if (BenchmarkOptions.PERCENTILES.has(cli)) {
List<Double> percentileList = new ArrayList<>();
for (String token : Splitter.on(",").split(BenchmarkOptions.PERCENTILES.get(cli))) {
if (token.trim().isEmpty()) {
continue;
}
Double d = Double.parseDouble(token.trim());
percentileList.add(d);
}
percentiles = (Double[])percentileList.toArray();
}
PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(System.out, StandardCharsets.UTF_8)));
if (output.isPresent()) {
out = new PrintWriter(output.get(), StandardCharsets.UTF_8.name());
}
for (String statement : lines) {
if (statement.trim().startsWith("#") || statement.trim().isEmpty()) {
continue;
}
Microbenchmark.StellarStatement s = new Microbenchmark.StellarStatement();
s.context = Context.EMPTY_CONTEXT();
s.expression = statement;
s.functionResolver = StellarFunctions.FUNCTION_RESOLVER();
s.variableResolver = new MapVariableResolver(variables);
DescriptiveStatistics stats = Microbenchmark.run(s, warmup, numTimes);
out.println("Expression: " + statement);
out.println(Microbenchmark.describe(stats, percentiles));
}
if (argv.length > 2) {
out.close();
}
}