opentelemetry-rust
opentelemetry-rust copied to clipboard
Unify metrics DataPoints collection
Problem
At the moment there's zero code reuse in DataPoints collection phase. Due to too much copy/paste there are few issues:
- there are inefficiencies by doing unnecessary
.clone() - I noticed at least one bug in
PrecomputedSum::deltawhereno_attribute_trackerusesget_valueinstead ofget_and_reset_value. - hard to understand the core logic of aggregator, versus implementation details of how DataPoints are collected.
- makes very hard to experiment with performance improvements in
measuringand/orcollectingphase. E.g. if I change something within ValueMap, I need to go and update at minimum 5 aggregators (if we addExpoHistogram) * 2 (delta/comulative) = 10 places. - makes very hard to review, because simple change will affect at least 10 places.
Solution
Hide implementation details of ValueMap, and provide simple collect_cumulative and collect_delta functions instead (similar idea as in #2114).
In the future we'll be able to experiment and improve ValueMap implementation and get benefits across all aggregators.
Agreed. In other implementations like OTel .NET, the entire logic of keeping track of metric points, look up, etc are done in a common place (i.e not repeated for each instument type).
Related:https://github.com/open-telemetry/opentelemetry-rust/issues/1566