@Override public Object getState() { LOG.debug("Getting metrics for server on port {}", port); HashMap<String, Object> ret = new HashMap<>(); ret.put("dequeuedMessages", messagesDequeued.getAndSet(0)); HashMap<String, Integer> enqueued = new HashMap<>(); Iterator<Map.Entry<String, AtomicInteger>> it = messagesEnqueued.entrySet().iterator(); while (it.hasNext()) { Map.Entry<String, AtomicInteger> ent = it.next(); //Yes we can delete something that is not 0 because of races, but that is OK for metrics AtomicInteger i = ent.getValue(); if (i.get() == 0) { it.remove(); } else { enqueued.put(ent.getKey(), i.getAndSet(0)); } } ret.put("enqueued", enqueued); // Report messageSizes metric, if enabled (non-null). if (cb instanceof IMetric) { Object metrics = ((IMetric) cb).getValueAndReset(); if (metrics instanceof Map) { ret.put("messageBytes", metrics); } } return ret; }
for (Map.Entry<String, IMetric> entry : nameToRegistry.entrySet()) { IMetric metric = entry.getValue(); Object value = metric.getValueAndReset(); if (value != null) { IMetricsConsumer.DataPoint dataPoint = new IMetricsConsumer.DataPoint(entry.getKey(), value);
@Override public Object getValueAndReset() { return delegate.getValueAndReset(); } }
private Number fetchResult(IMetric metric) { return metric == null ? null : (Number) metric.getValueAndReset(); }
@Test public void testMetricsUpdateOnMetricsDisabled() { CustomTopologyContext context = new CustomTopologyContext(); CustomCollector collector = new CustomCollector(); TestQueryBolt bolt = new TestQueryBolt(new BulletStormConfig()); ComponentUtils.prepare(new HashMap<>(), bolt, context, collector); Assert.assertFalse(bolt.isMetricsEnabled()); bolt.execute(null); IMetric averager = context.getRegisteredMetricByName("foo"); IMetric counter = context.getRegisteredMetricByName("bar"); Assert.assertNull(averager.getValueAndReset()); Assert.assertEquals(counter.getValueAndReset(), 0L); }
@Test public void testMetricsUpdateOnMetricsEnabled() { CustomTopologyContext context = new CustomTopologyContext(); CustomCollector collector = new CustomCollector(); BulletStormConfig config = new BulletStormConfig(); config.set(BulletStormConfig.TOPOLOGY_METRICS_BUILT_IN_ENABLE, true); config.validate(); TestQueryBolt bolt = new TestQueryBolt(config); ComponentUtils.prepare(new HashMap<>(), bolt, context, collector); Assert.assertTrue(bolt.isMetricsEnabled()); bolt.execute(null); IMetric averager = context.getRegisteredMetricByName("foo"); IMetric counter = context.getRegisteredMetricByName("bar"); Assert.assertEquals(averager.getValueAndReset(), 1.0); Assert.assertEquals(counter.getValueAndReset(), 1L); }