src/Core/Services/Dayz/Relay/. Vstup je NDJSON soubor, výstup řádky v MySQL tabulkách.
Komponenty
Životní cyklus jobu
SFTP discovery
Připojí se na herní server přes SFTP, vylistuje soubory
relay_*.jsonl které ještě nezpracoval (porovnání podle md5 hash + last position offset).Parse + dispatch
Pro každý nový řádek se zavolá
EventDispatcher::dispatch($event). Ten najde odpovídající sink podle ev.Commit
Po dokončení souboru se transakce committuje. Záznam o zpracování (název souboru + offset) se uloží.
Sink interface
IngestContext nese referenci na PDO, logger, mapování steamid → user_id.
Dry run
RelayIngestJob přijímá příznak $dryRun. V dry-run režimu se proběhne celá pipeline, jen se přeskočí INSERT / UPDATE. Užitečné pro testování nových sinků.
Idempotency
Každý sink kontroluje, jestli už event nebyl zapsán:SessionEventSink—(steamid, action, timestamp)unique.KillSink—(victim_id, att_id, ts)unique.- Ostatní sinks mají vlastní logiku podle smyslu.
Statistiky a chybové hlášky
Po dokončení jobu se docron.log zapíše:
Přidání nového typu eventu
- Vytvořte sink v
src/Core/Services/Dayz/Relay/Sinks/. - Implementujte
EventSinkInterface(supports,handle). - Zaregistrujte sink v
EventDispatcher::__construct(). - Pokud potřebujete nový sloupec, přidejte migraci do
database_migrations/.
Manuální spuštění
/a/dayz-logs.