From 74700d402178e00045b1ca23006f7f6131b2a92d Mon Sep 17 00:00:00 2001 From: Manabu Matsuzaki Date: Thu, 10 Oct 2019 21:47:45 +0900 Subject: [PATCH 1/7] Add Armeria version metric --- .../com/linecorp/armeria/server/Server.java | 25 +++++++++++++++++++ .../linecorp/armeria/server/ServerTest.java | 12 +++++++++ 2 files changed, 37 insertions(+) diff --git a/core/src/main/java/com/linecorp/armeria/server/Server.java b/core/src/main/java/com/linecorp/armeria/server/Server.java index abc50c791b8..18c627872fc 100644 --- a/core/src/main/java/com/linecorp/armeria/server/Server.java +++ b/core/src/main/java/com/linecorp/armeria/server/Server.java @@ -49,6 +49,7 @@ import com.google.common.annotations.VisibleForTesting; import com.google.common.base.Joiner; import com.google.common.base.MoreObjects; +import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableSet; import com.google.common.collect.ImmutableSet.Builder; import com.google.common.collect.Iterables; @@ -58,13 +59,16 @@ import com.linecorp.armeria.common.metric.MeterIdPrefix; import com.linecorp.armeria.common.util.EventLoopGroups; import com.linecorp.armeria.common.util.StartStopSupport; +import com.linecorp.armeria.common.util.Version; import com.linecorp.armeria.internal.ChannelUtil; import com.linecorp.armeria.internal.ConnectionLimitingHandler; import com.linecorp.armeria.internal.PathAndQuery; import com.linecorp.armeria.internal.TransportType; import com.linecorp.armeria.server.logging.AccessLogWriter; +import io.micrometer.core.instrument.Gauge; import io.micrometer.core.instrument.MeterRegistry; +import io.micrometer.core.instrument.Tag; import io.netty.bootstrap.ServerBootstrap; import io.netty.channel.Channel; import io.netty.channel.ChannelFuture; @@ -118,6 +122,8 @@ public static ServerBuilder builder() { final MeterIdPrefix idPrefix = new MeterIdPrefix("armeria.server.parsedPathCache"); PathAndQuery.registerMetrics(config.meterRegistry(), idPrefix); + setupVersionMetrics(); + // Invoke the serviceAdded() method in Service so that it can keep the reference to this Server or // add a listener to it. config.serviceConfigs().forEach(cfg -> ServiceCallbackInvoker.invokeServiceAdded(cfg, cfg.service())); @@ -305,6 +311,25 @@ public int numConnections() { return connectionLimitingHandler.numConnections(); } + /** + * Setup version metrics + */ + @VisibleForTesting + void setupVersionMetrics() { + final MeterRegistry meterRegistry = config().meterRegistry(); + final Map map = Version.identify(getClass().getClassLoader()); + final Version versionInfo = map.get("armeria"); + final String version = versionInfo.artifactVersion(); + final String commit = versionInfo.longCommitHash(); + final List tags = ImmutableList.of(Tag.of("version", version), + Tag.of("commit", commit)); + Gauge.builder("armeria.build.info", () -> 1) + .tags(tags) + .description("A metric with a constant '1' value labeled by version and commit hash" + + " from which Armeria was built.") + .register(meterRegistry); + } + @Override public String toString() { return MoreObjects.toStringHelper(this) diff --git a/core/src/test/java/com/linecorp/armeria/server/ServerTest.java b/core/src/test/java/com/linecorp/armeria/server/ServerTest.java index 37133a01b64..fdd1cdf52b4 100644 --- a/core/src/test/java/com/linecorp/armeria/server/ServerTest.java +++ b/core/src/test/java/com/linecorp/armeria/server/ServerTest.java @@ -436,6 +436,18 @@ public void notGracefulShutdownBlockingTaskExecutor() { assertThat(MoreExecutors.shutdownAndAwaitTermination(executor, 10, TimeUnit.SECONDS)).isTrue(); } + @Test + public void versionMetrics() { + final Server server = ServerTest.server.server(); + server.setupVersionMetrics(); + + final MeterRegistry meterRegistry = server.config().meterRegistry(); + assertThat(meterRegistry.find("armeria.build.info") + .gauge() + .value()) + .isOne(); + } + private static void testSimple( String reqLine, String expectedStatusLine, String... expectedHeaders) throws Exception { From eaf102d0188511c03e58c5b7baf151f627dc1f74 Mon Sep 17 00:00:00 2001 From: Manabu Matsuzaki Date: Fri, 11 Oct 2019 13:31:10 +0900 Subject: [PATCH 2/7] Add repostatus in metrics labels --- core/src/main/java/com/linecorp/armeria/server/Server.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/core/src/main/java/com/linecorp/armeria/server/Server.java b/core/src/main/java/com/linecorp/armeria/server/Server.java index 18c627872fc..58bf7395faf 100644 --- a/core/src/main/java/com/linecorp/armeria/server/Server.java +++ b/core/src/main/java/com/linecorp/armeria/server/Server.java @@ -321,8 +321,10 @@ void setupVersionMetrics() { final Version versionInfo = map.get("armeria"); final String version = versionInfo.artifactVersion(); final String commit = versionInfo.longCommitHash(); + final String repositoryStatus = versionInfo.repositoryStatus(); final List tags = ImmutableList.of(Tag.of("version", version), - Tag.of("commit", commit)); + Tag.of("commit", commit), + Tag.of("repostatus", repositoryStatus)); Gauge.builder("armeria.build.info", () -> 1) .tags(tags) .description("A metric with a constant '1' value labeled by version and commit hash" From d8e1b7eb17df9869367a19e1570de0e2ddc5a8f2 Mon Sep 17 00:00:00 2001 From: Manabu Matsuzaki Date: Fri, 11 Oct 2019 14:11:42 +0900 Subject: [PATCH 3/7] Check whether labels are existing --- .../java/com/linecorp/armeria/server/ServerTest.java | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/core/src/test/java/com/linecorp/armeria/server/ServerTest.java b/core/src/test/java/com/linecorp/armeria/server/ServerTest.java index fdd1cdf52b4..c65a73ab958 100644 --- a/core/src/test/java/com/linecorp/armeria/server/ServerTest.java +++ b/core/src/test/java/com/linecorp/armeria/server/ServerTest.java @@ -18,6 +18,7 @@ import static java.util.Objects.requireNonNull; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatThrownBy; +import static org.junit.Assert.assertNotNull; import static org.junit.Assert.fail; import static org.junit.Assume.assumeTrue; @@ -67,6 +68,7 @@ import com.linecorp.armeria.testing.internal.AnticipatedException; import com.linecorp.armeria.testing.junit4.server.ServerRule; +import io.micrometer.core.instrument.Gauge; import io.micrometer.core.instrument.MeterRegistry; import io.netty.channel.ChannelOption; import io.netty.handler.codec.http.HttpStatusClass; @@ -442,10 +444,11 @@ public void versionMetrics() { server.setupVersionMetrics(); final MeterRegistry meterRegistry = server.config().meterRegistry(); - assertThat(meterRegistry.find("armeria.build.info") - .gauge() - .value()) - .isOne(); + final Gauge gauge = meterRegistry.find("armeria.build.info") + .tagKeys("version", "commit", "repostatus") + .gauge(); + assertNotNull(gauge); + assertThat(gauge.value()).isOne(); } private static void testSimple( From a851312b9026643a589abf410f0f99fee2772596 Mon Sep 17 00:00:00 2001 From: Manabu Matsuzaki Date: Fri, 11 Oct 2019 14:23:07 +0900 Subject: [PATCH 4/7] Fix assertion --- core/src/test/java/com/linecorp/armeria/server/ServerTest.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/core/src/test/java/com/linecorp/armeria/server/ServerTest.java b/core/src/test/java/com/linecorp/armeria/server/ServerTest.java index c65a73ab958..13fdcddf2a7 100644 --- a/core/src/test/java/com/linecorp/armeria/server/ServerTest.java +++ b/core/src/test/java/com/linecorp/armeria/server/ServerTest.java @@ -18,7 +18,6 @@ import static java.util.Objects.requireNonNull; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatThrownBy; -import static org.junit.Assert.assertNotNull; import static org.junit.Assert.fail; import static org.junit.Assume.assumeTrue; @@ -447,7 +446,7 @@ public void versionMetrics() { final Gauge gauge = meterRegistry.find("armeria.build.info") .tagKeys("version", "commit", "repostatus") .gauge(); - assertNotNull(gauge); + assertThat(gauge).isNotNull(); assertThat(gauge.value()).isOne(); } From 63cdbda104c9323589bd573b30dd41f8313c648a Mon Sep 17 00:00:00 2001 From: Trustin Lee Date: Thu, 17 Oct 2019 15:15:51 +0900 Subject: [PATCH 5/7] Update Server.java --- core/src/main/java/com/linecorp/armeria/server/Server.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/core/src/main/java/com/linecorp/armeria/server/Server.java b/core/src/main/java/com/linecorp/armeria/server/Server.java index 58bf7395faf..496ea69daef 100644 --- a/core/src/main/java/com/linecorp/armeria/server/Server.java +++ b/core/src/main/java/com/linecorp/armeria/server/Server.java @@ -324,11 +324,11 @@ void setupVersionMetrics() { final String repositoryStatus = versionInfo.repositoryStatus(); final List tags = ImmutableList.of(Tag.of("version", version), Tag.of("commit", commit), - Tag.of("repostatus", repositoryStatus)); + Tag.of("repoStatus", repositoryStatus)); Gauge.builder("armeria.build.info", () -> 1) .tags(tags) - .description("A metric with a constant '1' value labeled by version and commit hash" - + " from which Armeria was built.") + .description("A metric with a constant '1' value labeled by version and commit hash" + + " from which Armeria was built.") .register(meterRegistry); } From f82bb75614c7438f5e66026773180ce683fe514a Mon Sep 17 00:00:00 2001 From: Trustin Lee Date: Thu, 17 Oct 2019 15:16:20 +0900 Subject: [PATCH 6/7] Update ServerTest.java --- core/src/test/java/com/linecorp/armeria/server/ServerTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/test/java/com/linecorp/armeria/server/ServerTest.java b/core/src/test/java/com/linecorp/armeria/server/ServerTest.java index 13fdcddf2a7..5986c7f01f2 100644 --- a/core/src/test/java/com/linecorp/armeria/server/ServerTest.java +++ b/core/src/test/java/com/linecorp/armeria/server/ServerTest.java @@ -444,7 +444,7 @@ public void versionMetrics() { final MeterRegistry meterRegistry = server.config().meterRegistry(); final Gauge gauge = meterRegistry.find("armeria.build.info") - .tagKeys("version", "commit", "repostatus") + .tagKeys("version", "commit", "repoStatus") .gauge(); assertThat(gauge).isNotNull(); assertThat(gauge.value()).isOne(); From a61269bb3d2d8434d95ad2edcb527e45f100725e Mon Sep 17 00:00:00 2001 From: Trustin Lee Date: Thu, 17 Oct 2019 15:31:19 +0900 Subject: [PATCH 7/7] Update Server.java --- core/src/main/java/com/linecorp/armeria/server/Server.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/main/java/com/linecorp/armeria/server/Server.java b/core/src/main/java/com/linecorp/armeria/server/Server.java index 496ea69daef..95df0cb1118 100644 --- a/core/src/main/java/com/linecorp/armeria/server/Server.java +++ b/core/src/main/java/com/linecorp/armeria/server/Server.java @@ -312,7 +312,7 @@ public int numConnections() { } /** - * Setup version metrics + * Sets up the version metrics. */ @VisibleForTesting void setupVersionMetrics() {