From 9ba17197958479091e185b19128d5233dc398478 Mon Sep 17 00:00:00 2001 From: Corentin Leruth Date: Sat, 26 Aug 2023 07:06:51 +0200 Subject: [PATCH 01/12] use named signals --- src/client-ocurl/opentelemetry_client_ocurl.ml | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/client-ocurl/opentelemetry_client_ocurl.ml b/src/client-ocurl/opentelemetry_client_ocurl.ml index e0d6a596..69534fce 100644 --- a/src/client-ocurl/opentelemetry_client_ocurl.ml +++ b/src/client-ocurl/opentelemetry_client_ocurl.ml @@ -66,8 +66,17 @@ end (** start a thread in the background, running [f()] *) let start_bg_thread (f : unit -> unit) : Thread.t = let run () = - (* block some signals: USR1 USR2 TERM PIPE ALARM STOP, see [$ kill -L] *) - ignore (Thread.sigmask Unix.SIG_BLOCK [ 10; 12; 13; 14; 15; 19 ] : _ list); + let signals = + [ + Sys.sigusr1; + Sys.sigusr2; + Sys.sigterm; + Sys.sigpipe; + Sys.sigalrm; + Sys.sigstop; + ] + in + ignore (Thread.sigmask Unix.SIG_BLOCK signals : _ list); f () in Thread.create run () From e2af52ebb0311e34988fb26ffeb3da6cefea63d7 Mon Sep 17 00:00:00 2001 From: Simon Cruanes Date: Wed, 30 Aug 2023 15:33:37 -0400 Subject: [PATCH 02/12] shorter name for the instrumentation library this name is encoded a lot (in most batches) and can visually clutter visualisation of spans. --- src/opentelemetry.ml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/opentelemetry.ml b/src/opentelemetry.ml index 38dc60e4..411b1e20 100644 --- a/src/opentelemetry.ml +++ b/src/opentelemetry.ml @@ -408,7 +408,7 @@ module Globals = struct let service_instance_id = ref None let instrumentation_library = - default_instrumentation_scope ~version:"0.2" ~name:"ocaml-opentelemetry" () + default_instrumentation_scope ~version:"0.2" ~name:"ocaml-otel" () (** Global attributes, initially set via OTEL_RESOURCE_ATTRIBUTES and modifiable From 883d4bb80601fddd77a608888a952cb2b9f006a1 Mon Sep 17 00:00:00 2001 From: Corentin Leruth Date: Sat, 26 Aug 2023 07:45:27 +0200 Subject: [PATCH 03/12] remove trailing slash from url --- src/client-cohttp-lwt/opentelemetry_client_cohttp_lwt.ml | 9 ++++++++- src/client-ocurl/opentelemetry_client_ocurl.ml | 9 ++++++++- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/src/client-cohttp-lwt/opentelemetry_client_cohttp_lwt.ml b/src/client-cohttp-lwt/opentelemetry_client_cohttp_lwt.ml index 2320197c..9241e9c1 100644 --- a/src/client-cohttp-lwt/opentelemetry_client_cohttp_lwt.ml +++ b/src/client-cohttp-lwt/opentelemetry_client_cohttp_lwt.ml @@ -93,7 +93,14 @@ end = struct (* send the content to the remote endpoint/path *) let send (_self : t) ~(config : Config.t) ~path ~decode (bod : string) : ('a, error) result Lwt.t = - let full_url = config.url ^ path in + let url = + let url = config.url in + if String.ends_with url ~suffix:"/" then + String.sub url 0 (String.length url - 1) + else + url + in + let full_url = url ^ path in let uri = Uri.of_string full_url in let open Cohttp in diff --git a/src/client-ocurl/opentelemetry_client_ocurl.ml b/src/client-ocurl/opentelemetry_client_ocurl.ml index 69534fce..f8c08e4c 100644 --- a/src/client-ocurl/opentelemetry_client_ocurl.ml +++ b/src/client-ocurl/opentelemetry_client_ocurl.ml @@ -123,7 +123,14 @@ end = struct Pbrt.Encoder.reset encoder; encode x encoder; let data = Pbrt.Encoder.to_string encoder in - let url = config.Config.url ^ path in + let url = + let url = config.Config.url in + if String.ends_with url ~suffix:"/" then + String.sub url 0 (String.length url - 1) + else + url + in + let url = url ^ path in if !debug_ || config.debug then Printf.eprintf "opentelemetry: send http POST to %s (%dB)\n%!" url (String.length data); From 063c0469335a19b3bf0335bda7586716e05ca029 Mon Sep 17 00:00:00 2001 From: Simon Cruanes Date: Thu, 31 Aug 2023 23:28:15 -0400 Subject: [PATCH 04/12] remove use of String.ends_with for compat with 4.08 --- src/client-cohttp-lwt/opentelemetry_client_cohttp_lwt.ml | 5 ++--- src/client-ocurl/opentelemetry_client_ocurl.ml | 2 +- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/src/client-cohttp-lwt/opentelemetry_client_cohttp_lwt.ml b/src/client-cohttp-lwt/opentelemetry_client_cohttp_lwt.ml index 9241e9c1..8e617852 100644 --- a/src/client-cohttp-lwt/opentelemetry_client_cohttp_lwt.ml +++ b/src/client-cohttp-lwt/opentelemetry_client_cohttp_lwt.ml @@ -95,7 +95,7 @@ end = struct ('a, error) result Lwt.t = let url = let url = config.url in - if String.ends_with url ~suffix:"/" then + if url <> "" && String.get url (String.length url - 1) = '/' then String.sub url 0 (String.length url - 1) else url @@ -115,8 +115,7 @@ end = struct try%lwt let+ r = Httpc.post ~headers ~body uri in Ok r - with e -> - Lwt.return @@ Error e + with e -> Lwt.return @@ Error e in match r with | Error e -> diff --git a/src/client-ocurl/opentelemetry_client_ocurl.ml b/src/client-ocurl/opentelemetry_client_ocurl.ml index f8c08e4c..2ad599f1 100644 --- a/src/client-ocurl/opentelemetry_client_ocurl.ml +++ b/src/client-ocurl/opentelemetry_client_ocurl.ml @@ -125,7 +125,7 @@ end = struct let data = Pbrt.Encoder.to_string encoder in let url = let url = config.Config.url in - if String.ends_with url ~suffix:"/" then + if url <> "" && String.get url (String.length url - 1) = '/' then String.sub url 0 (String.length url - 1) else url From c915730833b974dd0b6742d7fad8a788afd0502e Mon Sep 17 00:00:00 2001 From: Simon Cruanes Date: Thu, 31 Aug 2023 23:31:52 -0400 Subject: [PATCH 05/12] CI: run on 5.0; run on every branch push --- .github/workflows/main.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index aebd8efa..ff924cff 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -3,8 +3,6 @@ name: build on: pull_request: push: - branches: - - master jobs: build: @@ -18,6 +16,7 @@ jobs: ocaml-compiler: - 4.08.x - 4.13.x + - 5.0.x runs-on: ${{ matrix.os }} From 4af7b9bd9a4fe010f7dbd20e8f9d0ad61479fc48 Mon Sep 17 00:00:00 2001 From: Simon Cruanes Date: Wed, 6 Sep 2023 23:27:31 -0400 Subject: [PATCH 06/12] chore: migrate to OTEL proto files 1.0 --- vendor/opentelemetry-proto | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vendor/opentelemetry-proto b/vendor/opentelemetry-proto index 6459e1aa..c4dfbc51 160000 --- a/vendor/opentelemetry-proto +++ b/vendor/opentelemetry-proto @@ -1 +1 @@ -Subproject commit 6459e1aae1c22e273ac92be86016f0ae55a2430a +Subproject commit c4dfbc51f3cd4089778555a2ac5d9bc093ed2956 From b67ecfdda7f6619f868e33d41b72fc90ad1e10be Mon Sep 17 00:00:00 2001 From: Simon Cruanes Date: Wed, 6 Sep 2023 23:34:58 -0400 Subject: [PATCH 07/12] opentelemetry: in Trace, change default span kind --- src/opentelemetry.ml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/opentelemetry.ml b/src/opentelemetry.ml index 411b1e20..9f5690f7 100644 --- a/src/opentelemetry.ml +++ b/src/opentelemetry.ml @@ -436,10 +436,11 @@ module Globals = struct List.rev_append (List.filter not_redundant !global_attributes) into (** Default span kind in {!Span.create}. - This will be used in all spans that do not specify [~kind] explicitly. + This will be used in all spans that do not specify [~kind] explicitly; + it is set to "internal", following directions from the [.proto] file. It can be convenient to set "client" or "server" uniformly in here. @since 0.4 *) - let default_span_kind = ref Proto.Trace.Span_kind_unspecified + let default_span_kind = ref Proto.Trace.Span_kind_internal let mk_attributes ?(service_name = !service_name) ?(attrs = []) () : _ list = let l = List.map _conv_key_value attrs in From e40c999b0639e4563165c17a472b8cef14c56546 Mon Sep 17 00:00:00 2001 From: Simon Cruanes Date: Wed, 6 Sep 2023 23:35:15 -0400 Subject: [PATCH 08/12] update generated code --- Makefile | 2 +- src/dune | 18 +++++++++--------- src/logs_pb.ml | 8 ++++---- src/logs_pp.ml | 4 ++-- src/logs_types.ml | 6 +++--- src/logs_types.mli | 4 ++-- src/metrics_pb.ml | 18 ++++++++++++++---- src/metrics_pp.ml | 5 +++-- src/metrics_types.ml | 9 ++++++--- src/metrics_types.mli | 6 ++++-- src/opentelemetry.ml | 4 ++-- 11 files changed, 50 insertions(+), 34 deletions(-) diff --git a/Makefile b/Makefile index 811e33c0..fdb7b173 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,5 @@ -OPTS=--profile=release +OPTS="--profile=release --ignore-promoted-rules" all: @dune build @all $(OPTS) diff --git a/src/dune b/src/dune index ea4b4070..268cf4cb 100644 --- a/src/dune +++ b/src/dune @@ -9,7 +9,7 @@ (rule (alias lint) - (mode fallback) + (mode promote) (targets status_types.ml status_types.mli status_pb.ml status_pb.mli status_pp.ml status_pp.mli) (deps @@ -20,7 +20,7 @@ (rule (alias lint) - (mode fallback) + (mode promote) (targets common_types.ml common_types.mli common_pb.ml common_pb.mli common_pp.ml common_pp.mli) (deps @@ -33,7 +33,7 @@ (rule (alias lint) - (mode fallback) + (mode promote) (targets resource_types.ml resource_types.mli resource_pb.ml resource_pb.mli resource_pp.ml resource_pp.mli) (deps @@ -46,7 +46,7 @@ (rule (alias lint) - (mode fallback) + (mode promote) (targets trace_types.ml trace_types.mli trace_pb.ml trace_pb.mli trace_pp.ml trace_pp.mli) (deps @@ -59,7 +59,7 @@ (rule (alias lint) - (mode fallback) + (mode promote) (targets metrics_types.ml metrics_types.mli metrics_pb.ml metrics_pb.mli metrics_pp.ml metrics_pp.mli) (deps @@ -72,7 +72,7 @@ (rule (alias lint) - (mode fallback) + (mode promote) (targets logs_types.ml logs_types.mli logs_pb.ml logs_pb.mli logs_pp.ml logs_pp.mli) (deps @@ -85,7 +85,7 @@ (rule (alias lint) - (mode fallback) + (mode promote) (targets metrics_service_types.ml metrics_service_types.mli metrics_service_pp.ml metrics_service_pp.mli metrics_service_pb.ml metrics_service_pb.mli) @@ -99,7 +99,7 @@ (rule (alias lint) - (mode fallback) + (mode promote) (targets trace_service_types.ml trace_service_types.mli trace_service_pp.ml trace_service_pp.mli trace_service_pb.ml trace_service_pb.mli) (deps @@ -112,7 +112,7 @@ (rule (alias lint) - (mode fallback) + (mode promote) (targets logs_service_types.ml logs_service_types.mli logs_service_pp.ml logs_service_pp.mli logs_service_pb.ml logs_service_pb.mli) (deps diff --git a/src/logs_pb.ml b/src/logs_pb.ml index b604b0d9..2ad391c5 100644 --- a/src/logs_pb.ml +++ b/src/logs_pb.ml @@ -244,8 +244,8 @@ let rec decode_logs_data d = let rec decode_log_record_flags d = match Pbrt.Decoder.int_as_varint d with - | 0 -> (Logs_types.Log_record_flag_unspecified:Logs_types.log_record_flags) - | 255 -> (Logs_types.Log_record_flag_trace_flags_mask:Logs_types.log_record_flags) + | 0 -> (Logs_types.Log_record_flags_do_not_use:Logs_types.log_record_flags) + | 255 -> (Logs_types.Log_record_flags_trace_flags_mask:Logs_types.log_record_flags) | _ -> Pbrt.Decoder.malformed_variant "log_record_flags" let rec encode_severity_number (v:Logs_types.severity_number) encoder = @@ -344,5 +344,5 @@ let rec encode_logs_data (v:Logs_types.logs_data) encoder = let rec encode_log_record_flags (v:Logs_types.log_record_flags) encoder = match v with - | Logs_types.Log_record_flag_unspecified -> Pbrt.Encoder.int_as_varint (0) encoder - | Logs_types.Log_record_flag_trace_flags_mask -> Pbrt.Encoder.int_as_varint 255 encoder + | Logs_types.Log_record_flags_do_not_use -> Pbrt.Encoder.int_as_varint (0) encoder + | Logs_types.Log_record_flags_trace_flags_mask -> Pbrt.Encoder.int_as_varint 255 encoder diff --git a/src/logs_pp.ml b/src/logs_pp.ml index 99a084a3..408f01d9 100644 --- a/src/logs_pp.ml +++ b/src/logs_pp.ml @@ -67,5 +67,5 @@ let rec pp_logs_data fmt (v:Logs_types.logs_data) = let rec pp_log_record_flags fmt (v:Logs_types.log_record_flags) = match v with - | Logs_types.Log_record_flag_unspecified -> Format.fprintf fmt "Log_record_flag_unspecified" - | Logs_types.Log_record_flag_trace_flags_mask -> Format.fprintf fmt "Log_record_flag_trace_flags_mask" + | Logs_types.Log_record_flags_do_not_use -> Format.fprintf fmt "Log_record_flags_do_not_use" + | Logs_types.Log_record_flags_trace_flags_mask -> Format.fprintf fmt "Log_record_flags_trace_flags_mask" diff --git a/src/logs_types.ml b/src/logs_types.ml index 49c11502..4a383ff7 100644 --- a/src/logs_types.ml +++ b/src/logs_types.ml @@ -58,8 +58,8 @@ type logs_data = { } type log_record_flags = - | Log_record_flag_unspecified - | Log_record_flag_trace_flags_mask + | Log_record_flags_do_not_use + | Log_record_flags_trace_flags_mask let rec default_severity_number () = (Severity_number_unspecified:severity_number) @@ -113,4 +113,4 @@ let rec default_logs_data resource_logs; } -let rec default_log_record_flags () = (Log_record_flag_unspecified:log_record_flags) +let rec default_log_record_flags () = (Log_record_flags_do_not_use:log_record_flags) diff --git a/src/logs_types.mli b/src/logs_types.mli index ab599f1c..7a9cc1a3 100644 --- a/src/logs_types.mli +++ b/src/logs_types.mli @@ -61,8 +61,8 @@ type logs_data = { } type log_record_flags = - | Log_record_flag_unspecified - | Log_record_flag_trace_flags_mask + | Log_record_flags_do_not_use + | Log_record_flags_trace_flags_mask (** {2 Default values} *) diff --git a/src/metrics_pb.ml b/src/metrics_pb.ml index 56362ba7..d85e1e72 100644 --- a/src/metrics_pb.ml +++ b/src/metrics_pb.ml @@ -116,6 +116,7 @@ type exponential_histogram_data_point_mutable = { mutable exemplars : Metrics_types.exemplar list; mutable min : float option; mutable max : float option; + mutable zero_threshold : float; } let default_exponential_histogram_data_point_mutable () : exponential_histogram_data_point_mutable = { @@ -132,6 +133,7 @@ let default_exponential_histogram_data_point_mutable () : exponential_histogram_ exemplars = []; min = None; max = None; + zero_threshold = 0.; } type exponential_histogram_mutable = { @@ -625,6 +627,11 @@ let rec decode_exponential_histogram_data_point d = end | Some (13, pk) -> Pbrt.Decoder.unexpected_payload "Message(exponential_histogram_data_point), field(13)" pk + | Some (14, Pbrt.Bits64) -> begin + v.zero_threshold <- Pbrt.Decoder.float_as_bits64 d; + end + | Some (14, pk) -> + Pbrt.Decoder.unexpected_payload "Message(exponential_histogram_data_point), field(14)" pk | Some (_, payload_kind) -> Pbrt.Decoder.skip d payload_kind done; ({ @@ -641,6 +648,7 @@ let rec decode_exponential_histogram_data_point d = Metrics_types.exemplars = v.exemplars; Metrics_types.min = v.min; Metrics_types.max = v.max; + Metrics_types.zero_threshold = v.zero_threshold; } : Metrics_types.exponential_histogram_data_point) let rec decode_exponential_histogram d = @@ -924,8 +932,8 @@ let rec decode_metrics_data d = let rec decode_data_point_flags d = match Pbrt.Decoder.int_as_varint d with - | 0 -> (Metrics_types.Flag_none:Metrics_types.data_point_flags) - | 1 -> (Metrics_types.Flag_no_recorded_value:Metrics_types.data_point_flags) + | 0 -> (Metrics_types.Data_point_flags_do_not_use:Metrics_types.data_point_flags) + | 1 -> (Metrics_types.Data_point_flags_no_recorded_value_mask:Metrics_types.data_point_flags) | _ -> Pbrt.Decoder.malformed_variant "data_point_flags" let rec encode_exemplar_value (v:Metrics_types.exemplar_value) encoder = @@ -1138,6 +1146,8 @@ let rec encode_exponential_histogram_data_point (v:Metrics_types.exponential_his Pbrt.Encoder.float_as_bits64 x encoder; | None -> (); end; + Pbrt.Encoder.key (14, Pbrt.Bits64) encoder; + Pbrt.Encoder.float_as_bits64 v.Metrics_types.zero_threshold encoder; () let rec encode_exponential_histogram (v:Metrics_types.exponential_histogram) encoder = @@ -1268,5 +1278,5 @@ let rec encode_metrics_data (v:Metrics_types.metrics_data) encoder = let rec encode_data_point_flags (v:Metrics_types.data_point_flags) encoder = match v with - | Metrics_types.Flag_none -> Pbrt.Encoder.int_as_varint (0) encoder - | Metrics_types.Flag_no_recorded_value -> Pbrt.Encoder.int_as_varint 1 encoder + | Metrics_types.Data_point_flags_do_not_use -> Pbrt.Encoder.int_as_varint (0) encoder + | Metrics_types.Data_point_flags_no_recorded_value_mask -> Pbrt.Encoder.int_as_varint 1 encoder diff --git a/src/metrics_pp.ml b/src/metrics_pp.ml index b0bf4a25..838343ff 100644 --- a/src/metrics_pp.ml +++ b/src/metrics_pp.ml @@ -96,6 +96,7 @@ let rec pp_exponential_histogram_data_point fmt (v:Metrics_types.exponential_his Pbrt.Pp.pp_record_field ~first:false "exemplars" (Pbrt.Pp.pp_list pp_exemplar) fmt v.Metrics_types.exemplars; Pbrt.Pp.pp_record_field ~first:false "min" (Pbrt.Pp.pp_option Pbrt.Pp.pp_float) fmt v.Metrics_types.min; Pbrt.Pp.pp_record_field ~first:false "max" (Pbrt.Pp.pp_option Pbrt.Pp.pp_float) fmt v.Metrics_types.max; + Pbrt.Pp.pp_record_field ~first:false "zero_threshold" Pbrt.Pp.pp_float fmt v.Metrics_types.zero_threshold; in Pbrt.Pp.pp_brk pp_i fmt () @@ -172,5 +173,5 @@ let rec pp_metrics_data fmt (v:Metrics_types.metrics_data) = let rec pp_data_point_flags fmt (v:Metrics_types.data_point_flags) = match v with - | Metrics_types.Flag_none -> Format.fprintf fmt "Flag_none" - | Metrics_types.Flag_no_recorded_value -> Format.fprintf fmt "Flag_no_recorded_value" + | Metrics_types.Data_point_flags_do_not_use -> Format.fprintf fmt "Data_point_flags_do_not_use" + | Metrics_types.Data_point_flags_no_recorded_value_mask -> Format.fprintf fmt "Data_point_flags_no_recorded_value_mask" diff --git a/src/metrics_types.ml b/src/metrics_types.ml index bc923ef4..4cd9c09e 100644 --- a/src/metrics_types.ml +++ b/src/metrics_types.ml @@ -79,6 +79,7 @@ type exponential_histogram_data_point = { exemplars : exemplar list; min : float option; max : float option; + zero_threshold : float; } type exponential_histogram = { @@ -136,8 +137,8 @@ type metrics_data = { } type data_point_flags = - | Flag_none - | Flag_no_recorded_value + | Data_point_flags_do_not_use + | Data_point_flags_no_recorded_value_mask let rec default_exemplar_value () : exemplar_value = As_double (0.) @@ -247,6 +248,7 @@ let rec default_exponential_histogram_data_point ?exemplars:((exemplars:exemplar list) = []) ?min:((min:float option) = None) ?max:((max:float option) = None) + ?zero_threshold:((zero_threshold:float) = 0.) () : exponential_histogram_data_point = { attributes; start_time_unix_nano; @@ -261,6 +263,7 @@ let rec default_exponential_histogram_data_point exemplars; min; max; + zero_threshold; } let rec default_exponential_histogram @@ -343,4 +346,4 @@ let rec default_metrics_data resource_metrics; } -let rec default_data_point_flags () = (Flag_none:data_point_flags) +let rec default_data_point_flags () = (Data_point_flags_do_not_use:data_point_flags) diff --git a/src/metrics_types.mli b/src/metrics_types.mli index 5e045f98..8cf43dbf 100644 --- a/src/metrics_types.mli +++ b/src/metrics_types.mli @@ -82,6 +82,7 @@ type exponential_histogram_data_point = { exemplars : exemplar list; min : float option; max : float option; + zero_threshold : float; } type exponential_histogram = { @@ -139,8 +140,8 @@ type metrics_data = { } type data_point_flags = - | Flag_none - | Flag_no_recorded_value + | Data_point_flags_do_not_use + | Data_point_flags_no_recorded_value_mask (** {2 Default values} *) @@ -233,6 +234,7 @@ val default_exponential_histogram_data_point : ?exemplars:exemplar list -> ?min:float option -> ?max:float option -> + ?zero_threshold:float -> unit -> exponential_histogram_data_point (** [default_exponential_histogram_data_point ()] is the default value for type [exponential_histogram_data_point] *) diff --git a/src/opentelemetry.ml b/src/opentelemetry.ml index 9f5690f7..481746e9 100644 --- a/src/opentelemetry.ml +++ b/src/opentelemetry.ml @@ -925,8 +925,8 @@ module Logs = struct let pp_severity = Logs_pp.pp_severity_number type flags = Logs_types.log_record_flags = - | Log_record_flag_unspecified - | Log_record_flag_trace_flags_mask + | Log_record_flags_do_not_use + | Log_record_flags_trace_flags_mask let pp_flags = Logs_pp.pp_log_record_flags From a32e8638ee74b7852159ae163dc5ff2059ec1210 Mon Sep 17 00:00:00 2001 From: Simon Cruanes Date: Wed, 13 Sep 2023 14:18:57 -0400 Subject: [PATCH 09/12] chore: makefile --- Makefile | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Makefile b/Makefile index fdb7b173..d20dde92 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,6 @@ -OPTS="--profile=release --ignore-promoted-rules" +OPTS=--profile=release --ignore-promoted-rules + all: @dune build @all $(OPTS) From 329d45ee452d92b8825f812f27e00918ebcb11c4 Mon Sep 17 00:00:00 2001 From: Corentin Leruth Date: Mon, 28 Aug 2023 17:06:15 +0200 Subject: [PATCH 10/12] add get_url test with explicit config url --- tests/dune | 7 +++++-- tests/test_get_url.expected | 2 ++ tests/test_get_url.ml | 17 +++++++++++++++++ 3 files changed, 24 insertions(+), 2 deletions(-) create mode 100644 tests/test_get_url.expected create mode 100644 tests/test_get_url.ml diff --git a/tests/dune b/tests/dune index d2246b32..2d608045 100644 --- a/tests/dune +++ b/tests/dune @@ -1,3 +1,6 @@ (tests - (names test_trace_context) - (libraries opentelemetry)) + (names test_trace_context test_get_url) + (libraries + opentelemetry + opentelemetry-client-ocurl + opentelemetry-client-cohttp-lwt)) diff --git a/tests/test_get_url.expected b/tests/test_get_url.expected new file mode 100644 index 00000000..37c0d86a --- /dev/null +++ b/tests/test_get_url.expected @@ -0,0 +1,2 @@ +ocurl url = http://localhost:4318 +cohttp url = http://localhost:4318 diff --git a/tests/test_get_url.ml b/tests/test_get_url.ml new file mode 100644 index 00000000..397996d3 --- /dev/null +++ b/tests/test_get_url.ml @@ -0,0 +1,17 @@ +let url = "http://localhost:3000" + +let ocurl () = + let config = Opentelemetry_client_ocurl.Config.make ~url () in + Opentelemetry_client_ocurl.with_setup ~config () @@ fun () -> + let url = Opentelemetry_client_ocurl.get_url () in + print_endline @@ Printf.sprintf "ocurl url = %s" url + +let cohttp () = + let config = Opentelemetry_client_cohttp_lwt.Config.make ~url () in + Opentelemetry_client_cohttp_lwt.with_setup ~config () @@ fun () -> + let url = Opentelemetry_client_cohttp_lwt.get_url () in + print_endline @@ Printf.sprintf "cohttp url = %s" url + +let () = + ocurl (); + cohttp () From a62f1d891aa95c633970ef3fcfce74474538ad7c Mon Sep 17 00:00:00 2001 From: Corentin Leruth Date: Mon, 28 Aug 2023 17:07:39 +0200 Subject: [PATCH 11/12] fix get_url test to take config.url into account --- src/client-cohttp-lwt/opentelemetry_client_cohttp_lwt.ml | 3 +++ src/client-ocurl/opentelemetry_client_ocurl.ml | 2 ++ tests/test_get_url.expected | 4 ++-- 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/client-cohttp-lwt/opentelemetry_client_cohttp_lwt.ml b/src/client-cohttp-lwt/opentelemetry_client_cohttp_lwt.ml index 8e617852..e1625bd2 100644 --- a/src/client-cohttp-lwt/opentelemetry_client_cohttp_lwt.ml +++ b/src/client-cohttp-lwt/opentelemetry_client_cohttp_lwt.ml @@ -559,6 +559,9 @@ end let setup_ ?(stop = Atomic.make false) ~(config : Config.t) () = debug_ := config.debug; + + if config.url <> get_url () then set_url config.url; + let module B = Backend (struct diff --git a/src/client-ocurl/opentelemetry_client_ocurl.ml b/src/client-ocurl/opentelemetry_client_ocurl.ml index 2ad599f1..812b4f6b 100644 --- a/src/client-ocurl/opentelemetry_client_ocurl.ml +++ b/src/client-ocurl/opentelemetry_client_ocurl.ml @@ -446,6 +446,8 @@ let setup_ ?(stop = Atomic.make false) ~(config : Config.t) () = let ((module B) as backend) = mk_backend ~stop ~config () in Opentelemetry.Collector.set_backend backend; + if config.url <> get_url () then set_url config.url; + if config.ticker_thread then ( let sleep_ms = min 5_000 (max 2 config.batch_timeout_ms) in ignore (setup_ticker_thread ~stop ~sleep_ms backend () : Thread.t) diff --git a/tests/test_get_url.expected b/tests/test_get_url.expected index 37c0d86a..bafd6ea4 100644 --- a/tests/test_get_url.expected +++ b/tests/test_get_url.expected @@ -1,2 +1,2 @@ -ocurl url = http://localhost:4318 -cohttp url = http://localhost:4318 +ocurl url = http://localhost:3000 +cohttp url = http://localhost:3000 From d1c59a59bc2097e53ee6ec3aed9798c842580ee5 Mon Sep 17 00:00:00 2001 From: Simon Cruanes Date: Tue, 19 Sep 2023 10:13:36 -0400 Subject: [PATCH 12/12] fix ocurl: have ticker thread stop when work queue is closed --- src/client-ocurl/opentelemetry_client_ocurl.ml | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/client-ocurl/opentelemetry_client_ocurl.ml b/src/client-ocurl/opentelemetry_client_ocurl.ml index 812b4f6b..815db52a 100644 --- a/src/client-ocurl/opentelemetry_client_ocurl.ml +++ b/src/client-ocurl/opentelemetry_client_ocurl.ml @@ -435,10 +435,12 @@ let mk_backend ~stop ~config () : (module Collector.BACKEND) = let setup_ticker_thread ~stop ~sleep_ms (module B : Collector.BACKEND) () = let sleep_s = float sleep_ms /. 1000. in let tick_loop () = - while not @@ Atomic.get stop do - Thread.delay sleep_s; - B.tick () - done + try + while not @@ Atomic.get stop do + Thread.delay sleep_s; + B.tick () + done + with B_queue.Closed -> () in start_bg_thread tick_loop