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
use crate::{BuckyErrorCode, BuckyResult};

use once_cell::sync::OnceCell;
use std::sync::Arc;

pub trait PerfIsolate: Send + Sync {
    fn begin_request(&self, id: &str, key: &str);
    fn end_request(&self, id: &str, key: &str, err: BuckyErrorCode, bytes: Option<u32>);

    fn acc(&self, id: &str, err: BuckyErrorCode, size: Option<u64>);

    fn action(
        &self,
        id: &str,
        err: BuckyErrorCode,
        name: &str,
        value: &str,
    );

    fn record(&self, id: &str, total: u64, total_size: Option<u64>);
}

pub type PerfIsolateRef = Arc<Box<dyn PerfIsolate>>;

#[async_trait::async_trait]
pub trait PerfManager: Send + Sync {
    async fn flush(&self) -> BuckyResult<()>;
    fn get_isolate(&self, id: &str) -> PerfIsolateRef;
}

pub static PERF_MANGER: OnceCell<Box<dyn PerfManager>> = OnceCell::new();