Update custom Gauges to Micrometer MeterBinders
This commit is contained in:
parent
10dfa18e81
commit
ab64828661
|
@ -5,10 +5,15 @@
|
||||||
|
|
||||||
package org.whispersystems.textsecuregcm.metrics;
|
package org.whispersystems.textsecuregcm.metrics;
|
||||||
|
|
||||||
|
import static org.whispersystems.textsecuregcm.metrics.MetricsUtil.name;
|
||||||
|
|
||||||
import com.sun.management.OperatingSystemMXBean;
|
import com.sun.management.OperatingSystemMXBean;
|
||||||
|
import io.micrometer.core.instrument.Gauge;
|
||||||
|
import io.micrometer.core.instrument.MeterRegistry;
|
||||||
|
import io.micrometer.core.instrument.binder.MeterBinder;
|
||||||
import java.lang.management.ManagementFactory;
|
import java.lang.management.ManagementFactory;
|
||||||
|
|
||||||
public class FreeMemoryGauge implements Gauge {
|
public class FreeMemoryGauge implements MeterBinder {
|
||||||
|
|
||||||
private final OperatingSystemMXBean operatingSystemMXBean;
|
private final OperatingSystemMXBean operatingSystemMXBean;
|
||||||
|
|
||||||
|
@ -18,7 +23,10 @@ public class FreeMemoryGauge implements Gauge {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public double getValue() {
|
public void bindTo(final MeterRegistry registry) {
|
||||||
return operatingSystemMXBean.getFreeMemorySize();
|
Gauge.builder(name(FreeMemoryGauge.class, "freeMemory"), operatingSystemMXBean,
|
||||||
|
OperatingSystemMXBean::getFreeMemorySize)
|
||||||
|
.register(registry);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,11 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright 2024 Signal Messenger, LLC
|
|
||||||
* SPDX-License-Identifier: AGPL-3.0-only
|
|
||||||
*/
|
|
||||||
|
|
||||||
package org.whispersystems.textsecuregcm.metrics;
|
|
||||||
|
|
||||||
interface Gauge {
|
|
||||||
|
|
||||||
double getValue();
|
|
||||||
}
|
|
|
@ -105,10 +105,10 @@ public class MetricsUtil {
|
||||||
|
|
||||||
public static void registerSystemResourceMetrics(final Environment environment) {
|
public static void registerSystemResourceMetrics(final Environment environment) {
|
||||||
new ProcessorMetrics().bindTo(Metrics.globalRegistry);
|
new ProcessorMetrics().bindTo(Metrics.globalRegistry);
|
||||||
registerGauge(name(FreeMemoryGauge.class, "freeMemory"), new FreeMemoryGauge());
|
new FreeMemoryGauge().bindTo(Metrics.globalRegistry);
|
||||||
new FileDescriptorMetrics().bindTo(Metrics.globalRegistry);
|
new FileDescriptorMetrics().bindTo(Metrics.globalRegistry);
|
||||||
registerGauge(name(OperatingSystemMemoryGauge.class, "buffers"), new OperatingSystemMemoryGauge("Buffers"));
|
new OperatingSystemMemoryGauge("Buffers").bindTo(Metrics.globalRegistry);
|
||||||
registerGauge(name(OperatingSystemMemoryGauge.class, "cached"), new OperatingSystemMemoryGauge("Cached"));
|
new OperatingSystemMemoryGauge("Cached").bindTo(Metrics.globalRegistry);
|
||||||
|
|
||||||
new JvmMemoryMetrics().bindTo(Metrics.globalRegistry);
|
new JvmMemoryMetrics().bindTo(Metrics.globalRegistry);
|
||||||
new JvmThreadMetrics().bindTo(Metrics.globalRegistry);
|
new JvmThreadMetrics().bindTo(Metrics.globalRegistry);
|
||||||
|
@ -116,8 +116,4 @@ public class MetricsUtil {
|
||||||
GarbageCollectionGauges.registerMetrics();
|
GarbageCollectionGauges.registerMetrics();
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void registerGauge(final String name, final Gauge gauge) {
|
|
||||||
Metrics.gauge(name, gauge, Gauge::getValue);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,16 +5,22 @@
|
||||||
|
|
||||||
package org.whispersystems.textsecuregcm.metrics;
|
package org.whispersystems.textsecuregcm.metrics;
|
||||||
|
|
||||||
|
import static org.whispersystems.textsecuregcm.metrics.MetricsUtil.name;
|
||||||
|
|
||||||
import com.google.common.annotations.VisibleForTesting;
|
import com.google.common.annotations.VisibleForTesting;
|
||||||
|
import io.micrometer.core.instrument.Gauge;
|
||||||
|
import io.micrometer.core.instrument.MeterRegistry;
|
||||||
|
import io.micrometer.core.instrument.binder.MeterBinder;
|
||||||
import java.io.BufferedReader;
|
import java.io.BufferedReader;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.FileReader;
|
import java.io.FileReader;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
import java.util.Locale;
|
||||||
import java.util.regex.Matcher;
|
import java.util.regex.Matcher;
|
||||||
import java.util.regex.Pattern;
|
import java.util.regex.Pattern;
|
||||||
import java.util.stream.Stream;
|
import java.util.stream.Stream;
|
||||||
|
|
||||||
public class OperatingSystemMemoryGauge implements Gauge {
|
public class OperatingSystemMemoryGauge implements MeterBinder {
|
||||||
|
|
||||||
private final String metricName;
|
private final String metricName;
|
||||||
|
|
||||||
|
@ -26,19 +32,23 @@ public class OperatingSystemMemoryGauge implements Gauge {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public double getValue() {
|
public void bindTo(MeterRegistry registry) {
|
||||||
try (final BufferedReader bufferedReader = new BufferedReader(new FileReader(MEMINFO_FILE))) {
|
final String metricName = this.metricName;
|
||||||
return getValue(bufferedReader.lines());
|
Gauge.builder(name(OperatingSystemMemoryGauge.class, metricName.toLowerCase(Locale.ROOT)), () -> {
|
||||||
} catch (final IOException e) {
|
try (final BufferedReader bufferedReader = new BufferedReader(new FileReader(MEMINFO_FILE))) {
|
||||||
return 0L;
|
return getValue(bufferedReader.lines(), metricName);
|
||||||
}
|
} catch (final IOException e) {
|
||||||
|
return 0L;
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.register(registry);
|
||||||
}
|
}
|
||||||
|
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
double getValue(final Stream<String> lines) {
|
static double getValue(final Stream<String> lines, final String metricName) {
|
||||||
return lines.map(MEMORY_METRIC_PATTERN::matcher)
|
return lines.map(MEMORY_METRIC_PATTERN::matcher)
|
||||||
.filter(Matcher::matches)
|
.filter(Matcher::matches)
|
||||||
.filter(matcher -> this.metricName.equalsIgnoreCase(matcher.group(1)))
|
.filter(matcher -> metricName.equalsIgnoreCase(matcher.group(1)))
|
||||||
.map(matcher -> Double.parseDouble(matcher.group(2)))
|
.map(matcher -> Double.parseDouble(matcher.group(2)))
|
||||||
.findFirst()
|
.findFirst()
|
||||||
.orElse(0d);
|
.orElse(0d);
|
||||||
|
|
|
@ -75,7 +75,7 @@ class OperatingSystemMemoryGaugeTest {
|
||||||
@ParameterizedTest
|
@ParameterizedTest
|
||||||
@MethodSource
|
@MethodSource
|
||||||
void testGetValue(final String metricName, final long expectedValue) {
|
void testGetValue(final String metricName, final long expectedValue) {
|
||||||
assertEquals(expectedValue, new OperatingSystemMemoryGauge(metricName).getValue(MEMINFO.lines()));
|
assertEquals(expectedValue, OperatingSystemMemoryGauge.getValue(MEMINFO.lines(), metricName));
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings("unused")
|
@SuppressWarnings("unused")
|
||||||
|
|
Loading…
Reference in New Issue