Package: effect
Module: Metric
Interface for the fiber runtime metrics service that tracks fiber lifecycle events.
Example (Providing a custom fiber metrics service)
import { Data, Effect, Layer, Metric } from "effect"
import type { Context, Exit } from "effect"
class MetricsError extends Data.TaggedError("MetricsError")<{
readonly operation: string
}> {}
// Custom implementation of the metrics service
const customMetricsService: Metric.FiberRuntimeMetricsService = {
recordFiberStart: (context: Context.Context<never>) => {
console.log("Fiber started")
// Custom logic for tracking fiber starts
},
recordFiberEnd: (
context: Context.Context<never>,
exit: Exit.Exit<unknown, unknown>
) => {
console.log("Fiber completed with exit:", exit)
// Custom logic for tracking fiber completion based on exit status
}
}
const program = Effect.gen(function*() {
// Use the custom metrics service
const layer = Layer.succeed(Metric.FiberRuntimeMetrics)(customMetricsService)
return yield* Effect.sleep("100 millis").pipe(Effect.provide(layer))
})
Signature
export interface FiberRuntimeMetricsService {
readonly recordFiberStart: (context: Context.Context<never>) => void
readonly recordFiberEnd: (context: Context.Context<never>, exit: Exit<unknown, unknown>) => void
}
Since v4.0.0