effect-io-ai

Package: effect
Module: Effect

Effect.trackDuration

Updates the provided Metric with the Duration of time (in nanoseconds) that the wrapped Effect took to complete.

Details

Also accepts an optional function which can be used to map the Duration that the wrapped Effect took to complete into a valid Input for the Metric.

Example (Recording execution duration)

import { Effect, Metric } from "effect"

const executionTimer = Metric.timer("execution_time")

const program = Effect.sleep("100 millis").pipe(
  Effect.trackDuration(executionTimer)
)

Effect.runPromise(program).then(() =>
  Effect.runPromise(Metric.value(executionTimer)).then(console.log)
  // Output: { count: 1, min: 100000000, max: 100000000, sum: 100000000 }
)

Example (Mapping duration before tracking)

import { Duration, Effect, Metric } from "effect"

// Track execution time in milliseconds using custom mapping
const durationGauge = Metric.gauge("execution_millis")

const program = Effect.sleep("200 millis").pipe(
  Effect.trackDuration(durationGauge, (duration) => Duration.toMillis(duration))
)

Effect.runPromise(program).then(() =>
  Effect.runPromise(Metric.value(durationGauge)).then(console.log)
  // Output: { value: 200 }
)

Signature

declare const trackDuration: { <Input, State>(metric: Metric.Metric<Input, State>, f: (duration: Duration.Duration) => Input): <A, E, R>(self: Effect<A, E, R>) => Effect<A, E, R>; <State, E>(metric: Metric.Metric<Duration.Duration, State>): <A, R>(self: Effect<A, E, R>) => Effect<A, E, R>; <A, E, R, Input, State>(self: Effect<A, E, R>, metric: Metric.Metric<Input, State>, f: (duration: Duration.Duration) => Input): Effect<A, E, R>; <A, E, R, State>(self: Effect<A, E, R>, metric: Metric.Metric<Duration.Duration, State>): Effect<A, E, R>; }

Source

Since v4.0.0