Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions project.clj
Original file line number Diff line number Diff line change
Expand Up @@ -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"]
Expand All @@ -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]
Expand Down Expand Up @@ -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]]
Expand Down
2 changes: 1 addition & 1 deletion src/clj/puppetlabs/http/client/async.clj
Original file line number Diff line number Diff line change
Expand Up @@ -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))

Expand Down
2 changes: 1 addition & 1 deletion src/clj/puppetlabs/http/client/common.clj
Original file line number Diff line number Diff line change
@@ -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)
Expand Down
2 changes: 1 addition & 1 deletion src/clj/puppetlabs/http/client/metrics.clj
Original file line number Diff line number Diff line change
Expand Up @@ -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)))

Expand Down
2 changes: 1 addition & 1 deletion src/java/com/puppetlabs/http/client/AsyncHttpClient.java
Original file line number Diff line number Diff line change
@@ -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;
Expand Down
2 changes: 1 addition & 1 deletion src/java/com/puppetlabs/http/client/ClientOptions.java
Original file line number Diff line number Diff line change
@@ -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;
Expand Down
2 changes: 1 addition & 1 deletion src/java/com/puppetlabs/http/client/SyncHttpClient.java
Original file line number Diff line number Diff line change
@@ -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;
Expand Down
2 changes: 1 addition & 1 deletion src/java/com/puppetlabs/http/client/impl/JavaClient.java
Original file line number Diff line number Diff line change
@@ -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;
Expand Down
Original file line number Diff line number Diff line change
@@ -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;
Expand Down
Original file line number Diff line number Diff line change
@@ -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;
Expand Down
Original file line number Diff line number Diff line change
@@ -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;
Expand Down
Original file line number Diff line number Diff line change
@@ -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;

Expand All @@ -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);
}
Expand Down
Original file line number Diff line number Diff line change
@@ -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;
Expand All @@ -14,7 +15,7 @@ public MetricIdClientTimerFilter(List<String> 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);
Expand Down
29 changes: 14 additions & 15 deletions src/java/com/puppetlabs/http/client/impl/metrics/TimerUtils.java
Original file line number Diff line number Diff line change
@@ -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;
Expand All @@ -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<String, Metric> metrics = metricRegistry.getMetrics();
final Map<MetricName, Metric> metrics = metricRegistry.getMetrics();
final Metric metric = metrics.get(name);
if ( metric instanceof ClientTimer ) {
return (ClientTimer) metric;
Expand All @@ -45,18 +47,15 @@ private static ArrayList<Timer.Context> startFullResponseMetricIdTimers(MetricRe
String metricPrefix) {
ArrayList<Timer.Context> timerContexts = new ArrayList<>();
for (int i = 0; i < metricId.length; i++) {
ArrayList<String> currentId = new ArrayList<>();
for (int j = 0; j <= i; j++) {
currentId.add(metricId[j]);
}
ArrayList<String> currentId = new ArrayList<>(Arrays.asList(metricId).subList(0, i + 1));
ArrayList<String> 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;
Expand All @@ -73,15 +72,15 @@ private static ArrayList<Timer.Context> 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) {
Expand Down
Original file line number Diff line number Diff line change
@@ -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 {
Expand All @@ -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) &&
Expand Down
Original file line number Diff line number Diff line change
@@ -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 {
Expand All @@ -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);
Expand Down
Original file line number Diff line number Diff line change
@@ -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;
Expand Down
18 changes: 8 additions & 10 deletions src/java/com/puppetlabs/http/client/metrics/Metrics.java
Original file line number Diff line number Diff line change
@@ -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;
Expand All @@ -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";
Expand Down Expand Up @@ -57,8 +55,8 @@ public static String urlToMetricUrl(String uriString) throws URISyntaxException
private static List<UrlClientTimer> getUrlClientTimerArray(MetricRegistry registry,
MetricFilter filter) {
List<UrlClientTimer> timerArray = new ArrayList<>();
for (Map.Entry<String, Timer> 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;
Expand All @@ -67,8 +65,8 @@ private static List<UrlClientTimer> getUrlClientTimerArray(MetricRegistry regist
private static List<UrlAndMethodClientTimer> getUrlAndMethodClientTimerArray(MetricRegistry registry,
MetricFilter filter) {
List<UrlAndMethodClientTimer> timerArray = new ArrayList<>();
for (Map.Entry<String, Timer> 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;
Expand All @@ -77,8 +75,8 @@ private static List<UrlAndMethodClientTimer> getUrlAndMethodClientTimerArray(Met
private static List<MetricIdClientTimer> getMetricIdClientTimerArray(MetricRegistry registry,
MetricFilter filter) {
List<MetricIdClientTimer> timerArray = new ArrayList<>();
for (Map.Entry<String, Timer> 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;
Expand Down
17 changes: 10 additions & 7 deletions test/com/puppetlabs/http/client/impl/metrics_unit_test.clj
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand All @@ -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")
Expand All @@ -25,15 +28,15 @@
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
(BasicHttpRequest. "GET" "http://localhost/foo")
(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
Expand All @@ -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
Expand Down Expand Up @@ -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"
Expand Down
2 changes: 1 addition & 1 deletion test/puppetlabs/http/client/metrics_test.clj
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down