Skip to content

Commit

Permalink
wip
Browse files Browse the repository at this point in the history
  • Loading branch information
c-cube committed Sep 6, 2024
1 parent e8ed971 commit faa0808
Show file tree
Hide file tree
Showing 7 changed files with 89 additions and 2 deletions.
3 changes: 2 additions & 1 deletion dune-project
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,8 @@
(>= "4.08"))
ptime
hmap
ambient-context
atomic
(thread-local-storage (and (>= 0.2) (< 0.3)))
(odoc :with-doc)
(alcotest :with-test)
(pbrt
Expand Down
37 changes: 37 additions & 0 deletions src/ambient-context/eio/ambient_context_eio.ml
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
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)
6 changes: 6 additions & 0 deletions src/ambient-context/eio/dune.tmp
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
(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))
35 changes: 35 additions & 0 deletions src/ambient-context/lwt/ambient_context_lwt.ml
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
module Hmap = Ambient_context.Hmap

let _internal_key : Hmap.t Lwt.key = Lwt.new_key ()
let ( let* ) = Option.bind

module M = struct
let name = "Storage_lwt"
let[@inline] get_map () = Lwt.get _internal_key
let[@inline] with_map m cb = Lwt.with_value _internal_key (Some 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)
6 changes: 6 additions & 0 deletions src/ambient-context/lwt/dune.tmp
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
(library
(name ambient_context_lwt)
(synopsis
"Storage backend for ambient-context using Lwt's sequence-associated storage")
(public_name ambient-context-lwt)
(libraries lwt ambient-context ambient-context.tls))
2 changes: 1 addition & 1 deletion src/core/dune
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,6 @@
(name opentelemetry)
(synopsis "API for opentelemetry instrumentation")
(flags :standard -warn-error -a+8)
(libraries opentelemetry.proto ambient-context ptime ptime.clock.os pbrt threads
(libraries opentelemetry.proto opentelemetry.ambient-context ptime ptime.clock.os pbrt threads
opentelemetry.atomic hmap)
(public_name opentelemetry))
2 changes: 2 additions & 0 deletions src/core/opentelemetry.ml
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@

open struct
let spf = Printf.sprintf

module Ambient_context = Opentelemetry_ambient_context
end

module Lock = Lock
Expand Down

0 comments on commit faa0808

Please sign in to comment.