diff --git a/explorer-api/src/mix_nodes/mod.rs b/explorer-api/src/mix_nodes/mod.rs index e4aede3fd9..4fdc1f0ff7 100644 --- a/explorer-api/src/mix_nodes/mod.rs +++ b/explorer-api/src/mix_nodes/mod.rs @@ -1,3 +1,4 @@ +pub(crate) mod tasks; mod utils; use std::collections::HashMap; diff --git a/explorer-api/src/mix_nodes/tasks.rs b/explorer-api/src/mix_nodes/tasks.rs new file mode 100644 index 0000000000..24cff84d8a --- /dev/null +++ b/explorer-api/src/mix_nodes/tasks.rs @@ -0,0 +1,26 @@ +use crate::state::ExplorerApiStateContext; + +pub(crate) struct MixNodesTasks { + state: ExplorerApiStateContext, +} + +impl MixNodesTasks { + pub(crate) fn new(state: ExplorerApiStateContext) -> Self { + MixNodesTasks { state } + } + + pub(crate) fn start(self) { + info!("Spawning mix nodes task runner..."); + tokio::spawn(async move { + let mut interval_timer = tokio::time::interval(std::time::Duration::from_secs(60 * 60)); // every hour + loop { + // wait for the next interval tick + interval_timer.tick().await; + + info!("Updating mix node cache..."); + self.state.inner.mix_nodes.refresh().await; + info!("Done"); + } + }); + } +}