diff --git a/.github/workflows/pull-request.yaml b/.github/workflows/pull-request.yaml index 1435ed53..c7fb454c 100644 --- a/.github/workflows/pull-request.yaml +++ b/.github/workflows/pull-request.yaml @@ -13,17 +13,17 @@ on: jobs: build: name: Build - runs-on: ubuntu-20.04 + runs-on: ubuntu-24.04 steps: - name: Checkout the repo - uses: actions/checkout@v2 + uses: actions/checkout@v5 - name: Validate Gradle Wrapper - uses: gradle/wrapper-validation-action@v1 + uses: gradle/wrapper-validation-action@v3 - name: Cache gradle - uses: actions/cache@v2 + uses: actions/cache@v4 with: path: | ~/.gradle/caches @@ -42,11 +42,18 @@ jobs: - name: Bundle the build report if: failure() - run: find . -type d -name 'reports' | zip -@ -r build-reports.zip + run: | + REPORTS=$(find . -type d -name 'reports') + if [ -n "$REPORTS" ]; then + echo "$REPORTS" | zip -@ -r build-reports.zip + else + echo "No reports directory found; skipping zip." + touch build-reports.zip + fi - name: Upload the build report if: failure() - uses: actions/upload-artifact@v2 + uses: actions/upload-artifact@v4 with: name: error-report path: build-reports.zip diff --git a/CHANGELOG.md b/CHANGELOG.md index 8c6f87e9..4d67f7fc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,14 +4,23 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -## [2.0.3] - Unreleased +## [3.0.0] - 2025-10-03 -[2.0.3]: https://github.com/streem/metrics-datadog/compare/v2.0.2...HEAD +[3.0.0]: https://github.com/streem/metrics-datadog/compare/v2.0.2...HEAD ### Added ### Changed +* Dropwizard 2.1.7 to 3.0.1 +* Jackson: Upgraded jackson from 2.14.1 to 2.18.2 +* HTTP Components: Updated from 4.5.5 to 4.5.14 +* Datadog Client: Updated from 2.9.0 to 4.4.0 +* JUnit: Updated from 4.13.1 to 4.13.2 +* Mockito: Replaced deprecated mockito-all 1.10.19 with mockito-core 5.14.2 +* SLF4J: Updated from 1.7.25 to 2.0.16 +* DNS Cache Manipulator: Updated from 1.8.1 to 1.8.2 + ### Fixed @@ -40,4 +49,3 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), ### Fixed * Updated `dropwizard-metrics` library from `1.3.4` to `4.0.0` which does not contain any vulnerabilities, see https://mvnrepository.com/artifact/io.dropwizard/dropwizard-metrics/4.0.0 - diff --git a/README.md b/README.md index ac63a21a..d27866d9 100644 --- a/README.md +++ b/README.md @@ -106,7 +106,7 @@ First, add the `dropwizard-metrics-datadog` dependency in your POM: pro.streem.metrics-datadog dropwizard-metrics-datadog - 2.0.2 + 3.0.0 ~~~ @@ -284,18 +284,18 @@ See above instructions for details. ## Maven Info Metrics datadog reporter is available as an artifact on -[Maven Central](http://search.maven.org/#search%7Cga%7C1%7Cg%3A%22pro.streem%22%20AND%20a%3A%22metrics-datadog%22) +[Maven Central](https://mvnrepository.com/artifact/pro.streem.metrics-datadog/metrics-datadog) * Group: pro.streem.metrics-datadog * Artifact: metrics-datadog -* Version: 2.0.2 +* Version: 3.0.0 Dropwizard datadog reporter is available as an artifact on -[Maven Central](http://search.maven.org/#search%7Cga%7C1%7Cg%3A%22pro.streem%22%20AND%20a%3A%22dropwizard-metrics-datadog%22) +[Maven Central](https://mvnrepository.com/artifact/pro.streem.metrics-datadog/dropwizard-metrics-datadog) * Group: pro.streem.metrics-datadog * Artifact: dropwizard-metrics-datadog -* Version: 2.0.2 +* Version: 3.0.0 ## Contributing diff --git a/buildSrc/src/main/kotlin/pro.streem.metrics-datadog.java-conventions.gradle.kts b/buildSrc/src/main/kotlin/pro.streem.metrics-datadog.java-conventions.gradle.kts index 5e5176fa..70b3b994 100644 --- a/buildSrc/src/main/kotlin/pro.streem.metrics-datadog.java-conventions.gradle.kts +++ b/buildSrc/src/main/kotlin/pro.streem.metrics-datadog.java-conventions.gradle.kts @@ -3,7 +3,7 @@ plugins { } group = "pro.streem.metrics-datadog" -version = "2.0.3-SNAPSHOT" +version = "3.0.0" repositories { mavenCentral() diff --git a/dropwizard-metrics-datadog/build.gradle.kts b/dropwizard-metrics-datadog/build.gradle.kts index efc07021..8741bc73 100644 --- a/dropwizard-metrics-datadog/build.gradle.kts +++ b/dropwizard-metrics-datadog/build.gradle.kts @@ -10,4 +10,5 @@ dependencies { api(libs.dropwizard.metrics.dropwizard) testImplementation(libs.junit) testImplementation(libs.fest.assert.core) + testImplementation(libs.slf4j.simple) } \ No newline at end of file diff --git a/dropwizard-metrics-datadog/src/main/java/io/dropwizard/metrics/DatadogReporterFactory.java b/dropwizard-metrics-datadog/src/main/java/io/dropwizard/metrics/common/DatadogReporterFactory.java similarity index 95% rename from dropwizard-metrics-datadog/src/main/java/io/dropwizard/metrics/DatadogReporterFactory.java rename to dropwizard-metrics-datadog/src/main/java/io/dropwizard/metrics/common/DatadogReporterFactory.java index c1ee15d1..942cda27 100644 --- a/dropwizard-metrics-datadog/src/main/java/io/dropwizard/metrics/DatadogReporterFactory.java +++ b/dropwizard-metrics-datadog/src/main/java/io/dropwizard/metrics/common/DatadogReporterFactory.java @@ -1,9 +1,10 @@ -package io.dropwizard.metrics; +package io.dropwizard.metrics.common; import com.codahale.metrics.MetricRegistry; import com.codahale.metrics.ScheduledReporter; import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonTypeName; +import io.dropwizard.metrics.common.BaseReporterFactory; import pro.streem.metrics.datadog.DatadogReporter; import pro.streem.metrics.datadog.DefaultMetricNameFormatterFactory; import pro.streem.metrics.datadog.DynamicTagsCallbackFactory; diff --git a/dropwizard-metrics-datadog/src/main/resources/META-INF/services/io.dropwizard.metrics.ReporterFactory b/dropwizard-metrics-datadog/src/main/resources/META-INF/services/io.dropwizard.metrics.ReporterFactory deleted file mode 100644 index 8b4ae2db..00000000 --- a/dropwizard-metrics-datadog/src/main/resources/META-INF/services/io.dropwizard.metrics.ReporterFactory +++ /dev/null @@ -1 +0,0 @@ -io.dropwizard.metrics.DatadogReporterFactory \ No newline at end of file diff --git a/dropwizard-metrics-datadog/src/main/resources/META-INF/services/io.dropwizard.metrics.common.ReporterFactory b/dropwizard-metrics-datadog/src/main/resources/META-INF/services/io.dropwizard.metrics.common.ReporterFactory new file mode 100644 index 00000000..a5b3b9d9 --- /dev/null +++ b/dropwizard-metrics-datadog/src/main/resources/META-INF/services/io.dropwizard.metrics.common.ReporterFactory @@ -0,0 +1 @@ +io.dropwizard.metrics.common.DatadogReporterFactory \ No newline at end of file diff --git a/dropwizard-metrics-datadog/src/test/java/io/dropwizard/metrics/DatadogReporterFactoryTest.java b/dropwizard-metrics-datadog/src/test/java/io/dropwizard/metrics/DatadogReporterFactoryTest.java index 1c89413d..7f2c19de 100644 --- a/dropwizard-metrics-datadog/src/test/java/io/dropwizard/metrics/DatadogReporterFactoryTest.java +++ b/dropwizard-metrics-datadog/src/test/java/io/dropwizard/metrics/DatadogReporterFactoryTest.java @@ -1,5 +1,6 @@ package io.dropwizard.metrics; +import io.dropwizard.metrics.common.DatadogReporterFactory; import io.dropwizard.jackson.DiscoverableSubtypeResolver; import org.fest.assertions.api.Assertions; import org.junit.Test; diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 9379322d..bc8907dd 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,17 +1,23 @@ [versions] -metrics = "4.0.2" -jackson = "2.14.1" -dropwizard = "2.1.7" +metrics = "4.2.37" +jackson = "2.18.2" +dropwizard = "3.0.1" +httpcomponents = "4.5.14" +dogstatsd = "4.4.0" +junit = "4.13.2" +mockito = "5.14.2" +slf4j = "2.0.16" +dnsCacheManipulator = "1.8.3" [libraries] dropwizard-metrics-core = { group = "io.dropwizard.metrics", name = "metrics-core", version.ref = "metrics" } dropwizard-metrics-dropwizard = { group = "io.dropwizard", name = "dropwizard-metrics", version.ref = "dropwizard" } -httpcomponents-fluentHc = { group = "org.apache.httpcomponents", name = "fluent-hc", version = "4.5.5" } +httpcomponents-fluentHc = { group = "org.apache.httpcomponents", name = "fluent-hc", version.ref = "httpcomponents" } jackson-databind = { group = "com.fasterxml.jackson.core", name = "jackson-databind", version.ref = "jackson" } -dogstatsd-client = { group = "com.datadoghq", name = "java-dogstatsd-client", version = "2.9.0" } +dogstatsd-client = { group = "com.datadoghq", name = "java-dogstatsd-client", version.ref = "dogstatsd" } -junit = { group = "junit", name = "junit", version = "4.13.1" } +junit = { group = "junit", name = "junit", version.ref = "junit" } fest-assert-core = { group = "org.easytesting", name = "fest-assert-core", version = "2.0M10" } -mockito-all = { group = "org.mockito", name = "mockito-all", version = "1.10.19" } -slf4j-simple = { group = "org.slf4j", name = "slf4j-simple", version = "1.7.25" } -dnsCacheManipulator = { group = "com.alibaba", name = "dns-cache-manipulator", version = "1.8.1" } +mockito-core = { group = "org.mockito", name = "mockito-core", version.ref = "mockito" } +slf4j-simple = { group = "org.slf4j", name = "slf4j-simple", version.ref = "slf4j" } +dnsCacheManipulator = { group = "com.alibaba", name = "dns-cache-manipulator", version.ref = "dnsCacheManipulator" } diff --git a/metrics-datadog/build.gradle.kts b/metrics-datadog/build.gradle.kts index f41d1828..809221a2 100644 --- a/metrics-datadog/build.gradle.kts +++ b/metrics-datadog/build.gradle.kts @@ -12,7 +12,7 @@ dependencies { api(libs.dogstatsd.client) testImplementation(libs.junit) - testImplementation(libs.mockito.all) + testImplementation(libs.mockito.core) testImplementation(libs.slf4j.simple) testImplementation(libs.dnsCacheManipulator) } diff --git a/metrics-datadog/src/main/java/pro/streem/metrics/datadog/transport/UdpTransport.java b/metrics-datadog/src/main/java/pro/streem/metrics/datadog/transport/UdpTransport.java index 073795e7..3db0c850 100644 --- a/metrics-datadog/src/main/java/pro/streem/metrics/datadog/transport/UdpTransport.java +++ b/metrics-datadog/src/main/java/pro/streem/metrics/datadog/transport/UdpTransport.java @@ -1,6 +1,7 @@ package pro.streem.metrics.datadog.transport; import com.timgroup.statsd.NonBlockingStatsDClient; +import com.timgroup.statsd.NonBlockingStatsDClientBuilder; import com.timgroup.statsd.StatsDClient; import com.timgroup.statsd.StatsDClientErrorHandler; import pro.streem.metrics.datadog.model.DatadogCounter; @@ -31,24 +32,26 @@ public class UdpTransport implements Transport { private UdpTransport(String prefix, String statsdHost, int port, boolean isRetryingLookup, String[] globalTags) { final Callable socketAddressCallable; - if(isRetryingLookup) { socketAddressCallable = volatileAddressResolver(statsdHost, port); } else { socketAddressCallable = staticAddressResolver(statsdHost, port); } - statsd = new NonBlockingStatsDClient( - prefix, - Integer.MAX_VALUE, - globalTags, - new StatsDClientErrorHandler() { + NonBlockingStatsDClientBuilder builder = new NonBlockingStatsDClientBuilder() + .addressLookup(socketAddressCallable) + .constantTags(globalTags) + .errorHandler(new StatsDClientErrorHandler() { public void handle(Exception e) { LOG.error(e.getMessage(), e); } - }, - socketAddressCallable - ); + }); + + if (prefix != null) { + builder.prefix(prefix); + } + + statsd = builder.build(); } public void close() throws IOException { @@ -155,16 +158,18 @@ public void send() { // Visible for testing. static Callable staticAddressResolver(final String host, final int port) { - try { - return NonBlockingStatsDClient.staticAddressResolution(host, port); - } catch(final Exception e) { - LOG.error("Error during constructing statsd address resolver.", e); - throw new RuntimeException(e); - } + return () -> { + try { + return new java.net.InetSocketAddress(java.net.InetAddress.getByName(host), port); + } catch(final Exception e) { + LOG.error("Error during constructing statsd address resolver.", e); + throw new RuntimeException(e); + } + }; } // Visible for testing. static Callable volatileAddressResolver(final String host, final int port) { - return NonBlockingStatsDClient.volatileAddressResolution(host, port); + return () -> new java.net.InetSocketAddress(java.net.InetAddress.getByName(host), port); } } diff --git a/metrics-datadog/src/test/java/pro/streem/metrics/datadog/transport/UdpTransportTest.java b/metrics-datadog/src/test/java/pro/streem/metrics/datadog/transport/UdpTransportTest.java index 1502beef..3214b532 100644 --- a/metrics-datadog/src/test/java/pro/streem/metrics/datadog/transport/UdpTransportTest.java +++ b/metrics-datadog/src/test/java/pro/streem/metrics/datadog/transport/UdpTransportTest.java @@ -48,7 +48,7 @@ public void volatileResolverResolvesByTheTimeTheHostIsResolvable() throws Except try { retryingCallable.call(); - assertFalse(true); + fail(); } catch (final Exception e) {} // ^ This should throw becuase the host is unresolvable.