haste_health/commands/worker.rs
1use std::sync::Arc;
2
3use clap::Subcommand;
4use figment::{
5 Figment,
6 providers::{Env, Format as _, Toml},
7};
8use haste_fhir_model::r4::generated::terminology::IssueType;
9use haste_fhir_operation_error::OperationOutcomeError;
10use haste_worker::{search_indexing, traits::Worker as _};
11
12#[derive(Subcommand, Debug)]
13pub(crate) enum WorkerCommands {
14 Worker,
15 WalWorker,
16}
17
18pub(crate) async fn worker(command: &Option<WorkerCommands>) -> Result<(), OperationOutcomeError> {
19 match command {
20 None | Some(WorkerCommands::Worker) => {
21 let config: Arc<search_indexing::WorkerEnvironment> = Arc::new(
22 Figment::new()
23 .merge(Toml::file("haste.toml"))
24 .merge(Env::prefixed("HASTE_"))
25 .extract()
26 .map_err(|e| {
27 OperationOutcomeError::error(IssueType::exception(), e.to_string())
28 })?,
29 );
30
31 let indexing_worker = search_indexing::IndexingWorker::new(config).await?;
32
33 let handler = indexing_worker.run().await?;
34
35 handler.await.map_err(|e| {
36 OperationOutcomeError::fatal(
37 haste_fhir_model::r4::generated::terminology::IssueType::exception(),
38 format!("Worker task failed: {:?}", e),
39 )
40 })?;
41
42 Ok(())
43 }
44 Some(WorkerCommands::WalWorker) => todo!(),
45 }
46}
47
48// async fn create_wal_worker() -> Result<(), Box<dyn std::error::Error>> {
49// let config = get_config::<WALWorkerEnvironmentVariables>("environment".into());
50
51// let connection_url = config
52// .get(WALWorkerEnvironmentVariables::DatabaseURL)
53// .expect(&format!(
54// "'{}' variable not set",
55// String::from(WALWorkerEnvironmentVariables::DatabaseURL)
56// ));
57
58// let slot_name = config
59// .get(WALWorkerEnvironmentVariables::PGSlotName)
60// .expect(&format!(
61// "'{}' variable not set",
62// String::from(WALWorkerEnvironmentVariables::PGSlotName)
63// ));
64// let publication_name = config
65// .get(WALWorkerEnvironmentVariables::PGPublicationName)
66// .expect(&format!(
67// "'{}' variable not set",
68// String::from(WALWorkerEnvironmentVariables::PGPublicationName)
69// ));
70
71// wal_worker(slot_name, publication_name, &connection_url).await;
72
73// Ok(())
74// }