
# 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>` är lagringsroten som motorerna öppnades med, alltså sökvägen
som `StorageRoot::resolve()` returnerar: baskatalogen plus namnrymden. Ett lager
som öppnas under `StorageRoot::resolve(__DIR__ . '/var/storh', 'app')` finns under
`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
```

Om du bara anger baskatalogen (`var/storh`) riktas kommandona mot en
samling som ännu inte finns, så de rapporterar en tom samling i stället
för att misslyckas.

`vendor/bin/storh` kräver storh 0.5.2 eller senare när storh är installerat som ett
beroende. Tidigare versioner letade bara efter autoladdaren Composer i paketets egen
katalog `vendor/` och misslyckades med ett fel av typen `require`.

CLI skriver ut stabil JSON så att det kan användas i cron-jobb och driftsättningskontroller.
Samlingen har standardvärdet `default`; motorn har standardvärdet
`doc` för `stats`, `verify` och `reindex`, och `log` för `compact`.

## Underhållsmetoderna bakom kommandona

Alla motorer tillhandahåller underhållsmetoderna som CLI använder:

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

DocStore lägger till:

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

SegmentedLog lägger till:

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

För DocStore kontrollerar `verify()` att poster kan tolkas korrekt och att jämlikhets-,
intervall- och sammansatta index stämmer med en fullständig genomsökning av posterna. `repair()` sätter
skadade postfiler i karantän under `.storh/corrupt/` och bygger om index från giltiga
poster.

För SegmentedLog avkodar `verify()` segmentrader och jämför det aktuella
härledda tillståndsindexet med en ny uppspelning av segmenten. `repair()` bygger om det härledda
tillståndet och kapar trasiga avslutande rader.

För Queue avkodar `verify()` varje beständig händelse och jämför väntande,
behandlande och slutfört tillstånd, nyttolast och anspråksordning med en ny `queue.log`-uppspelning.
`repair()` bygger om köstatus från loggen och köar om jobb vars behandlingstid har löpt ut.
