UNPKG

@golemio/pid

Version:
57 lines (54 loc) 3.24 kB
# HTTP MPVNet state_position - Batch data chodí na VP-IG (vyšší jednotky MB během špičky) - Formát vstupních dat viz [input_realtime_data/http_mpvnet.md](../input_realtime_data/http_mpvnet.md) - (HTTP) Input Gateway - Raw data se uloží na blob storage - knihovnou `xml2js` se transformují na JSON - validují se vůči JSON schématu a pošlou na Rabbita do fronty `saveDataToDB` - saveDataToDB - data se napasují na struktury tabulek `vehiclepositions_trips` a `vehiclepositions_positions` (stav je `unknown`, `tracking` se bere ze vstupních dat) - všechny spoje se upsertují, nové spoje a jejich pozice se pošlou do fronty `updateGTFSTripId`, existující do `updateDelay` - updateGTFSTripId - duplikace vlakových spojů a pozic podle block id (určení tracking podle cis stop id) - obohacení spojů GTFS daty (včetně oběhu a kmenové linky) - upsert asociovaných pozic - **syntetická poloha z informace o nástupišti**: pokud zpráva obsahuje atribut `$.stan` pro budoucí zastávku a vlak ještě nemá aktivní RT polohu, vytvoří se syntetická pozice ve stavu `before_track` pro tuto zastávku – umožňuje zobrazit kód nástupiště před fyzickým příjezdem vlaku - spoje se pošlou do fronty `updateDelay` - updateDelay - opět duplikace vlakových spojů, upsert asociovaných pozic - opětovné načtení asociovaných pozic z DB - určení trasy spoje podle GTFS shapes a stop times - processing pozic, uložení do databáze - Not tracking (`tracking` je `0` a nebo nepřišly souřadnice) - pokud je poslední pozice neznámá, nebo je známá a ve stavu `on_track` nebo `at_stop`, je aktuální stav `before_track` - pokud je poslední známá pozice s `tracking 2` - pokud je pozice duplicitní (existuje pozice se stejným `origin_timestamp`), stav je `duplicate` - jinak je stav `after_track` - Tracking (`tracking` je `2`, souřadnice jsou známy) - pokud je vozidlo 200 metrů od nejblizšího bodu (anchor points) na trase, stav je `off_track` - pokud je nejbližší bod v zastávce, nastaví se stav na `at_stop` - jinak je stav `on_track` - Zrušený spoj (příznak `canceled` u pozice) - stav je vždy `canceled` - propagateDelay - podle kmenové linky a oběhu vyhledáme navazující spoje - podle GTFS trip id a registračního čísla poslední pozici ve stavu `before_track` - přepsání stavu na `before_track_delayed` ```mermaid flowchart TB; A[HTTP data]-->B[VP HTTP Input Gateway]--raw data-->Blob[Azure Blob Storage]; B--JSON xml2js-->C[AMQP saveDataToDB]--upsert-->trips[(DB trips)]; C--nové spoje bez GTFS dat-->D[AMQP updateGTFSTripId]; C--existující spoje-->E[AMQP updateDelay]; D--upsert-->trips; D--upsert-->positions[(DB positions)]; D--nové spoje s GTFS daty-->E; E--upsert-->trips; E--upsert-->positions; E--select-->trips; E--select-->positions; E--uložené spoje-->F[AMQP propagateDelay]; F--select-->trips; F--select-->positions; F--upsert-->positions; ```