@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.
- package/db/example/pb/alerts.pb +0 -0
- package/dist/integration-engine/gtfsrt-alerts/GtfsRtAlertsController.d.ts +10 -0
- package/dist/integration-engine/gtfsrt-alerts/GtfsRtAlertsController.js +48 -0
- package/dist/integration-engine/gtfsrt-alerts/GtfsRtAlertsController.js.map +1 -0
- package/dist/integration-engine/gtfsrt-alerts/transformations/GtfsAlertCauseMapper.d.ts +2 -0
- package/dist/integration-engine/gtfsrt-alerts/transformations/GtfsAlertCauseMapper.js +55 -0
- package/dist/integration-engine/gtfsrt-alerts/transformations/GtfsAlertCauseMapper.js.map +1 -0
- package/dist/integration-engine/gtfsrt-alerts/transformations/GtfsEffectMapper.d.ts +6 -0
- package/dist/integration-engine/gtfsrt-alerts/transformations/GtfsEffectMapper.js +53 -0
- package/dist/integration-engine/gtfsrt-alerts/transformations/GtfsEffectMapper.js.map +1 -0
- package/dist/integration-engine/gtfsrt-alerts/transformations/GtfsRtAlertTransformation.d.ts +14 -0
- package/dist/integration-engine/gtfsrt-alerts/transformations/GtfsRtAlertTransformation.js +100 -0
- package/dist/integration-engine/gtfsrt-alerts/transformations/GtfsRtAlertTransformation.js.map +1 -0
- package/dist/integration-engine/ropid-vymi/models/RopidVYMIEventsModel.d.ts +2 -0
- package/dist/integration-engine/ropid-vymi/models/RopidVYMIEventsModel.js +26 -0
- package/dist/integration-engine/ropid-vymi/models/RopidVYMIEventsModel.js.map +1 -1
- package/dist/integration-engine/ropid-vymi/models/RopidVYMIEventsRoutesModel.d.ts +2 -0
- package/dist/integration-engine/ropid-vymi/models/RopidVYMIEventsRoutesModel.js +19 -0
- package/dist/integration-engine/ropid-vymi/models/RopidVYMIEventsRoutesModel.js.map +1 -1
- package/dist/integration-engine/vehicle-positions/VehiclePositionsUtils.d.ts +4 -3
- package/dist/integration-engine/vehicle-positions/VehiclePositionsUtils.js +23 -3
- package/dist/integration-engine/vehicle-positions/VehiclePositionsUtils.js.map +1 -1
- package/dist/integration-engine/vehicle-positions/VehiclePositionsWorker.d.ts +1 -0
- package/dist/integration-engine/vehicle-positions/VehiclePositionsWorker.js +10 -4
- package/dist/integration-engine/vehicle-positions/VehiclePositionsWorker.js.map +1 -1
- package/dist/output-gateway/vehicle-positions/VehiclePositionsRouter.d.ts +2 -0
- package/dist/output-gateway/vehicle-positions/VehiclePositionsRouter.js +34 -9
- package/dist/output-gateway/vehicle-positions/VehiclePositionsRouter.js.map +1 -1
- package/dist/schema-definitions/gtfsrt-alerts/GtfsRtAlert.d.ts +56 -0
- package/dist/schema-definitions/gtfsrt-alerts/GtfsRtAlert.js +29 -0
- package/dist/schema-definitions/gtfsrt-alerts/GtfsRtAlert.js.map +1 -0
- 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,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
|
package/dist/integration-engine/gtfsrt-alerts/transformations/GtfsRtAlertTransformation.js.map
ADDED
|
@@ -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":"
|
|
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":"
|
|
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;
|
|
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(
|
|
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.
|
|
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.
|
|
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.
|
|
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;
|