@@ -15,9 +15,10 @@ use crate::fee_estimator::{
1515 apply_post_estimation_adjustments, get_all_conf_targets, get_num_block_defaults_for_target,
1616 OnchainFeeEstimator ,
1717} ;
18+ use crate :: io:: utils:: write_node_metrics;
1819use crate :: logger:: { log_bytes, log_error, log_info, log_trace, FilesystemLogger , Logger } ;
19- use crate :: types:: { Broadcaster , ChainMonitor , ChannelManager , Sweeper , Wallet } ;
20- use crate :: Error ;
20+ use crate :: types:: { Broadcaster , ChainMonitor , ChannelManager , DynStore , Sweeper , Wallet } ;
21+ use crate :: { Error , NodeMetrics } ;
2122
2223use lightning:: chain:: { Confirm , Filter } ;
2324use lightning:: util:: ser:: Writeable ;
@@ -102,23 +103,18 @@ pub(crate) enum ChainSource {
102103 lightning_wallet_sync_status : Mutex < WalletSyncStatus > ,
103104 fee_estimator : Arc < OnchainFeeEstimator > ,
104105 tx_broadcaster : Arc < Broadcaster > ,
106+ kv_store : Arc < DynStore > ,
105107 config : Arc < Config > ,
106108 logger : Arc < FilesystemLogger > ,
107- latest_wallet_sync_timestamp : Arc < RwLock < Option < u64 > > > ,
108- latest_onchain_wallet_sync_timestamp : Arc < RwLock < Option < u64 > > > ,
109- latest_fee_rate_cache_update_timestamp : Arc < RwLock < Option < u64 > > > ,
110- latest_channel_monitor_archival_height : Arc < RwLock < Option < u32 > > > ,
109+ node_metrics : Arc < RwLock < NodeMetrics > > ,
111110 } ,
112111}
113112
114113impl ChainSource {
115114 pub ( crate ) fn new_esplora (
116115 server_url : String , onchain_wallet : Arc < Wallet > , fee_estimator : Arc < OnchainFeeEstimator > ,
117- tx_broadcaster : Arc < Broadcaster > , config : Arc < Config > , logger : Arc < FilesystemLogger > ,
118- latest_wallet_sync_timestamp : Arc < RwLock < Option < u64 > > > ,
119- latest_onchain_wallet_sync_timestamp : Arc < RwLock < Option < u64 > > > ,
120- latest_fee_rate_cache_update_timestamp : Arc < RwLock < Option < u64 > > > ,
121- latest_channel_monitor_archival_height : Arc < RwLock < Option < u32 > > > ,
116+ tx_broadcaster : Arc < Broadcaster > , kv_store : Arc < DynStore > , config : Arc < Config > ,
117+ logger : Arc < FilesystemLogger > , node_metrics : Arc < RwLock < NodeMetrics > > ,
122118 ) -> Self {
123119 let mut client_builder = esplora_client:: Builder :: new ( & server_url) ;
124120 client_builder = client_builder. timeout ( DEFAULT_ESPLORA_CLIENT_TIMEOUT_SECS ) ;
@@ -135,12 +131,10 @@ impl ChainSource {
135131 lightning_wallet_sync_status,
136132 fee_estimator,
137133 tx_broadcaster,
134+ kv_store,
138135 config,
139136 logger,
140- latest_wallet_sync_timestamp,
141- latest_onchain_wallet_sync_timestamp,
142- latest_fee_rate_cache_update_timestamp,
143- latest_channel_monitor_archival_height,
137+ node_metrics,
144138 }
145139 }
146140
@@ -211,8 +205,9 @@ impl ChainSource {
211205 esplora_client,
212206 onchain_wallet,
213207 onchain_wallet_sync_status,
208+ kv_store,
214209 logger,
215- latest_onchain_wallet_sync_timestamp ,
210+ node_metrics ,
216211 ..
217212 } => {
218213 let receiver_res = {
@@ -232,7 +227,7 @@ impl ChainSource {
232227 // If this is our first sync, do a full scan with the configured gap limit.
233228 // Otherwise just do an incremental sync.
234229 let incremental_sync =
235- latest_onchain_wallet_sync_timestamp . read ( ) . unwrap ( ) . is_some ( ) ;
230+ node_metrics . read ( ) . unwrap ( ) . latest_onchain_wallet_sync_timestamp . is_some ( ) ;
236231
237232 macro_rules! get_and_apply_wallet_update {
238233 ( $sync_future: expr) => { {
@@ -251,8 +246,11 @@ impl ChainSource {
251246 . duration_since( UNIX_EPOCH )
252247 . ok( )
253248 . map( |d| d. as_secs( ) ) ;
254- * latest_onchain_wallet_sync_timestamp. write( ) . unwrap( ) =
255- unix_time_secs_opt;
249+ {
250+ let mut locked_node_metrics = node_metrics. write( ) . unwrap( ) ;
251+ locked_node_metrics. latest_onchain_wallet_sync_timestamp = unix_time_secs_opt;
252+ write_node_metrics( & * locked_node_metrics, Arc :: clone( & kv_store) , Arc :: clone( & logger) ) ?;
253+ }
256254 Ok ( ( ) )
257255 } ,
258256 Err ( e) => Err ( e) ,
@@ -327,9 +325,9 @@ impl ChainSource {
327325 Self :: Esplora {
328326 tx_sync,
329327 lightning_wallet_sync_status,
328+ kv_store,
330329 logger,
331- latest_wallet_sync_timestamp,
332- latest_channel_monitor_archival_height,
330+ node_metrics,
333331 ..
334332 } => {
335333 let sync_cman = Arc :: clone ( & channel_manager) ;
@@ -372,13 +370,24 @@ impl ChainSource {
372370 . duration_since ( UNIX_EPOCH )
373371 . ok ( )
374372 . map ( |d| d. as_secs ( ) ) ;
375- * latest_wallet_sync_timestamp. write ( ) . unwrap ( ) = unix_time_secs_opt;
373+ {
374+ let mut locked_node_metrics = node_metrics. write ( ) . unwrap ( ) ;
375+ locked_node_metrics. latest_lightning_wallet_sync_timestamp =
376+ unix_time_secs_opt;
377+ write_node_metrics (
378+ & * locked_node_metrics,
379+ Arc :: clone ( & kv_store) ,
380+ Arc :: clone ( & logger) ,
381+ ) ?;
382+ }
376383
377384 periodically_archive_fully_resolved_monitors (
378385 Arc :: clone ( & channel_manager) ,
379386 Arc :: clone ( & chain_monitor) ,
380- Arc :: clone ( & latest_channel_monitor_archival_height) ,
381- ) ;
387+ Arc :: clone ( & kv_store) ,
388+ Arc :: clone ( & logger) ,
389+ Arc :: clone ( & node_metrics) ,
390+ ) ?;
382391 Ok ( ( ) )
383392 } ,
384393 Err ( e) => {
@@ -406,8 +415,9 @@ impl ChainSource {
406415 esplora_client,
407416 fee_estimator,
408417 config,
418+ kv_store,
409419 logger,
410- latest_fee_rate_cache_update_timestamp ,
420+ node_metrics ,
411421 ..
412422 } => {
413423 let now = Instant :: now ( ) ;
@@ -479,7 +489,15 @@ impl ChainSource {
479489 ) ;
480490 let unix_time_secs_opt =
481491 SystemTime :: now ( ) . duration_since ( UNIX_EPOCH ) . ok ( ) . map ( |d| d. as_secs ( ) ) ;
482- * latest_fee_rate_cache_update_timestamp. write ( ) . unwrap ( ) = unix_time_secs_opt;
492+ {
493+ let mut locked_node_metrics = node_metrics. write ( ) . unwrap ( ) ;
494+ locked_node_metrics. latest_fee_rate_cache_update_timestamp = unix_time_secs_opt;
495+ write_node_metrics (
496+ & * locked_node_metrics,
497+ Arc :: clone ( & kv_store) ,
498+ Arc :: clone ( & logger) ,
499+ ) ?;
500+ }
483501
484502 Ok ( ( ) )
485503 } ,
@@ -578,16 +596,19 @@ impl Filter for ChainSource {
578596
579597fn periodically_archive_fully_resolved_monitors (
580598 channel_manager : Arc < ChannelManager > , chain_monitor : Arc < ChainMonitor > ,
581- latest_channel_monitor_archival_height : Arc < RwLock < Option < u32 > > > ,
582- ) {
583- let mut latest_archival_height_lock = latest_channel_monitor_archival_height . write ( ) . unwrap ( ) ;
599+ kv_store : Arc < DynStore > , logger : Arc < FilesystemLogger > , node_metrics : Arc < RwLock < NodeMetrics > > ,
600+ ) -> Result < ( ) , Error > {
601+ let mut locked_node_metrics = node_metrics . write ( ) . unwrap ( ) ;
584602 let cur_height = channel_manager. current_best_block ( ) . height ;
585- let should_archive = latest_archival_height_lock
603+ let should_archive = locked_node_metrics
604+ . latest_channel_monitor_archival_height
586605 . as_ref ( )
587606 . map_or ( true , |h| cur_height >= h + RESOLVED_CHANNEL_MONITOR_ARCHIVAL_INTERVAL ) ;
588607
589608 if should_archive {
590609 chain_monitor. archive_fully_resolved_channel_monitors ( ) ;
591- * latest_archival_height_lock = Some ( cur_height) ;
610+ locked_node_metrics. latest_channel_monitor_archival_height = Some ( cur_height) ;
611+ write_node_metrics ( & * locked_node_metrics, kv_store, logger) ?;
592612 }
613+ Ok ( ( ) )
593614}
0 commit comments