@golemio/pid 2.6.1-dev.808432286 → 2.6.2-dev.813420095

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,113 @@
1
+ # HTTP state_position
2
+
3
+ - Batch data chodí na VP-IG (několik MB)
4
+
5
+ ```xml
6
+ <?xml version="1.0" encoding="utf-8"?>
7
+ <m disp="http://77.93.194.81:8716/api">
8
+ <spoj ka="2" kb="0" den="2023-03-21" lin="100115" alias="115" spoj="1061" dopr="ČSAD POLKOST"
9
+ doprSkut="ČSAD POLKOST" kmenl="115" t="3" tcis="A" np="true" po="39" vuzevc="1861"
10
+ skol="false" posl="false" sled="0" lat="50.0307" lng="14.49185" cpoz="10:00:04" azimut="337"
11
+ rychl="26">
12
+ <zast stan="B" odj="10:30" zast="56714" asw="520091" zpoz_typ_odj="2" zpoz_odj="0" />
13
+ <zast stan="B" odj="10:32" zast="56794" asw="11310002" zpoz_typ_odj="2" zpoz_odj="0" />
14
+ <zast stan="A" odj="10:34" zast="59066" asw="13410001" zpoz_typ_odj="2" zpoz_odj="0" />
15
+ <zast stan="A" odj="10:36" zast="67975" asw="11320001" zpoz_typ_odj="2" zpoz_odj="0" />
16
+ <zast stan="B" odj="10:37" zast="58953" asw="13340002" zpoz_typ_odj="2" zpoz_odj="0" />
17
+ <zast stan="A" odj="10:40" zast="58789" asw="1810001" zpoz_typ_odj="2" zpoz_odj="0" />
18
+ <zast stan="A" odj="10:41" zast="56794" asw="11310001" />
19
+ <zast stan="F" prij="10:43" zast="56714" asw="520002" />
20
+ </spoj>
21
+ <spoj ka="2" kb="0" den="2023-03-21" lin="100117" alias="117" spoj="1016" dopr="ABOUT ME"
22
+ doprSkut="ABOUT ME" kmenl="117" t="3" tcis="A" np="true" po="6" vuzevc="1950" skol="false"
23
+ posl="false" sled="0" lat="50.04645" lng="14.46061" cpoz="09:59:56" azimut="165" rychl="0"
24
+ zast="57408" asw="500006" zpoz_prij="14">
25
+ <zast stan="B" odj="08:55" zast="66826" asw="32360002" zpoz_typ_odj="3" zpoz_odj="35" />
26
+ <zast stan="B" odj="08:55" zast="67375" asw="9910002" zpoz_typ_odj="3" zpoz_odj="81" />
27
+ <zast stan="C" odj="08:56" zast="55206" asw="2800053" zpoz_typ_odj="3" zpoz_odj="119" />
28
+ <zast stan="B" odj="08:58" zast="55181" asw="620002" zpoz_typ_odj="3" zpoz_odj="113" />
29
+ <zast stan="H8" odj="08:59" zast="51228" asw="10060052" zpoz_typ_odj="3" zpoz_odj="121" />
30
+ <zast stan="A" odj="09:00" zast="67477" asw="26020001" zpoz_typ_odj="3" zpoz_odj="85" />
31
+ <zast stan="E" odj="09:02" zast="51227" asw="9290005" zpoz_typ_odj="3" zpoz_odj="68" />
32
+ <zast stan="A" odj="09:03" zast="51226" asw="9390001" zpoz_typ_odj="3" zpoz_odj="91" />
33
+ <zast stan="A" odj="09:05" zast="55233" asw="11580001" zpoz_typ_odj="3" zpoz_odj="81" />
34
+ <zast stan="D" odj="09:07" zast="43729" asw="760051" zpoz_typ_odj="3" zpoz_odj="2" />
35
+ <zast stan="A" odj="09:08" zast="55214" asw="170001" zpoz_typ_odj="3" zpoz_odj="31" />
36
+ <zast stan="A" odj="09:09" zast="55183" asw="7270001" zpoz_typ_odj="3" zpoz_odj="36" />
37
+ <zast stan="A" odj="09:11" zast="55257" asw="7720001" zpoz_typ_odj="3" zpoz_odj="-9" />
38
+ <zast stan="A" odj="09:12" zast="55220" asw="9950001" zpoz_typ_odj="3" zpoz_odj="-15" />
39
+ <zast stan="B" odj="09:13" zast="55188" asw="9270002" zpoz_typ_odj="3" zpoz_odj="-2" />
40
+ <zast stan="B" odj="09:15" zast="58807" asw="6250002" zpoz_typ_odj="3" zpoz_odj="-20" />
41
+ <zast stan="B" odj="09:16" zast="58781" asw="4460002" zpoz_typ_odj="3" zpoz_odj="-5" />
42
+ <zast stan="B" odj="09:17" zast="58863" asw="6580002" zpoz_typ_odj="3" zpoz_odj="1" />
43
+ <zast stan="D" odj="09:18" zast="58863" asw="6580004" zpoz_typ_odj="3" zpoz_odj="-9" />
44
+ <zast stan="A" odj="09:19" zast="59095" asw="3280001" zpoz_typ_odj="3" zpoz_odj="-24" />
45
+ <zast stan="A" odj="09:20" zast="58972" asw="600001" zpoz_typ_odj="3" zpoz_odj="-8" />
46
+ <zast stan="B" odj="09:21" zast="58836" asw="4940002" zpoz_typ_odj="3" zpoz_odj="-11" />
47
+ <zast stan="B" odj="09:22" zast="58976" asw="8570002" zpoz_typ_odj="3" zpoz_odj="22" />
48
+ <zast stan="D" odj="09:24" zast="58837" asw="4970004" zpoz_typ_odj="3" zpoz_odj="-4" />
49
+ <zast stan="A" odj="09:25" zast="58869" asw="7220001" zpoz_typ_odj="3" zpoz_odj="-3" />
50
+ <zast stan="B" odj="09:27" zast="47119" asw="8930002" zpoz_typ_odj="3" zpoz_odj="-28" />
51
+ <zast stan="H" odj="09:29" zast="27948" asw="4880008" zpoz_typ_odj="3" zpoz_odj="-56" />
52
+ <zast stan="A" odj="09:32" zast="57400" asw="4410001" zpoz_typ_odj="3" zpoz_odj="-38" />
53
+ <zast stan="B" odj="09:33" zast="57401" asw="10480002" zpoz_typ_odj="3" zpoz_odj="-7" />
54
+ <zast stan="B" odj="09:34" zast="59152" asw="9370002" zpoz_typ_odj="3" zpoz_odj="-11" />
55
+ <zast stan="B" odj="09:35" zast="59258" asw="9380002" zpoz_typ_odj="3" zpoz_odj="-6" />
56
+ <zast stan="B" odj="09:37" zast="58814" asw="3430002" zpoz_typ_odj="3" zpoz_odj="48" />
57
+ <zast stan="L" prij="09:39" zast="57408" asw="500006" zpoz_typ_prij="3" zpoz_prij="14" />
58
+ </spoj>
59
+ <!--...-->
60
+ </m>
61
+ ```
62
+
63
+ - (HTTP) Input Gateway
64
+ - Raw data se uloží na blob storage
65
+ - knihovnou `xml2js` se transformují na JSON
66
+ - validují se vůči JSON schématu a pošlou na Rabbita do fronty `saveDataToDB`
67
+ - saveDataToDB
68
+ - data se napasují na struktury tabulek `vehiclepositions_trips` a `vehiclepositions_positions` (stav je `unknown`, `tracking` se bere ze vstupních dat)
69
+ - všechny spoje se upsertují, nové spoje a jejich pozice se pošlou do fronty `updateGTFSTripId`, existující do `updateDelay`
70
+ - updateGTFSTripId
71
+ - duplikace vlakových spojů a pozic podle block id (určení tracking podle cis stop id)
72
+ - obohacení spojů GTFS daty (včetně oběhu a kmenové linky)
73
+ - upsert asociovaných pozic
74
+ - spoje se pošlou do fronty `updateDelay`
75
+ - updateDelay
76
+ - opět duplikace vlakových spojů, upsert asociovaných pozic
77
+ - opětovné načtení asociovaných pozic z DB
78
+ - určení trasy spoje podle GTFS shapes a stop times
79
+ - processing pozic, uložení do databáze
80
+ - Not tracking (`tracking` je `0` a nebo nepřišly souřadnice)
81
+ - pokud je poslední pozice neznámá, nebo je známá a `tracking 0`, je stav `before_track`
82
+ - pokud je poslední známá pozice s `tracking 2`
83
+ - pokud je pozice duplicitní (existuje pozice se stejným `origin_timestamp`), stav je `duplicate`
84
+ - jinak je stav `after_track`
85
+ - Tracking (`tracking` je `2`, souřadnice jsou známy)
86
+ - pokud je vozidlo 200 metrů od nejblizšího bodu (anchor points) na trase, stav je `off_track`
87
+ - pokud je nejbližší bod v zastávce, nastaví se stav na `at_stop`
88
+ - jinak je stav `on_track`
89
+ - Zrušený spoj (příznak `canceled` u pozice)
90
+ - stav je vždy `canceled`
91
+ - propagateDelay
92
+ - podle kmenové linky a oběhu vyhledáme navazující spoje
93
+ - podle GTFS trip id a registračního čísla poslední pozici ve stavu `before_track`
94
+ - přepsání stavu na `before_track_delayed`
95
+
96
+ ```mermaid
97
+ flowchart TB;
98
+ A[HTTP data]-->B[VP HTTP Input Gateway]--raw data-->Blob[Azure Blob Storage];
99
+ B--JSON xml2js-->C[AMQP saveDataToDB]--upsert-->trips[(DB trips)];
100
+ C--nové spoje bez GTFS dat-->D[AMQP updateGTFSTripId];
101
+ C--existující spoje-->E[AMQP updateDelay];
102
+ D--upsert-->trips;
103
+ D--upsert-->positions[(DB positions)];
104
+ D--nové spoje s GTFS daty-->E;
105
+ E--upsert-->trips;
106
+ E--upsert-->positions;
107
+ E--select-->trips;
108
+ E--select-->positions;
109
+ E--uložené spoje-->F[AMQP propagateDelay];
110
+ F--select-->trips;
111
+ F--select-->positions;
112
+ F--upsert-->positions;
113
+ ```
@@ -0,0 +1,83 @@
1
+ # TCP common state_position
2
+
3
+ - Data chodí na TCP-IG
4
+
5
+ ```xml
6
+ <M>
7
+ <V turnus="17/3" line="17" evc="9168" np="ano" lat="50.05440" lng="14.41812" akt="03030001" takt="2022-08-02T21:56:22" konc="26200002" tjr="2022-08-02T21:56:00" pkt="1885317" tm="2022-08-02T21:56:22" events="O" />
8
+ </M>
9
+ ```
10
+
11
+ ```xml
12
+ <M>
13
+ <V turnus="134/3" line="134" evc="3738" np="ano" lat="50.03952" lng="14.42919" akt="07960001" takt="2022-06-29T17:28:13" konc="01100005" tjr="2022-06-29T17:23:00" pkt="12709236" tm="2022-06-29T17:28:22" events="O" />
14
+ </M>
15
+ ```
16
+
17
+ - Transport (TCP) Input Gateway
18
+ - Raw data se uloží na blob storage (1MB buffer)
19
+ - knihovnou `xml2js` transformují na JSON
20
+ - pošlou na Rabbita do fronty `saveTramRunsToDB/saveBusRunsToDB`
21
+ - saveTramRunsToDB/saveBusRunsToDB
22
+ - zprávy se uloží do DB
23
+ - následně se pošlou do fronty `updateRunsGTFSTripId`
24
+ - updateRunsGTFSTripId
25
+ - data se napasují na struktury tabulek `vehiclepositions_trips` a `vehiclepositions_positions` (stav je `unknown`)
26
+ - pokud je tramvaj, je `tracking 2`
27
+ - nebo pokud je autobus
28
+ - pokud vozidlo odeslalo zprávu `O`, je `tracking 2`
29
+ - pokud je vozidlo v první zastávce (tjr), nebo pokud vozidlo vyjelo z první zastávky (takt), je `tracking 2`
30
+ - nebo je `tjr` atribut větší než příjezd do první zastávky spoje, je `tracking 2`
31
+ - jinak je `tracking 0`
32
+ - Rovněž se podle kmenové linky a oběhu vytvoří následující spoje (stav je `unknown`, `tracking` je vždy 0)
33
+ - navíc se předchozímu spoji vytvoří nová pozice s `tracking 0`, všechny spoje se odešlou na `updateDelay`
34
+ - Pokud je spoj vyhodnocen jako neveřejný (např. mazačka), vytvoří se nový spoj a pozice se stavem `not_public`, tím processing končí
35
+ - updateDelay
36
+ - upsert asociovaných pozic
37
+ - opětovné načtení asociovaných pozic z DB
38
+ - určení trasy spoje podle GTFS shapes a stop times
39
+ - processing pozic, uložení do databáze
40
+ - Not tracking (`tracking` je `0`)
41
+ - pokud je poslední pozice neznámá, nebo je známá a `tracking 0`
42
+ - pokud vozidlo jede z garáže, je stav `invisible`
43
+ - jinak je stav `before_track`
44
+ - pokud je poslední známá pozice s `tracking 2`
45
+ - pokud je pozice duplicitní (existuje pozice se stejným `origin_timestamp`), stav je `duplicate`
46
+ - pokud vozidlo jede do garáže, je stav `invisible`
47
+ - jinak je stav `after_track`
48
+ - Tracking (`tracking` je `2`)
49
+ - pokud je vozidlo 200 metrů od nejblizšího bodu na trase, stav je `off_track`
50
+ - pokud je vozidlo v zastávce, je stav `at_stop`
51
+ - pokud je vozidlo mimo zastávku a zároveň vozidlo poslalo zprávu `O` mimo poslední zastávku, je stav `on_track`
52
+ - pokud je vozidlo v zastávce, nebo poslalo zprávu `V`, nebo poslalo zprávu v poslední zastávce, nebo poslalo zprávu z `tjr` atributem větší než je příjezd do poslední zastávky, je stav `after_track`
53
+ - propagateDelay
54
+ - podle kmenové linky a oběhu vyhledáme navazující spoje
55
+ - podle GTFS trip id a registračního čísla poslední pozici ve stavu `before_track` nebo `invisible`
56
+ - přepsání stavu na `before_track_delayed`
57
+
58
+ ```mermaid
59
+ flowchart TB;
60
+ A[TCP data]-->B[Transport TCP Input Gateway]--raw data 1MB buffer-->Blob[Azure Blob Storage];
61
+ B-->Qu{Datový zdroj?};
62
+ Qu--tram-->X1[AMQP saveTramRunsToDB]-->|oběhy| N[AMQP updateRunsGTFSTripId];
63
+ Qu--bus-->X2[AMQP saveBusRunsToDB]-->|oběhy| N;
64
+ X1--upsert-->runs[(DB runs)];
65
+ X2--upsert-->runs;
66
+
67
+ N-->Qn{Je neveřejný? Např. mazačka};
68
+ Qn--Ano-->X3[updateNotPublicRunTrip];
69
+ Qn--Ne-->X4[generateDelayMsg];
70
+ X3--upsert-->trips;
71
+ X3--upsert-->positions;
72
+ X4--vygenerované spoje s GTFS daty-->E[AMQP updateDelay];
73
+ X4--upsert-->trips;
74
+ X4--upsert-->positions;
75
+ E--upsert-->trips[(DB trips)];
76
+ E--upsert-->positions[(DB positions)];
77
+ E--select-->trips;
78
+ E--select-->positions;
79
+ E--uložené spoje-->F[AMQP propagateDelay];
80
+ F--select-->trips;
81
+ F--select-->positions;
82
+ F--upsert-->positions;
83
+ ```
@@ -0,0 +1,62 @@
1
+ # TCP metro state_position
2
+
3
+ - Data chodí na TCP-IG
4
+
5
+ ```xml
6
+ <m linka="A" tm="2022-07-20T13:45:34Z" gvd="GD20a">
7
+ <vlak csp=" 3" csr=" 3" cv="279" ko="1809" odch="25" />
8
+ <!--...-->
9
+ </m>
10
+ ```
11
+
12
+ - Transport (TCP) Input Gateway
13
+ - Raw data se uloží na blob storage (1MB buffer)
14
+ - knihovnou `xml2js` transformují na JSON
15
+ - pošlou na Rabbita do fronty `saveMetroRunsToDB`
16
+ - saveMetroRunsToDB
17
+ - zprávy se uloží do DB
18
+ - následně se pošlou do fronty `processMetroRunMessages`,
19
+ - processMetroRunMessages
20
+ - data se napasují na struktury tabulek `vehiclepositions_trips` a `vehiclepositions_positions` (stav je `unknown`, `tracking` je vždy 2)
21
+ - Rovněž se podle kmenové linky a oběhu vytvoří následující spoje (stav je `unknown`, `tracking` je vždy 0)
22
+ - navíc se předchozímu spoji vytvoří nová pozice s `tracking 0`
23
+ - všechny spoje se odešlou na `updateDelay`
24
+ - updateDelay
25
+ - upsert asociovaných pozic
26
+ - opětovné načtení asociovaných pozic z DB
27
+ - určení trasy spoje podle GTFS shapes a stop times
28
+ - processing pozic, uložení do databáze
29
+ - Not tracking (`tracking` je `0`)
30
+ - pokud je poslední pozice neznámá, nebo je známá a `tracking 0`, je stav `before_track`
31
+ - pokud je poslední známá pozice s `tracking 2`
32
+ - pokud je pozice duplicitní (existuje pozice se stejným `origin_timestamp`), stav je `duplicate`
33
+ - jinak je stav `after_track`
34
+ - Tracking (`tracking` je `2`)
35
+ - pokud je vozidlo 200 metrů od nejblizšího bodu na trase
36
+ - pokud vozidlo poslalo zprávu z `tm` + `odch` atributy větší než je příjezd do poslední zastávky, je stav `after_track`
37
+ - jinak je stav `off_track`
38
+ - pokud je vozidlo podle kolejového obvodu v zastávce, je stav `at_stop`
39
+ - pokud je vozidlo podle kolejového obvodu mimo zastávku, je stav `on_track`
40
+ - propagateDelay
41
+ - podle kmenové linky a oběhu vyhledáme navazující spoje
42
+ - podle GTFS trip id a registračního čísla poslední pozici ve stavu `before_track`
43
+ - přepsání stavu na `before_track_delayed`
44
+
45
+ ```mermaid
46
+ flowchart TB;
47
+ A[TCP data]-->B[Transport TCP Input Gateway]--raw data 1MB buffer-->Blob[Azure Blob Storage];
48
+ B-->X1[AMQP saveMetroRunsToDB]-->|oběhy| N[AMQP processMetroRunMessages];
49
+ X1--upsert-->runs[(DB runs)];
50
+
51
+ N--upsert-->trips;
52
+ N--upsert-->positions;
53
+ N--vygenerované spoje s GTFS daty-->E[AMQP updateDelay];
54
+ E--upsert-->trips[(DB trips)];
55
+ E--upsert-->positions[(DB positions)];
56
+ E--select-->trips;
57
+ E--select-->positions;
58
+ E--uložené spoje-->F[AMQP propagateDelay];
59
+ F--select-->trips;
60
+ F--select-->positions;
61
+ F--upsert-->positions;
62
+ ```
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@golemio/pid",
3
- "version": "2.6.1-dev.808432286",
3
+ "version": "2.6.2-dev.813420095",
4
4
  "description": "Golemio PID Module",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",