Skip to main content

libdd_crashtracker/collector/
spans.rs

1// Copyright 2024-Present Datadog, Inc. https://www.datadoghq.com/
2// SPDX-License-Identifier: Apache-2.0
3
4use super::atomic_set::{AtomicSetError, AtomicSpanSet};
5use core::num::NonZeroU128;
6use std::io::Write;
7
8static ACTIVE_SPANS: AtomicSpanSet<2048> = AtomicSpanSet::new();
9static ACTIVE_TRACES: AtomicSpanSet<2048> = AtomicSpanSet::new();
10
11pub fn clear_spans() -> Result<(), AtomicSetError> {
12    ACTIVE_SPANS.clear()
13}
14
15#[allow(dead_code)]
16pub fn emit_spans(w: &mut impl Write) -> Result<(), AtomicSetError> {
17    use crate::shared::constants::*;
18    writeln!(w, "{DD_CRASHTRACK_BEGIN_SPAN_IDS}")?;
19    ACTIVE_SPANS.consume_and_emit(w, true)?;
20    writeln!(w, "{DD_CRASHTRACK_END_SPAN_IDS}")?;
21    w.flush()?;
22    Ok(())
23}
24
25pub fn insert_span(value: u128) -> Result<usize, AtomicSetError> {
26    let non_zero = NonZeroU128::new(value).ok_or(AtomicSetError::ZeroNotAllowed)?;
27    ACTIVE_SPANS.insert(non_zero)
28}
29
30pub fn remove_span(_value: u128, idx: usize) -> Result<(), AtomicSetError> {
31    ACTIVE_SPANS.remove(idx)
32}
33
34pub fn clear_traces() -> Result<(), AtomicSetError> {
35    ACTIVE_TRACES.clear()
36}
37
38#[allow(dead_code)]
39pub fn emit_traces(w: &mut impl Write) -> Result<(), AtomicSetError> {
40    use crate::shared::constants::*;
41    writeln!(w, "{DD_CRASHTRACK_BEGIN_TRACE_IDS}")?;
42    ACTIVE_TRACES.consume_and_emit(w, true)?;
43    writeln!(w, "{DD_CRASHTRACK_END_TRACE_IDS}")?;
44    w.flush()?;
45    Ok(())
46}
47
48pub fn insert_trace(value: u128) -> Result<usize, AtomicSetError> {
49    let non_zero = NonZeroU128::new(value).ok_or(AtomicSetError::ZeroNotAllowed)?;
50    ACTIVE_TRACES.insert(non_zero)
51}
52
53pub fn remove_trace(_value: u128, idx: usize) -> Result<(), AtomicSetError> {
54    ACTIVE_TRACES.remove(idx)
55}