
# Statusbereinigung

Im Verlauf eines Workflows über viele Schritte kann der angesammelte Status stark anwachsen. Die Statusbereinigung entfernt automatisch alte Schrittausgaben, damit der Status JSON begrenzt bleibt und wichtige Daten erhalten bleiben.

## Statusbereinigung aktivieren

Rufe `prune_state_after()` auf dem Workflow-Builder auf. Das Argument gibt an, wie viele der letzten Schritte ihre Ausgabe behalten sollen:

```php
use Queuety\Queuety;

Queuety::workflow( 'long_pipeline' )
    ->then( StepA::class )
    ->then( StepB::class )
    ->then( StepC::class )
    ->then( StepD::class )
    ->then( StepE::class )
    ->prune_state_after( 2 )
    ->dispatch( [ 'input' => $data ] );
```

Mit `prune_state_after( 2 )` werden nach Abschluss von Schritt D die Ausgaben der Schritte A und B aus dem Status entfernt. Die beiden letzten Schritte C und D bleiben erhalten.

## Funktionsweise der Bereinigung

Wenn die Statusbereinigung aktiviert ist, erfasst Queuety in einem reservierten Array `_step_outputs`, welche Schlüssel jeder Schritt zum Status hinzufügt. Nach dem Wechsel zu einem neuen Schritt werden alle Schlüssel entfernt, die von Schritten eingeführt wurden, deren Alter den Schwellenwert überschreitet.

Zum Beispiel mit `prune_state_after( 2 )`:

```
After step 0 (StepA): state has keys from StepA + initial payload
After step 1 (StepB): state has keys from StepA + StepB + initial payload
After step 2 (StepC): state has keys from StepA + StepB + StepC + initial payload
  -> prune: StepA output removed (only 2 most recent kept)
After step 3 (StepD): state has keys from StepB + StepC + StepD + initial payload
  -> prune: StepB output removed
```

## Was erhalten bleibt

Queuety bereinigt niemals reservierte Schlüssel, die mit `_` beginnen, etwa `_steps`, `_queue`, `_priority`, `_max_attempts`, `_on_cancel`, `_prune_state_after` und `_step_outputs`. An `dispatch()` übergebene anfängliche Payload-Schlüssel bleiben ebenfalls erhalten, da sie von Anfang an nicht als Schrittausgaben erfasst werden. Außerdem behält Queuety entsprechend dem konfigurierten Schwellenwert die Ausgaben der N letzten Schritte bei.

## Wann du ihn verwenden solltest

Die Statusbereinigung ist hilfreich bei Workflows mit vielen Schritten, wenn jeder Schritt Daten erzeugt, die spätere Schritte nicht benötigen. Typische Beispiele sind lange Pipelines, in denen jeder Schritt nur die Ausgabe des vorherigen oder vorletzten Schritts benötigt, ETL-Workflows mit umfangreichen Zwischendaten sowie rekursive oder wiederholte Workflows, die sonst immer mehr ähnliche Statusdaten ansammeln würden. Bei wenigen Schritten oder wenn spätere Schritte von frühen Ausgaben abhängen, brauchst du die Bereinigung wahrscheinlich nicht.

## Standardverhalten

Die Statusbereinigung ist standardmäßig deaktiviert. Die Methode `prune_state_after()` akzeptiert ein ganzzahliges Argument. Ohne Argument wird standardmäßig 2 verwendet:

```php
->prune_state_after()     // keeps the 2 most recent step outputs
->prune_state_after( 5 )  // keeps the 5 most recent step outputs
```
