diff --git a/platform/diagnostic/telemetry.exporters/api-dump.txt b/platform/diagnostic/telemetry.exporters/api-dump.txt index 71a0712f2049..e69de29bb2d1 100644 --- a/platform/diagnostic/telemetry.exporters/api-dump.txt +++ b/platform/diagnostic/telemetry.exporters/api-dump.txt @@ -1,11 +0,0 @@ -f:com.intellij.platform.diagnostic.telemetry.exporters.OpenTelemetryRawTraceExporter -- sf:INSTANCE:com.intellij.platform.diagnostic.telemetry.exporters.OpenTelemetryRawTraceExporter -- f:export(java.net.URI,B[],com.intellij.platform.diagnostic.telemetry.exporters.OpenTelemetryRawTraceExporter$Protocol):V -e:com.intellij.platform.diagnostic.telemetry.exporters.OpenTelemetryRawTraceExporter$Protocol -- java.lang.Enum -- sf:JSON:com.intellij.platform.diagnostic.telemetry.exporters.OpenTelemetryRawTraceExporter$Protocol -- sf:PROTOBUF:com.intellij.platform.diagnostic.telemetry.exporters.OpenTelemetryRawTraceExporter$Protocol -- f:getContentType():java.lang.String -- s:getEntries():kotlin.enums.EnumEntries -- s:valueOf(java.lang.String):com.intellij.platform.diagnostic.telemetry.exporters.OpenTelemetryRawTraceExporter$Protocol -- s:values():com.intellij.platform.diagnostic.telemetry.exporters.OpenTelemetryRawTraceExporter$Protocol[] diff --git a/platform/diagnostic/telemetry.exporters/src/OpenTelemetryRawTraceExporter.kt b/platform/diagnostic/telemetry.exporters/src/OpenTelemetryRawTraceExporter.kt index c4587704d50e..eebad46d63d3 100644 --- a/platform/diagnostic/telemetry.exporters/src/OpenTelemetryRawTraceExporter.kt +++ b/platform/diagnostic/telemetry.exporters/src/OpenTelemetryRawTraceExporter.kt @@ -3,29 +3,39 @@ package com.intellij.platform.diagnostic.telemetry.exporters import com.intellij.openapi.diagnostic.Logger import com.intellij.openapi.diagnostic.logger +import org.jetbrains.annotations.ApiStatus import java.net.URI import java.net.http.HttpClient import java.net.http.HttpRequest import java.net.http.HttpResponse +@ApiStatus.Internal object OpenTelemetryRawTraceExporter { private val LOG: Logger = logger() - enum class Protocol(val contentType: String) { - PROTOBUF("application/x-protobuf"), - JSON("application/json") + fun sendProtobuf(targetUri: URI, binaryTraces: ByteArray) { + send(targetUri) { + POST(HttpRequest.BodyPublishers.ofByteArray(binaryTraces)) + header("Content-Type", "application/x-protobuf") + } } - fun export(targetUri: URI, binaryTraces: ByteArray, protocol: Protocol) { + fun sendJson(targetUri: URI, json: ByteArray) { + send(targetUri) { + POST(HttpRequest.BodyPublishers.ofByteArray(json)) + header("Content-Type", "application/json") + } + } + + private fun send(targetUri: URI, customizer: HttpRequest.Builder.() -> HttpRequest.Builder) { try { + val builder = HttpRequest.newBuilder().uri(targetUri) HttpClient.newHttpClient() - .send(HttpRequest.newBuilder() - .POST(HttpRequest.BodyPublishers.ofByteArray(binaryTraces)) - .uri(targetUri) - .header("Content-Type", protocol.contentType) - .build(), - HttpResponse.BodyHandlers.discarding()) + .send( + customizer(builder).build(), + HttpResponse.BodyHandlers.discarding() + ) } catch (e: Exception) { LOG.warn("Unable to upload performance traces to the OTLP server ($targetUri)") diff --git a/plugins/gradle/src/org/jetbrains/plugins/gradle/util/telemetry/GradleOpenTelemetryTraceService.kt b/plugins/gradle/src/org/jetbrains/plugins/gradle/util/telemetry/GradleOpenTelemetryTraceService.kt index e68bc901ddd1..3b56987c4ba7 100644 --- a/plugins/gradle/src/org/jetbrains/plugins/gradle/util/telemetry/GradleOpenTelemetryTraceService.kt +++ b/plugins/gradle/src/org/jetbrains/plugins/gradle/util/telemetry/GradleOpenTelemetryTraceService.kt @@ -16,7 +16,7 @@ class GradleOpenTelemetryTraceService(private val coroutineScope: CoroutineScope if (binaryTraces.isEmpty()) return val telemetryHost = getOtlpEndPoint() ?: return coroutineScope.launch { - OpenTelemetryRawTraceExporter.export(URI.create(telemetryHost), binaryTraces, OpenTelemetryRawTraceExporter.Protocol.PROTOBUF) + OpenTelemetryRawTraceExporter.sendProtobuf(URI.create(telemetryHost), binaryTraces) } } diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/telemetry/telemetry.kt b/plugins/maven/src/main/java/org/jetbrains/idea/maven/telemetry/telemetry.kt index 57e27222feb1..09cf76da9939 100644 --- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/telemetry/telemetry.kt +++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/telemetry/telemetry.kt @@ -55,6 +55,6 @@ internal fun scheduleExportTelemetryTrace(project: Project, binaryTrace: ByteArr val cs = MavenCoroutineScopeProvider.getCoroutineScope(project) cs.launch { - OpenTelemetryRawTraceExporter.export(URI.create(telemetryHost), binaryTrace, OpenTelemetryRawTraceExporter.Protocol.PROTOBUF) + OpenTelemetryRawTraceExporter.sendProtobuf(URI.create(telemetryHost), binaryTrace) } } \ No newline at end of file