mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-03-22 06:50:54 +07:00
[telemetry][IJPL-163198] refactoring in TelemetryManagerImpl
GitOrigin-RevId: f45fd6d7c75a90b588a4903768d3686502da997a
This commit is contained in:
committed by
intellij-monorepo-bot
parent
e9c0c56731
commit
b7bd550d6a
@@ -2,9 +2,11 @@
|
||||
package com.intellij.platform.diagnostic.telemetry.impl
|
||||
|
||||
import com.intellij.openapi.util.SystemInfoRt
|
||||
import com.intellij.platform.diagnostic.telemetry.OtlpConfiguration.getTraceEndpoint
|
||||
import io.opentelemetry.api.common.AttributeKey
|
||||
import io.opentelemetry.api.common.Attributes
|
||||
import io.opentelemetry.api.common.AttributesBuilder
|
||||
import io.opentelemetry.sdk.OpenTelemetrySdk
|
||||
import io.opentelemetry.sdk.OpenTelemetrySdkBuilder
|
||||
import io.opentelemetry.sdk.resources.Resource
|
||||
import org.jetbrains.annotations.ApiStatus
|
||||
@@ -31,4 +33,25 @@ class OpenTelemetryConfigurator(@JvmField internal val sdkBuilder: OpenTelemetry
|
||||
}
|
||||
.build()
|
||||
)
|
||||
|
||||
companion object {
|
||||
fun create(
|
||||
serviceName: String,
|
||||
serviceVersion: String,
|
||||
serviceNamespace: String,
|
||||
): OpenTelemetryConfigurator {
|
||||
return OpenTelemetryConfigurator(
|
||||
sdkBuilder = OpenTelemetrySdk.builder(),
|
||||
serviceName = serviceName,
|
||||
serviceVersion = serviceVersion,
|
||||
serviceNamespace = serviceNamespace,
|
||||
customResourceBuilder = { attributes ->
|
||||
// don't write username to file - it maybe private information
|
||||
if (getTraceEndpoint() != null) {
|
||||
attributes.put(AttributeKey.stringKey("process.owner"), System.getProperty("user.name") ?: "unknown")
|
||||
}
|
||||
},
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -59,16 +59,7 @@ class TelemetryManagerImpl(coroutineScope: CoroutineScope, isUnitTestMode: Boole
|
||||
init {
|
||||
verboseMode = System.getProperty("idea.diagnostic.opentelemetry.verbose")?.toBooleanStrictOrNull() == true
|
||||
|
||||
val configurator: OpenTelemetryConfigurator = try {
|
||||
val appInfo = ApplicationInfoImpl.getShadowInstance()
|
||||
createOpenTelemetryConfigurator(serviceName = ApplicationNamesInfo.getInstance().fullProductName,
|
||||
serviceVersion = appInfo.build.asStringWithoutProductCode(),
|
||||
serviceNamespace = appInfo.build.productCode)
|
||||
}
|
||||
catch (e: Throwable) {
|
||||
createOpenTelemetryConfigurator(serviceName = "", serviceVersion = "", serviceNamespace = "")
|
||||
}
|
||||
|
||||
val configurator: OpenTelemetryConfigurator = createOpenTelemetryConfigurator()
|
||||
aggregatedMetricExporter = AggregatedMetricExporter()
|
||||
otlpService = OtlpService.getInstance()
|
||||
|
||||
@@ -91,15 +82,9 @@ class TelemetryManagerImpl(coroutineScope: CoroutineScope, isUnitTestMode: Boole
|
||||
}
|
||||
})
|
||||
|
||||
val batchSpanProcessor = BatchSpanProcessor(coroutineScope = coroutineScope, spanExporters = java.util.List.copyOf(spanExporters))
|
||||
// make sure that otlpService job is canceled before BatchSpanProcessor job
|
||||
otlpServiceCoroutineScope = coroutineScope.childScope(supervisor = false)
|
||||
val tracerProvider = SdkTracerProvider.builder()
|
||||
.addSpanProcessor(batchSpanProcessor)
|
||||
.setResource(configurator.resource)
|
||||
.build()
|
||||
configurator.sdkBuilder.setTracerProvider(tracerProvider)
|
||||
batchSpanProcessor
|
||||
BatchSpanProcessor(coroutineScope = coroutineScope, spanExporters = java.util.List.copyOf(spanExporters))
|
||||
}
|
||||
else {
|
||||
null
|
||||
@@ -110,9 +95,17 @@ class TelemetryManagerImpl(coroutineScope: CoroutineScope, isUnitTestMode: Boole
|
||||
opentelemetrySdkResource = configurator.resource)
|
||||
|
||||
sdk = configurator.sdkBuilder
|
||||
// W3CTraceContextPropagator is needed to make backend/client spans properly synced, issue: RDCT-408
|
||||
.setPropagators(ContextPropagators.create(W3CTraceContextPropagator.getInstance()))
|
||||
.setMeterProvider(IdeaOtlpMeterProvider.get(configurator.resource, aggregatedMetricExporter))
|
||||
.apply {
|
||||
setPropagators(ContextPropagators.create(W3CTraceContextPropagator.getInstance()))
|
||||
setMeterProvider(IdeaOtlpMeterProvider.get(configurator.resource, aggregatedMetricExporter))
|
||||
if (batchSpanProcessor != null) {
|
||||
val tracerProvider = SdkTracerProvider.builder()
|
||||
.addSpanProcessor(batchSpanProcessor)
|
||||
.setResource(configurator.resource)
|
||||
.build()
|
||||
setTracerProvider(tracerProvider)
|
||||
}
|
||||
}
|
||||
.buildAndRegisterGlobal()
|
||||
}
|
||||
|
||||
@@ -258,22 +251,14 @@ private fun createSpanExporters(resource: Resource, isUnitTestMode: Boolean = fa
|
||||
return spanExporters
|
||||
}
|
||||
|
||||
private fun createOpenTelemetryConfigurator(
|
||||
serviceName: String,
|
||||
serviceVersion: String,
|
||||
serviceNamespace: String,
|
||||
): OpenTelemetryConfigurator {
|
||||
return OpenTelemetryConfigurator(
|
||||
sdkBuilder = OpenTelemetrySdk.builder(),
|
||||
serviceName = serviceName,
|
||||
serviceVersion = serviceVersion,
|
||||
serviceNamespace = serviceNamespace,
|
||||
customResourceBuilder = {
|
||||
// don't write username to file - it maybe private information
|
||||
if (getTraceEndpoint() != null) {
|
||||
it.put(AttributeKey.stringKey("process.owner"), System.getProperty("user.name") ?: "unknown")
|
||||
}
|
||||
},
|
||||
)
|
||||
private fun createOpenTelemetryConfigurator(): OpenTelemetryConfigurator {
|
||||
return try {
|
||||
val appInfo = ApplicationInfoImpl.getShadowInstance()
|
||||
OpenTelemetryConfigurator.create(serviceName = ApplicationNamesInfo.getInstance().fullProductName,
|
||||
serviceVersion = appInfo.build.asStringWithoutProductCode(),
|
||||
serviceNamespace = appInfo.build.productCode)
|
||||
}
|
||||
catch (e: Throwable) {
|
||||
OpenTelemetryConfigurator.create(serviceName = "", serviceVersion = "", serviceNamespace = "")
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user