Pudu programming language
Menu
Package

@chrismichaelps / pudu-lang-resilience

Resilience pipelines for Pudu: retry, circuit breaker, timeout, fallback, hedging, rate limiting, and chaos injection

0.1.0Apache-2.01

InstallClose

Log.pudu

Pudu43 lines2.1 KB

GitHub ↗
1/** @Telemetry.Log.Module — events written as single text lines */2module PuduLangResilience.Telemetry.Log34import PuduLangResilience.Telemetry as Telemetry56/// A listener writing every event of at least the `least` severity as one line.7export fn listener(least: Telemetry.Severity, write: fn(Str) -> ()) -> Telemetry.Listener {8  fn(event: Telemetry.Event) -> () {9    if Telemetry.rank(&event.severity) >= Telemetry.rank(&least) { write(format(&event)) }10  }11}1213/// One line naming an event's severity, name, source, operation, detail, and outcome.14export fn format(event: &Telemetry.Event) -> Str {15  let operation = match event.operationKey { case Some(key) => " operation=" + key case None => "" }16  let outcome = match event.outcome { case Some(text) => " outcome=" + text case None => "" }17  let detail = describe(&event.detail)18  let measured = if detail.isEmpty() { "" } else { " " + detail }19  "[" + Telemetry.severityName(&event.severity) + "] " + event.name + " source=" + Telemetry.sourceName(&event.source) + operation + measured + outcome20}2122/// The measurements an event carries, as `name=value` pairs.23fn describe(detail: &Telemetry.Detail) -> Str {24  match detail {25    case Telemetry.Executing => ""26    case Telemetry.Executed(duration) => "duration=" + show(duration)27    case Telemetry.Attempted(number, duration, handled) => "attempt=" + show(number) + " duration=" + show(duration) + " handled=" + show(handled)28    case Telemetry.Retrying(number, delay) => "attempt=" + show(number) + " delay=" + show(delay)29    case Telemetry.Opened(duration, manual) => "break=" + show(duration) + " manual=" + show(manual)30    case Telemetry.Closed(manual) => "manual=" + show(manual)31    case Telemetry.HalfOpened => ""32    case Telemetry.FellBack => ""33    case Telemetry.Hedged(number) => "attempt=" + show(number)34    case Telemetry.TimeoutElapsed(timeout) => "timeout=" + show(timeout)35    case Telemetry.Rejected(Some(after)) => "retryAfter=" + show(after)36    case Telemetry.Rejected(None) => ""37    case Telemetry.FaultInjected => ""38    case Telemetry.OutcomeInjected => ""39    case Telemetry.LatencyInjected(latency) => "latency=" + show(latency)40    case Telemetry.BehaviorInjected => ""41  }42}43