@golemio/rush-hour-aggregation 1.2.2-dev.1288390733 → 1.2.3-dev.1490349699

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,81 @@
1
+ asyncapi: 3.0.0
2
+ info:
3
+ title: Rush Hour Aggregation
4
+ version: 1.0.0
5
+ description: This document describes internal RabbitMQ queues of the Rush Hour Aggregation module. The module is responsible for aggregating traffic data from various sources for the purposes of the project Praha dopravní.
6
+ contact:
7
+ name: Golemio Prague Data Plaform
8
+ email: golemio@operatorict.cz
9
+ url: https://golemio.cz
10
+ operations:
11
+ rush-hour-aggregation.aggregateData:
12
+ action: "send"
13
+ channel:
14
+ $ref: "#/channels/rush-hour-aggregation.aggregateData"
15
+ rush-hour-aggregation.refreshHistoricViews:
16
+ action: "send"
17
+ channel:
18
+ $ref: "#/channels/rush-hour-aggregation.refreshHistoricViews"
19
+ channels:
20
+ rush-hour-aggregation.aggregateData:
21
+ address: dataplatform.rush-hour-aggregation.aggregateData
22
+ description: Aggregate traffic data of a given type from a given time period to database. If the given time period contains too much data, the task will be split into multiple subtasks. If no message is given, all types of data will be aggregated for time period of the last 10 minutes.
23
+ bindings:
24
+ amqp:
25
+ is: queue
26
+ queue:
27
+ durable: true
28
+ messages:
29
+ empty:
30
+ $ref: "#/components/messages/emptyMessage"
31
+ data:
32
+ $ref: "#/components/messages/rush-hour-aggregation.aggregateData"
33
+ rush-hour-aggregation.refreshHistoricViews:
34
+ address: dataplatform.rush-hour-aggregation.refreshHistoricViews
35
+ description: Refresh historic database material views for traffic data aggregations
36
+ bindings:
37
+ amqp:
38
+ is: queue
39
+ queue:
40
+ durable: true
41
+ messages:
42
+ empty:
43
+ $ref: "#/components/messages/emptyMessage"
44
+ components:
45
+ messages:
46
+ emptyMessage:
47
+ title: Empty message
48
+ rush-hour-aggregation.aggregateData:
49
+ payload:
50
+ $ref: "#/components/schemas/rush-hour-aggregation.IAggregationTask"
51
+ schemas:
52
+ rush-hour-aggregation.IAggregationTask:
53
+ type: object
54
+ properties:
55
+ type:
56
+ type: string
57
+ description: Type of data to be aggregated
58
+ enum:
59
+ - SDDR
60
+ - FCD
61
+ - NDIC
62
+ - WAZER
63
+ - WAZEJ
64
+ from:
65
+ type: string
66
+ format: date-time
67
+ description: Start of the time period to be aggregated
68
+ to:
69
+ type: string
70
+ format: date-time
71
+ description: End of the time period to be aggregated
72
+ updateOnDuplicate:
73
+ type: boolean
74
+ description: If true, the aggregation will update existing records in the database. Defaults to `false`.
75
+ refreshView:
76
+ type: boolean
77
+ description: If true, the traffic data materialized views will be refreshed after the aggregation. Defaults to `false`.
78
+ required:
79
+ - type
80
+ - from
81
+ - to
@@ -0,0 +1,92 @@
1
+ # Implementační dokumentace modulu *Rush Hour Aggregator*
2
+
3
+ ## Záměr
4
+
5
+ Modul agreguje dopravní data pro projekt Praha zasekaná.
6
+
7
+ ## Vstupní data
8
+
9
+ Vstupem jsou 4 datové sady již existující v datové platformě:
10
+
11
+ - SDDŘ (TSK) - zdroj public.tsk_std_measurements, public.tsk_std
12
+ - FCD - public.fcd_traff_params_part
13
+ - NDIC - public.ndic_traffic_info
14
+ - Waze - public.wazeccp_jams
15
+
16
+ ### Data aktivně stahujeme
17
+
18
+ Data se aktivně agregují pomocí cronu každých 5 minut. Kvůli možnému zpoždění obdržení některých dat je nastaven překryv a dohromady agreguje se posledních 10 minut. Existující položky jsou aktualizovaný na nový stav. Pro cron je nastavena priorita 1, pro VIP odbavení oproti historické agregaci viz níže.
19
+
20
+ Příklad nastavení cronu:
21
+ ```json
22
+ {
23
+ "cronTime": "0 */5 * * * *",
24
+ "exchange": "dataplatform",
25
+ "message": "",
26
+ "routingKey": "cron.dataplatform.rush-hour-aggregation.aggregateData",
27
+ "options": {
28
+ "priority": 1
29
+ }
30
+ }
31
+ ```
32
+
33
+
34
+ Zároveň je také možné spustit historickou agregaci, ať už pro doplnění historických dat nebo v případech jejich změny. Tato agregace spouští manuálně vložením message pro rabbit mq viz readme dokument modulu.
35
+
36
+ ## Zpracování dat / transformace
37
+
38
+
39
+ Pro účely agregace bylo vytvořeno 5 sql skriptů, které jsou samostatne uloženy ve složce ./templates/sqlQueries. V každém skriptu jsou použity parametry *from* a *to* a dle typu data jsou uvozeny \$ nebo :. Obě verze jsou rozpoznatelné a spustitelné v DBeaver, ale pro kód **nejsou zaměnitelné**. V případě : kód resp. knihovna sequelize se stará o doplnění proměných a v případě \$ se o to stará databázová část. Pro jednoduší sql skripty Waze, Fcd je použit \$. Pro složitější NDIC, SSDŘ se používá :.
40
+
41
+ Po nahraní dat do databáze se ještě "concurrently" obnoví nasledující materializované pohledy:
42
+
43
+ - fcd_events_snapshots_latest
44
+ - ndic_events_full_snapshots_latest
45
+ - tsk_std_last_30min_snapshots_latest
46
+ - waze_jams_snapshots_latest
47
+ - waze_jams_snapshots_latest
48
+
49
+ Interní RabbitMQ fronty jsou popsány v [AsyncAPI](./asyncapi.yaml).
50
+
51
+ ### *AggregationWorker* - Metoda *aggregateData*:
52
+
53
+ Podporuje několik scénářů zpracovaní podle obdržené zprávy:
54
+
55
+ 1) Prázdná zpráva
56
+ Je obvykle generována cronem a spustí pro každý z typů agregace zpracování za posledních X minut dle nastavení workeru. V současnosti je tato hodnota nastavena na 10 minut.
57
+
58
+ 2) Validní json zpráva
59
+ Validní json zpráva obsahuje údaje od, do a typ dat (v angličtině). Pro příklad zprávy viz readme modulu. Následně je zkontrolovano zda-li období zpracování není příliš dlouhé. Pro každý typ vstupních dat je toto období určeno jinak, dle množství generovaných dat a náročnosti zpracování:
60
+
61
+ | data | max období |
62
+ | --- | --- |
63
+ | FCD | 30 minut |
64
+ | NDIC | 2 hodiny |
65
+ | SDDŘ | 2 hodiny |
66
+ | Waze | 6 hodin |
67
+
68
+ Pokud je období dlouhé tak se rozdělí na subtasky, které se uloží do fronty ke zpracování.
69
+ V opačném případě se spustí agregační sql skript pro vybraný typ dat a výsledek se uloží do vybrané tabulky v db schématu praha_dopravni.
70
+
71
+ ### *AggregationWorker* - Metoda *refreshHistoricViews*:
72
+
73
+ Je spuštěna cronem jednou za 24h s prázdnou zprávou a obnovuje "concurrently" historické pohledy, které připravují časová rozpětí pro již připravené agregace.
74
+
75
+ Seznam pohledů:
76
+ - fcd_events_snapshots_history
77
+ - ndic_events_full_snapshots_history
78
+ - tsk_std_last_30min_snapshots_history
79
+ - waze_jams_snapshots_history
80
+ - waze_jams_snapshots_history
81
+
82
+
83
+ ### Obecné
84
+
85
+ - typ databáze
86
+ - PSQL
87
+ - datábázové schéma
88
+ - praha_dopravni, public
89
+ - migrační skripty
90
+ - ano, součastí modulu
91
+ - retence dat
92
+ - n/a
package/docs/index.md ADDED
@@ -0,0 +1,3 @@
1
+ # @golemio/rush-hour-aggregation
2
+
3
+ This module is intended for use with Golemio services. Refer [here](https://gitlab.com/operator-ict/golemio/code/modules/core/-/blob/development/README.md) for further information on usage, local development and more.
@@ -0,0 +1,48 @@
1
+ # Udržování changelogu v projektech
2
+
3
+ _Tohle je výstup z [general#345](https://gitlab.com/operator-ict/golemio/code/general/-/issues/345)_
4
+
5
+ Začínáme zavádět changelogy podle [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) a semantického verzování
6
+
7
+ ```markdown
8
+ ## [version] - release date
9
+
10
+ ### type of action
11
+
12
+ - Description (([project#issue](link to the issue)))
13
+ ```
14
+
15
+ - Během vývoje a code reviews je potřeba kontrolovat existenci CHANGELOG.md a zda byl přidán záznam do Unreleased sekce pod správný typ změny
16
+ - Added
17
+ - Changed
18
+ - Deprecated
19
+ - Removed
20
+ - Fixed
21
+ - Security
22
+ - Rovněž je potřeba ujistit, že aktuální kopie [keeping_a_changelog.md](/introduction/keeping_a_changelog.md) se nachází ve složce _docs/_, pokud tam už není
23
+ - Před releasem nahradit Unreleased za _[version] - release date_
24
+ - Po release bumpnout verzi a přidat novou Unreleased sekci (v případě částečného release přesunout nenasazené změny do Unreleased)
25
+
26
+ **Příklad changelogu pro pid modul**
27
+ ```markdown
28
+ # Changelog
29
+
30
+ All notable changes to this project will be documented in this file.
31
+
32
+ ## [Unreleased]
33
+
34
+ ### Added
35
+
36
+ - Modularized migrations ([pid#53](https://gitlab.com/operator-ict/golemio/code/modules/pid/-/issues/53))
37
+
38
+ ## [2.0.12] - 2021-10-18
39
+
40
+ ### Fixed
41
+
42
+ - Empty array of tripsIds in updateDelay
43
+ ```
44
+
45
+ **Příklad projektů se zavedeným changelogem**
46
+
47
+ - [Golemio CLI](https://gitlab.com/operator-ict/golemio/code/golemio-cli/-/blob/development/CHANGELOG.md)
48
+ - [PID Module](https://gitlab.com/operator-ict/golemio/code/modules/pid/-/blob/development/CHANGELOG.md)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@golemio/rush-hour-aggregation",
3
- "version": "1.2.2-dev.1288390733",
3
+ "version": "1.2.3-dev.1490349699",
4
4
  "description": "Rush hour data aggregation for Praha dopravní project",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",