Skip to content

Commit 23a2d01

Browse files
authored
fix(observability): standardize session telemetry attrs (#23213)
1 parent 5181f9b commit 23a2d01

3 files changed

Lines changed: 22 additions & 4 deletions

File tree

packages/opencode/src/effect/logger.ts

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ import { Log } from "@/util"
33

44
type Fields = Record<string, unknown>
55

6+
const normalizeKey = (key: string) => (key === "sessionID" ? "session.id" : key)
7+
68
export interface Handle {
79
readonly debug: (msg?: unknown, extra?: Fields) => Effect.Effect<void>
810
readonly info: (msg?: unknown, extra?: Fields) => Effect.Effect<void>
@@ -12,7 +14,11 @@ export interface Handle {
1214
}
1315

1416
const clean = (input?: Fields): Fields =>
15-
Object.fromEntries(Object.entries(input ?? {}).filter((entry) => entry[1] !== undefined && entry[1] !== null))
17+
Object.fromEntries(
18+
Object.entries(input ?? {})
19+
.filter((entry) => entry[1] !== undefined && entry[1] !== null)
20+
.map(([key, value]) => [normalizeKey(key), value]),
21+
)
1622

1723
const text = (input: unknown): string => {
1824
// oxlint-disable-next-line no-base-to-string

packages/opencode/src/session/llm.ts

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ const live: Layer.Layer<
7474
.clone()
7575
.tag("providerID", input.model.providerID)
7676
.tag("modelID", input.model.id)
77-
.tag("sessionID", input.sessionID)
77+
.tag("session.id", input.sessionID)
7878
.tag("small", (input.small ?? false).toString())
7979
.tag("agent", input.agent.name)
8080
.tag("mode", input.agent.mode)
@@ -317,6 +317,18 @@ const live: Layer.Layer<
317317
const tracer = cfg.experimental?.openTelemetry
318318
? Option.getOrUndefined(yield* Effect.serviceOption(OtelTracer.OtelTracer))
319319
: undefined
320+
const telemetryTracer = tracer
321+
? new Proxy(tracer, {
322+
get(target, prop, receiver) {
323+
if (prop !== "startSpan") return Reflect.get(target, prop, receiver)
324+
return (...args: Parameters<typeof target.startSpan>) => {
325+
const span = target.startSpan(...args)
326+
span.setAttribute("session.id", input.sessionID)
327+
return span
328+
}
329+
},
330+
})
331+
: undefined
320332

321333
return streamText({
322334
onError(error) {
@@ -390,7 +402,7 @@ const live: Layer.Layer<
390402
experimental_telemetry: {
391403
isEnabled: cfg.experimental?.openTelemetry,
392404
functionId: "session.llm",
393-
tracer,
405+
tracer: telemetryTracer,
394406
metadata: {
395407
userId: cfg.username ?? "unknown",
396408
sessionId: input.sessionID,

packages/opencode/src/session/processor.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,7 @@ export const layer: Layer.Layer<
123123
reasoningMap: {},
124124
}
125125
let aborted = false
126-
const slog = log.clone().tag("sessionID", input.sessionID).tag("messageID", input.assistantMessage.id)
126+
const slog = log.clone().tag("session.id", input.sessionID).tag("messageID", input.assistantMessage.id)
127127

128128
const parse = (e: unknown) =>
129129
MessageV2.fromError(e, {

0 commit comments

Comments
 (0)