@golemio/public-transport 0.1.0-dev.2950675078 → 0.1.0-dev.2980129203

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', '20261023000000-drop-vp-data-retention-history-copy-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', '20261023000000-drop-vp-data-retention-history-copy-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,85 @@
1
+ -- Restore copying of expired trips, positions and stop times to *_history before deletion.
2
+ CREATE OR REPLACE PROCEDURE public_transport.vehiclepositions_data_retention(INOUT numberofrows integer, IN dataretentionminutes integer)
3
+ LANGUAGE plpgsql
4
+ SET search_path TO 'public_transport', 'public'
5
+ AS $$
6
+ declare
7
+ idsForDelete varchar(255)[];
8
+ begin
9
+ select array_agg(t.id) from vehiclepositions_trips t
10
+ left join vehiclepositions_positions p on
11
+ p.id = t.last_position_id
12
+ where
13
+ p.valid_to < (NOW() - (dataRetentionMinutes || ' minutes')::interval)
14
+ or (t.gtfs_trip_id is null and p.valid_to is null and p.updated_at < NOW() - (dataRetentionMinutes || ' minutes')::interval) -- entries with valid to is null
15
+ into idsForDelete;
16
+
17
+ INSERT INTO vehiclepositions_trips_history
18
+ select * from vehiclepositions_trips where id = ANY(idsForDelete)
19
+ on conflict do nothing;
20
+
21
+ INSERT INTO vehiclepositions_positions_history
22
+ select * from vehiclepositions_positions where trips_id = ANY(idsForDelete)
23
+ on conflict do nothing;
24
+
25
+ insert into vehiclepositions_stop_times_history (
26
+ feed_id,
27
+ rt_trip_id,
28
+ gtfs_date,
29
+ gtfs_trip_id,
30
+ gtfs_direction_id,
31
+ gtfs_route_short_name,
32
+ gtfs_route_type,
33
+ run_number,
34
+ vehicle_registration_number,
35
+ gtfs_stop_id,
36
+ gtfs_stop_sequence,
37
+ current_stop_arrival,
38
+ current_stop_departure,
39
+ current_stop_arr_delay,
40
+ current_stop_dep_delay,
41
+ created_at,
42
+ updated_at,
43
+ origin_route_name,
44
+ stop_name,
45
+ lat,
46
+ lng
47
+ )
48
+ select
49
+ rt_trip.feed_id,
50
+ rt_trip.id,
51
+ rt_trip.gtfs_date,
52
+ rt_trip.gtfs_trip_id,
53
+ rt_trip.gtfs_direction_id,
54
+ rt_trip.gtfs_route_short_name,
55
+ rt_trip.gtfs_route_type,
56
+ rt_trip.run_number,
57
+ rt_trip.vehicle_registration_number,
58
+ stop_time.stop_id,
59
+ stop_time.stop_sequence,
60
+ stop_time.stop_arrival,
61
+ stop_time.stop_departure,
62
+ stop_time.stop_arr_delay,
63
+ stop_time.stop_dep_delay,
64
+ now(),
65
+ now(),
66
+ rt_trip.origin_route_name,
67
+ stop_time.stop_name,
68
+ stop_time.lat,
69
+ stop_time.lng
70
+ from
71
+ vehiclepositions_trips rt_trip
72
+ join
73
+ v_vehiclepositions_past_stop_times stop_time on stop_time.rt_trip_id = rt_trip.id
74
+ where
75
+ rt_trip.id = ANY(idsForDelete)
76
+ on conflict do nothing;
77
+
78
+
79
+ delete from vehiclepositions_positions where trips_id = ANY(idsForDelete);
80
+ delete from vehiclepositions_trips where id = ANY(idsForDelete);
81
+ delete from vehiclepositions_cis_stops where rt_trip_id = ANY(idsForDelete);
82
+
83
+ select array_length(idsForDelete,1) into numberOfRows;
84
+ end;
85
+ $$;
@@ -0,0 +1,25 @@
1
+ -- History tables are no longer needed: expired trips, positions and stop times are deleted without being copied to *_history.
2
+ -- Trips that never received a position are expired too (previously they were never cleaned up).
3
+ CREATE OR REPLACE PROCEDURE vehiclepositions_data_retention(INOUT numberofrows integer, IN dataretentionminutes integer)
4
+ LANGUAGE plpgsql
5
+ SET search_path TO 'public_transport', 'public'
6
+ AS $$
7
+ declare
8
+ idsForDelete varchar(255)[];
9
+ begin
10
+ select array_agg(t.id) from vehiclepositions_trips t
11
+ left join vehiclepositions_positions p on
12
+ p.id = t.last_position_id
13
+ where
14
+ p.valid_to < (NOW() - (dataRetentionMinutes || ' minutes')::interval)
15
+ or (t.gtfs_trip_id is null and p.valid_to is null and p.updated_at < NOW() - (dataRetentionMinutes || ' minutes')::interval) -- entries with valid to is null
16
+ or (t.last_position_id is null and t.updated_at < NOW() - (dataRetentionMinutes || ' minutes')::interval) -- trips without any position
17
+ into idsForDelete;
18
+
19
+ delete from vehiclepositions_positions where trips_id = ANY(idsForDelete);
20
+ delete from vehiclepositions_trips where id = ANY(idsForDelete);
21
+ delete from vehiclepositions_cis_stops where rt_trip_id = ANY(idsForDelete);
22
+
23
+ select array_length(idsForDelete,1) into numberOfRows;
24
+ end;
25
+ $$;
@@ -145,7 +145,7 @@ export interface IEnrichedTripForPublicApi {
145
145
  agency_name_scheduled: string | null;
146
146
  agency_name_real: string | null;
147
147
  origin_route_name: string | null;
148
- gtfs_direction_id: number;
148
+ gtfs_direction_id: number | null;
149
149
  gtfs_shape_id: string | null;
150
150
  run_number: number | null;
151
151
  internal_run_number: number | null;
@@ -10,6 +10,8 @@ exports.PublicApiTripTransformation = void 0;
10
10
  const AbstractTransformation_1 = require("@golemio/core/dist/helpers/transformation/AbstractTransformation");
11
11
  const tsyringe_1 = require("@golemio/core/dist/shared/tsyringe");
12
12
  const VehicleIdGenerator_1 = require("../../gtfs-rt/helpers/VehicleIdGenerator");
13
+ /** GTFS `direction_id` is optional (e.g. idzk trains leave it empty); the public cache requires a number. */
14
+ const DEFAULT_DIRECTION_ID = 1;
13
15
  let PublicApiTripTransformation = class PublicApiTripTransformation extends AbstractTransformation_1.AbstractTransformation {
14
16
  constructor() {
15
17
  super(...arguments);
@@ -33,7 +35,7 @@ let PublicApiTripTransformation = class PublicApiTripTransformation extends Abst
33
35
  trip_number: data.cis_trip_number,
34
36
  run_number: data.run_number,
35
37
  trip_headsign: data.last_stop_headsign ?? data.gtfs_trip_headsign,
36
- direction_id: data.gtfs_direction_id,
38
+ direction_id: data.gtfs_direction_id ?? DEFAULT_DIRECTION_ID,
37
39
  shape_dist_traveled: data.shape_dist_traveled === null ? null : Number.parseFloat(data.shape_dist_traveled),
38
40
  last_stop_sequence: data.last_stop_sequence,
39
41
  origin_timestamp: data.origin_timestamp.toISOString(),
@@ -1 +1 @@
1
- {"version":3,"file":"PublicApiTripTransformation.js","sourceRoot":"","sources":["../../../../../../src/integration-engine/vehicle-positions/workers/vehicle-positions/transformations/PublicApiTripTransformation.ts"],"names":[],"mappings":";;;;;;;;;AACA,6GAA0G;AAC1G,iEAAgE;AAChE,iFAA8E;AAOvE,IAAM,2BAA2B,GAAjC,MAAM,2BAA4B,SAAQ,+CAAiD;IAA3F;;QACI,SAAI,GAAG,6BAA6B,CAAC;QAElC,sBAAiB,GAAG,CAAC,IAAiB,EAAgB,EAAE;YAC9D,OAAO;gBACH,YAAY,EAAE,IAAI,CAAC,YAAY;gBAC/B,UAAU,EAAE,IAAI,CAAC,eAAe;gBAChC,qBAAqB,EAAE,IAAI,CAAC,qBAAqB;gBACjD,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC;gBAChC,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC;gBAChC,OAAO,EAAE,IAAI,CAAC,OAAO;gBACrB,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,cAAc,EAAE,IAAI,CAAC,cAAc;gBACnC,UAAU,EAAE,uCAAkB,CAAC,gBAAgB,CAAC,IAAI,CAAC;gBACrD,IAAI,EAAE,IAAI,CAAC,SAAS;gBACpB,aAAa,EAAE;oBACX,wBAAwB,EAAE,IAAI,CAAC,qBAAqB;oBACpD,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;oBACzC,QAAQ,EAAE,IAAI,CAAC,aAAa;oBAC5B,WAAW,EAAE,IAAI,CAAC,eAAe;oBACjC,UAAU,EAAE,IAAI,CAAC,UAAU;oBAC3B,aAAa,EAAE,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAC,kBAAkB;oBACjE,YAAY,EAAE,IAAI,CAAC,iBAAiB;oBACpC,mBAAmB,EAAE,IAAI,CAAC,mBAAmB,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,mBAAmB,CAAC;oBAC3G,kBAAkB,EAAE,IAAI,CAAC,kBAAkB;oBAC3C,gBAAgB,EAAE,IAAI,CAAC,gBAAgB,CAAC,WAAW,EAAE;oBACrD,mBAAmB,EAAE,IAAI,CAAC,2BAA2B;oBACrD,QAAQ,EAAE,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,qBAAqB;iBAChE;aACJ,CAAC;QACN,CAAC,CAAC;IACN,CAAC;CAAA,CAAA;AA/BY,kEAA2B;sCAA3B,2BAA2B;IADvC,IAAA,qBAAU,GAAE;GACA,2BAA2B,CA+BvC"}
1
+ {"version":3,"file":"PublicApiTripTransformation.js","sourceRoot":"","sources":["../../../../../../src/integration-engine/vehicle-positions/workers/vehicle-positions/transformations/PublicApiTripTransformation.ts"],"names":[],"mappings":";;;;;;;;;AACA,6GAA0G;AAC1G,iEAAgE;AAChE,iFAA8E;AAM9E,6GAA6G;AAC7G,MAAM,oBAAoB,GAAG,CAAC,CAAC;AAGxB,IAAM,2BAA2B,GAAjC,MAAM,2BAA4B,SAAQ,+CAAiD;IAA3F;;QACI,SAAI,GAAG,6BAA6B,CAAC;QAElC,sBAAiB,GAAG,CAAC,IAAiB,EAAgB,EAAE;YAC9D,OAAO;gBACH,YAAY,EAAE,IAAI,CAAC,YAAY;gBAC/B,UAAU,EAAE,IAAI,CAAC,eAAe;gBAChC,qBAAqB,EAAE,IAAI,CAAC,qBAAqB;gBACjD,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC;gBAChC,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC;gBAChC,OAAO,EAAE,IAAI,CAAC,OAAO;gBACrB,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,cAAc,EAAE,IAAI,CAAC,cAAc;gBACnC,UAAU,EAAE,uCAAkB,CAAC,gBAAgB,CAAC,IAAI,CAAC;gBACrD,IAAI,EAAE,IAAI,CAAC,SAAS;gBACpB,aAAa,EAAE;oBACX,wBAAwB,EAAE,IAAI,CAAC,qBAAqB;oBACpD,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;oBACzC,QAAQ,EAAE,IAAI,CAAC,aAAa;oBAC5B,WAAW,EAAE,IAAI,CAAC,eAAe;oBACjC,UAAU,EAAE,IAAI,CAAC,UAAU;oBAC3B,aAAa,EAAE,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAC,kBAAkB;oBACjE,YAAY,EAAE,IAAI,CAAC,iBAAiB,IAAI,oBAAoB;oBAC5D,mBAAmB,EAAE,IAAI,CAAC,mBAAmB,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,mBAAmB,CAAC;oBAC3G,kBAAkB,EAAE,IAAI,CAAC,kBAAkB;oBAC3C,gBAAgB,EAAE,IAAI,CAAC,gBAAgB,CAAC,WAAW,EAAE;oBACrD,mBAAmB,EAAE,IAAI,CAAC,2BAA2B;oBACrD,QAAQ,EAAE,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,qBAAqB;iBAChE;aACJ,CAAC;QACN,CAAC,CAAC;IACN,CAAC;CAAA,CAAA;AA/BY,kEAA2B;sCAA3B,2BAA2B;IADvC,IAAA,qBAAU,GAAE;GACA,2BAA2B,CA+BvC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@golemio/public-transport",
3
- "version": "0.1.0-dev.2950675078",
3
+ "version": "0.1.0-dev.2980129203",
4
4
  "description": "Golemio PID Module",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",