use std::sync::Arc;
use chrono::{Duration, Utc};
use chronon::prelude::*;
use chronon_backend_mem::InMemorySchedulerStore;
use chronon_telemetry::ConsoleSink;
#[chronon::script(name = "telemetry_demo")]
#[allow(clippy::unused_async)] async fn telemetry_demo(ctx: Box<dyn ScriptContext>) -> chronon::Result<()> {
let _ = ctx.label();
Ok(())
}
#[tokio::main]
async fn main() -> chronon::Result<()> {
let _ = tracing_subscriber::fmt()
.with_env_filter(
tracing_subscriber::EnvFilter::try_from_default_env()
.unwrap_or_else(|_| tracing_subscriber::EnvFilter::new("info")),
)
.try_init();
let store = Arc::new(InMemorySchedulerStore::new());
let chronon = ChrononBuilder::new()
.scheduler_store(store)
.context_factory(Arc::new(JsonScriptContextFactory))
.telemetry_sink(Arc::new(ConsoleSink))
.embedded()
.auto_registry()
.build()?;
let job = JobBuilder::new(&telemetry_demo())
.name("telemetry-demo-job")
.run_once_at(Utc::now() - Duration::seconds(60))
.build()?;
chronon.coordinator_service().upsert_job(job).await?;
chronon.scheduler.init_partitions().await;
let tick = chronon.tick_once().await?;
assert!(tick.enqueued >= 1, "expected at least one enqueued run");
eprintln!(
"telemetry_console: tick enqueued {} run(s) — see chronon_telemetry lines above",
tick.enqueued
);
Ok(())
}