mirror of
https://github.com/ocaml-tracing/ocaml-opentelemetry.git
synced 2026-03-09 12:23:32 -04:00
eio local storage
This commit is contained in:
parent
1bcea95ed9
commit
a9971e4d41
5 changed files with 49 additions and 43 deletions
|
|
@ -1,37 +0,0 @@
|
||||||
module TLS = Ambient_context_thread_local.Thread_local
|
|
||||||
module Hmap = Ambient_context.Hmap
|
|
||||||
module Fiber = Eio.Fiber
|
|
||||||
|
|
||||||
let _internal_key : Hmap.t Fiber.key = Fiber.create_key ()
|
|
||||||
let ( let* ) = Option.bind
|
|
||||||
|
|
||||||
module M = struct
|
|
||||||
let name = "Storage_eio"
|
|
||||||
let[@inline] get_map () = Fiber.get _internal_key
|
|
||||||
let[@inline] with_map m cb = Fiber.with_binding _internal_key m cb
|
|
||||||
let create_key = Hmap.Key.create
|
|
||||||
|
|
||||||
let get k =
|
|
||||||
let* context = get_map () in
|
|
||||||
Hmap.find k context
|
|
||||||
|
|
||||||
|
|
||||||
let with_binding k v cb =
|
|
||||||
let new_context =
|
|
||||||
match get_map () with
|
|
||||||
| None -> Hmap.singleton k v
|
|
||||||
| Some old_context -> Hmap.add k v old_context
|
|
||||||
in
|
|
||||||
with_map new_context cb
|
|
||||||
|
|
||||||
|
|
||||||
let without_binding k cb =
|
|
||||||
let new_context =
|
|
||||||
match get_map () with
|
|
||||||
| None -> Hmap.empty
|
|
||||||
| Some old_context -> Hmap.rem k old_context
|
|
||||||
in
|
|
||||||
with_map new_context cb
|
|
||||||
end
|
|
||||||
|
|
||||||
let storage () : Ambient_context.storage = (module M)
|
|
||||||
7
src/ambient-context/eio/dune
Normal file
7
src/ambient-context/eio/dune
Normal file
|
|
@ -0,0 +1,7 @@
|
||||||
|
(library
|
||||||
|
(name opentelemetry_ambient_context_eio)
|
||||||
|
(public_name opentelemetry.ambient-context.eio)
|
||||||
|
(synopsis
|
||||||
|
"Storage backend for ambient-context using Eio's fibre-local storage")
|
||||||
|
(optional) ; eio
|
||||||
|
(libraries eio hmap opentelemetry.ambient-context thread-local-storage))
|
||||||
|
|
@ -1,6 +0,0 @@
|
||||||
(library
|
|
||||||
(name ambient_context_eio)
|
|
||||||
(synopsis
|
|
||||||
"Storage backend for ambient-context using Eio's fibre-local storage")
|
|
||||||
(public_name ambient-context-eio)
|
|
||||||
(libraries eio ambient-context ambient-context.thread_local))
|
|
||||||
40
src/ambient-context/eio/opentelemetry_ambient_context_eio.ml
Normal file
40
src/ambient-context/eio/opentelemetry_ambient_context_eio.ml
Normal file
|
|
@ -0,0 +1,40 @@
|
||||||
|
module TLS = Thread_local_storage
|
||||||
|
module Fiber = Eio.Fiber
|
||||||
|
|
||||||
|
open struct
|
||||||
|
let _internal_key : Hmap.t Fiber.key = Fiber.create_key ()
|
||||||
|
|
||||||
|
let ( let* ) = Option.bind
|
||||||
|
end
|
||||||
|
|
||||||
|
module M = struct
|
||||||
|
let name = "Storage_eio"
|
||||||
|
|
||||||
|
let[@inline] get_map () = Fiber.get _internal_key
|
||||||
|
|
||||||
|
let[@inline] with_map m cb = Fiber.with_binding _internal_key m cb
|
||||||
|
|
||||||
|
let create_key = Hmap.Key.create
|
||||||
|
|
||||||
|
let get k =
|
||||||
|
let* context = get_map () in
|
||||||
|
Hmap.find k context
|
||||||
|
|
||||||
|
let with_binding k v cb =
|
||||||
|
let new_context =
|
||||||
|
match get_map () with
|
||||||
|
| None -> Hmap.singleton k v
|
||||||
|
| Some old_context -> Hmap.add k v old_context
|
||||||
|
in
|
||||||
|
with_map new_context cb
|
||||||
|
|
||||||
|
let without_binding k cb =
|
||||||
|
let new_context =
|
||||||
|
match get_map () with
|
||||||
|
| None -> Hmap.empty
|
||||||
|
| Some old_context -> Hmap.rem k old_context
|
||||||
|
in
|
||||||
|
with_map new_context cb
|
||||||
|
end
|
||||||
|
|
||||||
|
let storage () : Opentelemetry_ambient_context.storage = (module M)
|
||||||
|
|
@ -0,0 +1,2 @@
|
||||||
|
val storage : unit -> Opentelemetry_ambient_context.storage
|
||||||
|
(** Storage using Eio's fibers local storage *)
|
||||||
Loading…
Add table
Reference in a new issue