1212import java .util .ArrayList ;
1313import java .util .List ;
1414import java .util .Map ;
15+ import java .util .Set ;
16+ import java .util .HashSet ;
1517
1618public class DropwizardReporter implements MetricsReporter {
1719 private static final Logger LOGGER = LoggerFactory .getLogger (DropwizardReporter .class );
1820 protected static final String METRIC_PREFIX = MetricsReporter .class .getPackage ().getName ();
1921
2022 protected MetricRegistry registry ;
2123 protected DropwizardReporterConfig config ;
24+ private Set <String > metricNames = new HashSet <>();
2225
2326 @ Override
2427 public void configure (Map <String , ?> configs ) {
@@ -51,6 +54,7 @@ public Double getValue() {
5154 LOGGER .debug ("Registering {}" , name );
5255 try {
5356 registry .register (name , gauge );
57+ metricNames .add (name );
5458 } catch (IllegalArgumentException e ) {
5559 LOGGER .warn ("metricChange called for `{}' which was already registered, ignoring." , name );
5660 }
@@ -61,10 +65,14 @@ public void metricRemoval(KafkaMetric kafkaMetric) {
6165 String name = dropwizardMetricName (kafkaMetric );
6266 LOGGER .debug ("Removing {}" , name );
6367 registry .remove (name );
68+ metricNames .remove (name );
6469 }
6570
6671 @ Override
67- public void close () {}
72+ public void close () {
73+ for (String name : metricNames )
74+ registry .remove (name );
75+ }
6876
6977 private static String dropwizardMetricName (KafkaMetric kafkaMetric ) {
7078 MetricName name = kafkaMetric .metricName ();
0 commit comments