diff --git a/micrometer-core/build.gradle b/micrometer-core/build.gradle index 2d426bf302..bd41305b68 100644 --- a/micrometer-core/build.gradle +++ b/micrometer-core/build.gradle @@ -99,7 +99,7 @@ dependencies { optionalApi 'org.apache.tomcat.embed:tomcat-embed-core' optionalApi 'org.glassfish.jersey.core:jersey-server' optionalApi 'io.grpc:grpc-api' - optionalApi 'io.netty:netty-transport' + optionalApi 'io.netty:netty-transport' // apache httpcomponents monitoring optionalApi 'org.apache.httpcomponents:httpclient' diff --git a/micrometer-core/src/main/java/io/micrometer/core/instrument/binder/netty4/NettyAllocatorMetrics.java b/micrometer-core/src/main/java/io/micrometer/core/instrument/binder/netty4/NettyAllocatorMetrics.java index 19bf3e1108..aa8aa1d610 100644 --- a/micrometer-core/src/main/java/io/micrometer/core/instrument/binder/netty4/NettyAllocatorMetrics.java +++ b/micrometer-core/src/main/java/io/micrometer/core/instrument/binder/netty4/NettyAllocatorMetrics.java @@ -48,19 +48,19 @@ public void bindTo(MeterRegistry registry) { int allocatorId = this.allocator.hashCode(); ByteBufAllocatorMetric allocatorMetric = this.allocator.metric(); - Tags tags = Tags.of(NettyMeters.AllocatorMeterTags.ID.asString(), String.valueOf(allocatorId), - NettyMeters.AllocatorMeterTags.ALLOCATOR_TYPE.asString(), this.allocator.getClass().getSimpleName()); + Tags tags = Tags.of(NettyMeters.AllocatorKeyNames.ID.asString(), String.valueOf(allocatorId), + NettyMeters.AllocatorKeyNames.ALLOCATOR_TYPE.asString(), this.allocator.getClass().getSimpleName()); Gauge .builder(NettyMeters.ALLOCATOR_MEMORY_USED.getName(), allocatorMetric, ByteBufAllocatorMetric::usedHeapMemory) - .tags(tags.and(NettyMeters.AllocatorMemoryMeterTags.MEMORY_TYPE.asString(), "heap")) + .tags(tags.and(NettyMeters.AllocatorMemoryKeyNames.MEMORY_TYPE.asString(), "heap")) .register(registry); Gauge .builder(NettyMeters.ALLOCATOR_MEMORY_USED.getName(), allocatorMetric, ByteBufAllocatorMetric::usedDirectMemory) - .tags(tags.and(NettyMeters.AllocatorMemoryMeterTags.MEMORY_TYPE.asString(), "direct")) + .tags(tags.and(NettyMeters.AllocatorMemoryKeyNames.MEMORY_TYPE.asString(), "direct")) .register(registry); if (this.allocator instanceof PooledByteBufAllocator) { @@ -70,35 +70,35 @@ public void bindTo(MeterRegistry registry) { Gauge .builder(NettyMeters.ALLOCATOR_MEMORY_PINNED.getName(), pooledByteBufAllocator, PooledByteBufAllocator::pinnedHeapMemory) - .tags(tags.and(NettyMeters.AllocatorMemoryMeterTags.MEMORY_TYPE.asString(), "heap")) + .tags(tags.and(NettyMeters.AllocatorMemoryKeyNames.MEMORY_TYPE.asString(), "heap")) .register(registry); Gauge .builder(NettyMeters.ALLOCATOR_MEMORY_PINNED.getName(), pooledByteBufAllocator, PooledByteBufAllocator::pinnedDirectMemory) - .tags(tags.and(NettyMeters.AllocatorMemoryMeterTags.MEMORY_TYPE.asString(), "direct")) + .tags(tags.and(NettyMeters.AllocatorMemoryKeyNames.MEMORY_TYPE.asString(), "direct")) .register(registry); Gauge .builder(NettyMeters.ALLOCATOR_POOLED_ARENAS.getName(), pooledAllocatorMetric, PooledByteBufAllocatorMetric::numHeapArenas) - .tags(tags.and(NettyMeters.AllocatorMemoryMeterTags.MEMORY_TYPE.asString(), "heap")) + .tags(tags.and(NettyMeters.AllocatorMemoryKeyNames.MEMORY_TYPE.asString(), "heap")) .register(registry); Gauge .builder(NettyMeters.ALLOCATOR_POOLED_ARENAS.getName(), pooledAllocatorMetric, PooledByteBufAllocatorMetric::numDirectArenas) - .tags(tags.and(NettyMeters.AllocatorMemoryMeterTags.MEMORY_TYPE.asString(), "direct")) + .tags(tags.and(NettyMeters.AllocatorMemoryKeyNames.MEMORY_TYPE.asString(), "direct")) .register(registry); Gauge .builder(NettyMeters.ALLOCATOR_POOLED_CACHE_SIZE.getName(), pooledAllocatorMetric, PooledByteBufAllocatorMetric::normalCacheSize) - .tags(tags.and(NettyMeters.AllocatorPooledCacheMeterTags.CACHE_TYPE.asString(), "normal")) + .tags(tags.and(NettyMeters.AllocatorPooledCacheKeyNames.CACHE_TYPE.asString(), "normal")) .register(registry); Gauge .builder(NettyMeters.ALLOCATOR_POOLED_CACHE_SIZE.getName(), pooledAllocatorMetric, PooledByteBufAllocatorMetric::smallCacheSize) - .tags(tags.and(NettyMeters.AllocatorPooledCacheMeterTags.CACHE_TYPE.asString(), "small")) + .tags(tags.and(NettyMeters.AllocatorPooledCacheKeyNames.CACHE_TYPE.asString(), "small")) .register(registry); Gauge diff --git a/micrometer-core/src/main/java/io/micrometer/core/instrument/binder/netty4/NettyEventExecutorMetrics.java b/micrometer-core/src/main/java/io/micrometer/core/instrument/binder/netty4/NettyEventExecutorMetrics.java index 23c250a68d..d3bf69b46a 100644 --- a/micrometer-core/src/main/java/io/micrometer/core/instrument/binder/netty4/NettyEventExecutorMetrics.java +++ b/micrometer-core/src/main/java/io/micrometer/core/instrument/binder/netty4/NettyEventExecutorMetrics.java @@ -68,7 +68,7 @@ public void bindTo(MeterRegistry registry) { Gauge .builder(NettyMeters.EVENT_EXECUTOR_TASKS_PENDING.getName(), singleThreadEventExecutor::pendingTasks) - .tag(NettyMeters.EventLoopTasksPendingMeterTags.NAME.asString(), + .tag(NettyMeters.EventExecutorTasksPendingKeyNames.NAME.asString(), singleThreadEventExecutor.threadProperties().name()) .register(registry); } diff --git a/micrometer-core/src/main/java/io/micrometer/core/instrument/binder/netty4/NettyMeters.java b/micrometer-core/src/main/java/io/micrometer/core/instrument/binder/netty4/NettyMeters.java index 23ed450919..088c1db413 100644 --- a/micrometer-core/src/main/java/io/micrometer/core/instrument/binder/netty4/NettyMeters.java +++ b/micrometer-core/src/main/java/io/micrometer/core/instrument/binder/netty4/NettyMeters.java @@ -17,6 +17,7 @@ import io.micrometer.common.docs.KeyName; import io.micrometer.core.instrument.Meter; +import io.micrometer.core.instrument.binder.BaseUnits; import io.micrometer.core.instrument.docs.MeterDocumentation; /** @@ -45,12 +46,12 @@ public Meter.Type getType() { @Override public String getBaseUnit() { - return "bytes"; + return BaseUnits.BYTES; } @Override public KeyName[] getKeyNames() { - return KeyName.merge(AllocatorMeterTags.values(), AllocatorMemoryMeterTags.values()); + return KeyName.merge(AllocatorKeyNames.values(), AllocatorMemoryKeyNames.values()); } }, @@ -70,17 +71,17 @@ public Meter.Type getType() { @Override public String getBaseUnit() { - return "bytes"; + return BaseUnits.BYTES; } @Override public KeyName[] getKeyNames() { - return KeyName.merge(AllocatorMeterTags.values(), AllocatorMemoryMeterTags.values()); + return KeyName.merge(AllocatorKeyNames.values(), AllocatorMemoryKeyNames.values()); } }, /** - * Number of Arenas for a pooled allocator. + * Number of arenas for a pooled allocator. */ ALLOCATOR_POOLED_ARENAS { @Override @@ -95,7 +96,7 @@ public Meter.Type getType() { @Override public KeyName[] getKeyNames() { - return KeyName.merge(AllocatorMeterTags.values(), AllocatorMemoryMeterTags.values()); + return KeyName.merge(AllocatorKeyNames.values(), AllocatorMemoryKeyNames.values()); } }, @@ -115,12 +116,12 @@ public Meter.Type getType() { @Override public String getBaseUnit() { - return "bytes"; + return BaseUnits.BYTES; } @Override public KeyName[] getKeyNames() { - return KeyName.merge(AllocatorMeterTags.values(), AllocatorPooledCacheMeterTags.values()); + return KeyName.merge(AllocatorKeyNames.values(), AllocatorPooledCacheKeyNames.values()); } }, @@ -140,7 +141,7 @@ public Meter.Type getType() { @Override public KeyName[] getKeyNames() { - return AllocatorMeterTags.values(); + return AllocatorKeyNames.values(); } }, @@ -160,12 +161,12 @@ public Meter.Type getType() { @Override public String getBaseUnit() { - return "bytes"; + return BaseUnits.BYTES; } @Override public KeyName[] getKeyNames() { - return AllocatorMeterTags.values(); + return AllocatorKeyNames.values(); } }, @@ -185,11 +186,11 @@ public Meter.Type getType() { @Override public KeyName[] getKeyNames() { - return EventLoopTasksPendingMeterTags.values(); + return EventExecutorTasksPendingKeyNames.values(); } }; - public enum AllocatorMeterTags implements KeyName { + enum AllocatorKeyNames implements KeyName { /** * Unique runtime identifier for the allocator. @@ -201,7 +202,7 @@ public String asString() { } }, /** - * Type of memory allocation strategy (pooled, unpooled). + * Allocator's class simple name. */ ALLOCATOR_TYPE { @Override @@ -212,7 +213,7 @@ public String asString() { } - public enum AllocatorMemoryMeterTags implements KeyName { + enum AllocatorMemoryKeyNames implements KeyName { /** * Type of memory allocated: {@code "heap"} memory or {@code "direct"} memory. @@ -226,7 +227,7 @@ public String asString() { } - public enum AllocatorPooledCacheMeterTags implements KeyName { + enum AllocatorPooledCacheKeyNames implements KeyName { /** * Type of cache pages for this cache. @@ -240,10 +241,10 @@ public String asString() { } - public enum EventLoopTasksPendingMeterTags implements KeyName { + enum EventExecutorTasksPendingKeyNames implements KeyName { /** - * Event Loop name. + * Event loop name. */ NAME { @Override diff --git a/micrometer-core/src/test/java/io/micrometer/core/instrument/binder/netty4/NettyAllocatorMetricsTests.java b/micrometer-core/src/test/java/io/micrometer/core/instrument/binder/netty4/NettyAllocatorMetricsTests.java index e2945f483a..c2350f5125 100644 --- a/micrometer-core/src/test/java/io/micrometer/core/instrument/binder/netty4/NettyAllocatorMetricsTests.java +++ b/micrometer-core/src/test/java/io/micrometer/core/instrument/binder/netty4/NettyAllocatorMetricsTests.java @@ -15,9 +15,7 @@ */ package io.micrometer.core.instrument.binder.netty4; -import io.micrometer.core.instrument.MockClock; import io.micrometer.core.instrument.Tags; -import io.micrometer.core.instrument.simple.SimpleConfig; import io.micrometer.core.instrument.simple.SimpleMeterRegistry; import io.netty.buffer.ByteBuf; import io.netty.buffer.PooledByteBufAllocator; @@ -33,7 +31,7 @@ */ class NettyAllocatorMetricsTests { - private SimpleMeterRegistry registry = new SimpleMeterRegistry(SimpleConfig.DEFAULT, new MockClock()); + private final SimpleMeterRegistry registry = new SimpleMeterRegistry(); @Test void shouldHaveHeapMemoryUsedMetricsForUnpooledAllocator() { diff --git a/micrometer-core/src/test/java/io/micrometer/core/instrument/binder/netty4/NettyEventExecutorMetricsTests.java b/micrometer-core/src/test/java/io/micrometer/core/instrument/binder/netty4/NettyEventExecutorMetricsTests.java index 04dc0deb5a..1e0a2f3156 100644 --- a/micrometer-core/src/test/java/io/micrometer/core/instrument/binder/netty4/NettyEventExecutorMetricsTests.java +++ b/micrometer-core/src/test/java/io/micrometer/core/instrument/binder/netty4/NettyEventExecutorMetricsTests.java @@ -15,9 +15,7 @@ */ package io.micrometer.core.instrument.binder.netty4; -import io.micrometer.core.instrument.MockClock; import io.micrometer.core.instrument.Tags; -import io.micrometer.core.instrument.simple.SimpleConfig; import io.micrometer.core.instrument.simple.SimpleMeterRegistry; import io.netty.channel.DefaultEventLoopGroup; import io.netty.channel.EventLoop; @@ -37,10 +35,10 @@ */ class NettyEventExecutorMetricsTests { - private SimpleMeterRegistry registry = new SimpleMeterRegistry(SimpleConfig.DEFAULT, new MockClock()); + private final SimpleMeterRegistry registry = new SimpleMeterRegistry(); @Test - void shouldHaveTaskPendingMetricForEachEventLoop() throws Exception { + void shouldHaveTasksPendingMetricForEachEventLoop() throws Exception { Set names = new LinkedHashSet<>(); DefaultEventLoopGroup eventExecutors = new DefaultEventLoopGroup(); new NettyEventExecutorMetrics(eventExecutors).bindTo(this.registry); @@ -50,6 +48,7 @@ void shouldHaveTaskPendingMetricForEachEventLoop() throws Exception { names.add(singleThreadEventExecutor.threadProperties().name()); } }); + assertThat(names).isNotEmpty(); names.forEach(name -> { assertThat(this.registry.get(NettyMeters.EVENT_EXECUTOR_TASKS_PENDING.getName()) .tags(Tags.of("name", name)) @@ -60,18 +59,17 @@ void shouldHaveTaskPendingMetricForEachEventLoop() throws Exception { } @Test - void shouldHaveTaskPendingMetricForSingleEventLoop() throws Exception { + void shouldHaveTasksPendingMetricForSingleEventLoop() throws Exception { DefaultEventLoopGroup eventExecutors = new DefaultEventLoopGroup(); EventLoop eventLoop = eventExecutors.next(); new NettyEventExecutorMetrics(eventLoop).bindTo(this.registry); - if (eventLoop instanceof SingleThreadEventExecutor) { - SingleThreadEventExecutor singleThreadEventExecutor = (SingleThreadEventExecutor) eventLoop; - String eventLoopName = singleThreadEventExecutor.threadProperties().name(); - assertThat(this.registry.get(NettyMeters.EVENT_EXECUTOR_TASKS_PENDING.getName()) - .tags(Tags.of("name", eventLoopName)) - .gauge() - .value()).isZero(); - } + assertThat(eventLoop).isInstanceOf(SingleThreadEventExecutor.class); + SingleThreadEventExecutor singleThreadEventExecutor = (SingleThreadEventExecutor) eventLoop; + String eventLoopName = singleThreadEventExecutor.threadProperties().name(); + assertThat(this.registry.get(NettyMeters.EVENT_EXECUTOR_TASKS_PENDING.getName()) + .tags(Tags.of("name", eventLoopName)) + .gauge() + .value()).isZero(); eventExecutors.shutdownGracefully().get(5, TimeUnit.SECONDS); }