Skip to main content

haste_health/commands/
worker.rs

1use clap::Subcommand;
2// use haste_config::get_config;
3use haste_fhir_operation_error::OperationOutcomeError;
4use haste_worker::{search_indexing, traits::Worker as _};
5
6// use haste_wal_worker::{WALWorkerEnvironmentVariables, wal_worker};
7
8#[derive(Subcommand, Debug)]
9pub enum WorkerCommands {
10    Worker,
11    WalWorker,
12}
13
14pub async fn worker(command: &Option<WorkerCommands>) -> Result<(), OperationOutcomeError> {
15    match command {
16        None | Some(WorkerCommands::Worker) => {
17            let indexing_worker = search_indexing::IndexingWorker::new().await?;
18
19            let handler = indexing_worker.run().await?;
20
21            handler.await.map_err(|e| {
22                OperationOutcomeError::fatal(
23                    haste_fhir_model::r4::generated::terminology::IssueType::Exception(None),
24                    format!("Worker task failed: {:?}", e),
25                )
26            })?;
27
28            Ok(())
29        }
30        Some(WorkerCommands::WalWorker) => todo!(),
31    }
32}
33
34// async fn create_wal_worker() -> Result<(), Box<dyn std::error::Error>> {
35//     let config = get_config::<WALWorkerEnvironmentVariables>("environment".into());
36
37//     let connection_url = config
38//         .get(WALWorkerEnvironmentVariables::DatabaseURL)
39//         .expect(&format!(
40//             "'{}' variable not set",
41//             String::from(WALWorkerEnvironmentVariables::DatabaseURL)
42//         ));
43
44//     let slot_name = config
45//         .get(WALWorkerEnvironmentVariables::PGSlotName)
46//         .expect(&format!(
47//             "'{}' variable not set",
48//             String::from(WALWorkerEnvironmentVariables::PGSlotName)
49//         ));
50//     let publication_name = config
51//         .get(WALWorkerEnvironmentVariables::PGPublicationName)
52//         .expect(&format!(
53//             "'{}' variable not set",
54//             String::from(WALWorkerEnvironmentVariables::PGPublicationName)
55//         ));
56
57//     wal_worker(slot_name, publication_name, &connection_url).await;
58
59//     Ok(())
60// }