use std::sync::Arc;
use nodedb::control::shutdown::ShutdownBus;
use nodedb::control::state::SharedState;
pub(crate) fn wire_shutdown_bus(
shared: &Arc<SharedState>,
system_metrics: &Arc<nodedb::control::metrics::SystemMetrics>,
) -> (tokio::sync::watch::Receiver<bool>, ShutdownBus) {
let shutdown_rx = shared.shutdown.raw_receiver();
let (shutdown_bus, _shutdown_bus_handle) = ShutdownBus::new(Arc::clone(&shared.shutdown));
shutdown_bus.set_metrics(Arc::clone(system_metrics));
if std::env::var("NODEDB_TEST_SLOW_DRAIN_TASK").as_deref() == Ok("1") {
let mut guard = shutdown_bus.register_task(
nodedb::control::shutdown::ShutdownPhase::DrainingListeners,
"test_slow_task",
None,
);
tokio::spawn(async move {
guard.await_signal().await;
tokio::time::sleep(std::time::Duration::from_secs(2)).await;
drop(guard); });
}
(shutdown_rx, shutdown_bus)
}