This commit is contained in:
Timur Gordon
2025-08-01 00:01:08 +02:00
parent 32c2cbe0cc
commit 8ed40ce99c
57 changed files with 2047 additions and 4113 deletions

View File

@@ -8,7 +8,7 @@ name = "supervisor_worker_demo"
path = "supervisor_worker_demo.rs"
[dependencies]
hero_dispatcher = { path = "../dispatcher" }
hero_supervisor = { path = "../supervisor" }
hero_job = { path = "../job" }
tokio = { version = "1.0", features = ["full"] }
redis = { version = "0.25", features = ["tokio-comp"] }

View File

@@ -1,5 +1,5 @@
use colored::*;
use hero_dispatcher::{DispatcherBuilder, ScriptType, JobStatus};
use hero_supervisor::{SupervisorBuilder, ScriptType, JobStatus};
use log::warn;
use std::process::Stdio;
use std::time::Duration;
@@ -8,7 +8,7 @@ use tokio::time::sleep;
/// Supervisor manages worker lifecycle and job execution
pub struct Supervisor {
dispatcher: hero_dispatcher::Dispatcher,
supervisor: hero_supervisor::Supervisor,
worker_processes: Vec<WorkerProcess>,
redis_url: String,
}
@@ -22,9 +22,9 @@ pub struct WorkerProcess {
}
impl Supervisor {
/// Create a new supervisor with dispatcher configuration
/// Create a new supervisor with supervisor configuration
pub async fn new(redis_url: String) -> Result<Self, Box<dyn std::error::Error>> {
let dispatcher = DispatcherBuilder::new()
let supervisor = SupervisorBuilder::new()
.caller_id("supervisor")
.context_id("demo-context")
.redis_url(&redis_url)
@@ -34,7 +34,7 @@ impl Supervisor {
.build()?;
Ok(Self {
dispatcher,
supervisor,
worker_processes: Vec::new(),
redis_url,
})
@@ -109,7 +109,7 @@ impl Supervisor {
/// Submit a job and return the job ID
pub async fn submit_job(&self, script_type: ScriptType, script: &str) -> Result<String, Box<dyn std::error::Error>> {
let job = self.dispatcher
let job = self.supervisor
.new_job()
.script_type(script_type.clone())
.script(script)
@@ -117,7 +117,7 @@ impl Supervisor {
.build()?;
let job_id = job.id.clone();
self.dispatcher.create_job(&job).await?;
self.supervisor.create_job(&job).await?;
println!("{}", format!("📝 Job {} submitted for {}", job_id, script_type.as_str()).cyan());
Ok(job_id)
@@ -134,12 +134,12 @@ impl Supervisor {
return Err("Job execution timeout".into());
}
// Check job status using dispatcher methods
match self.dispatcher.get_job_status(job_id).await {
// Check job status using supervisor methods
match self.supervisor.get_job_status(job_id).await {
Ok(status) => {
match status {
JobStatus::Finished => {
if let Ok(Some(result)) = self.dispatcher.get_job_output(job_id).await {
if let Ok(Some(result)) = self.supervisor.get_job_output(job_id).await {
println!("{}", format!("✅ Job {} completed successfully", job_id).green());
return Ok(result);
}
@@ -163,12 +163,12 @@ impl Supervisor {
/// List all jobs
pub async fn list_jobs(&self) -> Result<Vec<String>, Box<dyn std::error::Error>> {
self.dispatcher.list_jobs().await.map_err(|e| e.into())
self.supervisor.list_jobs().await.map_err(|e| e.into())
}
/// Clear all jobs
pub async fn clear_all_jobs(&self) -> Result<usize, Box<dyn std::error::Error>> {
self.dispatcher.clear_all_jobs().await.map_err(|e| e.into())
self.supervisor.clear_all_jobs().await.map_err(|e| e.into())
}
/// Get worker status