generation.bend
bend-trace-context@0.2.0.0 · 107 lines · 11 definitions
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23import Base
24import bend-trace-context@0.2.0.0/trace_context.bend as TC
25import bend-trace-context@0.2.0.0/native_http.bend as Adapter
26import bend-trace-context@0.2.0.0/entropy.bend as Entropy
27
28
29
30def Source.host(state: Unit) -> IO(Unit & Result<&1, &1, U32 & String, U32>):
31 IO.bind(Result<&1, &1, U32 & String, U32>, Unit & Result<&1, &1, U32 & String, U32>,
32 Entropy.read_u32(), word => IO.pure(Unit & Result<&1, &1, U32 & String, U32>, (state, word)))
33
34
35def on_host(-A: Type, action: IO(Unit & A)) -> IO(A):
36 IO.bind(Unit & A, A, action, done => IO.pure(A, Pair.snd(Unit, A, done)))
37
38
39
40
41def TraceId.generate(excluded: Maybe<&2, TC.TraceId>) -> IO(Result<&2, &2, TC.GenerationError, TC.TraceId>):
42 on_host(Result<&2, &2, TC.GenerationError, TC.TraceId>,
43 TC.TraceId.generate_with(~Unit, ~Source.host, Unit{}, excluded))
44
45
46
47
48def SpanId.generate(excluded: Maybe<&2, TC.SpanId>) -> IO(Result<&2, &2, TC.GenerationError, TC.SpanId>):
49 on_host(Result<&2, &2, TC.GenerationError, TC.SpanId>,
50 TC.SpanId.generate_with(~Unit, ~Source.host, Unit{}, excluded))
51
52
53
54
55
56
57def Context.root(sampled: Bool) -> IO(Result<&2, &2, TC.GenerationError, TC.LocalContext>):
58 on_host(Result<&2, &2, TC.GenerationError, TC.LocalContext>,
59 TC.Context.root_with(~Unit, ~Source.host, Unit{}, sampled))
60
61
62def Context.child(parent: TC.Parent, sampling: TC.Sampling) -> IO(Result<&2, &2, TC.GenerationError, TC.LocalContext>):
63 on_host(Result<&2, &2, TC.GenerationError, TC.LocalContext>,
64 TC.Context.child_with(~Unit, ~Source.host, Unit{}, parent, sampling))
65
66
67
68def Context.restart(previous: TC.RemoteContext, sampled: Bool) ->
69 IO(Result<&2, &2, TC.GenerationError, TC.LocalContext>):
70 on_host(Result<&2, &2, TC.GenerationError, TC.LocalContext>,
71 TC.Context.restart_with(~Unit, ~Source.host, Unit{}, previous, sampled))
72
73
74
75
76
77def Context.continue_or_start(+extraction: TC.Extraction, reception: TC.Reception, sampling: TC.Sampling,
78 +policy: TC.FailurePolicy) -> IO(TC.FailurePolicy.result(policy, TC.Service)):
79 on_host(TC.FailurePolicy.result(policy, TC.Service),
80 TC.Context.continue_or_start_with(~Unit, ~Source.host, Unit{}, extraction, reception, sampling, policy))
81
82
83
84
85def Context.send(+limits: TC.Limits, service: TC.Service, sampling: TC.Sampling, +policy: TC.FailurePolicy,
86 +carrier: List<&2, TC.Header>) -> IO(TC.FailurePolicy.result(policy, TC.Sent)):
87 on_host(TC.FailurePolicy.result(policy, TC.Sent),
88 TC.Context.send_with(~Unit, ~Source.host, Unit{}, limits, service, sampling, policy, carrier))
89
90
91
92
93
94def NativeHttp.continue_or_start(+limits: TC.Limits, headers: Adapter.HeaderMap(), base: Maybe<&2, TC.BaseContext>,
95 reception: TC.Reception, sampling: TC.Sampling, +policy: TC.FailurePolicy) ->
96 IO(TC.FailurePolicy.result(policy, TC.Service)):
97 on_host(TC.FailurePolicy.result(policy, TC.Service),
98 Adapter.continue_or_start_with(~Unit, ~Source.host, Unit{}, limits, headers, base, reception, sampling, policy))
99
100
101
102
103
104def NativeHttp.send(+limits: TC.Limits, service: TC.Service, sampling: TC.Sampling, +policy: TC.FailurePolicy,
105 headers: Adapter.HeaderMap()) -> IO(TC.FailurePolicy.result(policy, Adapter.Outbound)):
106 on_host(TC.FailurePolicy.result(policy, Adapter.Outbound),
107 Adapter.send_with(~Unit, ~Source.host, Unit{}, limits, service, sampling, policy, headers))