pub struct CatalogJobScheduleSpec<'a> {
pub name: &'a str,
pub job_type: &'a str,
pub cron_expr: &'a str,
pub payload_template: &'a Value,
pub is_active: bool,
pub organization_id: Option<Uuid>,
pub max_jitter_seconds: i32,
pub next_fire_at: Option<DateTime<Utc>>,
}Expand description
Catalog-owned cron schedule definition synced to job_schedules at startup.
Specs are validated before database writes. Names and cron expressions must
be non-empty without surrounding whitespace, cron expressions must parse as
UTC cron schedules, and max_jitter_seconds must be in the inclusive range
0..=JOB_SCHEDULE_MAX_JITTER_SECONDS.
§Example
use runledger_runtime::catalog::CatalogJobScheduleSpec;
let payload = serde_json::json!({ "kind": "refresh" });
let spec = CatalogJobScheduleSpec {
name: "profiles.refresh.hourly",
job_type: "profiles.refresh",
cron_expr: "0 0 * * * *",
payload_template: &payload,
is_active: true,
organization_id: None,
max_jitter_seconds: 0,
next_fire_at: None,
};
assert_eq!(spec.name, "profiles.refresh.hourly");Fields§
§name: &'a strUnique schedule name. This is the global job_schedules.name key and
must be non-empty without surrounding whitespace.
job_type: &'a strCatalog job type enqueued when the schedule fires. The job type must be
registered and effectively enabled in the super::JobCatalog used for
schedule registration or sync.
cron_expr: &'a strUTC cron expression without surrounding whitespace.
On conflict, catalog sync preserves the existing next_fire_at cursor
when this expression is unchanged. When this expression changes, the
synced next_fire_at value becomes the stored cursor.
payload_template: &'a ValueJSON payload template copied into scheduled jobs.
is_active: boolDesired active state after sync. Applications can map feature flags to this value before calling catalog schedule sync.
organization_id: Option<Uuid>Optional organization scope copied into jobs for a new schedule.
max_jitter_seconds: i32Maximum deterministic jitter, in seconds, applied to future fire times.
Must be between 0 and JOB_SCHEDULE_MAX_JITTER_SECONDS, inclusive.
next_fire_at: Option<DateTime<Utc>>Next UTC instant at which the schedule is due. Defaults to Utc::now()
when unset at sync time.
This value is used for new rows and for existing rows whose cron expression changed. Existing rows with the same cron expression keep their stored cursor.
Trait Implementations§
Source§impl<'a> Clone for CatalogJobScheduleSpec<'a>
impl<'a> Clone for CatalogJobScheduleSpec<'a>
Source§fn clone(&self) -> CatalogJobScheduleSpec<'a>
fn clone(&self) -> CatalogJobScheduleSpec<'a>
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl<'a> Debug for CatalogJobScheduleSpec<'a>
impl<'a> Debug for CatalogJobScheduleSpec<'a>
impl<'a> Eq for CatalogJobScheduleSpec<'a>
Source§impl<'a> PartialEq for CatalogJobScheduleSpec<'a>
impl<'a> PartialEq for CatalogJobScheduleSpec<'a>
Source§fn eq(&self, other: &CatalogJobScheduleSpec<'a>) -> bool
fn eq(&self, other: &CatalogJobScheduleSpec<'a>) -> bool
self and other values to be equal, and is used by ==.impl<'a> StructuralPartialEq for CatalogJobScheduleSpec<'a>
Auto Trait Implementations§
impl<'a> Freeze for CatalogJobScheduleSpec<'a>
impl<'a> RefUnwindSafe for CatalogJobScheduleSpec<'a>
impl<'a> Send for CatalogJobScheduleSpec<'a>
impl<'a> Sync for CatalogJobScheduleSpec<'a>
impl<'a> Unpin for CatalogJobScheduleSpec<'a>
impl<'a> UnsafeUnpin for CatalogJobScheduleSpec<'a>
impl<'a> UnwindSafe for CatalogJobScheduleSpec<'a>
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<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
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> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more