@golemio/waze-tt 1.1.8-dev.849314119 → 1.1.8-dev.849489204

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