Durable.Scheduler.API (Durable v0.1.0-rc)
View SourceCRUD operations for scheduled workflows.
This module provides functions to create, read, update, and delete scheduled workflows that run on cron expressions.
Usage
# Create a schedule
Durable.schedule(MyApp.DailyReport, "0 9 * * *", name: "daily_report")
# List schedules
Durable.list_schedules(enabled: true)
# Update a schedule
Durable.update_schedule("daily_report", cron: "0 10 * * *")
# Delete a schedule
Durable.delete_schedule("daily_report")
Summary
Functions
Deletes a scheduled workflow by name.
Disables a scheduled workflow.
Enables a scheduled workflow.
Gets a scheduled workflow by name.
Lists scheduled workflows with optional filters.
Registers schedules from a module's @schedule attributes.
Registers schedules from multiple modules.
Creates a new scheduled workflow.
Triggers a scheduled workflow immediately.
Updates a scheduled workflow.
Types
Functions
Deletes a scheduled workflow by name.
Examples
:ok = Durable.delete_schedule("daily_report")
@spec disable_schedule( String.t(), keyword() ) :: {:ok, Durable.Storage.Schemas.ScheduledWorkflow.t()} | {:error, term()}
Disables a scheduled workflow.
Examples
{:ok, schedule} = Durable.disable_schedule("daily_report")
@spec enable_schedule( String.t(), keyword() ) :: {:ok, Durable.Storage.Schemas.ScheduledWorkflow.t()} | {:error, term()}
Enables a scheduled workflow.
Examples
{:ok, schedule} = Durable.enable_schedule("daily_report")
@spec get_schedule( String.t(), keyword() ) :: {:ok, Durable.Storage.Schemas.ScheduledWorkflow.t()} | {:error, :not_found}
Gets a scheduled workflow by name.
Examples
{:ok, schedule} = Durable.get_schedule("daily_report")
{:error, :not_found} = Durable.get_schedule("nonexistent")
@spec list_schedules(keyword()) :: [Durable.Storage.Schemas.ScheduledWorkflow.t()]
Lists scheduled workflows with optional filters.
Filters
:enabled- Filter by enabled status:workflow_module- Filter by module:queue- Filter by queue:limit- Maximum results (default: 100):offset- Offset for pagination:durable- Durable instance name
Examples
schedules = Durable.list_schedules(enabled: true)
schedules = Durable.list_schedules(queue: :reports, limit: 10)
Registers schedules from a module's @schedule attributes.
This is called automatically during startup for modules listed in
the scheduled_modules config option.
Uses upsert semantics: updates cron/timezone/input/queue but preserves the enabled status and run times for existing schedules.
Examples
:ok = Durable.Scheduler.API.register(MyApp.DailyReport)
Registers schedules from multiple modules.
Examples
:ok = Durable.Scheduler.API.register_all([MyApp.Reports, MyApp.Cleanup])
@spec schedule(module(), String.t(), schedule_opts()) :: {:ok, Durable.Storage.Schemas.ScheduledWorkflow.t()} | {:error, term()}
Creates a new scheduled workflow.
Arguments
module- The workflow modulecron_expression- Cron expression (e.g., "0 9 *" for 9am daily)opts- Options
Options
:name- Schedule name (defaults to workflow name):workflow- Workflow name (defaults to first workflow in module):input- Input data for each execution:timezone- Timezone for cron (default: "UTC"):queue- Queue to run on (default: :default):enabled- Whether schedule is active (default: true):durable- Durable instance name (default: Durable)
Examples
{:ok, schedule} = Durable.schedule(MyApp.DailyReport, "0 9 * * *")
{:ok, schedule} = Durable.schedule(
MyApp.Reports,
"0 9 * * MON-FRI",
name: "weekday_report",
workflow: "generate_report",
timezone: "America/New_York",
queue: :reports
)
Triggers a scheduled workflow immediately.
This starts a new workflow execution without waiting for the next scheduled time. The schedule's next_run_at is NOT updated.
Options
:input- Override the schedule's input:durable- Durable instance name
Examples
{:ok, workflow_id} = Durable.trigger_schedule("daily_report")
{:ok, workflow_id} = Durable.trigger_schedule("daily_report", input: %{force: true})
@spec update_schedule( String.t(), keyword() ) :: {:ok, Durable.Storage.Schemas.ScheduledWorkflow.t()} | {:error, term()}
Updates a scheduled workflow.
Updatable Fields
:cron_expression- New cron expression:timezone- New timezone:input- New input data:queue- New queue:enabled- Enable/disable
Examples
{:ok, schedule} = Durable.update_schedule("daily_report", cron: "0 10 * * *")
{:ok, schedule} = Durable.update_schedule("daily_report", enabled: false)