commit d47649d6ea91cf0643618d7660d4002baded551d
parent 0fe7930b924c4bea37dce2cfcbdc9f6bef29aa7e
Author: triesap <triesap@radroots.dev>
Date: Mon, 19 Jan 2026 18:46:46 +0000
app: add aggregate health report
- add health check aggregator for datastore and keystore
- return per-check results in AppHealthReport
- cover aggregate health behavior in unit tests
- export aggregate check helper
Diffstat:
2 files changed, 30 insertions(+), 0 deletions(-)
diff --git a/app/src/health.rs b/app/src/health.rs
@@ -144,9 +144,24 @@ pub async fn app_health_check_keystore_access<T: RadrootsClientKeystoreNostr>(
}
}
+pub async fn app_health_check_all<T: RadrootsClientDatastore, K: RadrootsClientKeystoreNostr>(
+ datastore: &T,
+ keystore: &K,
+ key_maps: &AppKeyMapConfig,
+) -> AppHealthReport {
+ AppHealthReport {
+ key_maps: app_health_check_key_maps(key_maps),
+ bootstrap_config: app_health_check_bootstrap_config(datastore, key_maps).await,
+ bootstrap_app_data: app_health_check_bootstrap_app_data(datastore, key_maps).await,
+ datastore_roundtrip: app_health_check_datastore_roundtrip(datastore).await,
+ keystore: app_health_check_keystore_access(keystore).await,
+ }
+}
+
#[cfg(test)]
mod tests {
use super::{
+ app_health_check_all,
app_health_check_key_maps,
app_health_check_bootstrap_app_data,
app_health_check_bootstrap_config,
@@ -277,4 +292,18 @@ mod tests {
futures::executor::block_on(app_health_check_keystore_access(&keystore));
assert_eq!(result.status, AppHealthCheckStatus::Error);
}
+
+ #[test]
+ fn health_check_all_reports_idb_errors() {
+ let datastore = RadrootsClientWebDatastore::new(None);
+ let keystore = RadrootsClientWebKeystoreNostr::new(None);
+ let key_maps = crate::app_key_maps_default();
+ let report =
+ futures::executor::block_on(app_health_check_all(&datastore, &keystore, &key_maps));
+ assert_eq!(report.key_maps.status, AppHealthCheckStatus::Ok);
+ assert_eq!(report.bootstrap_config.status, AppHealthCheckStatus::Error);
+ assert_eq!(report.bootstrap_app_data.status, AppHealthCheckStatus::Error);
+ assert_eq!(report.datastore_roundtrip.status, AppHealthCheckStatus::Error);
+ assert_eq!(report.keystore.status, AppHealthCheckStatus::Error);
+ }
}
diff --git a/app/src/lib.rs b/app/src/lib.rs
@@ -20,6 +20,7 @@ pub use bootstrap::{
pub use context::{app_context, AppContext};
pub use data::{AppAppData, AppConfigData, AppConfigRole};
pub use health::{
+ app_health_check_all,
app_health_check_bootstrap_app_data,
app_health_check_bootstrap_config,
app_health_check_datastore_roundtrip,