mirror of
https://github.com/ocaml-tracing/ocaml-opentelemetry.git
synced 2026-03-09 04:17:56 -04:00
commit
7f026bb084
4 changed files with 48 additions and 10 deletions
6
.github/workflows/main.yml
vendored
6
.github/workflows/main.yml
vendored
|
|
@ -49,6 +49,12 @@ jobs:
|
||||||
|
|
||||||
- run: opam exec -- dune build @install -p opentelemetry,opentelemetry-lwt,opentelemetry-client-ocurl,opentelemetry-cohttp-lwt,opentelemetry-client-cohttp-lwt
|
- run: opam exec -- dune build @install -p opentelemetry,opentelemetry-lwt,opentelemetry-client-ocurl,opentelemetry-cohttp-lwt,opentelemetry-client-cohttp-lwt
|
||||||
|
|
||||||
|
- run: opam install trace.0.4
|
||||||
|
- run: opam exec -- dune build @install -p opentelemetry
|
||||||
|
|
||||||
|
- run: opam install trace.0.6
|
||||||
|
- run: opam exec -- dune build @install -p opentelemetry
|
||||||
|
|
||||||
- run: opam install ocaml-protoc
|
- run: opam install ocaml-protoc
|
||||||
- run: opam exec -- dune build @lint
|
- run: opam exec -- dune build @lint
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -429,7 +429,8 @@ module Globals = struct
|
||||||
let service_instance_id = ref None
|
let service_instance_id = ref None
|
||||||
|
|
||||||
let instrumentation_library =
|
let instrumentation_library =
|
||||||
default_instrumentation_scope ~version:"0.2" ~name:"ocaml-otel" ()
|
default_instrumentation_scope ~version:"%%VERSION_NUM%%" ~name:"ocaml-otel"
|
||||||
|
()
|
||||||
|
|
||||||
(** Global attributes, initially set
|
(** Global attributes, initially set
|
||||||
via OTEL_RESOURCE_ATTRIBUTES and modifiable
|
via OTEL_RESOURCE_ATTRIBUTES and modifiable
|
||||||
|
|
@ -780,7 +781,13 @@ module Trace = struct
|
||||||
let status =
|
let status =
|
||||||
match res with
|
match res with
|
||||||
| Ok () -> default_status ~code:Status_code_ok ()
|
| Ok () -> default_status ~code:Status_code_ok ()
|
||||||
| Error e -> default_status ~code:Status_code_error ~message:e ()
|
| Error (e, bt) ->
|
||||||
|
(* add backtrace *)
|
||||||
|
add_event scope (fun () ->
|
||||||
|
Event.make "error"
|
||||||
|
~attrs:
|
||||||
|
[ "backtrace", `String (Printexc.raw_backtrace_to_string bt) ]);
|
||||||
|
default_status ~code:Status_code_error ~message:e ()
|
||||||
in
|
in
|
||||||
let span, _ =
|
let span, _ =
|
||||||
(* TODO: should the attrs passed to with_ go on the Span
|
(* TODO: should the attrs passed to with_ go on the Span
|
||||||
|
|
@ -827,7 +834,8 @@ module Trace = struct
|
||||||
finally (Ok ());
|
finally (Ok ());
|
||||||
rv
|
rv
|
||||||
with e ->
|
with e ->
|
||||||
finally (Error (Printexc.to_string e));
|
let bt = Printexc.get_raw_backtrace () in
|
||||||
|
finally (Error (Printexc.to_string e, bt));
|
||||||
raise e
|
raise e
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -28,7 +28,8 @@ module Trace = struct
|
||||||
let () = finally (Ok ()) in
|
let () = finally (Ok ()) in
|
||||||
Lwt.return rv
|
Lwt.return rv
|
||||||
with e ->
|
with e ->
|
||||||
let () = finally (Error (Printexc.to_string e)) in
|
let bt = Printexc.get_raw_backtrace () in
|
||||||
|
let () = finally (Error (Printexc.to_string e, bt)) in
|
||||||
Lwt.fail e
|
Lwt.fail e
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -130,7 +130,7 @@ module Internal = struct
|
||||||
|
|
||||||
otrace_id, sb
|
otrace_id, sb
|
||||||
|
|
||||||
let exit_span' otrace_id
|
let exit_span_
|
||||||
{
|
{
|
||||||
id = otel_id;
|
id = otel_id;
|
||||||
start_time;
|
start_time;
|
||||||
|
|
@ -145,11 +145,7 @@ module Internal = struct
|
||||||
parent_scope = _;
|
parent_scope = _;
|
||||||
} =
|
} =
|
||||||
let open Otel in
|
let open Otel in
|
||||||
let active_spans = Active_spans.get () in
|
|
||||||
Active_span_tbl.remove active_spans.tbl otrace_id;
|
|
||||||
|
|
||||||
let end_time = Timestamp_ns.now_unix_ns () in
|
let end_time = Timestamp_ns.now_unix_ns () in
|
||||||
|
|
||||||
let kind, attrs = otel_attrs_of_otrace_data data in
|
let kind, attrs = otel_attrs_of_otrace_data data in
|
||||||
|
|
||||||
let attrs =
|
let attrs =
|
||||||
|
|
@ -176,6 +172,19 @@ module Internal = struct
|
||||||
~end_time ~attrs name
|
~end_time ~attrs name
|
||||||
|> fst
|
|> fst
|
||||||
|
|
||||||
|
let exit_span' otrace_id otel_span_begin =
|
||||||
|
let active_spans = Active_spans.get () in
|
||||||
|
Active_span_tbl.remove active_spans.tbl otrace_id;
|
||||||
|
exit_span_ otel_span_begin
|
||||||
|
|
||||||
|
let exit_span_from_id otrace_id =
|
||||||
|
let active_spans = Active_spans.get () in
|
||||||
|
match Active_span_tbl.find_opt active_spans.tbl otrace_id with
|
||||||
|
| None -> None
|
||||||
|
| Some otel_span_begin ->
|
||||||
|
Active_span_tbl.remove active_spans.tbl otrace_id;
|
||||||
|
Some (exit_span_ otel_span_begin)
|
||||||
|
|
||||||
module M = struct
|
module M = struct
|
||||||
let with_span ~__FUNCTION__ ~__FILE__ ~__LINE__ ~data name cb =
|
let with_span ~__FUNCTION__ ~__FILE__ ~__LINE__ ~data name cb =
|
||||||
let otrace_id, sb =
|
let otrace_id, sb =
|
||||||
|
|
@ -187,9 +196,23 @@ module Internal = struct
|
||||||
|
|
||||||
let otel_span = exit_span' otrace_id sb in
|
let otel_span = exit_span' otrace_id sb in
|
||||||
Otel.Trace.emit [ otel_span ];
|
Otel.Trace.emit [ otel_span ];
|
||||||
|
|
||||||
rv
|
rv
|
||||||
|
|
||||||
|
let enter_span ~__FUNCTION__ ~__FILE__ ~__LINE__ ~data name :
|
||||||
|
Trace_core.span =
|
||||||
|
let otrace_id, _sb =
|
||||||
|
enter_span' ~__FUNCTION__ ~__FILE__ ~__LINE__ ~data name
|
||||||
|
in
|
||||||
|
(* NOTE: we cannot enter ambient scope in a disjoint way
|
||||||
|
with the exit, because we only have [Ambient_context.with_binding],
|
||||||
|
no [set_binding] *)
|
||||||
|
otrace_id
|
||||||
|
|
||||||
|
let exit_span otrace_id =
|
||||||
|
match exit_span_from_id otrace_id with
|
||||||
|
| None -> ()
|
||||||
|
| Some otel_span -> Otel.Trace.emit [ otel_span ]
|
||||||
|
|
||||||
let enter_manual_span ~(parent : Otrace.explicit_span option) ~flavor:_
|
let enter_manual_span ~(parent : Otrace.explicit_span option) ~flavor:_
|
||||||
~__FUNCTION__ ~__FILE__ ~__LINE__ ~data name : Otrace.explicit_span =
|
~__FUNCTION__ ~__FILE__ ~__LINE__ ~data name : Otrace.explicit_span =
|
||||||
let otrace_id, sb =
|
let otrace_id, sb =
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue