@golemio/waze-tt 1.1.1-dev.770900483 → 1.1.1-dev.777437593

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