[
https://issues.apache.org/jira/browse/FLINK-3951?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15343916#comment-15343916
]
ASF GitHub Bot commented on FLINK-3951:
---------------------------------------
Github user tillrohrmann commented on a diff in the pull request:
https://github.com/apache/flink/pull/2112#discussion_r68014536
--- Diff:
flink-metrics/flink-metrics-dropwizard/src/test/java/org/apache/flink/dropwizard/metrics/DropwizardHistogramWrapperTest.java
---
@@ -0,0 +1,319 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.flink.dropwizard.metrics;
+
+import com.codahale.metrics.Counter;
+import com.codahale.metrics.Gauge;
+import com.codahale.metrics.Histogram;
+import com.codahale.metrics.Meter;
+import com.codahale.metrics.MetricFilter;
+import com.codahale.metrics.ScheduledReporter;
+import com.codahale.metrics.SlidingWindowReservoir;
+import com.codahale.metrics.Snapshot;
+import com.codahale.metrics.Timer;
+import org.apache.flink.configuration.Configuration;
+import org.apache.flink.dropwizard.ScheduledDropwizardReporter;
+import org.apache.flink.metrics.MetricRegistry;
+import org.apache.flink.metrics.groups.TaskManagerMetricGroup;
+import org.apache.flink.metrics.reporter.MetricReporter;
+import org.apache.flink.util.TestLogger;
+import org.junit.Test;
+
+import java.lang.reflect.Field;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.SortedMap;
+import java.util.concurrent.CancellationException;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.Future;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.TimeoutException;
+
+import static
org.apache.flink.metrics.MetricRegistry.KEY_METRICS_REPORTER_INTERVAL;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
+
+public class DropwizardHistogramWrapperTest extends TestLogger {
+
+ /**
+ * Tests the histogram functionality of the DropwizardHistogramWrapper.
+ */
+ @Test
+ public void testDropwizardHistogramWrapper() {
+ int size = 10;
+ DropwizardHistogramWrapper histogramWrapper = new
DropwizardHistogramWrapper(new Histogram(new SlidingWindowReservoir(size)));
+
+ for (int i = 0; i < size; i++) {
+ histogramWrapper.update(i);
+
+ assertEquals(i + 1, histogramWrapper.getCount());
+ assertEquals(i,
histogramWrapper.getStatistics().getMax());
+ assertEquals(0,
histogramWrapper.getStatistics().getMin());
+ }
+
+ assertEquals(size, histogramWrapper.getStatistics().size());
+ assertEquals((size - 1)/2.0,
histogramWrapper.getStatistics().getMedian(), 0.001);
+
+ for (int i = size; i < 2 * size; i++) {
+ histogramWrapper.update(i);
+
+ assertEquals(i + 1, histogramWrapper.getCount());
+ assertEquals(i,
histogramWrapper.getStatistics().getMax());
+ assertEquals(i + 1 - size,
histogramWrapper.getStatistics().getMin());
+ }
+
+ assertEquals(size, histogramWrapper.getStatistics().size());
+ assertEquals(size + (size - 1)/2.0,
histogramWrapper.getStatistics().getMedian(), 0.001);
+ }
+
+ /**
+ * Tests that the DropwizardHistogramWrapper reports correct dropwizard
snapshots to the
+ * ScheduledReporter.
+ */
+ @Test
+ public void testDropwizardHistogramWrapperReporting() throws Exception {
+ long reportingInterval = 1000;
+ long timeout = 30000;
+ int size = 10;
+ String histogramMetricName = "histogram";
+ Configuration config = new Configuration();
+ config.setString(MetricRegistry.KEY_METRICS_REPORTER_CLASS,
TestingReporter.class.getName());
+ config.setString(KEY_METRICS_REPORTER_INTERVAL,
reportingInterval + " MILLISECONDS");
+
+ MetricRegistry registry = null;
+
+ try {
+ registry = new MetricRegistry(config);
+ DropwizardHistogramWrapper histogramWrapper = new
DropwizardHistogramWrapper(new Histogram(new SlidingWindowReservoir(size)));
+
+ TaskManagerMetricGroup metricGroup = new
TaskManagerMetricGroup(registry, "localhost", "tmId");
+
+ registry.register(histogramWrapper,
histogramMetricName, metricGroup);
+
+ String fullMetricName = metricGroup.getScopeString() +
"." + histogramMetricName;
+
+ Field f =
registry.getClass().getDeclaredField("reporter");
+ f.setAccessible(true);
+
+ MetricReporter reporter = (MetricReporter)
f.get(registry);
+
+ assertTrue(reporter instanceof TestingReporter);
+
+ TestingReporter testingReporter = (TestingReporter)
reporter;
+
+ TestingScheduledReporter scheduledReporter =
testingReporter.scheduledReporter;
+
+ // check that the metric has been registered
+ assertEquals(1, testingReporter.getMetrics().size());
+
+ for (int i = 0; i < size; i++) {
+ histogramWrapper.update(i);
+ }
+
+ Future<Snapshot> snapshotFuture =
scheduledReporter.getNextHistogramSnapshot(fullMetricName);
--- End diff --
You're right that I could have written the test without the
`MetricRegistry`. But I guess it doesn't harm to also test the registering via
the `MetricGroup` and testing the timer thread for the `ScheduledReporter`.
> Add Histogram Metric Type
> -------------------------
>
> Key: FLINK-3951
> URL: https://issues.apache.org/jira/browse/FLINK-3951
> Project: Flink
> Issue Type: Sub-task
> Components: Core
> Reporter: Stephan Ewen
> Assignee: Till Rohrmann
> Fix For: 1.1.0
>
>
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)