@futdevpro/nts-dynamo 1.10.9 → 1.10.11
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/build/_collections/global-settings.const.d.ts.map +1 -1
- package/build/_collections/global-settings.const.js +1 -0
- package/build/_collections/global-settings.const.js.map +1 -1
- package/build/_models/control-models/api-call-params.control-model.d.ts.map +1 -1
- package/build/_models/control-models/api-call-params.control-model.js +1 -2
- package/build/_models/control-models/api-call-params.control-model.js.map +1 -1
- package/build/_models/control-models/app-params.control-model.d.ts.map +1 -1
- package/build/_models/control-models/app-params.control-model.js +16 -0
- package/build/_models/control-models/app-params.control-model.js.map +1 -1
- package/build/_models/control-models/endpoint-params.control-model.d.ts.map +1 -1
- package/build/_models/control-models/endpoint-params.control-model.js +1 -2
- package/build/_models/control-models/endpoint-params.control-model.js.map +1 -1
- package/build/_models/interfaces/global-settings.interface.d.ts +4 -0
- package/build/_models/interfaces/global-settings.interface.d.ts.map +1 -1
- package/build/_modules/mock/data-model.mock.spec.js +2 -2
- package/build/_modules/mock/data-model.mock.spec.js.map +1 -1
- package/build/_modules/server/error/error.controller.d.ts +13 -0
- package/build/_modules/server/error/error.controller.d.ts.map +1 -0
- package/build/_modules/server/error/error.controller.js +155 -0
- package/build/_modules/server/error/error.controller.js.map +1 -0
- package/build/_modules/server/error/error.data-service.d.ts +13 -0
- package/build/_modules/server/error/error.data-service.d.ts.map +1 -0
- package/build/_modules/server/error/error.data-service.js +249 -0
- package/build/_modules/server/error/error.data-service.js.map +1 -0
- package/build/_modules/server/index.d.ts +5 -0
- package/build/_modules/server/index.d.ts.map +1 -0
- package/build/_modules/server/index.js +10 -0
- package/build/_modules/server/index.js.map +1 -0
- package/build/_modules/server/server-status/server-status.control-service.d.ts +24 -0
- package/build/_modules/server/server-status/server-status.control-service.d.ts.map +1 -0
- package/build/_modules/server/server-status/server-status.control-service.js +102 -0
- package/build/_modules/server/server-status/server-status.control-service.js.map +1 -0
- package/build/_modules/server/server-status/server-status.controller.d.ts +9 -0
- package/build/_modules/server/server-status/server-status.controller.d.ts.map +1 -0
- package/build/_modules/server/server-status/server-status.controller.js +61 -0
- package/build/_modules/server/server-status/server-status.controller.js.map +1 -0
- package/build/_modules/socket/_services/socket-server.service.d.ts.map +1 -1
- package/build/_modules/socket/_services/socket-server.service.js.map +1 -1
- package/build/_modules/socket/index.d.ts +1 -0
- package/build/_modules/socket/index.d.ts.map +1 -1
- package/build/_modules/socket/index.js +1 -0
- package/build/_modules/socket/index.js.map +1 -1
- package/build/_services/base/data.service.d.ts +18 -10
- package/build/_services/base/data.service.d.ts.map +1 -1
- package/build/_services/base/data.service.js +151 -106
- package/build/_services/base/data.service.js.map +1 -1
- package/build/_services/base/db.service.d.ts +21 -10
- package/build/_services/base/db.service.d.ts.map +1 -1
- package/build/_services/base/db.service.js +79 -47
- package/build/_services/base/db.service.js.map +1 -1
- package/build/_services/core/api.service.d.ts.map +1 -1
- package/build/_services/core/api.service.js +18 -2
- package/build/_services/core/api.service.js.map +1 -1
- package/build/_services/core/global.service.d.ts.map +1 -1
- package/build/_services/core/global.service.js +8 -2
- package/build/_services/core/global.service.js.map +1 -1
- package/build/_services/server/app.server.d.ts.map +1 -1
- package/build/_services/server/app.server.js +13 -1
- package/build/_services/server/app.server.js.map +1 -1
- package/build/index.d.ts +0 -1
- package/build/index.d.ts.map +1 -1
- package/build/index.js +0 -1
- package/build/index.js.map +1 -1
- package/nodemon.json +2 -0
- package/package.json +11 -4
- package/src/_collections/global-settings.const.ts +1 -0
- package/src/_models/control-models/api-call-params.control-model.ts +2 -3
- package/src/_models/control-models/app-params.control-model.ts +25 -0
- package/src/_models/control-models/endpoint-params.control-model.ts +3 -3
- package/src/_models/interfaces/global-settings.interface.ts +5 -0
- package/src/_modules/mock/data-model.mock.spec.ts +2 -2
- package/src/_modules/server/error/error.controller.ts +210 -0
- package/src/_modules/server/error/error.data-service.ts +337 -0
- package/src/_modules/server/index.ts +11 -0
- package/src/_modules/server/server-status/server-status.control-service.ts +217 -0
- package/src/_modules/server/server-status/server-status.controller.ts +90 -0
- package/src/_modules/socket/_services/socket-server.service.ts +0 -1
- package/src/_modules/socket/index.ts +1 -1
- package/src/_services/base/data.service.ts +233 -164
- package/src/_services/base/db.service.ts +105 -60
- package/src/_services/core/api.service.ts +23 -2
- package/src/_services/core/global.service.ts +12 -5
- package/src/_services/server/app.server.ts +17 -4
- package/src/index.ts +0 -1
- package/tsconfig.json +1 -1
- package/build/_collections/stack.util.d.ts +0 -7
- package/build/_collections/stack.util.d.ts.map +0 -1
- package/build/_collections/stack.util.js +0 -31
- package/build/_collections/stack.util.js.map +0 -1
- package/build/_collections/stack.util.test.d.ts +0 -2
- package/build/_collections/stack.util.test.d.ts.map +0 -1
- package/build/_collections/stack.util.test.js +0 -96
- package/build/_collections/stack.util.test.js.map +0 -1
- package/src/_collections/stack.util.test.ts +0 -111
- package/src/_collections/stack.util.ts +0 -33
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
|
|
2
|
+
|
|
3
|
+
import {
|
|
4
|
+
DyFM_Metadata, DyFM_RelativeDate, DyFM_Time, DyFM_ServerStatus, DyFM_ErrorLevel, DyFM_Log,
|
|
5
|
+
DyFM_Error, DyFM_Error_Statistics, DyFM_Errors
|
|
6
|
+
} from '@futdevpro/fsm-dynamo';
|
|
7
|
+
|
|
8
|
+
import { version as _serverVersion } from '../../../../package.json';
|
|
9
|
+
import { DyNTS_SingletonService } from '../../../_services/base/singleton.service';
|
|
10
|
+
import { DyNTS_DataService } from '../../../_services/base/data.service';
|
|
11
|
+
import { DyNTS_global_settings } from '../../../_collections/global-settings.const';
|
|
12
|
+
import { DyNTS_Error_DataService } from '../error/error.data-service';
|
|
13
|
+
|
|
14
|
+
export abstract class DyNTS_ServerStatus_ControlService<
|
|
15
|
+
T_Error extends DyFM_Errors = DyFM_Errors,
|
|
16
|
+
T_ServerStatus extends DyFM_ServerStatus = DyFM_ServerStatus
|
|
17
|
+
> extends DyNTS_SingletonService {
|
|
18
|
+
|
|
19
|
+
/* static getInstance(): FDPNTS_ServerStatus_ControlService {
|
|
20
|
+
return FDPNTS_ServerStatus_ControlService.getSingletonInstance();
|
|
21
|
+
} */
|
|
22
|
+
|
|
23
|
+
/* protected constructor() {
|
|
24
|
+
super();
|
|
25
|
+
|
|
26
|
+
if (!this.getErrorDataService) {
|
|
27
|
+
throw new DyFM_Error({
|
|
28
|
+
message: 'getErrorDataService() method not implemented in ServerStatus_ControlService.',
|
|
29
|
+
status: 500,
|
|
30
|
+
errorCode: `${DyNTS_global_settings.systemShortCodeName}|FDPNTS-SSS-GED0',
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
} */
|
|
34
|
+
|
|
35
|
+
protected abstract getErrorDataService?(
|
|
36
|
+
set?: { data?: T_Error, issuer?: string }
|
|
37
|
+
): DyNTS_Error_DataService<T_Error>;
|
|
38
|
+
|
|
39
|
+
/* protected abstract error_DS: FDPNTS_Error_DataService<T_Error>; */
|
|
40
|
+
|
|
41
|
+
protected readonly up: Date = new Date();
|
|
42
|
+
|
|
43
|
+
protected readonly _serverVersionNumeric: number = this.getVersionNumeric(_serverVersion);
|
|
44
|
+
get serverVersion(): string { return _serverVersion; }
|
|
45
|
+
get serverVersionNumeric(): number { return this._serverVersionNumeric; }
|
|
46
|
+
|
|
47
|
+
protected _latestClientVersion: string;
|
|
48
|
+
protected _latestClientVersionNumeric: number;
|
|
49
|
+
get latestClientVersion(): string { return this._latestClientVersion; }
|
|
50
|
+
get latestClientVersionNumeric(): number { return this._latestClientVersionNumeric; }
|
|
51
|
+
|
|
52
|
+
override readonly defaultErrorUserMsg = 'Something went wrong';
|
|
53
|
+
|
|
54
|
+
/* private readonly serverSnapshotOverseer */
|
|
55
|
+
|
|
56
|
+
getServerStatus(clientVersion?: string): DyFM_ServerStatus {
|
|
57
|
+
return {
|
|
58
|
+
status: 'ready',
|
|
59
|
+
|
|
60
|
+
clientVersionOk: clientVersion ? this.clientVersionIsLatest(clientVersion) : false,
|
|
61
|
+
latestClientVersion: this.latestClientVersion,
|
|
62
|
+
latestClientVersionNumeric: this.latestClientVersionNumeric,
|
|
63
|
+
|
|
64
|
+
serverVersion: this.serverVersion,
|
|
65
|
+
serverNumericVersion: this.serverVersionNumeric,
|
|
66
|
+
|
|
67
|
+
uptime: +new Date() - +this.up,
|
|
68
|
+
|
|
69
|
+
memoryUsage: process.memoryUsage(),
|
|
70
|
+
cpuUsage: process.cpuUsage(),
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
async getErrorStatistics(
|
|
75
|
+
range: DyFM_RelativeDate,
|
|
76
|
+
issuer: string
|
|
77
|
+
): Promise<DyFM_Error_Statistics> {
|
|
78
|
+
try {
|
|
79
|
+
const error_DS: DyNTS_Error_DataService<T_Error> =
|
|
80
|
+
this.getErrorDataService({ issuer: issuer });
|
|
81
|
+
/* new FDPNTS_Error_DataService({ issuer: issuer }); */
|
|
82
|
+
|
|
83
|
+
const from: Date = DyFM_Time.getDateByRelativeDate(range);
|
|
84
|
+
const errors: T_Error[] = await error_DS.findDataList({
|
|
85
|
+
__created: { $gte: from },
|
|
86
|
+
});
|
|
87
|
+
|
|
88
|
+
return {
|
|
89
|
+
range: range,
|
|
90
|
+
|
|
91
|
+
allErrors: errors.length,
|
|
92
|
+
allAllErrors: errors.reduce(
|
|
93
|
+
(sum: number, error: T_Error): number => sum + error.count,
|
|
94
|
+
0
|
|
95
|
+
),
|
|
96
|
+
|
|
97
|
+
serverErrors:
|
|
98
|
+
errors.filter(
|
|
99
|
+
(error: T_Error): boolean => error.source.includes('SERVER')
|
|
100
|
+
).length,
|
|
101
|
+
clientErrors:
|
|
102
|
+
errors.filter(
|
|
103
|
+
(error: T_Error): boolean => !error.source.includes('SERVER')
|
|
104
|
+
).length,
|
|
105
|
+
allServerErrors:
|
|
106
|
+
errors.filter(
|
|
107
|
+
(error: T_Error): boolean => error.source.includes('SERVER')
|
|
108
|
+
).reduce(
|
|
109
|
+
(sum: number, error: T_Error): number => sum + error.count, 0
|
|
110
|
+
),
|
|
111
|
+
allClientErrors:
|
|
112
|
+
errors.filter(
|
|
113
|
+
(error: T_Error): boolean => !error.source.includes('SERVER')
|
|
114
|
+
).reduce(
|
|
115
|
+
(sum: number, error: T_Error): number => sum + error.count, 0
|
|
116
|
+
),
|
|
117
|
+
|
|
118
|
+
infoErrors:
|
|
119
|
+
errors.filter(
|
|
120
|
+
(error: T_Error): boolean => error.level === DyFM_ErrorLevel.info
|
|
121
|
+
).length,
|
|
122
|
+
warningErrors:
|
|
123
|
+
errors.filter(
|
|
124
|
+
(error: T_Error): boolean => error.level === DyFM_ErrorLevel.warning
|
|
125
|
+
).length,
|
|
126
|
+
errorErrors:
|
|
127
|
+
errors.filter(
|
|
128
|
+
(error: T_Error): boolean => error.level === DyFM_ErrorLevel.error
|
|
129
|
+
).length,
|
|
130
|
+
criticalErrors:
|
|
131
|
+
errors.filter(
|
|
132
|
+
(error: T_Error): boolean => error.level === DyFM_ErrorLevel.critical
|
|
133
|
+
).length,
|
|
134
|
+
|
|
135
|
+
allInfoErrors:
|
|
136
|
+
errors.filter(
|
|
137
|
+
(error: T_Error): boolean => error.level === DyFM_ErrorLevel.info
|
|
138
|
+
).reduce(
|
|
139
|
+
(sum: number, error: T_Error): number => sum + error.count, 0
|
|
140
|
+
),
|
|
141
|
+
allWarningErrors:
|
|
142
|
+
errors.filter(
|
|
143
|
+
(error: T_Error): boolean => error.level === DyFM_ErrorLevel.warning
|
|
144
|
+
).reduce(
|
|
145
|
+
(sum: number, error: T_Error): number => sum + error.count, 0
|
|
146
|
+
),
|
|
147
|
+
allErrorErrors:
|
|
148
|
+
errors.filter(
|
|
149
|
+
(error: T_Error): boolean => error.level === DyFM_ErrorLevel.error
|
|
150
|
+
).reduce(
|
|
151
|
+
(sum: number, error: T_Error): number => sum + error.count, 0
|
|
152
|
+
),
|
|
153
|
+
allCriticalErrors:
|
|
154
|
+
errors.filter(
|
|
155
|
+
(error: T_Error): boolean => error.level === DyFM_ErrorLevel.critical
|
|
156
|
+
).reduce(
|
|
157
|
+
(sum: number, error: T_Error): number => sum + error.count, 0
|
|
158
|
+
),
|
|
159
|
+
} as DyFM_Error_Statistics;
|
|
160
|
+
} catch (error) {
|
|
161
|
+
throw new DyFM_Error({
|
|
162
|
+
...this.getDefaultErrorSettings(
|
|
163
|
+
'getMatchStatistics',
|
|
164
|
+
error?.response?.data ?? error,
|
|
165
|
+
issuer
|
|
166
|
+
),
|
|
167
|
+
|
|
168
|
+
errorCode: `${DyNTS_global_settings.systemShortCodeName}|FDPNTS-SSS-GES0`,
|
|
169
|
+
});
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
protected getVersionNumeric(version: string): number {
|
|
174
|
+
return +version.replace('v', '')
|
|
175
|
+
.replace('.', '')
|
|
176
|
+
.replace('.', '')
|
|
177
|
+
.replace('-alpha', '')
|
|
178
|
+
.replace('-beta', '')
|
|
179
|
+
.replace('-test', '')
|
|
180
|
+
.replace('-dev', '');
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
protected clientVersionIsLatest(clientVersion: string): boolean {
|
|
184
|
+
const thisClientVersionNumeric: number = this.getVersionNumeric(clientVersion);
|
|
185
|
+
|
|
186
|
+
if (!this._latestClientVersionNumeric) {
|
|
187
|
+
this.setLatestClientVersion(clientVersion, thisClientVersionNumeric);
|
|
188
|
+
|
|
189
|
+
return true;
|
|
190
|
+
|
|
191
|
+
} else if (thisClientVersionNumeric === this._latestClientVersionNumeric) {
|
|
192
|
+
return true;
|
|
193
|
+
|
|
194
|
+
} else if (thisClientVersionNumeric < this._latestClientVersionNumeric) {
|
|
195
|
+
return false;
|
|
196
|
+
|
|
197
|
+
} else if (this._latestClientVersionNumeric < thisClientVersionNumeric) {
|
|
198
|
+
this.setLatestClientVersion(clientVersion, thisClientVersionNumeric);
|
|
199
|
+
|
|
200
|
+
return true;
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
DyFM_Log.error(
|
|
204
|
+
'Something went wrong, invalid version:', clientVersion,
|
|
205
|
+
thisClientVersionNumeric, _serverVersion, this.serverVersionNumeric
|
|
206
|
+
);
|
|
207
|
+
|
|
208
|
+
return false;
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
protected setLatestClientVersion(clientVersion: string, clientVersionNumeric: number): void {
|
|
212
|
+
if (!clientVersion.includes('test') && !clientVersion.includes('dev')) {
|
|
213
|
+
this._latestClientVersion = clientVersion;
|
|
214
|
+
this._latestClientVersionNumeric = clientVersionNumeric;
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
|
|
2
|
+
import { Request, Response } from 'express';
|
|
3
|
+
|
|
4
|
+
import { DyFM_Error, DyFM_HttpCallType, DyFM_RelativeDate } from '@futdevpro/fsm-dynamo';
|
|
5
|
+
import { DyNTS_ServerStatus_ControlService } from './server-status.control-service';
|
|
6
|
+
import { DyNTS_Controller } from '../../../_services/route/controller.service';
|
|
7
|
+
import { DyNTS_Endpoint_Params } from '../../../_models/control-models/endpoint-params.control-model';
|
|
8
|
+
import { DyNTS_global_settings } from '../../../_collections/global-settings.const';
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
export abstract class DyNTS_ServerStatus_Controller<
|
|
12
|
+
T_ServerStatusService extends DyNTS_ServerStatus_ControlService = any
|
|
13
|
+
> extends DyNTS_Controller {
|
|
14
|
+
|
|
15
|
+
/* static getInstance(): FDPNTS_ServerStatus_Controller {
|
|
16
|
+
return FDPNTS_ServerStatus_Controller.getSingletonInstance();
|
|
17
|
+
} */
|
|
18
|
+
|
|
19
|
+
protected abstract readonly server_CS: T_ServerStatusService;
|
|
20
|
+
|
|
21
|
+
/* protected abstract getServerService(): T_ServerStatusService; */
|
|
22
|
+
protected readonly additionalEndpoints: DyNTS_Endpoint_Params[] = [];
|
|
23
|
+
|
|
24
|
+
setupEndpoints(): void {
|
|
25
|
+
/* if (!this.getServerService) {
|
|
26
|
+
throw new DyFM_Error({
|
|
27
|
+
message: 'getServerService() method not implemented in ServerStatus_Controller.',
|
|
28
|
+
errorCode: `${DyNTS_global_settings.systemShortCodeName}|FDPNTS-SSC-001`,
|
|
29
|
+
});
|
|
30
|
+
} */
|
|
31
|
+
|
|
32
|
+
if (!this.additionalEndpoints) {
|
|
33
|
+
throw new DyFM_Error({
|
|
34
|
+
message: 'additionalEndpoints must be defined in ServerStatus_Controller.',
|
|
35
|
+
errorCode: `${DyNTS_global_settings.systemShortCodeName}|DyNTS-SSC-002`,
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/* this.serverService = this.getServerService(); */
|
|
40
|
+
|
|
41
|
+
this.endpoints = [
|
|
42
|
+
new DyNTS_Endpoint_Params({
|
|
43
|
+
name: 'getServerStatus',
|
|
44
|
+
type: DyFM_HttpCallType.get,
|
|
45
|
+
endpoint: '/status',
|
|
46
|
+
tasks: [
|
|
47
|
+
async (req: Request, res: Response): Promise<void> => {
|
|
48
|
+
res.send(
|
|
49
|
+
this.server_CS.getServerStatus()
|
|
50
|
+
);
|
|
51
|
+
},
|
|
52
|
+
],
|
|
53
|
+
}),
|
|
54
|
+
|
|
55
|
+
new DyNTS_Endpoint_Params({
|
|
56
|
+
name: 'getServerStatusForClient',
|
|
57
|
+
type: DyFM_HttpCallType.get,
|
|
58
|
+
endpoint: '/status/:version',
|
|
59
|
+
tasks: [
|
|
60
|
+
async (req: Request, res: Response): Promise<void> => {
|
|
61
|
+
|
|
62
|
+
res.send(
|
|
63
|
+
this.server_CS.getServerStatus(req.params.version)
|
|
64
|
+
);
|
|
65
|
+
},
|
|
66
|
+
],
|
|
67
|
+
}),
|
|
68
|
+
|
|
69
|
+
new DyNTS_Endpoint_Params({
|
|
70
|
+
name: 'getErrorStatistics',
|
|
71
|
+
type: DyFM_HttpCallType.get,
|
|
72
|
+
endpoint: '/statistics/error/:range',
|
|
73
|
+
tasks: [
|
|
74
|
+
async (req: Request, res: Response, issuer: string) : Promise<void> => {
|
|
75
|
+
|
|
76
|
+
res.send(
|
|
77
|
+
await this.server_CS.getErrorStatistics(
|
|
78
|
+
req.params.range as DyFM_RelativeDate,
|
|
79
|
+
issuer
|
|
80
|
+
)
|
|
81
|
+
);
|
|
82
|
+
},
|
|
83
|
+
],
|
|
84
|
+
}),
|
|
85
|
+
|
|
86
|
+
...this.additionalEndpoints,
|
|
87
|
+
];
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
|