mod executor;
mod utils;
pub use executor::ClickHouseExecutor;
use crate::application::{Executor, ExecutorError};
use crate::domain::Asset;
use async_trait::async_trait;
use std::time::Instant;
use super::utils::{fmt_duration, SLOW_THRESHOLD};
use utils::run_asset;
#[async_trait]
impl Executor for ClickHouseExecutor {
async fn run(&self, asset: &Asset) -> Result<(), ExecutorError> {
tracing::debug!(asset = %asset, kind = %asset.kind(), "starting");
let start = Instant::now();
run_asset(
self.client(),
self.default_database(),
self.require_order_by(),
asset,
)
.await?;
let elapsed = start.elapsed();
if elapsed >= SLOW_THRESHOLD {
tracing::warn!(
asset = %asset,
kind = %asset.kind(),
elapsed = %fmt_duration(elapsed),
threshold = %fmt_duration(SLOW_THRESHOLD),
"slow query"
);
} else {
tracing::info!(
asset = %asset,
kind = %asset.kind(),
elapsed = %fmt_duration(elapsed),
"done"
);
}
Ok(())
}
}