Quantum behaviour (Quantum v3.4.0) View Source

Defines a quantum Scheduler.

When used, the quantum scheduler expects the :otp_app as option. The :otp_app should point to an OTP application that has the quantum runner configuration. For example, the quantum scheduler:

defmodule MyApp.Scheduler do
  use Quantum, otp_app: :my_app
end

Could be configured with:

config :my_app, MyApp.Scheduler,
  jobs: [
    {"@daily", {Backup, :backup, []}},
  ]

Configuration:

  • :clock_broadcaster_name - GenServer name of clock broadcaster
    (unstable, may break without major release until declared stable)

  • :execution_broadcaster_name - GenServer name of execution broadcaster
    (unstable, may break without major release until declared stable)

  • :executor_supervisor_name - GenServer name of execution supervisor
    (unstable, may break without major release until declared stable)

  • :debug_logging - Turn on debug logging

  • :jobs - list of cron jobs to execute

  • :job_broadcaster_name - GenServer name of job broadcaster
    (unstable, may break without major release until declared stable)

  • :name - GenServer name of scheduler
    (unstable, may break without major release until declared stable)

  • :node_selector_broadcaster_name - GenServer name of node selector broadcaster
    (unstable, may break without major release until declared stable)

  • :overlap - Default overlap of new Job

  • :otp_app - Application where scheduler runs

  • :run_strategy - Default Run Strategy of new Job

  • :schedule - Default schedule of new Job

  • :storage - Storage to use for persistence

  • :storage_name - GenServer name of storage
    (unstable, may break without major release until declared stable)

  • :supervisor_module - Module to supervise scheduler
    Can be overwritten to supervise processes differently (for example for clustering)
    (unstable, may break without major release until declared stable)

  • :task_registry_name - GenServer name of task registry
    (unstable, may break without major release until declared stable)

  • :task_supervisor_name - GenServer name of task supervisor
    (unstable, may break without major release until declared stable)

  • :timeout - Sometimes, you may come across GenServer timeout errors esp. when you have too many jobs or high load. The default GenServer.call/3 timeout is 5_000.

  • :timezone - Default timezone of new Job

Link to this section Summary

Types

t()

Quantum Scheduler Implementation

Callbacks

Activates a job by name

Adds a new job

Deactivates a job by name

Deletes all jobs

Deletes a job by name

Resolves a job by name

A callback executed when the quantum starts.

Returns the list of currently defined jobs

Creates a new Job. The job can be added by calling add_job/1.

Runs a job by name once

Starts supervision and return {:ok, pid} or just :ok if nothing needs to be done.

Shuts down the quantum represented by the given pid.

Link to this section Types

Specs

t() :: module()

Quantum Scheduler Implementation

Link to this section Callbacks

Link to this callback

activate_job(stage, atom)

View Source

Specs

activate_job(GenStage.stage(), atom()) :: :ok

Activates a job by name

Specs

Adds a new job

Specs

config(Keyword.t()) :: Keyword.t()
Link to this callback

deactivate_job(stage, atom)

View Source

Specs

deactivate_job(GenStage.stage(), atom()) :: :ok

Deactivates a job by name

Specs

delete_all_jobs(GenStage.stage()) :: :ok

Deletes all jobs

Specs

delete_job(GenStage.stage(), atom()) :: :ok

Deletes a job by name

Specs

find_job(GenStage.stage(), atom()) :: Quantum.Job.t() | nil

Resolves a job by name

Specs

init(config :: Keyword.t()) :: Keyword.t()

A callback executed when the quantum starts.

It takes the quantum configuration that is stored in the application environment, and may change it to suit the application business.

It must return the updated list of configuration

Specs

jobs(GenStage.stage()) :: [Quantum.Job.t()]

Returns the list of currently defined jobs

Specs

new_job(opts :: Keyword.t()) :: Quantum.Job.t()

Creates a new Job. The job can be added by calling add_job/1.

Specs

run_job(GenStage.stage(), atom()) :: :ok

Runs a job by name once

Specs

start_link(opts :: Keyword.t()) ::
  {:ok, pid()} | {:error, {:already_started, pid()}} | {:error, term()}

Starts supervision and return {:ok, pid} or just :ok if nothing needs to be done.

Returns {:error, {:already_started, pid}} if the scheduler is already started or {:error, term} in case anything else goes wrong.

Options

See the configuration in the moduledoc for options.

Specs

stop(server :: GenServer.server(), timeout()) :: :ok

Shuts down the quantum represented by the given pid.