Skip to main content

reifydb_core/event/
metric.rs

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