summaryrefslogtreecommitdiffhomepage
path: root/packages/opencode/src/effect/oltp.ts
blob: 6ef80dd291e6ee7a0c3b7899560a38b70e9fe779 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
import { Duration, Layer } from "effect"
import { FetchHttpClient } from "effect/unstable/http"
import { Otlp } from "effect/unstable/observability"
import { EffectLogger } from "@/effect/logger"
import { Flag } from "@/flag/flag"
import { CHANNEL, VERSION } from "@/installation/meta"

export namespace Observability {
  export const enabled = !!Flag.OTEL_EXPORTER_OTLP_ENDPOINT

  const base = Flag.OTEL_EXPORTER_OTLP_ENDPOINT

  const resource = {
    serviceName: "opencode",
    serviceVersion: VERSION,
    attributes: {
      "deployment.environment.name": CHANNEL === "local" ? "local" : CHANNEL,
      "opencode.client": Flag.OPENCODE_CLIENT,
    },
  }

  const headers = Flag.OTEL_EXPORTER_OTLP_HEADERS
    ? Flag.OTEL_EXPORTER_OTLP_HEADERS.split(",").reduce(
        (acc, x) => {
          const [key, value] = x.split("=")
          acc[key] = value
          return acc
        },
        {} as Record<string, string>,
      )
    : undefined

  export const layer = !base
    ? EffectLogger.layer
    : Layer.mergeAll(
        EffectLogger.layer,
        Otlp.layerJson({
          baseUrl: base,
          loggerExportInterval: Duration.seconds(5),
          loggerMergeWithExisting: true,
          resource,
          headers,
        }),
      ).pipe(Layer.provide(FetchHttpClient.layer))
}