diff --git a/project.clj b/project.clj index 13163afc..e779bf7a 100644 --- a/project.clj +++ b/project.clj @@ -21,7 +21,7 @@ [cheshire "6.2.0"] [commons-codec "1.22.1"] [commons-io "2.22.0"] - [io.dropwizard.metrics/metrics-core "3.2.6"] + [io.dropwizard.metrics5/metrics-core "5.0.7"] [org.apache.httpcomponents/httpasyncclient "4.1.5"] [org.bouncycastle/bcpkix-jdk18on "1.85"] [org.bouncycastle/bcpkix-fips "1.0.8"] @@ -41,7 +41,7 @@ :dependencies [[org.clojure/clojure] [commons-io] - [io.dropwizard.metrics/metrics-core] + [io.dropwizard.metrics5/metrics-core] [org.apache.httpcomponents/httpasyncclient] [org.openvoxproject/ssl-utils] [org.openvoxproject/i18n] @@ -69,7 +69,7 @@ :test {:pedantic? :warn :dependencies [[org.openvoxproject/trapperkeeper-webserver] [org.openvoxproject/trapperkeeper-webserver :classifier "test"] - [org.openvoxproject/ring-middleware]]} + [org.openvoxproject/ring-middleware :exclusions [io.dropwizard.metrics5/metrics-core]]]} :fips-deps {:dependencies [[org.bouncycastle/bcpkix-fips] [org.bouncycastle/bc-fips] [org.bouncycastle/bctls-fips]] diff --git a/src/clj/puppetlabs/http/client/async.clj b/src/clj/puppetlabs/http/client/async.clj index 76338206..74b4aaff 100644 --- a/src/clj/puppetlabs/http/client/async.clj +++ b/src/clj/puppetlabs/http/client/async.clj @@ -16,7 +16,7 @@ (org.apache.http.client.utils URIBuilder) (org.apache.http.entity ContentType) (org.apache.http.nio.client HttpAsyncClient) - (com.codahale.metrics MetricRegistry) + (io.dropwizard.metrics5 MetricRegistry) (java.util Locale) (java.net URI URL)) diff --git a/src/clj/puppetlabs/http/client/common.clj b/src/clj/puppetlabs/http/client/common.clj index 450b60f4..a1402b4c 100644 --- a/src/clj/puppetlabs/http/client/common.clj +++ b/src/clj/puppetlabs/http/client/common.clj @@ -1,7 +1,7 @@ (ns puppetlabs.http.client.common (:import (java.net URL URI) (javax.net.ssl SSLContext) - (com.codahale.metrics MetricRegistry) + (io.dropwizard.metrics5 MetricRegistry) (clojure.lang IBlockingDeref) (java.io InputStream) (java.nio.charset Charset) diff --git a/src/clj/puppetlabs/http/client/metrics.clj b/src/clj/puppetlabs/http/client/metrics.clj index b05d26a6..b9389bf0 100644 --- a/src/clj/puppetlabs/http/client/metrics.clj +++ b/src/clj/puppetlabs/http/client/metrics.clj @@ -2,7 +2,7 @@ (:require [clojure.string :as clj-string] [puppetlabs.http.client.common :as common] [schema.core :as schema]) - (:import (com.codahale.metrics MetricRegistry) + (:import (io.dropwizard.metrics5 MetricRegistry) (com.puppetlabs.http.client.metrics ClientMetricData Metrics Metrics$MetricType))) diff --git a/src/java/com/puppetlabs/http/client/AsyncHttpClient.java b/src/java/com/puppetlabs/http/client/AsyncHttpClient.java index bbb45dc7..98497e05 100644 --- a/src/java/com/puppetlabs/http/client/AsyncHttpClient.java +++ b/src/java/com/puppetlabs/http/client/AsyncHttpClient.java @@ -1,6 +1,6 @@ package com.puppetlabs.http.client; -import com.codahale.metrics.MetricRegistry; +import io.dropwizard.metrics5.MetricRegistry; import com.puppetlabs.http.client.impl.Promise; import java.io.Closeable; diff --git a/src/java/com/puppetlabs/http/client/ClientOptions.java b/src/java/com/puppetlabs/http/client/ClientOptions.java index 033b9f3b..64fe8bee 100644 --- a/src/java/com/puppetlabs/http/client/ClientOptions.java +++ b/src/java/com/puppetlabs/http/client/ClientOptions.java @@ -1,6 +1,6 @@ package com.puppetlabs.http.client; -import com.codahale.metrics.MetricRegistry; +import io.dropwizard.metrics5.MetricRegistry; import com.puppetlabs.ssl_utils.SSLUtils; import javax.net.ssl.SSLContext; diff --git a/src/java/com/puppetlabs/http/client/SyncHttpClient.java b/src/java/com/puppetlabs/http/client/SyncHttpClient.java index da94f89e..ef0503c6 100644 --- a/src/java/com/puppetlabs/http/client/SyncHttpClient.java +++ b/src/java/com/puppetlabs/http/client/SyncHttpClient.java @@ -1,6 +1,6 @@ package com.puppetlabs.http.client; -import com.codahale.metrics.MetricRegistry; +import io.dropwizard.metrics5.MetricRegistry; import java.io.Closeable; import java.net.URI; diff --git a/src/java/com/puppetlabs/http/client/impl/JavaClient.java b/src/java/com/puppetlabs/http/client/impl/JavaClient.java index ec56ce4f..6f6f69f2 100644 --- a/src/java/com/puppetlabs/http/client/impl/JavaClient.java +++ b/src/java/com/puppetlabs/http/client/impl/JavaClient.java @@ -1,6 +1,6 @@ package com.puppetlabs.http.client.impl; -import com.codahale.metrics.MetricRegistry; +import io.dropwizard.metrics5.MetricRegistry; import com.puppetlabs.http.client.ClientOptions; import com.puppetlabs.http.client.CompressType; import com.puppetlabs.http.client.HttpClientException; diff --git a/src/java/com/puppetlabs/http/client/impl/PersistentAsyncHttpClient.java b/src/java/com/puppetlabs/http/client/impl/PersistentAsyncHttpClient.java index ddb1afc1..64ad462c 100644 --- a/src/java/com/puppetlabs/http/client/impl/PersistentAsyncHttpClient.java +++ b/src/java/com/puppetlabs/http/client/impl/PersistentAsyncHttpClient.java @@ -1,6 +1,6 @@ package com.puppetlabs.http.client.impl; -import com.codahale.metrics.MetricRegistry; +import io.dropwizard.metrics5.MetricRegistry; import com.puppetlabs.http.client.Response; import com.puppetlabs.http.client.RequestOptions; import com.puppetlabs.http.client.HttpMethod; diff --git a/src/java/com/puppetlabs/http/client/impl/PersistentSyncHttpClient.java b/src/java/com/puppetlabs/http/client/impl/PersistentSyncHttpClient.java index 26ae3968..a47c3b2e 100644 --- a/src/java/com/puppetlabs/http/client/impl/PersistentSyncHttpClient.java +++ b/src/java/com/puppetlabs/http/client/impl/PersistentSyncHttpClient.java @@ -1,6 +1,6 @@ package com.puppetlabs.http.client.impl; -import com.codahale.metrics.MetricRegistry; +import io.dropwizard.metrics5.MetricRegistry; import com.puppetlabs.http.client.HttpClientException; import com.puppetlabs.http.client.Response; import com.puppetlabs.http.client.RequestOptions; diff --git a/src/java/com/puppetlabs/http/client/impl/TimedFutureCallback.java b/src/java/com/puppetlabs/http/client/impl/TimedFutureCallback.java index f588d280..d52ec0b9 100644 --- a/src/java/com/puppetlabs/http/client/impl/TimedFutureCallback.java +++ b/src/java/com/puppetlabs/http/client/impl/TimedFutureCallback.java @@ -1,6 +1,6 @@ package com.puppetlabs.http.client.impl; -import com.codahale.metrics.Timer; +import io.dropwizard.metrics5.Timer; import org.apache.http.concurrent.FutureCallback; import java.util.ArrayList; diff --git a/src/java/com/puppetlabs/http/client/impl/metrics/CategoryClientTimerMetricFilter.java b/src/java/com/puppetlabs/http/client/impl/metrics/CategoryClientTimerMetricFilter.java index e81a9b75..beeaae10 100644 --- a/src/java/com/puppetlabs/http/client/impl/metrics/CategoryClientTimerMetricFilter.java +++ b/src/java/com/puppetlabs/http/client/impl/metrics/CategoryClientTimerMetricFilter.java @@ -1,7 +1,8 @@ package com.puppetlabs.http.client.impl.metrics; -import com.codahale.metrics.Metric; -import com.codahale.metrics.MetricFilter; +import io.dropwizard.metrics5.Metric; +import io.dropwizard.metrics5.MetricFilter; +import io.dropwizard.metrics5.MetricName; import com.puppetlabs.http.client.metrics.ClientTimer; import com.puppetlabs.http.client.metrics.Metrics; @@ -13,7 +14,7 @@ public CategoryClientTimerMetricFilter(Metrics.MetricCategory category) { } @Override - public boolean matches(String s, Metric metric) { + public boolean matches(MetricName name, Metric metric) { return metric instanceof ClientTimer && ((ClientTimer) metric).isCategory(category); } diff --git a/src/java/com/puppetlabs/http/client/impl/metrics/MetricIdClientTimerFilter.java b/src/java/com/puppetlabs/http/client/impl/metrics/MetricIdClientTimerFilter.java index 14c30cab..d4842d9f 100644 --- a/src/java/com/puppetlabs/http/client/impl/metrics/MetricIdClientTimerFilter.java +++ b/src/java/com/puppetlabs/http/client/impl/metrics/MetricIdClientTimerFilter.java @@ -1,7 +1,8 @@ package com.puppetlabs.http.client.impl.metrics; -import com.codahale.metrics.Metric; -import com.codahale.metrics.MetricFilter; +import io.dropwizard.metrics5.Metric; +import io.dropwizard.metrics5.MetricFilter; +import io.dropwizard.metrics5.MetricName; import com.puppetlabs.http.client.metrics.MetricIdClientTimer; import java.util.List; @@ -14,7 +15,7 @@ public MetricIdClientTimerFilter(List metricId) { } @Override - public boolean matches(String s, Metric metric) { + public boolean matches(MetricName name, Metric metric) { return metric.getClass().equals(MetricIdClientTimer.class) && ((MetricIdClientTimer) metric). getMetricId().equals(metricId); diff --git a/src/java/com/puppetlabs/http/client/impl/metrics/TimerUtils.java b/src/java/com/puppetlabs/http/client/impl/metrics/TimerUtils.java index 8491b6ab..195dc60c 100644 --- a/src/java/com/puppetlabs/http/client/impl/metrics/TimerUtils.java +++ b/src/java/com/puppetlabs/http/client/impl/metrics/TimerUtils.java @@ -1,8 +1,9 @@ package com.puppetlabs.http.client.impl.metrics; -import com.codahale.metrics.Metric; -import com.codahale.metrics.MetricRegistry; -import com.codahale.metrics.Timer; +import io.dropwizard.metrics5.Metric; +import io.dropwizard.metrics5.MetricRegistry; +import io.dropwizard.metrics5.Timer; +import io.dropwizard.metrics5.MetricName; import com.puppetlabs.http.client.metrics.ClientTimer; import com.puppetlabs.http.client.metrics.MetricIdClientTimer; import com.puppetlabs.http.client.metrics.Metrics; @@ -15,15 +16,16 @@ import java.net.URISyntaxException; import java.util.ArrayList; +import java.util.Arrays; import java.util.Map; public class TimerUtils { private static final Logger LOGGER = LoggerFactory.getLogger(TimerUtils.class); private static ClientTimer getOrAddTimer(MetricRegistry metricRegistry, - String name, + MetricName name, ClientTimer newTimer) { - final Map metrics = metricRegistry.getMetrics(); + final Map metrics = metricRegistry.getMetrics(); final Metric metric = metrics.get(name); if ( metric instanceof ClientTimer ) { return (ClientTimer) metric; @@ -45,18 +47,15 @@ private static ArrayList startFullResponseMetricIdTimers(MetricRe String metricPrefix) { ArrayList timerContexts = new ArrayList<>(); for (int i = 0; i < metricId.length; i++) { - ArrayList currentId = new ArrayList<>(); - for (int j = 0; j <= i; j++) { - currentId.add(metricId[j]); - } + ArrayList currentId = new ArrayList<>(Arrays.asList(metricId).subList(0, i + 1)); ArrayList currentIdWithNamespace = new ArrayList<>(); currentIdWithNamespace.add(Metrics.NAMESPACE_METRIC_ID); currentIdWithNamespace.addAll(currentId); currentIdWithNamespace.add(Metrics.NAMESPACE_FULL_RESPONSE); - String metric_name = MetricRegistry.name(metricPrefix, + MetricName metric_name = MetricRegistry.name(metricPrefix, currentIdWithNamespace.toArray(new String[currentIdWithNamespace.size()])); - ClientTimer timer = new MetricIdClientTimer(metric_name, currentId, Metrics.MetricType.FULL_RESPONSE); + ClientTimer timer = new MetricIdClientTimer(metric_name.getKey(), currentId, Metrics.MetricType.FULL_RESPONSE); timerContexts.add(getOrAddTimer(registry, metric_name, timer).time()); } return timerContexts; @@ -73,15 +72,15 @@ private static ArrayList startFullResponseUrlTimers(MetricRegistr final String strippedUrl = Metrics.urlToMetricUrl(requestLine.getUri()); final String method = requestLine.getMethod(); - final String urlName = MetricRegistry.name(metricPrefix, Metrics.NAMESPACE_URL, + final MetricName urlName = MetricRegistry.name(metricPrefix, Metrics.NAMESPACE_URL, strippedUrl, Metrics.NAMESPACE_FULL_RESPONSE); - final String urlAndMethodName = MetricRegistry.name(metricPrefix, Metrics.NAMESPACE_URL_AND_METHOD, + final MetricName urlAndMethodName = MetricRegistry.name(metricPrefix, Metrics.NAMESPACE_URL_AND_METHOD, strippedUrl, method, Metrics.NAMESPACE_FULL_RESPONSE); - ClientTimer urlTimer = new UrlClientTimer(urlName, strippedUrl, Metrics.MetricType.FULL_RESPONSE); + ClientTimer urlTimer = new UrlClientTimer(urlName.getKey(), strippedUrl, Metrics.MetricType.FULL_RESPONSE); timerContexts.add(getOrAddTimer(registry, urlName, urlTimer).time()); - ClientTimer urlMethodTimer = new UrlAndMethodClientTimer(urlAndMethodName, strippedUrl, + ClientTimer urlMethodTimer = new UrlAndMethodClientTimer(urlAndMethodName.getKey(), strippedUrl, method, Metrics.MetricType.FULL_RESPONSE); timerContexts.add(getOrAddTimer(registry, urlAndMethodName, urlMethodTimer).time()); } catch (URISyntaxException e) { diff --git a/src/java/com/puppetlabs/http/client/impl/metrics/UrlAndMethodClientTimerFilter.java b/src/java/com/puppetlabs/http/client/impl/metrics/UrlAndMethodClientTimerFilter.java index 55f44c11..851d5651 100644 --- a/src/java/com/puppetlabs/http/client/impl/metrics/UrlAndMethodClientTimerFilter.java +++ b/src/java/com/puppetlabs/http/client/impl/metrics/UrlAndMethodClientTimerFilter.java @@ -1,6 +1,7 @@ package com.puppetlabs.http.client.impl.metrics; -import com.codahale.metrics.Metric; +import io.dropwizard.metrics5.Metric; +import io.dropwizard.metrics5.MetricName; import com.puppetlabs.http.client.metrics.UrlAndMethodClientTimer; public class UrlAndMethodClientTimerFilter extends UrlClientTimerFilter { @@ -12,7 +13,7 @@ public UrlAndMethodClientTimerFilter(String url, String method) { } @Override - public boolean matches(String s, Metric metric) { + public boolean matches(MetricName name, Metric metric) { if (metric.getClass().equals(UrlAndMethodClientTimer.class)) { UrlAndMethodClientTimer timer = (UrlAndMethodClientTimer) metric; return timer.getMethod().equals(this.method) && diff --git a/src/java/com/puppetlabs/http/client/impl/metrics/UrlClientTimerFilter.java b/src/java/com/puppetlabs/http/client/impl/metrics/UrlClientTimerFilter.java index b08edd4a..3cf68f27 100644 --- a/src/java/com/puppetlabs/http/client/impl/metrics/UrlClientTimerFilter.java +++ b/src/java/com/puppetlabs/http/client/impl/metrics/UrlClientTimerFilter.java @@ -1,7 +1,8 @@ package com.puppetlabs.http.client.impl.metrics; -import com.codahale.metrics.Metric; -import com.codahale.metrics.MetricFilter; +import io.dropwizard.metrics5.Metric; +import io.dropwizard.metrics5.MetricFilter; +import io.dropwizard.metrics5.MetricName; import com.puppetlabs.http.client.metrics.UrlClientTimer; public class UrlClientTimerFilter implements MetricFilter { @@ -16,7 +17,7 @@ protected String getUrl() { } @Override - public boolean matches(String s, Metric metric) { + public boolean matches(MetricName name, Metric metric) { return metric.getClass().equals(UrlClientTimer.class) && ((UrlClientTimer) metric). getUrl().equals(url); diff --git a/src/java/com/puppetlabs/http/client/metrics/ClientTimer.java b/src/java/com/puppetlabs/http/client/metrics/ClientTimer.java index 3f890980..25c66107 100644 --- a/src/java/com/puppetlabs/http/client/metrics/ClientTimer.java +++ b/src/java/com/puppetlabs/http/client/metrics/ClientTimer.java @@ -1,6 +1,6 @@ package com.puppetlabs.http.client.metrics; -import com.codahale.metrics.Timer; +import io.dropwizard.metrics5.Timer; public abstract class ClientTimer extends Timer { private final String metricName; diff --git a/src/java/com/puppetlabs/http/client/metrics/Metrics.java b/src/java/com/puppetlabs/http/client/metrics/Metrics.java index 965e1fc8..c44dd62e 100644 --- a/src/java/com/puppetlabs/http/client/metrics/Metrics.java +++ b/src/java/com/puppetlabs/http/client/metrics/Metrics.java @@ -1,8 +1,7 @@ package com.puppetlabs.http.client.metrics; -import com.codahale.metrics.MetricFilter; -import com.codahale.metrics.MetricRegistry; -import com.codahale.metrics.Timer; +import io.dropwizard.metrics5.MetricFilter; +import io.dropwizard.metrics5.MetricRegistry; import com.puppetlabs.http.client.impl.metrics.CategoryClientTimerMetricFilter; import com.puppetlabs.http.client.impl.metrics.MetricIdClientTimerFilter; import com.puppetlabs.http.client.impl.metrics.TimerMetricData; @@ -16,7 +15,6 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; -import java.util.Map; public class Metrics { public static final String PUPPETLABS_NAMESPACE_PREFIX = "puppetlabs"; @@ -57,8 +55,8 @@ public static String urlToMetricUrl(String uriString) throws URISyntaxException private static List getUrlClientTimerArray(MetricRegistry registry, MetricFilter filter) { List timerArray = new ArrayList<>(); - for (Map.Entry entry : registry.getTimers(filter).entrySet()) { - UrlClientTimer timer = (UrlClientTimer)entry.getValue(); + for (var entry : registry.getTimers(filter).entrySet()) { + var timer = (UrlClientTimer) entry.getValue(); timerArray.add(timer); } return timerArray; @@ -67,8 +65,8 @@ private static List getUrlClientTimerArray(MetricRegistry regist private static List getUrlAndMethodClientTimerArray(MetricRegistry registry, MetricFilter filter) { List timerArray = new ArrayList<>(); - for (Map.Entry entry : registry.getTimers(filter).entrySet()) { - UrlAndMethodClientTimer timer = (UrlAndMethodClientTimer)entry.getValue(); + for (var entry : registry.getTimers(filter).entrySet()) { + var timer = (UrlAndMethodClientTimer) entry.getValue(); timerArray.add(timer); } return timerArray; @@ -77,8 +75,8 @@ private static List getUrlAndMethodClientTimerArray(Met private static List getMetricIdClientTimerArray(MetricRegistry registry, MetricFilter filter) { List timerArray = new ArrayList<>(); - for (Map.Entry entry : registry.getTimers(filter).entrySet()) { - MetricIdClientTimer timer = (MetricIdClientTimer)entry.getValue(); + for (var entry : registry.getTimers(filter).entrySet()) { + var timer = (MetricIdClientTimer) entry.getValue(); timerArray.add(timer); } return timerArray; diff --git a/test/com/puppetlabs/http/client/impl/metrics_unit_test.clj b/test/com/puppetlabs/http/client/impl/metrics_unit_test.clj index 6da270bc..d685ec59 100644 --- a/test/com/puppetlabs/http/client/impl/metrics_unit_test.clj +++ b/test/com/puppetlabs/http/client/impl/metrics_unit_test.clj @@ -2,7 +2,7 @@ (:require [clojure.test :refer :all] [puppetlabs.http.client.metrics :as metrics] [schema.test :as schema-test]) - (:import (com.codahale.metrics MetricRegistry) + (:import (io.dropwizard.metrics5 MetricRegistry) (com.puppetlabs.http.client.metrics Metrics) (org.apache.http.message BasicHttpRequest) (clojure.lang ExceptionInfo) @@ -14,6 +14,9 @@ (defn add-metric-ns [string] (str "puppetlabs.http-client.experimental." string)) +(defn timer-key-strings [metric-registry] + (set (map str (keys (.getTimers metric-registry))))) + (deftest start-full-response-timers-test (testing "startFullResponseTimers creates the right timers" (let [url-id (add-metric-ns "with-url.http://localhost/foo.full-response") @@ -25,7 +28,7 @@ nil Metrics/DEFAULT_NAMESPACE_PREFIX true) - (is (= (set (list url-id url-method-id)) (set (keys (.getTimers metric-registry))))))) + (is (= (set (list url-id url-method-id)) (timer-key-strings metric-registry))))) (testing "metric id timers are not created for a request with an empty metric id" (let [metric-registry (MetricRegistry.)] (TimerUtils/startFullResponseTimers metric-registry @@ -33,7 +36,7 @@ (into-array String []) Metrics/DEFAULT_NAMESPACE_PREFIX true) - (is (= (set (list url-id url-method-id)) (set (keys (.getTimers metric-registry))))))) + (is (= (set (list url-id url-method-id)) (timer-key-strings metric-registry))))) (testing "metric id timers are created correctly for a request with a metric id" (let [metric-registry (MetricRegistry.)] (TimerUtils/startFullResponseTimers metric-registry @@ -45,7 +48,7 @@ (add-metric-ns "with-metric-id.foo.full-response") (add-metric-ns "with-metric-id.foo.bar.full-response") (add-metric-ns "with-metric-id.foo.bar.baz.full-response"))) - (set (keys (.getTimers metric-registry))))))) + (timer-key-strings metric-registry))))) (testing "url timers should strip off username, password, query string, and fragment" (let [metric-registry (MetricRegistry.)] (TimerUtils/startFullResponseTimers @@ -76,10 +79,10 @@ true) (is (= (set (list (add-metric-ns - "with-url.http://localhost:1234/foo,bar/baz.full-response") + "with-url.http://localhost:1234/foo\\,bar/baz.full-response") (add-metric-ns - "with-url-and-method.http://localhost:1234/foo,bar/baz.GET.full-response"))) - (set (keys (.getTimers metric-registry)))))))))) + "with-url-and-method.http://localhost:1234/foo\\,bar/baz.GET.full-response"))) + (timer-key-strings metric-registry)))))))) (deftest url->metric-url-test (testing "url->metric-url strips username, password, query params, and path fragment off of url" diff --git a/test/puppetlabs/http/client/metrics_test.clj b/test/puppetlabs/http/client/metrics_test.clj index 24c6d52e..02a0a39a 100644 --- a/test/puppetlabs/http/client/metrics_test.clj +++ b/test/puppetlabs/http/client/metrics_test.clj @@ -11,7 +11,7 @@ [puppetlabs.trapperkeeper.testutils.logging :as testlogging] [puppetlabs.trapperkeeper.testutils.webserver :as testwebserver] [schema.test :as schema-test]) - (:import (com.codahale.metrics MetricRegistry) + (:import (io.dropwizard.metrics5 MetricRegistry) (com.puppetlabs.http.client Async ClientOptions RequestOptions ResponseBodyType Sync) (com.puppetlabs.http.client.metrics ClientMetricData ClientTimer Metrics)