Codex Handbook
otel/src/metrics/process.rs 27 lines
use std::sync::atomic::AtomicBool;use std::sync::atomic::Ordering;use super::client::MetricsClient;use super::error::Result;use super::names::PROCESS_START_METRIC;use super::tags::ORIGINATOR_TAG;use super::tags::bounded_originator_tag_value;static PROCESS_START_RECORDED: AtomicBool = AtomicBool::new(false);/// Record the process start counter at most once for this process.pub fn record_process_start_once(metrics: &MetricsClient, originator: &str) -> Result<bool> {    if PROCESS_START_RECORDED        .compare_exchange(false, true, Ordering::Relaxed, Ordering::Relaxed)        .is_err()    {        return Ok(false);    }    metrics.counter(        PROCESS_START_METRIC,        /*inc*/ 1,        &[(ORIGINATOR_TAG, bounded_originator_tag_value(originator))],    )?;    Ok(true)}