
ChaosTesting.pudu
Pudu33 lines1.4 KB
1/** @Examples.ChaosTesting.Program — injected faults exercising a retry */2module ChaosTesting34import Std.Io as Io5import PuduLangResilience.Chaos as Chaos6import PuduLangResilience.Chaos.Fault as Fault7import PuduLangResilience.Context as Context8import PuduLangResilience.Pipeline as Pipeline9import PuduLangResilience.Randomizer as Randomizer10import PuduLangResilience as Resilience11import PuduLangResilience.Retry as Retry12import PuduLangResilience.Telemetry.Log as Log13import PuduLangResilience.Telemetry as Telemetry141516fn main() -> Int {17 let settings = Pipeline.Options{..Pipeline.defaults(), name: Some("chaos-demo"), randomizer: Randomizer.seeded(7), listeners: [Log.listener(Telemetry.Warning, fn(line: Str) -> () { let _w = Io.writeLine(line) })]}18 let built = Pipeline.buildWith(&settings, [19 Retry.strategy(Retry.Options{..Retry.defaults(), maxRetryAttempts: 10, delay: 1}),20 Fault.strategy(Fault.injecting(Resilience.Raised("injected fault"), Chaos.atRate(0.5d)))21 ])22 let pipeline = match built {23 case Ok(found) => found24 case Err(invalid) => {25 let _said = Io.writeErrorLine(Pipeline.explain(&invalid))26 return 127 }28 }29 let outcome = Pipeline.execute(&pipeline, fn(_context: Context.Context) -> Resilience.Outcome[Str, Str] { Ok("done") })30 let _shown = Io.writeLine("outcome: " + Resilience.summarize(&outcome))31 if outcome == Ok("done") { 0 } else { 1 }32}33