@golemio/pid 2.2.4 → 2.2.5-dev.550932887

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.
Files changed (32) hide show
  1. package/db/example/pb/alerts.pb +0 -0
  2. package/dist/integration-engine/gtfsrt-alerts/GtfsRtAlertsController.d.ts +10 -0
  3. package/dist/integration-engine/gtfsrt-alerts/GtfsRtAlertsController.js +48 -0
  4. package/dist/integration-engine/gtfsrt-alerts/GtfsRtAlertsController.js.map +1 -0
  5. package/dist/integration-engine/gtfsrt-alerts/transformations/GtfsAlertCauseMapper.d.ts +2 -0
  6. package/dist/integration-engine/gtfsrt-alerts/transformations/GtfsAlertCauseMapper.js +55 -0
  7. package/dist/integration-engine/gtfsrt-alerts/transformations/GtfsAlertCauseMapper.js.map +1 -0
  8. package/dist/integration-engine/gtfsrt-alerts/transformations/GtfsEffectMapper.d.ts +6 -0
  9. package/dist/integration-engine/gtfsrt-alerts/transformations/GtfsEffectMapper.js +53 -0
  10. package/dist/integration-engine/gtfsrt-alerts/transformations/GtfsEffectMapper.js.map +1 -0
  11. package/dist/integration-engine/gtfsrt-alerts/transformations/GtfsRtAlertTransformation.d.ts +14 -0
  12. package/dist/integration-engine/gtfsrt-alerts/transformations/GtfsRtAlertTransformation.js +100 -0
  13. package/dist/integration-engine/gtfsrt-alerts/transformations/GtfsRtAlertTransformation.js.map +1 -0
  14. package/dist/integration-engine/ropid-vymi/models/RopidVYMIEventsModel.d.ts +2 -0
  15. package/dist/integration-engine/ropid-vymi/models/RopidVYMIEventsModel.js +26 -0
  16. package/dist/integration-engine/ropid-vymi/models/RopidVYMIEventsModel.js.map +1 -1
  17. package/dist/integration-engine/ropid-vymi/models/RopidVYMIEventsRoutesModel.d.ts +2 -0
  18. package/dist/integration-engine/ropid-vymi/models/RopidVYMIEventsRoutesModel.js +19 -0
  19. package/dist/integration-engine/ropid-vymi/models/RopidVYMIEventsRoutesModel.js.map +1 -1
  20. package/dist/integration-engine/vehicle-positions/VehiclePositionsUtils.d.ts +4 -3
  21. package/dist/integration-engine/vehicle-positions/VehiclePositionsUtils.js +23 -3
  22. package/dist/integration-engine/vehicle-positions/VehiclePositionsUtils.js.map +1 -1
  23. package/dist/integration-engine/vehicle-positions/VehiclePositionsWorker.d.ts +1 -0
  24. package/dist/integration-engine/vehicle-positions/VehiclePositionsWorker.js +10 -4
  25. package/dist/integration-engine/vehicle-positions/VehiclePositionsWorker.js.map +1 -1
  26. package/dist/output-gateway/vehicle-positions/VehiclePositionsRouter.d.ts +2 -0
  27. package/dist/output-gateway/vehicle-positions/VehiclePositionsRouter.js +34 -9
  28. package/dist/output-gateway/vehicle-positions/VehiclePositionsRouter.js.map +1 -1
  29. package/dist/schema-definitions/gtfsrt-alerts/GtfsRtAlert.d.ts +56 -0
  30. package/dist/schema-definitions/gtfsrt-alerts/GtfsRtAlert.js +29 -0
  31. package/dist/schema-definitions/gtfsrt-alerts/GtfsRtAlert.js.map +1 -0
  32. package/package.json +81 -81
File without changes
@@ -0,0 +1,10 @@
1
+ import { RedisModel } from "@golemio/core/dist/integration-engine/models";
2
+ import { RopidVYMIEventsModel } from "../ropid-vymi";
3
+ import { GtfsRtAlertTransformation } from "./transformations/GtfsRtAlertTransformation";
4
+ export declare class GtfsRtAlertsController {
5
+ private gtfsRtModel;
6
+ private ropidVYMIEventsModel;
7
+ private gtfsAlertTransformation;
8
+ constructor(gtfsRtModel: RedisModel, ropidVYMIEventsModel: RopidVYMIEventsModel, gtfsAlertTransformation: GtfsRtAlertTransformation);
9
+ generateGtfsRtAlerts(currentDate: Date): Promise<void>;
10
+ }
@@ -0,0 +1,48 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.GtfsRtAlertsController = void 0;
16
+ const gtfs_realtime_bindings_1 = __importDefault(require("gtfs-realtime-bindings"));
17
+ const gtfsRealtime = gtfs_realtime_bindings_1.default.transit_realtime;
18
+ class GtfsRtAlertsController {
19
+ constructor(gtfsRtModel, ropidVYMIEventsModel, gtfsAlertTransformation) {
20
+ this.gtfsRtModel = gtfsRtModel;
21
+ this.ropidVYMIEventsModel = ropidVYMIEventsModel;
22
+ this.gtfsAlertTransformation = gtfsAlertTransformation;
23
+ }
24
+ generateGtfsRtAlerts(currentDate) {
25
+ return __awaiter(this, void 0, void 0, function* () {
26
+ const alertsMessage = gtfsRealtime.FeedMessage.create();
27
+ const header = {
28
+ gtfsRealtimeVersion: "2.0",
29
+ incrementality: "FULL_DATASET",
30
+ timestamp: Math.round(new Date().valueOf() / 1000),
31
+ };
32
+ alertsMessage.header = gtfsRealtime.FeedHeader.fromObject(header);
33
+ const alertEntities = yield this.ropidVYMIEventsModel.getCurrentAlerts(currentDate);
34
+ const transformedAlerts = yield this.gtfsAlertTransformation.transform(alertEntities);
35
+ for (const transformedEntity of transformedAlerts) {
36
+ const feedEntity = gtfsRealtime.FeedEntity.fromObject(transformedEntity);
37
+ alertsMessage.entity.push(feedEntity);
38
+ }
39
+ if (gtfsRealtime.FeedMessage.verify(alertsMessage) === null) {
40
+ const buffer = gtfsRealtime.FeedMessage.encode(alertsMessage).finish();
41
+ yield this.gtfsRtModel.hset("alerts.pb", buffer.toString("binary"));
42
+ yield this.gtfsRtModel.hset("alerts.json", JSON.stringify(alertsMessage));
43
+ }
44
+ });
45
+ }
46
+ }
47
+ exports.GtfsRtAlertsController = GtfsRtAlertsController;
48
+ //# sourceMappingURL=GtfsRtAlertsController.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GtfsRtAlertsController.js","sourceRoot":"","sources":["../../../src/integration-engine/gtfsrt-alerts/GtfsRtAlertsController.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,oFAA0D;AAK1D,MAAM,YAAY,GAAG,gCAAoB,CAAC,gBAAgB,CAAC;AAE3D,MAAa,sBAAsB;IAK/B,YACI,WAAuB,EACvB,oBAA0C,EAC1C,uBAAkD;QAElD,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,oBAAoB,GAAG,oBAAoB,CAAC;QACjD,IAAI,CAAC,uBAAuB,GAAG,uBAAuB,CAAC;IAC3D,CAAC;IAEY,oBAAoB,CAAC,WAAiB;;YAC/C,MAAM,aAAa,GAAG,YAAY,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC;YACxD,MAAM,MAAM,GAAG;gBACX,mBAAmB,EAAE,KAAK;gBAC1B,cAAc,EAAE,cAAc;gBAC9B,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC;aACrD,CAAC;YACF,aAAa,CAAC,MAAM,GAAG,YAAY,CAAC,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;YAElE,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC;YACpF,MAAM,iBAAiB,GAAG,MAAM,IAAI,CAAC,uBAAuB,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;YAEtF,KAAK,MAAM,iBAAiB,IAAI,iBAAiB,EAAE;gBAC/C,MAAM,UAAU,GAAG,YAAY,CAAC,UAAU,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC;gBACzE,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;aACzC;YAED,IAAI,YAAY,CAAC,WAAW,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,IAAI,EAAE;gBACzD,MAAM,MAAM,GAAW,YAAY,CAAC,WAAW,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,MAAM,EAAE,CAAC;gBAE/E,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;gBACpE,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,CAAC;aAC7E;QACL,CAAC;KAAA;CACJ;AAvCD,wDAuCC"}
@@ -0,0 +1,2 @@
1
+ import { GtfsCause } from "../../../schema-definitions/gtfsrt-alerts/GtfsRtAlert";
2
+ export declare function getGtfsCause(causeText: string): GtfsCause;
@@ -0,0 +1,55 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getGtfsCause = void 0;
4
+ const GtfsRtAlert_1 = require("../../../schema-definitions/gtfsrt-alerts/GtfsRtAlert");
5
+ function getGtfsCause(causeText) {
6
+ for (const alertKey in GtfsAlertCauseMap) {
7
+ const alertCause = GtfsAlertCauseMap[alertKey];
8
+ for (const causeStringKey in alertCause.strings) {
9
+ if (causeText.includes(alertCause.strings[causeStringKey])) {
10
+ return alertCause.cause;
11
+ }
12
+ }
13
+ }
14
+ return GtfsRtAlert_1.GtfsCause.UNKNOWN_CAUSE;
15
+ }
16
+ exports.getGtfsCause = getGtfsCause;
17
+ const GtfsAlertCauseMap = [
18
+ {
19
+ strings: ["nehoda", "nehody", "překážka", "srážka", "střet", "srážky"],
20
+ cause: GtfsRtAlert_1.GtfsCause.ACCIDENT,
21
+ },
22
+ {
23
+ strings: ["personální", "stávka"],
24
+ cause: GtfsRtAlert_1.GtfsCause.STRIKE,
25
+ },
26
+ {
27
+ strings: ["porucha", "závada", "výpadek", "provozni", "kolejnice"],
28
+ cause: GtfsRtAlert_1.GtfsCause.TECHNICAL_PROBLEM,
29
+ },
30
+ {
31
+ strings: ["uzavřená", "havárie", "oprava", "omezení", "uzavírka", "uzavírky", "práce"],
32
+ cause: GtfsRtAlert_1.GtfsCause.CONSTRUCTION,
33
+ },
34
+ {
35
+ strings: ["sjízdné", "sjízdnost", "nesjízdná", "povětrnostní", "strom", "klimatické", "vítr"],
36
+ cause: GtfsRtAlert_1.GtfsCause.WEATHER,
37
+ },
38
+ {
39
+ strings: ["demonstrace", "manifestace"],
40
+ cause: GtfsRtAlert_1.GtfsCause.DEMONSTRATION,
41
+ },
42
+ {
43
+ strings: ["uzávěra", "pčr", "policie"],
44
+ cause: GtfsRtAlert_1.GtfsCause.POLICE_ACTIVITY,
45
+ },
46
+ {
47
+ strings: ["zásah"],
48
+ cause: GtfsRtAlert_1.GtfsCause.MEDICAL_EMERGENCY,
49
+ },
50
+ {
51
+ strings: ["silná"],
52
+ cause: GtfsRtAlert_1.GtfsCause.OTHER_CAUSE,
53
+ },
54
+ ];
55
+ //# sourceMappingURL=GtfsAlertCauseMapper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GtfsAlertCauseMapper.js","sourceRoot":"","sources":["../../../../src/integration-engine/gtfsrt-alerts/transformations/GtfsAlertCauseMapper.ts"],"names":[],"mappings":";;;AAAA,uFAA2D;AAE3D,SAAgB,YAAY,CAAC,SAAiB;IAC1C,KAAK,MAAM,QAAQ,IAAI,iBAAiB,EAAE;QACtC,MAAM,UAAU,GAA0B,iBAAiB,CAAC,QAAQ,CAAC,CAAC;QACtE,KAAK,MAAM,cAAc,IAAI,UAAU,CAAC,OAAO,EAAE;YAC7C,IAAI,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,EAAE;gBACxD,OAAO,UAAU,CAAC,KAAK,CAAC;aAC3B;SACJ;KACJ;IAED,OAAO,uBAAS,CAAC,aAAa,CAAC;AACnC,CAAC;AAXD,oCAWC;AAOD,MAAM,iBAAiB,GAA4B;IAC/C;QACI,OAAO,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,CAAC;QACtE,KAAK,EAAE,uBAAS,CAAC,QAAQ;KAC5B;IACD;QACI,OAAO,EAAE,CAAC,YAAY,EAAE,QAAQ,CAAC;QACjC,KAAK,EAAE,uBAAS,CAAC,MAAM;KAC1B;IACD;QACI,OAAO,EAAE,CAAC,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,WAAW,CAAC;QAClE,KAAK,EAAE,uBAAS,CAAC,iBAAiB;KACrC;IACD;QACI,OAAO,EAAE,CAAC,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,OAAO,CAAC;QACtF,KAAK,EAAE,uBAAS,CAAC,YAAY;KAChC;IACD;QACI,OAAO,EAAE,CAAC,SAAS,EAAE,WAAW,EAAE,WAAW,EAAE,cAAc,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,CAAC;QAC7F,KAAK,EAAE,uBAAS,CAAC,OAAO;KAC3B;IACD;QACI,OAAO,EAAE,CAAC,aAAa,EAAE,aAAa,CAAC;QACvC,KAAK,EAAE,uBAAS,CAAC,aAAa;KACjC;IACD;QACI,OAAO,EAAE,CAAC,SAAS,EAAE,KAAK,EAAE,SAAS,CAAC;QACtC,KAAK,EAAE,uBAAS,CAAC,eAAe;KACnC;IACD;QACI,OAAO,EAAE,CAAC,OAAO,CAAC;QAClB,KAAK,EAAE,uBAAS,CAAC,iBAAiB;KACrC;IACD;QACI,OAAO,EAAE,CAAC,OAAO,CAAC;QAClB,KAAK,EAAE,uBAAS,CAAC,WAAW;KAC/B;CACJ,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { GtfsEffect } from "../../../schema-definitions/gtfsrt-alerts/GtfsRtAlert";
2
+ /**
3
+ * Mapuje eventType na dopravní efekt. EventType může být i součet několika čísel RopidVyMiEventType.
4
+ * @param eventType number
5
+ */
6
+ export declare function getGtfsEffectByEventType(eventType: number): GtfsEffect;
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getGtfsEffectByEventType = void 0;
4
+ const GtfsRtAlert_1 = require("../../../schema-definitions/gtfsrt-alerts/GtfsRtAlert");
5
+ const RopidVyMiEventType = {
6
+ EFF_PROVOZ_ZASTAVEN: 1 << 0,
7
+ EFF_PROVOZ_OMEZEN: 1 << 2,
8
+ EFF_PROVOZ_OBNOVEN: 1 << 3,
9
+ EFF_NEODJETI_SPOJE: 1 << 7,
10
+ EFF_ZPOZDENI_SPOJE: 1 << 11,
11
+ EFF_ZPOZDENI_SPOJU: 1 << 12,
12
+ EFF_STANICE_UZAVRENA: 1 << 13,
13
+ EFF_PRISTUP_OMEZEN: 1 << 14,
14
+ EFF_POSILENI_SPOJU: 1 << 17,
15
+ EFF_ROZVAZANI_PRESTUP: 1 << 18,
16
+ EFF_OSTATNI: 1 << 19,
17
+ EFF_ODKLON: 1 << 20,
18
+ EFF_NEOBSLOUZENI_ZASTAVKY: 1 << 21,
19
+ EFF_NAHRADNI_DOPRAVA: 1 << 23,
20
+ };
21
+ /**
22
+ * Mapuje eventType na dopravní efekt. EventType může být i součet několika čísel RopidVyMiEventType.
23
+ * @param eventType number
24
+ */
25
+ function getGtfsEffectByEventType(eventType) {
26
+ if (eventType & RopidVyMiEventType.EFF_ODKLON || eventType & RopidVyMiEventType.EFF_NEOBSLOUZENI_ZASTAVKY) {
27
+ return GtfsRtAlert_1.GtfsEffect.DETOUR;
28
+ }
29
+ if (eventType & RopidVyMiEventType.EFF_PROVOZ_ZASTAVEN ||
30
+ eventType & RopidVyMiEventType.EFF_PROVOZ_OMEZEN ||
31
+ eventType & RopidVyMiEventType.EFF_ZPOZDENI_SPOJE ||
32
+ eventType & RopidVyMiEventType.EFF_NEODJETI_SPOJE ||
33
+ eventType & RopidVyMiEventType.EFF_ZPOZDENI_SPOJU) {
34
+ return GtfsRtAlert_1.GtfsEffect.REDUCED_SERVICE;
35
+ }
36
+ if (eventType & RopidVyMiEventType.EFF_ROZVAZANI_PRESTUP || eventType & RopidVyMiEventType.EFF_NAHRADNI_DOPRAVA) {
37
+ return GtfsRtAlert_1.GtfsEffect.MODIFIED_SERVICE;
38
+ }
39
+ if (eventType & RopidVyMiEventType.EFF_POSILENI_SPOJU) {
40
+ return GtfsRtAlert_1.GtfsEffect.ADDITIONAL_SERVICE;
41
+ }
42
+ if (eventType & RopidVyMiEventType.EFF_OSTATNI ||
43
+ eventType & RopidVyMiEventType.EFF_PROVOZ_OBNOVEN ||
44
+ eventType & RopidVyMiEventType.EFF_PRISTUP_OMEZEN) {
45
+ return GtfsRtAlert_1.GtfsEffect.OTHER_EFFECT;
46
+ }
47
+ if (eventType & RopidVyMiEventType.EFF_STANICE_UZAVRENA) {
48
+ return GtfsRtAlert_1.GtfsEffect.NO_SERVICE;
49
+ }
50
+ return GtfsRtAlert_1.GtfsEffect.UNKNOWN_EFFECT;
51
+ }
52
+ exports.getGtfsEffectByEventType = getGtfsEffectByEventType;
53
+ //# sourceMappingURL=GtfsEffectMapper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GtfsEffectMapper.js","sourceRoot":"","sources":["../../../../src/integration-engine/gtfsrt-alerts/transformations/GtfsEffectMapper.ts"],"names":[],"mappings":";;;AAAA,uFAA4D;AAE5D,MAAM,kBAAkB,GAAG;IACvB,mBAAmB,EAAE,CAAC,IAAI,CAAC;IAC3B,iBAAiB,EAAE,CAAC,IAAI,CAAC;IACzB,kBAAkB,EAAE,CAAC,IAAI,CAAC;IAC1B,kBAAkB,EAAE,CAAC,IAAI,CAAC;IAC1B,kBAAkB,EAAE,CAAC,IAAI,EAAE;IAC3B,kBAAkB,EAAE,CAAC,IAAI,EAAE;IAC3B,oBAAoB,EAAE,CAAC,IAAI,EAAE;IAC7B,kBAAkB,EAAE,CAAC,IAAI,EAAE;IAC3B,kBAAkB,EAAE,CAAC,IAAI,EAAE;IAC3B,qBAAqB,EAAE,CAAC,IAAI,EAAE;IAC9B,WAAW,EAAE,CAAC,IAAI,EAAE;IACpB,UAAU,EAAE,CAAC,IAAI,EAAE;IACnB,yBAAyB,EAAE,CAAC,IAAI,EAAE;IAClC,oBAAoB,EAAE,CAAC,IAAI,EAAE;CAChC,CAAC;AAEF;;;GAGG;AACH,SAAgB,wBAAwB,CAAC,SAAiB;IACtD,IAAI,SAAS,GAAG,kBAAkB,CAAC,UAAU,IAAI,SAAS,GAAG,kBAAkB,CAAC,yBAAyB,EAAE;QACvG,OAAO,wBAAU,CAAC,MAAM,CAAC;KAC5B;IAED,IACI,SAAS,GAAG,kBAAkB,CAAC,mBAAmB;QAClD,SAAS,GAAG,kBAAkB,CAAC,iBAAiB;QAChD,SAAS,GAAG,kBAAkB,CAAC,kBAAkB;QACjD,SAAS,GAAG,kBAAkB,CAAC,kBAAkB;QACjD,SAAS,GAAG,kBAAkB,CAAC,kBAAkB,EACnD;QACE,OAAO,wBAAU,CAAC,eAAe,CAAC;KACrC;IACD,IAAI,SAAS,GAAG,kBAAkB,CAAC,qBAAqB,IAAI,SAAS,GAAG,kBAAkB,CAAC,oBAAoB,EAAE;QAC7G,OAAO,wBAAU,CAAC,gBAAgB,CAAC;KACtC;IAED,IAAI,SAAS,GAAG,kBAAkB,CAAC,kBAAkB,EAAE;QACnD,OAAO,wBAAU,CAAC,kBAAkB,CAAC;KACxC;IAED,IACI,SAAS,GAAG,kBAAkB,CAAC,WAAW;QAC1C,SAAS,GAAG,kBAAkB,CAAC,kBAAkB;QACjD,SAAS,GAAG,kBAAkB,CAAC,kBAAkB,EACnD;QACE,OAAO,wBAAU,CAAC,YAAY,CAAC;KAClC;IAED,IAAI,SAAS,GAAG,kBAAkB,CAAC,oBAAoB,EAAE;QACrD,OAAO,wBAAU,CAAC,UAAU,CAAC;KAChC;IAED,OAAO,wBAAU,CAAC,cAAc,CAAC;AACrC,CAAC;AAnCD,4DAmCC"}
@@ -0,0 +1,14 @@
1
+ import { BaseTransformation, ITransformation } from "@golemio/core/dist/integration-engine/transformations";
2
+ import { IRopidVYMIEventOutput } from "../../../schema-definitions/ropid-vymi";
3
+ import { GtfsRtAlert, GtfsTimeRange, InformedEntityRoute } from "../../../schema-definitions/gtfsrt-alerts/GtfsRtAlert";
4
+ import { RopidVYMIEventsRoutesModel } from "../../ropid-vymi";
5
+ export declare class GtfsRtAlertTransformation extends BaseTransformation implements ITransformation {
6
+ name: string;
7
+ private eventsRoutesModel;
8
+ constructor(eventsRoutesModel: RopidVYMIEventsRoutesModel);
9
+ transform: (alertEntities: IRopidVYMIEventOutput[]) => Promise<GtfsRtAlert[]>;
10
+ transformElement: (alertEntity: IRopidVYMIEventOutput) => Promise<GtfsRtAlert>;
11
+ getDescription: (alertEntity: IRopidVYMIEventOutput) => string;
12
+ getActivePeriod: (alertEntity: IRopidVYMIEventOutput) => GtfsTimeRange;
13
+ getAffectedRoutes(alertEntity: IRopidVYMIEventOutput): Promise<InformedEntityRoute[]>;
14
+ }
@@ -0,0 +1,100 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.GtfsRtAlertTransformation = void 0;
13
+ const transformations_1 = require("@golemio/core/dist/integration-engine/transformations");
14
+ const jsdom_1 = require("jsdom");
15
+ const GtfsAlertCauseMapper_1 = require("./GtfsAlertCauseMapper");
16
+ const GtfsEffectMapper_1 = require("./GtfsEffectMapper");
17
+ class GtfsRtAlertTransformation extends transformations_1.BaseTransformation {
18
+ constructor(eventsRoutesModel) {
19
+ super();
20
+ this.transform = (alertEntities) => __awaiter(this, void 0, void 0, function* () {
21
+ const transformedEntities = [];
22
+ for (const alertEntity of alertEntities) {
23
+ transformedEntities.push(yield this.transformElement(alertEntity));
24
+ }
25
+ return transformedEntities;
26
+ });
27
+ this.transformElement = (alertEntity) => __awaiter(this, void 0, void 0, function* () {
28
+ var _a, _b;
29
+ return {
30
+ id: `alert-${alertEntity.vymi_id}-${alertEntity.vymi_id_dtb}`,
31
+ alert: {
32
+ activePeriod: [this.getActivePeriod(alertEntity)],
33
+ informedEntity: yield this.getAffectedRoutes(alertEntity),
34
+ cause: (0, GtfsAlertCauseMapper_1.getGtfsCause)((_a = alertEntity.cause) !== null && _a !== void 0 ? _a : ""),
35
+ effect: (0, GtfsEffectMapper_1.getGtfsEffectByEventType)(Number((_b = alertEntity.event_type) !== null && _b !== void 0 ? _b : 0)),
36
+ url: {
37
+ translation: [
38
+ {
39
+ text: `https://pid.cz/mimoradnost/?id=${alertEntity.vymi_id}-${alertEntity.vymi_id_dtb}`,
40
+ language: "cs",
41
+ },
42
+ ],
43
+ },
44
+ headerText: {
45
+ translation: [
46
+ {
47
+ text: alertEntity.title,
48
+ language: "cs",
49
+ },
50
+ ],
51
+ },
52
+ descriptionText: {
53
+ translation: [
54
+ {
55
+ text: this.getDescription(alertEntity),
56
+ language: "cs",
57
+ },
58
+ ],
59
+ },
60
+ },
61
+ };
62
+ });
63
+ this.getDescription = (alertEntity) => {
64
+ const description = [
65
+ jsdom_1.JSDOM.fragment(alertEntity.description).textContent || "",
66
+ jsdom_1.JSDOM.fragment(alertEntity.dpp_action).textContent || "",
67
+ jsdom_1.JSDOM.fragment(alertEntity.ropid_action).textContent || "",
68
+ ];
69
+ return description.join(" ").replaceAll("\n", " ").trim();
70
+ };
71
+ this.getActivePeriod = (alertEntity) => {
72
+ if (!alertEntity.expiration_date) {
73
+ return {
74
+ start: new Date(alertEntity.time_from).getTime() / 1000,
75
+ };
76
+ }
77
+ return {
78
+ start: new Date(alertEntity.time_from).getTime() / 1000,
79
+ end: new Date(alertEntity.expiration_date).getTime() / 1000,
80
+ };
81
+ };
82
+ this.name = "GtfsRtAlertTransformation";
83
+ this.eventsRoutesModel = eventsRoutesModel;
84
+ }
85
+ getAffectedRoutes(alertEntity) {
86
+ var _a;
87
+ return __awaiter(this, void 0, void 0, function* () {
88
+ const affectedRotues = yield this.eventsRoutesModel.findByEventId(alertEntity.vymi_id);
89
+ const routeNames = [];
90
+ for (const route of affectedRotues) {
91
+ routeNames.push({
92
+ routeId: (_a = route.gtfs_route_id) !== null && _a !== void 0 ? _a : route.name,
93
+ });
94
+ }
95
+ return routeNames;
96
+ });
97
+ }
98
+ }
99
+ exports.GtfsRtAlertTransformation = GtfsRtAlertTransformation;
100
+ //# sourceMappingURL=GtfsRtAlertTransformation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GtfsRtAlertTransformation.js","sourceRoot":"","sources":["../../../../src/integration-engine/gtfsrt-alerts/transformations/GtfsRtAlertTransformation.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,9 @@
1
1
  import { IModel, PostgresModel } from "@golemio/core/dist/integration-engine/models";
2
+ import { IRopidVYMIEventOutput } from "../../../schema-definitions/ropid-vymi";
2
3
  /**
3
4
  * Custom Postgres model for Ropid VYMI Events
4
5
  */
5
6
  export declare class RopidVYMIEventsModel extends PostgresModel implements IModel {
6
7
  constructor();
8
+ getCurrentAlerts(currentDate: Date): Promise<IRopidVYMIEventOutput[]>;
7
9
  }
@@ -1,9 +1,19 @@
1
1
  "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
2
11
  Object.defineProperty(exports, "__esModule", { value: true });
3
12
  exports.RopidVYMIEventsModel = void 0;
4
13
  const golemio_validator_1 = require("@golemio/core/dist/shared/golemio-validator");
5
14
  const models_1 = require("@golemio/core/dist/integration-engine/models");
6
15
  const ropid_vymi_1 = require("../../../schema-definitions/ropid-vymi");
16
+ const sequelize_1 = require("@golemio/core/dist/shared/sequelize");
7
17
  /**
8
18
  * Custom Postgres model for Ropid VYMI Events
9
19
  */
@@ -17,6 +27,22 @@ class RopidVYMIEventsModel extends models_1.PostgresModel {
17
27
  savingType: "insertOnly",
18
28
  }, new golemio_validator_1.JSONSchemaValidator(ropid_vymi_1.RopidVYMI.events.name + "ModelValidator", ropid_vymi_1.RopidVYMI.events.outputJsonSchema));
19
29
  }
30
+ getCurrentAlerts(currentDate) {
31
+ return __awaiter(this, void 0, void 0, function* () {
32
+ return yield this.find({
33
+ where: {
34
+ record_type: 1,
35
+ expiration_date: {
36
+ [sequelize_1.Op.or]: {
37
+ [sequelize_1.Op.eq]: null,
38
+ [sequelize_1.Op.gte]: currentDate,
39
+ },
40
+ },
41
+ },
42
+ raw: true,
43
+ });
44
+ });
45
+ }
20
46
  }
21
47
  exports.RopidVYMIEventsModel = RopidVYMIEventsModel;
22
48
  //# sourceMappingURL=RopidVYMIEventsModel.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"RopidVYMIEventsModel.js","sourceRoot":"","sources":["../../../../src/integration-engine/ropid-vymi/models/RopidVYMIEventsModel.ts"],"names":[],"mappings":";;;AAAA,mFAAkF;AAClF,yEAAqF;AACrF,uEAA4C;AAE5C;;GAEG;AACH,MAAa,oBAAqB,SAAQ,sBAAa;IACnD;QACI,KAAK,CACD,sBAAS,CAAC,MAAM,CAAC,IAAI,GAAG,OAAO,EAC/B;YACI,WAAW,EAAE,IAAI;YACjB,yBAAyB,EAAE,sBAAS,CAAC,MAAM,CAAC,yBAAyB;YACrE,WAAW,EAAE,sBAAS,CAAC,MAAM,CAAC,WAAW;YACzC,QAAQ,EAAE,sBAAS,CAAC,QAAQ;YAC5B,UAAU,EAAE,YAAY;SAC3B,EACD,IAAI,uCAAmB,CAAC,sBAAS,CAAC,MAAM,CAAC,IAAI,GAAG,gBAAgB,EAAE,sBAAS,CAAC,MAAM,CAAC,gBAAgB,CAAC,CACvG,CAAC;IACN,CAAC;CACJ;AAdD,oDAcC"}
1
+ {"version":3,"file":"RopidVYMIEventsModel.js","sourceRoot":"","sources":["../../../../src/integration-engine/ropid-vymi/models/RopidVYMIEventsModel.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,mFAAkF;AAClF,yEAAqF;AACrF,uEAAmE;AACnE,mEAAyD;AAEzD;;GAEG;AACH,MAAa,oBAAqB,SAAQ,sBAAa;IACnD;QACI,KAAK,CACD,sBAAS,CAAC,MAAM,CAAC,IAAI,GAAG,OAAO,EAC/B;YACI,WAAW,EAAE,IAAI;YACjB,yBAAyB,EAAE,sBAAS,CAAC,MAAM,CAAC,yBAAyB;YACrE,WAAW,EAAE,sBAAS,CAAC,MAAM,CAAC,WAAW;YACzC,QAAQ,EAAE,sBAAS,CAAC,QAAQ;YAC5B,UAAU,EAAE,YAAY;SAC3B,EACD,IAAI,uCAAmB,CAAC,sBAAS,CAAC,MAAM,CAAC,IAAI,GAAG,gBAAgB,EAAE,sBAAS,CAAC,MAAM,CAAC,gBAAgB,CAAC,CACvG,CAAC;IACN,CAAC;IAEY,gBAAgB,CAAC,WAAiB;;YAC3C,OAAO,MAAM,IAAI,CAAC,IAAI,CAAC;gBACnB,KAAK,EAAE;oBACH,WAAW,EAAE,CAAC;oBACd,eAAe,EAAE;wBACb,CAAC,cAAE,CAAC,EAAE,CAAC,EAAE;4BACL,CAAC,cAAE,CAAC,EAAE,CAAC,EAAE,IAAI;4BACb,CAAC,cAAE,CAAC,GAAG,CAAC,EAAE,WAAW;yBACxB;qBACJ;iBACJ;gBACD,GAAG,EAAE,IAAI;aACZ,CAAC,CAAC;QACP,CAAC;KAAA;CACJ;AA7BD,oDA6BC"}
@@ -1,7 +1,9 @@
1
1
  import { IModel, PostgresModel } from "@golemio/core/dist/integration-engine/models";
2
+ import { IRopidVYMIEventRouteOutput } from "../../../schema-definitions/ropid-vymi";
2
3
  /**
3
4
  * Custom Postgres model for Ropid VYMI Events Routes
4
5
  */
5
6
  export declare class RopidVYMIEventsRoutesModel extends PostgresModel implements IModel {
6
7
  constructor();
8
+ findByEventId(eventId: number): Promise<IRopidVYMIEventRouteOutput[]>;
7
9
  }
@@ -1,4 +1,13 @@
1
1
  "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
2
11
  Object.defineProperty(exports, "__esModule", { value: true });
3
12
  exports.RopidVYMIEventsRoutesModel = void 0;
4
13
  const golemio_validator_1 = require("@golemio/core/dist/shared/golemio-validator");
@@ -17,6 +26,16 @@ class RopidVYMIEventsRoutesModel extends models_1.PostgresModel {
17
26
  savingType: "insertOnly",
18
27
  }, new golemio_validator_1.JSONSchemaValidator(ropid_vymi_1.RopidVYMI.eventsRoutes.name + "ModelValidator", ropid_vymi_1.RopidVYMI.eventsRoutes.outputJsonSchema));
19
28
  }
29
+ findByEventId(eventId) {
30
+ return __awaiter(this, void 0, void 0, function* () {
31
+ return yield this.find({
32
+ where: {
33
+ event_id: eventId,
34
+ },
35
+ raw: true,
36
+ });
37
+ });
38
+ }
20
39
  }
21
40
  exports.RopidVYMIEventsRoutesModel = RopidVYMIEventsRoutesModel;
22
41
  //# sourceMappingURL=RopidVYMIEventsRoutesModel.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"RopidVYMIEventsRoutesModel.js","sourceRoot":"","sources":["../../../../src/integration-engine/ropid-vymi/models/RopidVYMIEventsRoutesModel.ts"],"names":[],"mappings":";;;AAAA,mFAAkF;AAClF,yEAAqF;AACrF,uEAA4C;AAE5C;;GAEG;AACH,MAAa,0BAA2B,SAAQ,sBAAa;IACzD;QACI,KAAK,CACD,sBAAS,CAAC,YAAY,CAAC,IAAI,GAAG,OAAO,EACrC;YACI,WAAW,EAAE,IAAI;YACjB,yBAAyB,EAAE,sBAAS,CAAC,YAAY,CAAC,yBAAyB;YAC3E,WAAW,EAAE,sBAAS,CAAC,YAAY,CAAC,WAAW;YAC/C,QAAQ,EAAE,sBAAS,CAAC,QAAQ;YAC5B,UAAU,EAAE,YAAY;SAC3B,EACD,IAAI,uCAAmB,CAAC,sBAAS,CAAC,YAAY,CAAC,IAAI,GAAG,gBAAgB,EAAE,sBAAS,CAAC,YAAY,CAAC,gBAAgB,CAAC,CACnH,CAAC;IACN,CAAC;CACJ;AAdD,gEAcC"}
1
+ {"version":3,"file":"RopidVYMIEventsRoutesModel.js","sourceRoot":"","sources":["../../../../src/integration-engine/ropid-vymi/models/RopidVYMIEventsRoutesModel.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,mFAAkF;AAClF,yEAAqF;AACrF,uEAAwE;AAExE;;GAEG;AACH,MAAa,0BAA2B,SAAQ,sBAAa;IACzD;QACI,KAAK,CACD,sBAAS,CAAC,YAAY,CAAC,IAAI,GAAG,OAAO,EACrC;YACI,WAAW,EAAE,IAAI;YACjB,yBAAyB,EAAE,sBAAS,CAAC,YAAY,CAAC,yBAAyB;YAC3E,WAAW,EAAE,sBAAS,CAAC,YAAY,CAAC,WAAW;YAC/C,QAAQ,EAAE,sBAAS,CAAC,QAAQ;YAC5B,UAAU,EAAE,YAAY;SAC3B,EACD,IAAI,uCAAmB,CAAC,sBAAS,CAAC,YAAY,CAAC,IAAI,GAAG,gBAAgB,EAAE,sBAAS,CAAC,YAAY,CAAC,gBAAgB,CAAC,CACnH,CAAC;IACN,CAAC;IAEY,aAAa,CAAC,OAAe;;YACtC,OAAO,MAAM,IAAI,CAAC,IAAI,CAAC;gBACnB,KAAK,EAAE;oBACH,QAAQ,EAAE,OAAO;iBACpB;gBACD,GAAG,EAAE,IAAI;aACZ,CAAC,CAAC;QACP,CAAC;KAAA;CACJ;AAvBD,gEAuBC"}
@@ -8,9 +8,6 @@ interface IParsedRunsMessageData {
8
8
  timestamp: number;
9
9
  }
10
10
  export declare class VehiclePositionsUtils {
11
- static TRIP_STOPS_CACHE_TTL: number;
12
- static RUN_TRIPS_CACHE_TTL: number;
13
- static DELAY_COMPUTATION_CACHE_TTL: number;
14
11
  /**
15
12
  * Determine whether to create new position and its tracking status (trains only for now)
16
13
  *
@@ -36,5 +33,9 @@ export declare class VehiclePositionsUtils {
36
33
  * Parse runs data from amqp message
37
34
  */
38
35
  static parseRunsMessageData: (msg: AMQPMessage) => IParsedRunsMessageData;
36
+ /**
37
+ * Get the next PXAT timestamp at which Redis keys should expire
38
+ */
39
+ static getNextExpireTimestamp: () => number | undefined;
39
40
  }
40
41
  export {};
@@ -3,15 +3,15 @@ var _a;
3
3
  Object.defineProperty(exports, "__esModule", { value: true });
4
4
  exports.VehiclePositionsUtils = void 0;
5
5
  const golemio_errors_1 = require("@golemio/core/dist/shared/golemio-errors");
6
+ const luxon_1 = require("@golemio/core/dist/shared/luxon");
7
+ const config_1 = require("@golemio/core/dist/integration-engine/config");
8
+ const Logger_1 = require("@golemio/core/dist/integration-engine/helpers/Logger");
6
9
  const const_1 = require("../../const");
7
10
  const models_1 = require("./models");
8
11
  class VehiclePositionsUtils {
9
12
  }
10
13
  exports.VehiclePositionsUtils = VehiclePositionsUtils;
11
14
  _a = VehiclePositionsUtils;
12
- VehiclePositionsUtils.TRIP_STOPS_CACHE_TTL = 14400; // 4 hours
13
- VehiclePositionsUtils.RUN_TRIPS_CACHE_TTL = 21600; // 6 hours
14
- VehiclePositionsUtils.DELAY_COMPUTATION_CACHE_TTL = 7200; // 2 hours
15
15
  /**
16
16
  * Determine whether to create new position and its tracking status (trains only for now)
17
17
  *
@@ -70,4 +70,24 @@ VehiclePositionsUtils.parseRunsMessageData = (msg) => {
70
70
  }
71
71
  return { data, timestamp };
72
72
  };
73
+ /**
74
+ * Get the next PXAT timestamp at which Redis keys should expire
75
+ */
76
+ VehiclePositionsUtils.getNextExpireTimestamp = () => {
77
+ const [hour, minute] = config_1.config.vehiclePositions.redisExpireTime.split(":");
78
+ const timeObject = {
79
+ hour: Number(hour),
80
+ minute: Number(minute),
81
+ };
82
+ if (Number.isNaN(timeObject.hour) || Number.isNaN(timeObject.minute)) {
83
+ Logger_1.log.error(`[VehiclePositionsUtils] Unable to parse '${config_1.config.vehiclePositions.redisExpireTime}'. Redis keys won't expire.`);
84
+ return;
85
+ }
86
+ const localDateTime = luxon_1.DateTime.now().setZone("Europe/Prague");
87
+ let expireDateTime = luxon_1.DateTime.fromObject(timeObject, { zone: "Europe/Prague" });
88
+ if (localDateTime.plus({ minutes: 2 }).diff(expireDateTime).milliseconds > 0) {
89
+ expireDateTime = expireDateTime.plus({ day: 1 });
90
+ }
91
+ return expireDateTime.valueOf();
92
+ };
73
93
  //# sourceMappingURL=VehiclePositionsUtils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"VehiclePositionsUtils.js","sourceRoot":"","sources":["../../../src/integration-engine/vehicle-positions/VehiclePositionsUtils.ts"],"names":[],"mappings":";;;;AACA,6EAAuE;AACvE,uCAAiD;AACjD,qCAAiG;AASjG,MAAa,qBAAqB;;AAAlC,sDA0EC;;AAzEiB,0CAAoB,GAAG,KAAM,CAAA,CAAC,UAAU;AACxC,yCAAmB,GAAG,KAAM,CAAA,CAAC,UAAU;AACvC,iDAA2B,GAAG,IAAK,CAAA,CAAC,UAAU;AAE5D;;;;;;GAMG;AACW,kDAA4B,GAAG,CACzC,gBAA+C,EAC/C,IAAyD,EACzD,QAAuC,EACnB,EAAE;IACtB,IAAI,cAAc,GAAG,QAAQ,CAAC,QAAS,CAAC;IACxC,IAAI,CAAC,IAAI,CAAC,aAAa,IAAI,CAAC,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,eAAe,IAAI,0BAAiB,CAAC,KAAK,EAAE;QAC9F,OAAO,cAAc,CAAC;KACzB;IAED,cAAc,GAAG,EAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,YAAY,EAAE,gBAAgB,EAAE,QAAQ,CAAC,CAAC;IAC7F,OAAO,cAAc,CAAC;AAC1B,CAAE,CAAA;AAEF;;;;;;GAMG;AACW,6CAAuB,GAAG,CACpC,UAAkB,EAClB,gBAA+C,EAC/C,QAAuC,EACnB,EAAE;;IACtB,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,GAAG,MAAA,gBAAgB,aAAhB,gBAAgB,uBAAhB,gBAAgB,CAAG,UAAU,CAAC,mCAAI,EAAE,CAAC;IACvE,IAAI,CAAC,SAAS,EAAE;QACZ,OAAO,QAAQ,CAAC,QAAS,CAAC;KAC7B;IAED,MAAM,gBAAgB,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,KAAK,QAAQ,CAAC,gBAAgB,CAAC,CAAC;IAC/F,MAAM,gBAAgB,GAAG,gBAAgB,GAAG,CAAC,CAAC,IAAI,gBAAgB,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;IAC1F,OAAO,gBAAgB,CAAC,CAAC,CAAC,4BAAoB,CAAC,QAAQ,CAAC,CAAC,CAAC,4BAAoB,CAAC,YAAY,CAAC;AAChG,CAAE,CAAA;AAEF;;;GAGG;AACW,gDAA0B,GAAG,CAAC,gBAAwB,EAAU,EAAE;IAC5E,OAAO,gBAAgB,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;AAC5C,CAAE,CAAA;AAEF;;GAEG;AACW,0CAAoB,GAAG,CAAC,GAAgB,EAA0B,EAAE;;IAC9E,IAAI,IAA+B,CAAC;IACpC,IAAI,SAAiB,CAAC;IACtB,IAAI;QACA,SAAS,GAAG,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC;QACrC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC1C,IAAI,CAAC,CAAA,MAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,CAAC,0CAAE,CAAC,CAAA,EAAE;YACb,MAAM,IAAI,KAAK,CAAC,mCAAmC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;SAC9E;KACJ;IAAC,OAAO,GAAG,EAAE;QACV,MAAM,IAAI,4BAAW,CAAC,6BAA6B,EAAE,IAAI,EAAE,EAAI,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;KAChG;IAED,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;AAC/B,CAAE,CAAA"}
1
+ {"version":3,"file":"VehiclePositionsUtils.js","sourceRoot":"","sources":["../../../src/integration-engine/vehicle-positions/VehiclePositionsUtils.ts"],"names":[],"mappings":"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"}
@@ -17,6 +17,7 @@ export declare class VehiclePositionsWorker extends BaseWorker {
17
17
  private tripStopsModel;
18
18
  private modelTripsQueue;
19
19
  private readonly queuePrefix;
20
+ private gtfsRtAlertsController;
20
21
  constructor();
21
22
  saveDataToDB: (msg: AMQPMessage) => Promise<void>;
22
23
  saveStopsToDB: (msg: AMQPMessage) => Promise<void>;
@@ -55,6 +55,9 @@ const models_2 = require("./models");
55
55
  const transformations_1 = require("./transformations");
56
56
  const helpers_2 = require("./helpers");
57
57
  const VehiclePositionsUtils_1 = require("./VehiclePositionsUtils");
58
+ const GtfsRtAlertsController_1 = require("../gtfsrt-alerts/GtfsRtAlertsController");
59
+ const ropid_vymi_1 = require("../ropid-vymi");
60
+ const GtfsRtAlertTransformation_1 = require("../gtfsrt-alerts/transformations/GtfsRtAlertTransformation");
58
61
  var PositionHandlerEnum;
59
62
  (function (PositionHandlerEnum) {
60
63
  PositionHandlerEnum["TRACKING"] = "TRACKING";
@@ -222,13 +225,14 @@ class VehiclePositionsWorker extends workers_1.BaseWorker {
222
225
  }
223
226
  });
224
227
  this.generateGtfsRt = () => __awaiter(this, void 0, void 0, function* () {
228
+ const currentDate = new Date();
225
229
  const results = yield this.modelTrips.findAllForGTFSRt();
226
230
  const updatesMessage = gtfsRealtime.FeedMessage.create();
227
231
  const positionsMessage = gtfsRealtime.FeedMessage.create();
228
232
  const header = {
229
233
  gtfsRealtimeVersion: "2.0",
230
234
  incrementality: "FULL_DATASET",
231
- timestamp: Math.round(new Date().valueOf() / 1000),
235
+ timestamp: Math.round(currentDate.valueOf() / 1000),
232
236
  };
233
237
  updatesMessage.header = gtfsRealtime.FeedHeader.fromObject(header);
234
238
  positionsMessage.header = gtfsRealtime.FeedHeader.fromObject(header);
@@ -302,6 +306,7 @@ class VehiclePositionsWorker extends workers_1.BaseWorker {
302
306
  // await fs.writeFile("vehicle_positions.pb", buffer); // debug
303
307
  yield this.gtfsRtModel.hset("vehicle_positions.json", JSON.stringify(positionsMessage));
304
308
  }
309
+ yield this.gtfsRtAlertsController.generateGtfsRtAlerts(currentDate);
305
310
  });
306
311
  this.isUpdateDelayRunTripsIdsData = (data) => {
307
312
  const { origin_route_name, sequence_id, gtfs_trip_id } = data;
@@ -454,7 +459,7 @@ class VehiclePositionsWorker extends workers_1.BaseWorker {
454
459
  helpers_1.log.debug("Delay Computation data (Redis) was not found. (gtfsTripId = " + trip.gtfs_trip_id + ")");
455
460
  try {
456
461
  const gtfs = yield this.getResultObjectForDelayCalculation(trip.gtfs_trip_id);
457
- yield this.delayComputationTripsModel.set("trip_id", gtfs, VehiclePositionsUtils_1.VehiclePositionsUtils.DELAY_COMPUTATION_CACHE_TTL);
462
+ yield this.delayComputationTripsModel.set("trip_id", gtfs, undefined, VehiclePositionsUtils_1.VehiclePositionsUtils.getNextExpireTimestamp());
458
463
  trip.gtfsData = gtfs;
459
464
  }
460
465
  catch (err) {
@@ -638,7 +643,7 @@ class VehiclePositionsWorker extends workers_1.BaseWorker {
638
643
  el.start_timestamp = (0, moment_timezone_1.default)(el.start_timestamp).tz("Europe/Prague").format();
639
644
  el.end_timestamp = (0, moment_timezone_1.default)(el.end_timestamp).tz("Europe/Prague").format();
640
645
  });
641
- yield this.runTripsModel.set(`${route_id}_${run_number}`, { schedule: result }, VehiclePositionsUtils_1.VehiclePositionsUtils.RUN_TRIPS_CACHE_TTL);
646
+ yield this.runTripsModel.set(`${route_id}_${run_number}`, { schedule: result }, undefined, VehiclePositionsUtils_1.VehiclePositionsUtils.getNextExpireTimestamp());
642
647
  return result;
643
648
  }
644
649
  return scheduledTripIds.schedule;
@@ -660,7 +665,7 @@ class VehiclePositionsWorker extends workers_1.BaseWorker {
660
665
  acc[curr.trip_id] = { trip_stops: curr.trip_stops };
661
666
  return acc;
662
667
  }, {});
663
- yield this.tripStopsModel.set(blockId, tripStopsSchedule, VehiclePositionsUtils_1.VehiclePositionsUtils.TRIP_STOPS_CACHE_TTL);
668
+ yield this.tripStopsModel.set(blockId, tripStopsSchedule, undefined, VehiclePositionsUtils_1.VehiclePositionsUtils.getNextExpireTimestamp());
664
669
  return tripStopsSchedule;
665
670
  }
666
671
  catch (err) {
@@ -1478,6 +1483,7 @@ class VehiclePositionsWorker extends workers_1.BaseWorker {
1478
1483
  this.modelGTFSStopTimes = new RopidGTFSStopTimesModel_1.RopidGTFSStopTimesModel();
1479
1484
  // Create trips upsert queue for preventing transaction deadlocks
1480
1485
  this.modelTripsQueue = new helpers_2.VehiclePositionsTripsQueue(this.modelTrips);
1486
+ this.gtfsRtAlertsController = new GtfsRtAlertsController_1.GtfsRtAlertsController(this.gtfsRtModel, new ropid_vymi_1.RopidVYMIEventsModel(), new GtfsRtAlertTransformation_1.GtfsRtAlertTransformation(new ropid_vymi_1.RopidVYMIEventsRoutesModel()));
1481
1487
  }
1482
1488
  }
1483
1489
  exports.VehiclePositionsWorker = VehiclePositionsWorker;