simple-queue-web 0.1.0

Web UI for inspecting and managing simple-queue persistent job queues backed by PostgreSQL
use diesel::PgConnection;
use diesel::prelude::*;

pub fn establish_test_connection() -> PgConnection {
    let database_url = std::env::var("DATABASE_URL")
        .unwrap_or_else(|_| "postgres://postgres:postgres@localhost:5432/simple_queue".into());
    let mut conn = PgConnection::establish(&database_url)
        .unwrap_or_else(|e| panic!("Failed to connect to {}: {}", database_url, e));
    conn.begin_test_transaction()
        .expect("Failed to begin test transaction");
    crate::queries::set_statement_timeout(&mut conn);
    conn
}

pub fn insert_test_job(
    conn: &mut PgConnection,
    queue: &str,
    status: &str,
    attempt: i32,
    max_attempts: i32,
    reprocess_count: i32,
) -> uuid::Uuid {
    let id = uuid::Uuid::new_v4();
    diesel::insert_into(crate::schema::job_queue::table)
        .values((
            crate::schema::job_queue::id.eq(id),
            crate::schema::job_queue::queue.eq(queue),
            crate::schema::job_queue::status.eq(status),
            crate::schema::job_queue::attempt.eq(attempt),
            crate::schema::job_queue::max_attempts.eq(max_attempts),
            crate::schema::job_queue::reprocess_count.eq(reprocess_count),
        ))
        .execute(conn)
        .expect("Failed to insert test job");
    id
}

pub fn insert_test_dlq_job(
    conn: &mut PgConnection,
    queue: &str,
    status: &str,
    attempt: i32,
    max_attempts: i32,
    reprocess_count: i32,
) -> uuid::Uuid {
    let id = uuid::Uuid::new_v4();
    diesel::insert_into(crate::schema::job_queue_dlq::table)
        .values((
            crate::schema::job_queue_dlq::id.eq(id),
            crate::schema::job_queue_dlq::queue.eq(queue),
            crate::schema::job_queue_dlq::status.eq(status),
            crate::schema::job_queue_dlq::attempt.eq(attempt),
            crate::schema::job_queue_dlq::max_attempts.eq(max_attempts),
            crate::schema::job_queue_dlq::reprocess_count.eq(reprocess_count),
        ))
        .execute(conn)
        .expect("Failed to insert test DLQ job");
    id
}

pub fn insert_test_archive_job(
    conn: &mut PgConnection,
    queue: &str,
    status: &str,
    attempt: i32,
    max_attempts: i32,
    reprocess_count: i32,
) -> uuid::Uuid {
    let id = uuid::Uuid::new_v4();
    diesel::insert_into(crate::schema::job_queue_archive::table)
        .values((
            crate::schema::job_queue_archive::id.eq(id),
            crate::schema::job_queue_archive::queue.eq(queue),
            crate::schema::job_queue_archive::status.eq(status),
            crate::schema::job_queue_archive::attempt.eq(attempt),
            crate::schema::job_queue_archive::max_attempts.eq(max_attempts),
            crate::schema::job_queue_archive::reprocess_count.eq(reprocess_count),
        ))
        .execute(conn)
        .expect("Failed to insert test archive job");
    id
}

pub fn existing_job_queue_count(conn: &mut PgConnection) -> i64 {
    crate::schema::job_queue::table
        .count()
        .get_result(conn)
        .unwrap_or(0)
}