
# 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>` е коренът за съхранение, с който са отворени машините; това е пътят, който връща `StorageRoot::resolve()`: основната директория плюс пространството от имена. Хранилище, отворено под `StorageRoot::resolve(__DIR__ . '/var/storh', 'app')`, се намира в `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
```

Подаването само на основната директория (`var/storh`) насочва командите към колекция, която още не съществува, затова те показват празна колекция, вместо да прекратят с грешка.

`vendor/bin/storh` изисква storh 0.5.2 или по-нова версия, когато storh е инсталиран като зависимост. По-ранните версии търсеха само автозареждащия файл на Composer в собствената директория `vendor/` на пакета и завършваха с грешка `require`.

CLI извежда стабилен JSON, за да може да се използва в задачи на cron и проверки на изправността при внедряване. Колекцията по подразбиране е `default`; машината по подразбиране е `doc` за `stats`, `verify` и `reindex`, и `log` за `compact`.

## Методи за поддръжка зад командите

Всички машини предоставят методите за поддръжка, управлявани от CLI:

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

DocStore добавя:

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

SegmentedLog добавя:

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

При DocStore `verify()` проверява дали записите се анализират коректно и дали индексите за равенство, диапазон и съставните индекси съответстват на пълното сканиране на записите. `repair()` поставя повредените файлове със записи под карантина в `.storh/corrupt/` и изгражда отново индексите от валидните записи.

При SegmentedLog `verify()` декодира редовете на сегментите и сравнява текущия производен индекс на състоянието с ново възпроизвеждане на сегментите. `repair()` възстановява производното състояние и отрязва прекъснатите последни редове.

При Queue `verify()` декодира всяко трайно събитие и сравнява състоянието на чакащите, обработваните и завършените задачи, полезните данни и реда на резервиране с ново възпроизвеждане на `queue.log`. `repair()` възстановява състоянието на опашката от журнала и връща в опашката задачите, чието време за обработка е изтекло.
