private String tsvMetrics()

in dbeam-core/src/main/java/com/spotify/dbeam/jobs/BenchJdbcAvroJob.java [80:129]


  private String tsvMetrics() {
    final List<String> columns =
        newArrayList(
            "recordCount", "writeElapsedMs", "msPerMillionRows", "bytesWritten", "KbWritePerSec");
    final Collector<CharSequence, ?, String> tabJoining = Collectors.joining("\t");
    final Stream<String> lines =
        IntStream.range(0, this.metrics.size())
            .mapToObj(
                i ->
                    String.format(
                        "run_%02d  \t%s",
                        i,
                        columns.stream()
                            .map(
                                c ->
                                    String.format(
                                        "% 10d",
                                        Optional.of(this.metrics.get(i).get(c)).orElse(0L)))
                            .collect(tabJoining)));
    final List<Stats> stats =
        columns.stream()
            .map(
                c ->
                    Stats.of(
                        (Iterable<Long>)
                            this.metrics.stream().map(m -> Optional.of(m.get(c)).orElse(0L))
                                ::iterator))
            .collect(Collectors.toList());
    final Map<String, Function<Stats, Double>> relevantStats =
        ImmutableMap.of(
            "max     ", Stats::max,
            "mean    ", Stats::mean,
            "min     ", Stats::min,
            "stddev  ", Stats::populationStandardDeviation);
    final Stream<String> statsSummary =
        relevantStats.entrySet().stream()
            .map(
                e ->
                    String.format(
                        "%s\t%s",
                        e.getKey(),
                        stats.stream()
                            .map(e.getValue())
                            .map(v -> String.format("% 10.1f", v))
                            .collect(tabJoining)));
    return String.format(
        "name    \t%12s\n%s",
        String.join("\t", columns),
        Stream.concat(lines, statsSummary).collect(Collectors.joining("\n")));
  }