@livestore/utils 0.0.0 → 0.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/.tsbuildinfo.json +1 -1
- package/dist/NoopTracer.d.ts +1 -0
- package/dist/NoopTracer.d.ts.map +1 -1
- package/dist/NoopTracer.js +1 -1
- package/dist/NoopTracer.js.map +1 -1
- package/dist/effect/Effect.d.ts +4 -0
- package/dist/effect/Effect.d.ts.map +1 -1
- package/dist/effect/Effect.js +8 -0
- package/dist/effect/Effect.js.map +1 -1
- package/dist/effect/Layer.d.ts +17 -3
- package/dist/effect/Layer.d.ts.map +1 -1
- package/dist/effect/Layer.js +8 -7
- package/dist/effect/Layer.js.map +1 -1
- package/dist/effect/ServiceContext.d.ts.map +1 -1
- package/dist/effect/ServiceContext.js +7 -7
- package/dist/effect/ServiceContext.js.map +1 -1
- package/dist/effect/index.d.ts +3 -2
- package/dist/effect/index.d.ts.map +1 -1
- package/dist/effect/index.js +3 -3
- package/dist/effect/index.js.map +1 -1
- package/package.json +12 -23
- package/src/NoopTracer.ts +1 -1
- package/src/effect/Effect.ts +18 -0
- package/src/effect/Layer.ts +42 -0
- package/src/effect/ServiceContext.ts +7 -9
- package/src/effect/index.ts +4 -4
- package/dist/binary.d.ts +0 -4
- package/dist/binary.d.ts.map +0 -1
- package/dist/binary.js +0 -23
- package/dist/binary.js.map +0 -1
- package/dist/effect/Debounce.d.ts +0 -5
- package/dist/effect/Debounce.d.ts.map +0 -1
- package/dist/effect/Debounce.js +0 -33
- package/dist/effect/Debounce.js.map +0 -1
- package/dist/effect/EndableQueue.d.ts +0 -11
- package/dist/effect/EndableQueue.d.ts.map +0 -1
- package/dist/effect/EndableQueue.js +0 -22
- package/dist/effect/EndableQueue.js.map +0 -1
- package/dist/effect/EnvVar.d.ts +0 -16
- package/dist/effect/EnvVar.d.ts.map +0 -1
- package/dist/effect/EnvVar.js +0 -21
- package/dist/effect/EnvVar.js.map +0 -1
- package/dist/effect/Gate.d.ts +0 -14
- package/dist/effect/Gate.d.ts.map +0 -1
- package/dist/effect/Gate.js +0 -17
- package/dist/effect/Gate.js.map +0 -1
- package/dist/effect/Otel/Dummy.d.ts +0 -5
- package/dist/effect/Otel/Dummy.d.ts.map +0 -1
- package/dist/effect/Otel/Dummy.js +0 -22
- package/dist/effect/Otel/Dummy.js.map +0 -1
- package/dist/effect/Otel/Meter.d.ts +0 -20
- package/dist/effect/Otel/Meter.d.ts.map +0 -1
- package/dist/effect/Otel/Meter.js +0 -76
- package/dist/effect/Otel/Meter.js.map +0 -1
- package/dist/effect/Otel/OtlpGrpc.d.ts +0 -6
- package/dist/effect/Otel/OtlpGrpc.d.ts.map +0 -1
- package/dist/effect/Otel/OtlpGrpc.js +0 -42
- package/dist/effect/Otel/OtlpGrpc.js.map +0 -1
- package/dist/effect/Otel/OtlpHttp.d.ts +0 -6
- package/dist/effect/Otel/OtlpHttp.d.ts.map +0 -1
- package/dist/effect/Otel/OtlpHttp.js +0 -42
- package/dist/effect/Otel/OtlpHttp.js.map +0 -1
- package/dist/effect/Otel/OtlpWebsocket.d.ts +0 -6
- package/dist/effect/Otel/OtlpWebsocket.d.ts.map +0 -1
- package/dist/effect/Otel/OtlpWebsocket.js +0 -42
- package/dist/effect/Otel/OtlpWebsocket.js.map +0 -1
- package/dist/effect/Otel/Span.d.ts +0 -32
- package/dist/effect/Otel/Span.d.ts.map +0 -1
- package/dist/effect/Otel/Span.js +0 -97
- package/dist/effect/Otel/Span.js.map +0 -1
- package/dist/effect/Otel/Tracer.d.ts +0 -15
- package/dist/effect/Otel/Tracer.d.ts.map +0 -1
- package/dist/effect/Otel/Tracer.js +0 -17
- package/dist/effect/Otel/Tracer.js.map +0 -1
- package/dist/effect/Otel/index.d.ts +0 -8
- package/dist/effect/Otel/index.d.ts.map +0 -1
- package/dist/effect/Otel/index.js +0 -9
- package/dist/effect/Otel/index.js.map +0 -1
- package/dist/effect/Otel/lib-metrics/ExporterMetricsOltpGrpc.d.ts +0 -14
- package/dist/effect/Otel/lib-metrics/ExporterMetricsOltpGrpc.d.ts.map +0 -1
- package/dist/effect/Otel/lib-metrics/ExporterMetricsOltpGrpc.js +0 -15
- package/dist/effect/Otel/lib-metrics/ExporterMetricsOltpGrpc.js.map +0 -1
- package/dist/effect/Otel/lib-metrics/ExporterMetricsOltpHttp.d.ts +0 -14
- package/dist/effect/Otel/lib-metrics/ExporterMetricsOltpHttp.d.ts.map +0 -1
- package/dist/effect/Otel/lib-metrics/ExporterMetricsOltpHttp.js +0 -15
- package/dist/effect/Otel/lib-metrics/ExporterMetricsOltpHttp.js.map +0 -1
- package/dist/effect/Otel/lib-metrics/ExporterMetricsOltpWebsocket.d.ts +0 -19
- package/dist/effect/Otel/lib-metrics/ExporterMetricsOltpWebsocket.d.ts.map +0 -1
- package/dist/effect/Otel/lib-metrics/ExporterMetricsOltpWebsocket.js +0 -17
- package/dist/effect/Otel/lib-metrics/ExporterMetricsOltpWebsocket.js.map +0 -1
- package/dist/effect/Otel/lib-metrics/MetricsProvider.d.ts +0 -10
- package/dist/effect/Otel/lib-metrics/MetricsProvider.d.ts.map +0 -1
- package/dist/effect/Otel/lib-metrics/MetricsProvider.js +0 -4
- package/dist/effect/Otel/lib-metrics/MetricsProvider.js.map +0 -1
- package/dist/effect/Otel/lib-metrics/OTLPMetricsProviderGrpc.d.ts +0 -16
- package/dist/effect/Otel/lib-metrics/OTLPMetricsProviderGrpc.d.ts.map +0 -1
- package/dist/effect/Otel/lib-metrics/OTLPMetricsProviderGrpc.js +0 -39
- package/dist/effect/Otel/lib-metrics/OTLPMetricsProviderGrpc.js.map +0 -1
- package/dist/effect/Otel/lib-metrics/OTLPMetricsProviderHttp.d.ts +0 -16
- package/dist/effect/Otel/lib-metrics/OTLPMetricsProviderHttp.d.ts.map +0 -1
- package/dist/effect/Otel/lib-metrics/OTLPMetricsProviderHttp.js +0 -39
- package/dist/effect/Otel/lib-metrics/OTLPMetricsProviderHttp.js.map +0 -1
- package/dist/effect/Otel/lib-metrics/OTLPMetricsProviderWebsocket.d.ts +0 -16
- package/dist/effect/Otel/lib-metrics/OTLPMetricsProviderWebsocket.d.ts.map +0 -1
- package/dist/effect/Otel/lib-metrics/OTLPMetricsProviderWebsocket.js +0 -39
- package/dist/effect/Otel/lib-metrics/OTLPMetricsProviderWebsocket.js.map +0 -1
- package/dist/effect/Otel/lib-metrics/PeriodicMetricsProvider.d.ts +0 -17
- package/dist/effect/Otel/lib-metrics/PeriodicMetricsProvider.d.ts.map +0 -1
- package/dist/effect/Otel/lib-metrics/PeriodicMetricsProvider.js +0 -27
- package/dist/effect/Otel/lib-metrics/PeriodicMetricsProvider.js.map +0 -1
- package/dist/effect/Otel/lib-tracer/BatchSpanProcessor.d.ts +0 -18
- package/dist/effect/Otel/lib-tracer/BatchSpanProcessor.d.ts.map +0 -1
- package/dist/effect/Otel/lib-tracer/BatchSpanProcessor.js +0 -31
- package/dist/effect/Otel/lib-tracer/BatchSpanProcessor.js.map +0 -1
- package/dist/effect/Otel/lib-tracer/ExporterTraceOtlpGrpc.d.ts +0 -19
- package/dist/effect/Otel/lib-tracer/ExporterTraceOtlpGrpc.d.ts.map +0 -1
- package/dist/effect/Otel/lib-tracer/ExporterTraceOtlpGrpc.js +0 -36
- package/dist/effect/Otel/lib-tracer/ExporterTraceOtlpGrpc.js.map +0 -1
- package/dist/effect/Otel/lib-tracer/ExporterTraceOtlpHttp.d.ts +0 -19
- package/dist/effect/Otel/lib-tracer/ExporterTraceOtlpHttp.d.ts.map +0 -1
- package/dist/effect/Otel/lib-tracer/ExporterTraceOtlpHttp.js +0 -36
- package/dist/effect/Otel/lib-tracer/ExporterTraceOtlpHttp.js.map +0 -1
- package/dist/effect/Otel/lib-tracer/ExporterTraceOtlpWebsocket.d.ts +0 -9
- package/dist/effect/Otel/lib-tracer/ExporterTraceOtlpWebsocket.d.ts.map +0 -1
- package/dist/effect/Otel/lib-tracer/ExporterTraceOtlpWebsocket.js +0 -29
- package/dist/effect/Otel/lib-tracer/ExporterTraceOtlpWebsocket.js.map +0 -1
- package/dist/effect/Otel/lib-tracer/SimpleProcessor.d.ts +0 -19
- package/dist/effect/Otel/lib-tracer/SimpleProcessor.d.ts.map +0 -1
- package/dist/effect/Otel/lib-tracer/SimpleProcessor.js +0 -25
- package/dist/effect/Otel/lib-tracer/SimpleProcessor.js.map +0 -1
- package/dist/effect/Otel/lib-tracer/TracerProvider.d.ts +0 -10
- package/dist/effect/Otel/lib-tracer/TracerProvider.d.ts.map +0 -1
- package/dist/effect/Otel/lib-tracer/TracerProvider.js +0 -7
- package/dist/effect/Otel/lib-tracer/TracerProvider.js.map +0 -1
- package/dist/effect/Otel/lib-tracer/WebProvider.d.ts +0 -18
- package/dist/effect/Otel/lib-tracer/WebProvider.d.ts.map +0 -1
- package/dist/effect/Otel/lib-tracer/WebProvider.js +0 -25
- package/dist/effect/Otel/lib-tracer/WebProvider.js.map +0 -1
- package/dist/effect/ReadonlyArray.d.ts +0 -4
- package/dist/effect/ReadonlyArray.d.ts.map +0 -1
- package/dist/effect/ReadonlyArray.js +0 -11
- package/dist/effect/ReadonlyArray.js.map +0 -1
- package/dist/effect/RequestResolver.d.ts +0 -11
- package/dist/effect/RequestResolver.d.ts.map +0 -1
- package/dist/effect/RequestResolver.js +0 -18
- package/dist/effect/RequestResolver.js.map +0 -1
- package/dist/effect/STM.d.ts +0 -3
- package/dist/effect/STM.d.ts.map +0 -1
- package/dist/effect/STM.js +0 -3
- package/dist/effect/STM.js.map +0 -1
- package/dist/effect/Scheduler.d.ts +0 -49
- package/dist/effect/Scheduler.d.ts.map +0 -1
- package/dist/effect/Scheduler.js +0 -168
- package/dist/effect/Scheduler.js.map +0 -1
- package/dist/effect/Schema/SchemaHash.d.ts +0 -3
- package/dist/effect/Schema/SchemaHash.d.ts.map +0 -1
- package/dist/effect/Schema/SchemaHash.js +0 -15
- package/dist/effect/Schema/SchemaHash.js.map +0 -1
- package/dist/effect/Schema/SchemaHash.test.d.ts +0 -2
- package/dist/effect/Schema/SchemaHash.test.d.ts.map +0 -1
- package/dist/effect/Schema/SchemaHash.test.js +0 -13
- package/dist/effect/Schema/SchemaHash.test.js.map +0 -1
- package/dist/effect/Schema/SchemaJsonWrapper.d.ts +0 -11
- package/dist/effect/Schema/SchemaJsonWrapper.d.ts.map +0 -1
- package/dist/effect/Schema/SchemaJsonWrapper.js +0 -38
- package/dist/effect/Schema/SchemaJsonWrapper.js.map +0 -1
- package/dist/effect/Schema/SchemaJsonWrapper.test.d.ts +0 -2
- package/dist/effect/Schema/SchemaJsonWrapper.test.d.ts.map +0 -1
- package/dist/effect/Schema/SchemaJsonWrapper.test.js +0 -42
- package/dist/effect/Schema/SchemaJsonWrapper.test.js.map +0 -1
- package/dist/effect/Schema/index.d.ts +0 -15
- package/dist/effect/Schema/index.d.ts.map +0 -1
- package/dist/effect/Schema/index.js +0 -14
- package/dist/effect/Schema/index.js.map +0 -1
- package/dist/effect/SmartQueue.d.ts +0 -38
- package/dist/effect/SmartQueue.d.ts.map +0 -1
- package/dist/effect/SmartQueue.js +0 -123
- package/dist/effect/SmartQueue.js.map +0 -1
- package/dist/effect/Stream/chainSwitch.d.ts +0 -3
- package/dist/effect/Stream/chainSwitch.d.ts.map +0 -1
- package/dist/effect/Stream/chainSwitch.js +0 -48
- package/dist/effect/Stream/chainSwitch.js.map +0 -1
- package/dist/effect/Stream/index.d.ts +0 -37
- package/dist/effect/Stream/index.d.ts.map +0 -1
- package/dist/effect/Stream/index.js +0 -82
- package/dist/effect/Stream/index.js.map +0 -1
- package/dist/effect/SubscriptionRef.d.ts +0 -10
- package/dist/effect/SubscriptionRef.d.ts.map +0 -1
- package/dist/effect/SubscriptionRef.js +0 -8
- package/dist/effect/SubscriptionRef.js.map +0 -1
- package/dist/effect/TimeoutGate.d.ts +0 -13
- package/dist/effect/TimeoutGate.d.ts.map +0 -1
- package/dist/effect/TimeoutGate.js +0 -41
- package/dist/effect/TimeoutGate.js.map +0 -1
- package/dist/effect/WebCrypto.d.ts +0 -18
- package/dist/effect/WebCrypto.d.ts.map +0 -1
- package/dist/effect/WebCrypto.js +0 -56
- package/dist/effect/WebCrypto.js.map +0 -1
- package/dist/effect/WebLock.d.ts +0 -5
- package/dist/effect/WebLock.d.ts.map +0 -1
- package/dist/effect/WebLock.js +0 -20
- package/dist/effect/WebLock.js.map +0 -1
- package/dist/effect/browser.d.ts +0 -19
- package/dist/effect/browser.d.ts.map +0 -1
- package/dist/effect/browser.js +0 -82
- package/dist/effect/browser.js.map +0 -1
- package/dist/effect/fetch.d.ts +0 -89
- package/dist/effect/fetch.d.ts.map +0 -1
- package/dist/effect/fetch.js +0 -142
- package/dist/effect/fetch.js.map +0 -1
- package/dist/single-item.d.ts +0 -8
- package/dist/single-item.d.ts.map +0 -1
- package/dist/single-item.js +0 -9
- package/dist/single-item.js.map +0 -1
- package/dist/types/index.d.ts +0 -2
- package/dist/types/index.d.ts.map +0 -1
- package/dist/types/index.js +0 -2
- package/dist/types/index.js.map +0 -1
- package/dist/types/json.d.ts +0 -27
- package/dist/types/json.d.ts.map +0 -1
- package/dist/types/json.js +0 -2
- package/dist/types/json.js.map +0 -1
- package/src/effect/Otel/Dummy.ts +0 -32
- package/src/effect/Otel/Meter.ts +0 -145
- package/src/effect/Otel/OtlpGrpc.ts +0 -75
- package/src/effect/Otel/OtlpHttp.ts +0 -75
- package/src/effect/Otel/OtlpWebsocket.ts +0 -75
- package/src/effect/Otel/Span.ts +0 -222
- package/src/effect/Otel/Tracer.ts +0 -30
- package/src/effect/Otel/index.ts +0 -8
- package/src/effect/Otel/lib-metrics/ExporterMetricsOltpGrpc.ts +0 -39
- package/src/effect/Otel/lib-metrics/ExporterMetricsOltpHttp.ts +0 -39
- package/src/effect/Otel/lib-metrics/ExporterMetricsOltpWebsocket.ts +0 -47
- package/src/effect/Otel/lib-metrics/MetricsProvider.ts +0 -12
- package/src/effect/Otel/lib-metrics/OTLPMetricsProviderGrpc.ts +0 -77
- package/src/effect/Otel/lib-metrics/OTLPMetricsProviderHttp.ts +0 -77
- package/src/effect/Otel/lib-metrics/OTLPMetricsProviderWebsocket.ts +0 -80
- package/src/effect/Otel/lib-metrics/PeriodicMetricsProvider.ts +0 -55
- package/src/effect/Otel/lib-tracer/BatchSpanProcessor.ts +0 -58
- package/src/effect/Otel/lib-tracer/ExporterTraceOtlpGrpc.ts +0 -64
- package/src/effect/Otel/lib-tracer/ExporterTraceOtlpHttp.ts +0 -64
- package/src/effect/Otel/lib-tracer/ExporterTraceOtlpWebsocket.ts +0 -38
- package/src/effect/Otel/lib-tracer/README.md +0 -1
- package/src/effect/Otel/lib-tracer/SimpleProcessor.ts +0 -46
- package/src/effect/Otel/lib-tracer/TracerProvider.ts +0 -16
- package/src/effect/Otel/lib-tracer/WebProvider.ts +0 -48
|
@@ -1,77 +0,0 @@
|
|
|
1
|
-
import * as Context from '@effect/data/Context'
|
|
2
|
-
import { identity, pipe } from '@effect/data/Function'
|
|
3
|
-
import * as Option from '@effect/data/Option'
|
|
4
|
-
import * as Effect from '@effect/io/Effect'
|
|
5
|
-
import * as Layer from '@effect/io/Layer'
|
|
6
|
-
import { OTLPMetricExporter } from '@opentelemetry/exporter-metrics-otlp-http'
|
|
7
|
-
import type { MeterProviderOptions } from '@opentelemetry/sdk-metrics'
|
|
8
|
-
import { MeterProvider, PeriodicExportingMetricReader } from '@opentelemetry/sdk-metrics'
|
|
9
|
-
|
|
10
|
-
import { OTLPMetricExporterConfig } from './ExporterMetricsOltpHttp.js'
|
|
11
|
-
import { MeterProviderSymbol, MetricsProvider } from './MetricsProvider.js'
|
|
12
|
-
|
|
13
|
-
export const OTLPMetricsProviderConfigSymbol = Symbol.for('effect-otel/OTLPMetricsProviderConfig')
|
|
14
|
-
|
|
15
|
-
export interface OTLPMetricsProviderConfig {
|
|
16
|
-
readonly options: MeterProviderOptions
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
export const OTLPMetricsProviderConfig = Context.Tag<OTLPMetricsProviderConfig>(OTLPMetricsProviderConfigSymbol)
|
|
20
|
-
|
|
21
|
-
export const LiveOTLPMetricsProviderConfig = (options: MeterProviderOptions) =>
|
|
22
|
-
Layer.succeed(OTLPMetricsProviderConfig, { options })
|
|
23
|
-
|
|
24
|
-
export const makeOTLPMetricsProvider = Effect.gen(function* ($) {
|
|
25
|
-
const ctx = yield* $(Effect.context<never>())
|
|
26
|
-
|
|
27
|
-
const options = pipe(
|
|
28
|
-
Context.getOption(ctx, OTLPMetricsProviderConfig),
|
|
29
|
-
Option.map((_) => _.options),
|
|
30
|
-
Option.getOrUndefined,
|
|
31
|
-
)
|
|
32
|
-
|
|
33
|
-
const metricsProvider = yield* $(Effect.sync(() => new MeterProvider(options)))
|
|
34
|
-
|
|
35
|
-
// TODO remove below
|
|
36
|
-
|
|
37
|
-
// const metricsExporter = yield* _(exporter)
|
|
38
|
-
const config = yield* $(OTLPMetricExporterConfig)
|
|
39
|
-
|
|
40
|
-
const metricExporter = yield* $(
|
|
41
|
-
Effect.sync(() => new OTLPMetricExporter(config)),
|
|
42
|
-
// TODO re-enable
|
|
43
|
-
Effect.acquireRelease((_p) =>
|
|
44
|
-
pipe(
|
|
45
|
-
// Effect.tryPromise(() => p.shutdown()),
|
|
46
|
-
Effect.unit, // TODO without this I'm seeing a "`config` of undefined" bug
|
|
47
|
-
Effect.orDie,
|
|
48
|
-
),
|
|
49
|
-
),
|
|
50
|
-
)
|
|
51
|
-
|
|
52
|
-
const metricReader = yield* $(
|
|
53
|
-
Effect.sync(
|
|
54
|
-
() =>
|
|
55
|
-
new PeriodicExportingMetricReader({
|
|
56
|
-
exporter: metricExporter,
|
|
57
|
-
exportIntervalMillis: 1000, // TODO make configurable
|
|
58
|
-
}),
|
|
59
|
-
),
|
|
60
|
-
)
|
|
61
|
-
|
|
62
|
-
yield* $(Effect.sync(() => metricsProvider.addMetricReader(metricReader)))
|
|
63
|
-
|
|
64
|
-
// TODO remove above
|
|
65
|
-
|
|
66
|
-
return identity<MetricsProvider>({
|
|
67
|
-
[MeterProviderSymbol]: MeterProviderSymbol,
|
|
68
|
-
metricsProvider,
|
|
69
|
-
})
|
|
70
|
-
})
|
|
71
|
-
|
|
72
|
-
export const OTLPMetricsProviderLayer = Layer.scoped(MetricsProvider, makeOTLPMetricsProvider)
|
|
73
|
-
|
|
74
|
-
export const OTLPMetricsProvider = (
|
|
75
|
-
config?: MeterProviderOptions,
|
|
76
|
-
): Layer.Layer<OTLPMetricExporterConfig, never, MetricsProvider> =>
|
|
77
|
-
config ? Layer.provide(LiveOTLPMetricsProviderConfig(config), OTLPMetricsProviderLayer) : OTLPMetricsProviderLayer
|
|
@@ -1,80 +0,0 @@
|
|
|
1
|
-
import * as Context from '@effect/data/Context'
|
|
2
|
-
import { identity, pipe } from '@effect/data/Function'
|
|
3
|
-
import * as Option from '@effect/data/Option'
|
|
4
|
-
import * as Effect from '@effect/io/Effect'
|
|
5
|
-
import * as Layer from '@effect/io/Layer'
|
|
6
|
-
// import { OTLPMetricExporter } from '@opentelemetry/exporter-metrics-otlp-http'
|
|
7
|
-
import type { MeterProviderOptions } from '@opentelemetry/sdk-metrics'
|
|
8
|
-
import { MeterProvider, PeriodicExportingMetricReader } from '@opentelemetry/sdk-metrics'
|
|
9
|
-
import { WebsocketMetricExporter } from 'otel-websocket-exporter'
|
|
10
|
-
|
|
11
|
-
import { OTLPMetricExporterConfig } from './ExporterMetricsOltpWebsocket.js'
|
|
12
|
-
import { MeterProviderSymbol, MetricsProvider } from './MetricsProvider.js'
|
|
13
|
-
|
|
14
|
-
export const OTLPMetricsProviderConfigSymbol = Symbol.for('effect-otel/OTLPMetricsProviderConfig')
|
|
15
|
-
|
|
16
|
-
export interface OTLPMetricsProviderConfig {
|
|
17
|
-
readonly options: MeterProviderOptions
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
export const OTLPMetricsProviderConfig = Context.Tag<OTLPMetricsProviderConfig>(OTLPMetricsProviderConfigSymbol)
|
|
21
|
-
|
|
22
|
-
export const LiveOTLPMetricsProviderConfig = (options: MeterProviderOptions) =>
|
|
23
|
-
Layer.succeed(OTLPMetricsProviderConfig, { options })
|
|
24
|
-
|
|
25
|
-
export const makeOTLPMetricsProvider = Effect.gen(function* ($) {
|
|
26
|
-
const ctx = yield* $(Effect.context<never>())
|
|
27
|
-
|
|
28
|
-
const options = pipe(
|
|
29
|
-
Context.getOption(ctx, OTLPMetricsProviderConfig),
|
|
30
|
-
Option.map((_) => _.options),
|
|
31
|
-
Option.getOrUndefined,
|
|
32
|
-
)
|
|
33
|
-
|
|
34
|
-
const metricsProvider = yield* $(Effect.sync(() => new MeterProvider(options)))
|
|
35
|
-
|
|
36
|
-
// TODO remove below
|
|
37
|
-
|
|
38
|
-
// const metricsExporter = yield* _(exporter)
|
|
39
|
-
const { config } = yield* $(OTLPMetricExporterConfig)
|
|
40
|
-
|
|
41
|
-
const metricExporter = yield* $(
|
|
42
|
-
pipe(
|
|
43
|
-
Effect.sync(() => new WebsocketMetricExporter(config)),
|
|
44
|
-
// TODO re-enable
|
|
45
|
-
Effect.acquireRelease((_p) =>
|
|
46
|
-
pipe(
|
|
47
|
-
// Effect.tryPromise(() => p.shutdown()),
|
|
48
|
-
Effect.unit, // TODO without this I'm seeing a "`config` of undefined" bug
|
|
49
|
-
Effect.orDie,
|
|
50
|
-
),
|
|
51
|
-
),
|
|
52
|
-
),
|
|
53
|
-
)
|
|
54
|
-
|
|
55
|
-
const metricReader = yield* $(
|
|
56
|
-
Effect.sync(
|
|
57
|
-
() =>
|
|
58
|
-
new PeriodicExportingMetricReader({
|
|
59
|
-
exporter: metricExporter,
|
|
60
|
-
exportIntervalMillis: 1000, // TODO make configurable
|
|
61
|
-
}),
|
|
62
|
-
),
|
|
63
|
-
)
|
|
64
|
-
|
|
65
|
-
yield* $(Effect.sync(() => metricsProvider.addMetricReader(metricReader)))
|
|
66
|
-
|
|
67
|
-
// TODO remove above
|
|
68
|
-
|
|
69
|
-
return identity<MetricsProvider>({
|
|
70
|
-
[MeterProviderSymbol]: MeterProviderSymbol,
|
|
71
|
-
metricsProvider,
|
|
72
|
-
})
|
|
73
|
-
})
|
|
74
|
-
|
|
75
|
-
export const OTLPMetricsProviderLayer = Layer.scoped(MetricsProvider, makeOTLPMetricsProvider)
|
|
76
|
-
|
|
77
|
-
export const OTLPMetricsProvider = (
|
|
78
|
-
config?: MeterProviderOptions,
|
|
79
|
-
): Layer.Layer<OTLPMetricExporterConfig, never, MetricsProvider> =>
|
|
80
|
-
config ? Layer.provide(LiveOTLPMetricsProviderConfig(config), OTLPMetricsProviderLayer) : OTLPMetricsProviderLayer
|
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
import * as Context from '@effect/data/Context'
|
|
2
|
-
import { identity } from '@effect/data/Function'
|
|
3
|
-
import * as Effect from '@effect/io/Effect'
|
|
4
|
-
import * as Layer from '@effect/io/Layer'
|
|
5
|
-
import type * as Scope from '@effect/io/Scope'
|
|
6
|
-
import type { MetricReader, PushMetricExporter } from '@opentelemetry/sdk-metrics'
|
|
7
|
-
import { PeriodicExportingMetricReader } from '@opentelemetry/sdk-metrics'
|
|
8
|
-
|
|
9
|
-
import { MetricsProvider } from './MetricsProvider.js'
|
|
10
|
-
|
|
11
|
-
//
|
|
12
|
-
// Span Processor
|
|
13
|
-
//
|
|
14
|
-
|
|
15
|
-
export const PeriodicMetricsProviderSymbol = Symbol.for('effect-otel/PeriodicMetricsProvider')
|
|
16
|
-
export type PeriodicMetricsProviderSymbol = typeof PeriodicMetricsProviderSymbol
|
|
17
|
-
|
|
18
|
-
export interface PeriodicMetricsProvider {
|
|
19
|
-
readonly [PeriodicMetricsProviderSymbol]: PeriodicMetricsProviderSymbol
|
|
20
|
-
readonly metricsExporter: PushMetricExporter
|
|
21
|
-
readonly metricReader: MetricReader
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
export const makePeriodicMetricsProvider = <R, E, A extends PushMetricExporter>(
|
|
25
|
-
exporter: Effect.Effect<R | Scope.Scope, E, A>,
|
|
26
|
-
) =>
|
|
27
|
-
Effect.gen(function* ($) {
|
|
28
|
-
const { metricsProvider } = yield* $(MetricsProvider)
|
|
29
|
-
|
|
30
|
-
const metricsExporter = yield* $(exporter)
|
|
31
|
-
|
|
32
|
-
const metricReader = yield* $(
|
|
33
|
-
Effect.sync(
|
|
34
|
-
() =>
|
|
35
|
-
new PeriodicExportingMetricReader({
|
|
36
|
-
exporter: metricsExporter,
|
|
37
|
-
exportIntervalMillis: 1000, // TODO make configurable
|
|
38
|
-
}),
|
|
39
|
-
),
|
|
40
|
-
)
|
|
41
|
-
|
|
42
|
-
yield* $(Effect.sync(() => metricsProvider.addMetricReader(metricReader)))
|
|
43
|
-
|
|
44
|
-
return identity<PeriodicMetricsProvider>({
|
|
45
|
-
[PeriodicMetricsProviderSymbol]: PeriodicMetricsProviderSymbol,
|
|
46
|
-
metricsExporter,
|
|
47
|
-
metricReader,
|
|
48
|
-
})
|
|
49
|
-
})
|
|
50
|
-
|
|
51
|
-
export const PeriodicMetricsProviderTag = Context.Tag<PeriodicMetricsProvider>(PeriodicMetricsProviderSymbol)
|
|
52
|
-
|
|
53
|
-
export const PeriodicMetricsProvider = <R, E, A extends PushMetricExporter>(
|
|
54
|
-
exporter: Effect.Effect<R | Scope.Scope, E, A>,
|
|
55
|
-
) => Layer.scoped(PeriodicMetricsProviderTag, makePeriodicMetricsProvider(exporter))
|
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
import * as Context from '@effect/data/Context'
|
|
2
|
-
import { identity } from '@effect/data/Function'
|
|
3
|
-
import * as Effect from '@effect/io/Effect'
|
|
4
|
-
import * as Layer from '@effect/io/Layer'
|
|
5
|
-
import type * as Scope from '@effect/io/Scope'
|
|
6
|
-
import type { SpanExporter } from '@opentelemetry/sdk-trace-base'
|
|
7
|
-
import { BatchSpanProcessor } from '@opentelemetry/sdk-trace-base'
|
|
8
|
-
|
|
9
|
-
import { TracerProvider } from './TracerProvider.js'
|
|
10
|
-
|
|
11
|
-
//
|
|
12
|
-
// Span Processor
|
|
13
|
-
//
|
|
14
|
-
|
|
15
|
-
export const BatchProcessorSymbol = Symbol.for('effect-otel/BatchProcessor')
|
|
16
|
-
export type BatchProcessorSymbol = typeof BatchProcessorSymbol
|
|
17
|
-
|
|
18
|
-
export interface BatchProcessor {
|
|
19
|
-
readonly [BatchProcessorSymbol]: BatchProcessorSymbol
|
|
20
|
-
readonly spanExporter: SpanExporter
|
|
21
|
-
readonly spanProcessor: BatchSpanProcessor
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
export const makeBatchProcessor = <R, E, A extends SpanExporter>(exporter: Effect.Effect<R | Scope.Scope, E, A>) =>
|
|
25
|
-
Effect.gen(function* ($) {
|
|
26
|
-
const { tracerProvider } = yield* $(TracerProvider)
|
|
27
|
-
|
|
28
|
-
const spanExporter = yield* $(exporter)
|
|
29
|
-
|
|
30
|
-
const spanProcessor = yield* $(
|
|
31
|
-
Effect.sync(
|
|
32
|
-
() =>
|
|
33
|
-
new BatchSpanProcessor(
|
|
34
|
-
spanExporter,
|
|
35
|
-
// TODO make this configurable
|
|
36
|
-
{
|
|
37
|
-
scheduledDelayMillis: 500,
|
|
38
|
-
maxExportBatchSize: 1000,
|
|
39
|
-
maxQueueSize: 10_000_000,
|
|
40
|
-
exportTimeoutMillis: 1000 * 60 * 3, // 3 minutes
|
|
41
|
-
},
|
|
42
|
-
),
|
|
43
|
-
),
|
|
44
|
-
)
|
|
45
|
-
|
|
46
|
-
yield* $(Effect.sync(() => tracerProvider.addSpanProcessor(spanProcessor)))
|
|
47
|
-
|
|
48
|
-
return identity<BatchProcessor>({
|
|
49
|
-
[BatchProcessorSymbol]: BatchProcessorSymbol,
|
|
50
|
-
spanExporter,
|
|
51
|
-
spanProcessor,
|
|
52
|
-
})
|
|
53
|
-
})
|
|
54
|
-
|
|
55
|
-
export const BatchProcessorTag = Context.Tag<BatchProcessor>(BatchProcessorSymbol)
|
|
56
|
-
|
|
57
|
-
export const BatchProcessor = <R, E, A extends SpanExporter>(exporter: Effect.Effect<R | Scope.Scope, E, A>) =>
|
|
58
|
-
Layer.scoped(BatchProcessorTag, makeBatchProcessor(exporter))
|
|
@@ -1,64 +0,0 @@
|
|
|
1
|
-
import * as Context from '@effect/data/Context'
|
|
2
|
-
import * as Duration from '@effect/data/Duration'
|
|
3
|
-
import { pipe } from '@effect/data/Function'
|
|
4
|
-
import * as Effect from '@effect/io/Effect'
|
|
5
|
-
import * as Layer from '@effect/io/Layer'
|
|
6
|
-
import { diag, DiagConsoleLogger, DiagLogLevel } from '@opentelemetry/api'
|
|
7
|
-
import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-grpc'
|
|
8
|
-
import type { OTLPExporterNodeConfigBase } from '@opentelemetry/otlp-exporter-base'
|
|
9
|
-
|
|
10
|
-
import { SimpleProcessor } from './SimpleProcessor.js'
|
|
11
|
-
|
|
12
|
-
export const OTLPTraceExporterConfigSymbol = Symbol.for('effect-otel/OTLPTraceExporterConfig')
|
|
13
|
-
type OTLPTraceExporterConfigSymbol = typeof OTLPTraceExporterConfigSymbol
|
|
14
|
-
|
|
15
|
-
export interface OTLPTraceExporterConfig {
|
|
16
|
-
readonly [OTLPTraceExporterConfigSymbol]: OTLPTraceExporterConfigSymbol
|
|
17
|
-
readonly config: OTLPExporterNodeConfigBase
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
export const OTLPTraceExporterConfig = Context.Tag<OTLPTraceExporterConfig>(OTLPTraceExporterConfigSymbol)
|
|
21
|
-
|
|
22
|
-
export const makeOTLPTraceExporterConfigLayer = (config: OTLPExporterNodeConfigBase) =>
|
|
23
|
-
Layer.succeed(OTLPTraceExporterConfig, { [OTLPTraceExporterConfigSymbol]: OTLPTraceExporterConfigSymbol, config })
|
|
24
|
-
|
|
25
|
-
export const makeOTLPTraceExporterConfigLayerM = <R, E>(configEff: Effect.Effect<R, E, OTLPExporterNodeConfigBase>) =>
|
|
26
|
-
Layer.effect(
|
|
27
|
-
OTLPTraceExporterConfig,
|
|
28
|
-
Effect.map(
|
|
29
|
-
configEff,
|
|
30
|
-
(config) => ({ [OTLPTraceExporterConfigSymbol]: OTLPTraceExporterConfigSymbol, config }) as const,
|
|
31
|
-
),
|
|
32
|
-
)
|
|
33
|
-
export const makeTracingSpanExporter = Effect.gen(function* ($) {
|
|
34
|
-
const { config } = yield* $(OTLPTraceExporterConfig)
|
|
35
|
-
|
|
36
|
-
diag.setLogger(new DiagConsoleLogger(), DiagLogLevel.ERROR)
|
|
37
|
-
|
|
38
|
-
const spanExporter = yield* $(
|
|
39
|
-
pipe(
|
|
40
|
-
Effect.sync(() => new OTLPTraceExporter(config)),
|
|
41
|
-
// NOTE Unfortunately this workaround/"hack" is currently needed since Otel doesn't yet provide a graceful
|
|
42
|
-
// way to shutdown.
|
|
43
|
-
//
|
|
44
|
-
// Related issue: https://github.com/open-telemetry/opentelemetry-js/issues/987
|
|
45
|
-
Effect.acquireRelease((p) =>
|
|
46
|
-
Effect.gen(function* ($) {
|
|
47
|
-
while (1) {
|
|
48
|
-
yield* $(Effect.sleep(Duration.millis(0)))
|
|
49
|
-
const promises = p['_sendingPromises'] as any[]
|
|
50
|
-
if (promises.length > 0) {
|
|
51
|
-
yield* $(Effect.exit(Effect.promise(() => Promise.all(promises))))
|
|
52
|
-
} else {
|
|
53
|
-
break
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
}),
|
|
57
|
-
),
|
|
58
|
-
),
|
|
59
|
-
)
|
|
60
|
-
|
|
61
|
-
return spanExporter
|
|
62
|
-
})
|
|
63
|
-
|
|
64
|
-
export const LiveSimpleProcessor = SimpleProcessor(makeTracingSpanExporter)
|
|
@@ -1,64 +0,0 @@
|
|
|
1
|
-
import * as Context from '@effect/data/Context'
|
|
2
|
-
import * as Duration from '@effect/data/Duration'
|
|
3
|
-
import { pipe } from '@effect/data/Function'
|
|
4
|
-
import * as Effect from '@effect/io/Effect'
|
|
5
|
-
import * as Layer from '@effect/io/Layer'
|
|
6
|
-
import { diag, DiagConsoleLogger, DiagLogLevel } from '@opentelemetry/api'
|
|
7
|
-
import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-http'
|
|
8
|
-
import type { OTLPExporterNodeConfigBase } from '@opentelemetry/otlp-exporter-base'
|
|
9
|
-
|
|
10
|
-
import { SimpleProcessor } from './SimpleProcessor.js'
|
|
11
|
-
|
|
12
|
-
export const OTLPTraceExporterConfigSymbol = Symbol.for('effect-otel/OTLPTraceExporterConfig')
|
|
13
|
-
type OTLPTraceExporterConfigSymbol = typeof OTLPTraceExporterConfigSymbol
|
|
14
|
-
|
|
15
|
-
export interface OTLPTraceExporterConfig {
|
|
16
|
-
readonly [OTLPTraceExporterConfigSymbol]: OTLPTraceExporterConfigSymbol
|
|
17
|
-
readonly config: OTLPExporterNodeConfigBase
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
export const OTLPTraceExporterConfig = Context.Tag<OTLPTraceExporterConfig>(OTLPTraceExporterConfigSymbol)
|
|
21
|
-
|
|
22
|
-
export const makeOTLPTraceExporterConfigLayer = (config: OTLPExporterNodeConfigBase) =>
|
|
23
|
-
Layer.succeed(OTLPTraceExporterConfig, { [OTLPTraceExporterConfigSymbol]: OTLPTraceExporterConfigSymbol, config })
|
|
24
|
-
|
|
25
|
-
export const makeOTLPTraceExporterConfigLayerM = <R, E>(configEff: Effect.Effect<R, E, OTLPExporterNodeConfigBase>) =>
|
|
26
|
-
Layer.effect(
|
|
27
|
-
OTLPTraceExporterConfig,
|
|
28
|
-
Effect.map(
|
|
29
|
-
configEff,
|
|
30
|
-
(config) => ({ [OTLPTraceExporterConfigSymbol]: OTLPTraceExporterConfigSymbol, config }) as const,
|
|
31
|
-
),
|
|
32
|
-
)
|
|
33
|
-
export const makeTracingSpanExporter = Effect.gen(function* ($) {
|
|
34
|
-
const { config } = yield* $(OTLPTraceExporterConfig)
|
|
35
|
-
|
|
36
|
-
diag.setLogger(new DiagConsoleLogger(), DiagLogLevel.ERROR)
|
|
37
|
-
|
|
38
|
-
const spanExporter = yield* $(
|
|
39
|
-
pipe(
|
|
40
|
-
Effect.sync(() => new OTLPTraceExporter(config)),
|
|
41
|
-
// NOTE Unfortunately this workaround/"hack" is currently needed since Otel doesn't yet provide a graceful
|
|
42
|
-
// way to shutdown.
|
|
43
|
-
//
|
|
44
|
-
// Related issue: https://github.com/open-telemetry/opentelemetry-js/issues/987
|
|
45
|
-
Effect.acquireRelease((p) =>
|
|
46
|
-
Effect.gen(function* ($) {
|
|
47
|
-
while (1) {
|
|
48
|
-
yield* $(Effect.sleep(Duration.millis(0)))
|
|
49
|
-
const promises = p['_sendingPromises'] as any[]
|
|
50
|
-
if (promises.length > 0) {
|
|
51
|
-
yield* $(Effect.exit(Effect.promise(() => Promise.all(promises))))
|
|
52
|
-
} else {
|
|
53
|
-
break
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
}),
|
|
57
|
-
),
|
|
58
|
-
),
|
|
59
|
-
)
|
|
60
|
-
|
|
61
|
-
return spanExporter
|
|
62
|
-
})
|
|
63
|
-
|
|
64
|
-
export const LiveSimpleProcessor = SimpleProcessor(makeTracingSpanExporter)
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
import * as Context from '@effect/data/Context'
|
|
2
|
-
import * as Duration from '@effect/data/Duration'
|
|
3
|
-
import * as Effect from '@effect/io/Effect'
|
|
4
|
-
import * as Layer from '@effect/io/Layer'
|
|
5
|
-
import type { OTLPExporterNodeConfigBase } from '@opentelemetry/otlp-exporter-base'
|
|
6
|
-
import { WebsocketTraceExporter } from 'otel-websocket-exporter'
|
|
7
|
-
|
|
8
|
-
export const OTLPTraceExporterConfig = Context.Tag<OTLPExporterNodeConfigBase>('effect-otel/OTLPTraceExporterConfig')
|
|
9
|
-
|
|
10
|
-
export const makeOTLPTraceExporterConfigLayer = (config: OTLPExporterNodeConfigBase) =>
|
|
11
|
-
Layer.succeed(OTLPTraceExporterConfig, config)
|
|
12
|
-
|
|
13
|
-
export const makeTracingSpanExporter = Effect.gen(function* ($) {
|
|
14
|
-
const config = yield* $(OTLPTraceExporterConfig)
|
|
15
|
-
|
|
16
|
-
const spanExporter = yield* $(
|
|
17
|
-
Effect.sync(() => new WebsocketTraceExporter(config)),
|
|
18
|
-
// NOTE Unfortunately this workaround/"hack" is currently needed since Otel doesn't yet provide a graceful
|
|
19
|
-
// way to shutdown.
|
|
20
|
-
//
|
|
21
|
-
// Related issue: https://github.com/open-telemetry/opentelemetry-js/issues/987
|
|
22
|
-
Effect.acquireRelease((p) =>
|
|
23
|
-
Effect.gen(function* ($) {
|
|
24
|
-
while (1) {
|
|
25
|
-
yield* $(Effect.sleep(Duration.millis(0)))
|
|
26
|
-
const promises = p['_sendingPromises'] as any[]
|
|
27
|
-
if (promises.length > 0) {
|
|
28
|
-
yield* $(Effect.exit(Effect.promise(() => Promise.all(promises))))
|
|
29
|
-
} else {
|
|
30
|
-
break
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
}),
|
|
34
|
-
),
|
|
35
|
-
)
|
|
36
|
-
|
|
37
|
-
return spanExporter
|
|
38
|
-
})
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
The files in this folder should be contributed back into effect/otel.
|
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
import * as Context from '@effect/data/Context'
|
|
2
|
-
import { identity } from '@effect/data/Function'
|
|
3
|
-
import * as Effect from '@effect/io/Effect'
|
|
4
|
-
import * as Layer from '@effect/io/Layer'
|
|
5
|
-
import type * as Scope from '@effect/io/Scope'
|
|
6
|
-
import type { SpanExporter } from '@opentelemetry/sdk-trace-base'
|
|
7
|
-
import { ConsoleSpanExporter, SimpleSpanProcessor } from '@opentelemetry/sdk-trace-base'
|
|
8
|
-
|
|
9
|
-
import { TracerProvider } from './TracerProvider.js'
|
|
10
|
-
|
|
11
|
-
//
|
|
12
|
-
// Span Processor
|
|
13
|
-
//
|
|
14
|
-
|
|
15
|
-
export const SimpleProcessorSymbol = Symbol.for('effect-otel/SimpleProcessor')
|
|
16
|
-
export type SimpleProcessorSymbol = typeof SimpleProcessorSymbol
|
|
17
|
-
|
|
18
|
-
export interface SimpleProcessor {
|
|
19
|
-
readonly [SimpleProcessorSymbol]: SimpleProcessorSymbol
|
|
20
|
-
readonly spanExporter: SpanExporter
|
|
21
|
-
readonly spanProcessor: SimpleSpanProcessor
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
export const makeSimpleProcessor = <R, E, A extends SpanExporter>(exporter: Effect.Effect<R | Scope.Scope, E, A>) =>
|
|
25
|
-
Effect.gen(function* ($) {
|
|
26
|
-
const { tracerProvider } = yield* $(TracerProvider)
|
|
27
|
-
|
|
28
|
-
const spanExporter = yield* $(exporter)
|
|
29
|
-
|
|
30
|
-
const spanProcessor = yield* $(Effect.sync(() => new SimpleSpanProcessor(spanExporter)))
|
|
31
|
-
|
|
32
|
-
yield* $(Effect.sync(() => tracerProvider.addSpanProcessor(spanProcessor)))
|
|
33
|
-
|
|
34
|
-
return identity<SimpleProcessor>({
|
|
35
|
-
[SimpleProcessorSymbol]: SimpleProcessorSymbol,
|
|
36
|
-
spanExporter,
|
|
37
|
-
spanProcessor,
|
|
38
|
-
})
|
|
39
|
-
})
|
|
40
|
-
|
|
41
|
-
export const SimpleProcessorTag = Context.Tag<SimpleProcessor>(SimpleProcessorSymbol)
|
|
42
|
-
|
|
43
|
-
export const SimpleProcessor = <R, E, A extends SpanExporter>(exporter: Effect.Effect<R | Scope.Scope, E, A>) =>
|
|
44
|
-
Layer.scoped(SimpleProcessorTag, makeSimpleProcessor(exporter))
|
|
45
|
-
|
|
46
|
-
export const LiveConsoleSimple = SimpleProcessor(Effect.sync(() => new ConsoleSpanExporter()))
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import * as Context from '@effect/data/Context'
|
|
2
|
-
import type { BasicTracerProvider } from '@opentelemetry/sdk-trace-base'
|
|
3
|
-
|
|
4
|
-
//
|
|
5
|
-
// ets_tracing Provider
|
|
6
|
-
//
|
|
7
|
-
|
|
8
|
-
export const TracerProviderSymbol = Symbol.for('effect-otel/TracerProvider')
|
|
9
|
-
export type TracerProviderSymbol = typeof TracerProviderSymbol
|
|
10
|
-
|
|
11
|
-
export interface TracerProvider {
|
|
12
|
-
readonly [TracerProviderSymbol]: TracerProviderSymbol
|
|
13
|
-
readonly tracerProvider: BasicTracerProvider
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
export const TracerProvider = Context.Tag<TracerProvider>(TracerProviderSymbol)
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
import * as Context from '@effect/data/Context'
|
|
2
|
-
import { identity, pipe } from '@effect/data/Function'
|
|
3
|
-
import * as Option from '@effect/data/Option'
|
|
4
|
-
import * as Effect from '@effect/io/Effect'
|
|
5
|
-
import * as Layer from '@effect/io/Layer'
|
|
6
|
-
import type { WebTracerConfig } from '@opentelemetry/sdk-trace-web'
|
|
7
|
-
import { WebTracerProvider } from '@opentelemetry/sdk-trace-web'
|
|
8
|
-
|
|
9
|
-
import { TracerProvider, TracerProviderSymbol } from './TracerProvider.js'
|
|
10
|
-
|
|
11
|
-
export const WebTracerProviderConfigSymbol = Symbol.for('effect-otel/WebTracerProviderConfig')
|
|
12
|
-
type WebTracerProviderConfigSymbol = typeof WebTracerProviderConfigSymbol
|
|
13
|
-
|
|
14
|
-
export interface WebTracerProviderConfig {
|
|
15
|
-
[WebTracerProviderConfigSymbol]: WebTracerProviderConfigSymbol
|
|
16
|
-
|
|
17
|
-
readonly config: WebTracerConfig
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
export const WebTracerProviderConfig = Context.Tag<WebTracerProviderConfig>(WebTracerProviderConfigSymbol)
|
|
21
|
-
|
|
22
|
-
export const LiveWebTracerProviderConfig = (config: WebTracerConfig) =>
|
|
23
|
-
Layer.succeed(WebTracerProviderConfig, {
|
|
24
|
-
[WebTracerProviderConfigSymbol]: WebTracerProviderConfigSymbol,
|
|
25
|
-
config,
|
|
26
|
-
})
|
|
27
|
-
|
|
28
|
-
export const makeWebTracingProvider = Effect.gen(function* ($) {
|
|
29
|
-
const ctx = yield* $(Effect.context<never>())
|
|
30
|
-
|
|
31
|
-
const config = pipe(
|
|
32
|
-
Context.getOption(ctx, WebTracerProviderConfig),
|
|
33
|
-
Option.map((_) => _.config),
|
|
34
|
-
Option.getOrUndefined,
|
|
35
|
-
)
|
|
36
|
-
|
|
37
|
-
const tracerProvider = yield* $(Effect.sync(() => new WebTracerProvider(config)))
|
|
38
|
-
|
|
39
|
-
return identity<TracerProvider>({
|
|
40
|
-
[TracerProviderSymbol]: TracerProviderSymbol,
|
|
41
|
-
tracerProvider,
|
|
42
|
-
})
|
|
43
|
-
})
|
|
44
|
-
|
|
45
|
-
export const WebProviderLayer = Layer.scoped(TracerProvider, makeWebTracingProvider)
|
|
46
|
-
|
|
47
|
-
export const WebProvider = (config?: WebTracerConfig) =>
|
|
48
|
-
config ? Layer.provide(LiveWebTracerProviderConfig(config), WebProviderLayer) : WebProviderLayer
|