Java源码示例:com.codahale.metrics.Histogram

示例1
@Override
public void report(
    SortedMap<String, Gauge> gauges,
    SortedMap<String, Counter> counters,
    SortedMap<String, Histogram> histograms,
    SortedMap<String, Meter> meters,
    SortedMap<String, Timer> timers) {
  final long now = clock.getTime() / 1000;
  final PayloadBuilder builder = new PayloadBuilder();

  builder.withMetricType(MetricType.gauge);
  gauges.forEach((metricName, metric) -> {
    builder.addGauge(prefix(metricName), now, (long) metric.getValue());
  });

  host.ifPresent(builder::withHost);
  tags.ifPresent(builder::withTags);

  client.send(builder.build());
}
 
示例2
private void reportHistogram(String name, Histogram histogram, long now) {
    if (canSkipMetric(name, histogram)) {
        return;
    }
    final Snapshot snapshot = histogram.getSnapshot();
    Map<String, Object> fields = new HashMap<String, Object>();
    fields.put("count", histogram.getCount());
    fields.put("min", snapshot.getMin());
    fields.put("max", snapshot.getMax());
    fields.put("mean", snapshot.getMean());
    fields.put("stddev", snapshot.getStdDev());
    fields.put("p50", snapshot.getMedian());
    fields.put("p75", snapshot.get75thPercentile());
    fields.put("p95", snapshot.get95thPercentile());
    fields.put("p98", snapshot.get98thPercentile());
    fields.put("p99", snapshot.get99thPercentile());
    fields.put("p999", snapshot.get999thPercentile());

    influxDb.appendPoints(
        new InfluxDbPoint(
            getMeasurementName(name),
            getTags(name),
            now,
            fields));
}
 
示例3
@Test
public void testResettingHistogram() {
    Histogram resettingHistogram = sfxMetrics.resettingHistogram("resettingHistogram");
    resettingHistogram.update(20);
    resettingHistogram.update(30);
    reporter.report();
    assertEquals(3, dbank.addDataPoints.size());
    assertEquals(2, dbank.lastValueFor(SOURCE_NAME, "resettingHistogram.count").getIntValue());
    assertEquals(20, dbank.lastValueFor(SOURCE_NAME, "resettingHistogram.min").getIntValue());
    assertEquals(30, dbank.lastValueFor(SOURCE_NAME, "resettingHistogram.max").getIntValue());
    dbank.addDataPoints.clear();
    resettingHistogram.update(25);
    reporter.report();
    assertEquals(3, dbank.addDataPoints.size());
    assertEquals(3, dbank.lastValueFor(SOURCE_NAME, "resettingHistogram.count").getIntValue());
    assertEquals(25, dbank.lastValueFor(SOURCE_NAME, "resettingHistogram.min").getIntValue());
    assertEquals(25, dbank.lastValueFor(SOURCE_NAME, "resettingHistogram.max").getIntValue());
}
 
示例4
@SuppressWarnings("rawtypes")
@Test
public void metrics2CycleIsNonDestructive() {
    metrics2Reporter.setDropwizardCounters(Collections.unmodifiableSortedMap(new TreeMap<String, Counter>()));
    metrics2Reporter.setDropwizardGauges(Collections.unmodifiableSortedMap(new TreeMap<String, Gauge>()));
    metrics2Reporter.setDropwizardHistograms(Collections.unmodifiableSortedMap(new TreeMap<String, Histogram>()));
    metrics2Reporter.setDropwizardMeters(Collections.unmodifiableSortedMap(new TreeMap<String, Meter>()));
    metrics2Reporter.setDropwizardTimers(Collections.unmodifiableSortedMap(new TreeMap<String, Timer>()));

    MetricsCollector collector = mock(MetricsCollector.class);
    MetricsRecordBuilder recordBuilder = mock(MetricsRecordBuilder.class);

    Mockito.when(collector.addRecord(recordName)).thenReturn(recordBuilder);

    metrics2Reporter.getMetrics(collector, true);
}
 
示例5
@Override
public void serialize(Histogram histogram, JsonGenerator json,
                      SerializerProvider provider) throws IOException {
    json.writeStartObject();
    final Snapshot snapshot = histogram.getSnapshot();
    json.writeNumberField("count", histogram.getCount());
    json.writeNumberField("max", snapshot.getMax());
    json.writeNumberField("mean", snapshot.getMean());
    json.writeNumberField("min", snapshot.getMin());
    json.writeNumberField("p50", snapshot.getMedian());
    json.writeNumberField("p75", snapshot.get75thPercentile());
    json.writeNumberField("p95", snapshot.get95thPercentile());
    json.writeNumberField("p98", snapshot.get98thPercentile());
    json.writeNumberField("p99", snapshot.get99thPercentile());
    json.writeNumberField("p999", snapshot.get999thPercentile());

    if (this.showSamples) {
        json.writeObjectField("values", snapshot.getValues());
    }

    json.writeNumberField("stddev", snapshot.getStdDev());
    json.writeEndObject();
}
 
示例6
@Test
public void testInit() throws StageException {

  MetricRegistry metrics = metricAggregationProcessor.getMetrics();
  SortedMap<String, Timer> timers = metrics.getTimers();

  Assert.assertEquals(5, timers.size()); // 1 each for 4 stages, 1 for pipeline

  SortedMap<String, Counter> counters = metrics.getCounters();
  Assert.assertEquals(24, counters.size()); // 4 each for 4 stages, 5 for pipeline, one each for 3 output lanes

  SortedMap<String, Meter> meters = metrics.getMeters();
  Assert.assertEquals(24, meters.size()); // 4 each for 4 stages, 5 for pipeline, one each for 3 output lanes

  SortedMap<String, Histogram> histograms = metrics.getHistograms();
  Assert.assertEquals(20, histograms.size()); // 4 each for 4 stages, 4 for pipeline
}
 
示例7
public static String printHistogram(String name, Histogram histogram) {
	StringBuilder sb = new StringBuilder();
	sb.append(String.format("              name = %s%n", name));
	sb.append(String.format("             count = %d%n", histogram.getCount()));
	Snapshot snapshot = histogram.getSnapshot();
	sb.append(String.format("               min = %d%n", snapshot.getMin()));
	sb.append(String.format("               max = %d%n", snapshot.getMax()));
	sb.append(String.format("              mean = %2.2f%n", snapshot.getMean()));
	sb.append(String.format("            stddev = %2.2f%n", snapshot.getStdDev()));
	sb.append(String.format("            median = %2.2f%n", snapshot.getMedian()));
	sb.append(String.format("              75%% <= %2.2f%n", snapshot.get75thPercentile()));
	sb.append(String.format("              95%% <= %2.2f%n", snapshot.get95thPercentile()));
	sb.append(String.format("              98%% <= %2.2f%n", snapshot.get98thPercentile()));
	sb.append(String.format("              99%% <= %2.2f%n", snapshot.get99thPercentile()));
	sb.append(String.format("            99.9%% <= %2.2f%n", snapshot.get999thPercentile()));
	return sb.toString();
}
 
示例8
@DataProvider(value = {
    "null",
    "0",
    "1",
    "2"
}, splitBy = "\\|")
@Test
public void getNamedHistogram_with_varargs_dimensions_creates_dimensioned_histogram_using_sfx_mechanisms(
    Integer numDimensions
) {
    // given
    String histogramName = UUID.randomUUID().toString();
    Pair<String, String>[] varargDims = generateVarargDimensions(numDimensions);
    List<Pair<String, String>> dimsAsList = (varargDims == null) ? null : Arrays.asList(varargDims);

    // when
    Histogram result = sfxImpl.getNamedHistogram(histogramName, varargDims);

    // then
    verifyMetricCreation(histogramBuilderMock, histogramTaggerMock, histogramName, dimsAsList, histogramMock, result);
}
 
示例9
private void notifyListenerOfRemovedMetric(
    final MetricId name, final Metric metric, final SemanticMetricRegistryListener listener
) {
    if (metric instanceof Gauge) {
        listener.onGaugeRemoved(name);
    } else if (metric instanceof Counter) {
        listener.onCounterRemoved(name);
    } else if (metric instanceof Histogram) {
        listener.onHistogramRemoved(name);
    } else if (metric instanceof Meter) {
        listener.onMeterRemoved(name);
    } else if (metric instanceof Timer) {
        listener.onTimerRemoved(name);
    } else if (metric instanceof DerivingMeter) {
        listener.onDerivingMeterRemoved(name);
    } else {
        throw new IllegalArgumentException("Unknown metric type: " + metric.getClass());
    }
}
 
示例10
@Override
protected void report(SortedMap<String, Gauge> gauges, SortedMap<String, Counter> counters,
    SortedMap<String, Histogram> histograms, SortedMap<String, Meter> meters, SortedMap<String, Timer> timers,
    Map<String, Object> tags) {

  String prefix = getMetricNamePrefix(tags);
  long timestamp = System.currentTimeMillis() / 1000l;

  try {
    for (Map.Entry<String, Gauge> gauge : gauges.entrySet()) {
      reportGauge(prefix, gauge.getKey(), gauge.getValue(), timestamp);
    }

    for (Map.Entry<String, Counter> counter : counters.entrySet()) {
      reportCounter(prefix, counter.getKey(), counter.getValue(), timestamp);
    }

    for (Map.Entry<String, Histogram> histogram : histograms.entrySet()) {
      reportHistogram(prefix, histogram.getKey(), histogram.getValue(), timestamp);
    }

    for (Map.Entry<String, Meter> meter : meters.entrySet()) {
      reportMetered(prefix, meter.getKey(), meter.getValue(), timestamp);
    }

    for (Map.Entry<String, Timer> timer : timers.entrySet()) {
      reportTimer(prefix, timer.getKey(), timer.getValue(), timestamp);
    }

    this.graphitePusher.flush();

  } catch (IOException ioe) {
    LOGGER.error("Error sending metrics to Graphite", ioe);
    try {
      this.graphitePusher.close();
    } catch (IOException innerIoe) {
      LOGGER.error("Error closing the Graphite sender", innerIoe);
    }
  }
}
 
示例11
/**
 * Creates a json object for a certain metric.
 *
 * @param metric metric object
 * @return json object
 */
private ObjectNode json(Metric metric) {
    ObjectMapper mapper = new ObjectMapper();
    ObjectNode objectNode = mapper.createObjectNode();
    ObjectNode dataNode = mapper.createObjectNode();

    if (metric instanceof Counter) {
        dataNode.put(COUNTER, ((Counter) metric).getCount());
        objectNode.set(COUNTER, dataNode);
    } else if (metric instanceof Gauge) {
        objectNode.put(VALUE, ((Gauge) metric).getValue().toString());
        objectNode.set(GAUGE, dataNode);
    } else if (metric instanceof Meter) {
        dataNode.put(COUNTER, ((Meter) metric).getCount());
        dataNode.put(MEAN_RATE, ((Meter) metric).getMeanRate());
        dataNode.put(ONE_MIN_RATE, ((Meter) metric).getOneMinuteRate());
        dataNode.put(FIVE_MIN_RATE, ((Meter) metric).getFiveMinuteRate());
        dataNode.put(FIFT_MIN_RATE, ((Meter) metric).getFifteenMinuteRate());
        objectNode.set(METER, dataNode);
    } else if (metric instanceof Histogram) {
        dataNode.put(COUNTER, ((Histogram) metric).getCount());
        dataNode.put(MEAN, ((Histogram) metric).getSnapshot().getMean());
        dataNode.put(MIN, ((Histogram) metric).getSnapshot().getMin());
        dataNode.put(MAX, ((Histogram) metric).getSnapshot().getMax());
        dataNode.put(STDDEV, ((Histogram) metric).getSnapshot().getStdDev());
        objectNode.set(HISTOGRAM, dataNode);
    } else if (metric instanceof Timer) {
        dataNode.put(COUNTER, ((Timer) metric).getCount());
        dataNode.put(MEAN_RATE, ((Timer) metric).getMeanRate());
        dataNode.put(ONE_MIN_RATE, ((Timer) metric).getOneMinuteRate());
        dataNode.put(FIVE_MIN_RATE, ((Timer) metric).getFiveMinuteRate());
        dataNode.put(FIFT_MIN_RATE, ((Timer) metric).getFifteenMinuteRate());
        dataNode.put(MEAN, nanoToMs(((Timer) metric).getSnapshot().getMean()));
        dataNode.put(MIN, nanoToMs(((Timer) metric).getSnapshot().getMin()));
        dataNode.put(MAX, nanoToMs(((Timer) metric).getSnapshot().getMax()));
        dataNode.put(STDDEV, nanoToMs(((Timer) metric).getSnapshot().getStdDev()));
        objectNode.set(TIMER, dataNode);
    }
    return objectNode;
}
 
示例12
/**
 * Test the case where all requests time out within the GetOperation.
 * @throws Exception
 */
@Test
public void testRouterRequestTimeoutAllFailure() throws Exception {
  doPut();
  GetBlobOperation op = createOperation(routerConfig, null);
  op.poll(requestRegistrationCallback);
  while (!op.isOperationComplete()) {
    time.sleep(routerConfig.routerRequestTimeoutMs + 1);
    op.poll(requestRegistrationCallback);
  }
  // At this time requests would have been created for all replicas, as none of them were delivered,
  // and cross-colo proxying is enabled by default.
  Assert.assertEquals("Must have attempted sending requests to all replicas", replicasCount,
      correlationIdToGetOperation.size());
  assertFailureAndCheckErrorCode(op, RouterErrorCode.OperationTimedOut);

  // test that timed out response won't update latency histogram if exclude timeout is enabled.
  assumeTrue(operationTrackerType.equals(AdaptiveOperationTracker.class.getSimpleName()));
  AdaptiveOperationTracker tracker = (AdaptiveOperationTracker) op.getFirstChunkOperationTrackerInUse();
  Histogram localColoTracker =
      tracker.getLatencyHistogram(RouterTestHelpers.getAnyReplica(blobId, true, localDcName));
  Histogram crossColoTracker =
      tracker.getLatencyHistogram(RouterTestHelpers.getAnyReplica(blobId, false, localDcName));
  Assert.assertEquals("Timed-out response shouldn't be counted into local colo latency histogram", 0,
      localColoTracker.getCount());
  Assert.assertEquals("Timed-out response shouldn't be counted into cross colo latency histogram", 0,
      crossColoTracker.getCount());
}
 
示例13
@Override
public void updateHistogram(String name, long count) {
    try {
        histogramLock.lock();
        Histogram histogram = histograms.get(name);
        histogram.update(count);
    } catch (ExecutionException e) {
        throw new IllegalStateException("Error retrieving meter " + name + " from the metric registry ", e);
    } finally {
        histogramLock.unlock();
    }
}
 
示例14
@SuppressWarnings("rawtypes")
@Test
public void cachedMetricsAreClearedAfterCycle() {
    // After we perform a metrics2 reporting cycle, the maps should be reset to avoid double-reporting
    TreeMap<String, Counter> counters = new TreeMap<>();
    TreeMap<String, Gauge> gauges = new TreeMap<>();
    TreeMap<String, Histogram> histograms = new TreeMap<>();
    TreeMap<String, Meter> meters = new TreeMap<>();
    TreeMap<String, Timer> timers = new TreeMap<>();

    metrics2Reporter.setDropwizardCounters(counters);
    metrics2Reporter.setDropwizardGauges(gauges);
    metrics2Reporter.setDropwizardHistograms(histograms);
    metrics2Reporter.setDropwizardMeters(meters);
    metrics2Reporter.setDropwizardTimers(timers);

    MetricsCollector collector = mock(MetricsCollector.class);
    MetricsRecordBuilder recordBuilder = mock(MetricsRecordBuilder.class);

    Mockito.when(collector.addRecord(recordName)).thenReturn(recordBuilder);

    metrics2Reporter.getMetrics(collector, true);

    assertTrue(counters != metrics2Reporter.getDropwizardCounters());
    assertEquals(0, metrics2Reporter.getDropwizardCounters().size());
    assertTrue(gauges != metrics2Reporter.getDropwizardGauges());
    assertEquals(0, metrics2Reporter.getDropwizardGauges().size());
    assertTrue(histograms != metrics2Reporter.getDropwizardHistograms());
    assertEquals(0, metrics2Reporter.getDropwizardHistograms().size());
    assertTrue(meters != metrics2Reporter.getDropwizardMeters());
    assertEquals(0, metrics2Reporter.getDropwizardMeters().size());
    assertTrue(timers != metrics2Reporter.getDropwizardTimers());
    assertEquals(0, metrics2Reporter.getDropwizardTimers().size());
}
 
示例15
public static Object getMetricValue(
  MetricElement metricElement,
  MetricType metricType,
  Metric metric
) throws ObserverException {
  Object value;
  switch (metricType) {
    case HISTOGRAM:
      value = MetricRuleEvaluatorHelper.getHistogramValue((Histogram) metric, metricElement);
      break;
    case METER:
      value = MetricRuleEvaluatorHelper.getMeterValue((ExtendedMeter) metric, metricElement);
      break;
    case COUNTER:
      value = MetricRuleEvaluatorHelper.getCounterValue((Counter) metric, metricElement);
      break;
    case TIMER:
      value = MetricRuleEvaluatorHelper.getTimerValue((Timer) metric, metricElement);
      break;
    case GAUGE:
      value = MetricRuleEvaluatorHelper.getGaugeValue((Gauge) metric, metricElement);
      break;
    default :
      throw new IllegalArgumentException(Utils.format("Unknown metric type '{}'", metricType));
  }
  return value;
}
 
示例16
/**
 * Instantiates a new Histogram dynamic metric.
 *
 * @param metricName   the metric name
 * @param metricObject the metric object
 */
public HistogramDynamicMetric(String metricName, Histogram metricObject) {
  super(metricName, metricObject);

  _attributeNameSet = new HashSet<>();
  Iterator<MBeanAttributeInfo> iter = getAttributeInfos().iterator();
  while (iter.hasNext()) {
    MBeanAttributeInfo attributeInfo = iter.next();
    _attributeNameSet.add(attributeInfo.getName());
  }
}
 
示例17
private void initMetrics() {
    //Main DB Metrics
    metrics.register(metricName("write"), new Timer(new UniformReservoir()));
    metrics.register(metricName("write.rate"), new Meter());
    metrics.register(metricName("read"), new Timer(new UniformReservoir()));
    metrics.register(metricName("read.rate"), new Meter());
    metrics.register(metricName("scan"), new Timer(new UniformReservoir()));
    metrics.register(metricName("scan.rate"), new Meter());

    //Write
    metrics.register(metricName("write.concurrentMemoryTableSerializers"), new Histogram(new UniformReservoir()));
    metrics.register(metricName("write.memoryTableSerialize"), new Timer(new UniformReservoir()));

    //Read
    metrics.register(metricName("read.tablesConsulted"), new Histogram(new UniformReservoir()));
    metrics.register(metricName("read.bloomFilterFalsePositiveRate"), new CacheHitGauge());
    metrics.register(metricName("read.recordNotFoundRate"), new CacheHitGauge());

    //FileTable
    metrics.register(metricName("table.cacheHitRate"), new CacheHitGauge());

    //Index
    metrics.register(metricName("index.searchLevels"), new Histogram(new UniformReservoir()));
    metrics.register(metricName("index.cacheHitRate"), new CacheHitGauge());

    //Compactor
    metrics.register(metricName("compactor.concurrentTasks"), new Histogram(new UniformReservoir()));
    metrics.register(metricName("compactor.taskExecution"), new Timer(new UniformReservoir()));
}
 
示例18
public static JsonObject convertMetric(Metric metric, TimeUnit rateUnit, TimeUnit durationUnit) {
  if (metric instanceof Timer) {
    return toJson((Timer) metric, rateUnit, durationUnit);
  } else if (metric instanceof Gauge) {
    return toJson((Gauge) metric);
  } else if (metric instanceof Counter) {
    return toJson((Counter) metric);
  } else if (metric instanceof Histogram) {
    return toJson((Histogram) metric);
  } else if (metric instanceof Meter) {
    return toJson((Meter) metric, rateUnit);
  } else {
    throw new IllegalArgumentException("Unknown metric " + metric);
  }
}
 
示例19
/**
 * Updates the {@code tracker} to mimic {@code numRequests} each taking {@code latency} ms.
 * @param tracker the {@link Histogram} to update
 * @param numRequests the number of requests (data points)
 * @param latencyRange the range of latencies (in ms) to generate and record.
 */
private void primeTracker(Histogram tracker, long numRequests, Pair<Long, Long> latencyRange) {
  for (long i = 0; i < numRequests; i++) {
    // Given latencyRange specifies boundaries of latency: low = latencyRange.getFirst(), high = latencyRange.getSecond().
    // Any randomly generated latency should fall in the range [low, high).
    long latency = Utils.getRandomLong(TestUtils.RANDOM, latencyRange.getSecond() - latencyRange.getFirst())
        + latencyRange.getFirst();
    tracker.update(latency);
  }
}
 
示例20
@SafeVarargs
public final @NotNull Histogram getNamedHistogram(
    @NotNull String histogramName,
    @Nullable Pair<String, String>... dimensions
) {
    return getNamedHistogram(histogramName, convertDimensionsToList(dimensions));
}
 
示例21
/** @return a summary of {@code hist}. */
public static String getHistogramReport(final Histogram hist) {
  Snapshot sn = hist.getSnapshot();
  return "mean=" + DOUBLE_FORMAT.format(sn.getMean()) +
      ", min=" + DOUBLE_FORMAT.format(sn.getMin()) +
      ", max=" + DOUBLE_FORMAT.format(sn.getMax()) +
      ", stdDev=" + DOUBLE_FORMAT.format(sn.getStdDev()) +
      ", 50th=" + DOUBLE_FORMAT.format(sn.getMedian()) +
      ", 75th=" + DOUBLE_FORMAT.format(sn.get75thPercentile()) +
      ", 95th=" + DOUBLE_FORMAT.format(sn.get95thPercentile()) +
      ", 99th=" + DOUBLE_FORMAT.format(sn.get99thPercentile()) +
      ", 99.9th=" + DOUBLE_FORMAT.format(sn.get999thPercentile()) +
      ", 99.99th=" + DOUBLE_FORMAT.format(sn.getValue(0.9999)) +
      ", 99.999th=" + DOUBLE_FORMAT.format(sn.getValue(0.99999));
}
 
示例22
@Setup(Level.Iteration)
public void setup() {
    registry = new MetricRegistry();
    histogram = registry.histogram("histogram");
    histogramSlidingTimeWindow =
            registry.register("slidingTimeWindowHistogram",
                    new Histogram(new SlidingTimeWindowReservoir(10, TimeUnit.SECONDS)));
    histogramUniform =
            registry.register("uniformHistogram",
                    new Histogram(new UniformReservoir()));
}
 
示例23
@Test
public void testHistogram() throws Exception {
  final Histogram h = metricRegistry.histogram("histo.gram");
  IntStream.range(1, 10).forEach(h::update);

  reporter.reportOnce();

  verifyHistogramStats("histo.gram", "histogram");
}
 
示例24
private void reportHistogram(MetricId key, Histogram value) {
    key = MetricId.join(prefix, key);

    final Metric m = FastForward
        .metric(key.getKey())
        .attributes(key.getTags())
        .attribute(METRIC_TYPE, "histogram");

    reportHistogram(m, value.getSnapshot());
}
 
示例25
public Histogram getHistogram(String name) {
    try {
        histogramLock.lock();
        return histograms.get(name);
    } catch (ExecutionException e) {
        throw new IllegalStateException("Error retrieving histogram " + name + " from the metric registry ", e);
    } finally {
        histogramLock.unlock();
    }
}
 
示例26
/**
 * Update the histogram (or creates it if it does not exist) for the specified key/metricName pair by the given value.
 * @param classSimpleName the simple name of the underlying class
 * @param key the key (i.e. topic or partition) for the metric
 * @param metricName the metric name
 * @param value the value to update on the histogram
 */
public void createOrUpdateHistogram(String classSimpleName, String key, String metricName, long value) {
  validateArguments(classSimpleName, metricName);
  // create and register the metric if it does not exist
  Histogram histogram = (Histogram) checkCache(classSimpleName, key, metricName).orElseGet(() -> {
    Histogram newHistogram = _metricRegistry.histogram(MetricRegistry.name(classSimpleName, key, metricName));
    updateCache(classSimpleName, key, metricName, newHistogram);
    return newHistogram;
  });
  histogram.update(value);
}
 
示例27
private static JsonObject toJson(Histogram histogram) {
  Snapshot snapshot = histogram.getSnapshot();
  JsonObject json = new JsonObject();
  json.put("type", "histogram");
  json.put("count", histogram.getCount());

  // Snapshot
  populateSnapshot(json, snapshot, 1);

  return json;
}
 
示例28
@Test
public void reportsHistograms() throws Exception {
    Histogram histogram = mock(Histogram.class);
    when(histogram.getCount()).thenReturn(1L);

    Snapshot snapshot = mock(Snapshot.class);
    when(snapshot.getMax()).thenReturn(2L);
    when(snapshot.getMean()).thenReturn(3.0);
    when(snapshot.getMin()).thenReturn(4L);
    when(snapshot.getStdDev()).thenReturn(5.0);
    when(snapshot.getMedian()).thenReturn(6.0);
    when(snapshot.get75thPercentile()).thenReturn(7.0);
    when(snapshot.get95thPercentile()).thenReturn(8.0);
    when(snapshot.get98thPercentile()).thenReturn(9.0);
    when(snapshot.get99thPercentile()).thenReturn(10.0);
    when(snapshot.get999thPercentile()).thenReturn(11.0);

    when(histogram.getSnapshot()).thenReturn(snapshot);

    reporter.report(emptyMap(), emptyMap(), map("histogram", histogram), emptyMap(), emptyMap());

    InOrder inOrder = inOrder(graphite);
    inOrder.verify(graphite).connect();
    inOrder.verify(graphite).send("prefix.histogram.count", "1", TIMESTAMP);
    inOrder.verify(graphite).send("prefix.histogram.max", "2", TIMESTAMP);
    inOrder.verify(graphite).send("prefix.histogram.mean", "3.00", TIMESTAMP);
    inOrder.verify(graphite).send("prefix.histogram.min", "4", TIMESTAMP);
    inOrder.verify(graphite).send("prefix.histogram.stddev", "5.00", TIMESTAMP);
    inOrder.verify(graphite).send("prefix.histogram.p50", "6.00", TIMESTAMP);
    inOrder.verify(graphite).send("prefix.histogram.p75", "7.00", TIMESTAMP);
    inOrder.verify(graphite).send("prefix.histogram.p95", "8.00", TIMESTAMP);
    inOrder.verify(graphite).send("prefix.histogram.p98", "9.00", TIMESTAMP);
    inOrder.verify(graphite).send("prefix.histogram.p99", "10.00", TIMESTAMP);
    inOrder.verify(graphite).send("prefix.histogram.p999", "11.00", TIMESTAMP);
    inOrder.verify(graphite).flush();
    inOrder.verify(graphite).close();

    verifyNoMoreInteractions(graphite);
}
 
示例29
@SuppressWarnings("rawtypes")
@Override
public void report(SortedMap<String, Gauge> gauges,
		SortedMap<String, Counter> counters,
		SortedMap<String, Histogram> histograms,
		SortedMap<String, Meter> meters, SortedMap<String, Timer> timers) {
	
	final Map<String, Object> result = new HashMap<String, Object>(16);
	
	result.put("hostName", hostName);
	result.put("ip", ip);
	result.put("rateUnit", getRateUnit());
	result.put("durationUnit", getDurationUnit());
	
	result.put("gauges", addPrefix(gauges));
	result.put("counters", addPrefix(counters));
	result.put("histograms", addPrefix(histograms));
	result.put("meters", addPrefix(meters));
	result.put("timers", addPrefix(timers));
	
	result.put("clock", System.currentTimeMillis());
	
	kafkaExecutor.execute(new Runnable() {
		@Override
		public void run() {
			try {
			KeyedMessage<String, String> message = new KeyedMessage<String, String>(
					topic, "" + count++, mapper.writeValueAsString(result));
				producer.send(message);
			} catch (Exception e) {
				logger.error("send metrics to kafka error!", e);
			}
		}
	});
}
 
示例30
@Test(dependsOnMethods = "testGetMetrics")
@SuppressWarnings("unchecked")
public void testGetMetricsWithFilter() {
  MetricFilter filter = new MetricFilter() {
    @Override public boolean matches(String name, Metric metric) {
      return !name.equals(MetricContext.GOBBLIN_METRICS_NOTIFICATIONS_TIMER_NAME);
    }
  };

  Map<String, Counter> counters = this.context.getCounters(filter);
  Assert.assertEquals(counters.size(), 1);
  Assert.assertTrue(
      counters.containsKey(RECORDS_PROCESSED));

  Map<String, Meter> meters = this.context.getMeters(filter);
  Assert.assertEquals(meters.size(), 1);
  Assert.assertTrue(
      meters.containsKey(RECORD_PROCESS_RATE));

  Map<String, Histogram> histograms = this.context.getHistograms(filter);
  Assert.assertEquals(histograms.size(), 1);
  Assert.assertTrue(
      histograms.containsKey(RECORD_SIZE_DISTRIBUTION));

  Map<String, Timer> timers = this.context.getTimers(filter);
  Assert.assertEquals(timers.size(), 1);
  Assert.assertTrue(timers.containsKey(TOTAL_DURATION));

  Map<String, Gauge> gauges = this.context.getGauges(filter);
  Assert.assertEquals(gauges.size(), 1);
  Assert.assertTrue(gauges.containsKey(QUEUE_SIZE));
}