Skip to content

Commit 2e1ef36

Browse files
authored
Merge pull request #14 from timlrx/fix/effect-otel
inline otel-exporter-trace-otlp-grpc
2 parents c3276b3 + b70ecc2 commit 2e1ef36

File tree

4 files changed

+62
-18
lines changed

4 files changed

+62
-18
lines changed

packages/@contentlayer/utils/package.json

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,6 @@
5959
"dependencies": {
6060
"@effect-ts/core": "^0.60.5",
6161
"@effect-ts/otel": "^0.15.1",
62-
"@effect-ts/otel-exporter-trace-otlp-grpc": "^0.15.1",
6362
"@effect-ts/otel-sdk-trace-node": "^0.15.1",
6463
"@js-temporal/polyfill": "^0.4.4",
6564
"@opentelemetry/api": "^1.8.0",

packages/@contentlayer/utils/src/tracing-effect/index.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,12 @@ import type { Clock } from '@effect-ts/core/Effect/Clock'
33
import type * as L from '@effect-ts/core/Effect/Layer'
44
import type { Has } from '@effect-ts/core/Has'
55
import * as OT from '@effect-ts/otel'
6-
import { LiveSimpleProcessor, makeOTLPTraceExporterConfigLayer } from '@effect-ts/otel-exporter-trace-otlp-grpc'
76
import * as OTNode from '@effect-ts/otel-sdk-trace-node'
87
import { Resource } from '@opentelemetry/resources'
98
import { SemanticResourceAttributes } from '@opentelemetry/semantic-conventions'
109

10+
import { LiveSimpleProcessor, makeOTLPTraceExporterConfigLayer } from './otel-exporter-trace-otlp-grpc.js'
11+
1112
//
1213
// Jaeger Tracer (via Grpc Collector)
1314
//
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
// Inline to avoid peer dependency issues
2+
// https://github.com/Effect-Deprecated/otel/blob/ee7aa57e42e1bcdf9af98815bc601279f54e26ec/packages/otel-exporter-trace-otlp-grpc/src/index.ts
3+
import * as T from '@effect-ts/core/Effect'
4+
import * as L from '@effect-ts/core/Effect/Layer'
5+
import * as M from '@effect-ts/core/Effect/Managed'
6+
import { pipe } from '@effect-ts/core/Function'
7+
import { tag } from '@effect-ts/core/Has'
8+
import { SimpleProcessor } from '@effect-ts/otel'
9+
import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-grpc'
10+
import type { OTLPGRPCExporterConfigNode } from '@opentelemetry/otlp-grpc-exporter-base'
11+
12+
export const OTLPTraceExporterConfigSymbol = Symbol()
13+
14+
export class OTLPTraceExporterConfig {
15+
readonly [OTLPTraceExporterConfigSymbol] = OTLPTraceExporterConfigSymbol
16+
constructor(readonly config: OTLPGRPCExporterConfigNode) {}
17+
}
18+
19+
export const OTLPTraceExporterConfigTag = tag<OTLPTraceExporterConfig>(OTLPTraceExporterConfigSymbol)
20+
21+
export const makeOTLPTraceExporterConfigLayer = (config: OTLPGRPCExporterConfigNode) =>
22+
L.fromEffect(OTLPTraceExporterConfigTag)(T.succeedWith(() => new OTLPTraceExporterConfig(config))).setKey(
23+
OTLPTraceExporterConfigTag.key,
24+
)
25+
26+
export const makeOTLPTraceExporterConfigLayerM = <R, E>(config: T.Effect<R, E, OTLPGRPCExporterConfigNode>) =>
27+
L.fromEffect(OTLPTraceExporterConfigTag)(T.map_(config, (_) => new OTLPTraceExporterConfig(_))).setKey(
28+
OTLPTraceExporterConfigTag.key,
29+
)
30+
31+
export const makeTracingSpanExporter = M.gen(function* (_) {
32+
const { config } = yield* _(OTLPTraceExporterConfigTag)
33+
34+
const spanExporter = yield* _(
35+
pipe(
36+
T.succeedWith(() => new OTLPTraceExporter(config)),
37+
// NOTE Unfortunately this workaround/"hack" is currently needed since Otel doesn't yet provide a graceful
38+
// way to shutdown.
39+
//
40+
// Related issue: https://github.com/open-telemetry/opentelemetry-js/issues/987
41+
M.make((p) =>
42+
T.gen(function* (_) {
43+
while (1) {
44+
yield* _(T.sleep(0))
45+
const promises = p['_sendingPromises'] as any[]
46+
if (promises.length > 0) {
47+
yield* _(T.result(T.promise(() => Promise.all(promises))))
48+
} else {
49+
break
50+
}
51+
}
52+
}),
53+
),
54+
),
55+
)
56+
57+
return spanExporter
58+
})
59+
60+
export const LiveSimpleProcessor = SimpleProcessor(makeTracingSpanExporter)

yarn.lock

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -438,7 +438,6 @@ __metadata:
438438
dependencies:
439439
"@effect-ts/core": ^0.60.5
440440
"@effect-ts/otel": ^0.15.1
441-
"@effect-ts/otel-exporter-trace-otlp-grpc": ^0.15.1
442441
"@effect-ts/otel-sdk-trace-node": ^0.15.1
443442
"@js-temporal/polyfill": ^0.4.4
444443
"@opentelemetry/api": ^1.8.0
@@ -484,21 +483,6 @@ __metadata:
484483
languageName: node
485484
linkType: hard
486485

487-
"@effect-ts/otel-exporter-trace-otlp-grpc@npm:^0.15.1":
488-
version: 0.15.1
489-
resolution: "@effect-ts/otel-exporter-trace-otlp-grpc@npm:0.15.1"
490-
dependencies:
491-
"@effect-ts/otel": ^0.15.1
492-
peerDependencies:
493-
"@effect-ts/core": ^0.60.2
494-
"@opentelemetry/api": ^1.4.0
495-
"@opentelemetry/core": ^1.13.0
496-
"@opentelemetry/exporter-trace-otlp-grpc": ^0.39.0
497-
"@opentelemetry/sdk-trace-base": ^1.13.0
498-
checksum: 5f81693c725f9bdf515374752437c0d20d65b123ca2235ba9cedf477308e43c115edb8b8b4934e19d8e89f52307d5001efe6299e4ca43734459fc37aab9bad30
499-
languageName: node
500-
linkType: hard
501-
502486
"@effect-ts/otel-sdk-trace-node@npm:^0.15.1":
503487
version: 0.15.1
504488
resolution: "@effect-ts/otel-sdk-trace-node@npm:0.15.1"

0 commit comments

Comments
 (0)