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 UnwindSafe for Job
Blanket Implementations§
Source§impl<T> ArchivePointee for T
impl<T> ArchivePointee for T
Source§type ArchivedMetadata = ()
type ArchivedMetadata = ()
Source§fn pointer_metadata(
_: &<T as ArchivePointee>::ArchivedMetadata,
) -> <T as Pointee>::Metadata
fn pointer_metadata( _: &<T as ArchivePointee>::ArchivedMetadata, ) -> <T as Pointee>::Metadata
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<F, W, T, D> Deserialize<With<T, W>, D> for F
impl<F, W, T, D> Deserialize<With<T, W>, D> for F
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<T> LayoutRaw for T
impl<T> LayoutRaw for T
Source§fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
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