
# 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 koren shrambe, s katerim so bili odprti mehanizmi, in pot, ki jo vrne `StorageRoot::resolve()`: osnovni imenik in imenski prostor. Shramba, odprta pod `StorageRoot::resolve(__DIR__ . '/var/storh', 'app')`, je 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
```

Če podate samo osnovni imenik (`var/storh`), ukazi ciljajo zbirko, ki še ne obstaja, zato namesto napake poročajo o prazni zbirki.

`vendor/bin/storh` potrebuje storh 0.5.2 ali novejšo različico, ko je kot odvisnost nameščen storh. Prejšnje različice so iskale samo nalagalnik Composer v lastnem imeniku `vendor/` paketa in javile napako `require`.

CLI izpiše stabilen JSON, zato ga je mogoče uporabljati v opravilih cron in preverjanjih zdravja pri uvajanju. Privzeta zbirka je `default`; privzeti mehanizem je `doc` za `stats`, `verify` in `reindex` ter `log` za `compact`.

## Vzdrževalne metode, ki jih uporabljajo ukazi

Vsi mehanizmi izpostavljajo vzdrževalne metode, ki jih uporablja CLI:

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

DocStore doda:

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

SegmentedLog doda:

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

Pri DocStore `verify()` preveri, ali se zapisi pravilno razčlenijo in ali se indeksi enakosti, razponov in sestavljeni indeksi ujemajo s celotnim pregledom zapisov. `repair()` premakne poškodovane datoteke zapisov v karanteno pod `.storh/corrupt/` in znova zgradi indekse iz veljavnih zapisov.

Pri SegmentedLog `verify()` dekodira vrstice segmentov in primerja trenutni izpeljani indeks stanja z novim predvajanjem segmentov. `repair()` znova zgradi izpeljano stanje in odreže odtrgane zadnje vrstice.

Pri Queue `verify()` dekodira vsak trajni dogodek ter primerja stanje čakanja, obdelave, dokončanja, vsebine in vrstnega reda prevzemov z novim predvajanjem `queue.log`.
`repair()` znova zgradi stanje čakalne vrste iz dnevnika in opravila, ki se obdelujejo predolgo, vrne v čakalno vrsto.
