@zorionapp/gg-core 5.0.46 → 5.0.47

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zorionapp/gg-core",
3
- "version": "5.0.46",
3
+ "version": "5.0.47",
4
4
  "type": "commonjs",
5
5
  "dependencies": {
6
6
  "cache-manager": "5.2.4",
@@ -22,11 +22,15 @@ let GgCacheModule = GgCacheModule_1 = class GgCacheModule {
22
22
  isGlobal: true,
23
23
  useFactory: (redisConf) => {
24
24
  const client = (0, gg_redis_1.createRedisClient)(redisConf, {
25
+ connectionName: 'cache',
25
26
  keepAlive: 1,
26
27
  enableOfflineQueue: false,
27
28
  commandTimeout: 1000,
28
29
  maxRetriesPerRequest: 2,
29
30
  connectTimeout: 5000,
31
+ // Closes a half-open socket, which `status` alone cannot see. Known ioredis quirk: the
32
+ // timer outlives its socket, so a reconnect logs one spurious "Socket timeout".
33
+ socketTimeout: 5000,
30
34
  });
31
35
  return {
32
36
  store: (0, cache_manager_ioredis_yet_1.redisInsStore)(client, {
@@ -1 +1 @@
1
- {"version":3,"file":"gg-cache.module.js","sourceRoot":"","sources":["../../../../../libs/gg-core/src/gg-cache/gg-cache.module.ts"],"names":[],"mappings":";;;;;AAAA,yDAAoD;AACpD,2CAAuD;AAEvD,yEAA0D;AAC1D,iCAAiC;AACjC,0CAA6D;AAC7D,yDAAoD;AAG7C,IAAM,aAAa,qBAAnB,MAAM,aAAa;IACjB,MAAM,CAAC,OAAO;QACnB,OAAO;YACL,MAAM,EAAE,eAAa;YACrB,MAAM,EAAE,IAAI;YACZ,SAAS,EAAE,CAAC,iCAAc,CAAC;YAC3B,OAAO,EAAE,CAAC,iCAAc,CAAC;YACzB,OAAO,EAAE;gBACP,2BAAW,CAAC,aAAa,CAAC;oBACxB,MAAM,EAAE,CAAC,sBAAW,CAAC,GAAG,CAAC;oBACzB,QAAQ,EAAE,IAAI;oBACd,UAAU,EAAE,CAAC,SAAyC,EAAE,EAAE;wBACxD,MAAM,MAAM,GAAG,IAAA,4BAAiB,EAAC,SAAS,EAAE;4BAC1C,SAAS,EAAE,CAAC;4BACZ,kBAAkB,EAAE,KAAK;4BACzB,cAAc,EAAE,IAAI;4BACpB,oBAAoB,EAAE,CAAC;4BACvB,cAAc,EAAE,IAAI;yBACrB,CAAC,CAAC;wBACH,OAAO;4BACL,KAAK,EAAE,IAAA,yCAAa,EAAC,MAAM,EAAE;gCAC3B,GAAG,EAAE,gBAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,cAAc,CAAC;6BAC3D,CAAC;yBACH,CAAC;oBACJ,CAAC;iBACF,CAAC;aACH;SACF,CAAC;IACJ,CAAC;CACF,CAAA;AA7BY,sCAAa;wBAAb,aAAa;IADzB,IAAA,eAAM,EAAC,EAAE,CAAC;GACE,aAAa,CA6BzB"}
1
+ {"version":3,"file":"gg-cache.module.js","sourceRoot":"","sources":["../../../../../libs/gg-core/src/gg-cache/gg-cache.module.ts"],"names":[],"mappings":";;;;;AAAA,yDAAoD;AACpD,2CAAuD;AAEvD,yEAA0D;AAC1D,iCAAiC;AACjC,0CAA6D;AAC7D,yDAAoD;AAG7C,IAAM,aAAa,qBAAnB,MAAM,aAAa;IACjB,MAAM,CAAC,OAAO;QACnB,OAAO;YACL,MAAM,EAAE,eAAa;YACrB,MAAM,EAAE,IAAI;YACZ,SAAS,EAAE,CAAC,iCAAc,CAAC;YAC3B,OAAO,EAAE,CAAC,iCAAc,CAAC;YACzB,OAAO,EAAE;gBACP,2BAAW,CAAC,aAAa,CAAC;oBACxB,MAAM,EAAE,CAAC,sBAAW,CAAC,GAAG,CAAC;oBACzB,QAAQ,EAAE,IAAI;oBACd,UAAU,EAAE,CAAC,SAAyC,EAAE,EAAE;wBACxD,MAAM,MAAM,GAAG,IAAA,4BAAiB,EAAC,SAAS,EAAE;4BAC1C,cAAc,EAAE,OAAO;4BACvB,SAAS,EAAE,CAAC;4BACZ,kBAAkB,EAAE,KAAK;4BACzB,cAAc,EAAE,IAAI;4BACpB,oBAAoB,EAAE,CAAC;4BACvB,cAAc,EAAE,IAAI;4BACpB,uFAAuF;4BACvF,gFAAgF;4BAChF,aAAa,EAAE,IAAI;yBACpB,CAAC,CAAC;wBACH,OAAO;4BACL,KAAK,EAAE,IAAA,yCAAa,EAAC,MAAM,EAAE;gCAC3B,GAAG,EAAE,gBAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,cAAc,CAAC;6BAC3D,CAAC;yBACH,CAAC;oBACJ,CAAC;iBACF,CAAC;aACH;SACF,CAAC;IACJ,CAAC;CACF,CAAA;AAjCY,sCAAa;wBAAb,aAAa;IADzB,IAAA,eAAM,EAAC,EAAE,CAAC;GACE,aAAa,CAiCzB"}
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.createRedisClient = exports.buildRedisClientOptions = void 0;
4
4
  const common_1 = require("@nestjs/common");
5
5
  const ioredis_1 = require("ioredis");
6
+ const redis_client_metric_1 = require("./redis-client.metric");
6
7
  const logger = new common_1.Logger('RedisClient');
7
8
  function buildRedisClientOptions(config, options) {
8
9
  if (config.mode === 'sentinel') {
@@ -22,6 +23,10 @@ function buildRedisClientOptions(config, options) {
22
23
  }
23
24
  return {
24
25
  sentinels,
26
+ // Without it the SENTINEL lookup is unbounded and the client pins in `connecting` forever (DEV-532).
27
+ sentinelCommandTimeout: 3000,
28
+ // ioredis appends discovered sentinel pod IPs and never removes them, so the list rots.
29
+ updateSentinels: false,
25
30
  name: config.sentinelMaster,
26
31
  ...options,
27
32
  };
@@ -37,6 +42,7 @@ function createRedisClient(config, options) {
37
42
  const client = new ioredis_1.default(buildRedisClientOptions(config, options));
38
43
  // Transient reconnects are recoverable -> warn.
39
44
  client.on('error', (err) => logger.warn({ msg: 'Redis client error (recoverable)', err }));
45
+ (0, redis_client_metric_1.trackRedisClientState)(client);
40
46
  return client;
41
47
  }
42
48
  exports.createRedisClient = createRedisClient;
@@ -1 +1 @@
1
- {"version":3,"file":"redis-client.factory.js","sourceRoot":"","sources":["../../../../../libs/gg-core/src/gg-redis/redis-client.factory.ts"],"names":[],"mappings":";;;AAAA,2CAAwC;AAExC,qCAAyD;AAMzD,MAAM,MAAM,GAAG,IAAI,eAAM,CAAC,aAAa,CAAC,CAAC;AAEzC,SAAgB,uBAAuB,CACrC,MAAuB,EACvB,OAA+B;IAE/B,IAAI,MAAM,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;QAC/B,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,IAAI,EAAE,EAAE,CAAC;YAClC,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAC;QAC5E,CAAC;QAED,MAAM,SAAS,GAAG,MAAM,CAAC,aAAa;aACnC,KAAK,CAAC,GAAG,CAAC;aACV,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;aAC5B,MAAM,CAAC,OAAO,CAAC;aACf,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;YACb,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACtC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,KAAK,EAAE,CAAC;QAC/C,CAAC,CAAC,CAAC;QAEL,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3B,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAC;QAC5E,CAAC;QAED,OAAO;YACL,SAAS;YACT,IAAI,EAAE,MAAM,CAAC,cAAc;YAC3B,GAAG,OAAO;SACX,CAAC;IACJ,CAAC;IAED,OAAO;QACL,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,GAAG,OAAO;KACX,CAAC;AACJ,CAAC;AAlCD,0DAkCC;AAED,SAAgB,iBAAiB,CAAC,MAAuB,EAAE,OAA+B;IACxF,MAAM,MAAM,GAAG,IAAI,iBAAK,CAAC,uBAAuB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACnE,gDAAgD;IAChD,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,kCAAkC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;IAC3F,OAAO,MAAM,CAAC;AAChB,CAAC;AALD,8CAKC"}
1
+ {"version":3,"file":"redis-client.factory.js","sourceRoot":"","sources":["../../../../../libs/gg-core/src/gg-redis/redis-client.factory.ts"],"names":[],"mappings":";;;AAAA,2CAAwC;AAExC,qCAAyD;AACzD,+DAA8D;AAM9D,MAAM,MAAM,GAAG,IAAI,eAAM,CAAC,aAAa,CAAC,CAAC;AAEzC,SAAgB,uBAAuB,CACrC,MAAuB,EACvB,OAA+B;IAE/B,IAAI,MAAM,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;QAC/B,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,IAAI,EAAE,EAAE,CAAC;YAClC,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAC;QAC5E,CAAC;QAED,MAAM,SAAS,GAAG,MAAM,CAAC,aAAa;aACnC,KAAK,CAAC,GAAG,CAAC;aACV,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;aAC5B,MAAM,CAAC,OAAO,CAAC;aACf,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;YACb,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACtC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,KAAK,EAAE,CAAC;QAC/C,CAAC,CAAC,CAAC;QAEL,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3B,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAC;QAC5E,CAAC;QAED,OAAO;YACL,SAAS;YACT,qGAAqG;YACrG,sBAAsB,EAAE,IAAI;YAC5B,wFAAwF;YACxF,eAAe,EAAE,KAAK;YACtB,IAAI,EAAE,MAAM,CAAC,cAAc;YAC3B,GAAG,OAAO;SACX,CAAC;IACJ,CAAC;IAED,OAAO;QACL,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,GAAG,OAAO;KACX,CAAC;AACJ,CAAC;AAtCD,0DAsCC;AAED,SAAgB,iBAAiB,CAAC,MAAuB,EAAE,OAA+B;IACxF,MAAM,MAAM,GAAG,IAAI,iBAAK,CAAC,uBAAuB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACnE,gDAAgD;IAChD,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,kCAAkC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;IAC3F,IAAA,2CAAqB,EAAC,MAAM,CAAC,CAAC;IAC9B,OAAO,MAAM,CAAC;AAChB,CAAC;AAND,8CAMC"}
@@ -0,0 +1,2 @@
1
+ import { default as Redis } from 'ioredis';
2
+ export declare function trackRedisClientState(client: Redis): void;
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.trackRedisClientState = void 0;
4
+ const prom_client_1 = require("prom-client");
5
+ const REDIS_CLIENT_UP_METRIC = 'gg_redis_client_up';
6
+ const clients = new Set();
7
+ function registerGaugeOnce() {
8
+ if (prom_client_1.register.getSingleMetric(REDIS_CLIENT_UP_METRIC)) {
9
+ return;
10
+ }
11
+ const gauge = new prom_client_1.Gauge({
12
+ name: REDIS_CLIENT_UP_METRIC,
13
+ help: 'Redis client connection state: 1 when the ioredis status is ready',
14
+ labelNames: ['client'],
15
+ registers: [],
16
+ // A method, not an arrow: prom-client invokes it with `this` bound to the metric.
17
+ collect() {
18
+ // Clients can share a name; the worst state wins so a dead one is never masked by a live one.
19
+ const worstByName = new Map();
20
+ for (const tracked of clients) {
21
+ const name = tracked.options.connectionName ?? 'unknown';
22
+ worstByName.set(name, Math.min(worstByName.get(name) ?? 1, tracked.status === 'ready' ? 1 : 0));
23
+ }
24
+ this.reset();
25
+ for (const [name, value] of worstByName) {
26
+ this.set({ client: name }, value);
27
+ }
28
+ },
29
+ });
30
+ prom_client_1.register.registerMetric(gauge);
31
+ }
32
+ function trackRedisClientState(client) {
33
+ clients.add(client);
34
+ registerGaugeOnce();
35
+ }
36
+ exports.trackRedisClientState = trackRedisClientState;
37
+ //# sourceMappingURL=redis-client.metric.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redis-client.metric.js","sourceRoot":"","sources":["../../../../../libs/gg-core/src/gg-redis/redis-client.metric.ts"],"names":[],"mappings":";;;AACA,6CAA8C;AAE9C,MAAM,sBAAsB,GAAG,oBAAoB,CAAC;AAEpD,MAAM,OAAO,GAAG,IAAI,GAAG,EAAS,CAAC;AAEjC,SAAS,iBAAiB;IACxB,IAAI,sBAAQ,CAAC,eAAe,CAAC,sBAAsB,CAAC,EAAE,CAAC;QACrD,OAAO;IACT,CAAC;IAED,MAAM,KAAK,GAAG,IAAI,mBAAK,CAAC;QACtB,IAAI,EAAE,sBAAsB;QAC5B,IAAI,EAAE,mEAAmE;QACzE,UAAU,EAAE,CAAC,QAAQ,CAAU;QAC/B,SAAS,EAAE,EAAE;QACb,kFAAkF;QAClF,OAAO;YACL,8FAA8F;YAC9F,MAAM,WAAW,GAAG,IAAI,GAAG,EAAkB,CAAC;YAE9C,KAAK,MAAM,OAAO,IAAI,OAAO,EAAE,CAAC;gBAC9B,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,cAAc,IAAI,SAAS,CAAC;gBACzD,WAAW,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAClG,CAAC;YAED,IAAI,CAAC,KAAK,EAAE,CAAC;YACb,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,WAAW,EAAE,CAAC;gBACxC,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,KAAK,CAAC,CAAC;YACpC,CAAC;QACH,CAAC;KACF,CAAC,CAAC;IAEH,sBAAQ,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;AACjC,CAAC;AAED,SAAgB,qBAAqB,CAAC,MAAa;IACjD,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACpB,iBAAiB,EAAE,CAAC;AACtB,CAAC;AAHD,sDAGC"}
@@ -17,6 +17,7 @@ let RedlockModule = RedlockModule_1 = class RedlockModule {
17
17
  inject: [gg_redis_1.redisConfig.KEY],
18
18
  useFactory: (conf) => {
19
19
  const client = (0, gg_redis_1.createRedisClient)(conf, {
20
+ connectionName: 'lock',
20
21
  enableOfflineQueue: false,
21
22
  enableReadyCheck: false,
22
23
  enableAutoPipelining: false,
@@ -1 +1 @@
1
- {"version":3,"file":"redlock.module.js","sourceRoot":"","sources":["../../../../../libs/gg-core/src/gg-redlock/redlock.module.ts"],"names":[],"mappings":";;;;;AAAA,2CAAuD;AAEvD,0CAA6D;AAC7D,uDAAsD;AACtD,uDAAmD;AAG5C,IAAM,aAAa,qBAAnB,MAAM,aAAa;IACjB,MAAM,CAAC,QAAQ;QACpB,OAAO;YACL,MAAM,EAAE,eAAa;YACrB,SAAS,EAAE;gBACT;oBACE,OAAO,EAAE,mCAAiB;oBAC1B,MAAM,EAAE,CAAC,sBAAW,CAAC,GAAG,CAAC;oBACzB,UAAU,EAAE,CAAC,IAAoC,EAAE,EAAE;wBACnD,MAAM,MAAM,GAAG,IAAA,4BAAiB,EAAC,IAAI,EAAE;4BACrC,kBAAkB,EAAE,KAAK;4BACzB,gBAAgB,EAAE,KAAK;4BACvB,oBAAoB,EAAE,KAAK;4BAC3B,6BAA6B,EAAE,IAAI;4BACnC,cAAc,EAAE,IAAI;4BACpB,aAAa,EAAE,KAAK;4BACpB,cAAc,EAAE,IAAI;4BACpB,SAAS,EAAE,CAAC;4BACZ,aAAa,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,EAAE,EAAE,IAAI,CAAC;4BACpD,gBAAgB,EAAE,CAAC,GAAG,EAAE,EAAE,CACxB,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC;yBACzE,CAAC,CAAC;wBACH,OAAO,MAAM,CAAC;oBAChB,CAAC;iBACF;gBACD,gCAAc;aACf;YACD,OAAO,EAAE,CAAC,gCAAc,CAAC;SAC1B,CAAC;IACJ,CAAC;CACF,CAAA;AA9BY,sCAAa;wBAAb,aAAa;IADzB,IAAA,eAAM,EAAC,EAAE,CAAC;GACE,aAAa,CA8BzB"}
1
+ {"version":3,"file":"redlock.module.js","sourceRoot":"","sources":["../../../../../libs/gg-core/src/gg-redlock/redlock.module.ts"],"names":[],"mappings":";;;;;AAAA,2CAAuD;AAEvD,0CAA6D;AAC7D,uDAAsD;AACtD,uDAAmD;AAG5C,IAAM,aAAa,qBAAnB,MAAM,aAAa;IACjB,MAAM,CAAC,QAAQ;QACpB,OAAO;YACL,MAAM,EAAE,eAAa;YACrB,SAAS,EAAE;gBACT;oBACE,OAAO,EAAE,mCAAiB;oBAC1B,MAAM,EAAE,CAAC,sBAAW,CAAC,GAAG,CAAC;oBACzB,UAAU,EAAE,CAAC,IAAoC,EAAE,EAAE;wBACnD,MAAM,MAAM,GAAG,IAAA,4BAAiB,EAAC,IAAI,EAAE;4BACrC,cAAc,EAAE,MAAM;4BACtB,kBAAkB,EAAE,KAAK;4BACzB,gBAAgB,EAAE,KAAK;4BACvB,oBAAoB,EAAE,KAAK;4BAC3B,6BAA6B,EAAE,IAAI;4BACnC,cAAc,EAAE,IAAI;4BACpB,aAAa,EAAE,KAAK;4BACpB,cAAc,EAAE,IAAI;4BACpB,SAAS,EAAE,CAAC;4BACZ,aAAa,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,EAAE,EAAE,IAAI,CAAC;4BACpD,gBAAgB,EAAE,CAAC,GAAG,EAAE,EAAE,CACxB,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC;yBACzE,CAAC,CAAC;wBACH,OAAO,MAAM,CAAC;oBAChB,CAAC;iBACF;gBACD,gCAAc;aACf;YACD,OAAO,EAAE,CAAC,gCAAc,CAAC;SAC1B,CAAC;IACJ,CAAC;CACF,CAAA;AA/BY,sCAAa;wBAAb,aAAa;IADzB,IAAA,eAAM,EAAC,EAAE,CAAC;GACE,aAAa,CA+BzB"}