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