linkrs_metrics/manager/
transaction.rs1use serde::{Deserialize, Serialize};
3
4use super::core::StatsManager;
5use super::metric_type::MetricType;
6
7#[derive(Debug, Clone, Serialize, Deserialize)]
9pub struct TransactionSnapshot {
10 pub begun: u64,
11 pub committed: u64,
12 pub rolled_back: u64,
13 pub active: u64,
14 pub conflicts: u64,
15 pub timeouts: u64,
16 pub disconnects: u64,
17 pub recovery_aborts: u64,
18 pub cleanup_failures: u64,
19 pub active_statements: u64,
20 pub active_snapshots: u64,
21 pub pending_writes: u64,
22 pub frontier_lag: u64,
23 pub staged_wal_bytes: u64,
24 pub undo_bytes: u64,
25 pub checkpoint_drain_time_ms: u64,
26}
27
28#[derive(Debug, Clone, Copy)]
30pub struct TxnResourceMetrics {
31 pub active_statements: u64,
32 pub active_snapshots: u64,
33 pub pending_writes: u64,
34 pub frontier_lag: u64,
35 pub staged_wal_bytes: u64,
36 pub undo_bytes: u64,
37 pub checkpoint_drain_time_ms: u64,
38}
39
40impl StatsManager {
41 pub fn record_txn_begin(&self) {
43 self.add_value(MetricType::TxnBeginCount);
44 self.add_value(MetricType::TxnActiveCount);
45 }
46
47 pub fn record_txn_commit(&self) {
49 self.add_value(MetricType::TxnCommitCount);
50 self.dec_value(MetricType::TxnActiveCount);
51 }
52
53 pub fn record_txn_rollback(&self) {
55 self.add_value(MetricType::TxnRollbackCount);
56 self.dec_value(MetricType::TxnActiveCount);
57 }
58
59 pub fn record_txn_conflict(&self) {
61 self.add_value(MetricType::TxnConflictCount);
62 }
63
64 pub fn record_txn_timeout(&self) {
66 self.add_value(MetricType::TxnTimeoutCount);
67 }
68
69 pub fn record_txn_disconnect(&self) {
71 self.add_value(MetricType::TxnDisconnectCount);
72 }
73
74 pub fn record_txn_recovery_abort(&self) {
76 self.add_value(MetricType::TxnRecoveryAbortCount);
77 }
78
79 pub fn record_txn_cleanup_failure(&self) {
81 self.add_value(MetricType::TxnCleanupFailureCount);
82 }
83
84 pub fn transaction_snapshot(&self) -> TransactionSnapshot {
85 let v = |m: MetricType| self.get_value(m).unwrap_or(0);
86 TransactionSnapshot {
87 begun: v(MetricType::TxnBeginCount),
88 committed: v(MetricType::TxnCommitCount),
89 rolled_back: v(MetricType::TxnRollbackCount),
90 active: v(MetricType::TxnActiveCount),
91 conflicts: v(MetricType::TxnConflictCount),
92 timeouts: v(MetricType::TxnTimeoutCount),
93 disconnects: v(MetricType::TxnDisconnectCount),
94 recovery_aborts: v(MetricType::TxnRecoveryAbortCount),
95 cleanup_failures: v(MetricType::TxnCleanupFailureCount),
96 active_statements: v(MetricType::TxnActiveStatements),
97 active_snapshots: v(MetricType::TxnActiveSnapshots),
98 pending_writes: v(MetricType::TxnPendingWrites),
99 frontier_lag: v(MetricType::TxnFrontierLag),
100 staged_wal_bytes: v(MetricType::TxnStagedWalBytes),
101 undo_bytes: v(MetricType::TxnUndoBytes),
102 checkpoint_drain_time_ms: v(MetricType::TxnCheckpointDrainTimeMs),
103 }
104 }
105
106 pub fn set_txn_resource_metrics(&self, metrics: TxnResourceMetrics) {
108 self.set_value(MetricType::TxnActiveStatements, metrics.active_statements);
109 self.set_value(MetricType::TxnActiveSnapshots, metrics.active_snapshots);
110 self.set_value(MetricType::TxnPendingWrites, metrics.pending_writes);
111 self.set_value(MetricType::TxnFrontierLag, metrics.frontier_lag);
112 self.set_value(MetricType::TxnStagedWalBytes, metrics.staged_wal_bytes);
113 self.set_value(MetricType::TxnUndoBytes, metrics.undo_bytes);
114 self.set_value(
115 MetricType::TxnCheckpointDrainTimeMs,
116 metrics.checkpoint_drain_time_ms,
117 );
118 }
119}