
# 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 είναι εγκατεστημένο ως
εξάρτηση. Οι παλαιότερες εκδόσεις αναζητούσαν μόνο τον autoloader του 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()` αναδημιουργεί την κατάσταση της ουράς από το αρχείο καταγραφής και επαναφέρει στην ουρά τις εργασίες υπό επεξεργασία που έληξαν χρονικά.
