Updates
This commit is contained in:
52
core/supervisor/examples/simple_job.rs
Normal file
52
core/supervisor/examples/simple_job.rs
Normal file
@@ -0,0 +1,52 @@
|
||||
use hero_supervisor::{SupervisorBuilder, ScriptType};
|
||||
use hero_job::JobBuilder as CoreJobBuilder;
|
||||
|
||||
#[tokio::main]
|
||||
async fn main() -> anyhow::Result<()> {
|
||||
// 1) Build a Supervisor
|
||||
let supervisor = SupervisorBuilder::new()
|
||||
.redis_url("redis://127.0.0.1/")
|
||||
.build()
|
||||
.await?;
|
||||
|
||||
// 2) Build a Job (using core job builder to set caller_id, context_id)
|
||||
let job = CoreJobBuilder::new()
|
||||
.caller_id("02abc...caller") // required
|
||||
.context_id("02def...context") // required
|
||||
.script_type(ScriptType::OSIS) // select the OSIS actor (matches configured osis_actor_1)
|
||||
.script("40 + 3") // simple Rhai script
|
||||
.timeout(std::time::Duration::from_secs(10))
|
||||
.build()?; // returns hero_job::Job
|
||||
|
||||
let job_id = job.id.clone();
|
||||
|
||||
// 3a) Store the job in Redis
|
||||
supervisor.create_job(&job).await?;
|
||||
|
||||
// 3b) Start the job (pushes ID to the actor’s Redis queue)
|
||||
supervisor.start_job(&job_id).await?;
|
||||
|
||||
// 3c) Wait until finished, then fetch output
|
||||
use tokio::time::sleep;
|
||||
|
||||
let deadline = std::time::Instant::now() + std::time::Duration::from_secs(10);
|
||||
loop {
|
||||
let status = supervisor.get_job_status(&job_id).await?;
|
||||
if status == hero_supervisor::JobStatus::Finished {
|
||||
break;
|
||||
}
|
||||
if std::time::Instant::now() >= deadline {
|
||||
println!("Job {} timed out waiting for completion (status: {:?})", job_id, status);
|
||||
break;
|
||||
}
|
||||
sleep(std::time::Duration::from_millis(250)).await;
|
||||
}
|
||||
|
||||
if let Some(output) = supervisor.get_job_output(&job_id).await? {
|
||||
println!("Job {} output: {}", job_id, output);
|
||||
} else {
|
||||
println!("Job {} completed with no output field set", job_id);
|
||||
}
|
||||
|
||||
Ok(())
|
||||
}
|
Reference in New Issue
Block a user