The dashboard in Filament#

To follow the workflows of a Laravel application from a Filament panel, install gplanchat/durable-filament (Packages) and register the plugin on the panel:

use Gplanchat\Durable\Filament\DurableFilamentPlugin;

$panel->plugin(DurableFilamentPlugin::make());

The panel then shows Durable runs in its navigation. It works on Filament 3 and 4, reads the catalog that gplanchat/durable-laravel binds (in memory, Illuminate or Temporal), and is read-only.

Screenshots#

The Filament Durable runs page: backend state, filters, counters per outcome and the list of runs

Durable runs, over four runs of an order workflow. The counters include one run waiting for a worker.

The Filament run page of an execution waiting on a timer, with its History timeline

The run page of order/4244: what it waits on, and a History timeline where reserveStock is hatched for the time it spent in the queue.

What the page offers#

  • The backend state, dated.
  • Counters per outcome, with a Waiting for a worker count, over the runs on the page.
  • Filters on outcome, and on workflow name and execution id prefix where the backend can apply them. The filters stay set from one page to the next.
  • Worker presence, above the list, on the Temporal backend: for each durable:temporal-worker role, workflow and activity, whether a worker polled its task queue in the last 120 seconds. On the Illuminate backend, the panel reads “Could not ask”: Laravel’s queue keeps no list of the processes that run php artisan queue:work. The in-memory backend runs every task in the process that starts it, and the page shows no panel.
  • The run list, 20 a page, forward by cursor. Each row carries the execution id (a link to the run), the outcome, the workflow, the start date and a note (waiting for a worker, waiting on …).
  • A run page, opened from a row: outcome, what it waits on, its Nexus operations where the catalog can list them, and its history, one block per action, under a timeline. See Read a run.

What it does not show#

There is no worker presence row for durable:nexus-worker. See Parity.

Language and payloads#

English and French. A payload unfolds on demand and is masked by what your application binds Gplanchat\Durable\Observation\PayloadRedactorInterface to in the container; the key-name redactor applies otherwise.