@golemio/pid 6.0.1-dev.2901184022 → 6.0.1-dev.2912471131
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.
- package/docs/architecture/diagrams/context.mmd +114 -0
- package/docs/architecture/diagrams/context.svg +1 -0
- package/docs/architecture/diagrams/platform-ingestion.mmd +94 -0
- package/docs/architecture/diagrams/platform-ingestion.svg +1 -0
- package/docs/architecture/diagrams/platform-serving.mmd +81 -0
- package/docs/architecture/diagrams/platform-serving.svg +1 -0
- package/docs/architecture/index.md +105 -0
- package/docs/assets/logos/README.md +38 -0
- package/docs/assets/logos/arriva.svg +9 -0
- package/docs/assets/logos/azure-blob-storage.svg +1 -0
- package/docs/assets/logos/azure-kubernetes-service.svg +1 -0
- package/docs/assets/logos/azure-table-storage.svg +1 -0
- package/docs/assets/logos/catch.png +0 -0
- package/docs/assets/logos/cd-telematika.png +0 -0
- package/docs/assets/logos/ceske-drahy.svg +15 -0
- package/docs/assets/logos/chaps.png +0 -0
- package/docs/assets/logos/citymove.png +0 -0
- package/docs/assets/logos/cloudflare.png +0 -0
- package/docs/assets/logos/dpp.svg +119 -0
- package/docs/assets/logos/envoy.svg +1 -0
- package/docs/assets/logos/golemio.svg +1 -0
- package/docs/assets/logos/google-maps.svg +78 -0
- package/docs/assets/logos/grafana-loki.png +0 -0
- package/docs/assets/logos/grafana.svg +57 -0
- package/docs/assets/logos/mikroelektronika.png +0 -0
- package/docs/assets/logos/nodejs.svg +39 -0
- package/docs/assets/logos/pid-litacka.svg +17 -0
- package/docs/assets/logos/pid.svg +1 -0
- package/docs/assets/logos/postgresql.svg +22 -0
- package/docs/assets/logos/rabbitmq.svg +54 -0
- package/docs/assets/logos/ropid.svg +1 -0
- package/docs/assets/logos/seznam.svg +115 -0
- package/docs/assets/logos/telmax.png +0 -0
- package/docs/assets/logos/typescript.svg +1 -0
- package/docs/assets/logos/valkey.svg +58 -0
- package/docs/assets/logos/varnish.svg +21 -0
- package/docs/asyncapi.yaml +5 -3
- package/docs/cache/types/redis.md +1 -1
- package/docs/implementation_documentation.md +40 -42
- package/docs/index.md +382 -0
- package/docs/jis/index.md +84 -94
- package/docs/openapi-input.yaml +3 -2
- package/docs/openapi-output.yaml +3 -1
- package/package.json +2 -2
- package/docs/architecture/pid_architecture_overview.drawio +0 -177
package/docs/index.md
ADDED
|
@@ -0,0 +1,382 @@
|
|
|
1
|
+
# PID Polohy
|
|
2
|
+
|
|
3
|
+
PID Polohy je soubor služeb datové platformy [Golemio](https://golemio.cz/) navržený pro příjem, zpracování a publikaci dat Pražské integrované dopravy (PID) – poloh vozidel v reálném čase, jízdních řádů (GTFS), odjezdových a přestupních tabulí, událostí (mimořádností, výluk, trvalých změn i událostí interních) a infotextů – s důrazem na aktuálnost, spolehlivost, strojovou čitelnost a otevřené standardy (GTFS, GTFS Realtime). Data přijímá od dopravců, ze systému MPVnet, z ROPID a z aplikací VYMI a Tabulátor. Poskytuje je odjezdovým či přestupním tabulím, aplikacím a otevřeným datům prostřednictvím REST API a GTFS-RT feedů.
|
|
4
|
+
|
|
5
|
+
## Rozcestník
|
|
6
|
+
|
|
7
|
+
- Dokumentace API:
|
|
8
|
+
- [OpenAPI/Swagger dokumentace výstupního API]
|
|
9
|
+
- [OpenAPI/Swagger dokumentace výstupního API testovacího prostředí Rabín]
|
|
10
|
+
- [Zdrojový soubor OpenAPI výstupního API]
|
|
11
|
+
- [OpenAPI/Swagger dokumentace vstupního API]
|
|
12
|
+
- [OpenAPI/Swagger dokumentace vstupního API testovacího prostředí Rabín]
|
|
13
|
+
- [Zdrojový soubor OpenAPI vstupního API]
|
|
14
|
+
- Repozitáře a issues:
|
|
15
|
+
- [PID Polohy issues]
|
|
16
|
+
- [Repozitář modulu pid]
|
|
17
|
+
- [Repozitář modulu core]
|
|
18
|
+
- [Repozitář VP Input Gateway]
|
|
19
|
+
- [Repozitář TCP Input Gateway]
|
|
20
|
+
- [Repozitář VP Integration Engine]
|
|
21
|
+
- [Repozitář VP Output Gateway]
|
|
22
|
+
- [Repozitář URL Proxy]
|
|
23
|
+
- [Repozitář Data Proxy]
|
|
24
|
+
- [Repozitář Cron Tasks]
|
|
25
|
+
- Architektura:
|
|
26
|
+
- [Architektura PID Poloh]
|
|
27
|
+
- [Architektura platformy Golemio]
|
|
28
|
+
- [Upřesňující popis architektury platformy Golemio]
|
|
29
|
+
- Podrobná dokumentace:
|
|
30
|
+
- [Dokumentace propisu VYMI dat do datové platformy Golemio]
|
|
31
|
+
- [Dokumentace zpracování RT dat](./processing/index.md)
|
|
32
|
+
- [Vstupní data HTTP MPVnet (autobusy mimo DPP, přívozy, vlaky)](./processing/input_realtime_data/http_mpvnet.md)
|
|
33
|
+
- [Vstupní data TCP DPP tramvaje](./processing/input_realtime_data/tcp_dpp_tram.md)
|
|
34
|
+
- [Vstupní data TCP DPP autobusy a trolejbusy](./processing/input_realtime_data/tcp_dpp_bus.md)
|
|
35
|
+
- [Vstupní data TCP DPP metro](./processing/input_realtime_data/tcp_dpp_metro.md)
|
|
36
|
+
- [Určení stavu vozidla na trase – HTTP MPVnet](./processing/state_position_tracking/http_mpvnet.md)
|
|
37
|
+
- [Určení stavu vozidla na trase – TCP DPP](./processing/state_position_tracking/tcp_dpp_common.md)
|
|
38
|
+
- [Určení stavu vozidla na trase – TCP DPP metro](./processing/state_position_tracking/tcp_dpp_metro.md)
|
|
39
|
+
- [Vstupní data](./processing/input_realtime_data/tcp_telmax_arriva_city.md) a [určení stavu vozidla](./processing/state_position_tracking/tcp_telmax_arriva_city.md) TCP Telmax Arriva City (integrace je v produkci vypnutá, Arriva City přichází přes MPVnet)
|
|
40
|
+
- [Párování MPVnet spojů na spoje GTFS](./processing/trip_matching.md)
|
|
41
|
+
- [Trip context – stav spoje mezi polohami](./processing/trip_context/index.md)
|
|
42
|
+
- [Mapování typů vozidel MPVnet na GTFS](./processing/vehicle_types.md)
|
|
43
|
+
- [Filtrování přestupních tabulí /v4/pid/transferboards](./processing/transferboards_filtering.md)
|
|
44
|
+
- [Chybějící odjezdy (MISSING) v API odjezdových tabulí](./jis/missing.md)
|
|
45
|
+
- [Dokumentace cache]
|
|
46
|
+
- [Redis (Valkey) cache](./cache/types/redis.md)
|
|
47
|
+
- [In-memory cache](./cache/types/in_memory.md)
|
|
48
|
+
- [PostgreSQL cache](./cache/types/psql.md)
|
|
49
|
+
- [Implementační dokumentace]
|
|
50
|
+
- [Vstupní data a zdrojové systémy](./implementation_documentation.md#vstupní-data)
|
|
51
|
+
- [Workery, tasky a fronty](./implementation_documentation.md#zpracování-dat-transformace)
|
|
52
|
+
- [Uložení a retence dat](./implementation_documentation.md#uložení-dat) (obsahuje i ERD diagramy databáze)
|
|
53
|
+
- [Výstupní API](./implementation_documentation.md#output-api)
|
|
54
|
+
- [Vstupní API](./implementation_documentation.md#input-api)
|
|
55
|
+
- [AsyncAPI front RabbitMQ – zdrojový soubor]
|
|
56
|
+
|
|
57
|
+
[OpenAPI/Swagger dokumentace výstupního API]: https://api.golemio.cz/pid/docs/openapi/
|
|
58
|
+
[OpenAPI/Swagger dokumentace výstupního API testovacího prostředí Rabín]: https://rabin.golemio.cz/pid/docs/openapi/
|
|
59
|
+
[Zdrojový soubor OpenAPI výstupního API]: ./openapi-output.yaml
|
|
60
|
+
[OpenAPI/Swagger dokumentace vstupního API]: https://api.golemio.cz/pid/input-gateway/docs/openapi/
|
|
61
|
+
[OpenAPI/Swagger dokumentace vstupního API testovacího prostředí Rabín]: https://rabin.golemio.cz/pid/input-gateway/docs/openapi/
|
|
62
|
+
[Zdrojový soubor OpenAPI vstupního API]: ./openapi-input.yaml
|
|
63
|
+
[PID Polohy issues]: https://gitlab.com/operator-ict/golemio/code/modules/pid/-/work_items
|
|
64
|
+
[Repozitář modulu pid]: https://gitlab.com/operator-ict/golemio/code/modules/pid
|
|
65
|
+
[Repozitář modulu core]: https://gitlab.com/operator-ict/golemio/code/modules/core
|
|
66
|
+
[Repozitář Cron Tasks]: https://gitlab.com/operator-ict/golemio/code/cron-tasks
|
|
67
|
+
[Repozitář VP Input Gateway]: https://gitlab.com/operator-ict/golemio/code/vp/input-gateway
|
|
68
|
+
[Repozitář TCP Input Gateway]: https://gitlab.com/operator-ict/golemio/code/tcp-input-gateway
|
|
69
|
+
[Repozitář VP Integration Engine]: https://gitlab.com/operator-ict/golemio/code/vp/integration-engine
|
|
70
|
+
[Repozitář VP Output Gateway]: https://gitlab.com/operator-ict/golemio/code/vp/output-gateway
|
|
71
|
+
[Repozitář URL Proxy]: https://gitlab.com/operator-ict/golemio/code/url-proxy
|
|
72
|
+
[Repozitář Data Proxy]: https://gitlab.com/operator-ict/golemio/code/data-proxy
|
|
73
|
+
[Architektura PID Poloh]: ./architecture/index.md
|
|
74
|
+
[Architektura platformy Golemio]: https://operator-ict.gitlab.io/golemio/documentation/cs/architektura/architektura/
|
|
75
|
+
[Upřesňující popis architektury platformy Golemio]: https://operator-ict.gitlab.io/golemio/documentation/cs/architektura/architektura-systemu/
|
|
76
|
+
[Dokumentace propisu VYMI dat do datové platformy Golemio]: ./jis/index.md
|
|
77
|
+
[Dokumentace cache]: ./cache/index.md
|
|
78
|
+
[Implementační dokumentace]: ./implementation_documentation.md
|
|
79
|
+
[AsyncAPI front RabbitMQ – zdrojový soubor]: ./asyncapi.yaml
|
|
80
|
+
|
|
81
|
+
## Komponenty
|
|
82
|
+
|
|
83
|
+
Systém PID Polohy se skládá z následujících komponent.
|
|
84
|
+
|
|
85
|
+
### Modul pid
|
|
86
|
+
|
|
87
|
+
Modul `@golemio/pid` (tento repozitář) obsahuje sdílenou doménovou logiku PID Poloh – endpointy vstupního a výstupního API, workery a tasky pro zpracování dat, validační schémata a datový model. Služby VP Input Gateway, VP Integration Engine, VP Output Gateway a URL Proxy ho instalují jako npm balíček. TCP Input Gateway a Data Proxy modul pid nepoužívají. Zahrnuje zejména následující funkce:
|
|
88
|
+
- Endpointy vstupního API pro VP Input Gateway (polohy vozidel z MPVnetu, presety tabulí z Tabulátoru, události a infotexty z VYMI).
|
|
89
|
+
- Workery a tasky pro VP Integration Engine podle subdomén: jízdní řády, statická data a presety tabulí ROPID (`ropid-gtfs`), polohy vozidel, oběhy, GTFS-RT feedy a popis vozidel (`vehicle-positions`), události a infotexty VYMI (`jis`) a retence dat (`data-retention`).
|
|
90
|
+
- Routery výstupního API pro VP Output Gateway: odjezdové a přestupní tabule, infotexty a presety (`pid`), veřejné API (`public`), jízdní řády GTFS (`ropid-gtfs`), polohy vozidel a GTFS-RT feedy (`vehicle-positions`) a události VYMI (`jis`).
|
|
91
|
+
- Validační schémata vstupních dat a datový model ve schématu `pid`.
|
|
92
|
+
- Databázové migrace PostgreSQL.
|
|
93
|
+
- Dokumentace OpenAPI vstupního a výstupního API a AsyncAPI front.
|
|
94
|
+
|
|
95
|
+
Klíčové technické komponenty:
|
|
96
|
+
- Jazyk TypeScript.
|
|
97
|
+
- Správa závislostí s npm a distribuce jako npm balíček `@golemio/pid`.
|
|
98
|
+
- Modul core (peer dependency).
|
|
99
|
+
- GTFS Realtime (Protocol Buffers) pomocí @golemio/ovapi-gtfs-realtime-bindings.
|
|
100
|
+
- Geometrické výpočty pomocí Turf a cheap-ruler.
|
|
101
|
+
- Zpracování CSV pomocí csv-parser a csv-stringify a hromadný import do PostgreSQL pomocí pg-copy-streams.
|
|
102
|
+
- XML výstup odjezdových tabulí pomocí fast-xml-builder.
|
|
103
|
+
- Podpora migrací databáze za pomoci Golemio CLI.
|
|
104
|
+
- Pokrytí testy pomocí Mocha, Chai, Sinon, Supertest a Portman.
|
|
105
|
+
|
|
106
|
+
[Repozitář modulu pid].
|
|
107
|
+
|
|
108
|
+
### Modul core
|
|
109
|
+
|
|
110
|
+
Modul core (`@golemio/core`) je společný základ služeb datové platformy Golemio. Používají ho všechny služby PID Poloh, Cron Tasks i modul pid. Zahrnuje zejména následující funkce:
|
|
111
|
+
- Základ aplikací Input Gateway, Integration Engine a Output Gateway (Express server, routery, workery, tasky a zpracování front).
|
|
112
|
+
- Připojení k PostgreSQL, RabbitMQ a Valkey (Redis API), včetně pub/sub a distribuovaných zámků.
|
|
113
|
+
- DI kontejnery pro jednotlivé služby.
|
|
114
|
+
- Přístup k Azure Blob Storage a Azure Table Storage.
|
|
115
|
+
- Datové zdroje (HTTP, FTP/FTPS) s parsováním CSV, JSON, XML a ZIP.
|
|
116
|
+
- Validace dat pomocí JSON schémat.
|
|
117
|
+
- Konfigurace služeb.
|
|
118
|
+
- Logování, health check a řízené ukončení služby, metriky a trasování.
|
|
119
|
+
- Jednotné zpracování chyb.
|
|
120
|
+
|
|
121
|
+
Klíčové technické komponenty:
|
|
122
|
+
- Jazyk TypeScript.
|
|
123
|
+
- Správa závislostí s npm a distribuce jako npm balíček `@golemio/core`.
|
|
124
|
+
- Framework Express.
|
|
125
|
+
- Integrace databáze PostgreSQL s ORM Sequelize.
|
|
126
|
+
- Klient RabbitMQ amqplib a klient Redis API ioredis.
|
|
127
|
+
- Injekce závislostí s TSyringe.
|
|
128
|
+
- Azure SDK pro Blob Storage a Table Storage.
|
|
129
|
+
- Validace JSON schémat pomocí AJV.
|
|
130
|
+
- Logování pomocí Pino, health check pomocí Lightship, metriky pomocí prom-client a trasování pomocí OpenTelemetry.
|
|
131
|
+
|
|
132
|
+
[Repozitář modulu core].
|
|
133
|
+
|
|
134
|
+
### VP Input Gateway
|
|
135
|
+
|
|
136
|
+
VP Input Gateway (VP IG) je varianta Golemio Input Gateway vyhrazená pro data veřejné dopravy. Vystavuje neveřejné REST API pro příjem (push) dat a přijatá data předává ke zpracování do fronty RabbitMQ. Endpointy poskytuje modul pid. Zahrnuje zejména následující funkce:
|
|
137
|
+
- Příjem poloh vozidel ze systému MPVnet ve formátu XML (`POST /vehiclepositions`).
|
|
138
|
+
- Příjem presetů odjezdových tabulí z aplikace Tabulátor (`POST /ropidgtfs/presets`).
|
|
139
|
+
- Příjem událostí a infotextů z aplikace VYMI (`POST /jis/events`, `POST /jis/infotexts`), viz [Dokumentace propisu VYMI dat do datové platformy Golemio].
|
|
140
|
+
- Validace vstupních dat a omezení velikosti požadavků (JSON, XML).
|
|
141
|
+
- Archivace surových vstupních dat do Azure Blob Storage.
|
|
142
|
+
- Odesílání zpráv do fronty RabbitMQ.
|
|
143
|
+
- Health check, metriky a trasování pro monitoring.
|
|
144
|
+
- Dokumentace OpenAPI/Swagger ([OpenAPI/Swagger dokumentace vstupního API] a [OpenAPI/Swagger dokumentace vstupního API testovacího prostředí Rabín]).
|
|
145
|
+
|
|
146
|
+
Klíčové technické komponenty:
|
|
147
|
+
- Docker pro kontejnerizaci aplikace.
|
|
148
|
+
- Runtime Node.js.
|
|
149
|
+
- Správa závislostí s npm.
|
|
150
|
+
- Jazyk TypeScript.
|
|
151
|
+
- Framework Express (prostřednictvím modulu core).
|
|
152
|
+
- Modul core a modul `@golemio/pid`.
|
|
153
|
+
- Zpracování JSON a XML požadavků pomocí body-parser a body-parser-xml.
|
|
154
|
+
- Dokumentace OpenAPI pomocí swagger-ui-express.
|
|
155
|
+
- Pokrytí testy pomocí Mocha, Chai, Sinon a Supertest.
|
|
156
|
+
|
|
157
|
+
[Repozitář VP Input Gateway].
|
|
158
|
+
|
|
159
|
+
### TCP Input Gateway
|
|
160
|
+
|
|
161
|
+
TCP Input Gateway (TCP IG) přijímá surová RT data o obězích vozidel DPP, která přicházejí po TCP, a předává je do fronty RabbitMQ. Modul pid nepoužívá, využívá pouze modul core. Zahrnuje zejména následující funkce:
|
|
162
|
+
- TCP přijímače zpráv o obězích tramvají, autobusů a trolejbusů a metra DPP (XML).
|
|
163
|
+
- Skládání zpráv z TCP streamu, jejich filtrování a parsování.
|
|
164
|
+
- Archivace surových dat do Azure Table Storage.
|
|
165
|
+
- Odesílání zpráv do fronty RabbitMQ ke zpracování ve VP Integration Engine.
|
|
166
|
+
- Přijímač TCP zpráv Telmax (Arriva City) – v kódu existuje, v produkci se nevyužívá.
|
|
167
|
+
|
|
168
|
+
Klíčové technické komponenty:
|
|
169
|
+
- Docker pro kontejnerizaci aplikace.
|
|
170
|
+
- Runtime Node.js.
|
|
171
|
+
- Správa závislostí s npm.
|
|
172
|
+
- Jazyk TypeScript.
|
|
173
|
+
- Modul core (RabbitMQ, Azure Table Storage, logování).
|
|
174
|
+
- Injekce závislostí s TSyringe (prostřednictvím modulu core).
|
|
175
|
+
- Parsování XML pomocí xml2js.
|
|
176
|
+
- Pokrytí testy pomocí Jest.
|
|
177
|
+
|
|
178
|
+
[Repozitář TCP Input Gateway].
|
|
179
|
+
|
|
180
|
+
### VP Integration Engine
|
|
181
|
+
|
|
182
|
+
VP Integration Engine (VP IE) je varianta Golemio Integration Engine vyhrazená pro polohy vozidel. Spouští workery modulu pid, které zpracovávají zprávy z front RabbitMQ, stahují externí data a výsledky ukládají do PostgreSQL a Valkey. Zahrnuje zejména následující funkce:
|
|
183
|
+
- Načtení workerů a definic front z modulů Golemio (`@golemio/pid` a další moduly platformy) a konzumace front RabbitMQ.
|
|
184
|
+
- Stahování a zpracování jízdních řádů GTFS a statických dat z ROPID.
|
|
185
|
+
- Zpracování poloh vozidel a oběhů, párování na spoje GTFS, výpočet a propagace zpoždění ([Dokumentace zpracování RT dat](./processing/index.md)).
|
|
186
|
+
- Generování GTFS-RT feedů a obnova cache pro výstupní API.
|
|
187
|
+
- Zpracování událostí a infotextů z aplikace VYMI a odchozí webhook událostí.
|
|
188
|
+
- Presety odjezdových tabulí a hlášení pro Dohledové centrum ROPID (DCIP).
|
|
189
|
+
- Popis vozidel a retence dat.
|
|
190
|
+
- Health check (PostgreSQL, Valkey, RabbitMQ), metriky a trasování pro monitoring.
|
|
191
|
+
- Dokumentace front ve formátu AsyncAPI.
|
|
192
|
+
|
|
193
|
+
Klíčové technické komponenty:
|
|
194
|
+
- Docker pro kontejnerizaci aplikace.
|
|
195
|
+
- Runtime Node.js.
|
|
196
|
+
- Správa závislostí s npm.
|
|
197
|
+
- Jazyk TypeScript.
|
|
198
|
+
- Modul core, Golemio DB Common module a modul `@golemio/pid`.
|
|
199
|
+
- Integrace databáze PostgreSQL s ORM Sequelize (prostřednictvím modulu core).
|
|
200
|
+
- Injekce závislostí s TSyringe (prostřednictvím modulu core).
|
|
201
|
+
- Sloučení a generování AsyncAPI dokumentace pomocí Golemio CLI a AsyncAPI CLI.
|
|
202
|
+
- Pokrytí testy pomocí Mocha, Chai, Sinon a Supertest.
|
|
203
|
+
|
|
204
|
+
[Repozitář VP Integration Engine].
|
|
205
|
+
|
|
206
|
+
### VP Output Gateway
|
|
207
|
+
|
|
208
|
+
VP Output Gateway (VP OG) je varianta Golemio Output Gateway vyhrazená pro data veřejné dopravy. Vystavuje REST API pro čtení dat uložených v PostgreSQL a Valkey. Endpointy PID Poloh poskytuje modul pid. Zahrnuje zejména následující funkce:
|
|
209
|
+
- REST API jízdních řádů GTFS (`/v2/gtfs/*`), ze kterého čtou data mj. aplikace VYMI a Tabulátor.
|
|
210
|
+
- REST API poloh vozidel (`/v2/vehiclepositions`) a GTFS-RT feedy (`/v2/vehiclepositions/gtfsrt/*.pb`).
|
|
211
|
+
- REST API odjezdových a přestupních tabulí, infotextů a presetů tabulí (`/v2/pid/*`, `/v3/pid/*`, `/v4/pid/*`).
|
|
212
|
+
- Veřejné REST API poloh vozidel a odjezdů (`/v2/public/*`).
|
|
213
|
+
- Interní REST API událostí z aplikace VYMI (`/v1/jis/events/custom-format`).
|
|
214
|
+
- Komprese odpovědí.
|
|
215
|
+
- Health check, metriky a trasování pro monitoring.
|
|
216
|
+
- Dokumentace OpenAPI/Swagger ([OpenAPI/Swagger dokumentace výstupního API] a [OpenAPI/Swagger dokumentace výstupního API testovacího prostředí Rabín]).
|
|
217
|
+
|
|
218
|
+
Klíčové technické komponenty:
|
|
219
|
+
- Docker pro kontejnerizaci aplikace.
|
|
220
|
+
- Runtime Node.js.
|
|
221
|
+
- Správa závislostí s npm.
|
|
222
|
+
- Jazyk TypeScript.
|
|
223
|
+
- Framework Express (prostřednictvím modulu core).
|
|
224
|
+
- Modul core, modul `@golemio/pid` a další moduly platformy.
|
|
225
|
+
- Integrace databáze PostgreSQL s ORM Sequelize a Valkey (prostřednictvím modulu core).
|
|
226
|
+
- Komprese odpovědí pomocí compression.
|
|
227
|
+
- Dokumentace OpenAPI pomocí swagger-ui-express.
|
|
228
|
+
- Pokrytí testy pomocí Mocha, Chai, Sinon a Supertest.
|
|
229
|
+
|
|
230
|
+
[Repozitář VP Output Gateway].
|
|
231
|
+
|
|
232
|
+
### URL Proxy
|
|
233
|
+
|
|
234
|
+
URL Proxy překládá krátké URL odjezdových tabulí (presety) na volání API odjezdových tabulí ve VP Output Gateway. Zahrnuje zejména následující funkce:
|
|
235
|
+
- Načítání definic presetů z PostgreSQL (tabulka presetů modulu pid) a jejich pravidelná obnova cronem.
|
|
236
|
+
- Překlad krátké URL `https://s.golemio.cz/pid/<název presetu>` na adresu API s parametry presetu.
|
|
237
|
+
- Přeposílání požadavků (reverse proxy) na API s API klíčem služby.
|
|
238
|
+
- Logy požadavků, ze kterých modul pid přes Grafana Loki sestavuje hlášení pro Dohledové centrum ROPID (DCIP).
|
|
239
|
+
- Health check (PostgreSQL).
|
|
240
|
+
|
|
241
|
+
Klíčové technické komponenty:
|
|
242
|
+
- Docker pro kontejnerizaci aplikace.
|
|
243
|
+
- Runtime Node.js.
|
|
244
|
+
- Správa závislostí s npm.
|
|
245
|
+
- Jazyk TypeScript.
|
|
246
|
+
- Framework Express (prostřednictvím modulu core).
|
|
247
|
+
- Modul core a modul `@golemio/pid` (datový model presetů).
|
|
248
|
+
- Reverse proxy pomocí http-proxy-middleware.
|
|
249
|
+
- Spouštění cron tasků za pomoci knihovny cron.
|
|
250
|
+
- Pokrytí testy pomocí Mocha, Chai, Sinon a Supertest.
|
|
251
|
+
|
|
252
|
+
[Repozitář URL Proxy].
|
|
253
|
+
|
|
254
|
+
### Data Proxy
|
|
255
|
+
|
|
256
|
+
Data Proxy přijímá RT data před VP IG / TCP IG a rozesílá je na nakonfigurované cíle. Modul pid nepoužívá, využívá pouze modul core. Zahrnuje zejména následující funkce:
|
|
257
|
+
- HTTP, TCP a UDP proxy servery podle konfigurace.
|
|
258
|
+
- Rozesílání každé přijaté zprávy na více cílů (např. vstupní brány a přeposílání TCP toků tramvají a autobusů DPP do MPVnetu).
|
|
259
|
+
- Sdílené keep-alive spojení na cíle HTTP proxy.
|
|
260
|
+
- Volitelné statistiky provozu cílů, pravidelně ukládané do Azure Blob Storage.
|
|
261
|
+
|
|
262
|
+
Klíčové technické komponenty:
|
|
263
|
+
- Docker pro kontejnerizaci aplikace.
|
|
264
|
+
- Runtime Node.js.
|
|
265
|
+
- Správa závislostí s npm.
|
|
266
|
+
- Jazyk TypeScript.
|
|
267
|
+
- Modul core (Azure Blob Storage, logování).
|
|
268
|
+
- HTTP proxy pomocí http-proxy-3 a rozesílání streamů pomocí multi-write-stream.
|
|
269
|
+
- Spouštění cron tasků za pomoci knihovny croner.
|
|
270
|
+
- Pokrytí testy pomocí Mocha, Chai, Sinon a Supertest.
|
|
271
|
+
|
|
272
|
+
[Repozitář Data Proxy].
|
|
273
|
+
|
|
274
|
+
### Cron Tasks
|
|
275
|
+
|
|
276
|
+
Cron Tasks je služba datové platformy Golemio, která v nastavených časech posílá zprávy do RabbitMQ a tím spouští pravidelné úlohy ve VP Integration Engine. Data sama nezpracovává. Zahrnuje zejména následující funkce:
|
|
277
|
+
- Definice úloh v konfiguraci (čas ve formátu cron, exchange, routing key, obsah zprávy) s možností úlohu dočasně vypnout.
|
|
278
|
+
- Odeslání zprávy do RabbitMQ v nastavený čas.
|
|
279
|
+
|
|
280
|
+
Klíčové technické komponenty:
|
|
281
|
+
- Docker pro kontejnerizaci aplikace.
|
|
282
|
+
- Runtime Node.js.
|
|
283
|
+
- Správa závislostí s npm.
|
|
284
|
+
- Jazyk TypeScript.
|
|
285
|
+
- Modul core (RabbitMQ, trasování).
|
|
286
|
+
- Spouštění cron tasků za pomoci knihovny cron.
|
|
287
|
+
- Logování pomocí Pino a debug.
|
|
288
|
+
- Pokrytí testy pomocí Mocha, Chai, Sinon a Supertest.
|
|
289
|
+
|
|
290
|
+
[Repozitář Cron Tasks].
|
|
291
|
+
|
|
292
|
+
## Podpůrné komponenty
|
|
293
|
+
|
|
294
|
+
Podrobnosti ke všem podpůrným komponentám popisuje [Architektura PID Poloh].
|
|
295
|
+
|
|
296
|
+
### Databáze a cache
|
|
297
|
+
|
|
298
|
+
- **PostgreSQL + PostGIS** - Hlavní databáze modulu pid:
|
|
299
|
+
- Ukládá jízdní řády, polohy vozidel, presety tabulí a události a infotexty z VYMI ve schématu `pid`.
|
|
300
|
+
- Datový model popisují ERD diagramy v implementační dokumentaci.
|
|
301
|
+
|
|
302
|
+
- **Valkey (Redis API)** - In-memory key-value databáze (cache):
|
|
303
|
+
- Slouží jako cache pro zpracování RT dat a pro výstupní API.
|
|
304
|
+
- Uchovává vygenerované GTFS-RT feedy a zajišťuje pub/sub.
|
|
305
|
+
- Klíče popisuje [Dokumentace cache].
|
|
306
|
+
|
|
307
|
+
### Fronty a úložiště
|
|
308
|
+
|
|
309
|
+
- **RabbitMQ** - Fronta zpráv:
|
|
310
|
+
- Předává zprávy mezi vstupními branami, Cron Tasks a VP Integration Engine.
|
|
311
|
+
- Fronty popisuje [AsyncAPI front RabbitMQ – zdrojový soubor].
|
|
312
|
+
|
|
313
|
+
- **Azure Blob Storage, Azure Table Storage** - Úložiště souborů a tabulek:
|
|
314
|
+
- Archivuje surová vstupní data (HTTP v Blob Storage, TCP v Table Storage).
|
|
315
|
+
- Uchovává soubory statických dat.
|
|
316
|
+
|
|
317
|
+
### Přístupová vrstva
|
|
318
|
+
|
|
319
|
+
- **Access Proxy** - Ověřování a autorizace požadavků:
|
|
320
|
+
- Ověřuje API klíče a role před vstupním i výstupním API.
|
|
321
|
+
|
|
322
|
+
- **Permission Management, API Key Management, Admin panel** - Správa oprávnění:
|
|
323
|
+
- Spravují role uživatelů a API klíče, které ověřuje Access Proxy.
|
|
324
|
+
|
|
325
|
+
- **Envoy Gateway** - Ingress do clusteru:
|
|
326
|
+
- Přijímá HTTP i TCP provoz.
|
|
327
|
+
|
|
328
|
+
- **Cloudflare** - CDN a DNS proxy před veřejným API:
|
|
329
|
+
- Cache GTFS-RT feedů maže VP Integration Engine po jejich vygenerování.
|
|
330
|
+
|
|
331
|
+
- **Varnish** - HTTP cache:
|
|
332
|
+
- Cachuje vybrané endpointy VP Output Gateway.
|
|
333
|
+
|
|
334
|
+
### Běhové prostředí a monitoring
|
|
335
|
+
|
|
336
|
+
- **Azure Kubernetes Service** - Běhové prostředí:
|
|
337
|
+
- Všechny služby běží jako kontejnery v Kubernetes.
|
|
338
|
+
|
|
339
|
+
- **Grafana, Loki, Tempo, Azure Managed Prometheus** - Monitoring:
|
|
340
|
+
- Služby posílají logy (Loki), trasování (Tempo) a metriky (Azure Managed Prometheus), Grafana je zobrazuje.
|
|
341
|
+
- Z Loki modul pid navíc čte logy požadavků URL Proxy.
|
|
342
|
+
|
|
343
|
+
### Vývoj a nasazení
|
|
344
|
+
|
|
345
|
+
- **Docker** - Kontejnerizace:
|
|
346
|
+
- Každá služba sestavuje image ve vícestupňovém buildu nad Node.js Alpine image.
|
|
347
|
+
|
|
348
|
+
- **npm** - Distribuce modulu:
|
|
349
|
+
- Modul pid se do služeb instaluje jako npm balíček `@golemio/pid` v přesné verzi.
|
|
350
|
+
|
|
351
|
+
- **Golemio CLI** - Vývojářské nástroje:
|
|
352
|
+
- Import testovacích dat do databáze, testy OpenAPI dokumentace proti běžícímu API a sloučení AsyncAPI dokumentace modulů.
|
|
353
|
+
|
|
354
|
+
## Architektura
|
|
355
|
+
|
|
356
|
+
[](./architecture/diagrams/context.svg)
|
|
357
|
+
|
|
358
|
+
Kontextový diagram ukazuje zdrojové systémy (dopravci a telematika, DPP, MPVnet, ROPID FTPS, VYMI, Tabulátor a další), platformu Golemio a odběratele dat (odjezdové a přestupní tabule, Mapa PID, aplikace PID Lítačka, Google Maps, Jízdní řády Seznam.cz (dříve PubTran), Škoda Citymove nebo Catch (GTFS-RT)). Logy odjezdových tabulí se také posílají na Dohledové centrum ROPID (DCIP). Polohy vozidel přicházejí přes MPVnet (HTTP), z dispečinků DPP přímo (TCP, Golemio je přeposílá do MPVnetu) a data metra přes proxy MPVnetu (TCP), statická data a data VYMI si Golemio stahuje a VYMI a Tabulátor navíc změny aktivně posílají. [Architektura PID Poloh] obsahuje legendu a podrobnější diagramy [příjmu a zpracování dat](./architecture/index.md#2-příjem-a-zpracování-dat) a [poskytování dat](./architecture/index.md#3-poskytování-dat) a popis [běhového prostředí a monitoringu](./architecture/index.md#běhové-prostředí-a-monitoring).
|
|
359
|
+
|
|
360
|
+
## Vývoj
|
|
361
|
+
|
|
362
|
+
Modul je určen pro služby datové platformy Golemio. Použití, lokální vývoj a další informace popisuje [README modulu core](https://gitlab.com/operator-ict/golemio/code/modules/core/-/blob/development/README.md).
|
|
363
|
+
|
|
364
|
+
Požadavky pro lokální spuštění testů:
|
|
365
|
+
- Node.js a npm.
|
|
366
|
+
- PostgreSQL s rozšířením PostGIS, Valkey (nebo Redis) a RabbitMQ.
|
|
367
|
+
- Soubor `.env` vytvořený podle `.env.template` s připojeními k těmto službám.
|
|
368
|
+
|
|
369
|
+
Sestavení, kontrola kódu a testy modulu:
|
|
370
|
+
|
|
371
|
+
```bash
|
|
372
|
+
npm run build
|
|
373
|
+
npm run lint
|
|
374
|
+
# import testovacích dat do databáze a obnova předpočítaných tabulek, poté testy
|
|
375
|
+
npm test
|
|
376
|
+
# ověření docs/openapi-output.yaml proti běžícímu API (prepare-db zároveň sestaví modul)
|
|
377
|
+
npm run prepare-db && npm run apidocs-test-output:only
|
|
378
|
+
```
|
|
379
|
+
|
|
380
|
+
## Kontakty
|
|
381
|
+
|
|
382
|
+
Problémy a dotazy hlaste přes [Issues][PID Polohy issues] nebo emailem na [golemio@operatorict.cz](mailto:golemio@operatorict.cz).
|