Skip to main content

aios_core/
collector_ingress.rs

1use aios_spec::{CollectorEnvelope, IngestedRawEvent, RawEvent, SourceTier};
2use thiserror::Error;
3
4const SUPPORTED_COLLECTOR_SCHEMA: &str = "dipecs.collector.v1";
5
6/// Rust 侧 collector 入口。
7///
8/// 所有进入 core 管线的 `RawEvent` 都必须通过此入口,无论来自
9/// apps 侧 (JSONL/JNI/socket) 还是 Rust 系统采集器。`SourceTier`
10/// 由入口权威决定,并随 `IngestedRawEvent` 一路传递到脱敏器。
11#[derive(Debug, Default)]
12pub struct RustCollectorIngress;
13
14impl RustCollectorIngress {
15    /// 校验并解包来自 apps 侧或外部系统的 envelope。
16    ///
17    /// envelope 中声明的 `source_tier` 会随事件一并返回,供下游脱敏器
18    /// 与策略层使用。
19    pub fn accept(
20        &self,
21        envelope: CollectorEnvelope,
22    ) -> Result<IngestedRawEvent, CollectorIngressError> {
23        if envelope.schema_version != SUPPORTED_COLLECTOR_SCHEMA {
24            return Err(CollectorIngressError::UnsupportedSchemaVersion(
25                envelope.schema_version,
26            ));
27        }
28        Ok(IngestedRawEvent {
29            raw_event: envelope.raw_event,
30            source_tier: envelope.source_tier,
31        })
32    }
33
34    /// 包装来自 Rust 系统采集器的事件。
35    ///
36    /// 内部采集器是受信来源,固定标记为 `SourceTier::Daemon`。
37    /// `source` 和 `captured_at_ms` 当前仅用于调用方诊断,
38    /// 未来可在 envelope 化改造后接入 Trace。
39    pub fn accept_internal(
40        &self,
41        raw: RawEvent,
42        _source: &str,
43        _captured_at_ms: i64,
44    ) -> IngestedRawEvent {
45        IngestedRawEvent {
46            raw_event: raw,
47            source_tier: SourceTier::Daemon,
48        }
49    }
50}
51
52#[derive(Debug, Error, PartialEq, Eq)]
53pub enum CollectorIngressError {
54    #[error("unsupported collector schema version: {0}")]
55    UnsupportedSchemaVersion(String),
56}