
# Arbetsflödets händelselogg

Arbetsflödets händelselogg registrerar en spårning för varje beständig arbetsflödesgräns. Varje spårningshändelse kan innehålla stegets indata och utdata, det publika tillståndet före och efter steget, körningskontext, artefaktreferenser, strömningsdelar, tidsuppgifter och felinformation.

## Vad som registreras

| Händelse | När | Insamlade data |
|---|---|---|
| `step_started` | Innan en steghanterare körs | Jobb-ID, kö, försök, stegnamn, stegtyp, indata och tillstånd före körning |
| `step_completed` | När en steghanterare har körts utan fel | Indata, utdata, tillstånd före, tillstånd efter, kontext, artefakter, delar och varaktighet |
| `step_failed` | När en steghanterare kastar ett undantag | Indata, tillstånd före, tillstånd efter när det finns tillgängligt, kontext, felklass, felmeddelande, spårning och varaktighet |
| `step_branch_completed` | När en parallell gren körs utan fel | Grenens indata, utdata, tillstånd före, tillstånd efter, kontext och varaktighet |
| `step_item_completed` | När ett objekt i en for-each-loop körs utan fel | Objektets indata, utdata, tillstånd före, tillstånd efter, objektmetadata, kontext och varaktighet |
| `workflow_waiting` | När ett väntesteg parkerar körningen | Väntetyp, väntemål, vänteläge, resultatnyckel, matchningsmetadata och tillstånd under väntan |
| `workflow_resumed` | När ett väntesteg uppfylls | Återupptagningsdata, tillstånd före återupptagning och tillstånd efter återupptagning |
| `workflow_replayed` | När en export återskapas | Källarbetsflödets metadata och omspelningsstatus |

## Fråga efter tidslinjen

```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";
    }
}
```

Varje händelserad innehåller:

- `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`

## Normaliserat spårningspaket

Använd `workflow_trace()` när du bygger en felsökare UI:

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

Spårningspaketet innehåller:

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

`steps` grupperar händelser efter stegindex och inkluderar den senaste viktiga händelsen för varje steg.

## Sökning efter stegtillstånd

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

Detta returnerar det publika `state_after` från den senaste slutförda eller återupptagna händelsen för steget, eller `null` om inget tillstånd har registrerats.

## Metadata för körningsspårning

Hanterare kan lägga till spårningsinformation på programnivå medan de körs:

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

Steghanterare kan också returnera reserverad spårningsmetadata:

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

Nyckeln `_queuety_trace` lagras i händelseloggen och sammanfogas inte med arbetsflödestillståndet.

## CLI

Visa tidslinjen som en tabell:

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

Visa tillståndet efter ett steg:

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

## Lagringstid

Händelseloggar samlas på hög med tiden. Använd `prune()` för att ta bort gamla spårningshändelser:

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