public static void main()

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();
    }
  }