Skip to main content

CronScheduler

Struct CronScheduler 

Source
pub struct CronScheduler {
    handles: Mutex<HashMap<String, AbortHandle>>,
    shared_store: Option<Arc<Store>>,
    http_client: Client,
    local_url: String,
    auth_key: String,
    broker: Arc<Broker>,
    delivery: OnceLock<Arc<dyn Fn(InjectionRequest, String) -> Pin<Box<dyn Future<Output = Value> + Send>> + Send + Sync>>,
}

Fields§

§handles: Mutex<HashMap<String, AbortHandle>>§shared_store: Option<Arc<Store>>§http_client: Client§local_url: String§auth_key: String§broker: Arc<Broker>§delivery: OnceLock<Arc<dyn Fn(InjectionRequest, String) -> Pin<Box<dyn Future<Output = Value> + Send>> + Send + Sync>>

Implementations§

Source§

impl CronScheduler

Source

pub fn new( shared_store: Option<Arc<Store>>, http_client: Client, local_url: String, auth_key: String, broker: Arc<Broker>, ) -> Arc<Self> ⓘ

Source

pub fn install_delivery( &self, delivery: Arc<dyn Fn(InjectionRequest, String) -> Pin<Box<dyn Future<Output = Value> + Send>> + Send + Sync>, )

Deliver fires in process from now on (see FireDelivery). Once; a second install is ignored.

Source

fn publish_changed(&self)

Source

pub async fn start(self: &Arc<Self>)

Load all enabled jobs from the DB and schedule them. Call once at startup.

Source

pub fn schedule_job(self: &Arc<Self>, job: &CronJob)

Schedule a single job (or reschedule it after a DB change). Replaces any existing task for the same job.id. Call sites that don’t need to account for a simultaneous catch-up fire should pass job.fire_count.

Source

fn schedule_job_with_fires(self: &Arc<Self>, job: &CronJob, initial_fires: i64)

Source

pub fn cancel_job(&self, id: &str)

Stop (abort) a job’s scheduled task without removing it from the DB.

Source

fn disable_job(&self, job_id: &str, reason: &str)

Disable a job in the DB (audit trail preserved, unlike delete), drop its live task handle, and notify listeners. Shared by every self-disabling reason a scheduled job’s own loop hits (max_fires, max_age_secs) — extracted so those call sites don’t each repeat the same three-step disable sequence.

Source

pub(crate) async fn fire( &self, id: &str, prompt: &str, target: &str, target_uid: &str, created_by_uid: &str, )

Fire a cron job: deliver the prompt and record the fire in DB.

Identity M3 (spec §5.4): a job that captured its target’s UID at creation fires BY UID — a job firing at 03:00 must never resolve a name. A job with no UID (created before M3, or by a caller that did not carry one) fires by name as before, counted.

Identity M4c-3 (§6.5.9): delivered in process (FireDelivery), with the creator’s UID as attribution on this instance only — a forwarded hop never carries it. The sender name stays "cron": showing the creator’s name unsigned would make every fire of an agent-created job look forged (its key is on file under that name) and echo each fire into the creator’s pane. A job with no captured creator UID fires as before, counted.

Source

async fn post_fire( &self, id: &str, target_agent: String, prompt: &str, ) -> Option<Value>

The pre-M4c-3 fire: POST to the local inject route with the instance key. Only until Self::install_delivery runs. None when the POST itself failed (logged here).

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> Downcast for T
where T: Any,

§

fn into_any(self: Box<T>) -> Box<dyn Any>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for T
where T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T>) -> Arc<dyn Any + Send + Sync> ⓘ

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<A, B, T> HttpServerConnExec<A, B> for T
where B: Body,

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self> ⓘ

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self> ⓘ

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ

Converts 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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
where F: FnOnce(&Self) -> bool,

Converts 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
§

impl<T> PolicyExt for T
where T: ?Sized,

§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns [Action::Follow] only if self and other return Action::Follow. Read more
§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns [Action::Follow] if either self or other returns Action::Follow. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> ⓘ
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self> ⓘ

Attaches the current default Subscriber to this type, returning a [WithDispatch] wrapper. Read more