commit 379527f69b475c6767117dadcf9893f585d1b3af
parent 8c27088a83e5388d877c5302519f9f8b14af4f94
Author: triesap <triesap@radroots.dev>
Date: Mon, 19 Jan 2026 18:34:51 +0000
app: add bootstrap health checks
- add health checks for config and app data presence
- map datastore errors into health results
- export bootstrap health checks from app crate
- add unit test for non-wasm error mapping
Diffstat:
2 files changed, 50 insertions(+), 1 deletion(-)
diff --git a/app/src/health.rs b/app/src/health.rs
@@ -73,7 +73,13 @@ impl AppHealthReport {
}
}
-use crate::{app_key_maps_validate, AppKeyMapConfig};
+use crate::{
+ app_datastore_has_app_data,
+ app_datastore_has_config,
+ app_key_maps_validate,
+ AppKeyMapConfig,
+};
+use radroots_app_core::datastore::RadrootsClientDatastore;
pub fn app_health_check_key_maps(key_maps: &AppKeyMapConfig) -> AppHealthCheckResult {
match app_key_maps_validate(key_maps) {
@@ -82,15 +88,40 @@ pub fn app_health_check_key_maps(key_maps: &AppKeyMapConfig) -> AppHealthCheckRe
}
}
+pub async fn app_health_check_bootstrap_config<T: RadrootsClientDatastore>(
+ datastore: &T,
+ key_maps: &AppKeyMapConfig,
+) -> AppHealthCheckResult {
+ match app_datastore_has_config(datastore, key_maps).await {
+ Ok(true) => AppHealthCheckResult::ok(),
+ Ok(false) => AppHealthCheckResult::error("missing"),
+ Err(err) => AppHealthCheckResult::error(err.to_string()),
+ }
+}
+
+pub async fn app_health_check_bootstrap_app_data<T: RadrootsClientDatastore>(
+ datastore: &T,
+ key_maps: &AppKeyMapConfig,
+) -> AppHealthCheckResult {
+ match app_datastore_has_app_data(datastore, key_maps).await {
+ Ok(true) => AppHealthCheckResult::ok(),
+ Ok(false) => AppHealthCheckResult::error("missing"),
+ Err(err) => AppHealthCheckResult::error(err.to_string()),
+ }
+}
+
#[cfg(test)]
mod tests {
use super::{
app_health_check_key_maps,
+ app_health_check_bootstrap_app_data,
+ app_health_check_bootstrap_config,
AppHealthCheckResult,
AppHealthCheckStatus,
AppHealthReport,
};
use crate::AppKeyMapConfig;
+ use radroots_app_core::datastore::RadrootsClientWebDatastore;
#[test]
fn health_status_as_str() {
@@ -130,4 +161,20 @@ mod tests {
Some("error.app.config.key_map_missing")
);
}
+
+ #[test]
+ fn health_check_bootstrap_reports_idb_errors() {
+ let datastore = RadrootsClientWebDatastore::new(None);
+ let key_maps = crate::app_key_maps_default();
+ let result = futures::executor::block_on(app_health_check_bootstrap_config(
+ &datastore,
+ &key_maps,
+ ));
+ assert_eq!(result.status, AppHealthCheckStatus::Error);
+ let result = futures::executor::block_on(app_health_check_bootstrap_app_data(
+ &datastore,
+ &key_maps,
+ ));
+ assert_eq!(result.status, AppHealthCheckStatus::Error);
+ }
}
diff --git a/app/src/lib.rs b/app/src/lib.rs
@@ -20,6 +20,8 @@ pub use bootstrap::{
pub use context::{app_context, AppContext};
pub use data::{AppAppData, AppConfigData, AppConfigRole};
pub use health::{
+ app_health_check_bootstrap_app_data,
+ app_health_check_bootstrap_config,
app_health_check_key_maps,
AppHealthCheckResult,
AppHealthCheckStatus,