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
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()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()