From aa22aab3a47ca1275a027982e0154f406b08ef0e Mon Sep 17 00:00:00 2001 From: arafatkatze Date: Thu, 30 Jan 2025 16:43:35 +0000 Subject: [PATCH 1/5] Adding Client Platform and agentVersion to Exported Traces in OpenTelemetry service --- vscode/src/services/open-telemetry/CodyTraceExport.ts | 8 +++++++- .../services/open-telemetry/OpenTelemetryService.node.ts | 6 ++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/vscode/src/services/open-telemetry/CodyTraceExport.ts b/vscode/src/services/open-telemetry/CodyTraceExport.ts index 4bac93599521..89c874315e39 100644 --- a/vscode/src/services/open-telemetry/CodyTraceExport.ts +++ b/vscode/src/services/open-telemetry/CodyTraceExport.ts @@ -1,13 +1,15 @@ import type { ExportResult } from '@opentelemetry/core' import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-http' import type { ReadableSpan } from '@opentelemetry/sdk-trace-base' +import { CodyIDE } from '@sourcegraph/cody-shared/src/configuration' import type { OpenTelemetryServiceConfig } from './OpenTelemetryService.node' const MAX_TRACE_RETAIN_MS = 60 * 1000 export class CodyTraceExporter extends OTLPTraceExporter { private queuedSpans: Map = new Map() - + private clientPlatform: CodyIDE + private agentVersion?: string constructor(private configAccessor: () => OpenTelemetryServiceConfig | null) { super({ url: configAccessor()?.traceUrl, @@ -18,6 +20,8 @@ export class CodyTraceExporter extends OTLPTraceExporter { }, httpAgentOptions: { rejectUnauthorized: false }, }) + this.clientPlatform = configAccessor()?.clientPlatform ?? CodyIDE.VSCode + this.agentVersion = configAccessor()?.agentVersion } export(spans: ReadableSpan[], resultCallback: (result: ExportResult) => void): void { @@ -43,6 +47,8 @@ export class CodyTraceExporter extends OTLPTraceExporter { const spanMap = new Map() for (const span of spans) { spanMap.set(span.spanContext().spanId, span) + span.attributes.clientPlatform = this.clientPlatform + span.attributes.agentVersion = this.agentVersion } const spansToExport: ReadableSpan[] = [] diff --git a/vscode/src/services/open-telemetry/OpenTelemetryService.node.ts b/vscode/src/services/open-telemetry/OpenTelemetryService.node.ts index e955b7861559..cac94c23a71b 100644 --- a/vscode/src/services/open-telemetry/OpenTelemetryService.node.ts +++ b/vscode/src/services/open-telemetry/OpenTelemetryService.node.ts @@ -5,8 +5,10 @@ import { NodeTracerProvider } from '@opentelemetry/sdk-trace-node' import { SemanticResourceAttributes } from '@opentelemetry/semantic-conventions' import { + type CodyIDE, FeatureFlag, type Unsubscribable, + clientCapabilities, combineLatest, featureFlagProvider, resolvedConfig, @@ -24,6 +26,8 @@ export interface OpenTelemetryServiceConfig { traceUrl: string accessToken: string | null debugVerbose: boolean + clientPlatform: CodyIDE + agentVersion?: string } export class OpenTelemetryService { private tracerProvider?: NodeTracerProvider @@ -67,6 +71,8 @@ export class OpenTelemetryService { traceUrl: traceUrl, debugVerbose: configuration.debugVerbose, accessToken: auth.accessToken, + clientPlatform: clientCapabilities().agentIDE, + agentVersion: clientCapabilities().agentIDEVersion, } if (isEqual(this.lastConfig, newConfig)) { From 7b495f4fe5600a32e3f46aae86d1d4a50d7d1efe Mon Sep 17 00:00:00 2001 From: arafatkatze Date: Thu, 30 Jan 2025 17:26:11 +0000 Subject: [PATCH 2/5] fixing key map issues with Jetbrains Rider IDE --- .../src/services/open-telemetry/OpenTelemetryService.node.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/vscode/src/services/open-telemetry/OpenTelemetryService.node.ts b/vscode/src/services/open-telemetry/OpenTelemetryService.node.ts index cac94c23a71b..4f708e54076d 100644 --- a/vscode/src/services/open-telemetry/OpenTelemetryService.node.ts +++ b/vscode/src/services/open-telemetry/OpenTelemetryService.node.ts @@ -72,9 +72,8 @@ export class OpenTelemetryService { debugVerbose: configuration.debugVerbose, accessToken: auth.accessToken, clientPlatform: clientCapabilities().agentIDE, - agentVersion: clientCapabilities().agentIDEVersion, + agentVersion: version, } - if (isEqual(this.lastConfig, newConfig)) { return } From 7da14bacf49765d1799b7e3b8ebf42fe1b3cc3ef Mon Sep 17 00:00:00 2001 From: arafatkatze Date: Thu, 30 Jan 2025 17:32:38 +0000 Subject: [PATCH 3/5] fixing key map issues with Jetbrains Rider IDE --- vscode/webviews/App.tsx | 5 +++-- .../utils/webviewOpenTelemetryService.ts | 22 +++++++++---------- 2 files changed, 14 insertions(+), 13 deletions(-) diff --git a/vscode/webviews/App.tsx b/vscode/webviews/App.tsx index 8d01d3049185..2bf12e157642 100644 --- a/vscode/webviews/App.tsx +++ b/vscode/webviews/App.tsx @@ -10,6 +10,7 @@ import { getAuthErrorMessage, } from '@sourcegraph/cody-shared' import type { AuthMethod } from '../src/chat/protocol' +import { version } from '../src/version' import styles from './App.module.css' import { AuthPage } from './AuthPage' import { LoadingPage } from './LoadingPage' @@ -163,8 +164,8 @@ export const App: React.FunctionComponent<{ vscodeAPI: VSCodeWrapper }> = ({ vsc webviewTelemetryService.configure({ isTracingEnabled: true, debugVerbose: true, - agentIDE: config.clientCapabilities.agentIDE, - extensionAgentVersion: config.clientCapabilities.agentExtensionVersion, + clientPlatform: config.clientCapabilities.agentIDE, + agentVersion: version, }) } }, [config, webviewTelemetryService]) diff --git a/vscode/webviews/utils/webviewOpenTelemetryService.ts b/vscode/webviews/utils/webviewOpenTelemetryService.ts index ca73234b90c6..346d577c438c 100644 --- a/vscode/webviews/utils/webviewOpenTelemetryService.ts +++ b/vscode/webviews/utils/webviewOpenTelemetryService.ts @@ -2,7 +2,7 @@ import { DiagConsoleLogger, DiagLogLevel, diag } from '@opentelemetry/api' import { Resource } from '@opentelemetry/resources' import { BatchSpanProcessor, WebTracerProvider } from '@opentelemetry/sdk-trace-web' import { SemanticResourceAttributes } from '@opentelemetry/semantic-conventions' -import type { CodyIDE } from '@sourcegraph/cody-shared/src/configuration' +import { CodyIDE } from '@sourcegraph/cody-shared/src/configuration' import { CodyTraceExporterWeb } from '../../src/services/open-telemetry/CodyTraceExportWeb' // This class is used to initialize and manage the OpenTelemetry service for the webview. @@ -14,8 +14,8 @@ export class WebviewOpenTelemetryService { private unloadInstrumentations?: () => void private isTracingEnabled = false private isInitialized = false - private agentIDE?: CodyIDE - private extensionAgentVersion?: string + private clientPlatform?: CodyIDE + private agentVersion?: string constructor() { if (!WebviewOpenTelemetryService.instance) { WebviewOpenTelemetryService.instance = this @@ -26,8 +26,8 @@ export class WebviewOpenTelemetryService { public configure(options?: { isTracingEnabled?: boolean debugVerbose?: boolean - agentIDE?: CodyIDE - extensionAgentVersion?: string + clientPlatform?: CodyIDE + agentVersion?: string }): void { // If the service is already initialized or if it is not the instance that is being used, return if (this.isInitialized || WebviewOpenTelemetryService.instance !== this) { @@ -37,12 +37,12 @@ export class WebviewOpenTelemetryService { const { isTracingEnabled = true, debugVerbose = false, - agentIDE, - extensionAgentVersion, + clientPlatform, + agentVersion, } = options || {} this.isTracingEnabled = isTracingEnabled - this.agentIDE = agentIDE - this.extensionAgentVersion = extensionAgentVersion + this.clientPlatform = clientPlatform + this.agentVersion = agentVersion const logLevel = debugVerbose ? DiagLogLevel.INFO : DiagLogLevel.ERROR diag.setLogger(new DiagConsoleLogger(), logLevel) @@ -58,8 +58,8 @@ export class WebviewOpenTelemetryService { new BatchSpanProcessor( new CodyTraceExporterWeb({ isTracingEnabled: true, - clientPlatform: this.agentIDE ?? ('defaultIDE' as CodyIDE), - agentVersion: this.extensionAgentVersion, + clientPlatform: this.clientPlatform ?? CodyIDE.VSCode, + agentVersion: this.agentVersion, }) ) ) From 3b056eb3306c99c1a1bf31cb63f7cd0fe53d9597 Mon Sep 17 00:00:00 2001 From: arafatkatze Date: Fri, 31 Jan 2025 09:18:33 +0000 Subject: [PATCH 4/5] Aesthetic --- .../src/services/open-telemetry/OpenTelemetryService.node.ts | 3 +-- vscode/webviews/App.tsx | 3 +-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/vscode/src/services/open-telemetry/OpenTelemetryService.node.ts b/vscode/src/services/open-telemetry/OpenTelemetryService.node.ts index 4f708e54076d..3c9ee28fe157 100644 --- a/vscode/src/services/open-telemetry/OpenTelemetryService.node.ts +++ b/vscode/src/services/open-telemetry/OpenTelemetryService.node.ts @@ -17,7 +17,6 @@ import { import { DiagConsoleLogger, DiagLogLevel, diag } from '@opentelemetry/api' import { BatchSpanProcessor } from '@opentelemetry/sdk-trace-base' import { isEqual } from 'lodash' -import { version } from '../../version' import { CodyTraceExporter } from './CodyTraceExport' import { ConsoleBatchSpanExporter } from './console-batch-span-exporter' @@ -72,7 +71,7 @@ export class OpenTelemetryService { debugVerbose: configuration.debugVerbose, accessToken: auth.accessToken, clientPlatform: clientCapabilities().agentIDE, - agentVersion: version, + agentVersion: clientCapabilities().agentExtensionVersion, } if (isEqual(this.lastConfig, newConfig)) { return diff --git a/vscode/webviews/App.tsx b/vscode/webviews/App.tsx index 2bf12e157642..c80cc4584ffb 100644 --- a/vscode/webviews/App.tsx +++ b/vscode/webviews/App.tsx @@ -10,7 +10,6 @@ import { getAuthErrorMessage, } from '@sourcegraph/cody-shared' import type { AuthMethod } from '../src/chat/protocol' -import { version } from '../src/version' import styles from './App.module.css' import { AuthPage } from './AuthPage' import { LoadingPage } from './LoadingPage' @@ -165,7 +164,7 @@ export const App: React.FunctionComponent<{ vscodeAPI: VSCodeWrapper }> = ({ vsc isTracingEnabled: true, debugVerbose: true, clientPlatform: config.clientCapabilities.agentIDE, - agentVersion: version, + agentVersion: config.clientCapabilities.agentExtensionVersion, }) } }, [config, webviewTelemetryService]) From 31422be57a1edfe543ff233bdc2b4e2c4e3e708c Mon Sep 17 00:00:00 2001 From: arafatkatze Date: Fri, 31 Jan 2025 09:21:10 +0000 Subject: [PATCH 5/5] Aesthetic --- vscode/src/services/open-telemetry/OpenTelemetryService.node.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vscode/src/services/open-telemetry/OpenTelemetryService.node.ts b/vscode/src/services/open-telemetry/OpenTelemetryService.node.ts index 3c9ee28fe157..15b96dcbaf19 100644 --- a/vscode/src/services/open-telemetry/OpenTelemetryService.node.ts +++ b/vscode/src/services/open-telemetry/OpenTelemetryService.node.ts @@ -48,7 +48,7 @@ export class OpenTelemetryService { this.tracerProvider = new NodeTracerProvider({ resource: new Resource({ [SemanticResourceAttributes.SERVICE_NAME]: 'cody-client', - [SemanticResourceAttributes.SERVICE_VERSION]: version, + [SemanticResourceAttributes.SERVICE_VERSION]: clientCapabilities().agentExtensionVersion, }), }) // Register once at startup