
# Jurnalul de evenimente al fluxului de lucru

Jurnalul de evenimente al fluxului de lucru înregistrează o urmă pentru fiecare limită durabilă a fluxului. Fiecare eveniment din urmă poate include intrarea și ieșirea pasului, starea publică înainte și după pas, contextul de execuție, referințe la artefacte, fragmente transmise în flux, timpii și detalii despre erori.

## Ce se înregistrează

| Eveniment | Când | Date capturate |
|---|---|---|
| `step_started` | Înainte ca handlerul unui pas să ruleze | ID-ul jobului, coada, încercarea, numele și tipul pasului, intrarea și starea dinaintea execuției |
| `step_completed` | După reușita handlerului unui pas | Intrarea, ieșirea, starea anterioară, starea ulterioară, contextul, artefactele, fragmentele și durata |
| `step_failed` | Când handlerul unui pas aruncă o excepție | Intrarea, starea anterioară, starea ulterioară dacă este disponibilă, contextul, clasa și mesajul erorii, urma și durata |
| `step_branch_completed` | Când o ramură paralelă reușește | Intrarea ramurii, ieșirea, starea anterioară, starea ulterioară, contextul și durata |
| `step_item_completed` | Când un element for-each reușește | Intrarea elementului, ieșirea, starea anterioară, starea ulterioară, metadatele elementului, contextul și durata |
| `workflow_waiting` | Când un pas de așteptare suspendă execuția | Tipul așteptării, țintele, modul de așteptare, cheia rezultatului, metadatele potrivirii și starea din timpul așteptării |
| `workflow_resumed` | Când este satisfăcut un pas de așteptare | Datele pentru reluare, starea dinaintea reluării și starea de după reluare |
| `workflow_replayed` | Când este recreat un export | Metadatele fluxului de lucru sursă și starea reluării |

## Interogarea cronologiei

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

Fiecare rând al evenimentului conține:

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

## Pachetul de urme normalizat

Folosiți `workflow_trace()` când creați un depanator UI:

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

Pachetul de urme include:

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

`steps` grupează evenimentele după indicele pasului și include cel mai recent eveniment important pentru fiecare pas.

## Consultarea stării unui pas

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

Aceasta returnează starea publică `state_after` din cel mai recent eveniment încheiat sau reluat pentru pasul respectiv, ori `null` dacă nu a fost înregistrată nicio stare.

## Metadate pentru urmele de execuție

Handler-ele pot adăuga detalii despre urme la nivelul aplicației în timp ce rulează:

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

Handler-ele pașilor pot returna și metadate rezervate pentru urme:

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

Cheia `_queuety_trace` este stocată în jurnalul de evenimente și nu este îmbinată în starea fluxului de lucru.

## CLI

Vizualizați cronologia ca tabel:

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

Vizualizați starea de după un pas:

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

## Păstrarea datelor

Jurnalele de evenimente se acumulează în timp. Folosiți `prune()` pentru a șterge evenimentele de urmărire vechi:

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