@@ -24,6 +24,7 @@ use std::time::Duration;
2424use databend_common_base:: base:: tokio;
2525use databend_common_base:: base:: GlobalInstance ;
2626use databend_common_base:: base:: SignalStream ;
27+ use databend_common_base:: runtime:: metrics:: GLOBAL_METRICS_REGISTRY ;
2728use databend_common_catalog:: table_context:: ProcessInfoState ;
2829use databend_common_config:: GlobalConfig ;
2930use databend_common_config:: InnerConfig ;
@@ -38,6 +39,7 @@ use log::info;
3839use parking_lot:: RwLock ;
3940
4041use crate :: sessions:: session:: Session ;
42+ use crate :: sessions:: session_mgr_metrics:: SessionManagerMetricsCollector ;
4143use crate :: sessions:: ProcessInfo ;
4244use crate :: sessions:: SessionContext ;
4345use crate :: sessions:: SessionManagerStatus ;
@@ -47,6 +49,7 @@ pub struct SessionManager {
4749 pub ( in crate :: sessions) max_sessions : usize ,
4850 pub ( in crate :: sessions) active_sessions : Arc < RwLock < HashMap < String , Weak < Session > > > > ,
4951 pub status : Arc < RwLock < SessionManagerStatus > > ,
52+ pub metrics_collector : SessionManagerMetricsCollector ,
5053
5154 // When typ is MySQL, insert into this map, key is id, val is MySQL connection id.
5255 pub ( crate ) mysql_conn_map : Arc < RwLock < HashMap < Option < u32 > , String > > > ,
@@ -55,20 +58,26 @@ pub struct SessionManager {
5558
5659impl SessionManager {
5760 pub fn init ( conf : & InnerConfig ) -> Result < ( ) > {
58- GlobalInstance :: set ( Self :: create ( conf) ) ;
61+ let global_instance = Self :: create ( conf) ;
62+ GlobalInstance :: set ( global_instance. clone ( ) ) ;
63+ GLOBAL_METRICS_REGISTRY
64+ . register_collector ( Box :: new ( global_instance. metrics_collector . clone ( ) ) ) ;
5965
6066 Ok ( ( ) )
6167 }
6268
6369 pub fn create ( conf : & InnerConfig ) -> Arc < SessionManager > {
6470 let max_sessions = conf. query . max_active_sessions as usize ;
65- Arc :: new ( SessionManager {
71+ let mgr = Arc :: new ( SessionManager {
6672 max_sessions,
6773 mysql_basic_conn_id : AtomicU32 :: new ( 9_u32 . to_le ( ) ) ,
6874 status : Arc :: new ( RwLock :: new ( SessionManagerStatus :: default ( ) ) ) ,
6975 mysql_conn_map : Arc :: new ( RwLock :: new ( HashMap :: with_capacity ( max_sessions) ) ) ,
7076 active_sessions : Arc :: new ( RwLock :: new ( HashMap :: with_capacity ( max_sessions) ) ) ,
71- } )
77+ metrics_collector : SessionManagerMetricsCollector :: new ( ) ,
78+ } ) ;
79+ mgr. metrics_collector . attach_session_manager ( mgr. clone ( ) ) ;
80+ mgr
7281 }
7382
7483 pub fn instance ( ) -> Arc < SessionManager > {
0 commit comments