Effect CommunityEC
Effect Community3y ago
40 replies
Ray

Exporter Not Executing in OpenTelemetry Tracing Setup

Something wrong has happened? It looks like the exporter doesn't execute every time
online demo: https://stackblitz.com/edit/stackblitz-starters-ye99al?file=index.ts
import { pipe } from "@effect/data/Function"
import * as Effect from "@effect/io/Effect"
import * as Layer from "@effect/io/Layer"
import * as NodeSdk from "@effect/opentelemetry/NodeSdk"
import * as Resource from "@effect/opentelemetry/Resource"
import * as Tracer from "@effect/opentelemetry/Tracer"
import { ConsoleSpanExporter } from "@opentelemetry/sdk-trace-base"

const ResourceLive = Resource.layer({ serviceName: "example" })

const NodeSdkLive = NodeSdk.layer({
  traceExporter: new ConsoleSpanExporter()
})

const TracingLive = Layer.provide(
  ResourceLive,
  Layer.merge(NodeSdkLive, Tracer.layer)
)

const run = <E, A>(self: () => Effect.Effect<never, E, A>) =>
  pipe(
    Effect.suspend(self),
    Effect.provideLayer(TracingLive),
    Effect.runPromise
  )

const genTest = Effect.gen(function*($) {
  yield* $(
    Effect.succeed(10),
    Effect.withSpan("span-b"),
    Effect.zipRight(Effect.log("gen")),
    // Effect.flatMap(() => Effect.currentSpan()),
    Effect.withSpan("span-a")
    // Effect.tap((_) => Effect.sync(() => console.log(_)))
  )
})

const pipeTest = pipe(
  Effect.succeed(10),
  Effect.withSpan("span-b"),
  Effect.zipRight(Effect.log("pipe")),
  // Effect.flatMap(() => Effect.currentSpan()),
  Effect.withSpan("span-a")
  // Effect.tap((_) => Effect.sync(() => console.log(_)))
)

async function main() {
  await run(() => genTest)
  await run(() => genTest)
  await run(() => pipeTest)
  await run(() => pipeTest)

  console.log("done")
}

main()
Was this page helpful?