@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.
Files changed (45) hide show
  1. package/docs/architecture/diagrams/context.mmd +114 -0
  2. package/docs/architecture/diagrams/context.svg +1 -0
  3. package/docs/architecture/diagrams/platform-ingestion.mmd +94 -0
  4. package/docs/architecture/diagrams/platform-ingestion.svg +1 -0
  5. package/docs/architecture/diagrams/platform-serving.mmd +81 -0
  6. package/docs/architecture/diagrams/platform-serving.svg +1 -0
  7. package/docs/architecture/index.md +105 -0
  8. package/docs/assets/logos/README.md +38 -0
  9. package/docs/assets/logos/arriva.svg +9 -0
  10. package/docs/assets/logos/azure-blob-storage.svg +1 -0
  11. package/docs/assets/logos/azure-kubernetes-service.svg +1 -0
  12. package/docs/assets/logos/azure-table-storage.svg +1 -0
  13. package/docs/assets/logos/catch.png +0 -0
  14. package/docs/assets/logos/cd-telematika.png +0 -0
  15. package/docs/assets/logos/ceske-drahy.svg +15 -0
  16. package/docs/assets/logos/chaps.png +0 -0
  17. package/docs/assets/logos/citymove.png +0 -0
  18. package/docs/assets/logos/cloudflare.png +0 -0
  19. package/docs/assets/logos/dpp.svg +119 -0
  20. package/docs/assets/logos/envoy.svg +1 -0
  21. package/docs/assets/logos/golemio.svg +1 -0
  22. package/docs/assets/logos/google-maps.svg +78 -0
  23. package/docs/assets/logos/grafana-loki.png +0 -0
  24. package/docs/assets/logos/grafana.svg +57 -0
  25. package/docs/assets/logos/mikroelektronika.png +0 -0
  26. package/docs/assets/logos/nodejs.svg +39 -0
  27. package/docs/assets/logos/pid-litacka.svg +17 -0
  28. package/docs/assets/logos/pid.svg +1 -0
  29. package/docs/assets/logos/postgresql.svg +22 -0
  30. package/docs/assets/logos/rabbitmq.svg +54 -0
  31. package/docs/assets/logos/ropid.svg +1 -0
  32. package/docs/assets/logos/seznam.svg +115 -0
  33. package/docs/assets/logos/telmax.png +0 -0
  34. package/docs/assets/logos/typescript.svg +1 -0
  35. package/docs/assets/logos/valkey.svg +58 -0
  36. package/docs/assets/logos/varnish.svg +21 -0
  37. package/docs/asyncapi.yaml +5 -3
  38. package/docs/cache/types/redis.md +1 -1
  39. package/docs/implementation_documentation.md +40 -42
  40. package/docs/index.md +382 -0
  41. package/docs/jis/index.md +84 -94
  42. package/docs/openapi-input.yaml +3 -2
  43. package/docs/openapi-output.yaml +3 -1
  44. package/package.json +2 -2
  45. 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
+ [![Kontextový diagram PID Polohy](./architecture/diagrams/context.svg)](./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).