public String format() { double[] deciles = computeDeciles(); StringBuilder result = new StringBuilder(); // Compute median double median = numValues == 0 ? 0 : deciles[4]; // Compute 90% percentile double ninetiethPercentile = numValues == 0 ? 0 : deciles[8]; result.append(formatDouble(getMean())); result.append(" / "); result.append(formatDouble(median)); result.append(" / "); result.append(formatDouble(ninetiethPercentile)); result.append(" ms"); return result.toString(); }
public DoublePopulationStatisticsAggregator() { clear(); }
public static double getSortedPopulationDecile(double[] population, int decile, int endIndex) { return getInterpolatedValueAtIndex(population, getDecileIndex(endIndex, decile)); }
public static String formatPopulationStatistics(String title, DoublePopulationStatisticsAggregator populationStatistics) { if (populationStatistics == null) { return "-"; } else { double[] deciles = populationStatistics.computeDeciles(); StringBuilder tooltipContent = new StringBuilder(); tooltipContent.append("<table>"); addBar(tooltipContent, "min", populationStatistics.getMinimum(), populationStatistics.getMaximum(), "ms"); for (int i = 0; i < 9; ++i) { addBar(tooltipContent, ((i + 1) * 10) + "%", deciles[i], populationStatistics.getMaximum(), "ms"); } addBar(tooltipContent, "max", populationStatistics.getMaximum(), populationStatistics.getMaximum(), "ms"); tooltipContent.append("</table>"); return htmlTooltip(populationStatistics.format(), title, tooltipContent.toString()); } }
private static void addBar(StringBuilder content, String label, Double value, Double maximum, String unit) { if (value == null) { value = 0.0; } if (maximum == null) { maximum = 0.0; } long size = 0; if (maximum != 0) { size = Math.round(BAR_SIZE * (Math.log(1 + value) / Math.log(1 + maximum))); } if (size < 1) { size = 1; } content.append("<tr><td>"); content.append(label); content.append("</td><td>"); content.append("<div class='tooltipBar' style='width: " + size + "px;'></div>"); content.append("</td><td>"); content.append(DoublePopulationStatisticsAggregator.formatDouble(value)); content.append(unit); content.append("</td></tr>"); }
populationStatistics = new DoublePopulationStatisticsAggregator(); populationStatistics.aggregate(minDuration, maxDuration, count, totalDuration, durations);
public LatencySampleSummary getStatistics(){ LatencySampleSummary summary = new LatencySampleSummary(); summary.set_minimum(minimum); summary.set_maximum(maximum); summary.set_num_values(numValues); summary.set_total(total); List<Double> deciles = Lists.newArrayList(); for (double v : computeDeciles()) { deciles.add(v); } summary.set_deciles(deciles); return summary; }
public RuntimeStatisticsAggregator() { throughputTotal = 0; responseDataThroughputTotal = 0; numRequestsTotal = 0; numHitsTotal = 0; numL1CacheHitsTotal = 0; numL2CacheHitsTotal = 0; getRequestsPopulationStatistics = new DoublePopulationStatisticsAggregator(); cacheStatisticsTotal = new CacheStatistics(0, 0, 0, 0); }
public static RuntimeStatisticsAggregator combine(Collection<RuntimeStatisticsAggregator> runtimeStatisticsAggregators) { RuntimeStatisticsAggregator result = new RuntimeStatisticsAggregator(); List<DoublePopulationStatisticsAggregator> doublePopulationStatisticsAggregators = new ArrayList<DoublePopulationStatisticsAggregator>(runtimeStatisticsAggregators.size()); for (RuntimeStatisticsAggregator runtimeStatisticsAggregator : runtimeStatisticsAggregators) { result.throughputTotal += runtimeStatisticsAggregator.throughputTotal; result.responseDataThroughputTotal += runtimeStatisticsAggregator.responseDataThroughputTotal; result.numRequestsTotal += runtimeStatisticsAggregator.numRequestsTotal; result.numHitsTotal += runtimeStatisticsAggregator.numHitsTotal; result.numL1CacheHitsTotal += runtimeStatisticsAggregator.numL1CacheHitsTotal; result.numL2CacheHitsTotal += runtimeStatisticsAggregator.numL2CacheHitsTotal; doublePopulationStatisticsAggregators.add(runtimeStatisticsAggregator.getRequestsPopulationStatistics); result.cacheStatisticsTotal.add(runtimeStatisticsAggregator.cacheStatisticsTotal); } result.getRequestsPopulationStatistics = DoublePopulationStatisticsAggregator.combine(doublePopulationStatisticsAggregators); return result; }
/** * @param name * @param statsComputationWindow Number of timers to aggregate before computing and * logging statistics. 0 means no timer aggregation. */ public HankTimerEventAggregator(String name, int statsComputationWindow) { this.name = name; this.statsComputationWindow = statsComputationWindow; this.isActive = statsComputationWindow != 0; this.populationStatistics = null; this.previousPopulationStatistics = new DoublePopulationStatisticsAggregator(); this.durations = new double[statsComputationWindow]; clear(); }
public static double getSortedPopulationDecile(long[] population, int decile) { return getInterpolatedValueAtIndex(population, getDecileIndex(population.length, decile)); }
public static DoublePopulationStatisticsAggregator combine(Collection<DoublePopulationStatisticsAggregator> aggregators) { Random random = new Random(); DoublePopulationStatisticsAggregator result = new DoublePopulationStatisticsAggregator(); for (DoublePopulationStatisticsAggregator aggregator : aggregators) { if (aggregator.maximum > result.maximum) { result.maximum = aggregator.maximum; } if (aggregator.minimum < result.minimum) { result.minimum = aggregator.minimum; } result.numValues += aggregator.numValues; result.total += aggregator.total; } // Now we can create a stream of values based on a // random sample of the aggregators reservoirs but // with the number of values in their streams a weight // and reservoir sample that. This assumes that all given reservoirs // have the same size. for (DoublePopulationStatisticsAggregator aggregator : aggregators) { double ratio = (double) aggregator.numValues / (double) result.numValues; for (double value : aggregator.reservoirSample.getReservoir()) { if ((Math.abs(random.nextDouble()) / Double.MAX_VALUE) < ratio) { result.reservoirSample.sample(value, random); } } } return result; }
public static double getSortedPopulationDecile(long[] population, int decile, int endIndex) { return getInterpolatedValueAtIndex(population, getDecileIndex(endIndex, decile)); }
randomSample[i] = Double.parseDouble(tokens[14 + i]); DoublePopulationStatisticsAggregator getRequestsPopulationStatistics = new DoublePopulationStatisticsAggregator( Double.parseDouble(tokens[10]), Double.parseDouble(tokens[11]),
public static double getSortedPopulationDecile(double[] population, int decile) { return getInterpolatedValueAtIndex(population, getDecileIndex(population.length, decile)); }