
# Dnevnik dogodkov poteka dela

Dnevnik dogodkov poteka dela beleži sled za vsako trajno mejo poteka dela. Vsak dogodek sledi lahko vključuje vhodne podatke koraka, izhodne podatke, javno stanje pred korakom, javno stanje po koraku, kontekst izvajalnega okolja, sklice na artefakte, kose pretočnega prenosa, časovne podatke in podrobnosti o napakah.

## Kaj se beleži

| Dogodek | Kdaj | Zajeti podatki |
|---|---|---|
| `step_started` | Pred zagonom obravnavalnika koraka | ID opravila, čakalna vrsta, poskus, ime koraka, vrsta koraka, vhodni podatki in stanje pred izvajanjem |
| `step_completed` | Po uspešnem zaključku obravnavalnika koraka | Vhodni podatki, izhodni podatki, stanje pred in po, kontekst, artefakti, kosi in trajanje |
| `step_failed` | Ko obravnavalnik koraka sproži izjemo | Vhodni podatki, stanje pred in po, kadar je na voljo, kontekst, razred napake, sporočilo o napaki, sled in trajanje |
| `step_branch_completed` | Ko je ena vzporedna veja uspešna | Vhodni in izhodni podatki veje, stanje pred in po, kontekst in trajanje |
| `step_item_completed` | Ko je uspešen en element zanke for-each | Vhodni in izhodni podatki elementa, stanje pred in po, metapodatki elementa, kontekst in trajanje |
| `workflow_waiting` | Ko korak čakanja parkira izvajanje | Vrsta čakanja, cilji čakanja, način čakanja, ključ rezultata, metapodatki ujemanja in stanje med čakanjem |
| `workflow_resumed` | Ko je pogoj koraka čakanja izpolnjen | Podatki za nadaljevanje, stanje pred nadaljevanjem in stanje po njem |
| `workflow_replayed` | Ko je izvoz ponovno ustvarjen | Metapodatki izvornega poteka dela in stanje ponovnega predvajanja |

## Poizvedovanje po časovnici

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

Vsaka vrstica dogodka vsebuje:

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

## Normaliziran sveženj sledi

Uporabite `workflow_trace()` pri izdelavi razhroščevalnika UI:

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

Sveženj sledi vključuje:

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

`steps` združi dogodke po indeksu koraka in vključuje najnovejši pomembni dogodek za vsak korak.

## Iskanje stanja koraka

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

To vrne javno `state_after` iz zadnjega zaključenega ali nadaljevanega dogodka za ta korak oziroma `null`, če stanje ni bilo zabeleženo.

## Metapodatki sledi izvajalnega okolja

Obravnavalniki lahko med izvajanjem dodajajo podrobnosti o sledi na ravni aplikacije:

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

Obravnavalniki korakov lahko vrnejo tudi rezervirane metapodatke sledi:

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

Ključ `_queuety_trace` se shrani v dnevnik dogodkov in se ne združi s stanjem poteka dela.

## CLI

Oglejte si časovnico kot tabelo:

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

Oglejte si stanje po koraku:

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

## Hramba

Dnevniki dogodkov se sčasoma kopičijo. Za brisanje starih dogodkov sledi uporabite `prune()`:

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