
# Workflow-gebeurtenislog

De workflow-gebeurtenislog legt voor elke duurzame workflowgrens een trace vast. Elke tracegebeurtenis kan de stapinvoer, uitvoer, openbare status vóór de stap, openbare status na de stap, runtimecontext, verwijzingen naar artefacten, streamingchunks, timing en foutdetails bevatten.

## Wat wordt vastgelegd

| Gebeurtenis | Wanneer | Vastgelegde gegevens |
|---|---|---|
| `step_started` | Voordat een staphandler wordt uitgevoerd | Taak-ID, wachtrij, poging, stapnaam, staptype, invoer en status vóór uitvoering |
| `step_completed` | Nadat een staphandler slaagt | Invoer, uitvoer, status ervoor, status erna, context, artefacten, chunks en duur |
| `step_failed` | Wanneer een staphandler een fout genereert | Invoer, status ervoor, status erna indien beschikbaar, context, foutklasse, foutbericht, trace en duur |
| `step_branch_completed` | Wanneer een parallelle tak slaagt | Takinvoer, uitvoer, status ervoor, status erna, context en duur |
| `step_item_completed` | Wanneer een for-each-item slaagt | Iteminvoer, uitvoer, status ervoor, status erna, itemmetadata, context en duur |
| `workflow_waiting` | Wanneer een wachtstap de uitvoering parkeert | Wachttype, wachtdoelen, wachtmodus, resultaatsleutel, matchmetadata en status tijdens het wachten |
| `workflow_resumed` | Wanneer aan een wachtstap is voldaan | Hervattingspayload, status vóór hervatting en status na hervatting |
| `workflow_replayed` | Wanneer een export opnieuw wordt aangemaakt | Metagegevens van de bronworkflow en replaystatus |

## De tijdlijn opvragen

```php
$events = Queuety::workflow_timeline( $workflow_id );

foreach ( $events as $event ) {
    echo $event['step_index'] . ' ' . $event['event'] . ' ' . $event['handler'] . "\n";

    if ( 'step_completed' === $event['event'] ) {
        $input        = $event['input'];
        $output       = $event['output'];
        $state_before = $event['state_before'];
        $state_after  = $event['state_after'];
    }

    if ( 'step_failed' === $event['event'] ) {
        echo 'Error: ' . $event['error']['message'] . "\n";
    }
}
```

Elke gebeurtenisrij bevat:

- `id`
- `workflow_id`
- `job_id`
- `parent_event_id`
- `step_index`
- `step_name`
- `step_type`
- `handler`
- `event`
- `queue`
- `attempt`
- `input`
- `output`
- `state_before`
- `state_after`
- `context`
- `artifacts`
- `chunks`
- `error`
- `duration_ms`
- `created_at`

## Genormaliseerde tracebundel

Gebruik `workflow_trace()` bij het bouwen van een debugger UI:

```php
$trace = Queuety::workflow_trace( $workflow_id );
```

De tracebundel bevat:

- `workflow`
- `steps`
- `events`
- `jobs`
- `logs`
- `artifacts`
- `chunks`
- `signals`
- `wait_dependencies`

`steps` groepeert gebeurtenissen op stapindex en bevat de meest recente belangrijke gebeurtenis voor elke stap.

## Stapstatus opzoeken

```php
$state = Queuety::workflow_state_at( $workflow_id, $step_index );
```

Dit retourneert de openbare `state_after` van de meest recente voltooide of hervatte gebeurtenis voor die stap, of `null` als er geen status is vastgelegd.

## Metagegevens van runtime-traces

Handlers kunnen tijdens de uitvoering tracegegevens op applicatieniveau toevoegen:

```php
Queuety::trace_input( [ 'resolved' => $resolved_input ] );
Queuety::trace_context( [ 'ability' => 'content/load-post' ] );
Queuety::trace_output( [ 'post' => $post ] );
```

Staphandlers kunnen ook gereserveerde tracemetagegevens retourneren:

```php
return [
    'result' => 'done',
    '_queuety_trace' => [
        'input' => [ 'resolved' => $resolved_input ],
        'context' => [ 'node_id' => 'loadPost' ],
        'artifacts' => [
            [ 'key' => 'brief', 'kind' => 'markdown' ],
        ],
    ],
];
```

De sleutel `_queuety_trace` wordt opgeslagen in de gebeurtenislog en niet samengevoegd met de workflowstatus.

## CLI

Bekijk de tijdlijn als tabel:

```bash
wp queuety workflow timeline 42
```

Bekijk de status na een stap:

```bash
wp queuety workflow state-at 42 0
```

## Bewaartermijn

Gebeurtenislogs stapelen zich in de loop van de tijd op. Gebruik `prune()` om oude tracegebeurtenissen te verwijderen:

```php
$deleted = Queuety::workflow_events()->prune( 30 );
```
