@golemio/flow 1.0.9 → 1.0.10

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', '20220811122620-analytic-fix-flow-sla-view-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', '20220811122620-analytic-fix-flow-sla-view-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,45 @@
1
+ CREATE OR REPLACE VIEW analytic.v_pedestrians_flow_quality
2
+ AS WITH timeline_category AS (
3
+ SELECT DISTINCT fs.cube_id,
4
+ fs.id AS sink_id,
5
+ timeline."timestamp"
6
+ FROM flow_sinks fs
7
+ LEFT JOIN ( SELECT generate_series(date_trunc('month'::text, CURRENT_DATE - '180 days'::interval)::timestamp with time zone, date_trunc('hour'::text, CURRENT_DATE::timestamp with time zone), '01:00:00'::interval) AS "timestamp") timeline ON true
8
+ ), base_table AS (
9
+ SELECT date_trunc('hour'::text, to_timestamp((flow_measurements.start_timestamp / 1000)::double precision)) AS start_timestamp,
10
+ flow_measurements.cube_id,
11
+ flow_measurements.sink_id,
12
+ flow_measurements.category,
13
+ count(flow_measurements.cube_id) AS count
14
+ FROM flow_measurements
15
+ WHERE flow_measurements.start_timestamp::double precision >= (1000::double precision * date_part('epoch'::text, CURRENT_DATE - '210 days'::interval))
16
+ GROUP BY (date_trunc('hour'::text, to_timestamp((flow_measurements.start_timestamp / 1000)::double precision))), flow_measurements.cube_id, flow_measurements.sink_id, flow_measurements.category
17
+ ), real_nrow AS (
18
+ SELECT base_table.start_timestamp,
19
+ base_table.cube_id,
20
+ base_table.sink_id,
21
+ sum(base_table.count) AS n_row,
22
+ sum(base_table.count) FILTER (WHERE base_table.category::text = 'pedestrian'::text) AS n_row_pedestrian
23
+ FROM base_table
24
+ GROUP BY base_table.start_timestamp, base_table.cube_id, base_table.sink_id
25
+ ), expected_nrow AS (
26
+ SELECT base_table.cube_id,
27
+ base_table.sink_id,
28
+ count(DISTINCT base_table.category) * 12 AS expected_nrow,
29
+ 12 AS expected_nrow_pedestrian
30
+ FROM base_table
31
+ WHERE base_table.start_timestamp >= (CURRENT_DATE - '30 days'::interval)
32
+ GROUP BY base_table.cube_id, base_table.sink_id
33
+ )
34
+ SELECT t."timestamp",
35
+ date_trunc('month'::text, t."timestamp")::date AS month,
36
+ t.cube_id,
37
+ t.sink_id,
38
+ concat(t.cube_id, ' - ', t.sink_id) AS cube_sink,
39
+ COALESCE(r.n_row, 0::bigint::numeric) AS n_row,
40
+ COALESCE(r.n_row_pedestrian, 0::bigint::numeric) AS n_row_pedestrian,
41
+ er.expected_nrow,
42
+ er.expected_nrow_pedestrian
43
+ FROM timeline_category t
44
+ LEFT JOIN real_nrow r ON t."timestamp" = r.start_timestamp AND t.cube_id = r.cube_id AND t.sink_id = r.sink_id
45
+ LEFT JOIN expected_nrow er ON t.cube_id = er.cube_id AND t.sink_id = er.sink_id;
@@ -0,0 +1,28 @@
1
+ CREATE OR REPLACE VIEW analytic.v_pedestrians_flow_quality
2
+ AS WITH timeline_category AS (
3
+ SELECT DISTINCT fs.cube_id,
4
+ fs.id AS sink_id,
5
+ timeline."timestamp"
6
+ FROM flow_sinks fs
7
+ LEFT JOIN ( SELECT generate_series(date_trunc('month'::text, CURRENT_DATE - '180 days'::interval)::timestamp with time zone, date_trunc('hour'::text, CURRENT_DATE::timestamp with time zone), '01:00:00'::interval) AS "timestamp") timeline ON true
8
+ ), real_nrow AS (
9
+ SELECT date_trunc('hour'::text, to_timestamp((flow_measurements.start_timestamp / 1000)::double precision)) AS start_timestamp,
10
+ flow_measurements.cube_id,
11
+ flow_measurements.sink_id,
12
+ count(*) AS n_row,
13
+ count(*) FILTER (WHERE flow_measurements.category::text = 'pedestrian'::text) AS n_row_pedestrian
14
+ FROM flow_measurements
15
+ WHERE flow_measurements.start_timestamp::double precision >= (1000::double precision * date_part('epoch'::text, CURRENT_DATE - '210 days'::interval))
16
+ GROUP BY (date_trunc('hour'::text, to_timestamp((flow_measurements.start_timestamp / 1000)::double precision))), flow_measurements.cube_id, flow_measurements.sink_id
17
+ )
18
+ SELECT t."timestamp",
19
+ date_trunc('month'::text, t."timestamp")::date AS month,
20
+ t.cube_id,
21
+ t.sink_id,
22
+ concat(t.cube_id, ' - ', t.sink_id) AS cube_sink,
23
+ COALESCE(r.n_row::numeric, 0::bigint::numeric) AS n_row,
24
+ COALESCE(r.n_row_pedestrian::numeric, 0::bigint::numeric) AS n_row_pedestrian,
25
+ 108::bigint AS expected_nrow, -- 9 categories * 12 measurements/hr
26
+ 12 AS expected_nrow_pedestrian -- 1 category * 12 measurements/hr
27
+ FROM timeline_category t
28
+ LEFT JOIN real_nrow r ON t."timestamp" = r.start_timestamp AND t.cube_id = r.cube_id AND t.sink_id = r.sink_id;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@golemio/flow",
3
- "version": "1.0.9",
3
+ "version": "1.0.10",
4
4
  "description": "Golemio Flow Module",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -27,8 +27,8 @@
27
27
  "devDependencies": {
28
28
  "@commitlint/cli": "^11.0.0",
29
29
  "@commitlint/config-conventional": "^11.0.0",
30
- "@golemio/cli": "1.3.0",
31
- "@golemio/core": "1.2.14",
30
+ "@golemio/cli": "1.3.1",
31
+ "@golemio/core": "1.2.16",
32
32
  "@golemio/db-common": "1.0.1",
33
33
  "@golemio/eslint-config": "^1.0.2",
34
34
  "@ovos-media/ts-transform-paths": "^1.7.18-1",
@@ -40,12 +40,12 @@
40
40
  "chai": "4.2.0",
41
41
  "chai-as-promised": "7.1.1",
42
42
  "cross-env": "^7.0.3",
43
- "eslint": "^7.17.0",
43
+ "eslint": "^8.1.1",
44
44
  "husky": "^4.3.7",
45
45
  "mocha": "^8.2.1",
46
46
  "npm-run-all": "^4.1.5",
47
47
  "nyc": "^15.1.0",
48
- "prettier": "^2.2.1",
48
+ "prettier": "^2.5.1",
49
49
  "pretty-quick": "^3.1.0",
50
50
  "rimraf": "^3.0.2",
51
51
  "sinon": "^9.2.3",