aboutsummaryrefslogtreecommitdiffstats
path: root/crates/daemon/src/lib.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/daemon/src/lib.rs')
-rw-r--r--crates/daemon/src/lib.rs53
1 files changed, 16 insertions, 37 deletions
diff --git a/crates/daemon/src/lib.rs b/crates/daemon/src/lib.rs
index a5d233c6..3be39a1c 100644
--- a/crates/daemon/src/lib.rs
+++ b/crates/daemon/src/lib.rs
@@ -1,25 +1,30 @@
-use crate::aclient::database::ClientSqlite as HistoryDatabase;
+#![expect(unused_crate_dependencies, reason = "Didn't remove them yet")]
+
+use std::sync::Arc;
+
use crate::aclient::record::sqlite_store::SqliteStore;
-use crate::aclient::settings::{Settings, watcher::global_settings_watcher};
+use crate::aclient::settings::Settings;
+use crate::api::server::control::ControlService;
+use crate::{
+ aclient::database::ClientSqlite as HistoryDatabase,
+ api::generated::history::history_server::HistoryServer,
+};
use eyre::Result;
pub mod aclient;
-pub mod client;
+pub(crate) mod api;
pub(crate) mod components;
-pub(crate) mod control;
pub(crate) mod daemon;
pub(crate) mod events;
pub(crate) mod server;
-pub(crate) mod generated;
-
// Re-export core daemon types for convenience
pub(crate) use daemon::Daemon;
pub use events::DaemonEvent;
// Re-export components
-pub(crate) use components::{HistoryComponent, SemanticComponent, SyncComponent};
+pub(crate) use components::{HistoryComponent, SyncComponent};
/// Boot the daemon using the new component-based architecture.
///
@@ -31,53 +36,28 @@ pub async fn boot(
history_db: HistoryDatabase,
) -> Result<()> {
// Create the components
- let history_component = HistoryComponent::new();
- let semantic_component = SemanticComponent::new();
- let sync_component = SyncComponent::new();
+ let history_component = Arc::new(HistoryComponent::new());
+ let sync_component = Arc::new(Box::new(&SyncComponent::new()));
// Get the gRPC services before moving components into the daemon
// (The services share state with the components via Arc)
- let history_service = history_component.grpc_service();
- let semantic_service = semantic_component.grpc_service();
+ let history_service = HistoryServer::from_arc(Arc::clone(&history_component));
// Build the daemon
let mut daemon = Daemon::builder(settings.clone())
.store(store)
.history_db(history_db)
.component(history_component)
- .component(semantic_component)
.component(sync_component)
.build()?;
- // Get a handle for the control service and gRPC server shutdown
let handle = daemon.handle();
- // Create the control service
- let control_service = control::ControlService::new(handle.clone());
+ let control_service = ControlService::new(handle.clone());
// Start all components first (so gRPC services can work)
daemon.start_components().await?;
- // Spawn config file watcher to reload settings on changes
- if let Ok(watcher) = global_settings_watcher() {
- let mut settings_rx = watcher.subscribe();
- let watcher_handle = handle.clone();
- tokio::spawn(async move {
- tracing::info!("config file watcher started");
- while settings_rx.changed().await.is_ok() {
- // Use the already-loaded settings from the watcher
- // (avoids parsing the config file twice)
- let new_settings = (*settings_rx.borrow()).clone();
- watcher_handle.apply_settings((*new_settings).clone()).await;
- }
- tracing::debug!("config file watcher stopped");
- });
- } else {
- tracing::warn!(
- "failed to start config file watcher; settings changes will require daemon restart"
- );
- }
-
// Spawn signal handler to emit ShutdownRequested on Ctrl+C/SIGTERM
let signal_handle = handle.clone();
tokio::spawn(async move {
@@ -89,7 +69,6 @@ pub async fn boot(
server::run_grpc_server(
&settings,
history_service,
- semantic_service,
control_service.into_server(),
handle,
)?;