summaryrefslogtreecommitdiff
path: root/packages/core/src/telemetry/metrics.ts
diff options
context:
space:
mode:
Diffstat (limited to 'packages/core/src/telemetry/metrics.ts')
-rw-r--r--packages/core/src/telemetry/metrics.ts35
1 files changed, 30 insertions, 5 deletions
diff --git a/packages/core/src/telemetry/metrics.ts b/packages/core/src/telemetry/metrics.ts
index 69ac91e9..93aa2189 100644
--- a/packages/core/src/telemetry/metrics.ts
+++ b/packages/core/src/telemetry/metrics.ts
@@ -21,6 +21,7 @@ import {
METRIC_TOKEN_USAGE,
METRIC_SESSION_COUNT,
} from './constants.js';
+import { Config } from '../config/config.js';
let cliMeter: Meter | undefined;
let toolCallCounter: Counter | undefined;
@@ -30,6 +31,12 @@ let apiRequestLatencyHistogram: Histogram | undefined;
let tokenUsageCounter: Counter | undefined;
let isMetricsInitialized = false;
+function getCommonAttributes(config: Config): Attributes {
+ return {
+ 'session.id': config.getSessionId(),
+ };
+}
+
export function getMeter(): Meter | undefined {
if (!cliMeter) {
cliMeter = metrics.getMeter(SERVICE_NAME);
@@ -37,7 +44,7 @@ export function getMeter(): Meter | undefined {
return cliMeter;
}
-export function initializeMetrics(): void {
+export function initializeMetrics(config: Config): void {
if (isMetricsInitialized) return;
const meter = getMeter();
@@ -73,11 +80,12 @@ export function initializeMetrics(): void {
description: 'Count of CLI sessions started.',
valueType: ValueType.INT,
});
- sessionCounter.add(1);
+ sessionCounter.add(1, getCommonAttributes(config));
isMetricsInitialized = true;
}
export function recordToolCallMetrics(
+ config: Config,
functionName: string,
durationMs: number,
success: boolean,
@@ -86,25 +94,33 @@ export function recordToolCallMetrics(
return;
const metricAttributes: Attributes = {
+ ...getCommonAttributes(config),
function_name: functionName,
success,
};
toolCallCounter.add(1, metricAttributes);
toolCallLatencyHistogram.record(durationMs, {
+ ...getCommonAttributes(config),
function_name: functionName,
});
}
export function recordTokenUsageMetrics(
+ config: Config,
model: string,
tokenCount: number,
type: 'input' | 'output' | 'thought' | 'cache' | 'tool',
): void {
if (!tokenUsageCounter || !isMetricsInitialized) return;
- tokenUsageCounter.add(tokenCount, { model, type });
+ tokenUsageCounter.add(tokenCount, {
+ ...getCommonAttributes(config),
+ model,
+ type,
+ });
}
export function recordApiResponseMetrics(
+ config: Config,
model: string,
durationMs: number,
statusCode?: number | string,
@@ -117,14 +133,19 @@ export function recordApiResponseMetrics(
)
return;
const metricAttributes: Attributes = {
+ ...getCommonAttributes(config),
model,
status_code: statusCode ?? (error ? 'error' : 'ok'),
};
apiRequestCounter.add(1, metricAttributes);
- apiRequestLatencyHistogram.record(durationMs, { model });
+ apiRequestLatencyHistogram.record(durationMs, {
+ ...getCommonAttributes(config),
+ model,
+ });
}
export function recordApiErrorMetrics(
+ config: Config,
model: string,
durationMs: number,
statusCode?: number | string,
@@ -137,10 +158,14 @@ export function recordApiErrorMetrics(
)
return;
const metricAttributes: Attributes = {
+ ...getCommonAttributes(config),
model,
status_code: statusCode ?? 'error',
error_type: errorType ?? 'unknown',
};
apiRequestCounter.add(1, metricAttributes);
- apiRequestLatencyHistogram.record(durationMs, { model });
+ apiRequestLatencyHistogram.record(durationMs, {
+ ...getCommonAttributes(config),
+ model,
+ });
}