Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Bridge metrics batch api #7762

Merged
merged 1 commit into from
Feb 9, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,11 @@
import application.io.opentelemetry.api.trace.TracerProvider;
import application.io.opentelemetry.context.propagation.ContextPropagators;
import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.context.propagation.ApplicationContextPropagators;
import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_10.metrics.ApplicationMeterFactory;
import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_10.metrics.ApplicationMeterFactory14;
import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_10.metrics.ApplicationMeterProvider;
import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_4.trace.ApplicationTracerProvider14;
import java.lang.reflect.InvocationTargetException;

public final class ApplicationOpenTelemetry110 implements OpenTelemetry {

Expand All @@ -31,7 +34,8 @@ private ApplicationOpenTelemetry110() {
new ApplicationTracerProvider14(agentOpenTelemetry.getTracerProvider());
applicationContextPropagators =
new ApplicationContextPropagators(agentOpenTelemetry.getPropagators());
applicationMeterProvider = new ApplicationMeterProvider(agentOpenTelemetry.getMeterProvider());
applicationMeterProvider =
new ApplicationMeterProvider(getMeterFactory(), agentOpenTelemetry.getMeterProvider());
}

@Override
Expand All @@ -48,4 +52,20 @@ public MeterProvider getMeterProvider() {
public ContextPropagators getPropagators() {
return applicationContextPropagators;
}

private static ApplicationMeterFactory getMeterFactory() {
try {
// this class is defined in opentelemetry-api-1.15
Class<?> clazz =
Class.forName(
"io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_15.metrics.ApplicationMeterFactory115");
return (ApplicationMeterFactory) clazz.getConstructor().newInstance();
} catch (ClassNotFoundException
| NoSuchMethodException
| InstantiationException
| IllegalAccessException
| InvocationTargetException exception) {
return new ApplicationMeterFactory14();
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -48,4 +48,9 @@ public ObservableDoubleCounter buildWithCallback(
applicationCallback.accept(
new ApplicationObservableDoubleMeasurement(agentMeasurement))));
}

// added in 1.15.0
public ObservableDoubleMeasurement buildObserver() {
return new ApplicationObservableDoubleMeasurement(agentBuilder.buildObserver());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -48,4 +48,9 @@ public ObservableDoubleGauge buildWithCallback(
applicationCallback.accept(
new ApplicationObservableDoubleMeasurement(agentMeasurement))));
}

// added in 1.15.0
public ObservableDoubleMeasurement buildObserver() {
return new ApplicationObservableDoubleMeasurement(agentBuilder.buildObserver());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -49,4 +49,9 @@ public ObservableDoubleUpDownCounter buildWithCallback(
applicationCallback.accept(
new ApplicationObservableDoubleMeasurement(agentMeasurement))));
}

// added in 1.15.0
public ObservableDoubleMeasurement buildObserver() {
return new ApplicationObservableDoubleMeasurement(agentBuilder.buildObserver());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -54,4 +54,9 @@ public ObservableLongCounter buildWithCallback(
applicationCallback.accept(
new ApplicationObservableLongMeasurement(agentMeasurement))));
}

// added in 1.15.0
public ObservableLongMeasurement buildObserver() {
return new ApplicationObservableLongMeasurement(agentBuilder.buildObserver());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -42,4 +42,9 @@ public ObservableLongGauge buildWithCallback(
applicationCallback.accept(
new ApplicationObservableLongMeasurement(agentMeasurement))));
}

// added in 1.15.0
public ObservableLongMeasurement buildObserver() {
return new ApplicationObservableLongMeasurement(agentBuilder.buildObserver());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -55,4 +55,9 @@ public ObservableLongUpDownCounter buildWithCallback(
applicationCallback.accept(
new ApplicationObservableLongMeasurement(agentMeasurement))));
}

// added in 1.15.0
public ObservableLongMeasurement buildObserver() {
return new ApplicationObservableLongMeasurement(agentBuilder.buildObserver());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,11 @@
import application.io.opentelemetry.api.metrics.LongUpDownCounterBuilder;
import application.io.opentelemetry.api.metrics.Meter;

class ApplicationMeter implements Meter {
public class ApplicationMeter implements Meter {

private final io.opentelemetry.api.metrics.Meter agentMeter;

ApplicationMeter(io.opentelemetry.api.metrics.Meter agentMeter) {
protected ApplicationMeter(io.opentelemetry.api.metrics.Meter agentMeter) {
this.agentMeter = agentMeter;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,13 @@

final class ApplicationMeterBuilder implements MeterBuilder {

private final ApplicationMeterFactory meterFactory;
private final io.opentelemetry.api.metrics.MeterBuilder agentBuilder;

ApplicationMeterBuilder(io.opentelemetry.api.metrics.MeterBuilder agentBuilder) {
ApplicationMeterBuilder(
ApplicationMeterFactory meterFactory,
io.opentelemetry.api.metrics.MeterBuilder agentBuilder) {
this.meterFactory = meterFactory;
this.agentBuilder = agentBuilder;
}

Expand All @@ -33,6 +37,6 @@ public MeterBuilder setInstrumentationVersion(String version) {

@Override
public Meter build() {
return new ApplicationMeter(agentBuilder.build());
return meterFactory.newMeter(agentBuilder.build());
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
/*
* Copyright The OpenTelemetry Authors
* SPDX-License-Identifier: Apache-2.0
*/

package io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_10.metrics;

public interface ApplicationMeterFactory {

ApplicationMeter newMeter(io.opentelemetry.api.metrics.Meter agentMeter);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
/*
* Copyright The OpenTelemetry Authors
* SPDX-License-Identifier: Apache-2.0
*/

package io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_10.metrics;

import io.opentelemetry.api.metrics.Meter;

public final class ApplicationMeterFactory14 implements ApplicationMeterFactory {
@Override
public ApplicationMeter newMeter(Meter agentMeter) {
return new ApplicationMeter(agentMeter);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,14 +12,19 @@
@SuppressWarnings("UnnecessarilyFullyQualified")
public class ApplicationMeterProvider implements MeterProvider {

private final ApplicationMeterFactory meterFactory;
private final io.opentelemetry.api.metrics.MeterProvider agentMeterProvider;

public ApplicationMeterProvider(io.opentelemetry.api.metrics.MeterProvider agentMeterProvider) {
public ApplicationMeterProvider(
ApplicationMeterFactory meterFactory,
io.opentelemetry.api.metrics.MeterProvider agentMeterProvider) {
this.meterFactory = meterFactory;
this.agentMeterProvider = agentMeterProvider;
}

@Override
public MeterBuilder meterBuilder(String instrumentationName) {
return new ApplicationMeterBuilder(agentMeterProvider.meterBuilder(instrumentationName));
return new ApplicationMeterBuilder(
meterFactory, agentMeterProvider.meterBuilder(instrumentationName));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,9 @@
import application.io.opentelemetry.api.metrics.ObservableDoubleMeasurement;
import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.trace.Bridging;

final class ApplicationObservableDoubleMeasurement implements ObservableDoubleMeasurement {
final class ApplicationObservableDoubleMeasurement
implements ObservableDoubleMeasurement,
ObservableMeasurementWrapper<io.opentelemetry.api.metrics.ObservableDoubleMeasurement> {

private final io.opentelemetry.api.metrics.ObservableDoubleMeasurement agentMeasurement;

Expand All @@ -27,4 +29,9 @@ public void record(double v) {
public void record(double v, Attributes attributes) {
agentMeasurement.record(v, Bridging.toAgent(attributes));
}

@Override
public io.opentelemetry.api.metrics.ObservableDoubleMeasurement unwrap() {
return agentMeasurement;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,9 @@
import application.io.opentelemetry.api.metrics.ObservableLongMeasurement;
import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.trace.Bridging;

final class ApplicationObservableLongMeasurement implements ObservableLongMeasurement {
final class ApplicationObservableLongMeasurement
implements ObservableLongMeasurement,
ObservableMeasurementWrapper<io.opentelemetry.api.metrics.ObservableLongMeasurement> {

private final io.opentelemetry.api.metrics.ObservableLongMeasurement agentMeasurement;

Expand All @@ -27,4 +29,9 @@ public void record(long v) {
public void record(long v, Attributes attributes) {
agentMeasurement.record(v, Bridging.toAgent(attributes));
}

@Override
public io.opentelemetry.api.metrics.ObservableLongMeasurement unwrap() {
return agentMeasurement;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
/*
* Copyright The OpenTelemetry Authors
* SPDX-License-Identifier: Apache-2.0
*/

package io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_10.metrics;

public interface ObservableMeasurementWrapper<T> {

T unwrap();
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
plugins {
id("otel.javaagent-instrumentation")
}

dependencies {
compileOnly(project(":opentelemetry-api-shaded-for-instrumenting", configuration = "v1_15"))
implementation(project(":instrumentation:opentelemetry-api:opentelemetry-api-1.0:javaagent"))
implementation(project(":instrumentation:opentelemetry-api:opentelemetry-api-1.4:javaagent"))
implementation(project(":instrumentation:opentelemetry-api:opentelemetry-api-1.10:javaagent"))
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
/*
* Copyright The OpenTelemetry Authors
* SPDX-License-Identifier: Apache-2.0
*/

package io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_15;

import static java.util.Collections.singletonList;

import com.google.auto.service.AutoService;
import io.opentelemetry.javaagent.extension.instrumentation.InstrumentationModule;
import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation;
import java.util.List;

@AutoService(InstrumentationModule.class)
public class OpenTelemetryApiInstrumentationModule extends InstrumentationModule {
public OpenTelemetryApiInstrumentationModule() {
super("opentelemetry-api-1.15", "opentelemetry-api");
}

@Override
public List<TypeInstrumentation> typeInstrumentations() {
return singletonList(new OpenTelemetryInstrumentation());
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
/*
* Copyright The OpenTelemetry Authors
* SPDX-License-Identifier: Apache-2.0
*/

package io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_15;

import static net.bytebuddy.matcher.ElementMatchers.named;
import static net.bytebuddy.matcher.ElementMatchers.none;

import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation;
import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer;
import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_15.metrics.ApplicationMeterFactory115;
import net.bytebuddy.asm.Advice;
import net.bytebuddy.description.type.TypeDescription;
import net.bytebuddy.matcher.ElementMatcher;

public class OpenTelemetryInstrumentation implements TypeInstrumentation {

@Override
public ElementMatcher<TypeDescription> typeMatcher() {
return named("application.io.opentelemetry.api.GlobalOpenTelemetry");
}

@Override
public void transform(TypeTransformer transformer) {
transformer.applyAdviceToMethod(
none(), OpenTelemetryInstrumentation.class.getName() + "$InitAdvice");
}

@SuppressWarnings({"ReturnValueIgnored", "unused"})
public static class InitAdvice {
@Advice.OnMethodEnter
public static void init() {
// the sole purpose of this advice is to ensure that ApplicationMeterFactory115 is recognized
// as helper class and injected into class loader
ApplicationMeterFactory115.class.getName();
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
/*
* Copyright The OpenTelemetry Authors
* SPDX-License-Identifier: Apache-2.0
*/

package io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_15.metrics;

import application.io.opentelemetry.api.metrics.BatchCallback;

final class ApplicationBatchCallback implements BatchCallback {
private final io.opentelemetry.api.metrics.BatchCallback agentCallback;

ApplicationBatchCallback(io.opentelemetry.api.metrics.BatchCallback agentCallback) {
this.agentCallback = agentCallback;
}

@Override
public void close() {
agentCallback.close();
}
}
Loading