
# 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`, а для `compact` — `log`.

## Методы обслуживания, используемые командами

Все движки предоставляют методы обслуживания, которые использует 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()` восстанавливает состояние очереди по журналу и повторно ставит в очередь задачи, обработка которых превысила время ожидания.
