commit 6e90de7bef0bbf08627f0c49cd68a4d7182216bf
parent 342a55de50a607b41da085a50d4ba74504c0d9ca
Author: triesap <triesap@radroots.dev>
Date: Wed, 21 Jan 2026 17:50:23 +0000
app: move logs to logs store
- add dedicated logs store config in idb
- route log reads and writes to logs datastore
- keep key map prefixes unchanged for log entries
- update logs page to use logs store
Diffstat:
4 files changed, 38 insertions(+), 13 deletions(-)
diff --git a/app/src/app.rs b/app/src/app.rs
@@ -5,6 +5,8 @@ use leptos_router::components::{A, Route, Router, Routes};
use leptos_router::hooks::use_navigate;
use leptos_router::path;
+use radroots_app_core::idb::IDB_CONFIG_LOGS;
+
use crate::{
app_init_assets,
app_init_backends,
@@ -70,6 +72,10 @@ fn log_init_stage(stage: RadrootsAppInitStage) {
let _ = app_log_debug_emit("log.app.init.stage", stage.as_str(), None);
}
+fn logs_datastore() -> radroots_app_core::datastore::RadrootsClientWebDatastore {
+ radroots_app_core::datastore::RadrootsClientWebDatastore::new(Some(IDB_CONFIG_LOGS))
+}
+
fn spawn_health_checks(
config: RadrootsAppConfig,
setup_required: bool,
@@ -121,7 +127,8 @@ fn spawn_health_checks(
health_running.set(false);
let key_maps = config.datastore.key_maps.clone();
spawn_local(async move {
- let _ = app_log_buffer_flush_deferred(&datastore, &key_maps, true).await;
+ let log_datastore = logs_datastore();
+ let _ = app_log_buffer_flush_deferred(&log_datastore, &key_maps, true).await;
});
});
}
@@ -136,7 +143,6 @@ fn app_health_check_delay_ms() -> u32 {
fn SplashPage() -> impl IntoView {
view! {
<main style="min-height:100vh;background:white;display:flex;align-items:center;justify-content:center;">
- <div>"loading"</div>
</main>
}
}
@@ -296,7 +302,13 @@ fn HomePage() -> impl IntoView {
);
}
Err(err) => {
- let _ = app_log_error_store(&datastore, &config.datastore.key_maps, &err).await;
+ let log_datastore = logs_datastore();
+ let _ = app_log_error_store(
+ &log_datastore,
+ &config.datastore.key_maps,
+ &err,
+ )
+ .await;
reset_status.set(Some(err.to_string()));
}
}
@@ -344,8 +356,9 @@ fn HomePage() -> impl IntoView {
);
}
Err(err) => {
+ let log_datastore = logs_datastore();
let _ = app_log_error_store(
- &datastore,
+ &log_datastore,
&config.datastore.key_maps,
&err,
)
@@ -563,17 +576,12 @@ fn AppShell() -> impl IntoView {
}
});
let flush_ctx = backends.with_untracked(|value| {
- value.as_ref().map(|backends| {
- (
- backends.datastore.clone(),
- backends.config.datastore.key_maps.clone(),
- )
- })
+ value.as_ref().map(|backends| backends.config.datastore.key_maps.clone())
});
- if let Some((datastore, key_maps)) = flush_ctx {
+ if let Some(key_maps) = flush_ctx {
spawn_local(async move {
let _ = app_log_buffer_flush_deferred(
- datastore.as_ref(),
+ &logs_datastore(),
&key_maps,
true,
)
diff --git a/app/src/logs.rs b/app/src/logs.rs
@@ -14,6 +14,9 @@ use wasm_bindgen_futures::JsFuture;
use wasm_bindgen::JsValue;
use std::rc::Rc;
+use radroots_app_core::datastore::RadrootsClientWebDatastore;
+use radroots_app_core::idb::IDB_CONFIG_LOGS;
+
use crate::{
app_context,
app_log_buffer_flush_no_prune,
@@ -44,6 +47,10 @@ fn logs_page_size_default() -> usize {
LOGS_PAGE_SIZE
}
+fn logs_datastore() -> RadrootsClientWebDatastore {
+ RadrootsClientWebDatastore::new(Some(IDB_CONFIG_LOGS))
+}
+
fn log_level_color(level: RadrootsAppLogLevel) -> &'static str {
match level {
RadrootsAppLogLevel::Debug => "#6b7280",
@@ -372,7 +379,10 @@ pub fn RadrootsAppLogsPage() -> impl IntoView {
.backends
.with_untracked(|value| {
value.as_ref().map(|backends| {
- (backends.datastore.clone(), backends.config.datastore.key_maps.clone())
+ (
+ Rc::new(logs_datastore()),
+ backends.config.datastore.key_maps.clone(),
+ )
})
})
})
diff --git a/crates/core/src/idb/config.rs b/crates/core/src/idb/config.rs
@@ -3,6 +3,7 @@ use super::RadrootsClientIdbConfig;
pub const RADROOTS_IDB_DATABASE: &str = "radroots-pwa-v1";
pub const IDB_STORE_DATASTORE: &str = "radroots.app.datastore";
+pub const IDB_STORE_LOGS: &str = "radroots.app.logs";
pub const IDB_STORE_KEYSTORE: &str = "radroots.security.keystore";
pub const IDB_STORE_KEYSTORE_NOSTR: &str = "radroots.security.keystore.nostr";
pub const IDB_STORE_CRYPTO_REGISTRY: &str = "radroots.security.crypto.registry";
@@ -16,6 +17,8 @@ pub const IDB_STORE_KEYSTORE_NOSTR_CIPHER: &str = "radroots.security.keystore.no
pub const IDB_CONFIG_DATASTORE: RadrootsClientIdbConfig =
RadrootsClientIdbConfig::new(RADROOTS_IDB_DATABASE, IDB_STORE_DATASTORE);
+pub const IDB_CONFIG_LOGS: RadrootsClientIdbConfig =
+ RadrootsClientIdbConfig::new(RADROOTS_IDB_DATABASE, IDB_STORE_LOGS);
pub const IDB_CONFIG_KEYSTORE: RadrootsClientIdbConfig =
RadrootsClientIdbConfig::new(RADROOTS_IDB_DATABASE, IDB_STORE_KEYSTORE);
pub const IDB_CONFIG_KEYSTORE_NOSTR: RadrootsClientIdbConfig =
@@ -31,6 +34,7 @@ pub const IDB_CONFIG_TANGLE: RadrootsClientIdbConfig =
pub const RADROOTS_IDB_CONFIGS: &[RadrootsClientIdbConfig] = &[
IDB_CONFIG_DATASTORE,
+ IDB_CONFIG_LOGS,
IDB_CONFIG_KEYSTORE,
IDB_CONFIG_KEYSTORE_NOSTR,
IDB_CONFIG_CRYPTO_REGISTRY,
@@ -41,6 +45,7 @@ pub const RADROOTS_IDB_CONFIGS: &[RadrootsClientIdbConfig] = &[
pub const RADROOTS_IDB_STORES: &[&str] = &[
IDB_STORE_DATASTORE,
+ IDB_STORE_LOGS,
IDB_STORE_KEYSTORE,
IDB_STORE_KEYSTORE_NOSTR,
IDB_STORE_CRYPTO_REGISTRY,
diff --git a/crates/core/src/idb/mod.rs b/crates/core/src/idb/mod.rs
@@ -11,6 +11,7 @@ pub use config::{
IDB_CONFIG_CIPHER_SQL,
IDB_CONFIG_CRYPTO_REGISTRY,
IDB_CONFIG_DATASTORE,
+ IDB_CONFIG_LOGS,
IDB_CONFIG_KEYSTORE,
IDB_CONFIG_KEYSTORE_NOSTR,
IDB_CONFIG_TANGLE,
@@ -19,6 +20,7 @@ pub use config::{
IDB_STORE_CIPHER_SUFFIX,
IDB_STORE_CRYPTO_REGISTRY,
IDB_STORE_DATASTORE,
+ IDB_STORE_LOGS,
IDB_STORE_KEYSTORE,
IDB_STORE_KEYSTORE_CIPHER,
IDB_STORE_KEYSTORE_NOSTR,