[ide driver] Using lazy tracer initialization for JMX Invoker since too early init led to NoopOpenTelemetryManager init

GitOrigin-RevId: c0bbe665073a7345050d33ae16fb378993ff93d4
This commit is contained in:
Nikita Kudrin
2023-08-18 17:12:27 +03:00
committed by intellij-monorepo-bot
parent 261706a7e6
commit d4b3af45dd
4 changed files with 16 additions and 9 deletions

View File

@@ -84,7 +84,7 @@ class TelemetryManagerImpl(app: Application) : TelemetryManager {
}
override fun forceFlushMetrics() {
logger<TelemetryManagerImpl>().info("Forcing metrics flushing ...")
logger<TelemetryManagerImpl>().info("Forcing flushing OpenTelemetry metrics ...")
listOf(
sdk.sdkMeterProvider.forceFlush(),
@@ -93,7 +93,7 @@ class TelemetryManagerImpl(app: Application) : TelemetryManager {
aggregatedMetricExporter.flush().join(10, TimeUnit.SECONDS)
logger<TelemetryManagerImpl>().info("Metrics are flushed")
logger<TelemetryManagerImpl>().info("OpenTelemetry metrics were flushed")
}
}

View File

@@ -15,8 +15,10 @@ import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.extensions.PluginId;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.BuildNumber;
import com.intellij.openapi.util.ClearableLazyValue;
import com.intellij.platform.diagnostic.telemetry.IJTracer;
import com.intellij.util.ExceptionUtil;
import com.intellij.util.containers.ContainerUtil;
import io.opentelemetry.api.trace.Span;
import io.opentelemetry.api.trace.SpanBuilder;
import io.opentelemetry.context.Context;
@@ -47,12 +49,17 @@ public class Invoker implements InvokerMBean {
private final Map<Integer, WeakReference<Object>> adhocReferenceMap = new ConcurrentHashMap<>();
private final IJTracer tracer;
private final ClearableLazyValue<IJTracer> tracer;
private final Supplier<? extends Context> timedContextSupplier;
public Invoker(@NotNull IJTracer tracer, @NotNull Supplier<? extends Context> timedContextSupplier) {
public Invoker(@NotNull Supplier<? extends IJTracer> tracerSupplier, @NotNull Supplier<? extends Context> timedContextSupplier) {
this.timedContextSupplier = timedContextSupplier;
this.tracer = tracer;
this.tracer = new ClearableLazyValue<>() {
@Override
protected @NotNull IJTracer compute() {
return tracerSupplier.get();
}
};
}
@Override
@@ -269,7 +276,7 @@ public class Invoker implements InvokerMBean {
}
}
else {
SpanBuilder spanBuilder = tracer.spanBuilder(call.getTimedSpan())
SpanBuilder spanBuilder = tracer.getValue().spanBuilder(call.getTimedSpan())
.setParent(timedContextSupplier.get());
Span span = spanBuilder.startSpan();

View File

@@ -22,9 +22,9 @@ public interface InvokerMBean {
void cleanup(int sessionId);
static void register(IJTracer tracer, Supplier<? extends Context> timedContextSupplier) throws JMException {
static void register(Supplier<? extends IJTracer> tracerSupplier, Supplier<? extends Context> timedContextSupplier) throws JMException {
ObjectName objectName = new ObjectName("com.intellij.driver:type=Invoker");
MBeanServer server = ManagementFactory.getPlatformMBeanServer();
server.registerMBean(new Invoker(tracer, timedContextSupplier), objectName);
server.registerMBean(new Invoker(tracerSupplier, timedContextSupplier), objectName);
}
}

View File

@@ -125,7 +125,7 @@ class ProjectLoaded : InitProjectActivityJavaShim(), ApplicationInitializedListe
override suspend fun execute(asyncScope: CoroutineScope) {
if (System.getProperty("com.sun.management.jmxremote") == "true") {
InvokerMBean.register(PerformanceTestSpan.TRACER) { PerformanceTestSpan.getContext() }
InvokerMBean.register({ PerformanceTestSpan.TRACER }, { PerformanceTestSpan.getContext() })
}
if (ApplicationManagerEx.getApplicationEx().isLightEditMode) {