All options are set under config :kathikon, ....

Full example

# config/config.exs
config :kathikon,
  queues: [
    default: [concurrency: 10],
    emails: [concurrency: 5],
    reports: [concurrency: 2]
  ],
  poll_interval: 200,
  scheduler_interval: 1_000,
  prune_interval: 60_000,
  retention_period: :timer.hours(24 * 7),
  max_attempts: 20,
  mnesia_copies: :auto,
  storage_backend: Kathikon.Backend.Storage.Mnesia

Options reference

KeyDefaultDescription
:queues[default: [concurrency: 10]]Queue names and per-queue options
:poll_interval200Dispatcher poll period (ms)
:scheduler_interval1000Scheduler tick period (ms)
:prune_interval60000Pruner tick period (ms)
:retention_period604800000 (7 days)How long to keep terminal jobs (ms)
:max_attempts20Default retry limit for new jobs
:mnesia_copies:autoMnesia table storage — :ram, :disc, or :auto
:storage_backendKathikon.Backend.Storage.MnesiaStorage behaviour implementation

Queue options

Each queue entry is a keyword list:

[concurrency: 10]   # max simultaneous Task workers

Access at runtime:

Kathikon.Config.queue_names()      # [:default, :emails, ...]
Kathikon.Config.concurrency(:emails) # 5
Kathikon.Config.queue_config(:emails)

mnesia_copies

ValueBehaviour
:autoram on nonode@nohost and Livebook nodes; disc on other named nodes
:ramIn-memory tables — dev, test, Livebook
:discDurable on disk — production named nodes
# Livebook / local scripts
config :kathikon, mnesia_copies: :ram

Environment-specific overrides

# config/test.exs
import Config

config :kathikon,
  poll_interval: 50,
  scheduler_interval: 50,
  retention_period: 1,
  max_attempts: 3,
  queues: [default: [concurrency: 10], priority: [concurrency: 1]]

Reading config in code

Kathikon.Config.poll_interval()
Kathikon.Config.retention_period()
Kathikon.Config.mnesia_copies()