@futdevpro/nts-dynamo 1.15.47 → 1.15.48
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/.dynamo/logs/cicd-pipeline/output.log +1698 -1635
- package/.dynamo/logs/cicd-pipeline/status.json +188 -188
- package/build/_modules/server/server-status/server-status.control-service.d.ts +30 -0
- package/build/_modules/server/server-status/server-status.control-service.d.ts.map +1 -1
- package/build/_modules/server/server-status/server-status.control-service.js +40 -0
- package/build/_modules/server/server-status/server-status.control-service.js.map +1 -1
- package/build/_modules/server/server-status/server-status.controller.d.ts.map +1 -1
- package/build/_modules/server/server-status/server-status.controller.js +13 -0
- package/build/_modules/server/server-status/server-status.controller.js.map +1 -1
- package/package.json +1 -1
- package/src/_modules/server/server-status/server-status.control-service.spec.ts +52 -0
- package/src/_modules/server/server-status/server-status.control-service.ts +60 -0
- package/src/_modules/server/server-status/server-status.controller.ts +16 -1
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { DyFM_RelativeDate, DyFM_ServerStatus, DyFM_Error, DyFM_Error_Statistics, DyFM_Errors, DyFM_ServerConnectionCheckResult } from '@futdevpro/fsm-dynamo';
|
|
2
2
|
import { Subscription } from 'rxjs';
|
|
3
|
+
import * as mongoose from 'mongoose';
|
|
3
4
|
import { DyNTS_SingletonService } from '../../../_services/base/singleton.service';
|
|
4
5
|
import { DyNTS_Errors_ControlService } from '../errors/errors.control-service';
|
|
5
6
|
import { DyNTS_ServerStatusSnapshot_ControlService } from './server-status-snapshot.control-service';
|
|
@@ -10,6 +11,22 @@ export interface DyNTS_ServerConnection {
|
|
|
10
11
|
accessible?: boolean;
|
|
11
12
|
lastCheck?: Date;
|
|
12
13
|
}
|
|
14
|
+
/**
|
|
15
|
+
* A readiness-probe ({@link DyNTS_ServerStatus_ControlService.checkDbReadiness}) eredménye.
|
|
16
|
+
* `ready=true` CSAK ha a DB-connection él (readyState=1) ÉS a valós ping round-trip sikerült.
|
|
17
|
+
*/
|
|
18
|
+
export interface DyNTS_DbReadiness {
|
|
19
|
+
/** ready: a DB elérhető (readyState=1 + sikeres ping). Erre adjon az endpoint 200-at, különben 503-at. */
|
|
20
|
+
ready: boolean;
|
|
21
|
+
/** mongoose connection.readyState: 0=disconnected, 1=connected, 2=connecting, 3=disconnecting. */
|
|
22
|
+
dbReadyState: number;
|
|
23
|
+
/** Sikerült-e a valós DB ping round-trip (csak readyState=1-nél próbáljuk). */
|
|
24
|
+
dbPingOk: boolean;
|
|
25
|
+
/** A szerver uptime ms-ban. */
|
|
26
|
+
uptime: number;
|
|
27
|
+
/** A szerver verziója. */
|
|
28
|
+
serverVersion: string;
|
|
29
|
+
}
|
|
13
30
|
export declare abstract class DyNTS_ServerStatus_ControlService<T_ServerStatus extends DyFM_ServerStatus, T_Error extends DyFM_Error, T_Errors extends DyFM_Errors<T_Error>, T_Errors_ControlService extends DyNTS_Errors_ControlService<T_Error, T_Errors>, T_ServerStatusSnapshot extends DyFM_ServerStatus, T_ServerStatusSnapshot_ControlService extends DyNTS_ServerStatusSnapshot_ControlService<T_ServerStatusSnapshot>> extends DyNTS_SingletonService {
|
|
14
31
|
protected abstract getErrorControlService?(set?: {
|
|
15
32
|
data?: T_Errors;
|
|
@@ -35,6 +52,19 @@ export declare abstract class DyNTS_ServerStatus_ControlService<T_ServerStatus e
|
|
|
35
52
|
protected constructor();
|
|
36
53
|
getServerStatus(issuer: string, clientVersion?: string): Promise<DyFM_ServerStatus>;
|
|
37
54
|
checkServerConnections(issuer: string): Promise<DyFM_ServerConnectionCheckResult>;
|
|
55
|
+
/**
|
|
56
|
+
* A mongoose default-connection. Külön metódus = teszt-seam (spy-jal felülírható, hogy a
|
|
57
|
+
* {@link checkDbReadiness} DB nélkül is tesztelhető legyen).
|
|
58
|
+
*/
|
|
59
|
+
protected getMongooseConnection(): mongoose.Connection;
|
|
60
|
+
/**
|
|
61
|
+
* Readiness-probe: a `/health` (liveness — "a process fut + kiszolgál") MELLETT a DB-elérhetőséget
|
|
62
|
+
* ellenőrzi. A readyState (mongoose driver-állapot) + egy valós `ping` round-trip → így a "connected
|
|
63
|
+
* de a DB nem válaszol" eset is kibukik. **Sosem dob** (a probe-nak determinisztikusan kell válaszolnia);
|
|
64
|
+
* hiba esetén `ready=false`. Az endpoint 503-at adjon, ha nem ready → az orchestrátor (k8s/docker/LB)
|
|
65
|
+
* ne irányítson forgalmat a DB-vesztett instance-ra.
|
|
66
|
+
*/
|
|
67
|
+
checkDbReadiness(): Promise<DyNTS_DbReadiness>;
|
|
38
68
|
getErrorStatistics(range: DyFM_RelativeDate, issuer: string): Promise<DyFM_Error_Statistics>;
|
|
39
69
|
protected getVersionNumeric(version: string): number;
|
|
40
70
|
protected clientVersionIsLatest(clientVersion: string): boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server-status.control-service.d.ts","sourceRoot":"","sources":["../../../../src/_modules/server/server-status/server-status.control-service.ts"],"names":[],"mappings":"AAEA,OAAO,EACU,iBAAiB,EAAa,iBAAiB,EAC9D,UAAU,EAAE,qBAAqB,EAAE,WAAW,EAG9C,gCAAgC,EAGjC,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,YAAY,EAAS,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"server-status.control-service.d.ts","sourceRoot":"","sources":["../../../../src/_modules/server/server-status/server-status.control-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.DyNTS_ServerStatus_ControlService = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
4
5
|
const fsm_dynamo_1 = require("@futdevpro/fsm-dynamo");
|
|
5
6
|
const rxjs_1 = require("rxjs");
|
|
7
|
+
const mongoose = tslib_1.__importStar(require("mongoose"));
|
|
6
8
|
const package_json_1 = require("../../../../package.json");
|
|
7
9
|
const singleton_service_1 = require("../../../_services/base/singleton.service");
|
|
8
10
|
const global_settings_const_1 = require("../../../_collections/global-settings.const");
|
|
@@ -97,6 +99,44 @@ class DyNTS_ServerStatus_ControlService extends singleton_service_1.DyNTS_Single
|
|
|
97
99
|
});
|
|
98
100
|
}
|
|
99
101
|
}
|
|
102
|
+
/**
|
|
103
|
+
* A mongoose default-connection. Külön metódus = teszt-seam (spy-jal felülírható, hogy a
|
|
104
|
+
* {@link checkDbReadiness} DB nélkül is tesztelhető legyen).
|
|
105
|
+
*/
|
|
106
|
+
getMongooseConnection() {
|
|
107
|
+
return mongoose.connection;
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Readiness-probe: a `/health` (liveness — "a process fut + kiszolgál") MELLETT a DB-elérhetőséget
|
|
111
|
+
* ellenőrzi. A readyState (mongoose driver-állapot) + egy valós `ping` round-trip → így a "connected
|
|
112
|
+
* de a DB nem válaszol" eset is kibukik. **Sosem dob** (a probe-nak determinisztikusan kell válaszolnia);
|
|
113
|
+
* hiba esetén `ready=false`. Az endpoint 503-at adjon, ha nem ready → az orchestrátor (k8s/docker/LB)
|
|
114
|
+
* ne irányítson forgalmat a DB-vesztett instance-ra.
|
|
115
|
+
*/
|
|
116
|
+
async checkDbReadiness() {
|
|
117
|
+
let dbReadyState = 0;
|
|
118
|
+
let dbPingOk = false;
|
|
119
|
+
try {
|
|
120
|
+
const connection = this.getMongooseConnection();
|
|
121
|
+
// readyState: 0=disconnected, 1=connected, 2=connecting, 3=disconnecting
|
|
122
|
+
dbReadyState = connection?.readyState ?? 0;
|
|
123
|
+
if (dbReadyState === 1) {
|
|
124
|
+
await connection.db?.admin().ping();
|
|
125
|
+
dbPingOk = true;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
catch (error) {
|
|
129
|
+
fsm_dynamo_1.DyFM_Log.warn('(checkDbReadiness) DB readiness check failed', error);
|
|
130
|
+
dbPingOk = false;
|
|
131
|
+
}
|
|
132
|
+
return {
|
|
133
|
+
ready: dbReadyState === 1 && dbPingOk,
|
|
134
|
+
dbReadyState: dbReadyState,
|
|
135
|
+
dbPingOk: dbPingOk,
|
|
136
|
+
uptime: +new Date() - +this.up,
|
|
137
|
+
serverVersion: this.serverVersion,
|
|
138
|
+
};
|
|
139
|
+
}
|
|
100
140
|
async getErrorStatistics(range, issuer) {
|
|
101
141
|
try {
|
|
102
142
|
const error_DS = this.getErrorControlService({ issuer: issuer });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server-status.control-service.js","sourceRoot":"","sources":["../../../../src/_modules/server/server-status/server-status.control-service.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"server-status.control-service.js","sourceRoot":"","sources":["../../../../src/_modules/server/server-status/server-status.control-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server-status.controller.d.ts","sourceRoot":"","sources":["../../../../src/_modules/server/server-status/server-status.controller.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAE,WAAW,EAAwC,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AACzH,OAAO,EAAE,2BAA2B,EAAE,MAAM,kCAAkC,CAAC;AAC/E,OAAO,EAAE,gBAAgB,EAAE,MAAM,6CAA6C,CAAC;AAC/E,OAAO,EAAE,qBAAqB,EAAE,MAAM,+DAA+D,CAAC;AAEtG,OAAO,
|
|
1
|
+
{"version":3,"file":"server-status.controller.d.ts","sourceRoot":"","sources":["../../../../src/_modules/server/server-status/server-status.controller.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAE,WAAW,EAAwC,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AACzH,OAAO,EAAE,2BAA2B,EAAE,MAAM,kCAAkC,CAAC;AAC/E,OAAO,EAAE,gBAAgB,EAAE,MAAM,6CAA6C,CAAC;AAC/E,OAAO,EAAE,qBAAqB,EAAE,MAAM,+DAA+D,CAAC;AAEtG,OAAO,EAAqB,iCAAiC,EAAE,MAAM,iCAAiC,CAAC;AACvG,OAAO,EAAE,yCAAyC,EAAE,MAAM,0CAA0C,CAAC;AAGrG;;;;;;;;;;;;GAYG;AACH,8BAAsB,6BAA6B,CACjD,cAAc,SAAS,iBAAiB,EACxC,OAAO,SAAS,UAAU,EAC1B,QAAQ,SAAS,WAAW,CAAC,OAAO,CAAC,EACrC,uBAAuB,SAAS,2BAA2B,CAAC,OAAO,EAAE,QAAQ,CAAC,EAC9E,sBAAsB,SAAS,iBAAiB,EAChD,qCAAqC,SAAS,yCAAyC,CAAC,sBAAsB,CAAC,EAC/G,6BAA6B,SAAS,iCAAiC,CACrE,cAAc,EACd,OAAO,EACP,QAAQ,EACR,uBAAuB,EACvB,sBAAsB,EACtB,qCAAqC,CACtC,CACD,SAAQ,gBAAgB;IAMxB,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,SAAS,EAAE,6BAA6B,CAAC;IAGrE,SAAS,CAAC,QAAQ,CAAC,mBAAmB,EAAE,qBAAqB,EAAE,CAAM;IAErE,cAAc,IAAI,IAAI;CA6FvB"}
|
|
@@ -56,6 +56,19 @@ class DyNTS_ServerStatus_Controller extends controller_service_1.DyNTS_Controlle
|
|
|
56
56
|
},
|
|
57
57
|
],
|
|
58
58
|
}),
|
|
59
|
+
// Readiness-probe: a /health-tel (liveness) szemben a DB-elérhetőséget is ellenőrzi.
|
|
60
|
+
// Public (mint a /health) — orchestrátor/LB hívja; 503 ha a DB nem ready → no traffic.
|
|
61
|
+
new endpoint_params_control_model_1.DyNTS_Endpoint_Params({
|
|
62
|
+
name: 'getServerReadiness',
|
|
63
|
+
type: fsm_dynamo_1.DyFM_HttpCallType.get,
|
|
64
|
+
endpoint: '/readiness',
|
|
65
|
+
tasks: [
|
|
66
|
+
async (req, res, issuer) => {
|
|
67
|
+
const readiness = await this.server_CS.checkDbReadiness();
|
|
68
|
+
res.status(readiness.ready ? 200 : 503).send(readiness);
|
|
69
|
+
},
|
|
70
|
+
],
|
|
71
|
+
}),
|
|
59
72
|
new endpoint_params_control_model_1.DyNTS_Endpoint_Params({
|
|
60
73
|
name: 'getServerStatusForClient',
|
|
61
74
|
type: fsm_dynamo_1.DyFM_HttpCallType.get,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server-status.controller.js","sourceRoot":"","sources":["../../../../src/_modules/server/server-status/server-status.controller.ts"],"names":[],"mappings":";;;AAGA,sDAAyH;AAEzH,oFAA+E;AAC/E,iHAAsG;AACtG,uFAAoF;AAKpF;;;;;;;;;;;;GAYG;AACH,MAAsB,6BAepB,SAAQ,qCAAgB;IAQxB,mEAAmE;IAChD,mBAAmB,GAA4B,EAAE,CAAC;IAErE,cAAc;QACZ;;;;;YAKI;QAEJ,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAC9B,MAAM,IAAI,uBAAU,CAAC;gBACnB,OAAO,EAAE,iEAAiE;gBAC1E,SAAS,EAAE,GAAG,6CAAqB,CAAC,mBAAmB,gBAAgB;aACxE,CAAC,CAAC;QACL,CAAC;QAED,mDAAmD;QAEnD,IAAI,CAAC,SAAS,GAAG;YACf,IAAI,qDAAqB,CAAC;gBACxB,IAAI,EAAE,iBAAiB;gBACvB,IAAI,EAAE,8BAAiB,CAAC,GAAG;gBAC3B,QAAQ,EAAE,SAAS;gBACnB,KAAK,EAAE;oBACL,KAAK,EAAE,GAAY,EAAE,GAAa,EAAE,MAAc,EAAiB,EAAE;wBACnE,GAAG,CAAC,IAAI,CACN,MAAM,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,MAAM,CAAC,CAC7C,CAAC;oBACJ,CAAC;iBACF;aACF,CAAC;YAEF,IAAI,qDAAqB,CAAC;gBACxB,IAAI,EAAE,iBAAiB;gBACvB,IAAI,EAAE,8BAAiB,CAAC,GAAG;gBAC3B,QAAQ,EAAE,SAAS;gBACnB,KAAK,EAAE;oBACL,KAAK,EAAE,GAAY,EAAE,GAAa,EAAE,MAAc,EAAiB,EAAE;wBACnE,GAAG,CAAC,IAAI,CACN,MAAM,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,MAAM,CAAC,CAC7C,CAAC;oBACJ,CAAC;iBACF;aACF,CAAC;YAEF,IAAI,qDAAqB,CAAC;gBACxB,IAAI,EAAE,0BAA0B;gBAChC,IAAI,EAAE,8BAAiB,CAAC,GAAG;gBAC3B,QAAQ,EAAE,kBAAkB;gBAC5B,KAAK,EAAE;oBACL,KAAK,EAAE,GAAY,EAAE,GAAa,EAAE,MAAc,EAAiB,EAAE;wBAEnE,GAAG,CAAC,IAAI,CACN,MAAM,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CACjE,CAAC;oBACJ,CAAC;iBACF;aACF,CAAC;YAEF,IAAI,qDAAqB,CAAC;gBACxB,IAAI,EAAE,oBAAoB;gBAC1B,IAAI,EAAE,8BAAiB,CAAC,GAAG;gBAC3B,QAAQ,EAAE,0BAA0B;gBACpC,KAAK,EAAE;oBACL,KAAK,EAAE,GAAY,EAAE,GAAa,EAAE,MAAc,EAAkB,EAAE;wBAEpE,GAAG,CAAC,IAAI,CACN,MAAM,IAAI,CAAC,SAAS,CAAC,kBAAkB,CACrC,GAAG,CAAC,MAAM,CAAC,KAA0B,EACrC,MAAM,CACP,CACF,CAAC;oBACJ,CAAC;iBACF;aACF,CAAC;YAEF,GAAG,IAAI,CAAC,mBAAmB;SAC5B,CAAC;IACJ,CAAC;CACF;
|
|
1
|
+
{"version":3,"file":"server-status.controller.js","sourceRoot":"","sources":["../../../../src/_modules/server/server-status/server-status.controller.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -493,6 +493,58 @@ describe('| DyNTS_ServerStatus_ControlService', () => {
|
|
|
493
493
|
});
|
|
494
494
|
});
|
|
495
495
|
|
|
496
|
+
describe('| checkDbReadiness', () => {
|
|
497
|
+
it('| should be ready when connected (readyState=1) and ping succeeds', async () => {
|
|
498
|
+
const fakeConnection = {
|
|
499
|
+
readyState: 1,
|
|
500
|
+
db: { admin: () => ({ ping: async () => ({ ok: 1 }) }) },
|
|
501
|
+
};
|
|
502
|
+
spyOn(service as any, 'getMongooseConnection').and.returnValue(fakeConnection);
|
|
503
|
+
|
|
504
|
+
const result = await service.checkDbReadiness();
|
|
505
|
+
|
|
506
|
+
expect(result.ready).toBe(true);
|
|
507
|
+
expect(result.dbReadyState).toBe(1);
|
|
508
|
+
expect(result.dbPingOk).toBe(true);
|
|
509
|
+
expect(result.serverVersion).toBe(service.serverVersion);
|
|
510
|
+
expect(result.uptime).toBeGreaterThanOrEqual(0);
|
|
511
|
+
});
|
|
512
|
+
|
|
513
|
+
it('| should NOT be ready when disconnected (readyState=0) — no ping attempted', async () => {
|
|
514
|
+
const fakeConnection = { readyState: 0, db: undefined };
|
|
515
|
+
spyOn(service as any, 'getMongooseConnection').and.returnValue(fakeConnection);
|
|
516
|
+
|
|
517
|
+
const result = await service.checkDbReadiness();
|
|
518
|
+
|
|
519
|
+
expect(result.ready).toBe(false);
|
|
520
|
+
expect(result.dbReadyState).toBe(0);
|
|
521
|
+
expect(result.dbPingOk).toBe(false);
|
|
522
|
+
});
|
|
523
|
+
|
|
524
|
+
it('| should NOT be ready when connected but ping fails (DB unresponsive)', async () => {
|
|
525
|
+
const fakeConnection = {
|
|
526
|
+
readyState: 1,
|
|
527
|
+
db: { admin: () => ({ ping: async () => { throw new Error('no pong'); } }) },
|
|
528
|
+
};
|
|
529
|
+
spyOn(service as any, 'getMongooseConnection').and.returnValue(fakeConnection);
|
|
530
|
+
|
|
531
|
+
const result = await service.checkDbReadiness();
|
|
532
|
+
|
|
533
|
+
expect(result.ready).toBe(false);
|
|
534
|
+
expect(result.dbReadyState).toBe(1);
|
|
535
|
+
expect(result.dbPingOk).toBe(false);
|
|
536
|
+
});
|
|
537
|
+
|
|
538
|
+
it('| should never throw — returns not-ready on internal error', async () => {
|
|
539
|
+
spyOn(service as any, 'getMongooseConnection').and.throwError(new Error('boom'));
|
|
540
|
+
|
|
541
|
+
const result = await service.checkDbReadiness();
|
|
542
|
+
|
|
543
|
+
expect(result.ready).toBe(false);
|
|
544
|
+
expect(result.dbReadyState).toBe(0);
|
|
545
|
+
});
|
|
546
|
+
});
|
|
547
|
+
|
|
496
548
|
describe('| getServerStatusSnapshot', () => {
|
|
497
549
|
it('| should return server status snapshot', async () => {
|
|
498
550
|
const mockStatus: TestServerStatus = new TestServerStatus({
|
|
@@ -10,6 +10,7 @@ import {
|
|
|
10
10
|
DyFM_Array
|
|
11
11
|
} from '@futdevpro/fsm-dynamo';
|
|
12
12
|
import { Subscription, timer } from 'rxjs';
|
|
13
|
+
import * as mongoose from 'mongoose';
|
|
13
14
|
|
|
14
15
|
import { version as _serverVersion } from '../../../../package.json';
|
|
15
16
|
import { DyNTS_SingletonService } from '../../../_services/base/singleton.service';
|
|
@@ -26,6 +27,23 @@ export interface DyNTS_ServerConnection {
|
|
|
26
27
|
lastCheck?: Date,
|
|
27
28
|
}
|
|
28
29
|
|
|
30
|
+
/**
|
|
31
|
+
* A readiness-probe ({@link DyNTS_ServerStatus_ControlService.checkDbReadiness}) eredménye.
|
|
32
|
+
* `ready=true` CSAK ha a DB-connection él (readyState=1) ÉS a valós ping round-trip sikerült.
|
|
33
|
+
*/
|
|
34
|
+
export interface DyNTS_DbReadiness {
|
|
35
|
+
/** ready: a DB elérhető (readyState=1 + sikeres ping). Erre adjon az endpoint 200-at, különben 503-at. */
|
|
36
|
+
ready: boolean;
|
|
37
|
+
/** mongoose connection.readyState: 0=disconnected, 1=connected, 2=connecting, 3=disconnecting. */
|
|
38
|
+
dbReadyState: number;
|
|
39
|
+
/** Sikerült-e a valós DB ping round-trip (csak readyState=1-nél próbáljuk). */
|
|
40
|
+
dbPingOk: boolean;
|
|
41
|
+
/** A szerver uptime ms-ban. */
|
|
42
|
+
uptime: number;
|
|
43
|
+
/** A szerver verziója. */
|
|
44
|
+
serverVersion: string;
|
|
45
|
+
}
|
|
46
|
+
|
|
29
47
|
export abstract class DyNTS_ServerStatus_ControlService<
|
|
30
48
|
T_ServerStatus extends DyFM_ServerStatus,
|
|
31
49
|
T_Error extends DyFM_Error,
|
|
@@ -157,6 +175,48 @@ export abstract class DyNTS_ServerStatus_ControlService<
|
|
|
157
175
|
}
|
|
158
176
|
}
|
|
159
177
|
|
|
178
|
+
/**
|
|
179
|
+
* A mongoose default-connection. Külön metódus = teszt-seam (spy-jal felülírható, hogy a
|
|
180
|
+
* {@link checkDbReadiness} DB nélkül is tesztelhető legyen).
|
|
181
|
+
*/
|
|
182
|
+
protected getMongooseConnection(): mongoose.Connection {
|
|
183
|
+
return mongoose.connection;
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
/**
|
|
187
|
+
* Readiness-probe: a `/health` (liveness — "a process fut + kiszolgál") MELLETT a DB-elérhetőséget
|
|
188
|
+
* ellenőrzi. A readyState (mongoose driver-állapot) + egy valós `ping` round-trip → így a "connected
|
|
189
|
+
* de a DB nem válaszol" eset is kibukik. **Sosem dob** (a probe-nak determinisztikusan kell válaszolnia);
|
|
190
|
+
* hiba esetén `ready=false`. Az endpoint 503-at adjon, ha nem ready → az orchestrátor (k8s/docker/LB)
|
|
191
|
+
* ne irányítson forgalmat a DB-vesztett instance-ra.
|
|
192
|
+
*/
|
|
193
|
+
async checkDbReadiness(): Promise<DyNTS_DbReadiness> {
|
|
194
|
+
let dbReadyState: number = 0;
|
|
195
|
+
let dbPingOk: boolean = false;
|
|
196
|
+
|
|
197
|
+
try {
|
|
198
|
+
const connection: mongoose.Connection = this.getMongooseConnection();
|
|
199
|
+
// readyState: 0=disconnected, 1=connected, 2=connecting, 3=disconnecting
|
|
200
|
+
dbReadyState = connection?.readyState ?? 0;
|
|
201
|
+
|
|
202
|
+
if (dbReadyState === 1) {
|
|
203
|
+
await connection.db?.admin().ping();
|
|
204
|
+
dbPingOk = true;
|
|
205
|
+
}
|
|
206
|
+
} catch (error) {
|
|
207
|
+
DyFM_Log.warn('(checkDbReadiness) DB readiness check failed', error);
|
|
208
|
+
dbPingOk = false;
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
return {
|
|
212
|
+
ready: dbReadyState === 1 && dbPingOk,
|
|
213
|
+
dbReadyState: dbReadyState,
|
|
214
|
+
dbPingOk: dbPingOk,
|
|
215
|
+
uptime: +new Date() - +this.up,
|
|
216
|
+
serverVersion: this.serverVersion,
|
|
217
|
+
};
|
|
218
|
+
}
|
|
219
|
+
|
|
160
220
|
async getErrorStatistics(
|
|
161
221
|
range: DyFM_RelativeDate,
|
|
162
222
|
issuer: string
|
|
@@ -6,7 +6,7 @@ import { DyNTS_Errors_ControlService } from '../errors/errors.control-service';
|
|
|
6
6
|
import { DyNTS_Controller } from '../../../_services/route/controller.service';
|
|
7
7
|
import { DyNTS_Endpoint_Params } from '../../../_models/control-models/endpoint-params.control-model';
|
|
8
8
|
import { DyNTS_global_settings } from '../../../_collections/global-settings.const';
|
|
9
|
-
import { DyNTS_ServerStatus_ControlService } from './server-status.control-service';
|
|
9
|
+
import { DyNTS_DbReadiness, DyNTS_ServerStatus_ControlService } from './server-status.control-service';
|
|
10
10
|
import { DyNTS_ServerStatusSnapshot_ControlService } from './server-status-snapshot.control-service';
|
|
11
11
|
|
|
12
12
|
|
|
@@ -93,6 +93,21 @@ export abstract class DyNTS_ServerStatus_Controller<
|
|
|
93
93
|
],
|
|
94
94
|
}),
|
|
95
95
|
|
|
96
|
+
// Readiness-probe: a /health-tel (liveness) szemben a DB-elérhetőséget is ellenőrzi.
|
|
97
|
+
// Public (mint a /health) — orchestrátor/LB hívja; 503 ha a DB nem ready → no traffic.
|
|
98
|
+
new DyNTS_Endpoint_Params({
|
|
99
|
+
name: 'getServerReadiness',
|
|
100
|
+
type: DyFM_HttpCallType.get,
|
|
101
|
+
endpoint: '/readiness',
|
|
102
|
+
tasks: [
|
|
103
|
+
async (req: Request, res: Response, issuer: string): Promise<void> => {
|
|
104
|
+
const readiness: DyNTS_DbReadiness = await this.server_CS.checkDbReadiness();
|
|
105
|
+
|
|
106
|
+
res.status(readiness.ready ? 200 : 503).send(readiness);
|
|
107
|
+
},
|
|
108
|
+
],
|
|
109
|
+
}),
|
|
110
|
+
|
|
96
111
|
new DyNTS_Endpoint_Params({
|
|
97
112
|
name: 'getServerStatusForClient',
|
|
98
113
|
type: DyFM_HttpCallType.get,
|