
# Darbplūsmas notikumu žurnāls

Darbplūsmas notikumu žurnālā tiek reģistrēta katra noturīgās darbplūsmas robežpunkta izsekošanas vēsture. Katrā izsekošanas notikumā var būt norādīta soļa ievade, izvade, publiskais stāvoklis pirms soļa, publiskais stāvoklis pēc soļa, izpildlaika konteksts, artefaktu atsauces, straumēšanas daļas, laiks un kļūdu informācija.

## Kas tiek reģistrēts

| Notikums | Kad | Iegūtie dati |
|---|---|---|
| `step_started` | Pirms tiek palaists soļa apstrādātājs | Uzdevuma ID, rinda, mēģinājums, soļa nosaukums, soļa tips, ievade un stāvoklis pirms izpildes |
| `step_completed` | Pēc veiksmīgas soļa apstrādātāja izpildes | Ievade, izvade, stāvoklis pirms un pēc izpildes, konteksts, artefakti, daļas un ilgums |
| `step_failed` | Kad soļa apstrādātājs izmet izņēmumu | Ievade, stāvoklis pirms un pēc izpildes, ja pieejams, konteksts, kļūdas klase, kļūdas ziņojums, izsekošanas informācija un ilgums |
| `step_branch_completed` | Kad veiksmīgi izpildās viens paralēlais zars | Zara ievade, izvade, stāvoklis pirms un pēc izpildes, konteksts un ilgums |
| `step_item_completed` | Kad veiksmīgi izpildās viens for-each elements | Elementa ievade, izvade, stāvoklis pirms un pēc izpildes, elementa metadati, konteksts un ilgums |
| `workflow_waiting` | Kad gaidīšanas solis aptur izpildi | Gaidīšanas tips, gaidīšanas mērķi, gaidīšanas režīms, rezultāta atslēga, atbilstības metadati un gaidīšanas laikā saglabātais stāvoklis |
| `workflow_resumed` | Kad gaidīšanas nosacījums ir izpildīts | Atsākšanas dati, stāvoklis pirms atsākšanas un stāvoklis pēc atsākšanas |
| `workflow_replayed` | Kad eksportētais darbplūsmas eksemplārs tiek izveidots no jauna | Avota darbplūsmas metadati un atkārtotas izpildes stāvoklis |

## Laika skalas vaicājumi

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

Katrā notikuma rindā ir:

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

## Normalizēta izsekošanas kopa

Lietojiet `workflow_trace()`, veidojot atkļūdotāju UI:

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

Izsekošanas kopā ir:

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

`steps` sagrupē notikumus pēc soļa indeksa un iekļauj pēdējo svarīgo notikumu katram solim.

## Soļa stāvokļa izgūšana

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

Tas atgriež publisko `state_after` no pēdējā pabeigtā vai atsāktā notikuma šim solim vai `null`, ja stāvoklis nav reģistrēts.

## Izpildlaika izsekošanas metadati

Apstrādātāji darbības laikā var pievienot izsekošanas informāciju par lietojumprogrammas līmeni:

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

Soļu apstrādātāji var arī atgriezt rezervētus izsekošanas metadatus:

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

Atslēga `_queuety_trace` tiek saglabāta notikumu žurnālā un netiek apvienota ar darbplūsmas stāvokli.

## CLI

Skatiet laika skalu tabulas veidā:

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

Skatiet stāvokli pēc soļa:

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

## Saglabāšanas ilgums

Notikumu žurnāli laika gaitā uzkrājas. Izmantojiet `prune()`, lai dzēstu vecus izsekošanas notikumus:

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