[ 
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)

Reply via email to