@golemio/rush-hour-aggregation 1.0.0 → 1.0.1

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 (53) hide show
  1. package/README.md +61 -21
  2. package/db/migrations/postgresql/20220505053742-addMaterialViews.js +53 -0
  3. package/db/migrations/postgresql/sqls/20220505053742-addMaterialViews-down.sql +10 -0
  4. package/db/migrations/postgresql/sqls/20220505053742-addMaterialViews-up.sql +565 -0
  5. package/dist/integration-engine/AggregationWorker.d.ts +2 -0
  6. package/dist/integration-engine/AggregationWorker.js +14 -2
  7. package/dist/integration-engine/AggregationWorker.js.map +1 -1
  8. package/dist/integration-engine/dataAccess/AbstractEventsRepository.d.ts +9 -0
  9. package/dist/integration-engine/dataAccess/AbstractEventsRepository.js +35 -0
  10. package/dist/integration-engine/dataAccess/AbstractEventsRepository.js.map +1 -0
  11. package/dist/integration-engine/dataAccess/FcdEventsRepository.d.ts +4 -2
  12. package/dist/integration-engine/dataAccess/FcdEventsRepository.js +4 -2
  13. package/dist/integration-engine/dataAccess/FcdEventsRepository.js.map +1 -1
  14. package/dist/integration-engine/dataAccess/NdicEventRepository.d.ts +4 -2
  15. package/dist/integration-engine/dataAccess/NdicEventRepository.js +4 -2
  16. package/dist/integration-engine/dataAccess/NdicEventRepository.js.map +1 -1
  17. package/dist/integration-engine/dataAccess/TskEventsRepository.d.ts +4 -2
  18. package/dist/integration-engine/dataAccess/TskEventsRepository.js +4 -2
  19. package/dist/integration-engine/dataAccess/TskEventsRepository.js.map +1 -1
  20. package/dist/integration-engine/dataAccess/WazeJamsRepository.d.ts +4 -2
  21. package/dist/integration-engine/dataAccess/WazeJamsRepository.js +4 -2
  22. package/dist/integration-engine/dataAccess/WazeJamsRepository.js.map +1 -1
  23. package/dist/integration-engine/dataAccess/WazeReconstructionsRepository.d.ts +4 -2
  24. package/dist/integration-engine/dataAccess/WazeReconstructionsRepository.js +4 -2
  25. package/dist/integration-engine/dataAccess/WazeReconstructionsRepository.js.map +1 -1
  26. package/dist/integration-engine/queueDefinitions.js +10 -0
  27. package/dist/integration-engine/queueDefinitions.js.map +1 -1
  28. package/dist/integration-engine/service/AggregationFactory.d.ts +2 -2
  29. package/dist/integration-engine/service/AggregationFactory.js.map +1 -1
  30. package/dist/integration-engine/service/aggregators/AbstractAggregator.d.ts +7 -3
  31. package/dist/integration-engine/service/aggregators/AbstractAggregator.js +8 -0
  32. package/dist/integration-engine/service/aggregators/AbstractAggregator.js.map +1 -1
  33. package/dist/integration-engine/service/aggregators/FcdEventsAggregator.d.ts +3 -3
  34. package/dist/integration-engine/service/aggregators/FcdEventsAggregator.js +0 -4
  35. package/dist/integration-engine/service/aggregators/FcdEventsAggregator.js.map +1 -1
  36. package/dist/integration-engine/service/aggregators/NdicEventsAggregator.d.ts +3 -3
  37. package/dist/integration-engine/service/aggregators/NdicEventsAggregator.js +0 -4
  38. package/dist/integration-engine/service/aggregators/NdicEventsAggregator.js.map +1 -1
  39. package/dist/integration-engine/service/aggregators/TskEventsAggregator.d.ts +3 -3
  40. package/dist/integration-engine/service/aggregators/TskEventsAggregator.js +0 -4
  41. package/dist/integration-engine/service/aggregators/TskEventsAggregator.js.map +1 -1
  42. package/dist/integration-engine/service/aggregators/WazeJamsAggregator.d.ts +3 -3
  43. package/dist/integration-engine/service/aggregators/WazeJamsAggregator.js +0 -4
  44. package/dist/integration-engine/service/aggregators/WazeJamsAggregator.js.map +1 -1
  45. package/dist/integration-engine/service/aggregators/WazeReconstructionsAggregator.d.ts +3 -3
  46. package/dist/integration-engine/service/aggregators/WazeReconstructionsAggregator.js +0 -4
  47. package/dist/integration-engine/service/aggregators/WazeReconstructionsAggregator.js.map +1 -1
  48. package/dist/integration-engine/service/aggregators/interfaces/IAbstractAggregator.d.ts +6 -0
  49. package/dist/integration-engine/service/aggregators/interfaces/IAbstractAggregator.js +3 -0
  50. package/dist/integration-engine/service/aggregators/interfaces/IAbstractAggregator.js.map +1 -0
  51. package/package.json +2 -2
  52. package/templates/sqlQueries/FcdEvents.sql +1 -1
  53. package/templates/sqlQueries/NdicEventsFull.sql +2 -2
@@ -0,0 +1,565 @@
1
+ --
2
+ -- WAZE
3
+ --
4
+
5
+ CREATE MATERIALIZED VIEW waze_reconstructions_snapshots_history AS WITH config AS (
6
+ SELECT 120000 AS max_period,
7
+ date_part('epoch'::text, date_trunc('day',now(), 'Europe/Prague')) * 1000::double precision AS max_measured_at
8
+ )
9
+ SELECT s.start_measured_at,
10
+ s.end_measured_at,
11
+ to_timestamp((s.start_measured_at / 1000)::double precision) AS start_ts,
12
+ to_timestamp((s.end_measured_at / 1000)::double precision) AS end_ts
13
+ FROM ( SELECT s_1.measured_at AS start_measured_at,
14
+ CASE
15
+ WHEN s_1.is_end IS TRUE THEN s_1.measured_at
16
+ ELSE lead(s_1.measured_at) OVER (ORDER BY s_1.measured_at)
17
+ END + (( SELECT config.max_period
18
+ FROM config)) AS end_measured_at,
19
+ s_1.is_start,
20
+ s_1.is_end
21
+ FROM ( SELECT s_2.measured_at,
22
+ s_2.prev_measured_at,
23
+ s_2.next_measured_at,
24
+ s_2."?column?",
25
+ s_2."?column?_1" AS "?column?",
26
+ s_2.is_start,
27
+ s_2.is_end
28
+ FROM ( SELECT s_3.measured_at,
29
+ s_3.prev_measured_at,
30
+ s_3.next_measured_at,
31
+ s_3.measured_at - s_3.prev_measured_at,
32
+ s_3.measured_at - s_3.next_measured_at,
33
+ CASE
34
+ WHEN s_3.prev_measured_at < (s_3.measured_at - (( SELECT config.max_period
35
+ FROM config))) OR s_3.prev_measured_at IS NULL THEN true
36
+ ELSE false
37
+ END AS is_start,
38
+ CASE
39
+ WHEN s_3.next_measured_at > (s_3.measured_at + (( SELECT config.max_period
40
+ FROM config))) OR s_3.next_measured_at IS NULL THEN true
41
+ ELSE false
42
+ END AS is_end
43
+ FROM ( SELECT s_4.measured_at,
44
+ lag(s_4.measured_at) OVER (ORDER BY s_4.measured_at) AS prev_measured_at,
45
+ lead(s_4.measured_at) OVER (ORDER BY s_4.measured_at) AS next_measured_at
46
+ FROM ( SELECT DISTINCT waze_reconstructions.measured_at
47
+ FROM waze_reconstructions WHERE waze_reconstructions.measured_at::double precision < (( SELECT config.max_measured_at
48
+ FROM config))) s_4) s_3) s_2(measured_at, prev_measured_at, next_measured_at, "?column?", "?column?_1", is_start, is_end)
49
+ WHERE s_2.is_start IS TRUE OR s_2.is_end IS TRUE) s_1(measured_at, prev_measured_at, next_measured_at, "?column?", "?column?_1", is_start, is_end)) s
50
+ WHERE s.is_start IS TRUE;
51
+
52
+ -- Indices -------------------------------------------------------
53
+
54
+ CREATE UNIQUE INDEX waze_reconstructions_snapshots_history_start_measured_at_idx ON waze_reconstructions_snapshots_history(start_measured_at int8_ops);
55
+
56
+
57
+ ------
58
+ ------
59
+
60
+ CREATE MATERIALIZED VIEW waze_reconstructions_snapshots_latest AS WITH config AS (
61
+ SELECT 120000 AS max_period,
62
+ date_part('epoch'::text, date_trunc('day',now(), 'Europe/Prague')) * 1000::double precision AS min_measured_at
63
+ )
64
+ SELECT s.start_measured_at,
65
+ s.end_measured_at,
66
+ to_timestamp((s.start_measured_at / 1000)::double precision) AS start_ts,
67
+ to_timestamp((s.end_measured_at / 1000)::double precision) AS end_ts
68
+ FROM ( SELECT s_1.measured_at AS start_measured_at,
69
+ CASE
70
+ WHEN s_1.is_end IS TRUE THEN s_1.measured_at
71
+ ELSE lead(s_1.measured_at) OVER (ORDER BY s_1.measured_at)
72
+ END + (( SELECT config.max_period
73
+ FROM config)) AS end_measured_at,
74
+ s_1.is_start,
75
+ s_1.is_end
76
+ FROM ( SELECT s_2.measured_at,
77
+ s_2.prev_measured_at,
78
+ s_2.next_measured_at,
79
+ s_2."?column?",
80
+ s_2."?column?_1" AS "?column?",
81
+ s_2.is_start,
82
+ s_2.is_end
83
+ FROM ( SELECT s_3.measured_at,
84
+ s_3.prev_measured_at,
85
+ s_3.next_measured_at,
86
+ s_3.measured_at - s_3.prev_measured_at,
87
+ s_3.measured_at - s_3.next_measured_at,
88
+ CASE
89
+ WHEN s_3.prev_measured_at < (s_3.measured_at - (( SELECT config.max_period
90
+ FROM config))) OR s_3.prev_measured_at IS NULL THEN true
91
+ ELSE false
92
+ END AS is_start,
93
+ CASE
94
+ WHEN s_3.next_measured_at > (s_3.measured_at + (( SELECT config.max_period
95
+ FROM config))) OR s_3.next_measured_at IS NULL THEN true
96
+ ELSE false
97
+ END AS is_end
98
+ FROM ( SELECT s_4.measured_at,
99
+ lag(s_4.measured_at) OVER (ORDER BY s_4.measured_at) AS prev_measured_at,
100
+ lead(s_4.measured_at) OVER (ORDER BY s_4.measured_at) AS next_measured_at
101
+ FROM ( SELECT DISTINCT waze_reconstructions.measured_at
102
+ FROM waze_reconstructions WHERE waze_reconstructions.measured_at::double precision >= (( SELECT config.min_measured_at
103
+ FROM config))) s_4) s_3) s_2(measured_at, prev_measured_at, next_measured_at, "?column?", "?column?_1", is_start, is_end)
104
+ WHERE s_2.is_start IS TRUE OR s_2.is_end IS TRUE) s_1(measured_at, prev_measured_at, next_measured_at, "?column?", "?column?_1", is_start, is_end)) s
105
+ WHERE s.is_start IS TRUE;
106
+
107
+ -- Indices -------------------------------------------------------
108
+ CREATE UNIQUE INDEX waze_reconstructions_snapshots_latest_start_measured_at_idx ON waze_reconstructions_snapshots_latest(start_measured_at int8_ops);
109
+
110
+
111
+
112
+
113
+
114
+
115
+ -- Table Definition ----------------------------------------------
116
+
117
+ CREATE MATERIALIZED VIEW waze_jams_snapshots_history AS WITH config AS (
118
+ SELECT 120000 AS max_period,
119
+ date_part('epoch'::text, date_trunc('day',now(), 'Europe/Prague')) * 1000::double precision AS max_measured_at
120
+ )
121
+ SELECT s.start_measured_at,
122
+ s.end_measured_at,
123
+ to_timestamp((s.start_measured_at / 1000)::double precision) AS start_ts,
124
+ to_timestamp((s.end_measured_at / 1000)::double precision) AS end_ts
125
+ FROM ( SELECT s_1.measured_at AS start_measured_at,
126
+ CASE
127
+ WHEN s_1.is_end IS TRUE THEN s_1.measured_at
128
+ ELSE lead(s_1.measured_at) OVER (ORDER BY s_1.measured_at)
129
+ END + (( SELECT config.max_period
130
+ FROM config)) AS end_measured_at,
131
+ s_1.is_start,
132
+ s_1.is_end
133
+ FROM ( SELECT s_2.measured_at,
134
+ s_2.prev_measured_at,
135
+ s_2.next_measured_at,
136
+ s_2."?column?",
137
+ s_2."?column?_1" AS "?column?",
138
+ s_2.is_start,
139
+ s_2.is_end
140
+ FROM ( SELECT s_3.measured_at,
141
+ s_3.prev_measured_at,
142
+ s_3.next_measured_at,
143
+ s_3.measured_at - s_3.prev_measured_at,
144
+ s_3.measured_at - s_3.next_measured_at,
145
+ CASE
146
+ WHEN s_3.prev_measured_at < (s_3.measured_at - (( SELECT config.max_period
147
+ FROM config))) OR s_3.prev_measured_at IS NULL THEN true
148
+ ELSE false
149
+ END AS is_start,
150
+ CASE
151
+ WHEN s_3.next_measured_at > (s_3.measured_at + (( SELECT config.max_period
152
+ FROM config))) OR s_3.next_measured_at IS NULL THEN true
153
+ ELSE false
154
+ END AS is_end
155
+ FROM ( SELECT s_4.measured_at,
156
+ lag(s_4.measured_at) OVER (ORDER BY s_4.measured_at) AS prev_measured_at,
157
+ lead(s_4.measured_at) OVER (ORDER BY s_4.measured_at) AS next_measured_at
158
+ FROM ( SELECT DISTINCT waze_jams.measured_at
159
+ FROM waze_jams WHERE waze_jams.measured_at::double precision < (( SELECT config.max_measured_at
160
+ FROM config))) s_4) s_3) s_2(measured_at, prev_measured_at, next_measured_at, "?column?", "?column?_1", is_start, is_end)
161
+ WHERE s_2.is_start IS TRUE OR s_2.is_end IS TRUE) s_1(measured_at, prev_measured_at, next_measured_at, "?column?", "?column?_1", is_start, is_end)) s
162
+ WHERE s.is_start IS TRUE;
163
+
164
+ -- Indices -------------------------------------------------------
165
+
166
+ CREATE UNIQUE INDEX waze_jams_snapshots_history_start_measured_at_idx ON waze_jams_snapshots_history(start_measured_at int8_ops);
167
+
168
+
169
+ -- Table Definition ----------------------------------------------
170
+
171
+ CREATE MATERIALIZED VIEW waze_jams_snapshots_latest AS WITH config AS (
172
+ SELECT 120000 AS max_period,
173
+ date_part('epoch'::text, date_trunc('day',now(), 'Europe/Prague')) * 1000::double precision AS min_measured_at
174
+ )
175
+ SELECT s.start_measured_at,
176
+ s.end_measured_at,
177
+ to_timestamp((s.start_measured_at / 1000)::double precision) AS start_ts,
178
+ to_timestamp((s.end_measured_at / 1000)::double precision) AS end_ts
179
+ FROM ( SELECT s_1.measured_at AS start_measured_at,
180
+ CASE
181
+ WHEN s_1.is_end IS TRUE THEN s_1.measured_at
182
+ ELSE lead(s_1.measured_at) OVER (ORDER BY s_1.measured_at)
183
+ END + (( SELECT config.max_period
184
+ FROM config)) AS end_measured_at,
185
+ s_1.is_start,
186
+ s_1.is_end
187
+ FROM ( SELECT s_2.measured_at,
188
+ s_2.prev_measured_at,
189
+ s_2.next_measured_at,
190
+ s_2."?column?",
191
+ s_2."?column?_1" AS "?column?",
192
+ s_2.is_start,
193
+ s_2.is_end
194
+ FROM ( SELECT s_3.measured_at,
195
+ s_3.prev_measured_at,
196
+ s_3.next_measured_at,
197
+ s_3.measured_at - s_3.prev_measured_at,
198
+ s_3.measured_at - s_3.next_measured_at,
199
+ CASE
200
+ WHEN s_3.prev_measured_at < (s_3.measured_at - (( SELECT config.max_period
201
+ FROM config))) OR s_3.prev_measured_at IS NULL THEN true
202
+ ELSE false
203
+ END AS is_start,
204
+ CASE
205
+ WHEN s_3.next_measured_at > (s_3.measured_at + (( SELECT config.max_period
206
+ FROM config))) OR s_3.next_measured_at IS NULL THEN true
207
+ ELSE false
208
+ END AS is_end
209
+ FROM ( SELECT s_4.measured_at,
210
+ lag(s_4.measured_at) OVER (ORDER BY s_4.measured_at) AS prev_measured_at,
211
+ lead(s_4.measured_at) OVER (ORDER BY s_4.measured_at) AS next_measured_at
212
+ FROM ( SELECT DISTINCT waze_jams.measured_at
213
+ FROM waze_jams WHERE waze_jams.measured_at::double precision >= (( SELECT config.min_measured_at
214
+ FROM config))) s_4) s_3) s_2(measured_at, prev_measured_at, next_measured_at, "?column?", "?column?_1", is_start, is_end)
215
+ WHERE s_2.is_start IS TRUE OR s_2.is_end IS TRUE) s_1(measured_at, prev_measured_at, next_measured_at, "?column?", "?column?_1", is_start, is_end)) s
216
+ WHERE s.is_start IS TRUE;
217
+
218
+ -- Indices -------------------------------------------------------
219
+
220
+ CREATE UNIQUE INDEX waze_jams_snapshots_latest_start_measured_at_idx ON waze_jams_snapshots_latest(start_measured_at int8_ops);
221
+
222
+
223
+
224
+ ---
225
+ ---
226
+ --- TSK STD
227
+ ---
228
+ ---
229
+
230
+ -- Table Definition ----------------------------------------------
231
+
232
+ CREATE MATERIALIZED VIEW tsk_std_last_30min_snapshots_history AS WITH config AS (
233
+ SELECT 300000 AS max_period,
234
+ date_part('epoch'::text, date_trunc('day',now(), 'Europe/Prague')) * 1000::double precision AS max_measured_at
235
+ )
236
+ SELECT s.start_measured_at,
237
+ s.end_measured_at,
238
+ to_timestamp((s.start_measured_at / 1000)::double precision) AS start_ts,
239
+ to_timestamp((s.end_measured_at / 1000)::double precision) AS end_ts
240
+ FROM ( SELECT s_1.measured_at AS start_measured_at,
241
+ CASE
242
+ WHEN s_1.is_end IS TRUE THEN s_1.measured_at
243
+ ELSE lead(s_1.measured_at) OVER (ORDER BY s_1.measured_at)
244
+ END + (( SELECT config.max_period
245
+ FROM config)) AS end_measured_at,
246
+ s_1.is_start,
247
+ s_1.is_end
248
+ FROM ( SELECT s_2.measured_at,
249
+ s_2.prev_measured_at,
250
+ s_2.next_measured_at,
251
+ s_2."?column?",
252
+ s_2."?column?_1" AS "?column?",
253
+ s_2.is_start,
254
+ s_2.is_end
255
+ FROM ( SELECT s_3.measured_at,
256
+ s_3.prev_measured_at,
257
+ s_3.next_measured_at,
258
+ s_3.measured_at - s_3.prev_measured_at,
259
+ s_3.measured_at - s_3.next_measured_at,
260
+ CASE
261
+ WHEN s_3.prev_measured_at < (s_3.measured_at - (( SELECT config.max_period
262
+ FROM config))) OR s_3.prev_measured_at IS NULL THEN true
263
+ ELSE false
264
+ END AS is_start,
265
+ CASE
266
+ WHEN s_3.next_measured_at > (s_3.measured_at + (( SELECT config.max_period
267
+ FROM config))) OR s_3.next_measured_at IS NULL THEN true
268
+ ELSE false
269
+ END AS is_end
270
+ FROM ( SELECT s_4.measured_at,
271
+ lag(s_4.measured_at) OVER (ORDER BY s_4.measured_at) AS prev_measured_at,
272
+ lead(s_4.measured_at) OVER (ORDER BY s_4.measured_at) AS next_measured_at
273
+ FROM ( SELECT DISTINCT tsk_std_last_30min.measured_at
274
+ FROM tsk_std_last_30min WHERE tsk_std_last_30min.measured_at::double precision < (( SELECT config.max_measured_at
275
+ FROM config))) s_4) s_3) s_2(measured_at, prev_measured_at, next_measured_at, "?column?", "?column?_1", is_start, is_end)
276
+ WHERE s_2.is_start IS TRUE OR s_2.is_end IS TRUE) s_1(measured_at, prev_measured_at, next_measured_at, "?column?", "?column?_1", is_start, is_end)) s
277
+ WHERE s.is_start IS TRUE;
278
+
279
+ -- Indices -------------------------------------------------------
280
+
281
+ CREATE UNIQUE INDEX tsk_std_last_30min_snapshots_history_start_measured_at_idx ON tsk_std_last_30min_snapshots_history(start_measured_at int8_ops);
282
+
283
+ -- Table Definition ----------------------------------------------
284
+
285
+ CREATE MATERIALIZED VIEW tsk_std_last_30min_snapshots_latest AS WITH config AS (
286
+ SELECT 300000 AS max_period,
287
+ date_part('epoch'::text, date_trunc('day',now(), 'Europe/Prague')) * 1000::double precision AS min_measured_at
288
+ )
289
+ SELECT s.start_measured_at,
290
+ s.end_measured_at,
291
+ to_timestamp((s.start_measured_at / 1000)::double precision) AS start_ts,
292
+ to_timestamp((s.end_measured_at / 1000)::double precision) AS end_ts
293
+ FROM ( SELECT s_1.measured_at AS start_measured_at,
294
+ CASE
295
+ WHEN s_1.is_end IS TRUE THEN s_1.measured_at
296
+ ELSE lead(s_1.measured_at) OVER (ORDER BY s_1.measured_at)
297
+ END + (( SELECT config.max_period
298
+ FROM config)) AS end_measured_at,
299
+ s_1.is_start,
300
+ s_1.is_end
301
+ FROM ( SELECT s_2.measured_at,
302
+ s_2.prev_measured_at,
303
+ s_2.next_measured_at,
304
+ s_2."?column?",
305
+ s_2."?column?_1" AS "?column?",
306
+ s_2.is_start,
307
+ s_2.is_end
308
+ FROM ( SELECT s_3.measured_at,
309
+ s_3.prev_measured_at,
310
+ s_3.next_measured_at,
311
+ s_3.measured_at - s_3.prev_measured_at,
312
+ s_3.measured_at - s_3.next_measured_at,
313
+ CASE
314
+ WHEN s_3.prev_measured_at < (s_3.measured_at - (( SELECT config.max_period
315
+ FROM config))) OR s_3.prev_measured_at IS NULL THEN true
316
+ ELSE false
317
+ END AS is_start,
318
+ CASE
319
+ WHEN s_3.next_measured_at > (s_3.measured_at + (( SELECT config.max_period
320
+ FROM config))) OR s_3.next_measured_at IS NULL THEN true
321
+ ELSE false
322
+ END AS is_end
323
+ FROM ( SELECT s_4.measured_at,
324
+ lag(s_4.measured_at) OVER (ORDER BY s_4.measured_at) AS prev_measured_at,
325
+ lead(s_4.measured_at) OVER (ORDER BY s_4.measured_at) AS next_measured_at
326
+ FROM ( SELECT DISTINCT tsk_std_last_30min.measured_at
327
+ FROM tsk_std_last_30min WHERE tsk_std_last_30min.measured_at::double precision >= (( SELECT config.min_measured_at
328
+ FROM config))) s_4) s_3) s_2(measured_at, prev_measured_at, next_measured_at, "?column?", "?column?_1", is_start, is_end)
329
+ WHERE s_2.is_start IS TRUE OR s_2.is_end IS TRUE) s_1(measured_at, prev_measured_at, next_measured_at, "?column?", "?column?_1", is_start, is_end)) s
330
+ WHERE s.is_start IS TRUE;
331
+
332
+ -- Indices -------------------------------------------------------
333
+
334
+ CREATE UNIQUE INDEX tsk_std_last_30min_snapshots_latest_start_measured_at_idx ON tsk_std_last_30min_snapshots_latest(start_measured_at int8_ops);
335
+
336
+
337
+
338
+
339
+
340
+ --
341
+ --
342
+ -- NDIC
343
+ --
344
+ --
345
+
346
+ -- Table Definition ----------------------------------------------
347
+
348
+ CREATE MATERIALIZED VIEW ndic_events_full_snapshots_history AS WITH config AS (
349
+ SELECT 1800000 AS max_period,
350
+ date_part('epoch'::text, date_trunc('day',now(), 'Europe/Prague')) * 1000::double precision AS max_measured_at
351
+ )
352
+ SELECT s.start_measured_at,
353
+ s.end_measured_at,
354
+ to_timestamp((s.start_measured_at / 1000)::double precision) AS start_ts,
355
+ to_timestamp((s.end_measured_at / 1000)::double precision) AS end_ts
356
+ FROM ( SELECT s_1.measured_at AS start_measured_at,
357
+ CASE
358
+ WHEN s_1.is_end IS TRUE THEN s_1.measured_at
359
+ ELSE lead(s_1.measured_at) OVER (ORDER BY s_1.measured_at)
360
+ END + (( SELECT config.max_period
361
+ FROM config)) AS end_measured_at,
362
+ s_1.is_start,
363
+ s_1.is_end
364
+ FROM ( SELECT s_2.measured_at,
365
+ s_2.prev_measured_at,
366
+ s_2.next_measured_at,
367
+ s_2."?column?",
368
+ s_2."?column?_1" AS "?column?",
369
+ s_2.is_start,
370
+ s_2.is_end
371
+ FROM ( SELECT s_3.measured_at,
372
+ s_3.prev_measured_at,
373
+ s_3.next_measured_at,
374
+ s_3.measured_at - s_3.prev_measured_at,
375
+ s_3.measured_at - s_3.next_measured_at,
376
+ CASE
377
+ WHEN s_3.prev_measured_at < (s_3.measured_at - (( SELECT config.max_period
378
+ FROM config))) OR s_3.prev_measured_at IS NULL THEN true
379
+ ELSE false
380
+ END AS is_start,
381
+ CASE
382
+ WHEN s_3.next_measured_at > (s_3.measured_at + (( SELECT config.max_period
383
+ FROM config))) OR s_3.next_measured_at IS NULL THEN true
384
+ ELSE false
385
+ END AS is_end
386
+ FROM ( SELECT s_4.measured_at,
387
+ lag(s_4.measured_at) OVER (ORDER BY s_4.measured_at) AS prev_measured_at,
388
+ lead(s_4.measured_at) OVER (ORDER BY s_4.measured_at) AS next_measured_at
389
+ FROM ( SELECT DISTINCT ndic_events_full.measured_at
390
+ FROM ndic_events_full WHERE ndic_events_full.measured_at::double precision < (( SELECT config.max_measured_at
391
+ FROM config))) s_4) s_3) s_2(measured_at, prev_measured_at, next_measured_at, "?column?", "?column?_1", is_start, is_end)
392
+ WHERE s_2.is_start IS TRUE OR s_2.is_end IS TRUE) s_1(measured_at, prev_measured_at, next_measured_at, "?column?", "?column?_1", is_start, is_end)) s
393
+ WHERE s.is_start IS TRUE;
394
+
395
+ -- Indices -------------------------------------------------------
396
+
397
+ CREATE UNIQUE INDEX ndic_events_full_snapshots_history_start_measured_at_idx ON ndic_events_full_snapshots_history(start_measured_at int8_ops);
398
+
399
+ -- Table Definition ----------------------------------------------
400
+
401
+ CREATE MATERIALIZED VIEW ndic_events_full_snapshots_latest AS WITH config AS (
402
+ SELECT 1800000 AS max_period,
403
+ date_part('epoch'::text, date_trunc('day',now(), 'Europe/Prague')) * 1000::double precision AS min_measured_at
404
+ )
405
+ SELECT s.start_measured_at,
406
+ s.end_measured_at,
407
+ to_timestamp((s.start_measured_at / 1000)::double precision) AS start_ts,
408
+ to_timestamp((s.end_measured_at / 1000)::double precision) AS end_ts
409
+ FROM ( SELECT s_1.measured_at AS start_measured_at,
410
+ CASE
411
+ WHEN s_1.is_end IS TRUE THEN s_1.measured_at
412
+ ELSE lead(s_1.measured_at) OVER (ORDER BY s_1.measured_at)
413
+ END + (( SELECT config.max_period
414
+ FROM config)) AS end_measured_at,
415
+ s_1.is_start,
416
+ s_1.is_end
417
+ FROM ( SELECT s_2.measured_at,
418
+ s_2.prev_measured_at,
419
+ s_2.next_measured_at,
420
+ s_2."?column?",
421
+ s_2."?column?_1" AS "?column?",
422
+ s_2.is_start,
423
+ s_2.is_end
424
+ FROM ( SELECT s_3.measured_at,
425
+ s_3.prev_measured_at,
426
+ s_3.next_measured_at,
427
+ s_3.measured_at - s_3.prev_measured_at,
428
+ s_3.measured_at - s_3.next_measured_at,
429
+ CASE
430
+ WHEN s_3.prev_measured_at < (s_3.measured_at - (( SELECT config.max_period
431
+ FROM config))) OR s_3.prev_measured_at IS NULL THEN true
432
+ ELSE false
433
+ END AS is_start,
434
+ CASE
435
+ WHEN s_3.next_measured_at > (s_3.measured_at + (( SELECT config.max_period
436
+ FROM config))) OR s_3.next_measured_at IS NULL THEN true
437
+ ELSE false
438
+ END AS is_end
439
+ FROM ( SELECT s_4.measured_at,
440
+ lag(s_4.measured_at) OVER (ORDER BY s_4.measured_at) AS prev_measured_at,
441
+ lead(s_4.measured_at) OVER (ORDER BY s_4.measured_at) AS next_measured_at
442
+ FROM ( SELECT DISTINCT ndic_events_full.measured_at
443
+ FROM ndic_events_full WHERE ndic_events_full.measured_at::double precision >= (( SELECT config.min_measured_at
444
+ FROM config))) s_4) s_3) s_2(measured_at, prev_measured_at, next_measured_at, "?column?", "?column?_1", is_start, is_end)
445
+ WHERE s_2.is_start IS TRUE OR s_2.is_end IS TRUE) s_1(measured_at, prev_measured_at, next_measured_at, "?column?", "?column?_1", is_start, is_end)) s
446
+ WHERE s.is_start IS TRUE;
447
+
448
+ -- Indices -------------------------------------------------------
449
+
450
+ CREATE UNIQUE INDEX ndic_events_full_snapshots_latest_start_measured_at_idx ON ndic_events_full_snapshots_latest(start_measured_at int8_ops);
451
+
452
+
453
+
454
+
455
+ --
456
+ --
457
+ -- FCD
458
+ --
459
+ --
460
+
461
+ -- Table Definition ----------------------------------------------
462
+
463
+ CREATE MATERIALIZED VIEW fcd_events_snapshots_history AS WITH config AS (
464
+ SELECT 60000 AS max_period,
465
+ (date_part('epoch'::text, date_trunc('day',now(), 'Europe/Prague')) * 1000)::int8 AS max_measured_at
466
+ )
467
+ SELECT s.start_measured_at,
468
+ s.end_measured_at,
469
+ to_timestamp((s.start_measured_at / 1000)::double precision) AS start_ts,
470
+ to_timestamp((s.end_measured_at / 1000)::double precision) AS end_ts
471
+ FROM ( SELECT s_1.measured_at AS start_measured_at,
472
+ CASE
473
+ WHEN s_1.is_end IS TRUE THEN s_1.measured_at
474
+ ELSE lead(s_1.measured_at) OVER (ORDER BY s_1.measured_at)
475
+ END + (( SELECT config.max_period
476
+ FROM config)) AS end_measured_at,
477
+ s_1.is_start,
478
+ s_1.is_end
479
+ FROM ( SELECT s_2.measured_at,
480
+ s_2.prev_measured_at,
481
+ s_2.next_measured_at,
482
+ s_2."?column?",
483
+ s_2."?column?_1" AS "?column?",
484
+ s_2.is_start,
485
+ s_2.is_end
486
+ FROM ( SELECT s_3.measured_at,
487
+ s_3.prev_measured_at,
488
+ s_3.next_measured_at,
489
+ s_3.measured_at - s_3.prev_measured_at,
490
+ s_3.measured_at - s_3.next_measured_at,
491
+ CASE
492
+ WHEN s_3.prev_measured_at < (s_3.measured_at - (( SELECT config.max_period
493
+ FROM config))) OR s_3.prev_measured_at IS NULL THEN true
494
+ ELSE false
495
+ END AS is_start,
496
+ CASE
497
+ WHEN s_3.next_measured_at > (s_3.measured_at + (( SELECT config.max_period
498
+ FROM config))) OR s_3.next_measured_at IS NULL THEN true
499
+ ELSE false
500
+ END AS is_end
501
+ FROM ( SELECT s_4.measured_at,
502
+ lag(s_4.measured_at) OVER (ORDER BY s_4.measured_at) AS prev_measured_at,
503
+ lead(s_4.measured_at) OVER (ORDER BY s_4.measured_at) AS next_measured_at
504
+ FROM ( SELECT DISTINCT fcd_events.measured_at
505
+ FROM fcd_events WHERE fcd_events.measured_at < (( SELECT config.max_measured_at
506
+ FROM config))) s_4) s_3) s_2(measured_at, prev_measured_at, next_measured_at, "?column?", "?column?_1", is_start, is_end)
507
+ WHERE s_2.is_start IS TRUE OR s_2.is_end IS TRUE) s_1(measured_at, prev_measured_at, next_measured_at, "?column?", "?column?_1", is_start, is_end)) s
508
+ WHERE s.is_start IS TRUE;
509
+
510
+ -- Indices -------------------------------------------------------
511
+
512
+ CREATE UNIQUE INDEX fcd_events_snapshots_history_start_measured_at_idx ON fcd_events_snapshots_history(start_measured_at int8_ops);
513
+
514
+
515
+ -- Table Definition ----------------------------------------------
516
+
517
+ CREATE MATERIALIZED VIEW fcd_events_snapshots_latest AS WITH config AS (
518
+ SELECT 60000 AS max_period,
519
+ (date_part('epoch'::text, date_trunc('day',now(), 'Europe/Prague')) * 1000)::int8 AS min_measured_at
520
+ )
521
+ SELECT s.start_measured_at,
522
+ s.end_measured_at,
523
+ to_timestamp((s.start_measured_at / 1000)::double precision) AS start_ts,
524
+ to_timestamp((s.end_measured_at / 1000)::double precision) AS end_ts
525
+ FROM ( SELECT s_1.measured_at AS start_measured_at,
526
+ CASE
527
+ WHEN s_1.is_end IS TRUE THEN s_1.measured_at
528
+ ELSE lead(s_1.measured_at) OVER (ORDER BY s_1.measured_at)
529
+ END + (( SELECT config.max_period
530
+ FROM config)) AS end_measured_at,
531
+ s_1.is_start,
532
+ s_1.is_end
533
+ FROM ( SELECT s_2.measured_at,
534
+ s_2.prev_measured_at,
535
+ s_2.next_measured_at,
536
+ s_2."?column?",
537
+ s_2."?column?_1" AS "?column?",
538
+ s_2.is_start,
539
+ s_2.is_end
540
+ FROM ( SELECT s_3.measured_at,
541
+ s_3.prev_measured_at,
542
+ s_3.next_measured_at,
543
+ s_3.measured_at - s_3.prev_measured_at,
544
+ s_3.measured_at - s_3.next_measured_at,
545
+ CASE
546
+ WHEN s_3.prev_measured_at < (s_3.measured_at - (( SELECT config.max_period
547
+ FROM config))) OR s_3.prev_measured_at IS NULL THEN true
548
+ ELSE false
549
+ END AS is_start,
550
+ CASE
551
+ WHEN s_3.next_measured_at > (s_3.measured_at + (( SELECT config.max_period
552
+ FROM config))) OR s_3.next_measured_at IS NULL THEN true
553
+ ELSE false
554
+ END AS is_end
555
+ FROM ( SELECT s_4.measured_at,
556
+ lag(s_4.measured_at) OVER (ORDER BY s_4.measured_at) AS prev_measured_at,
557
+ lead(s_4.measured_at) OVER (ORDER BY s_4.measured_at) AS next_measured_at
558
+ FROM ( SELECT DISTINCT fcd_events.measured_at
559
+ FROM fcd_events WHERE fcd_events.measured_at >= (( SELECT config.min_measured_at
560
+ FROM config))) s_4) s_3) s_2(measured_at, prev_measured_at, next_measured_at, "?column?", "?column?_1", is_start, is_end)
561
+ WHERE s_2.is_start IS TRUE OR s_2.is_end IS TRUE) s_1(measured_at, prev_measured_at, next_measured_at, "?column?", "?column?_1", is_start, is_end)) s
562
+ WHERE s.is_start IS TRUE;
563
+ -- Indices -------------------------------------------------------
564
+
565
+ CREATE UNIQUE INDEX fcd_events_snapshots_latest_start_measured_at_idx ON fcd_events_snapshots_latest(start_measured_at int8_ops);
@@ -4,10 +4,12 @@ export declare class AggregationWorker extends BaseWorker {
4
4
  static queuePrefix: string;
5
5
  static queueName: string;
6
6
  static aggregationMethodName: string;
7
+ static refreshHistoricViewsMethodName: string;
7
8
  private aggregationFactory;
8
9
  private refreshIntervalInMinutes;
9
10
  constructor();
10
11
  aggregateData: (message: Message) => Promise<void>;
12
+ refreshHistoricViews: (message: Message) => Promise<void>;
11
13
  private isTaskEmpty;
12
14
  private isDateRangeBig;
13
15
  private handleEmptyTask;
@@ -40,6 +40,17 @@ class AggregationWorker extends integration_engine_1.BaseWorker {
40
40
  throw new errors_1.CustomError(`Unable to process task: ${JSON.stringify(task)}.`, true, this.constructor.name);
41
41
  }
42
42
  });
43
+ this.refreshHistoricViews = (message) => __awaiter(this, void 0, void 0, function* () {
44
+ for (const type in AggregationTaskType_1.AggregationTaskType) {
45
+ try {
46
+ const aggregator = this.aggregationFactory.get(type.toUpperCase());
47
+ yield aggregator.refreshHistoricMaterialView();
48
+ }
49
+ catch (err) {
50
+ integration_engine_1.log.error(`Unable to refresh historic material view for: ${type}. Error stack: ${err.stack}`);
51
+ }
52
+ }
53
+ });
43
54
  this.handleEmptyTask = () => __awaiter(this, void 0, void 0, function* () {
44
55
  const to = new Date();
45
56
  const from = luxon_1.DateTime.fromJSDate(to).minus({ minutes: this.refreshIntervalInMinutes }).toJSDate();
@@ -49,8 +60,8 @@ class AggregationWorker extends integration_engine_1.BaseWorker {
49
60
  });
50
61
  this.processTask = (type, from, to, updateOnDuplicate) => __awaiter(this, void 0, void 0, function* () {
51
62
  try {
52
- const factory = this.aggregationFactory.get(type.toUpperCase());
53
- yield factory.aggregateAndSave(from, to, updateOnDuplicate);
63
+ const aggregator = this.aggregationFactory.get(type.toUpperCase());
64
+ yield aggregator.aggregateAndSave(from, to, updateOnDuplicate);
54
65
  }
55
66
  catch (err) {
56
67
  integration_engine_1.log.error(`Unable to process task: ${type} from: ${from} to: ${to}. Error stack: ${err.stack}`);
@@ -80,4 +91,5 @@ exports.AggregationWorker = AggregationWorker;
80
91
  AggregationWorker.queuePrefix = config_1.config.RABBIT_EXCHANGE_NAME + "." + "rush-hour-aggregation";
81
92
  AggregationWorker.queueName = "rush-hour-aggregation";
82
93
  AggregationWorker.aggregationMethodName = "aggregateData";
94
+ AggregationWorker.refreshHistoricViewsMethodName = "refreshHistoricViews";
83
95
  //# sourceMappingURL=AggregationWorker.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"AggregationWorker.js","sourceRoot":"","sources":["../../src/integration-engine/AggregationWorker.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"AggregationWorker.js","sourceRoot":"","sources":["../../src/integration-engine/AggregationWorker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import { IModel, PostgresModel } from "@golemio/core/dist/integration-engine";
2
+ export default abstract class EventsRepository<T> extends PostgresModel implements IModel {
3
+ protected abstract materializedViewNameLatest: string;
4
+ protected abstract materializedViewNameHistoric: string;
5
+ abstract saveData(data: T[], updateOnDuplicate: boolean): Promise<void>;
6
+ refreshLatestMaterializedView: () => Promise<void>;
7
+ refreshHistoricMaterializedView: () => Promise<void>;
8
+ private refreshMaterializedView;
9
+ }