
# 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>` on salvestusjuur, millega mootorid avati, ehk tee, mille tagastab `StorageRoot::resolve()`: baaskataloog koos nimeruumiga. Asukohas `StorageRoot::resolve(__DIR__ . '/var/storh', 'app')` avatud hoidla asub asukohas
`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
```

Ainult baaskataloogi edastamisel (`var/storh`) osutavad käsud kogule, mida veel pole, mistõttu teatatakse tühjast kogust, mitte ei anta viga.

`vendor/bin/storh` vajab versiooni storh 0.5.2 või uuemat, kui sõltuvusena on paigaldatud storh. Varasemad versioonid otsisid autoloaderit Composer ainult paketi enda kataloogist `vendor/` ja andsid vea `require`.

CLI väljastab stabiilse JSON, et seda saaks kasutada cron töödes ja juurutuse seisundikontrollides. Vaikimisi kogu on `default`; vaikimisi mootor on `doc` juhul, kui kasutatakse mootoreid `stats`, `verify` ja `reindex`, ning `log` mootori `compact` puhul.

## Käskude taga olevad hooldusmeetodid

Kõik mootorid pakuvad hooldusmeetodeid, mida kasutab CLI:

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

DocStore lisab:

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

SegmentedLog lisab:

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

DocStore'i puhul kontrollib `verify()`, kas kirjed parsitakse vigadeta ning võrdsus-, vahemiku- ja liitindeksid vastavad kõigi kirjete läbiskannimise tulemustele. `repair()` paigutab vigased kirjefailid karantiini asukohta `.storh/corrupt/` ja koostab indeksid kehtivate kirjete põhjal uuesti.

SegmentedLogi puhul dekodeerib `verify()` segmendiread ja võrdleb praegust tuletatud olekuindeksit uue segmentide taasesitusega. `repair()` koostab tuletatud oleku uuesti ja kärbib poolikud lõpuread.

Queue'i puhul dekodeerib `verify()` kõik püsivad sündmused ja võrdleb ootel, töötlemisel, lõpetatud, koorma ning hõivejärjestuse olekut uue `queue.log` taasesitusega. `repair()` koostab järjekorra oleku logist uuesti ja lisab aegunud töötlemistööd uuesti järjekorda.
