
# CLI

```bash
vendor/bin/storh stats <root> [collection] [doc|log|queue]
vendor/bin/storh verify <root> [collection] [doc|log|queue]
vendor/bin/storh compact <root> [collection] [doc|log]
vendor/bin/storh reindex <root> [collection]
```

`<root>` je kořen úložiště, se kterým byly enginy otevřeny; jde o cestu, kterou vrací `StorageRoot::resolve()`: základní adresář plus jmenný prostor. Úložiště otevřené pod `StorageRoot::resolve(__DIR__ . '/var/storh', 'app')` se nachází v `var/storh/app`:

```bash
vendor/bin/storh stats var/storh/app pages doc
vendor/bin/storh verify var/storh/app events log
vendor/bin/storh compact var/storh/app events log
vendor/bin/storh reindex var/storh/app pages
```

Zadáním samotného základního adresáře (`var/storh`) nasměrujete příkazy na kolekci, která ještě neexistuje. Místo chyby proto ohlásí prázdnou kolekci.

`vendor/bin/storh` vyžaduje storh 0.5.2 nebo novější, pokud je storh nainstalována jako závislost. Starší verze hledaly pouze autoloader Composer ve vlastním adresáři balíčku `vendor/` a končily chybou `require`.

CLI vypisuje stabilní JSON, takže jej lze použít v úlohách cron a při kontrolách stavu nasazení. Výchozí kolekce je `default`; výchozí engine je `doc` pro `stats`, `verify` a `reindex` a `log` pro `compact`.

## Metody údržby používané příkazy

Všechny enginy zpřístupňují metody údržby, které používá CLI:

```php
$store->stats();
$store->health();
$store->verify();
$store->repair();
```

DocStore navíc nabízí:

```php
$docs->reindex();
$docs->compact(); // no-op report for API symmetry
```

SegmentedLog navíc nabízí:

```php
$log->compact();
$log->recover();
$log->state_index();
```

U DocStore `verify()` kontroluje, zda lze záznamy správně parsovat a zda indexy rovnosti, rozsahu a složené indexy odpovídají úplnému skenování záznamů. `repair()` přesune poškozené soubory záznamů do karantény v `.storh/corrupt/` a z platných záznamů znovu vytvoří indexy.

U SegmentedLog `verify()` dekóduje řádky segmentů a porovnává aktuální odvozený index stavu s novým přehráním segmentů. `repair()` znovu vytvoří odvozený stav a zkrátí poškozené koncové řádky.

U Queue `verify()` dekóduje každou trvalou událost a porovnává stavy čekajících, zpracovávaných a dokončených úloh, jejich dat i pořadí nárokování s novým přehráním `queue.log`. `repair()` znovu vytvoří stav fronty z logu a vrátí do fronty úlohy, jejichž zpracování vypršelo.
