Skip to content

Commit 040b0b3

Browse files
fix(otel): use UCUM-compliant unit strings for all metric instruments
Replace non-standard unit strings ('count', 'tokens', 'USD') with UCUM annotation format ('{session}', '{token}', '[USD]', etc.) as required by the OpenTelemetry specification.
1 parent a1b0a8c commit 040b0b3

1 file changed

Lines changed: 12 additions & 12 deletions

File tree

src/otel.ts

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -82,55 +82,55 @@ export function createInstruments(prefix: string): Instruments {
8282
const meter = metrics.getMeter("com.opencode")
8383
return {
8484
sessionCounter: meter.createCounter(`${prefix}session.count`, {
85-
unit: "count",
85+
unit: "{session}",
8686
description: "Count of opencode sessions started",
8787
}),
8888
tokenCounter: meter.createCounter(`${prefix}token.usage`, {
89-
unit: "tokens",
89+
unit: "{token}",
9090
description: "Number of tokens used",
9191
}),
9292
costCounter: meter.createCounter(`${prefix}cost.usage`, {
93-
unit: "USD",
93+
unit: "[USD]",
9494
description: "Cost of the opencode session in USD",
9595
}),
9696
linesCounter: meter.createCounter(`${prefix}lines_of_code.count`, {
97-
unit: "count",
97+
unit: "{line}",
9898
description: "Count of lines of code added or removed",
9999
}),
100100
commitCounter: meter.createCounter(`${prefix}commit.count`, {
101-
unit: "count",
101+
unit: "{commit}",
102102
description: "Number of git commits created",
103103
}),
104104
toolDurationHistogram: meter.createHistogram(`${prefix}tool.duration`, {
105105
unit: "ms",
106106
description: "Duration of tool executions in milliseconds",
107107
}),
108108
cacheCounter: meter.createCounter(`${prefix}cache.count`, {
109-
unit: "count",
110-
description: "Token cache hits (read) and misses (write) per completed assistant message",
109+
unit: "{request}",
110+
description: "Token cache activity (cacheRead/cacheCreation) per completed assistant message",
111111
}),
112112
sessionDurationHistogram: meter.createHistogram(`${prefix}session.duration`, {
113113
unit: "ms",
114114
description: "Duration of a session from created to idle in milliseconds",
115115
}),
116116
messageCounter: meter.createCounter(`${prefix}message.count`, {
117-
unit: "count",
117+
unit: "{message}",
118118
description: "Number of completed assistant messages per session",
119119
}),
120120
sessionTokenGauge: meter.createHistogram(`${prefix}session.token.total`, {
121-
unit: "tokens",
121+
unit: "{token}",
122122
description: "Total tokens consumed per session, recorded as a histogram on session idle",
123123
}),
124124
sessionCostGauge: meter.createHistogram(`${prefix}session.cost.total`, {
125-
unit: "USD",
125+
unit: "[USD]",
126126
description: "Total cost per session in USD, recorded as a histogram on session idle",
127127
}),
128128
modelUsageCounter: meter.createCounter(`${prefix}model.usage`, {
129-
unit: "count",
129+
unit: "{request}",
130130
description: "Number of completed assistant messages per model and provider",
131131
}),
132132
retryCounter: meter.createCounter(`${prefix}retry.count`, {
133-
unit: "count",
133+
unit: "{retry}",
134134
description: "Number of API retries observed via session.status events",
135135
}),
136136
}

0 commit comments

Comments
 (0)