wip: add logging capabilities

This commit is contained in:
Alexander Navarro 2025-05-08 16:52:01 -04:00
parent d84c58fd1c
commit 3d12877e27
5 changed files with 384 additions and 17 deletions

View file

@ -4,6 +4,7 @@ use serde::Serialize;
use sqlx::sqlite::{SqliteConnectOptions, SqliteJournalMode};
use sqlx::{QueryBuilder, Sqlite, SqlitePool};
use tokio::fs;
use tracing::{info, instrument};
static SQLITE_BIND_LIMIT: usize = 32766;
@ -20,6 +21,7 @@ pub trait TaskPayload {
fn get_key(&self) -> String;
}
#[derive(Debug)]
pub struct TaskManager {
pool: SqlitePool,
}
@ -51,9 +53,10 @@ impl TaskManager {
Ok(pool)
}
#[instrument(skip(self, values))]
pub async fn load_tasks<T>(&self, values: Vec<T>) -> crate::Result<()>
where
T: TaskPayload + Serialize,
T: TaskPayload + Serialize + std::fmt::Debug,
{
let mut tx = self.pool.begin().await?;
let mut builder: QueryBuilder<'_, Sqlite> =
@ -65,6 +68,7 @@ impl TaskManager {
.collect();
let mut affected_rows = 0;
// Chunk the query by the size limit of bind params
for chunk in args?.chunks(SQLITE_BIND_LIMIT / 3) {
builder.push_values(chunk, |mut builder, item| {
@ -77,12 +81,14 @@ impl TaskManager {
let query = builder.build();
query.execute(&mut *tx).await?;
affected_rows += query.execute(&mut *tx).await?.rows_affected();
builder.reset();
}
tx.commit().await?;
info!("{} rows inserted.", affected_rows);
Ok(())
}
}