@golemio/pid 3.17.1-dev.1884135276 → 3.17.1-dev.1889080306

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.
@@ -1140,7 +1140,23 @@ Worker má na starost retenci dat tabulek Azure Table Storage
1140
1140
 
1141
1141
  ### _JISWorker_
1142
1142
 
1143
- Worker má na starost stahování VYMI (JIS) infotextů, jejich transformaci a uložení do databáze
1143
+ Worker má na starost stahování VYMI (JIS) událostí a infotextů, jejich transformaci a uložení do databáze
1144
+
1145
+ #### _task: RefreshJISEventsTask_
1146
+
1147
+ - vstupní rabbitmq fronta
1148
+ - název: vehicle-positions.jis.refreshJISEvents
1149
+ - TTL: 20 sekund
1150
+ - parametry: žádné
1151
+ - závislé fronty (do kterých jsou odesílány zprávy z metody workeru)
1152
+ - žádné
1153
+ - datové zdroje
1154
+ - JIS Events
1155
+ - transformace
1156
+ - [JISEventsTransformation](../src/integration-engine/jis/transformations/JISEventsTransformation.ts)
1157
+ - data modely
1158
+ - JISEventsModel `jis_events`
1159
+ - JISEventsRopidGTFSRoutesModel `jis_events_ropidgtfs_routes`
1144
1160
 
1145
1161
  #### _task: RefreshJISInfotextsTask_
1146
1162
 
@@ -1151,15 +1167,9 @@ Worker má na starost stahování VYMI (JIS) infotextů, jejich transformaci a u
1151
1167
  - závislé fronty (do kterých jsou odesílány zprávy z metody workeru)
1152
1168
  - žádné
1153
1169
  - datové zdroje
1154
- - JIS Infotexty
1170
+ - JIS Infotexts
1155
1171
  - transformace
1156
1172
  - [JISInfotextsTransformation](../src/integration-engine/jis/transformations/JISInfotextsTransformation.ts)
1157
- - popis
1158
- - z Redisu je získán ETag poslední přijaté odpovědi datového zdroje
1159
- - z datového zdroje jsou podmíněným dotazem s posledním ETagem získána data a metadata
1160
- - pokud na straně datového zdroje došlo k aktualizaci dat, je provedena transformace
1161
- - transformovaná data jsou uložena do Postgres a starší záznamy jsou odstraněny
1162
- - v Redisu je aktualizován poslední přijatý ETag
1163
1173
  - data modely
1164
1174
  - JISInfotextsModel `jis_infotexts`
1165
1175
  - JISInfotextsRopidGTFSStopsModel `jis_infotexts_ropidgtfs_stops`
@@ -1196,7 +1206,7 @@ Worker má na starost stahování VYMI (JIS) infotextů, jejich transformaci a u
1196
1206
  - polohová data si uchováváme 24 hodin (30 minut od poslední aktualizace, poté v historických tabulkách)
1197
1207
  - popis vozidel si uchováváme 24 hodin
1198
1208
  - preset logy si uchováváme 8 hodin
1199
- - JIS infotexty si uchováváme do příštího úspěšného znovunačtení (ke kterému by mělo docházet dvakrát za minutu)
1209
+ - JIS události a infotexty si uchováváme neomezeně
1200
1210
 
1201
1211
  ## Input API
1202
1212
 
@@ -0,0 +1,226 @@
1
+ # Dokumentace propisu VYMI (JIS) dat do datové platformy
2
+
3
+ Data událostí a infotextů jsou z aplikace VYMI aktivně posílána (push) do datové platformy Golemio, vždy ihned po změně v datech. Dále existuje možnost pasivního načtení (pull) dat z VYMI do Golemia, které je provedeno po manuální akci vývojáře a slouží například pro případ, že by došlo k výpadku aktivního posílání. Oba způsoby jsou zjednodušeně znázorněny na následujících dvou sekvenčních diagramech a podrobněji popsány v dalších sekcích.
4
+
5
+ Sekvenční diagram znázorňující proces aktivního posílání (push) dat:
6
+
7
+ ```mermaid
8
+ sequenceDiagram
9
+ actor user as Uživatel VYMI
10
+ participant vymi as Aplikace VYMI
11
+ participant golemio as Datová platforma Golemio
12
+
13
+ user->>vymi: Změna v datech událostí nebo infotextů
14
+ vymi->>golemio: Aktivní zaslání (push) dat událostí nebo infotextů do Golemia
15
+ ```
16
+
17
+ Sekvenční diagram znázorňující proces pasivního načítání (pull) dat:
18
+
19
+ ```mermaid
20
+ sequenceDiagram
21
+ participant vymi as Aplikace VYMI
22
+ participant golemio as Datová platforma Golemio
23
+ actor developer as Vývojář
24
+
25
+ developer->>golemio: Vyžádání načtení dat událostí nebo infotextů
26
+ golemio->>vymi: Pasivní načtení (pull) dat událostí nebo infotextů z VYMI
27
+ vymi->>golemio: Data událostí nebo infotextů
28
+ ```
29
+
30
+ ## Změny dat ve VYMI
31
+
32
+ V rámci aplikace VYMI nejprve uživatel provede na front endu změny událostí nebo infotextů, které front end pošle na REST API back endu a ten je zapíše do VYMI PostgreSQL databáze. Mezi front endem a back endem data projdou ještě přes VYMI Ory Oathkeeper proxy (která za pomoci VYMI Ory Kratos a VYMI Ory Keto služeb zajišťuje autentizaci, respektive autorizaci uživatele).
33
+
34
+ Proces je podrobněji znázorněn na následujícím diagramu (diagram nepopisuje celé VYMI REST API, pouze části nejvíce relevantní pro propisování dat do Golemia; stejně tak jsou vynechány detailnější prvky aplikační struktury).
35
+
36
+ ```mermaid
37
+ flowchart LR
38
+ subgraph "VYMI"
39
+ subgraph "VYMI Front End"
40
+ vymi_create_event("`Vytvoření události`");
41
+ vymi_update_event("`Úprava události`");
42
+ vymi_update_event_after_duplicate("`Uložení události po duplikaci`");
43
+ vymi_create_infotext("`Vytvoření infotextu`");
44
+ vymi_update_infotext("`Úprava infotextu`");
45
+ vymi_update_infotext_after_duplicate("`Uložení infotextu po duplikaci`");
46
+
47
+ %% invisible unicode char ‎ due to https://github.com/orgs/community/discussions/106690
48
+ vymi_api_post_event["`HTTP POST s Ory Kratos session tokenem na http‎://api-vymi.golemio.cz/v1/events`"];
49
+ vymi_api_put_event["`HTTP PUT s Ory Kratos session tokenem na http‎://api-vymi.golemio.cz/v1/events/{eventId}`"];
50
+ vymi_api_post_infotext["`HTTP POST s Ory Kratos session tokenem na http‎://api-vymi.golemio.cz/v1/events/{eventId}/infotexts`"];
51
+ vymi_api_put_infotext["`HTTP PUT s Ory Kratos session tokenem na http‎://api-vymi.golemio.cz/v1/events/{eventId}/infotexts/{infotextId}`"];
52
+ end
53
+
54
+ subgraph "VYMI Back End"
55
+ vymi_events_controller_create["`V1EventsController.createEvent`"];
56
+ vymi_events_controller_update["`V1EventsController.updateEvent`"];
57
+ vymi_infotexts_controller_create["`V1EventInfotextsController.createInfotext`"];
58
+ vymi_infotexts_controller_update["`V1EventInfotextsController.updateInfotext`"];
59
+ end
60
+
61
+ vymi_pg[("`VYMI PostgreSQL`")];
62
+ end
63
+
64
+ vymi_create_event --> vymi_api_post_event;
65
+ vymi_update_event --> vymi_api_put_event;
66
+ vymi_update_event_after_duplicate --> vymi_api_put_event;
67
+ vymi_create_infotext --> vymi_api_post_infotext;
68
+ vymi_update_infotext --> vymi_api_put_infotext;
69
+ vymi_update_infotext_after_duplicate --> vymi_api_put_infotext;
70
+
71
+ vymi_api_post_event -- "`Přes VYMI Ory Oathkeeper`" --> vymi_events_controller_create;
72
+ vymi_api_put_event -- "`Přes VYMI Ory Oathkeeper`" --> vymi_events_controller_update;
73
+ vymi_api_post_infotext -- "`Přes VYMI Ory Oathkeeper`" --> vymi_infotexts_controller_create;
74
+ vymi_api_put_infotext -- "`Přes VYMI Ory Oathkeeper`" --> vymi_infotexts_controller_update;
75
+
76
+ vymi_events_controller_create -- "`UPSERT do tabulek vymi-alerts.public.events a vymi-alerts.public.event_routes`" --> vymi_pg;
77
+ vymi_events_controller_update -- "`UPSERT do tabulek vymi-alerts.public.events a vymi-alerts.public.event_routes`" --> vymi_pg;
78
+ vymi_infotexts_controller_create -- "`UPSERT do tabulek vymi-alerts.public.infotexts a vymi-alerts.public.infotext_stops`" --> vymi_pg;
79
+ vymi_infotexts_controller_update -- "`UPSERT do tabulek vymi-alerts.public.infotexts a vymi-alerts.public.infotext_stops`" --> vymi_pg;
80
+ ```
81
+
82
+ ## Aktivní posílání (push) dat
83
+
84
+ Po uložení změn událostí a infotextů do VYMI PostgreSQL databáze dojde vždy k aktivnímu poslání (push) "aktuálních" dat z VYMI back end služby do Golemia za pomoci HTTP POST dotazu na Golemio Vehicle Positions (VP) Input Gateway (IG).
85
+
86
+ Za aktuální data jsou považovány:
87
+ - všechny události, které mají `status` `PUBLISHED`, a zároveň `updated_at` hodnotu z posledních 24 hodin nebo `active_period_end` je `NULL` nebo >= aktuální čas, neboli lidsky všechny publikované (ne-draft) události, které jsou aktivní nebo byly upraveny v posledním dnu;
88
+ - všechny infotexty, které mají `status` `PUBLISHED`, `visibility` `PUBLIC` a zároveň `active_period_end` je `NULL` nebo >= aktuální čas, neboli lidsky všechny aktivní zapnuté publikované (ne-draft) infotexty.
89
+
90
+ VP Input Gateway data přijme a zašle do odpovídající RabbitMQ fronty, odkud je převezme VP Integration Engine, který data zapíše do VP PostgreSQL databáze.
91
+
92
+ Proces je podrobněji znázorněn na následujícím diagramu (detailnější prvky aplikační struktury jsou vynechány).
93
+
94
+ ```mermaid
95
+ flowchart TB
96
+ subgraph "VYMI"
97
+ subgraph "VYMI Back End"
98
+ vymi_events_controller_create["`V1EventsController.createEvent`"];
99
+ vymi_events_controller_update["`V1EventsController.updateEvent`"];
100
+ vymi_infotexts_controller_create["`V1EventInfotextsController.createInfotext`"];
101
+ vymi_infotexts_controller_update["`V1EventInfotextsController.updateInfotext`"];
102
+
103
+ vymi_get_events["`EventFacade.getFilteredCustomFormatList`"];
104
+ vymi_get_infotexts["`InfotextFacade.getFilteredCustomFormatList`"];
105
+
106
+ %% invisible unicode char ‎ due to https://github.com/orgs/community/discussions/106690
107
+ golemio_api_post_events["`HTTPS POST s API klíčem na https‎://api.golemio.cz/input-gateway/v1/jis/events`"];
108
+ golemio_api_post_infotexts["`HTTPS POST s API klíčem na https‎://api.golemio.cz/input-gateway/v1/jis/infotexts`"];
109
+ end
110
+
111
+ vymi_pg[("`VYMI PostgreSQL`")];
112
+ end
113
+
114
+ subgraph "Golemio"
115
+ subgraph "Golemio VP Input Gateway"
116
+ golemio_events_controller["`JISEventsController`"];
117
+ golemio_infotexts_controller["`JisInfotextsController`"];
118
+ end
119
+
120
+ subgraph "Golemio RabbitMQ"
121
+ golemio_rabbit_refresh_events["`Fronta vehicle-positions.jis.refreshJISEvents`"];
122
+ golemio_rabbit_refresh_infotexts["`Fronta vehicle-positions.jis.refreshJISInfotexts`"];
123
+ end
124
+
125
+ subgraph "Golemio VP Integration Engine"
126
+ golemio_refresh_events_task["`RefreshJISEventsTask`"];
127
+ golemio_refresh_infotexts_task["`RefreshJISInfotextsTask`"];
128
+ end
129
+
130
+ vp_pg[("`VP PostgreSQL`")];
131
+ end
132
+
133
+ vymi_events_controller_create --> vymi_get_events;
134
+ vymi_events_controller_update --> vymi_get_events;
135
+ vymi_events_controller_update --> vymi_get_infotexts;
136
+ vymi_infotexts_controller_create --> vymi_get_infotexts;
137
+ vymi_infotexts_controller_update --> vymi_get_infotexts;
138
+
139
+ vymi_get_events -- "`SELECT aktuálních událostí z tabulek vehicle-positions.pid.jis_events a vehicle-positions.pid.jis_events_ropidgtfs_routes`" --> vymi_pg;
140
+ vymi_get_infotexts -- "`SELECT aktuálních infotextů z tabulek vehicle-positions.pid.jis_infotexts a vehicle-positions.pid.jis_infotexts_ropidgtfs_stops`" --> vymi_pg;
141
+
142
+ vymi_get_events --> golemio_api_post_events;
143
+ vymi_get_infotexts --> golemio_api_post_infotexts;
144
+
145
+ golemio_api_post_events -- "`Přes Golemio Access Proxy`" --> golemio_events_controller;
146
+ golemio_api_post_infotexts -- "`Přes Golemio Access Proxy`" --> golemio_infotexts_controller;
147
+
148
+ golemio_events_controller --> golemio_rabbit_refresh_events;
149
+ golemio_infotexts_controller --> golemio_rabbit_refresh_infotexts;
150
+
151
+ golemio_rabbit_refresh_events --> golemio_refresh_events_task;
152
+ golemio_rabbit_refresh_infotexts --> golemio_refresh_infotexts_task;
153
+
154
+ golemio_refresh_events_task -- "`UPSERT do tabulek vehicle-positions.pid.jis_events a vehicle-positions.pid.jis_events_ropidgtfs_routes`" --> vp_pg;
155
+ golemio_refresh_infotexts_task -- "`UPSERT do tabulek vehicle-positions.pid.jis_infotexts a vehicle-positions.pid.jis_infotexts_ropidgtfs_stops`" --> vp_pg;
156
+ ```
157
+
158
+ Formát zasílaných dat je dále více popsán v implementační dokumentaci ([události](../implementation_documentation.md#jis-events-1), [infotexty](../implementation_documentation.md#jis-infotexts-1)), stejně tak jako odkazy na [Input Gateway OpenAPI](../implementation_documentation.md#input-api) a popis [uložení dat](../implementation_documentation.md#uložení-dat) včetně databázového schema a popisu retence.
159
+
160
+ ## Pasivní načítání (pull) dat
161
+
162
+ V případě potřeby (např. nedojde-li kvůli chybě k aktivnímu poslání dat) lze využít pasivní načtení (push) dat z VYMI REST API do Golemia. Pro spuštění načtení musí vývojář zaslat prázdnou zprávu do správné RabbitMQ fronty, kterou zkonzumuje VP Integration Engine a za pomoci HTTP GET dotazu získá data z VYMI back end služby.
163
+
164
+ Proces je podrobněji znázorněn na následujícím diagramu (detailnější prvky aplikační struktury jsou vynechány).
165
+
166
+ ```mermaid
167
+ flowchart TB
168
+ subgraph "VYMI"
169
+ subgraph "VYMI Back End"
170
+ vymi_exports_controller_get_events["`V1ExportsController.getEventListInCustomFormat`"];
171
+ vymi_exports_controller_get_infotexts["`V1ExportsController.getInfotextListInCustomFormat`"];
172
+
173
+ vymi_get_events["`EventFacade.getFilteredCustomFormatList`"];
174
+ vymi_get_infotexts["`InfotextFacade.getFilteredCustomFormatList`"];
175
+ end
176
+
177
+ vymi_pg[("`VYMI PostgreSQL`")];
178
+ end
179
+
180
+ subgraph "Golemio"
181
+ subgraph "Golemio RabbitMQ"
182
+ golemio_rabbit_fetch_events["`Fronta vehicle-positions.jis.fetchJISEvents`"];
183
+ golemio_rabbit_fetch_infotexts["`Fronta vehicle-positions.jis.fetchJISInfotexts`"];
184
+ golemio_rabbit_refresh_events["`Fronta vehicle-positions.jis.refreshJISEvents`"];
185
+ golemio_rabbit_refresh_infotexts["`Fronta vehicle-positions.jis.refreshJISInfotexts`"];
186
+ end
187
+
188
+ subgraph "Golemio VP Integration Engine"
189
+ golemio_fetch_events_task["`FetchJISEventsTask`"];
190
+ golemio_fetch_infotexts_task["`FetchJISInfotextsTask`"];
191
+ golemio_refresh_events_task["`RefreshJISEventsTask`"];
192
+ golemio_refresh_infotexts_task["`RefreshJISInfotextsTask`"];
193
+
194
+ %% invisible unicode char ‎ due to https://github.com/orgs/community/discussions/106690
195
+ golemio_api_get_events["`HTTPS GET s API klíčem na https‎://api-vymi.golemio.cz/v1/exports/events/custom-format`"];
196
+ golemio_api_get_infotexts["`HTTPS GET s API klíčem na https‎://api-vymi.golemio.cz/v1/exports/infotexts/custom-format`"];
197
+ end
198
+
199
+ vp_pg[("`VP PostgreSQL`")];
200
+ end
201
+
202
+ vymi_get_events -- "`SELECT aktuálních událostí z tabulek vehicle-positions.pid.jis_events a vehicle-positions.pid.jis_events_ropidgtfs_routes`" --> vymi_pg;
203
+ vymi_get_infotexts -- "`SELECT aktuálních infotextů z tabulek vehicle-positions.pid.jis_infotexts a vehicle-positions.pid.jis_infotexts_ropidgtfs_stops`" --> vymi_pg;
204
+
205
+ golemio_rabbit_fetch_events --> golemio_fetch_events_task;
206
+ golemio_rabbit_fetch_infotexts --> golemio_fetch_infotexts_task;
207
+ golemio_rabbit_refresh_events --> golemio_refresh_events_task;
208
+ golemio_rabbit_refresh_infotexts --> golemio_refresh_infotexts_task;
209
+
210
+ golemio_fetch_events_task --> golemio_api_get_events;
211
+ golemio_fetch_infotexts_task --> golemio_api_get_infotexts;
212
+
213
+ golemio_api_get_events -- "`Přes VYMI Ory Oathkeeper`" --> vymi_exports_controller_get_events;
214
+ golemio_api_get_infotexts -- "`Přes VYMI Ory Oathkeeper`" --> vymi_exports_controller_get_infotexts;
215
+
216
+ vymi_exports_controller_get_events --> vymi_get_events;
217
+ vymi_exports_controller_get_infotexts --> vymi_get_infotexts;
218
+
219
+ vymi_get_events --> golemio_rabbit_refresh_events;
220
+ vymi_get_infotexts --> golemio_rabbit_refresh_infotexts;
221
+
222
+ golemio_refresh_events_task -- "`UPSERT do tabulek vehicle-positions.pid.jis_events a vehicle-positions.pid.jis_events_ropidgtfs_routes`" --> vp_pg;
223
+ golemio_refresh_infotexts_task -- "`UPSERT do tabulek vehicle-positions.pid.jis_infotexts a vehicle-positions.pid.jis_infotexts_ropidgtfs_stops`" --> vp_pg;
224
+ ```
225
+
226
+ Zdroj a formát dat pro aktivní stahování jsou dále více popsány v implementační dokumentaci ([události](../implementation_documentation.md#jis-events), [infotexty](../implementation_documentation.md#jis-infotexts)), stejně tak jako [worker a tasky](../implementation_documentation.md#jisworker) a popis [uložení dat](../implementation_documentation.md#uložení-dat) včetně databázového schema a popisu retence.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@golemio/pid",
3
- "version": "3.17.1-dev.1884135276",
3
+ "version": "3.17.1-dev.1889080306",
4
4
  "description": "Golemio PID Module",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",