Skip to content

Commit

Permalink
Allows passing an OpenTelemetry instance to registerObservers() metho…
Browse files Browse the repository at this point in the history
…ds. (open-telemetry#5716)

* Allows passing an OpenTelemetry instance to registerObservers() methods.

* Deprecated registerObserver methods that were using the GlobalOpenTelemetry instance.
  • Loading branch information
jenarros authored and RashmiRam committed May 23, 2022
1 parent 9146c5e commit 632def8
Show file tree
Hide file tree
Showing 8 changed files with 73 additions and 23 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@

package io.opentelemetry.javaagent.instrumentation.oshi;

import io.opentelemetry.api.GlobalOpenTelemetry;
import io.opentelemetry.instrumentation.api.config.Config;
import io.opentelemetry.instrumentation.oshi.ProcessMetrics;
import io.opentelemetry.instrumentation.oshi.SystemMetrics;
Expand All @@ -16,12 +17,12 @@ public final class MetricsRegistration {

public static void register() {
if (registered.compareAndSet(false, true)) {
SystemMetrics.registerObservers();
SystemMetrics.registerObservers(GlobalOpenTelemetry.get());

// ProcessMetrics don't follow the spec
if (Config.get()
.getBoolean("otel.instrumentation.oshi.experimental-metrics.enabled", false)) {
ProcessMetrics.registerObservers();
ProcessMetrics.registerObservers(GlobalOpenTelemetry.get());
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
package io.opentelemetry.instrumentation.oshi;

import io.opentelemetry.api.GlobalOpenTelemetry;
import io.opentelemetry.api.OpenTelemetry;
import io.opentelemetry.api.common.AttributeKey;
import io.opentelemetry.api.common.Attributes;
import io.opentelemetry.api.metrics.Meter;
Expand All @@ -19,10 +20,18 @@ public class ProcessMetrics {

private ProcessMetrics() {}

/** Register observers for java runtime metrics. */
/**
* Register observers for java runtime metrics.
*
* @deprecated use {@link #registerObservers(OpenTelemetry openTelemetry)}
*/
@Deprecated
public static void registerObservers() {
// TODO(anuraaga): registerObservers should accept an OpenTelemetry instance
Meter meter = GlobalOpenTelemetry.get().getMeterProvider().get("io.opentelemetry.oshi");
registerObservers(GlobalOpenTelemetry.get());
}

public static void registerObservers(OpenTelemetry openTelemetry) {
Meter meter = openTelemetry.getMeterProvider().get("io.opentelemetry.oshi");
SystemInfo systemInfo = new SystemInfo();
OperatingSystem osInfo = systemInfo.getOperatingSystem();
OSProcess processInfo = osInfo.getProcess(osInfo.getProcessId());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
package io.opentelemetry.instrumentation.oshi;

import io.opentelemetry.api.GlobalOpenTelemetry;
import io.opentelemetry.api.OpenTelemetry;
import io.opentelemetry.api.common.AttributeKey;
import io.opentelemetry.api.common.Attributes;
import io.opentelemetry.api.metrics.Meter;
Expand All @@ -27,10 +28,18 @@ public class SystemMetrics {

private SystemMetrics() {}

/** Register observers for system metrics. */
/**
* Register observers for system metrics.
*
* @deprecated use {@link #registerObservers(OpenTelemetry openTelemetry)}
*/
@Deprecated
public static void registerObservers() {
// TODO(anuraaga): registerObservers should accept an OpenTelemetry instance
Meter meter = GlobalOpenTelemetry.get().getMeterProvider().get("io.opentelemetry.oshi");
registerObservers(GlobalOpenTelemetry.get());
}

public static void registerObservers(OpenTelemetry openTelemetry) {
Meter meter = openTelemetry.getMeterProvider().get("io.opentelemetry.oshi");
SystemInfo systemInfo = new SystemInfo();
HardwareAbstractionLayer hal = systemInfo.getHardware();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@

package io.opentelemetry.instrumentation.oshi;

import io.opentelemetry.api.GlobalOpenTelemetry;
import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension;
import io.opentelemetry.instrumentation.testing.junit.LibraryInstrumentationExtension;
import org.junit.jupiter.api.extension.RegisterExtension;
Expand All @@ -16,7 +17,7 @@ class ProcessMetricsTest extends AbstractProcessMetricsTest {

@Override
protected void registerMetrics() {
ProcessMetrics.registerObservers();
ProcessMetrics.registerObservers(GlobalOpenTelemetry.get());
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@

package io.opentelemetry.instrumentation.oshi;

import io.opentelemetry.api.GlobalOpenTelemetry;
import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension;
import io.opentelemetry.instrumentation.testing.junit.LibraryInstrumentationExtension;
import org.junit.jupiter.api.extension.RegisterExtension;
Expand All @@ -16,7 +17,7 @@ class SystemMetricsTest extends AbstractSystemMetricsTest {

@Override
protected void registerMetrics() {
SystemMetrics.registerObservers();
SystemMetrics.registerObservers(GlobalOpenTelemetry.get());
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
package io.opentelemetry.instrumentation.javaagent.runtimemetrics;

import com.google.auto.service.AutoService;
import io.opentelemetry.api.GlobalOpenTelemetry;
import io.opentelemetry.instrumentation.api.config.Config;
import io.opentelemetry.instrumentation.runtimemetrics.GarbageCollector;
import io.opentelemetry.instrumentation.runtimemetrics.MemoryPools;
Expand All @@ -20,8 +21,8 @@ public class RuntimeMetricsInstaller implements AgentListener {
public void afterAgent(Config config, AutoConfiguredOpenTelemetrySdk unused) {
if (config.isInstrumentationEnabled(
Collections.singleton("runtime-metrics"), /* defaultEnabled= */ true)) {
GarbageCollector.registerObservers();
MemoryPools.registerObservers();
GarbageCollector.registerObservers(GlobalOpenTelemetry.get());
MemoryPools.registerObservers(GlobalOpenTelemetry.get());
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
package io.opentelemetry.instrumentation.runtimemetrics;

import io.opentelemetry.api.GlobalOpenTelemetry;
import io.opentelemetry.api.OpenTelemetry;
import io.opentelemetry.api.common.AttributeKey;
import io.opentelemetry.api.common.Attributes;
import io.opentelemetry.api.metrics.Meter;
Expand All @@ -20,7 +21,7 @@
* <p>Example usage:
*
* <pre>{@code
* GarbageCollector.registerObservers();
* GarbageCollector.registerObservers(GlobalOpenTelemetry.get());
* }</pre>
*
* <p>Example metrics being exported:
Expand All @@ -33,12 +34,19 @@
public final class GarbageCollector {
private static final AttributeKey<String> GC_KEY = AttributeKey.stringKey("gc");

/** Register all observers provided by this module. */
/**
* Register all observers provided by this module.
*
* @deprecated use {@link #registerObservers(OpenTelemetry openTelemetry)}
*/
@Deprecated
public static void registerObservers() {
// TODO(anuraaga): registerObservers should accept an OpenTelemetry instance
registerObservers(GlobalOpenTelemetry.get());
}

public static void registerObservers(OpenTelemetry openTelemetry) {
List<GarbageCollectorMXBean> garbageCollectors = ManagementFactory.getGarbageCollectorMXBeans();
Meter meter =
GlobalOpenTelemetry.get().getMeterProvider().get(GarbageCollector.class.getName());
Meter meter = openTelemetry.getMeterProvider().get(GarbageCollector.class.getName());
List<Attributes> labelSets = new ArrayList<>(garbageCollectors.size());
for (GarbageCollectorMXBean gc : garbageCollectors) {
labelSets.add(Attributes.of(GC_KEY, gc.getName()));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
package io.opentelemetry.instrumentation.runtimemetrics;

import io.opentelemetry.api.GlobalOpenTelemetry;
import io.opentelemetry.api.OpenTelemetry;
import io.opentelemetry.api.common.AttributeKey;
import io.opentelemetry.api.common.Attributes;
import io.opentelemetry.api.metrics.Meter;
Expand All @@ -23,7 +24,7 @@
* <p>Example usage:
*
* <pre>{@code
* MemoryPools.registerObservers();
* MemoryPools.registerObservers(GlobalOpenTelemetry.get());
* }</pre>
*
* <p>Example metrics being exported: Component
Expand Down Expand Up @@ -58,10 +59,14 @@ public final class MemoryPools {
private static final Attributes MAX_NON_HEAP = Attributes.of(TYPE_KEY, MAX, AREA_KEY, NON_HEAP);

/** Register only the "area" measurements. */
@Deprecated
public static void registerMemoryAreaObservers() {
// TODO(anuraaga): registerObservers should accept an OpenTelemetry instance
registerMemoryPoolObservers(GlobalOpenTelemetry.get());
}

public static void registerMemoryAreaObservers(OpenTelemetry openTelemetry) {
MemoryMXBean memoryBean = ManagementFactory.getMemoryMXBean();
Meter meter = GlobalOpenTelemetry.get().getMeterProvider().get(MemoryPools.class.getName());
Meter meter = openTelemetry.getMeterProvider().get(MemoryPools.class.getName());
meter
.upDownCounterBuilder("runtime.jvm.memory.area")
.setDescription("Bytes of a given JVM memory area.")
Expand All @@ -74,10 +79,14 @@ public static void registerMemoryAreaObservers() {
}

/** Register only the "pool" measurements. */
@Deprecated
public static void registerMemoryPoolObservers() {
// TODO(anuraaga): registerObservers should accept an OpenTelemetry instance
registerMemoryPoolObservers(GlobalOpenTelemetry.get());
}

public static void registerMemoryPoolObservers(OpenTelemetry openTelemetry) {
List<MemoryPoolMXBean> poolBeans = ManagementFactory.getMemoryPoolMXBeans();
Meter meter = GlobalOpenTelemetry.get().getMeterProvider().get(MemoryPools.class.getName());
Meter meter = openTelemetry.getMeterProvider().get(MemoryPools.class.getName());
List<Attributes> usedLabelSets = new ArrayList<>(poolBeans.size());
List<Attributes> committedLabelSets = new ArrayList<>(poolBeans.size());
List<Attributes> maxLabelSets = new ArrayList<>(poolBeans.size());
Expand Down Expand Up @@ -106,12 +115,23 @@ public static void registerMemoryPoolObservers() {
});
}

/** Register all measurements provided by this module. */
/**
* Register all measurements provided by this module.
*
* @deprecated use {@link #registerObservers(OpenTelemetry openTelemetry)}
*/
@Deprecated
public static void registerObservers() {
registerMemoryAreaObservers();
registerMemoryPoolObservers();
}

/** Register all measurements provided by this module. */
public static void registerObservers(OpenTelemetry openTelemetry) {
registerMemoryAreaObservers(openTelemetry);
registerMemoryPoolObservers(openTelemetry);
}

static void recordHeap(ObservableLongMeasurement measurement, MemoryUsage usage) {
record(measurement, usage, USED_HEAP, COMMITTED_HEAP, MAX_HEAP);
}
Expand Down

0 comments on commit 632def8

Please sign in to comment.