
# 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>` ir krātuves saknes direktorija, ar kuru tika atvērtas programmas; tas ir ceļš, ko atgriež `StorageRoot::resolve()`: bāzes direktorija kopā ar nosaukumvietu. Krātuve, kas atvērta zem `StorageRoot::resolve(__DIR__ . '/var/storh', 'app')`, atrodas zem `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
```

Norādot tikai bāzes direktoriju (`var/storh`), komandas tiek novirzītas uz kolekciju, kas vēl nepastāv, tāpēc tās kļūdas vietā ziņo par tukšu kolekciju.

`vendor/bin/storh` nepieciešams storh 0.5.2 vai jaunāks, ja storh ir instalēts kā atkarība. Iepriekšējās versijas meklēja Composer autoloader tikai pakotnes `vendor/` direktorijā un beidzās ar kļūdu `require`.

CLI izvada stabilu JSON, ko var izmantot cron uzdevumos un izvietošanas stāvokļa pārbaudēs. Kolekcijas noklusējuma vērtība ir `default`; programmas noklusējuma vērtība ir `doc` šādām sistēmām: `stats`, `verify` un `reindex`, bet `log` — `compact`.

## Komandu izmantotās uzturēšanas metodes

Visām programmām ir pieejamas uzturēšanas metodes, ko izmanto CLI:

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

DocStore papildus nodrošina:

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

SegmentedLog papildus nodrošina:

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

DocStore gadījumā `verify()` pārbauda, vai ieraksti tiek pareizi parsēti un vai vienādības, diapazona un saliktie indeksi atbilst pilnai ierakstu skenēšanai. `repair()` ievieto bojātos ierakstu failus karantīnā mapē `.storh/corrupt/` un atjauno indeksus no derīgajiem ierakstiem.

SegmentedLog gadījumā `verify()` atkodē segmentu rindas un salīdzina pašreizējo atvasināto stāvokļa indeksu ar atkārtotu segmentu nolasīšanu no jauna. `repair()` atjauno atvasināto stāvokli un saīsina nepilnīgās beigu rindas.

Queue gadījumā `verify()` atkodē katru noturīgo notikumu un salīdzina gaidošo, apstrādājamo un pabeigto uzdevumu, kā arī datu un pieprasījumu secības stāvokli ar atkārtotu `queue.log` nolasīšanu no jauna. `repair()` atjauno rindas stāvokli no žurnāla un atkārtoti ievieto rindā uzdevumus, kuru apstrādei atvēlētais laiks ir beidzies.
