Skip to main content

apalis_sqlite/queries/
register_worker.rs

1use apalis_core::worker::context::WorkerContext;
2use sqlx::Executor;
3
4use crate::config::Config;
5
6/// Register a new worker in the database
7pub async fn register_worker<'a, E>(
8    executor: E,
9    config: &Config,
10    worker: &WorkerContext,
11    storage_type: &str,
12) -> Result<(), sqlx::Error>
13where
14    E: Executor<'a, Database = sqlx::Sqlite>,
15{
16    let worker_id = worker.name().to_owned();
17    let queue = config.queue.to_string();
18    let layers = worker.get_service().to_owned();
19    let keep_alive = config.heartbeat_interval.as_secs() as i64;
20    let res = sqlx::query_file!(
21        "queries/backend/register_worker.sql",
22        worker_id,
23        queue,
24        storage_type,
25        layers,
26        keep_alive,
27    )
28    .execute(executor)
29    .await?;
30    if res.rows_affected() == 0 {
31        return Err(sqlx::Error::Io(std::io::Error::new(
32            std::io::ErrorKind::AlreadyExists,
33            "WORKER_ALREADY_EXISTS",
34        )));
35    }
36    Ok(())
37}