Commit graph

100 commits

Author SHA1 Message Date
Simon Cruanes
7454134762
refactor 2026-02-24 15:41:47 -05:00
Simon Cruanes
210b7991c9
rework tracer/meter/logger interfaces
- Meter is new, and makes more sense than
Metrics_callbacks/Metrics_emitter
- Instrument in core, with some basic counters, gauges, and histograms,
+ the possibility to do one's own
2026-02-20 12:31:15 -05:00
Simon Cruanes
d5f6b564db
shortcut in clock 2026-02-20 08:55:50 -05:00
Simon Cruanes
07070e3d4a emitter: add self_metrics, track batch n_dropped, sampler rate 2026-02-17 20:59:58 -05:00
Simon Cruanes
71bb7d1996 various fixes 2026-02-17 20:59:58 -05:00
Simon Cruanes
a43587f2a6
rename hmap keys with more consistent scheme 2026-02-15 15:35:08 -05:00
Simon Cruanes
c29ac75a82
opentelemetry.trace: expose sum and hist metrics 2026-01-21 22:15:23 -05:00
Simon Cruanes
610244aad4
doc 2026-01-20 00:15:30 -05:00
Simon Cruanes
513aafe6e8
span: carry flags over to span_link 2026-01-20 00:15:29 -05:00
Simon Cruanes
942a56c879
use mutex again to protect rand_bytes state
shard over 8 distinct random generators, though.
2026-01-20 00:15:26 -05:00
Simon Cruanes
bef4bd88b2
use Clock.ptime_clock where it makes sense 2026-01-20 00:15:25 -05:00
Simon Cruanes
43cd3aa230
merge back ptime clock into Clock, make it default
we already depend on ptime in the same package and it's not a big cost.
2026-01-20 00:15:25 -05:00
Simon Cruanes
e2c4a4e680
tracer/logger/metrics_emitter now pair emitter and clock
- clock is needed because timestamps need to be provided now
- explicit types are good anyway
- have at least one helper to emit the signal with optional
tracer/logger/metrics_emitter
- easier logger with `log` and `logf`
2026-01-20 00:15:25 -05:00
Simon Cruanes
092b9a5d2e
have a clock in exporter, pass a mtime in tick 2026-01-20 00:15:25 -05:00
Simon Cruanes
57a915e880
chore: update dune files after implicit_trans_deps=false 2026-01-20 00:15:25 -05:00
Simon Cruanes
f2635cce68
move timestamp to util 2026-01-20 00:15:24 -05:00
Simon Cruanes
a3e1fcc362
add clock 2026-01-20 00:15:24 -05:00
Simon Cruanes
18226a63a4
add Span.dummy 2026-01-20 00:15:23 -05:00
Simon Cruanes
650f4c554f
fix warnings 2026-01-20 00:15:22 -05:00
Simon Cruanes
4a61ab44d9
metrics: do not add a default start_time_unix_nano 2026-01-20 00:15:22 -05:00
Simon Cruanes
239d9d5aec
feat exporter: add self_metrics 2026-01-20 00:15:21 -05:00
Simon Cruanes
6436f0e36d
utils in Any_signal_l 2026-01-20 00:15:20 -05:00
Simon Cruanes
18b653a896
add Any_signal_l; modify Exporter to use Aswitch 2026-01-20 00:15:19 -05:00
Simon Cruanes
61f17fa6ce
better exporter/emitter combinators; better cleanup (now shutdown) 2026-01-20 00:15:19 -05:00
Simon Cruanes
4f218b31ef
mor efixes 2026-01-20 00:15:14 -05:00
Simon Cruanes
d02d609cf9
feat lib: easily access the main tracer, logger, etc 2026-01-20 00:15:14 -05:00
Simon Cruanes
9453506d7b
migrate a few more things to lib/ from core/ 2026-01-20 00:15:14 -05:00
Simon Cruanes
35f8bbc67d
feat exporter: split tick/on_tick again 2026-01-20 00:15:14 -05:00
Simon Cruanes
fe0aa297a6
perf: optimize {Trace,Span}_id.is_zero 2026-01-20 00:15:14 -05:00
Simon Cruanes
98cf8fbdbc
fix warning 2026-01-20 00:15:13 -05:00
Simon Cruanes
1ee298a1a3
feat core: add Any_signal.t; make Exporter a record of emitters 2026-01-20 00:15:13 -05:00
Simon Cruanes
5aec2c99b8
fix rand_bytes: init at least the local domain's Rand state 2026-01-20 00:15:12 -05:00
Simon Cruanes
b8228dfe25
split core library into opentelemetry.core and opentelemetry 2026-01-20 00:15:12 -05:00
Simon Cruanes
959cf724fd
refactor core 2026-01-20 00:15:11 -05:00
Simon Cruanes
6ccf554645
feat span: ambient span 2026-01-20 00:15:11 -05:00
Simon Cruanes
bd335ecadd
refator core OTEL: remove Scope, directly use Span as builder
now that fields are mutable, it's cheaper and easier
2026-01-20 00:15:11 -05:00
Simon Cruanes
6b6fb34342
feat OTEL: move some stuff to client or util; rate limit GC metrics 2026-01-20 00:15:10 -05:00
Simon Cruanes
841d58ab67
large refactor: split core library into many modules; change API design
follow more closely the official OTEL recommendations, and also try
to reduce global state.

- use a class type for `Exporter.t` (instead of 1st class module `backend`)
- have tracer, logger, metrics_emitter as explicit objects
- keep a `Main_exporter` to make migration easier, but discouraged
- add stdout_exporter and debug_exporter to opentelemetry.client
2026-01-20 00:15:09 -05:00
Simon Cruanes
d4b44244d7
update generated code again, repeated fields are optional again 2025-12-01 20:32:05 -05:00
Simon Cruanes
41d8b0c1a4
fix 2025-12-01 20:32:04 -05:00
Simon Cruanes
a35ea4c646
fixes 2025-12-01 20:32:03 -05:00
Simon Cruanes
e31f5f6aba
refactor: move the Mutex.protect backport into Util_mutex 2025-11-19 12:20:13 -05:00
ajbt200128
3fbac32822 fix: mutex usage and inline bugs 2025-11-12 14:27:36 -08:00
Corentin Leruth
950d5922a1 add correct release version in comment 2025-11-08 12:49:52 +01:00
Simon Cruanes
fa610ed535
Update src/core/opentelemetry.ml 2025-09-02 15:08:22 -04:00
Shon Feder
54b62af1a2
Check for on_click registration exactly once 2025-09-02 15:00:11 -04:00
Shon Feder
93803581b7
fix: make metric callbacks atomic
The use of a non-threadsafe mutable reference for the metrics callbacks
was resulting in a race condition that would sometimes produce
non-deterministic results in the integration tests.

This has not affected the lwt-based collector, because of the single
threaded concurrency Lwt enforces, but it began to show up in the WIP
Eio rewrite, for which I am testing on cross-domain programs.

I suspect this may have also bee affecting the ocurl collector, but we
don't have integration test running on that yet.
2025-09-02 14:41:26 -04:00
ajbt200128
46d1289d95 fix: opentelemetry exception attr spec
this brings the exception attributes in line with the spec
https://opentelemetry.io/docs/specs/semconv/exceptions/exceptions-spans/.
It seems we were missing the preceding `exception.`.
2025-07-23 09:01:52 -05:00
Simon Cruanes
4ee29d8504 feat: add Globals.service_version 2025-06-23 09:32:59 -04:00
Shon Feder
e66476015b
Move deprecation alerts to valid location
As discussed in https://github.com/ocaml/ocaml/issues/14078,
alerts (with deprecation alerts as a special case) are not currently
supported as item-attributes on let-bindings. This usage produces
`misplaced-attribute` warnings, such as

```
Warning 53 [misplaced-attribute]: the "deprecated" attribute cannot appear in this context
File "src/core/opentelemetry.ml", line 1229, characters 37-47:
1229 |   let add_event = Scope.add_event [@@deprecated "use Scope.add_event"]
                                            ^^^^^^^^^^
Warning 53 [misplaced-attribute]: the "deprecated" attribute cannot appear in this context

File "src/core/opentelemetry.ml", line 1231, characters 37-47:
1231 |   let add_attrs = Scope.add_attrs [@@deprecated "use Scope.add_attrs"]
                                            ^^^^^^^^^^
Warning 53 [misplaced-attribute]: the "deprecated" attribute cannot appear in this context
```

Fortunately, we can still add deprecation alerts to these value by
moving the alert to the pattern, as done here.
2025-06-07 10:56:56 -04:00