@golemio/rush-hour-aggregation 1.2.1 → 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.
- package/docs/asyncapi.yaml +81 -0
- package/docs/implementation_documentation.md +92 -0
- package/docs/index.md +3 -0
- package/docs/keeping_a_changelog.md +48 -0
- package/package.json +1 -1
|
@@ -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,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)
|