pub struct Job {Show 14 fields
pub id: String,
pub job_type: String,
pub payload: HashMap<String, Value>,
pub priority: JobPriority,
pub status: JobStatus,
pub max_retries: u32,
pub retry_count: u32,
pub created_at: DateTime<Utc>,
pub scheduled_at: Option<DateTime<Utc>>,
pub started_at: Option<DateTime<Utc>>,
pub completed_at: Option<DateTime<Utc>>,
pub timeout_seconds: Option<u64>,
pub last_heartbeat: u64,
pub lease_duration: u64,
}Expand description
A durable background job
Represents a unit of work that can be queued, scheduled, retried, and tracked. Jobs are persisted to disk and survive restarts. Use the builder pattern to configure job properties.
§Examples
use aurora_db::workers::{Job, JobPriority};
use serde_json::json;
// Simple job
let job = Job::new("send_email")
.add_field("to", json!("user@example.com"))
.add_field("subject", json!("Welcome!"));
// Job with all options
let job = Job::new("process_video")
.add_field("video_id", json!("vid-123"))
.add_field("resolution", json!("1080p"))
.with_priority(JobPriority::High)
.with_max_retries(5)
.with_timeout(600) // 10 minutes
.scheduled_at(chrono::Utc::now() + chrono::Duration::hours(1));Fields§
§id: String§job_type: String§payload: HashMap<String, Value>§priority: JobPriority§status: JobStatus§max_retries: u32§retry_count: u32§created_at: DateTime<Utc>§scheduled_at: Option<DateTime<Utc>>§started_at: Option<DateTime<Utc>>§completed_at: Option<DateTime<Utc>>§timeout_seconds: Option<u64>§last_heartbeat: u64Unix timestamp of last “I’m alive” signal from worker (for Reaper)
lease_duration: u64Seconds before worker is considered dead (default: 30)
Implementations§
Source§impl Job
impl Job
Sourcepub fn new(job_type: impl Into<String>) -> Self
pub fn new(job_type: impl Into<String>) -> Self
Create a new job
Creates a job with default settings:
- Priority: Normal
- Max retries: 3
- Timeout: 5 minutes
- Status: Pending
§Arguments
job_type- Type identifier for routing to the correct handler
§Examples
// Create different job types let email = Job::new(“send_email”); let image = Job::new(“resize_image”); let report = Job::new(“generate_report”);
Sourcepub fn with_payload(self, payload: HashMap<String, Value>) -> Self
pub fn with_payload(self, payload: HashMap<String, Value>) -> Self
Set job payload from a HashMap
Replaces the entire payload with the provided HashMap.
For adding individual fields, use add_field() instead.
§Examples
use std::collections::HashMap; use serde_json::json;
let mut payload = HashMap::new(); payload.insert(“user_id”.to_string(), json!(“123”)); payload.insert(“amount”.to_string(), json!(99.99));
let job = Job::new(“process_payment”) .with_payload(payload);
Sourcepub fn add_field(self, key: impl Into<String>, value: Value) -> Self
pub fn add_field(self, key: impl Into<String>, value: Value) -> Self
Add a single field to the job payload
Use this for building the payload incrementally. Can be chained multiple times.
§Examples
use serde_json::json;
let job = Job::new(“send_email”) .add_field(“to”, json!(“user@example.com”)) .add_field(“subject”, json!(“Welcome!”)) .add_field(“template”, json!(“welcome_email”)) .add_field(“vars”, json!({“name”: “Alice”}));
Sourcepub fn with_priority(self, priority: JobPriority) -> Self
pub fn with_priority(self, priority: JobPriority) -> Self
Set job priority
Higher priority jobs are executed before lower priority ones.
Default is JobPriority::Normal.
§Examples
// Critical - payments, security operations let payment = Job::new(“charge_card”) .with_priority(JobPriority::Critical);
// High - user-facing operations let notification = Job::new(“push_notification”) .with_priority(JobPriority::High);
// Low - background cleanup, analytics let cleanup = Job::new(“clean_old_logs”) .with_priority(JobPriority::Low);
Sourcepub fn with_max_retries(self, max_retries: u32) -> Self
pub fn with_max_retries(self, max_retries: u32) -> Self
Set maximum retry attempts
If a job fails, it will be retried up to this many times with exponential backoff. Default is 3 retries.
§Examples
// Network operation - retry more let api_call = Job::new(“fetch_api_data”) .with_max_retries(5);
// Critical operation - don’t retry let one_time = Job::new(“send_invoice”) .with_max_retries(0);
// Flaky operation - retry extensively let external = Job::new(“third_party_webhook”) .with_max_retries(10);
Sourcepub fn scheduled_at(self, at: DateTime<Utc>) -> Self
pub fn scheduled_at(self, at: DateTime<Utc>) -> Self
Schedule job for later execution
Job will not be executed until the specified time. Useful for reminders, scheduled reports, delayed notifications.
§Examples
use chrono::{Utc, Duration};
// Run in 1 hour let reminder = Job::new(“send_reminder”) .add_field(“message”, json!(“Meeting starts soon”)) .scheduled_at(Utc::now() + Duration::hours(1));
// Run at specific time let report = Job::new(“daily_report”) .scheduled_at(Utc::now().date_naive().and_hms_opt(9, 0, 0).unwrap());
// Delayed retry pattern let retry = Job::new(“retry_failed_upload”) .scheduled_at(Utc::now() + Duration::minutes(30));
Sourcepub fn with_timeout(self, seconds: u64) -> Self
pub fn with_timeout(self, seconds: u64) -> Self
Set job execution timeout
Job will be terminated if it runs longer than this. Default is 300 seconds (5 minutes).
§Examples
// Quick task let quick = Job::new(“send_sms”) .with_timeout(30); // 30 seconds
// Long-running task let video = Job::new(“transcode_video”) .with_timeout(3600); // 1 hour
// Very long task let batch = Job::new(“process_millions_of_records”) .with_timeout(7200); // 2 hours
Sourcepub fn should_run(&self) -> bool
pub fn should_run(&self) -> bool
Check if job should be executed (based on schedule)
Sourcepub fn mark_running(&mut self)
pub fn mark_running(&mut self)
Mark job as running
Sourcepub fn touch(&mut self)
pub fn touch(&mut self)
Update heartbeat timestamp to “now”
Workers should call this periodically while processing a job. The Reaper uses this to detect dead workers.
Sourcepub fn is_heartbeat_expired(&self) -> bool
pub fn is_heartbeat_expired(&self) -> bool
Check if job’s heartbeat has expired (worker presumed dead)
Sourcepub fn with_lease_duration(self, seconds: u64) -> Self
pub fn with_lease_duration(self, seconds: u64) -> Self
Set custom lease duration
Sourcepub fn mark_completed(&mut self)
pub fn mark_completed(&mut self)
Mark job as completed
Sourcepub fn mark_failed(&mut self, error: String)
pub fn mark_failed(&mut self, error: String)
Mark job as failed
Sourcepub fn next_retry_delay(&self) -> Duration
pub fn next_retry_delay(&self) -> Duration
Calculate next retry delay (exponential backoff)
Trait Implementations§
Source§impl<'de> Deserialize<'de> for Job
impl<'de> Deserialize<'de> for Job
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Auto Trait Implementations§
impl Freeze for Job
impl RefUnwindSafe for Job
impl Send for Job
impl Sync for Job
impl Unpin for Job
impl UnsafeUnpin for Job
impl UnwindSafe for Job
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<D> OwoColorize for D
impl<D> OwoColorize for D
Source§fn fg<C>(&self) -> FgColorDisplay<'_, C, Self>where
C: Color,
fn fg<C>(&self) -> FgColorDisplay<'_, C, Self>where
C: Color,
Source§fn bg<C>(&self) -> BgColorDisplay<'_, C, Self>where
C: Color,
fn bg<C>(&self) -> BgColorDisplay<'_, C, Self>where
C: Color,
Source§fn black(&self) -> FgColorDisplay<'_, Black, Self>
fn black(&self) -> FgColorDisplay<'_, Black, Self>
Source§fn on_black(&self) -> BgColorDisplay<'_, Black, Self>
fn on_black(&self) -> BgColorDisplay<'_, Black, Self>
Source§fn red(&self) -> FgColorDisplay<'_, Red, Self>
fn red(&self) -> FgColorDisplay<'_, Red, Self>
Source§fn on_red(&self) -> BgColorDisplay<'_, Red, Self>
fn on_red(&self) -> BgColorDisplay<'_, Red, Self>
Source§fn green(&self) -> FgColorDisplay<'_, Green, Self>
fn green(&self) -> FgColorDisplay<'_, Green, Self>
Source§fn on_green(&self) -> BgColorDisplay<'_, Green, Self>
fn on_green(&self) -> BgColorDisplay<'_, Green, Self>
Source§fn yellow(&self) -> FgColorDisplay<'_, Yellow, Self>
fn yellow(&self) -> FgColorDisplay<'_, Yellow, Self>
Source§fn on_yellow(&self) -> BgColorDisplay<'_, Yellow, Self>
fn on_yellow(&self) -> BgColorDisplay<'_, Yellow, Self>
Source§fn blue(&self) -> FgColorDisplay<'_, Blue, Self>
fn blue(&self) -> FgColorDisplay<'_, Blue, Self>
Source§fn on_blue(&self) -> BgColorDisplay<'_, Blue, Self>
fn on_blue(&self) -> BgColorDisplay<'_, Blue, Self>
Source§fn magenta(&self) -> FgColorDisplay<'_, Magenta, Self>
fn magenta(&self) -> FgColorDisplay<'_, Magenta, Self>
Source§fn on_magenta(&self) -> BgColorDisplay<'_, Magenta, Self>
fn on_magenta(&self) -> BgColorDisplay<'_, Magenta, Self>
Source§fn purple(&self) -> FgColorDisplay<'_, Magenta, Self>
fn purple(&self) -> FgColorDisplay<'_, Magenta, Self>
Source§fn on_purple(&self) -> BgColorDisplay<'_, Magenta, Self>
fn on_purple(&self) -> BgColorDisplay<'_, Magenta, Self>
Source§fn cyan(&self) -> FgColorDisplay<'_, Cyan, Self>
fn cyan(&self) -> FgColorDisplay<'_, Cyan, Self>
Source§fn on_cyan(&self) -> BgColorDisplay<'_, Cyan, Self>
fn on_cyan(&self) -> BgColorDisplay<'_, Cyan, Self>
Source§fn white(&self) -> FgColorDisplay<'_, White, Self>
fn white(&self) -> FgColorDisplay<'_, White, Self>
Source§fn on_white(&self) -> BgColorDisplay<'_, White, Self>
fn on_white(&self) -> BgColorDisplay<'_, White, Self>
Source§fn default_color(&self) -> FgColorDisplay<'_, Default, Self>
fn default_color(&self) -> FgColorDisplay<'_, Default, Self>
Source§fn on_default_color(&self) -> BgColorDisplay<'_, Default, Self>
fn on_default_color(&self) -> BgColorDisplay<'_, Default, Self>
Source§fn bright_black(&self) -> FgColorDisplay<'_, BrightBlack, Self>
fn bright_black(&self) -> FgColorDisplay<'_, BrightBlack, Self>
Source§fn on_bright_black(&self) -> BgColorDisplay<'_, BrightBlack, Self>
fn on_bright_black(&self) -> BgColorDisplay<'_, BrightBlack, Self>
Source§fn bright_red(&self) -> FgColorDisplay<'_, BrightRed, Self>
fn bright_red(&self) -> FgColorDisplay<'_, BrightRed, Self>
Source§fn on_bright_red(&self) -> BgColorDisplay<'_, BrightRed, Self>
fn on_bright_red(&self) -> BgColorDisplay<'_, BrightRed, Self>
Source§fn bright_green(&self) -> FgColorDisplay<'_, BrightGreen, Self>
fn bright_green(&self) -> FgColorDisplay<'_, BrightGreen, Self>
Source§fn on_bright_green(&self) -> BgColorDisplay<'_, BrightGreen, Self>
fn on_bright_green(&self) -> BgColorDisplay<'_, BrightGreen, Self>
Source§fn bright_yellow(&self) -> FgColorDisplay<'_, BrightYellow, Self>
fn bright_yellow(&self) -> FgColorDisplay<'_, BrightYellow, Self>
Source§fn on_bright_yellow(&self) -> BgColorDisplay<'_, BrightYellow, Self>
fn on_bright_yellow(&self) -> BgColorDisplay<'_, BrightYellow, Self>
Source§fn bright_blue(&self) -> FgColorDisplay<'_, BrightBlue, Self>
fn bright_blue(&self) -> FgColorDisplay<'_, BrightBlue, Self>
Source§fn on_bright_blue(&self) -> BgColorDisplay<'_, BrightBlue, Self>
fn on_bright_blue(&self) -> BgColorDisplay<'_, BrightBlue, Self>
Source§fn bright_magenta(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
fn bright_magenta(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
Source§fn on_bright_magenta(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
fn on_bright_magenta(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
Source§fn bright_purple(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
fn bright_purple(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
Source§fn on_bright_purple(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
fn on_bright_purple(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
Source§fn bright_cyan(&self) -> FgColorDisplay<'_, BrightCyan, Self>
fn bright_cyan(&self) -> FgColorDisplay<'_, BrightCyan, Self>
Source§fn on_bright_cyan(&self) -> BgColorDisplay<'_, BrightCyan, Self>
fn on_bright_cyan(&self) -> BgColorDisplay<'_, BrightCyan, Self>
Source§fn bright_white(&self) -> FgColorDisplay<'_, BrightWhite, Self>
fn bright_white(&self) -> FgColorDisplay<'_, BrightWhite, Self>
Source§fn on_bright_white(&self) -> BgColorDisplay<'_, BrightWhite, Self>
fn on_bright_white(&self) -> BgColorDisplay<'_, BrightWhite, Self>
Source§fn bold(&self) -> BoldDisplay<'_, Self>
fn bold(&self) -> BoldDisplay<'_, Self>
Source§fn dimmed(&self) -> DimDisplay<'_, Self>
fn dimmed(&self) -> DimDisplay<'_, Self>
Source§fn italic(&self) -> ItalicDisplay<'_, Self>
fn italic(&self) -> ItalicDisplay<'_, Self>
Source§fn underline(&self) -> UnderlineDisplay<'_, Self>
fn underline(&self) -> UnderlineDisplay<'_, Self>
Source§fn blink(&self) -> BlinkDisplay<'_, Self>
fn blink(&self) -> BlinkDisplay<'_, Self>
Source§fn blink_fast(&self) -> BlinkFastDisplay<'_, Self>
fn blink_fast(&self) -> BlinkFastDisplay<'_, Self>
Source§fn reversed(&self) -> ReversedDisplay<'_, Self>
fn reversed(&self) -> ReversedDisplay<'_, Self>
Source§fn strikethrough(&self) -> StrikeThroughDisplay<'_, Self>
fn strikethrough(&self) -> StrikeThroughDisplay<'_, Self>
Source§fn color<Color>(&self, color: Color) -> FgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
fn color<Color>(&self, color: Color) -> FgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
OwoColorize::fg or
a color-specific method, such as OwoColorize::green, Read moreSource§fn on_color<Color>(&self, color: Color) -> BgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
fn on_color<Color>(&self, color: Color) -> BgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
OwoColorize::bg or
a color-specific method, such as OwoColorize::on_yellow, Read more