@Test public void requestTrackingFuseable() { BaseSubscriber<Integer> bs = new BaseSubscriber<Integer>() { @Override protected void hookOnSubscribe(Subscription subscription) { subscription.request(1); } }; Flux<Integer> source = Flux.range(1, 10) .name("foo"); new FluxMetricsFuseable<>(source, registry) .subscribe(bs); DistributionSummary meter = registry.find(METER_REQUESTED) .tag(TAG_SEQUENCE_NAME, "foo") .summary(); assertThat(meter).as("meter").isNotNull(); assertThat(meter.totalAmount()).isEqualTo(1); bs.request(7); assertThat(meter.totalAmount()).isEqualTo(8); assertThat(meter.max()).isEqualTo(7); bs.request(100); assertThat(meter.totalAmount()).isEqualTo(108); assertThat(meter.max()).isEqualTo(100); } }
@Test public void requestTracking() { BaseSubscriber<Integer> bs = new BaseSubscriber<Integer>() { @Override protected void hookOnSubscribe(Subscription subscription) { subscription.request(1); } }; Flux<Integer> source = Flux.range(1, 10) .name("foo") .hide(); new FluxMetrics<>(source, registry) .subscribe(bs); DistributionSummary meter = registry.find(METER_REQUESTED) .tag(TAG_SEQUENCE_NAME, "foo") .summary(); assertThat(meter).as("meter").isNotNull(); assertThat(meter.totalAmount()).isEqualTo(1); bs.request(7); assertThat(meter.totalAmount()).isEqualTo(8); assertThat(meter.max()).isEqualTo(7); bs.request(100); assertThat(meter.totalAmount()).isEqualTo(108); assertThat(meter.max()).isEqualTo(100); }
@Override public long totalAmount() { return (long) impl.totalAmount(); }
Optional<String> writeSummary(DistributionSummary summary) { summary.takeSnapshot(); return Optional.of(writeDocument(summary, builder -> { builder.append(",\"count\":").append(summary.count()); builder.append(",\"sum\":").append(summary.totalAmount()); builder.append(",\"mean\":").append(summary.mean()); builder.append(",\"max\":").append(summary.max()); })); }
private Stream<SignalFxProtocolBuffers.DataPoint.Builder> addDistributionSummary(DistributionSummary summary) { return Stream.of( addDatapoint(summary, COUNTER, "count", summary.count()), addDatapoint(summary, COUNTER, "totalTime", summary.totalAmount()), addDatapoint(summary, GAUGE, "avg", summary.mean()), addDatapoint(summary, GAUGE, "max", summary.max()) ); }
public void shouldReportRuntime() { // given: when(jobRunnable.getJobDefinition()).thenReturn(someJobDefinition("BAR")); // when: jobService.startAsyncJob("BAR"); // then: assertThat(Metrics.summary("gauge.jobs.runtime.bar").totalAmount(), is(greaterThan(0.0d))); }
@Nullable private Optional<String> writeSummary(DistributionSummary summary) { HistogramSnapshot snapshot = summary.takeSnapshot(); if (snapshot.count() > 0) { return Optional.of(write(summary.getId(), "distributionSummary", Fields.Count.tag(), decimal(summary.count()), Fields.Sum.tag(), decimal(summary.totalAmount()), Fields.Max.tag(), decimal(summary.max()))); } return Optional.empty(); }
private Stream<String> writeSummary(DistributionSummary summary) { return Stream.of( event(summary.getId(), new Attribute("count", summary.count()), new Attribute("avg", summary.mean()), new Attribute("total", summary.totalAmount()), new Attribute("max", summary.max()) ) ); }
@Test @DisplayName("scale samples by a fixed factor") default void scale(MeterRegistry registry) { DistributionSummary ds = DistributionSummary.builder("my.summary") .scale(2.0) .register(registry); ds.record(1); clock(registry).add(step()); assertThat(ds.totalAmount()).isEqualTo(2.0); }
@Test @DisplayName("negative quantities are ignored") default void recordNegative(MeterRegistry registry) { DistributionSummary ds = registry.summary("my.summary"); ds.record(-10); assertAll(() -> assertEquals(0, ds.count()), () -> assertEquals(0L, ds.totalAmount())); }
private Stream<String> writeSummary(DistributionSummary summary) { final long wallTime = clock.wallTime(); final Stream.Builder<String> metrics = Stream.builder(); Meter.Id id = summary.getId(); addMetric(metrics, id, "sum", wallTime, summary.totalAmount()); addMetric(metrics, id, "count", wallTime, summary.count()); addMetric(metrics, id, "avg", wallTime, summary.mean()); addMetric(metrics, id, "max", wallTime, summary.max()); return metrics.build(); }
@Test @DisplayName("record zero") default void recordZero(MeterRegistry registry) { DistributionSummary ds = registry.summary("my.summary"); ds.record(0); clock(registry).add(step()); assertAll(() -> assertEquals(1L, ds.count()), () -> assertEquals(0L, ds.totalAmount())); }
@Test @DisplayName("multiple recordings are maintained") default void record(MeterRegistry registry) { DistributionSummary ds = registry.summary("my.summary"); ds.record(10); clock(registry).add(step()); ds.count(); assertAll(() -> assertEquals(1L, ds.count()), () -> assertEquals(10L, ds.totalAmount())); ds.record(10); ds.record(10); clock(registry).add(step()); assertAll(() -> assertTrue(ds.count() >= 2L), () -> assertTrue(ds.totalAmount() >= 20L)); }
Stream<String> writeSummary(DistributionSummary summary) { long wallTime = config().clock().wallTime(); return Stream.of( writeMetric(idWithSuffix(summary.getId(), "count"), wallTime, summary.count()), writeMetric(idWithSuffix(summary.getId(), "avg"), wallTime, summary.mean()), writeMetric(idWithSuffix(summary.getId(), "sum"), wallTime, summary.totalAmount()), writeMetric(idWithSuffix(summary.getId(), "max"), wallTime, summary.max()) ); }
@Test public void shouldAliasSummaryLabel() { MeterRegistry registry = new SimpleMeterRegistry(); BackendRegistries.registerMatchers(registry, ALL_LABELS, Collections.singletonList(new Match() .setLabel("address") .setType(MatchType.REGEX) .setValue("addr1") .setAlias("1"))); Summaries summaries = new Summaries("my_summary", "", registry, Label.EB_ADDRESS); summaries.get("addr1").record(5); summaries.get("addr1").record(8); summaries.get("addr2").record(10); DistributionSummary s = registry.find("my_summary").tags("address", "1").summary(); assertThat(s.count()).isEqualTo(2); assertThat(s.totalAmount()).isEqualTo(13); s = registry.find("my_summary").tags("address", "addr1").summary(); assertThat(s).isNull(); s = registry.find("my_summary").tags("address", "addr2").summary(); assertThat(s.count()).isEqualTo(1); assertThat(s.totalAmount()).isEqualTo(10); }
private Stream<MetricDatum> summaryData(DistributionSummary summary) { final Stream.Builder<MetricDatum> metrics = Stream.builder(); metrics.add(metricDatum(summary.getId(), "sum", summary.totalAmount())); metrics.add(metricDatum(summary.getId(), "count", summary.count())); metrics.add(metricDatum(summary.getId(), "avg", summary.mean())); metrics.add(metricDatum(summary.getId(), "max", summary.max())); return metrics.build(); }
private Stream<String> writeSummary(DistributionSummary summary, Map<String, DatadogMetricMetadata> metadata) { final long wallTime = clock.wallTime(); final Stream.Builder<String> metrics = Stream.builder(); Meter.Id id = summary.getId(); metrics.add(writeMetric(id, "sum", wallTime, summary.totalAmount())); metrics.add(writeMetric(id, "count", wallTime, summary.count())); metrics.add(writeMetric(id, "avg", wallTime, summary.mean())); metrics.add(writeMetric(id, "max", wallTime, summary.max())); addToMetadataList(metadata, id, "sum", Statistic.TOTAL, null); addToMetadataList(metadata, id, "count", Statistic.COUNT, "occurrence"); addToMetadataList(metadata, id, "avg", Statistic.VALUE, null); addToMetadataList(metadata, id, "max", Statistic.MAX, null); return metrics.build(); }
@Test public void shouldIgnoreSummaryLabel() { MeterRegistry registry = new SimpleMeterRegistry(); BackendRegistries.registerMatchers(registry, ALL_LABELS, Collections.singletonList(new Match() .setLabel("address") .setType(MatchType.REGEX) .setValue(".*") .setAlias("_"))); Summaries summaries = new Summaries("my_summary", "", registry, Label.EB_ADDRESS); summaries.get("addr1").record(5); summaries.get("addr1").record(8); summaries.get("addr2").record(10); DistributionSummary s = registry.find("my_summary").tags("address", "_").summary(); assertThat(s.count()).isEqualTo(3); assertThat(s.totalAmount()).isEqualTo(23); s = registry.find("my_summary").tags("address", "addr1").summary(); assertThat(s).isNull(); s = registry.find("my_summary").tags("address", "addr2").summary(); assertThat(s).isNull(); } }