@@ -3,28 +3,30 @@ use prometheus::IntGaugeVec;
3
3
use spacetimedb_lib:: Identity ;
4
4
use spacetimedb_metrics:: metrics_group;
5
5
6
+ use crate :: worker_metrics:: WORKER_METRICS ;
7
+
6
8
metrics_group ! (
7
9
#[ non_exhaustive]
8
10
pub struct DbDataSize {
9
11
#[ name = spacetime_data_size_table_num_rows]
10
12
#[ help = "The number of rows in a table" ]
11
- #[ labels( db: Identity , table_id : u32 , table_name: str ) ]
13
+ #[ labels( db: Identity , table_name: str ) ]
12
14
pub data_size_table_num_rows: IntGaugeVec ,
13
15
14
16
#[ name = spacetime_data_size_bytes_used_by_rows]
15
17
#[ help = "The number of bytes used by rows in pages in a table" ]
16
- #[ labels( db: Identity , table_id : u32 , table_name: str ) ]
18
+ #[ labels( db: Identity , table_name: str ) ]
17
19
pub data_size_table_bytes_used_by_rows: IntGaugeVec ,
18
20
19
21
#[ name = spacetime_data_size_table_num_rows_in_indexes]
20
22
#[ help = "The number of rows stored in indexes in a table" ]
21
23
// TODO: Consider partitioning by index ID or index name.
22
- #[ labels( db: Identity , table_id : u32 , table_name: str ) ]
24
+ #[ labels( db: Identity , table_name: str ) ]
23
25
pub data_size_table_num_rows_in_indexes: IntGaugeVec ,
24
26
25
27
#[ name = spacetime_data_size_table_bytes_used_by_index_keys]
26
28
#[ help = "The number of bytes used by keys stored in indexes in a table" ]
27
- #[ labels( db: Identity , table_id : u32 , table_name: str ) ]
29
+ #[ labels( db: Identity , table_name: str ) ]
28
30
pub data_size_table_bytes_used_by_index_keys: IntGaugeVec ,
29
31
30
32
#[ name = spacetime_data_size_blob_store_num_blobs]
@@ -40,3 +42,32 @@ metrics_group!(
40
42
) ;
41
43
42
44
pub static DATA_SIZE_METRICS : Lazy < DbDataSize > = Lazy :: new ( DbDataSize :: new) ;
45
+
46
+ // Remove all gauges associated with a database.
47
+ // This is useful if a database is being deleted.
48
+ pub fn remove_database_gauges < ' a , I > ( db : & Identity , table_names : I )
49
+ where
50
+ I : IntoIterator < Item = & ' a str > ,
51
+ {
52
+ // Remove the per-table gauges.
53
+ for table_name in table_names {
54
+ let _ = DATA_SIZE_METRICS
55
+ . data_size_table_num_rows
56
+ . remove_label_values ( db, table_name) ;
57
+ let _ = DATA_SIZE_METRICS
58
+ . data_size_table_bytes_used_by_rows
59
+ . remove_label_values ( db, table_name) ;
60
+ let _ = DATA_SIZE_METRICS
61
+ . data_size_table_num_rows_in_indexes
62
+ . remove_label_values ( db, table_name) ;
63
+ let _ = DATA_SIZE_METRICS
64
+ . data_size_table_bytes_used_by_index_keys
65
+ . remove_label_values ( db, table_name) ;
66
+ }
67
+ // Remove the per-db gauges.
68
+ let _ = DATA_SIZE_METRICS . data_size_blob_store_num_blobs . remove_label_values ( db) ;
69
+ let _ = DATA_SIZE_METRICS
70
+ . data_size_blob_store_bytes_used_by_blobs
71
+ . remove_label_values ( db) ;
72
+ let _ = WORKER_METRICS . wasm_memory_bytes . remove_label_values ( db) ;
73
+ }
0 commit comments