
# Darbo eigos įvykių žurnalas

Darbo eigos įvykių žurnale įrašomi pėdsakai ties kiekviena patvarios darbo eigos riba. Kiekviename pėdsako įvykyje gali būti žingsnio įvestis, išvestis, vieša būsena prieš žingsnį ir po jo, vykdymo kontekstas, artefaktų nuorodos, srauto dalys, laikas ir išsami klaidos informacija.

## Kas įrašoma

| Įvykis | Kada | Užfiksuojami duomenys |
|---|---|---|
| `step_started` | Prieš paleidžiant žingsnio apdorojimo funkciją | Užduoties ID, eilė, bandymas, žingsnio pavadinimas, žingsnio tipas, įvestis ir būsena prieš vykdymą |
| `step_completed` | Sėkmingai įvykdžius žingsnio apdorojimo funkciją | Įvestis, išvestis, būsena prieš ir po, kontekstas, artefaktai, dalys ir trukmė |
| `step_failed` | Žingsnio apdorojimo funkcijai sukėlus išimtį | Įvestis, būsena prieš ir po (jei prieinama), kontekstas, klaidos klasė, klaidos pranešimas, pėdsakas ir trukmė |
| `step_branch_completed` | Sėkmingai užbaigus vieną lygiagrečią šaką | Šakos įvestis, išvestis, būsena prieš ir po, kontekstas ir trukmė |
| `step_item_completed` | Sėkmingai apdorojus vieną „for-each“ elementą | Elemento įvestis, išvestis, būsena prieš ir po, elemento metaduomenys, kontekstas ir trukmė |
| `workflow_waiting` | Laukimo žingsniui sustabdžius vykdymą | Laukimo tipas, laukiami objektai, laukimo režimas, rezultato raktas, atitikties metaduomenys ir laukimo būsena |
| `workflow_resumed` | Patenkinus laukimo žingsnio sąlygą | Tęsimo duomenys, būsena prieš tęsiant ir po to |
| `workflow_replayed` | Iš naujo sukūrus eksportą | Pradinės darbo eigos metaduomenys ir atkūrimo būsena |

## Laiko juostos užklausos

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

Kiekvienoje įvykio eilutėje yra:

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

## Normalizuotas pėdsakų paketas

Naudokite `workflow_trace()` kurdami derintuvo UI:

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

Pėdsakų pakete yra:

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

`steps` sugrupuoja įvykius pagal žingsnio indeksą ir pateikia naujausią svarbų kiekvieno žingsnio įvykį.

## Žingsnio būsenos paieška

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

Grąžinama vieša būsena `state_after` iš naujausio užbaigto arba atnaujinto to žingsnio įvykio, o jei būsena nebuvo įrašyta, grąžinama `null`.

## Vykdymo pėdsako metaduomenys

Apdorojimo funkcijos vykdymo metu gali pridėti programos lygmens pėdsako informaciją:

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

Žingsnių apdorojimo funkcijos taip pat gali grąžinti rezervuotus pėdsako metaduomenis:

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

Raktas `_queuety_trace` įrašomas į įvykių žurnalą ir nesujungiamas su darbo eigos būsena.

## CLI

Peržiūrėkite laiko juostą kaip lentelę:

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

Peržiūrėkite būseną po žingsnio:

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

## Saugojimo laikotarpis

Įvykių žurnalai laikui bėgant didėja. Naudokite `prune()` seniems pėdsakų įvykiams ištrinti:

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