Skip to main content

reifydb_core/event/
metric.rs

1// SPDX-License-Identifier: Apache-2.0
2// Copyright (c) 2025 ReifyDB
3
4//! Storage and CDC statistics events.
5//!
6//! These events are emitted when storage operations occur that need stats tracking.
7//! The metrics worker listens to these events and updates storage statistics.
8
9use reifydb_type::value::{datetime::DateTime, duration::Duration};
10use serde::{Deserialize, Serialize};
11
12use crate::{
13	common::CommitVersion, encoded::key::EncodedKey, fingerprint::RequestFingerprint, metric::StatementMetric,
14};
15
16define_event! {
17	/// Emitted when multi-version storage operations are committed.
18	/// Used for both commit-time ops and async drop worker ops.
19	pub struct MultiCommittedEvent {
20		pub writes: Vec<MultiWrite>,
21		pub deletes: Vec<MultiDelete>,
22		pub drops: Vec<MultiDrop>,
23		pub version: CommitVersion,
24	}
25}
26
27/// A multi-version storage write operation.
28#[derive(Clone, Debug)]
29pub struct MultiWrite {
30	pub key: EncodedKey,
31	pub value_bytes: u64,
32}
33
34/// A multi-version storage delete operation.
35#[derive(Clone, Debug)]
36pub struct MultiDelete {
37	pub key: EncodedKey,
38	pub value_bytes: u64,
39}
40
41/// A multi-version storage drop operation (MVCC cleanup).
42#[derive(Clone, Debug)]
43pub struct MultiDrop {
44	pub key: EncodedKey,
45	pub value_bytes: u64,
46}
47
48define_event! {
49	/// Emitted when CDC entries are written.
50	pub struct CdcWrittenEvent {
51		pub entries: Vec<CdcWrite>,
52		pub version: CommitVersion,
53	}
54}
55
56/// A CDC write entry.
57#[derive(Clone, Debug)]
58pub struct CdcWrite {
59	pub key: EncodedKey,
60	pub value_bytes: u64,
61}
62
63/// A CDC entry eviction.
64#[derive(Clone, Debug)]
65pub struct CdcEviction {
66	pub key: EncodedKey,
67	pub value_bytes: u64,
68}
69
70define_event! {
71	/// Emitted when CDC entries are evicted (retention cleanup).
72	pub struct CdcEvictedEvent {
73		pub entries: Vec<CdcEviction>,
74		pub version: CommitVersion,
75	}
76}
77
78/// Detailed telemetry specific to the type of request executed.
79#[derive(Debug, Clone, Serialize, Deserialize)]
80pub enum Request {
81	Query {
82		fingerprint: RequestFingerprint,
83		statements: Vec<StatementMetric>,
84	},
85	Command {
86		fingerprint: RequestFingerprint,
87		statements: Vec<StatementMetric>,
88	},
89	Admin {
90		fingerprint: RequestFingerprint,
91		statements: Vec<StatementMetric>,
92	},
93}
94
95define_event! {
96	/// Emitted when a server request execution is completed.
97	pub struct RequestExecutedEvent {
98		pub request: Request,
99		pub total: Duration,
100		pub compute: Duration,
101		pub success: bool,
102		pub timestamp: DateTime,
103	}
104}