@golemio/waze-tt 1.1.0-dev.769510269 → 1.1.0-dev.770141830

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