Source file config.ml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
open Common_

type t = {
  debug: bool;
  url_traces: string;
  url_metrics: string;
  url_logs: string;
  headers: (string * string) list;
  batch_timeout_ms: int;
  bg_threads: int;
  ticker_thread: bool;
  ticker_interval_ms: int;
  self_trace: bool;
}

let pp out self =
  let pp_header ppf (a, b) = Format.fprintf ppf "@[%s: @,%s@]@." a b in
  let ppheaders = Format.pp_print_list pp_header in
  let {
    debug;
    url_traces;
    url_metrics;
    url_logs;
    headers;
    batch_timeout_ms;
    bg_threads;
    ticker_thread;
    ticker_interval_ms;
    self_trace;
  } =
    self
  in
  Format.fprintf out
    "{@[ debug=%B;@ url_traces=%S;@ url_metrics=%S;@ url_logs=%S;@ \
     headers=%a;@ batch_timeout_ms=%d; bg_threads=%d;@ ticker_thread=%B;@ \
     ticker_interval_ms=%d;@ self_trace=%B @]}"
    debug url_traces url_metrics url_logs ppheaders headers batch_timeout_ms
    bg_threads ticker_thread ticker_interval_ms self_trace

let make ?(debug = !debug_) ?url ?url_traces ?url_metrics ?url_logs
    ?(headers = get_headers ()) ?(batch_timeout_ms = 2_000) ?(bg_threads = 4)
    ?(ticker_thread = true) ?(ticker_interval_ms = 500) ?(self_trace = false) ()
    : t =
  let bg_threads = max 1 (min bg_threads 32) in

  let url_traces, url_metrics, url_logs =
    let base_url =
      let base_url =
        match get_url_from_env () with
        | None -> Option.value url ~default:default_url
        | Some url -> remove_trailing_slash url
      in
      remove_trailing_slash base_url
    in
    let url_traces =
      match get_url_traces_from_env () with
      | None -> Option.value url_traces ~default:(base_url ^ "/v1/traces")
      | Some url -> url
    in
    let url_metrics =
      match get_url_metrics_from_env () with
      | None -> Option.value url_metrics ~default:(base_url ^ "/v1/metrics")
      | Some url -> url
    in
    let url_logs =
      match get_url_logs_from_env () with
      | None -> Option.value url_logs ~default:(base_url ^ "/v1/logs")
      | Some url -> url
    in
    url_traces, url_metrics, url_logs
  in
  {
    debug;
    url_traces;
    url_metrics;
    url_logs;
    headers;
    batch_timeout_ms;
    bg_threads;
    ticker_thread;
    ticker_interval_ms;
    self_trace;
  }