1616 *
1717 */
1818
19- use std:: sync:: atomic:: { AtomicU64 , Ordering } ;
20-
21- #[ derive( Debug ) ]
22- pub struct StatsCounter {
23- pub events_ingested : AtomicU64 ,
24- ingestion_size : AtomicU64 ,
25- storage_size : AtomicU64 ,
26- }
27-
28- impl Default for StatsCounter {
29- fn default ( ) -> Self {
30- Self {
31- events_ingested : AtomicU64 :: new ( 0 ) ,
32- ingestion_size : AtomicU64 :: new ( 0 ) ,
33- storage_size : AtomicU64 :: new ( 0 ) ,
34- }
35- }
36- }
37-
38- impl PartialEq for StatsCounter {
39- fn eq ( & self , other : & Self ) -> bool {
40- self . ingestion_size ( ) == other. ingestion_size ( )
41- && self . storage_size ( ) == other. storage_size ( )
42- }
43- }
44-
45- impl StatsCounter {
46- pub fn new ( ingestion_size : u64 , storage_size : u64 , event_ingested : u64 ) -> Self {
47- Self {
48- ingestion_size : ingestion_size. into ( ) ,
49- storage_size : storage_size. into ( ) ,
50- events_ingested : event_ingested. into ( ) ,
51- }
52- }
53-
54- pub fn events_ingested ( & self ) -> u64 {
55- self . events_ingested . load ( Ordering :: Relaxed )
56- }
57-
58- pub fn ingestion_size ( & self ) -> u64 {
59- self . ingestion_size . load ( Ordering :: Relaxed )
60- }
61-
62- pub fn storage_size ( & self ) -> u64 {
63- self . storage_size . load ( Ordering :: Relaxed )
64- }
65-
66- pub fn add_ingestion_size ( & self , size : u64 ) {
67- self . ingestion_size . fetch_add ( size, Ordering :: AcqRel ) ;
68- }
69-
70- pub fn add_storage_size ( & self , size : u64 ) {
71- self . storage_size . fetch_add ( size, Ordering :: AcqRel ) ;
72- }
73-
74- pub fn increase_event_by_n ( & self , n : u64 ) {
75- self . events_ingested . fetch_add ( n, Ordering :: AcqRel ) ;
76- }
77- }
19+ use crate :: metrics:: { EVENTS_INGESTED , EVENTS_INGESTED_SIZE , STORAGE_SIZE } ;
7820
7921/// Helper struct type created by copying stats values from metadata
8022#[ derive( Debug , Default , serde:: Serialize , serde:: Deserialize , Clone , Copy , PartialEq , Eq ) ]
@@ -84,18 +26,26 @@ pub struct Stats {
8426 pub storage : u64 ,
8527}
8628
87- impl From < & StatsCounter > for Stats {
88- fn from ( stats : & StatsCounter ) -> Self {
89- Self {
90- events : stats. events_ingested ( ) ,
91- ingestion : stats. ingestion_size ( ) ,
92- storage : stats. storage_size ( ) ,
93- }
94- }
95- }
96-
97- impl From < Stats > for StatsCounter {
98- fn from ( stats : Stats ) -> Self {
99- StatsCounter :: new ( stats. ingestion , stats. storage , stats. events )
100- }
29+ pub fn get_current_stats ( stream_name : & str , format : & ' static str ) -> Option < Stats > {
30+ let events_ingested = EVENTS_INGESTED
31+ . get_metric_with_label_values ( & [ stream_name, format] )
32+ . ok ( ) ?
33+ . get ( ) ;
34+ let ingestion_size = EVENTS_INGESTED_SIZE
35+ . get_metric_with_label_values ( & [ stream_name, format] )
36+ . ok ( ) ?
37+ . get ( ) ;
38+ let storage_size = STORAGE_SIZE
39+ . get_metric_with_label_values ( & [ "data" , stream_name, "parquet" ] )
40+ . ok ( ) ?
41+ . get ( ) ;
42+ // this should be valid for all cases given that gauge must never go negative
43+ let ingestion_size = ingestion_size as u64 ;
44+ let storage_size = storage_size as u64 ;
45+
46+ Some ( Stats {
47+ events : events_ingested,
48+ ingestion : ingestion_size,
49+ storage : storage_size,
50+ } )
10151}
0 commit comments