Skip to content

Commit

Permalink
Update custom Gauges to Micrometer MeterBinders
Browse files Browse the repository at this point in the history
  • Loading branch information
eager-signal committed Apr 17, 2024
1 parent 10dfa18 commit ab64828
Show file tree
Hide file tree
Showing 5 changed files with 34 additions and 31 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,15 @@

package org.whispersystems.textsecuregcm.metrics;

import static org.whispersystems.textsecuregcm.metrics.MetricsUtil.name;

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;

public class FreeMemoryGauge implements Gauge {
public class FreeMemoryGauge implements MeterBinder {

private final OperatingSystemMXBean operatingSystemMXBean;

Expand All @@ -18,7 +23,10 @@ public FreeMemoryGauge() {
}

@Override
public double getValue() {
return operatingSystemMXBean.getFreeMemorySize();
public void bindTo(final MeterRegistry registry) {
Gauge.builder(name(FreeMemoryGauge.class, "freeMemory"), operatingSystemMXBean,
OperatingSystemMXBean::getFreeMemorySize)
.register(registry);

}
}

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -105,19 +105,15 @@ public Meter.Id map(final Meter.Id id) {

public static void registerSystemResourceMetrics(final Environment environment) {
new ProcessorMetrics().bindTo(Metrics.globalRegistry);
registerGauge(name(FreeMemoryGauge.class, "freeMemory"), new FreeMemoryGauge());
new FreeMemoryGauge().bindTo(Metrics.globalRegistry);
new FileDescriptorMetrics().bindTo(Metrics.globalRegistry);
registerGauge(name(OperatingSystemMemoryGauge.class, "buffers"), new OperatingSystemMemoryGauge("Buffers"));
registerGauge(name(OperatingSystemMemoryGauge.class, "cached"), new OperatingSystemMemoryGauge("Cached"));
new OperatingSystemMemoryGauge("Buffers").bindTo(Metrics.globalRegistry);
new OperatingSystemMemoryGauge("Cached").bindTo(Metrics.globalRegistry);

new JvmMemoryMetrics().bindTo(Metrics.globalRegistry);
new JvmThreadMetrics().bindTo(Metrics.globalRegistry);

GarbageCollectionGauges.registerMetrics();
}

private static void registerGauge(final String name, final Gauge gauge) {
Metrics.gauge(name, gauge, Gauge::getValue);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -5,16 +5,22 @@

package org.whispersystems.textsecuregcm.metrics;

import static org.whispersystems.textsecuregcm.metrics.MetricsUtil.name;

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.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.Locale;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Stream;

public class OperatingSystemMemoryGauge implements Gauge {
public class OperatingSystemMemoryGauge implements MeterBinder {

private final String metricName;

Expand All @@ -26,19 +32,23 @@ public OperatingSystemMemoryGauge(final String metricName) {
}

@Override
public double getValue() {
try (final BufferedReader bufferedReader = new BufferedReader(new FileReader(MEMINFO_FILE))) {
return getValue(bufferedReader.lines());
} catch (final IOException e) {
return 0L;
}
public void bindTo(MeterRegistry registry) {
final String metricName = this.metricName;
Gauge.builder(name(OperatingSystemMemoryGauge.class, metricName.toLowerCase(Locale.ROOT)), () -> {
try (final BufferedReader bufferedReader = new BufferedReader(new FileReader(MEMINFO_FILE))) {
return getValue(bufferedReader.lines(), metricName);
} catch (final IOException e) {
return 0L;
}
})
.register(registry);
}

@VisibleForTesting
double getValue(final Stream<String> lines) {
static double getValue(final Stream<String> lines, final String metricName) {
return lines.map(MEMORY_METRIC_PATTERN::matcher)
.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)))
.findFirst()
.orElse(0d);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ class OperatingSystemMemoryGaugeTest {
@ParameterizedTest
@MethodSource
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")
Expand Down

0 comments on commit ab64828

Please sign in to comment.