@golemio/waze-tt 1.1.0 → 1.1.1-dev.773639991

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,365 @@
1
+ -- analytic.mv_mala_strana_normal source
2
+ DROP MATERIALIZED VIEW analytic.mv_mala_strana_normal;
3
+ CREATE MATERIALIZED VIEW analytic.mv_mala_strana_normal
4
+ TABLESPACE pg_default
5
+ AS SELECT vtbh.name,
6
+ vtbh.hodina,
7
+ round(avg(vtbh.avg_time), 2) AS avg_time,
8
+ round(avg(vtbh.avg_speed)) AS avg_speed
9
+ FROM ( SELECT wdrn.name,
10
+ CASE
11
+ WHEN wdrn.idx < 38 THEN 'group1'::text
12
+ ELSE 'group2'::text
13
+ END AS skupina,
14
+ rl.ts::date AS datum,
15
+ date_part('hour'::text, rl.ts) AS hodina,
16
+ (to_char(date_part('hour'::text, rl.ts), '09'::text) || ' -'::text) || to_char(date_part('hour'::text, rl.ts) + 1::double precision, '09'::text) AS cas_interval,
17
+ rl.avg_time,
18
+ rl.avg_speed
19
+ FROM ( SELECT rl_1.route_id,
20
+ date_trunc('hour'::text, to_timestamp((rl_1.update_time / 1000)::double precision)) AS ts,
21
+ round(avg(rl_1."time"), 2) AS avg_time,
22
+ round(avg(rl_1.length * 1000 / (NULLIF(rl_1."time", 0) * 360)), 2) AS avg_speed
23
+ FROM wazett.wazett_route_lives rl_1
24
+ WHERE rl_1.update_time >= '1665360000000'::bigint
25
+ GROUP BY rl_1.route_id, (date_trunc('hour'::text, to_timestamp((rl_1.update_time / 1000)::double precision)))) rl
26
+ JOIN analytic.waze_dashboard_route_name wdrn ON wdrn.route_id = rl.route_id) vtbh
27
+ WHERE (vtbh.skupina = 'group1'::text AND vtbh.datum >= '2022-10-10'::date AND vtbh.datum <= '2022-10-25'::date AND (date_part('dow'::text, vtbh.datum) = ANY (ARRAY[2::double precision, 3::double precision, 4::double precision])))
28
+ OR (vtbh.skupina = 'group2'::text AND vtbh.datum >= '2023-01-09'::date AND vtbh.datum <= '2023-01-29'::date AND (date_part('dow'::text, vtbh.datum) = ANY (ARRAY[2::double precision, 3::double precision, 4::double precision])))
29
+ GROUP BY vtbh.name, vtbh.hodina
30
+ WITH DATA;
31
+
32
+ CREATE OR REPLACE PROCEDURE analytic.update_waze()
33
+ LANGUAGE plpgsql
34
+ AS $procedure$
35
+
36
+ declare
37
+ lastupdatetimestamp timestamptz;
38
+ lastupdateunix bigint;
39
+ begin
40
+ select
41
+ case
42
+ when start_day is not null
43
+ then start_day
44
+ else '2021-01-01'
45
+ end as start_day_from into lastupdatetimestamp
46
+ from (select max(date)-interval '1 days' start_day from analytic.waze_route_travel_times_agg) wazemax;
47
+
48
+ lastupdateunix := extract ('epoch' from lastupdatetimestamp) * 1000;
49
+ -- inserting data is incremental, since the last timestamp already in the table
50
+ insert into analytic.waze_route_travel_times_agg
51
+ SELECT ts.route_id,
52
+ ts.year,
53
+ ts.month,
54
+ ts.day,
55
+ ts.dow,
56
+ ts.hour,
57
+ ts.quarter,
58
+ ts.hour + (ts.quarter::numeric / 60::numeric)::double precision AS hour_quarter,
59
+ ((((((((ts.year || '-'::text) || ts.month) || '-'::text) || ts.day) || ' '::text) || ts.hour) || ':'::text) || ts.quarter)::timestamp without time zone AS date,
60
+ avg(ts.travel_time)::integer AS travel_time
61
+ FROM ( SELECT raw.route_id,
62
+ raw.update_time,
63
+ raw.travel_time,
64
+ date_part('year'::text, raw.update_time) AS year,
65
+ date_part('month'::text, raw.update_time) AS month,
66
+ date_part('day'::text, raw.update_time) AS day,
67
+ date_part('dow'::text, raw.update_time) AS dow,
68
+ date_part('hour'::text, raw.update_time) AS hour,
69
+ date_part('minute'::text, raw.update_time) AS minute,
70
+ date_part('minute'::text, raw.update_time)::integer / 15 * 15 AS quarter
71
+ FROM ( SELECT wazett_route_lives.route_id,
72
+ timezone('Europe/Prague'::text, to_timestamp((wazett_route_lives.update_time / 1000)::double precision)::timestamp without time zone) AS update_time,
73
+ wazett_route_lives."time" AS travel_time
74
+ FROM wazett.wazett_route_lives
75
+ JOIN analytic.waze_dashboard_route_name wdrn ON wdrn.route_id = wazett_route_lives.route_id
76
+ where wazett_route_lives.update_time > lastupdateunix -- this is the time condition for the increment
77
+ ) raw
78
+ ) ts
79
+ WHERE ts.year > 2000::double precision
80
+ GROUP BY ts.route_id, ts.year, ts.month, ts.day, ts.dow, ts.hour, ts.quarter
81
+ ON CONFLICT (route_id, year, month, day, dow, hour, quarter, hour_quarter)
82
+ DO update
83
+ SET
84
+ date = EXCLUDED.date,
85
+ travel_time = EXCLUDED.travel_time
86
+ ;
87
+ end;
88
+ $procedure$
89
+ ;
90
+
91
+
92
+ CREATE OR REPLACE PROCEDURE analytic.update_mala_strana()
93
+ LANGUAGE plpgsql
94
+ AS $procedure$
95
+ declare
96
+ lastupdatetimestamp timestamptz;
97
+ lastupdateunix bigint;
98
+ begin
99
+ begin
100
+ select
101
+ case
102
+ when start_day is not null
103
+ then start_day
104
+ else '2022-01-01'
105
+ end as start_day_from into lastupdatetimestamp
106
+ from (select max(datum)-interval '1 days' start_day from analytic.mala_strana_route_hour_core) malastranamax;
107
+
108
+ lastupdateunix := extract ('epoch' from lastupdatetimestamp) * 1000;
109
+
110
+ -- dopoctu hodinovou agregaci (podobné v_mala_strana_route_hour_core) POT5EBUJEME TAKTO?
111
+ insert into analytic.mala_strana_route_hour_core
112
+ SELECT
113
+ wdrn.name,
114
+ rl.ts::date AS datum,
115
+ date_part('hour'::text, rl.ts) AS hodina,
116
+ (to_char(date_part('hour'::text, rl.ts), '09'::text) || ' -'::text) || to_char(date_part('hour'::text, rl.ts) + 1::double precision, '09'::text) AS cas_interval,
117
+ avg_time,
118
+ avg_speed
119
+ FROM (
120
+ select
121
+ route_id
122
+ -- timezone('Europe/Prague'::text, to_timestamp((update_time / 1000)::double precision)::timestamp without time zone)
123
+ ,date_trunc('hour', to_timestamp((update_time / 1000))::timestamp) as ts
124
+ ,round(avg(time), 2) AS avg_time
125
+ ,round(avg(rl.length * 1000 / (nullif(rl."time", 0) * 360)), 2) AS avg_speed
126
+ from wazett.wazett_route_lives rl
127
+ where
128
+ -- route_id = 22706 and
129
+ rl.update_time > lastupdateunix and
130
+ rl.length > 0
131
+ group by 1,2) rl
132
+ JOIN analytic.waze_dashboard_route_name wdrn ON wdrn.route_id = rl.route_id
133
+ ON CONFLICT (name,datum,hodina,cas_interval)
134
+ DO update
135
+ SET avg_time = EXCLUDED.avg_time,
136
+ avg_speed = EXCLUDED.avg_speed
137
+ ;
138
+
139
+ insert into analytic.mala_strana_data_all
140
+ WITH
141
+ v_ms_route_hour as (
142
+ SELECT p.name,
143
+ p.datum,
144
+ p.hodina,
145
+ p.cas_interval,
146
+ p.avg_time,
147
+ p.avg_speed,
148
+ n.avg_time AS normal_avg_time,
149
+ n.avg_speed AS normal_avg_speed
150
+ FROM analytic.mala_strana_route_hour_core p
151
+ LEFT JOIN analytic.mv_mala_strana_normal n ON n.name = p.name AND p.hodina = n.hodina
152
+ where datum > lastupdatetimestamp
153
+ ),
154
+ -- konec v_ms_route_hour
155
+ v_ms_union_time_interval as (
156
+ WITH hodiny AS (
157
+ SELECT brh.name,
158
+ brh.datum,
159
+ brh.hodina,
160
+ brh.cas_interval,
161
+ brh.avg_time,
162
+ brh.avg_speed,
163
+ brh.normal_avg_time,
164
+ brh.normal_avg_speed
165
+ FROM v_ms_route_hour brh
166
+ WHERE brh.datum < CURRENT_DATE OR brh.hodina < date_part('hour'::text, now())
167
+ ), den AS (
168
+ SELECT hodiny.name,
169
+ hodiny.datum,
170
+ '0 - 24h'::text AS cas_interval,
171
+ round(avg(hodiny.avg_time), 2) AS avg_time,
172
+ round(avg(hodiny.avg_speed), 2) AS avg_speed,
173
+ round(avg(hodiny.normal_avg_time), 2) AS normal_avg_time,
174
+ round(avg(hodiny.normal_avg_speed), 2) AS normal_avg_speed
175
+ FROM hodiny
176
+ WHERE hodiny.datum < CURRENT_DATE
177
+ GROUP BY hodiny.name, hodiny.datum
178
+ ), h15_18 AS (
179
+ SELECT hodiny.name,
180
+ hodiny.datum,
181
+ '15 -18'::text AS cas_interval,
182
+ round(avg(hodiny.avg_time), 2) AS avg_time,
183
+ round(avg(hodiny.avg_speed), 2) AS avg_speed,
184
+ round(avg(hodiny.normal_avg_time), 2) AS normal_avg_time,
185
+ round(avg(hodiny.normal_avg_speed), 2) AS normal_avg_speed
186
+ FROM hodiny
187
+ WHERE hodiny.hodina >= 15::double precision AND hodiny.hodina <= 17::double precision AND (hodiny.datum < CURRENT_DATE OR hodiny.hodina > 17::double precision)
188
+ GROUP BY hodiny.name, hodiny.datum
189
+ ), h22_6 AS (
190
+ SELECT hodiny.name,
191
+ hodiny.datum,
192
+ '22 - 06'::text AS cas_interval,
193
+ round(avg(hodiny.avg_time), 2) AS avg_time,
194
+ round(avg(hodiny.avg_speed), 2) AS avg_speed,
195
+ round(avg(hodiny.normal_avg_time), 2) AS normal_avg_time,
196
+ round(avg(hodiny.normal_avg_speed), 2) AS normal_avg_speed
197
+ FROM hodiny
198
+ WHERE NOT (hodiny.hodina >= 6::double precision AND hodiny.hodina <= 21::double precision) AND hodiny.datum < CURRENT_DATE
199
+ GROUP BY hodiny.name, hodiny.datum
200
+ ), h6_22 AS (
201
+ SELECT hodiny.name,
202
+ hodiny.datum,
203
+ '06 - 22'::text AS cas_interval,
204
+ round(avg(hodiny.avg_time), 2) AS avg_time,
205
+ round(avg(hodiny.avg_speed), 2) AS avg_speed,
206
+ round(avg(hodiny.normal_avg_time), 2) AS normal_avg_time,
207
+ round(avg(hodiny.normal_avg_speed), 2) AS normal_avg_speed
208
+ FROM hodiny
209
+ WHERE hodiny.hodina >= 6::double precision AND hodiny.hodina <= 21::double precision AND (hodiny.datum < CURRENT_DATE OR hodiny.hodina > 21::double precision)
210
+ GROUP BY hodiny.name, hodiny.datum
211
+ ), h7_10 AS (
212
+ SELECT hodiny.name,
213
+ hodiny.datum,
214
+ '07 - 10'::text AS cas_interval,
215
+ round(avg(hodiny.avg_time), 2) AS avg_time,
216
+ round(avg(hodiny.avg_speed), 2) AS avg_speed,
217
+ round(avg(hodiny.normal_avg_time), 2) AS normal_avg_time,
218
+ round(avg(hodiny.normal_avg_speed), 2) AS normal_avg_speed
219
+ FROM hodiny
220
+ WHERE hodiny.hodina >= 7::double precision AND hodiny.hodina <= 9::double precision AND (hodiny.datum < CURRENT_DATE OR hodiny.hodina > 10::double precision)
221
+ GROUP BY hodiny.name, hodiny.datum
222
+ ), h7_11_15_19 AS (
223
+ SELECT hodiny.name,
224
+ hodiny.datum,
225
+ '07 - 11, 15 - 19'::text AS cas_interval,
226
+ round(avg(hodiny.avg_time), 2) AS avg_time,
227
+ round(avg(hodiny.avg_speed), 2) AS avg_speed,
228
+ round(avg(hodiny.normal_avg_time), 2) AS normal_avg_time,
229
+ round(avg(hodiny.normal_avg_speed), 2) AS normal_avg_speed
230
+ FROM hodiny
231
+ WHERE (hodiny.hodina >= 7::double precision AND hodiny.hodina <= 10::double precision OR hodiny.hodina >= 15::double precision AND hodiny.hodina <= 18::double precision) AND (hodiny.datum < CURRENT_DATE OR hodiny.hodina > 18::double precision)
232
+ GROUP BY hodiny.name, hodiny.datum
233
+ )
234
+ SELECT hodiny.name,
235
+ hodiny.datum,
236
+ hodiny.cas_interval,
237
+ hodiny.avg_time,
238
+ hodiny.avg_speed,
239
+ hodiny.normal_avg_time,
240
+ hodiny.normal_avg_speed
241
+ FROM hodiny
242
+ UNION ALL
243
+ SELECT den.name,
244
+ den.datum,
245
+ den.cas_interval,
246
+ den.avg_time,
247
+ den.avg_speed,
248
+ den.normal_avg_time,
249
+ den.normal_avg_speed
250
+ FROM den
251
+ UNION ALL
252
+ SELECT h15_18.name,
253
+ h15_18.datum,
254
+ h15_18.cas_interval,
255
+ h15_18.avg_time,
256
+ h15_18.avg_speed,
257
+ h15_18.normal_avg_time,
258
+ h15_18.normal_avg_speed
259
+ FROM h15_18
260
+ UNION ALL
261
+ SELECT h22_6.name,
262
+ h22_6.datum,
263
+ h22_6.cas_interval,
264
+ h22_6.avg_time,
265
+ h22_6.avg_speed,
266
+ h22_6.normal_avg_time,
267
+ h22_6.normal_avg_speed
268
+ FROM h22_6
269
+ UNION ALL
270
+ SELECT h6_22.name,
271
+ h6_22.datum,
272
+ h6_22.cas_interval,
273
+ h6_22.avg_time,
274
+ h6_22.avg_speed,
275
+ h6_22.normal_avg_time,
276
+ h6_22.normal_avg_speed
277
+ FROM h6_22
278
+ UNION ALL
279
+ SELECT h7_10.name,
280
+ h7_10.datum,
281
+ h7_10.cas_interval,
282
+ h7_10.avg_time,
283
+ h7_10.avg_speed,
284
+ h7_10.normal_avg_time,
285
+ h7_10.normal_avg_speed
286
+ FROM h7_10
287
+ UNION ALL
288
+ SELECT h7_11_15_19.name,
289
+ h7_11_15_19.datum,
290
+ h7_11_15_19.cas_interval,
291
+ h7_11_15_19.avg_time,
292
+ h7_11_15_19.avg_speed,
293
+ h7_11_15_19.normal_avg_time,
294
+ h7_11_15_19.normal_avg_speed
295
+ FROM h7_11_15_19
296
+ ),
297
+ -----------------------
298
+ data1 AS (
299
+ SELECT
300
+ trasy.name,
301
+ trasy.name_trasa,
302
+ trasy.name_usek,
303
+ CASE
304
+ WHEN trasy.is_opacny_smer THEN 'Zpět'::text
305
+ ELSE 'Tam'::text
306
+ END AS smer,
307
+ vbu.datum,
308
+ vbu.cas_interval,
309
+ vbu.avg_time,
310
+ vbu.avg_speed,
311
+ vbu.normal_avg_time,
312
+ vbu.normal_avg_speed
313
+ FROM v_ms_union_time_interval vbu
314
+ JOIN analytic.v_mala_strana_route trasy ON trasy.name = vbu.name
315
+ ),
316
+ data2 AS (
317
+ SELECT
318
+ data1.name_trasa,
319
+ data1.name_usek,
320
+ 'Oba'::text AS smer,
321
+ data1.datum,
322
+ data1.cas_interval,
323
+ sum(data1.avg_time) AS avg_time,
324
+ avg(data1.avg_speed) AS avg_speed,
325
+ sum(data1.normal_avg_time) AS normal_avg_time,
326
+ avg(data1.normal_avg_speed) AS normal_avg_speed
327
+ FROM data1
328
+ GROUP BY data1.name_trasa, data1.name_usek, 'Oba'::text, data1.datum, data1.cas_interval
329
+ )
330
+ SELECT data1.name,
331
+ data1.name_trasa,
332
+ data1.name_usek,
333
+ data1.smer,
334
+ data1.datum,
335
+ data1.cas_interval,
336
+ data1.avg_time,
337
+ data1.avg_speed,
338
+ data1.normal_avg_time,
339
+ data1.normal_avg_speed
340
+ FROM data1
341
+ UNION
342
+ SELECT vbt.name,
343
+ data2.name_trasa,
344
+ data2.name_usek,
345
+ data2.smer,
346
+ data2.datum,
347
+ data2.cas_interval,
348
+ data2.avg_time,
349
+ data2.avg_speed,
350
+ data2.normal_avg_time,
351
+ data2.normal_avg_speed
352
+ FROM data2
353
+ JOIN analytic.v_mala_strana_route vbt ON vbt.name_trasa = data2.name_trasa AND vbt.name_usek = data2.name_usek AND NOT vbt.is_opacny_smer
354
+ on conflict (name,name_trasa,name_usek,smer,datum,cas_interval)
355
+ do update
356
+ SET avg_time = EXCLUDED.avg_time,
357
+ avg_speed = EXCLUDED.avg_speed,
358
+ normal_avg_time = EXCLUDED.normal_avg_time,
359
+ normal_avg_speed = EXCLUDED.normal_avg_speed;
360
+ end;
361
+ end;
362
+ $procedure$
363
+ ;
364
+
365
+
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@golemio/waze-tt",
3
- "version": "1.1.0",
3
+ "version": "1.1.1-dev.773639991",
4
4
  "description": "Golemio Waze TT Module",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -65,4 +65,4 @@
65
65
  "@golemio/core": "^1.0.5"
66
66
  },
67
67
  "dependencies": {}
68
- }
68
+ }