
# 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>` yra saugyklos šakninis katalogas, su kuriuo atidaryti varikliai; tai kelias, kurį grąžina `StorageRoot::resolve()`: bazinis katalogas ir vardų sritis. Po `StorageRoot::resolve(__DIR__ . '/var/storh', 'app')` atidaryta saugykla yra aplanke `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
```

Nurodžius tik bazinį katalogą (`var/storh`), komandos nukreipiamos į dar neegzistuojančią kolekciją, todėl jos pateikia tuščią kolekciją, o ne klaidą.

`vendor/bin/storh` reikia storh 0.5.2 ar naujesnės versijos, kai storh įdiegta kaip priklausomybė. Ankstesnės versijos ieškojo tik Composer autoloader paketo `vendor/` kataloge ir pateikdavo `require` klaidą.

CLI pateikia stabilią JSON, todėl ją galima naudoti cron užduotyse ir diegimo būklės patikrose. Numatytoji kolekcija yra `default`; numatytasis variklis yra `doc`, skirtas `stats`, `verify` ir `reindex`, o `log` – skirtas `compact`.

## Priežiūros metodai, kuriuos naudoja komandos

Visi varikliai pateikia priežiūros metodus, kuriuos iškviečia CLI:

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

DocStore papildomai pateikia:

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

SegmentedLog papildomai pateikia:

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

DocStore atveju `verify()` tikrina, ar įrašai tinkamai išanalizuojami ir ar lygybės, intervalo bei sudėtiniai indeksai sutampa su visų įrašų nuskaitymo rezultatais. `repair()` sugadintų įrašų failus perkelia į karantiną, aplanke `.storh/corrupt/`, ir atkuria indeksus iš tinkamų įrašų.

SegmentedLog atveju `verify()` dekoduoja segmentų eilutes ir palygina dabartinį išvestinės būsenos indeksą su naujai atkurtu segmentų pakartojimu. `repair()` atkuria išvestinę būseną ir nukerpa nutrūkusias paskutines eilutes.

Queue atveju `verify()` dekoduoja kiekvieną patvarų įvykį ir palygina laukiančių, vykdomų ir užbaigtų užduočių būseną, duomenis bei paėmimo tvarką su naujai atkurtu `queue.log` pakartojimu.
`repair()` atkuria eilės būseną iš žurnalo ir grąžina į eilę užstrigusias vykdomas užduotis.
