public static Map<String, Long> getMetrics(PipelineResult result) { final MetricQueryResults metricQueryResults = result.metrics().queryMetrics(MetricsFilter.builder().build()); final Map<String, Long> gauges = StreamSupport.stream(metricQueryResults.getGauges().spliterator(), false) .collect(Collectors.groupingBy( MetricResult::getName, Collectors.reducing(GaugeResult.empty(), GET_COMMITTED_GAUGE, BinaryOperator.maxBy( Comparator.comparing(GaugeResult::getTimestamp))))) .entrySet().stream() .collect(Collectors.toMap(e -> e.getKey().getName(), e -> e.getValue().getValue())); final Map<String, Long> counters = StreamSupport.stream( metricQueryResults.getCounters().spliterator(), false) .collect(Collectors.groupingBy(m -> m.getName().getName(), Collectors.summingLong(GET_COMMITTED_COUNTER))); Map<String, Long> ret = new HashMap<>(); ret.putAll(gauges); ret.putAll(counters); return Collections.unmodifiableMap(ret); }
public GaugeResult extractResult() { return GaugeResult.create(value(), timestamp()); }
@Override public GaugeResult extractResult() { return GaugeResult.empty(); } }
@Test public void testGaugeCommittedUnsupportedInAttemptedAccumulatedMetricResults() { MetricsContainerStepMap attemptedMetrics = new MetricsContainerStepMap(); attemptedMetrics.update(STEP1, metricsContainer); MetricResults metricResults = asAttemptedOnlyMetricResults(attemptedMetrics); MetricQueryResults step1res = metricResults.queryMetrics(MetricsFilter.builder().addStep(STEP1).build()); thrown.expect(UnsupportedOperationException.class); thrown.expectMessage("This runner does not currently support committed metrics results."); assertGauge(GAUGE_NAME, step1res, STEP1, GaugeResult.empty(), true); }
Map<String, ?> renderAll() { Map<String, Object> metrics = new HashMap<>(); MetricResults metricResults = asAttemptedOnlyMetricResults(MetricsAccumulator.getInstance().value()); MetricQueryResults metricQueryResults = metricResults.queryMetrics(MetricsFilter.builder().build()); for (MetricResult<Long> metricResult : metricQueryResults.getCounters()) { metrics.put(renderName(metricResult), metricResult.getAttempted()); } for (MetricResult<DistributionResult> metricResult : metricQueryResults.getDistributions()) { DistributionResult result = metricResult.getAttempted(); metrics.put(renderName(metricResult) + ".count", result.getCount()); metrics.put(renderName(metricResult) + ".sum", result.getSum()); metrics.put(renderName(metricResult) + ".min", result.getMin()); metrics.put(renderName(metricResult) + ".max", result.getMax()); metrics.put(renderName(metricResult) + ".mean", result.getMean()); } for (MetricResult<GaugeResult> metricResult : metricQueryResults.getGauges()) { metrics.put(renderName(metricResult), metricResult.getAttempted().getValue()); } return metrics; }
@Test public void testGauge() { FlinkMetricContainer.FlinkGauge flinkGauge = new FlinkMetricContainer.FlinkGauge(GaugeResult.empty()); when(metricGroup.gauge(eq("namespace.name"), anyObject())).thenReturn(flinkGauge); FlinkMetricContainer container = new FlinkMetricContainer(runtimeContext); MetricsContainer step = container.getMetricsContainer("step"); MetricName metricName = MetricName.named("namespace", "name"); Gauge gauge = step.getGauge(metricName); assertThat(flinkGauge.getValue(), is(GaugeResult.empty())); // first set will install the mocked gauge container.updateMetrics("step"); gauge.set(1); gauge.set(42); container.updateMetrics("step"); assertThat(flinkGauge.getValue().getValue(), is(42L)); }
private static void assertGaugeMetrics(MetricQueryResults metrics, boolean isCommitted) { assertThat( metrics.getGauges(), hasItem( metricsResult( NAMESPACE, "my-gauge", "MyStep2", GaugeResult.create(12L, Instant.now()), isCommitted))); }
DistributionResult.create(VALUE * 6, 4, VALUE, VALUE * 2), false); assertGauge(GAUGE_NAME, step1res, STEP1, GaugeResult.create(VALUE, Instant.now()), false); DistributionResult.create(VALUE * 3, 2, VALUE, VALUE * 2), true); assertGauge(GAUGE_NAME, step1res, STEP1, GaugeResult.create(VALUE, Instant.now()), true); DistributionResult.create(VALUE * 9, 6, VALUE, VALUE * 2), false); assertGauge(GAUGE_NAME, step2res, STEP2, GaugeResult.create(VALUE, Instant.now()), false); DistributionResult.create(VALUE * 6, 4, VALUE, VALUE * 2), true); assertGauge(GAUGE_NAME, step2res, STEP2, GaugeResult.create(VALUE, Instant.now()), true);
DistributionResult.create(VALUE * 3, 2, VALUE, VALUE * 2), false); assertGauge(GAUGE_NAME, step1res, STEP1, GaugeResult.create(VALUE, Instant.now()), false); DistributionResult.create(VALUE * 6, 4, VALUE, VALUE * 2), false); assertGauge(GAUGE_NAME, step2res, STEP2, GaugeResult.create(VALUE, Instant.now()), false);