@Override public void run() { synchronized (parent) { final MetricsCollectorImpl mc = new MetricsCollectorImpl(); final MetricsRecordBuilder rb = mc.addRecord("RatesRoller"); /** * snapshot all metrics regardless of being changed or not, in case no * ops since last snapshot, we will get 0. */ parent.innerMetrics.snapshot(rb, true); Preconditions.checkState(mc.getRecords().size() == 1, "There must be only one record and it's named with 'RatesRoller'"); parent.currentSnapshot = parent.innerMetrics.getGlobalMetrics(); parent.rollOverAvgs(); } parent.setChanged(); } }
Iterable<MetricsRecordImpl> getMetrics(MetricsCollectorImpl builder, boolean all) { builder.setRecordFilter(recordFilter).setMetricFilter(metricFilter); try { source.getMetrics(builder, all); } catch (Exception e) { LOG.error("Error getting metrics from source "+ name, e); } for (MetricsRecordBuilderImpl rb : builder) { for (MetricsTag t : injectedTags) { rb.add(t); } } return builder.getRecords(); }
/** * Sample all the sources for a snapshot of metrics/tags * @return the metrics buffer containing the snapshot */ @VisibleForTesting public synchronized MetricsBuffer sampleMetrics() { collector.clear(); MetricsBufferBuilder bufferBuilder = new MetricsBufferBuilder(); for (Entry<String, MetricsSourceAdapter> entry : sources.entrySet()) { if (sourceFilter == null || sourceFilter.accepts(entry.getKey())) { snapshotMetrics(entry.getValue(), bufferBuilder); } } if (publishSelfMetrics) { snapshotMetrics(sysSource, bufferBuilder); } MetricsBuffer buffer = bufferBuilder.get(); return buffer; }
@Test public void recordBuilderShouldNoOpIfFiltered() { SubsetConfiguration fc = new ConfigBuilder() .add("p.exclude", "foo").subset("p"); MetricsCollectorImpl mb = new MetricsCollectorImpl(); mb.setRecordFilter(newGlobFilter(fc)); MetricsRecordBuilderImpl rb = mb.addRecord("foo"); rb.tag(info("foo", ""), "value").addGauge(info("g0", ""), 1); assertEquals("no tags", 0, rb.tags().size()); assertEquals("no metrics", 0, rb.metrics().size()); assertNull("null record", rb.getRecord()); assertEquals("no records", 0, mb.getRecords().size()); }
private void checkSchedulingPolicy(String queueName, String policy) { MetricsSource queueSource = TestQueueMetrics.queueSource(ms, queueName); MetricsCollectorImpl collector = new MetricsCollectorImpl(); queueSource.getMetrics(collector, true); MetricsRecords.assertTag(collector.getRecords().get(0), "SchedulingPolicy", policy); } }
/** * Construct the metrics system * @param prefix for the system */ public MetricsSystemImpl(String prefix) { this.prefix = prefix; allSources = Maps.newHashMap(); sources = Maps.newLinkedHashMap(); allSinks = Maps.newHashMap(); sinks = Maps.newLinkedHashMap(); sourceConfigs = Maps.newHashMap(); sinkConfigs = Maps.newHashMap(); callbacks = Lists.newArrayList(); namedCallbacks = Maps.newHashMap(); injectedTags = Lists.newArrayList(); collector = new MetricsCollectorImpl(); if (prefix != null) { // prefix could be null for default ctor, which requires init later initSystemMBean(); } }
@Test public void testPerMetricFiltering() { SubsetConfiguration fc = new ConfigBuilder() .add("p.exclude", "foo").subset("p"); MetricsCollectorImpl mb = new MetricsCollectorImpl(); mb.setMetricFilter(newGlobFilter(fc)); MetricsRecordBuilderImpl rb = mb.addRecord("foo"); rb.tag(info("foo", ""), "").addCounter(info("c0", ""), 0) .addGauge(info("foo", ""), 1); assertEquals("1 tag", 1, rb.tags().size()); assertEquals("1 metric", 1, rb.metrics().size()); assertEquals("expect foo tag", "foo", rb.tags().get(0).name()); assertEquals("expect c0", "c0", rb.metrics().get(0).name()); } }
static MetricsRecordBuilderImpl builder(String name) { return new MetricsCollectorImpl().addRecord(name); } }
@Override public void editSchedule() { collector.clear(); queueMetrics.getMetrics(collector, false); jvmMetrics.getMetrics(collector, false); for (MetricsRecord record : collector.getRecords()) { for (AbstractMetric am : record.metrics()) { bindings.put(am.name().replace(' ', '_'), am.value());
@Override public MetricsRecordBuilderImpl addRecord(String name) { return addRecord(info(name, name +" record")); }
@Test public void recordBuilderShouldNoOpIfFiltered() { SubsetConfiguration fc = new ConfigBuilder() .add("p.exclude", "foo").subset("p"); MetricsCollectorImpl mb = new MetricsCollectorImpl(); mb.setRecordFilter(newGlobFilter(fc)); MetricsRecordBuilderImpl rb = mb.addRecord("foo"); rb.tag(info("foo", ""), "value").addGauge(info("g0", ""), 1); assertEquals("no tags", 0, rb.tags().size()); assertEquals("no metrics", 0, rb.metrics().size()); assertNull("null record", rb.getRecord()); assertEquals("no records", 0, mb.getRecords().size()); }
collector = new MetricsCollectorImpl(); queueMetrics.getMetrics(collector, true); jvmMetrics.getMetrics(collector, true); for (MetricsRecord record : collector.getRecords()) { for (AbstractMetric am : record.metrics()) { bindings.put(am.name().replace(' ', '_'), am.value());
lastRecs = getMetrics(new MetricsCollectorImpl(), true);
@Test public void testPerMetricFiltering() { SubsetConfiguration fc = new ConfigBuilder() .add("p.exclude", "foo").subset("p"); MetricsCollectorImpl mb = new MetricsCollectorImpl(); mb.setMetricFilter(newGlobFilter(fc)); MetricsRecordBuilderImpl rb = mb.addRecord("foo"); rb.tag(info("foo", ""), "").addCounter(info("c0", ""), 0) .addGauge(info("foo", ""), 1); assertEquals("1 tag", 1, rb.tags().size()); assertEquals("1 metric", 1, rb.metrics().size()); assertEquals("expect foo tag", "foo", rb.tags().get(0).name()); assertEquals("expect c0", "c0", rb.metrics().get(0).name()); } }
static MetricsRecordBuilderImpl builder(String name) { return new MetricsCollectorImpl().addRecord(name); } }
@Override public MetricsRecordBuilderImpl addRecord(String name) { return addRecord(info(name, name +" record")); }
Iterable<MetricsRecordImpl> getMetrics(MetricsCollectorImpl builder, boolean all) { builder.setRecordFilter(recordFilter).setMetricFilter(metricFilter); try { source.getMetrics(builder, all); } catch (Exception e) { LOG.error("Error getting metrics from source "+ name, e); } for (MetricsRecordBuilderImpl rb : builder) { for (MetricsTag t : injectedTags) { rb.add(t); } } return builder.getRecords(); }
@Test public void testPerfMetricsInited() { scheduler.init(conf); scheduler.start(); MetricsCollectorImpl collector = new MetricsCollectorImpl(); scheduler.fsOpDurations.getMetrics(collector, true); assertEquals("Incorrect number of perf metrics", 1, collector.getRecords().size()); }
/** * Construct the metrics system * @param prefix for the system */ public MetricsSystemImpl(String prefix) { this.prefix = prefix; allSources = Maps.newHashMap(); sources = Maps.newLinkedHashMap(); allSinks = Maps.newHashMap(); sinks = Maps.newLinkedHashMap(); sourceConfigs = Maps.newHashMap(); sinkConfigs = Maps.newHashMap(); callbacks = Lists.newArrayList(); namedCallbacks = Maps.newHashMap(); injectedTags = Lists.newArrayList(); collector = new MetricsCollectorImpl(); if (prefix != null) { // prefix could be null for default ctor, which requires init later initSystemMBean(); } }
private void snapshotMetrics(MetricsSourceAdapter sa, MetricsBufferBuilder bufferBuilder) { long startTime = Time.monotonicNow(); bufferBuilder.add(sa.name(), sa.getMetrics(collector, true)); collector.clear(); snapshotStat.add(Time.monotonicNow() - startTime); LOG.debug("Snapshotted source "+ sa.name()); }