File size: 1,506 Bytes
52a9af3
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
//! Request counts exclude disabled plugins, account-switch discards, and cancellations.
//! Auth retries keep the furthest request outcome reached; each completed wait/load is timed.
//! Skill-snapshot lookups are not requests. Clear events include already-empty caches.
//! Tags never contain configuration data.

use std::time::Duration;

pub(crate) const LOAD_DURATION: &str = "codex.plugins.loaded_cache.load.duration_ms";
pub(crate) const WAIT_DURATION: &str = "codex.plugins.loaded_cache.wait.duration_ms";

pub(crate) enum RequestOutcome {
    Hit,
    HitAfterWait,
    Load,
}

impl RequestOutcome {
    pub(crate) fn record(self) {
        let Some(metrics) = codex_otel::global() else {
            return;
        };
        let outcome = match self {
            Self::Hit => "hit",
            Self::HitAfterWait => "hit_after_wait",
            Self::Load => "load",
        };
        let _ = metrics.counter(
            "codex.plugins.loaded_cache.request",
            /*inc*/ 1,
            &[("outcome", outcome)],
        );
    }
}

pub(crate) fn record_duration(name: &'static str, duration: Duration) {
    if let Some(metrics) = codex_otel::global() {
        let _ = metrics.record_duration(name, duration, &[]);
    }
}

pub(crate) fn record_event(event: &'static str) {
    if let Some(metrics) = codex_otel::global() {
        let _ = metrics.counter(
            "codex.plugins.loaded_cache.event",
            /*inc*/ 1,
            &[("event", event)],
        );
    }
}