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