Akhet

akhet — Queue dashboard for Maat applications: job runs, throughput, and failed-job recovery.

The queue dashboard for Maat applications. Akhet is the horizon: it is where you watch the queue come up.

It records one row per finished job attempt, reads Khepri's own tables live for depth and failures, and renders both through a Vizier panel — one panel, one login, one layout, alongside the rest of the admin.

Application.configure(...)
    .withExtensions([akhetExtension])   // the recording half
    .create();

Panel(..., extensions: [akhetVizier()]); // the panel half

Two opt-ins on purpose: a worker process wants the recording and has no panel, and the panel is the only half that needs Vizier.

What it shows

  • Queues — pending, reserved, delayed, oldest wait, completions, average runtime and failures, per queue.
  • Job runs — every finished attempt, searchable by job, queue and status.
  • Failed jobs — Khepri's failed list, with Retry and Forget.

What it does not do

Akhet observes workers. It does not supervise them, scale them, or restart them — that belongs to the process supervisor already running the application. This is the main way it differs from Laravel's Horizon; see docs/laravel-differences.md.

Install

maat akhet:install          # publishes the two panel views

Add ...akhetMigrations to database/migrations.dart, akhetVizier() to the panel's extensions:, and a config/akhet.dart:

final akhet = {
  'enabled': env('AKHET_ENABLED') == 'true',
  'prune_hours': 168,
  'ignore_jobs': ['Heartbeat'],
  'record_completed': true,
};

Off unless the application says otherwise: a dashboard that turns itself on writes a row per job on the day it is installed.

Keep the table small

schedule.command('akhet:prune').daily();

A command, never a timer the package starts on its own.

Full guide: docs/akhet.md.

Libraries

akhet
Akhet: the queue dashboard for Maat applications.