From 59ddd59eb32da7975f13ceb26dfebeaa27e86168 Mon Sep 17 00:00:00 2001 From: Michael Weirauch Date: Fri, 20 Jan 2023 20:08:30 +0100 Subject: [PATCH] Don't register unsupported metrics --- .../jvm/extras/ProcessMemoryMetrics.java | 6 +++- .../jvm/extras/ProcessThreadMetrics.java | 33 +++++++++++-------- .../jvm/extras/ProcessMemoryMetricsTest.java | 25 +++++++++++--- .../jvm/extras/ProcessThreadMetricsTest.java | 23 +++++++++++-- 4 files changed, 66 insertions(+), 21 deletions(-) diff --git a/src/main/java/io/github/mweirauch/micrometer/jvm/extras/ProcessMemoryMetrics.java b/src/main/java/io/github/mweirauch/micrometer/jvm/extras/ProcessMemoryMetrics.java index c574445..5fbedb9 100644 --- a/src/main/java/io/github/mweirauch/micrometer/jvm/extras/ProcessMemoryMetrics.java +++ b/src/main/java/io/github/mweirauch/micrometer/jvm/extras/ProcessMemoryMetrics.java @@ -1,5 +1,5 @@ /* - * Copyright © 2017-2021 Michael Weirauch (michael.weirauch@gmail.com) + * Copyright © 2017-2022 Michael Weirauch (michael.weirauch@gmail.com) * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -40,6 +40,10 @@ public ProcessMemoryMetrics() { public void bindTo(MeterRegistry registry) { final KEY[] keys = { KEY.VSS, KEY.RSS, KEY.SWAP }; for (final KEY key : keys) { + if (status.get(key) == -1D) { + continue; + } + final String name = "process.memory." + key.name().toLowerCase(Locale.ENGLISH); Gauge.builder(name, status, statusRef -> value(key)) // .baseUnit("bytes") // diff --git a/src/main/java/io/github/mweirauch/micrometer/jvm/extras/ProcessThreadMetrics.java b/src/main/java/io/github/mweirauch/micrometer/jvm/extras/ProcessThreadMetrics.java index f21b285..20a4c2a 100644 --- a/src/main/java/io/github/mweirauch/micrometer/jvm/extras/ProcessThreadMetrics.java +++ b/src/main/java/io/github/mweirauch/micrometer/jvm/extras/ProcessThreadMetrics.java @@ -38,19 +38,26 @@ public ProcessThreadMetrics() { @Override public void bindTo(MeterRegistry registry) { - Gauge.builder("process.threads", status, statusRef -> value(KEY.THREADS)) // - .description("The number of process threads") // - .register(registry); - - FunctionCounter.builder("process.threads.context.switches.voluntary", // - status, statusRef -> value(KEY.VOLUNTARY_CTXT_SWITCHES)) // - .description("Voluntary context switches") // - .register(registry); - - FunctionCounter.builder("process.threads.context.switches.nonvoluntary", // - status, statusRef -> value(KEY.NONVOLUNTARY_CTXT_SWITCHES))// - .description("Non-voluntary context switches") // - .register(registry); + if (status.get(KEY.THREADS) != -1D) { + Gauge.builder("process.threads", // + status, statusRef -> value(KEY.THREADS)) // + .description("The number of process threads") // + .register(registry); + } + + if (status.get(KEY.VOLUNTARY_CTXT_SWITCHES) != -1D) { + FunctionCounter.builder("process.threads.context.switches.voluntary", // + status, statusRef -> value(KEY.VOLUNTARY_CTXT_SWITCHES)) // + .description("Voluntary context switches") // + .register(registry); + } + + if (status.get(KEY.NONVOLUNTARY_CTXT_SWITCHES) != -1D) { + FunctionCounter.builder("process.threads.context.switches.nonvoluntary", // + status, statusRef -> value(KEY.NONVOLUNTARY_CTXT_SWITCHES))// + .description("Non-voluntary context switches") // + .register(registry); + } } private Double value(KEY key) { diff --git a/src/test/java/io/github/mweirauch/micrometer/jvm/extras/ProcessMemoryMetricsTest.java b/src/test/java/io/github/mweirauch/micrometer/jvm/extras/ProcessMemoryMetricsTest.java index 9b09b44..5084556 100644 --- a/src/test/java/io/github/mweirauch/micrometer/jvm/extras/ProcessMemoryMetricsTest.java +++ b/src/test/java/io/github/mweirauch/micrometer/jvm/extras/ProcessMemoryMetricsTest.java @@ -1,5 +1,5 @@ /* - * Copyright © 2017-2021 Michael Weirauch (michael.weirauch@gmail.com) + * Copyright © 2017-2022 Michael Weirauch (michael.weirauch@gmail.com) * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -55,7 +55,7 @@ public void testInstantiation() { } @Test - public void testGetMetrics() throws Exception { + public void testGetMetrics() { when(status.get(KEY.VSS)).thenReturn(1D); when(status.get(KEY.RSS)).thenReturn(2D); when(status.get(KEY.SWAP)).thenReturn(3D); @@ -79,10 +79,27 @@ public void testGetMetrics() throws Exception { assertEquals(3.0, swap.value(), 0.0); assertEquals(expectedUnit, swap.getId().getBaseUnit()); - verify(status, times(3)).get(any(KEY.class)); + assertEquals(3, registry.getMeters().size()); + + verify(status, times(6)).get(any(KEY.class)); verifyNoMoreInteractions(status); + } - assertEquals(3, registry.getMeters().size()); + @Test + public void testUnsupported() { + when(status.get(KEY.VSS)).thenReturn(-1D); + when(status.get(KEY.RSS)).thenReturn(-1D); + when(status.get(KEY.SWAP)).thenReturn(-1D); + + final SimpleMeterRegistry registry = new SimpleMeterRegistry(); + final ProcessMemoryMetrics uut = new ProcessMemoryMetrics(status); + + uut.bindTo(registry); + + assertEquals(0, registry.getMeters().size()); + + verify(status, times(3)).get(any(KEY.class)); + verifyNoMoreInteractions(status); } } diff --git a/src/test/java/io/github/mweirauch/micrometer/jvm/extras/ProcessThreadMetricsTest.java b/src/test/java/io/github/mweirauch/micrometer/jvm/extras/ProcessThreadMetricsTest.java index 84c0cf6..34f8186 100644 --- a/src/test/java/io/github/mweirauch/micrometer/jvm/extras/ProcessThreadMetricsTest.java +++ b/src/test/java/io/github/mweirauch/micrometer/jvm/extras/ProcessThreadMetricsTest.java @@ -54,7 +54,7 @@ public void testInstantiation() { } @Test - public void testGetMetrics() throws Exception { + public void testGetMetrics() { when(status.get(KEY.THREADS)).thenReturn(7D); when(status.get(KEY.VOLUNTARY_CTXT_SWITCHES)).thenReturn(4D); when(status.get(KEY.NONVOLUNTARY_CTXT_SWITCHES)).thenReturn(5D); @@ -72,10 +72,27 @@ public void testGetMetrics() throws Exception { assertEquals(5.0, registry.get("process.threads.context.switches.nonvoluntary") .functionCounter().count(), 0.0); - verify(status, times(3)).get(any(KEY.class)); + assertEquals(3, registry.getMeters().size()); + + verify(status, times(6)).get(any(KEY.class)); verifyNoMoreInteractions(status); + } - assertEquals(3, registry.getMeters().size()); + @Test + public void testUnsupported() { + when(status.get(KEY.THREADS)).thenReturn(-1D); + when(status.get(KEY.VOLUNTARY_CTXT_SWITCHES)).thenReturn(-1D); + when(status.get(KEY.NONVOLUNTARY_CTXT_SWITCHES)).thenReturn(-1D); + + final SimpleMeterRegistry registry = new SimpleMeterRegistry(); + final ProcessThreadMetrics uut = new ProcessThreadMetrics(status); + + uut.bindTo(registry); + + assertEquals(0, registry.getMeters().size()); + + verify(status, times(3)).get(any(KEY.class)); + verifyNoMoreInteractions(status); } }