systemprompt_generator/jobs/
content_prerender.rs1use anyhow::Result;
2use async_trait::async_trait;
3use systemprompt_database::DbPool;
4use systemprompt_provider_contracts::{Job, JobContext, JobResult};
5
6use crate::prerender::prerender_content;
7
8#[derive(Debug, Clone, Copy)]
9pub struct ContentPrerenderJob;
10
11#[async_trait]
12impl Job for ContentPrerenderJob {
13 fn name(&self) -> &'static str {
14 "content_prerender"
15 }
16
17 fn description(&self) -> &'static str {
18 "Prerenders all configured content sources to static HTML"
19 }
20
21 fn schedule(&self) -> &'static str {
22 "0 0 4 * * *"
23 }
24
25 async fn execute(&self, ctx: &JobContext) -> Result<JobResult> {
26 let start_time = std::time::Instant::now();
27 let db_pool = std::sync::Arc::clone(
28 ctx.db_pool::<DbPool>()
29 .ok_or_else(|| anyhow::anyhow!("DbPool not available in job context"))?,
30 );
31
32 tracing::info!("Job started");
33 prerender_content(db_pool).await?;
34 let duration_ms = start_time.elapsed().as_millis() as u64;
35 tracing::info!(duration_ms = duration_ms, "Job completed");
36
37 Ok(JobResult::success().with_duration(duration_ms))
38 }
39}
40
41systemprompt_provider_contracts::submit_job!(&ContentPrerenderJob);