@golemio/pid 3.17.1-dev.1910883306 → 3.17.1-dev.1925380213

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.
@@ -2,15 +2,19 @@ import { ICommonRunWithMessageDto } from "../../../../../schema-definitions/vehi
2
2
  import { ILogger } from "@golemio/core/dist/helpers/logger";
3
3
  import { ICommonMessageFilter } from "./interfaces/ICommonMessageFilter";
4
4
  import { TimestampValidator } from "./TimestampValidator";
5
+ import { ISimpleConfig } from "@golemio/core/dist/helpers/configuration/ISimpleConfig";
5
6
  export declare class BusMessageFilter implements ICommonMessageFilter {
6
7
  private logger;
7
8
  private timestampValidator;
8
- constructor(logger: ILogger, timestampValidator: TimestampValidator);
9
+ private config;
10
+ private dppTestingBuses;
11
+ constructor(logger: ILogger, timestampValidator: TimestampValidator, config: ISimpleConfig);
9
12
  /**
10
- * Yield messages that are valid for processing (filter out internal bus lines)
13
+ * Yield messages that are valid for processing (filter out internal bus lines and testing buses)
11
14
  * - route id is a string of length 3 or more
12
15
  * - route id is a number in range of bus and trolleybus lines
13
16
  * - route id >= 100 (bus) ∪ [50, 69] (trolleybus)
14
17
  */
15
18
  yieldFilteredMessages(messages: ICommonRunWithMessageDto[], timestamp: number): Generator<ICommonRunWithMessageDto>;
19
+ private isTestingBus;
16
20
  }
@@ -21,12 +21,14 @@ const golemio_errors_1 = require("@golemio/core/dist/shared/golemio-errors");
21
21
  const TROLLEYBUS_ROUTE_ID_MIN = 50;
22
22
  const TROLLEYBUS_ROUTE_ID_MAX = 69;
23
23
  let BusMessageFilter = exports.BusMessageFilter = class BusMessageFilter {
24
- constructor(logger, timestampValidator) {
24
+ constructor(logger, timestampValidator, config) {
25
25
  this.logger = logger;
26
26
  this.timestampValidator = timestampValidator;
27
+ this.config = config;
28
+ this.dppTestingBuses = this.config.getValue("module.pid.vehicle-positions.dppTestingBuses.*", []);
27
29
  }
28
30
  /**
29
- * Yield messages that are valid for processing (filter out internal bus lines)
31
+ * Yield messages that are valid for processing (filter out internal bus lines and testing buses)
30
32
  * - route id is a string of length 3 or more
31
33
  * - route id is a number in range of bus and trolleybus lines
32
34
  * - route id >= 100 (bus) ∪ [50, 69] (trolleybus)
@@ -41,6 +43,10 @@ let BusMessageFilter = exports.BusMessageFilter = class BusMessageFilter {
41
43
  continue;
42
44
  }
43
45
  if (run.route_id.length > 2) {
46
+ if (this.isTestingBus(message.run.registration_number)) {
47
+ this.logger.info(`Testing bus ${message.run.registration_number} was filterd out`);
48
+ continue;
49
+ }
44
50
  yield message;
45
51
  continue;
46
52
  }
@@ -53,11 +59,15 @@ let BusMessageFilter = exports.BusMessageFilter = class BusMessageFilter {
53
59
  yield message;
54
60
  }
55
61
  }
62
+ isTestingBus(reqNumber) {
63
+ return this.dppTestingBuses.includes(reqNumber);
64
+ }
56
65
  };
57
66
  exports.BusMessageFilter = BusMessageFilter = __decorate([
58
67
  (0, tsyringe_1.injectable)(),
59
68
  __param(0, (0, tsyringe_1.inject)(CoreToken_1.CoreToken.Logger)),
60
69
  __param(1, (0, tsyringe_1.inject)(VPContainerToken_1.VPContainerToken.TimestampValidator)),
61
- __metadata("design:paramtypes", [Object, TimestampValidator_1.TimestampValidator])
70
+ __param(2, (0, tsyringe_1.inject)(CoreToken_1.CoreToken.SimpleConfig)),
71
+ __metadata("design:paramtypes", [Object, TimestampValidator_1.TimestampValidator, Object])
62
72
  ], BusMessageFilter);
63
73
  //# sourceMappingURL=BusMessageFilter.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"BusMessageFilter.js","sourceRoot":"","sources":["../../../../../../src/integration-engine/vehicle-positions/workers/runs/helpers/BusMessageFilter.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AACA,wEAAqE;AAErE,iEAAwE;AAExE,oEAA8E;AAC9E,6DAA0D;AAC1D,6EAAwE;AAExE,MAAM,uBAAuB,GAAG,EAAE,CAAC;AACnC,MAAM,uBAAuB,GAAG,EAAE,CAAC;AAG5B,IAAM,gBAAgB,8BAAtB,MAAM,gBAAgB;IACzB,YACsC,MAAe,EACI,kBAAsC;QADzD,WAAM,GAAN,MAAM,CAAS;QACI,uBAAkB,GAAlB,kBAAkB,CAAoB;IAC5F,CAAC;IAEJ;;;;;OAKG;IACI,CAAC,qBAAqB,CAAC,QAAoC,EAAE,SAAiB;QACjF,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE;YAC5B,MAAM,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC;YAExB,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,SAAS,EAAE,OAAO,CAAC,WAAW,CAAC,0BAA0B,CAAC,QAAQ,EAAE,CAAC,EAAE;gBACjH,IAAI,CAAC,MAAM,CAAC,KAAK,CACb,IAAI,6BAAY,CACZ,mCAAmC;oBAC/B,OAAO,CAAC,WAAW,CAAC,0BAA0B,CAAC,WAAW,EAAE;oBAC5D,yBAAyB,OAAO,CAAC,GAAG,CAAC,eAAe,SAAS,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,EACzF,IAAI,CAAC,WAAW,CAAC,IAAI,EACrB,SAAS,EACT,SAAS,EACT,KAAK,CACR,CACJ,CAAC;gBACF,SAAS;aACZ;YACD,IAAI,GAAG,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;gBACzB,MAAM,OAAO,CAAC;gBACd,SAAS;aACZ;YAED,MAAM,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YAC9C,IAAI,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,OAAO,GAAG,uBAAuB,IAAI,OAAO,GAAG,uBAAuB,EAAE;gBACjG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,cAAc,OAAO,6BAA6B,CAAC,CAAC;gBAC7F,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;gBAC3B,SAAS;aACZ;YAED,MAAM,OAAO,CAAC;SACjB;IACL,CAAC;CACJ,CAAA;2BA7CY,gBAAgB;IAD5B,IAAA,qBAAU,GAAE;IAGJ,WAAA,IAAA,iBAAM,EAAC,qBAAS,CAAC,MAAM,CAAC,CAAA;IACxB,WAAA,IAAA,iBAAM,EAAC,mCAAgB,CAAC,kBAAkB,CAAC,CAAA;6CAA6B,uCAAkB;GAHtF,gBAAgB,CA6C5B"}
1
+ {"version":3,"file":"BusMessageFilter.js","sourceRoot":"","sources":["../../../../../../src/integration-engine/vehicle-positions/workers/runs/helpers/BusMessageFilter.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AACA,wEAAqE;AAErE,iEAAwE;AAExE,oEAA8E;AAC9E,6DAA0D;AAC1D,6EAAwE;AAGxE,MAAM,uBAAuB,GAAG,EAAE,CAAC;AACnC,MAAM,uBAAuB,GAAG,EAAE,CAAC;AAG5B,IAAM,gBAAgB,8BAAtB,MAAM,gBAAgB;IAEzB,YACsC,MAAe,EACI,kBAAsC,EACnD,MAAqB;QAF3B,WAAM,GAAN,MAAM,CAAS;QACI,uBAAkB,GAAlB,kBAAkB,CAAoB;QACnD,WAAM,GAAN,MAAM,CAAe;QAE7D,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,gDAAgD,EAAE,EAAE,CAAa,CAAC;IAClH,CAAC;IAED;;;;;OAKG;IACI,CAAC,qBAAqB,CAAC,QAAoC,EAAE,SAAiB;QACjF,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE;YAC5B,MAAM,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC;YAExB,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,SAAS,EAAE,OAAO,CAAC,WAAW,CAAC,0BAA0B,CAAC,QAAQ,EAAE,CAAC,EAAE;gBACjH,IAAI,CAAC,MAAM,CAAC,KAAK,CACb,IAAI,6BAAY,CACZ,mCAAmC;oBAC/B,OAAO,CAAC,WAAW,CAAC,0BAA0B,CAAC,WAAW,EAAE;oBAC5D,yBAAyB,OAAO,CAAC,GAAG,CAAC,eAAe,SAAS,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,EACzF,IAAI,CAAC,WAAW,CAAC,IAAI,EACrB,SAAS,EACT,SAAS,EACT,KAAK,CACR,CACJ,CAAC;gBACF,SAAS;aACZ;YACD,IAAI,GAAG,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;gBACzB,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,EAAE;oBACpD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,OAAO,CAAC,GAAG,CAAC,mBAAmB,kBAAkB,CAAC,CAAC;oBACnF,SAAS;iBACZ;gBACD,MAAM,OAAO,CAAC;gBACd,SAAS;aACZ;YAED,MAAM,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YAC9C,IAAI,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,OAAO,GAAG,uBAAuB,IAAI,OAAO,GAAG,uBAAuB,EAAE;gBACjG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,cAAc,OAAO,6BAA6B,CAAC,CAAC;gBAC7F,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;gBAC3B,SAAS;aACZ;YAED,MAAM,OAAO,CAAC;SACjB;IACL,CAAC;IAEO,YAAY,CAAC,SAAiB;QAClC,OAAO,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;IACpD,CAAC;CACJ,CAAA;2BAzDY,gBAAgB;IAD5B,IAAA,qBAAU,GAAE;IAIJ,WAAA,IAAA,iBAAM,EAAC,qBAAS,CAAC,MAAM,CAAC,CAAA;IACxB,WAAA,IAAA,iBAAM,EAAC,mCAAgB,CAAC,kBAAkB,CAAC,CAAA;IAC3C,WAAA,IAAA,iBAAM,EAAC,qBAAS,CAAC,YAAY,CAAC,CAAA;6CAD0C,uCAAkB;GAJtF,gBAAgB,CAyD5B"}
@@ -228,7 +228,11 @@ _:warning: Původním záměrem bylo využití OIS číselníku během zpracová
228
228
  - validační schéma: [JISEventsJsonSchema](../src/schema-definitions/jis/datasources/JISEventsJsonSchema.ts)
229
229
  - příklad vstupnich dat: [eventsDataSourceFixture](../test/integration-engine/jis/fixtures/eventsDataSourceFixture.ts)
230
230
  - frekvence stahování
231
- - data jsou stažena pouze po manuálním zaslání zprávy do RabbitMQ fronty (primární způsob aktualizace dat je aktivní posílání)
231
+ - cron definice:
232
+ - cron.vehicle-positions.jis.refreshJISEvents
233
+ - rabin `0 */1 * * * *`
234
+ - prod `0 */1 * * * *`
235
+ - data mohou být stažena po manuálním zaslání zprávy do RabbitMQ fronty (primární způsob aktualizace dat je aktivní posílání a cron)
232
236
  - název rabbitmq fronty
233
237
  - vehicle-positions.jis.fetchJISEvents
234
238
 
@@ -244,7 +248,11 @@ _:warning: Původním záměrem bylo využití OIS číselníku během zpracová
244
248
  - validační schéma: [JISInfotextsJsonSchema](../src/schema-definitions/jis/datasources/JISInfotextsJsonSchema.ts)
245
249
  - příklad vstupnich dat: [infotextsDataSourceFixture](../test/integration-engine/jis/fixtures/infotextsDataSourceFixture.ts)
246
250
  - frekvence stahování
247
- - data jsou stažena pouze po manuálním zaslání zprávy do RabbitMQ fronty (primární způsob aktualizace dat je aktivní posílání)
251
+ - cron definice:
252
+ - cron.vehicle-positions.jis.refreshJISInfotexts
253
+ - rabin `0 */1 * * * *`
254
+ - prod `0 */1 * * * *`
255
+ - data mohou být stažena po manuálním zaslání zprávy do RabbitMQ fronty (primární způsob aktualizace dat je aktivní posílání a cron)
248
256
  - název rabbitmq fronty
249
257
  - vehicle-positions.jis.fetchJISInfotexts
250
258
 
package/docs/jis/index.md CHANGED
@@ -82,10 +82,8 @@ flowchart LR
82
82
  ## Aktivní posílání (push) dat
83
83
 
84
84
  Po uložení změn událostí a infotextů do VYMI PostgreSQL databáze dojde vždy k aktivnímu poslání (push) "aktuálních" dat z VYMI back end služby do Golemia za pomoci HTTP POST dotazu na Golemio Vehicle Positions (VP) Input Gateway (IG).
85
-
86
- Za aktuální data jsou považovány:
87
- - všechny události, které mají `status` `PUBLISHED`, a zároveň `updated_at` hodnotu z posledních 24 hodin nebo `active_period_end` je `NULL` nebo >= aktuální čas, neboli lidsky všechny publikované (ne-draft) události, které jsou aktivní nebo byly upraveny v posledním dnu;
88
- - všechny infotexty, které mají `status` `PUBLISHED`, `visibility` `PUBLIC` a zároveň `active_period_end` je `NULL` nebo >= aktuální čas, neboli lidsky všechny aktivní zapnuté publikované (ne-draft) infotexty.
85
+ - u událostí se posílá pouze konkrétní nově vytvořená nebo upravená událost, nikoliv celý seznam aktuálních událostí.
86
+ - všechny infotexty, které mají `status` `PUBLISHED`, `visibility` `PUBLIC` a zároveň `active_period_end` je `NULL` nebo >= aktuální čas, neboli lidsky všechny aktivní, budoucí a publikované (ne-draft) infotexty.
89
87
 
90
88
  VP Input Gateway data přijme a zašle do odpovídající RabbitMQ fronty, odkud je převezme VP Integration Engine, který data zapíše do VP PostgreSQL databáze.
91
89
 
@@ -159,7 +157,19 @@ Formát zasílaných dat je dále více popsán v implementační dokumentaci ([
159
157
 
160
158
  ## Pasivní načítání (pull) dat
161
159
 
162
- V případě potřeby (např. nedojde-li kvůli chybě k aktivnímu poslání dat) lze využít pasivní načtení (push) dat z VYMI REST API do Golemia. Pro spuštění načtení musí vývojář zaslat prázdnou zprávu do správné RabbitMQ fronty, kterou zkonzumuje VP Integration Engine a za pomoci HTTP GET dotazu získá data z VYMI back end služby.
160
+ V případě potřeby (např. nedojde-li kvůli chybě k aktivnímu poslání dat) lze využít pasivní načtení (pull) dat z VYMI REST API do Golemia. Pro spuštění načtení může vývojář zaslat prázdnou zprávu do správné RabbitMQ fronty, kterou zkonzumuje VP Integration Engine a za pomoci HTTP GET dotazu získá data z VYMI back end služby.
161
+
162
+ Kromě manuálního spuštění vývojářem je nyní navíc aktivní cron task, který každou minutu automaticky spouští pasivní načítání dat z VYMI do Golemia. Tento mechanismus zajišťuje vyšší odolnost proti výpadkům v aktivním posílání (push) dat.
163
+
164
+ Při pasivním načítání se z VYMI vždy přenačítají pouze aktuální (aktivní) události a infotexty:
165
+ - všechny události, které mají `status` `PUBLISHED`, a zároveň `updated_at` hodnotu z posledních 24 hodin nebo `active_period_end` je `NULL` nebo >= aktuální čas, neboli lidsky všechny publikované (ne-draft) události, které jsou aktivní nebo byly upraveny v posledním dnu;
166
+ - všechny infotexty, které mají `status` `PUBLISHED`, `visibility` `PUBLIC` a zároveň `active_period_end` je `NULL` nebo >= aktuální čas, neboli lidsky všechny aktivní, budoucí a publikované (ne-draft) infotexty.
167
+
168
+ ## Chování databáze v Golemio
169
+
170
+ Události – v Golemio databázi se uchovávají všechny historické i aktuální události. Staré záznamy se nepromazávají.
171
+
172
+ Infotexty – v Golemio databázi se uchovávají pouze aktivní infotexty. Neaktivní se při každém přenačtení promazávají.
163
173
 
164
174
  Proces je podrobněji znázorněn na následujícím diagramu (detailnější prvky aplikační struktury jsou vynechány).
165
175
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@golemio/pid",
3
- "version": "3.17.1-dev.1910883306",
3
+ "version": "3.17.1-dev.1925380213",
4
4
  "description": "Golemio PID Module",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",