@futdevpro/nts-dynamo 1.15.17 → 1.15.20
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/_specifications/BACKLOG.md +4 -4
- package/build/_models/interfaces/global-log-settings.interface.d.ts +35 -0
- package/build/_models/interfaces/global-log-settings.interface.d.ts.map +1 -1
- package/build/_modules/admin-auth/_models/admin-api-key-config.interface.d.ts +32 -0
- package/build/_modules/admin-auth/_models/admin-api-key-config.interface.d.ts.map +1 -0
- package/build/_modules/admin-auth/_models/admin-api-key-config.interface.js +3 -0
- package/build/_modules/admin-auth/_models/admin-api-key-config.interface.js.map +1 -0
- package/build/_modules/admin-auth/admin-api-key.auth-service.d.ts +90 -0
- package/build/_modules/admin-auth/admin-api-key.auth-service.d.ts.map +1 -0
- package/build/_modules/admin-auth/admin-api-key.auth-service.js +195 -0
- package/build/_modules/admin-auth/admin-api-key.auth-service.js.map +1 -0
- package/build/_modules/admin-auth/index.d.ts +3 -0
- package/build/_modules/admin-auth/index.d.ts.map +1 -0
- package/build/_modules/admin-auth/index.js +6 -0
- package/build/_modules/admin-auth/index.js.map +1 -0
- package/build/_modules/logs/file-log.service.d.ts +87 -0
- package/build/_modules/logs/file-log.service.d.ts.map +1 -0
- package/build/_modules/logs/file-log.service.js +267 -0
- package/build/_modules/logs/file-log.service.js.map +1 -0
- package/build/_modules/logs/get-logs-routing-module.util.d.ts +19 -0
- package/build/_modules/logs/get-logs-routing-module.util.d.ts.map +1 -0
- package/build/_modules/logs/get-logs-routing-module.util.js +32 -0
- package/build/_modules/logs/get-logs-routing-module.util.js.map +1 -0
- package/build/_modules/logs/index.d.ts +5 -0
- package/build/_modules/logs/index.d.ts.map +1 -0
- package/build/_modules/logs/index.js +12 -0
- package/build/_modules/logs/index.js.map +1 -0
- package/build/_modules/logs/log-buffer.service.d.ts +38 -0
- package/build/_modules/logs/log-buffer.service.d.ts.map +1 -0
- package/build/_modules/logs/log-buffer.service.js +97 -0
- package/build/_modules/logs/log-buffer.service.js.map +1 -0
- package/build/_modules/logs/logs.controller.d.ts +27 -0
- package/build/_modules/logs/logs.controller.d.ts.map +1 -0
- package/build/_modules/logs/logs.controller.js +90 -0
- package/build/_modules/logs/logs.controller.js.map +1 -0
- package/build/_modules/logs/logs.service.d.ts +40 -0
- package/build/_modules/logs/logs.service.d.ts.map +1 -0
- package/build/_modules/logs/logs.service.js +97 -0
- package/build/_modules/logs/logs.service.js.map +1 -0
- package/package.json +1 -1
- package/pipeline.cicd.config.json +3 -1
- package/src/_models/interfaces/global-log-settings.interface.ts +36 -0
- package/src/_modules/admin-auth/_models/admin-api-key-config.interface.ts +33 -0
- package/src/_modules/admin-auth/admin-api-key.auth-service.spec.ts +200 -0
- package/src/_modules/admin-auth/admin-api-key.auth-service.ts +220 -0
- package/src/_modules/admin-auth/index.ts +2 -0
- package/src/_modules/logs/file-log.service.spec.ts +202 -0
- package/src/_modules/logs/file-log.service.ts +283 -0
- package/src/_modules/logs/get-logs-routing-module.util.ts +36 -0
- package/src/_modules/logs/index.ts +4 -0
- package/src/_modules/logs/log-buffer.service.ts +101 -0
- package/src/_modules/logs/logs.controller.ts +109 -0
- package/src/_modules/logs/logs.service.ts +100 -0
|
@@ -0,0 +1,267 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DyNTS_FileLog_Service = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const fs = tslib_1.__importStar(require("fs"));
|
|
6
|
+
const path = tslib_1.__importStar(require("path"));
|
|
7
|
+
const singleton_service_base_1 = require("../../_services/base/singleton.service-base");
|
|
8
|
+
const global_settings_const_1 = require("../../_collections/global-settings.const");
|
|
9
|
+
/**
|
|
10
|
+
* Default ertekek a file-log config mezokhez. A `file_log` config nelkul
|
|
11
|
+
* az install() no-op (enabled === false).
|
|
12
|
+
*/
|
|
13
|
+
const DEFAULT_LOG_DIR = './logs/server';
|
|
14
|
+
const DEFAULT_FILENAME_PREFIX = 'server-';
|
|
15
|
+
const DEFAULT_FILENAME_SUFFIX = '.log';
|
|
16
|
+
const DEFAULT_MAX_FILE_SIZE_MB = 50;
|
|
17
|
+
const DEFAULT_MAX_FILES = 10;
|
|
18
|
+
const DEFAULT_RETENTION_DAYS = 30;
|
|
19
|
+
const DEFAULT_STRIP_ANSI = true;
|
|
20
|
+
const DEFAULT_INCLUDE_STDOUT = true;
|
|
21
|
+
const DEFAULT_INCLUDE_STDERR = true;
|
|
22
|
+
/** ANSI escape code regex (szin/formazas kodok). */
|
|
23
|
+
const ANSI_ESCAPE_REGEX = /\x1b\[[0-9;]*[a-zA-Z]/g;
|
|
24
|
+
/**
|
|
25
|
+
* File-based szerver log service — duplikalja a stdout/stderr-t per-session
|
|
26
|
+
* log fajl(ok)ba, miközben a console kimenet erintetlenul marad. Az
|
|
27
|
+
* in-memory ring buffer (`DyNTS_Logs_Service`) MELLETT mukodik, NEM
|
|
28
|
+
* helyette.
|
|
29
|
+
*
|
|
30
|
+
* Architecture:
|
|
31
|
+
* - `process.stdout.write` es `process.stderr.write` monkey-patch (NEM
|
|
32
|
+
* `console.*` — azt mar a `DyNTS_Logs_Service` patch-elheti)
|
|
33
|
+
* - Per-session fajl: `{logDir}/{prefix}YYYY-MM-DD_HH-MM-SS.log`
|
|
34
|
+
* - Sync `appendFileSync` iras — crash-safe, azonnali flush
|
|
35
|
+
* - Rotation: `maxFileSizeMb` atlepesenel uj session fajl
|
|
36
|
+
* - Retention: `maxFiles` (count) ES `retentionDays` (age) — ami elobb
|
|
37
|
+
* teljesul; install-kor + minden rotation utan futtatva
|
|
38
|
+
* - Silent failure: file IO hibak ELNYELODNEK (a file logger SOHASEM
|
|
39
|
+
* buktathatja el a szervert)
|
|
40
|
+
*
|
|
41
|
+
* Idempotens: tobbszori install() hivas no-op (a masodiktol).
|
|
42
|
+
*
|
|
43
|
+
* Hasznalat:
|
|
44
|
+
* DyNTS_global_settings.log_settings.file_log = { enabled: true, ... };
|
|
45
|
+
* DyNTS_FileLog_Service.getInstance().install(); // szerver startup
|
|
46
|
+
*/
|
|
47
|
+
class DyNTS_FileLog_Service extends singleton_service_base_1.DyNTS_SingletonServiceBase {
|
|
48
|
+
static getInstance() {
|
|
49
|
+
return DyNTS_FileLog_Service.getSingletonInstance();
|
|
50
|
+
}
|
|
51
|
+
installed = false;
|
|
52
|
+
activeLogDir = '';
|
|
53
|
+
filenamePrefix = DEFAULT_FILENAME_PREFIX;
|
|
54
|
+
maxFileSizeBytes = DEFAULT_MAX_FILE_SIZE_MB * 1024 * 1024;
|
|
55
|
+
maxFiles = DEFAULT_MAX_FILES;
|
|
56
|
+
retentionDays = DEFAULT_RETENTION_DAYS;
|
|
57
|
+
stripAnsiEnabled = DEFAULT_STRIP_ANSI;
|
|
58
|
+
currentLogPath = '';
|
|
59
|
+
currentLogSizeBytes = 0;
|
|
60
|
+
originalStdoutWrite = null;
|
|
61
|
+
originalStderrWrite = null;
|
|
62
|
+
/**
|
|
63
|
+
* Telepiti a file logger-t a `DyNTS_global_settings.log_settings.file_log`
|
|
64
|
+
* config alapjan. Ha `enabled === false` vagy hianyzik a config → no-op.
|
|
65
|
+
*
|
|
66
|
+
* Idempotens — masodszori hivas no-op (akkor is, ha kozben a config
|
|
67
|
+
* valtozott; a service uj install-jara teardownFor Testing() + install()).
|
|
68
|
+
*/
|
|
69
|
+
install() {
|
|
70
|
+
if (this.installed) {
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
const config = global_settings_const_1.DyNTS_global_settings.log_settings?.file_log;
|
|
74
|
+
if (!config || !config.enabled) {
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
// Config feldolgozas + default-ok
|
|
78
|
+
this.activeLogDir = config.logDir ?? DEFAULT_LOG_DIR;
|
|
79
|
+
this.filenamePrefix = config.filenamePrefix ?? DEFAULT_FILENAME_PREFIX;
|
|
80
|
+
this.maxFileSizeBytes = (config.maxFileSizeMb ?? DEFAULT_MAX_FILE_SIZE_MB) * 1024 * 1024;
|
|
81
|
+
this.maxFiles = config.maxFiles ?? DEFAULT_MAX_FILES;
|
|
82
|
+
this.retentionDays = config.retentionDays ?? DEFAULT_RETENTION_DAYS;
|
|
83
|
+
this.stripAnsiEnabled = config.stripAnsi ?? DEFAULT_STRIP_ANSI;
|
|
84
|
+
const includeStdout = config.includeStdout ?? DEFAULT_INCLUDE_STDOUT;
|
|
85
|
+
const includeStderr = config.includeStderr ?? DEFAULT_INCLUDE_STDERR;
|
|
86
|
+
// Log dir letrehozasa silently
|
|
87
|
+
try {
|
|
88
|
+
if (!fs.existsSync(this.activeLogDir)) {
|
|
89
|
+
fs.mkdirSync(this.activeLogDir, { recursive: true });
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
catch {
|
|
93
|
+
// Ha a mkdir bukik (pl. permission denied), no-op — silent failure
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
96
|
+
// Retention cleanup MIELOTT az uj session fajl letrejon (hogy a takaritas
|
|
97
|
+
// log uzenete ne keruljon a most induló fajlba)
|
|
98
|
+
this.cleanupOldLogs();
|
|
99
|
+
// Uj session fajl path + size init
|
|
100
|
+
this.currentLogPath = path.join(this.activeLogDir, this.buildSessionFilename());
|
|
101
|
+
this.currentLogSizeBytes = 0;
|
|
102
|
+
// Monkey-patch — az originalokat elmentjük (teardown miatt)
|
|
103
|
+
if (includeStdout) {
|
|
104
|
+
this.originalStdoutWrite = process.stdout.write.bind(process.stdout);
|
|
105
|
+
const self = this;
|
|
106
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
107
|
+
process.stdout.write = function patchedStdoutWrite(...args) {
|
|
108
|
+
self.teeWrite(args[0]);
|
|
109
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
110
|
+
return self.originalStdoutWrite(...args);
|
|
111
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
if (includeStderr) {
|
|
115
|
+
this.originalStderrWrite = process.stderr.write.bind(process.stderr);
|
|
116
|
+
const self = this;
|
|
117
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
118
|
+
process.stderr.write = function patchedStderrWrite(...args) {
|
|
119
|
+
self.teeWrite(args[0]);
|
|
120
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
121
|
+
return self.originalStderrWrite(...args);
|
|
122
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
this.installed = true;
|
|
126
|
+
// Session header — kulcs info egy helyen a fajl tetejen
|
|
127
|
+
this.teeWrite(`===== DyNTS server log session started at ${new Date().toISOString()} =====\n` +
|
|
128
|
+
`===== PID: ${process.pid}, Node: ${process.version} =====\n` +
|
|
129
|
+
`===== Retention: ${this.retentionDays} days, max files: ${this.maxFiles}, max size: ${config.maxFileSizeMb ?? DEFAULT_MAX_FILE_SIZE_MB}MB =====\n\n`);
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Visszaadja az aktualis log fajl abszolut path-jat (csak akkor letezo,
|
|
133
|
+
* ha az install() sikeresen lefutott; egyebkent ures string).
|
|
134
|
+
*/
|
|
135
|
+
getCurrentLogPath() {
|
|
136
|
+
return this.currentLogPath;
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Telepitve van-e (csak akkor true, ha az enabled === true es a setup nem bukott).
|
|
140
|
+
*/
|
|
141
|
+
isInstalled() {
|
|
142
|
+
return this.installed;
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Test-only: visszallitja az eredeti stdout/stderr.write-okat, hogy a
|
|
146
|
+
* specfajlok egymas utan tisztán futhassanak. Production code NE hivja.
|
|
147
|
+
*/
|
|
148
|
+
_teardownForTesting() {
|
|
149
|
+
if (this.originalStdoutWrite) {
|
|
150
|
+
process.stdout.write = this.originalStdoutWrite;
|
|
151
|
+
this.originalStdoutWrite = null;
|
|
152
|
+
}
|
|
153
|
+
if (this.originalStderrWrite) {
|
|
154
|
+
process.stderr.write = this.originalStderrWrite;
|
|
155
|
+
this.originalStderrWrite = null;
|
|
156
|
+
}
|
|
157
|
+
this.installed = false;
|
|
158
|
+
this.activeLogDir = '';
|
|
159
|
+
this.currentLogPath = '';
|
|
160
|
+
this.currentLogSizeBytes = 0;
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Session fajl nev: `{prefix}YYYY-MM-DD_HH-MM-SS_RANDOM.log`. Az RANDOM
|
|
164
|
+
* suffix biztositja a unique nevet ha ugyanazon a masodpercen tobb fajl jon letre
|
|
165
|
+
* (pl. rotation kozvetlenul install utan, vagy specfajlok gyors egymas utan).
|
|
166
|
+
*/
|
|
167
|
+
buildSessionFilename() {
|
|
168
|
+
const now = new Date();
|
|
169
|
+
const year = String(now.getFullYear());
|
|
170
|
+
const month = String(now.getMonth() + 1).padStart(2, '0');
|
|
171
|
+
const day = String(now.getDate()).padStart(2, '0');
|
|
172
|
+
const hour = String(now.getHours()).padStart(2, '0');
|
|
173
|
+
const minute = String(now.getMinutes()).padStart(2, '0');
|
|
174
|
+
const second = String(now.getSeconds()).padStart(2, '0');
|
|
175
|
+
const rand = Math.floor(Math.random() * 100000).toString(36);
|
|
176
|
+
return `${this.filenamePrefix}${year}-${month}-${day}_${hour}-${minute}-${second}_${rand}${DEFAULT_FILENAME_SUFFIX}`;
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Egyetlen stdout/stderr iras tee-zese az aktualis log fajlba.
|
|
180
|
+
* Hibakat csendben elnyeli — a file logger SOHASEM blokkolja a szervert.
|
|
181
|
+
* Size-trackeli az aktualis fajlt es szukseg szerint rotalja.
|
|
182
|
+
*/
|
|
183
|
+
teeWrite(data) {
|
|
184
|
+
try {
|
|
185
|
+
if (!this.currentLogPath) {
|
|
186
|
+
return;
|
|
187
|
+
}
|
|
188
|
+
const asString = typeof data === 'string'
|
|
189
|
+
? data
|
|
190
|
+
: Buffer.from(data).toString('utf-8');
|
|
191
|
+
const cleaned = this.stripAnsiEnabled ? asString.replace(ANSI_ESCAPE_REGEX, '') : asString;
|
|
192
|
+
const writeBytes = Buffer.byteLength(cleaned, 'utf-8');
|
|
193
|
+
fs.appendFileSync(this.currentLogPath, cleaned, 'utf-8');
|
|
194
|
+
this.currentLogSizeBytes += writeBytes;
|
|
195
|
+
// Rotation trigger
|
|
196
|
+
if (this.currentLogSizeBytes >= this.maxFileSizeBytes) {
|
|
197
|
+
this.rotate();
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
catch {
|
|
201
|
+
// szandekosan elnyelve — silent failure
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* Uj session fajl letrehozasa (az aktualis lezarodik). Retention cleanup-ot is
|
|
206
|
+
* vegrehajt, hogy a rotation termeszetesen tisztan tarttsa a log dir-t.
|
|
207
|
+
*/
|
|
208
|
+
rotate() {
|
|
209
|
+
try {
|
|
210
|
+
this.cleanupOldLogs();
|
|
211
|
+
this.currentLogPath = path.join(this.activeLogDir, this.buildSessionFilename());
|
|
212
|
+
this.currentLogSizeBytes = 0;
|
|
213
|
+
}
|
|
214
|
+
catch {
|
|
215
|
+
// szandekosan elnyelve
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
/**
|
|
219
|
+
* Retention takaritas: ket szabaly ami ami elobb teljesul:
|
|
220
|
+
* 1) maxFiles — ha tobb mint N log fajl van, a legregebbieket torli
|
|
221
|
+
* 2) retentionDays — `retentionDays`-nel idosebb fajlokat torli
|
|
222
|
+
*
|
|
223
|
+
* Hibakat csendben elnyel. A torolt fajlokat es az okot NEM logoljuk, hogy
|
|
224
|
+
* ne kerüljön extra szennyezes a most induló session fajlba.
|
|
225
|
+
*/
|
|
226
|
+
cleanupOldLogs() {
|
|
227
|
+
try {
|
|
228
|
+
if (!fs.existsSync(this.activeLogDir)) {
|
|
229
|
+
return;
|
|
230
|
+
}
|
|
231
|
+
const cutoffMs = Date.now() - this.retentionDays * 24 * 60 * 60 * 1000;
|
|
232
|
+
const entries = fs.readdirSync(this.activeLogDir);
|
|
233
|
+
const matchingFiles = [];
|
|
234
|
+
for (const entry of entries) {
|
|
235
|
+
if (!entry.startsWith(this.filenamePrefix) || !entry.endsWith(DEFAULT_FILENAME_SUFFIX)) {
|
|
236
|
+
continue;
|
|
237
|
+
}
|
|
238
|
+
const fullPath = path.join(this.activeLogDir, entry);
|
|
239
|
+
try {
|
|
240
|
+
const stats = fs.statSync(fullPath);
|
|
241
|
+
matchingFiles.push({ fullPath: fullPath, mtimeMs: stats.mtimeMs });
|
|
242
|
+
}
|
|
243
|
+
catch {
|
|
244
|
+
// fajlonkent elnyelve
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
// Sort: legujabb elol -> legregebbi hatul (csokkeno mtime)
|
|
248
|
+
matchingFiles.sort((a, b) => b.mtimeMs - a.mtimeMs);
|
|
249
|
+
for (let i = 0; i < matchingFiles.length; i++) {
|
|
250
|
+
const file = matchingFiles[i];
|
|
251
|
+
const tooOldByAge = file.mtimeMs < cutoffMs;
|
|
252
|
+
const tooManyByCount = i >= this.maxFiles;
|
|
253
|
+
if (tooOldByAge || tooManyByCount) {
|
|
254
|
+
try {
|
|
255
|
+
fs.unlinkSync(file.fullPath);
|
|
256
|
+
}
|
|
257
|
+
catch { /* fajlonkent elnyelve */ }
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
catch {
|
|
262
|
+
// szandekosan elnyelve
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
exports.DyNTS_FileLog_Service = DyNTS_FileLog_Service;
|
|
267
|
+
//# sourceMappingURL=file-log.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-log.service.js","sourceRoot":"","sources":["../../../src/_modules/logs/file-log.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { DyNTS_RoutingModule } from '../../_services/route/routing-module.service';
|
|
2
|
+
import { DyNTS_LogsController_Config } from './logs.controller';
|
|
3
|
+
/**
|
|
4
|
+
* Letrehoz egy /logs routing module-t a szerver logok lekeresehez.
|
|
5
|
+
*
|
|
6
|
+
* Hasznalat (auth NELKUL — barki elerheti):
|
|
7
|
+
* DyNTS_getLogsRoutingModule()
|
|
8
|
+
*
|
|
9
|
+
* Hasznalat (auth-TAL — a megadott preProcess fut elotte):
|
|
10
|
+
* DyNTS_getLogsRoutingModule({
|
|
11
|
+
* authPreProcess: authService.authenticate_sercretKey
|
|
12
|
+
* })
|
|
13
|
+
*
|
|
14
|
+
* FONTOS: A szerver indulasakor meg kell hivni:
|
|
15
|
+
* DyNTS_Logs_Service.getInstance().install()
|
|
16
|
+
* es a log_settings.logs_endpoint.enabled = true kell legyen.
|
|
17
|
+
*/
|
|
18
|
+
export declare function DyNTS_getLogsRoutingModule(config?: DyNTS_LogsController_Config): DyNTS_RoutingModule;
|
|
19
|
+
//# sourceMappingURL=get-logs-routing-module.util.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-logs-routing-module.util.d.ts","sourceRoot":"","sources":["../../../src/_modules/logs/get-logs-routing-module.util.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,mBAAmB,EAAE,MAAM,8CAA8C,CAAC;AACnF,OAAO,EAAyB,2BAA2B,EAAE,MAAM,mBAAmB,CAAC;AAEvF;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,0BAA0B,CACxC,MAAM,CAAC,EAAE,2BAA2B,GACnC,mBAAmB,CAYrB"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DyNTS_getLogsRoutingModule = DyNTS_getLogsRoutingModule;
|
|
4
|
+
const routing_module_service_1 = require("../../_services/route/routing-module.service");
|
|
5
|
+
const logs_controller_1 = require("./logs.controller");
|
|
6
|
+
/**
|
|
7
|
+
* Letrehoz egy /logs routing module-t a szerver logok lekeresehez.
|
|
8
|
+
*
|
|
9
|
+
* Hasznalat (auth NELKUL — barki elerheti):
|
|
10
|
+
* DyNTS_getLogsRoutingModule()
|
|
11
|
+
*
|
|
12
|
+
* Hasznalat (auth-TAL — a megadott preProcess fut elotte):
|
|
13
|
+
* DyNTS_getLogsRoutingModule({
|
|
14
|
+
* authPreProcess: authService.authenticate_sercretKey
|
|
15
|
+
* })
|
|
16
|
+
*
|
|
17
|
+
* FONTOS: A szerver indulasakor meg kell hivni:
|
|
18
|
+
* DyNTS_Logs_Service.getInstance().install()
|
|
19
|
+
* es a log_settings.logs_endpoint.enabled = true kell legyen.
|
|
20
|
+
*/
|
|
21
|
+
function DyNTS_getLogsRoutingModule(config) {
|
|
22
|
+
// Konfiguracio atadasa a controller-nek (static, mert a singleton elott kell)
|
|
23
|
+
if (config) {
|
|
24
|
+
logs_controller_1.DyNTS_Logs_Controller.configure(config);
|
|
25
|
+
}
|
|
26
|
+
const set = {
|
|
27
|
+
route: '/logs',
|
|
28
|
+
controllers: [logs_controller_1.DyNTS_Logs_Controller.getInstance()],
|
|
29
|
+
};
|
|
30
|
+
return new routing_module_service_1.DyNTS_RoutingModule(set);
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=get-logs-routing-module.util.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-logs-routing-module.util.js","sourceRoot":"","sources":["../../../src/_modules/logs/get-logs-routing-module.util.ts"],"names":[],"mappings":";;AAqBA,gEAcC;AAhCD,yFAAmF;AACnF,uDAAuF;AAEvF;;;;;;;;;;;;;;GAcG;AACH,SAAgB,0BAA0B,CACxC,MAAoC;IAEpC,8EAA8E;IAC9E,IAAI,MAAM,EAAE,CAAC;QACX,uCAAqB,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IAC1C,CAAC;IAED,MAAM,GAAG,GAAiC;QACxC,KAAK,EAAE,OAAO;QACd,WAAW,EAAE,CAAC,uCAAqB,CAAC,WAAW,EAAE,CAAC;KACnD,CAAC;IAEF,OAAO,IAAI,4CAAmB,CAAC,GAAG,CAAC,CAAC;AACtC,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { DyNTS_Logs_Service } from './logs.service';
|
|
2
|
+
export { DyNTS_Logs_Controller, DyNTS_LogsController_Config } from './logs.controller';
|
|
3
|
+
export { DyNTS_getLogsRoutingModule } from './get-logs-routing-module.util';
|
|
4
|
+
export { DyNTS_FileLog_Service } from './file-log.service';
|
|
5
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/_modules/logs/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,qBAAqB,EAAE,2BAA2B,EAAE,MAAM,mBAAmB,CAAC;AACvF,OAAO,EAAE,0BAA0B,EAAE,MAAM,gCAAgC,CAAC;AAC5E,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DyNTS_FileLog_Service = exports.DyNTS_getLogsRoutingModule = exports.DyNTS_Logs_Controller = exports.DyNTS_Logs_Service = void 0;
|
|
4
|
+
var logs_service_1 = require("./logs.service");
|
|
5
|
+
Object.defineProperty(exports, "DyNTS_Logs_Service", { enumerable: true, get: function () { return logs_service_1.DyNTS_Logs_Service; } });
|
|
6
|
+
var logs_controller_1 = require("./logs.controller");
|
|
7
|
+
Object.defineProperty(exports, "DyNTS_Logs_Controller", { enumerable: true, get: function () { return logs_controller_1.DyNTS_Logs_Controller; } });
|
|
8
|
+
var get_logs_routing_module_util_1 = require("./get-logs-routing-module.util");
|
|
9
|
+
Object.defineProperty(exports, "DyNTS_getLogsRoutingModule", { enumerable: true, get: function () { return get_logs_routing_module_util_1.DyNTS_getLogsRoutingModule; } });
|
|
10
|
+
var file_log_service_1 = require("./file-log.service");
|
|
11
|
+
Object.defineProperty(exports, "DyNTS_FileLog_Service", { enumerable: true, get: function () { return file_log_service_1.DyNTS_FileLog_Service; } });
|
|
12
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/_modules/logs/index.ts"],"names":[],"mappings":";;;AAAA,+CAAoD;AAA3C,kHAAA,kBAAkB,OAAA;AAC3B,qDAAuF;AAA9E,wHAAA,qBAAqB,OAAA;AAC9B,+EAA4E;AAAnE,0IAAA,0BAA0B,OAAA;AACnC,uDAA2D;AAAlD,yHAAA,qBAAqB,OAAA"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { DyNTS_SingletonService } from '../../_services/base/singleton.service';
|
|
2
|
+
/**
|
|
3
|
+
* In-memory ring buffer a szerver console kimenethez.
|
|
4
|
+
* Interceptalja a console.log/error/warn/info hivasokat es eltarolja az utolso N sort.
|
|
5
|
+
*
|
|
6
|
+
* Hasznalat:
|
|
7
|
+
* DyNTS_LogBuffer_Service.getInstance().install(); // app startup-nal
|
|
8
|
+
* DyNTS_LogBuffer_Service.getInstance().getLines(100); // utolso 100 sor
|
|
9
|
+
*/
|
|
10
|
+
export declare class DyNTS_LogBuffer_Service extends DyNTS_SingletonService {
|
|
11
|
+
static getInstance(): DyNTS_LogBuffer_Service;
|
|
12
|
+
private readonly maxLines;
|
|
13
|
+
private readonly buffer;
|
|
14
|
+
private installed;
|
|
15
|
+
/**
|
|
16
|
+
* Interceptalja a console.log/error/warn/info kimeneteket es a bufferbe irja.
|
|
17
|
+
* Egyszer kell hivni, a szerver indulasakor (lehetoleg a legelso muvelet).
|
|
18
|
+
*/
|
|
19
|
+
install(): void;
|
|
20
|
+
/**
|
|
21
|
+
* A log buffer be van-e kapcsolva (install megtortent-e).
|
|
22
|
+
*/
|
|
23
|
+
isInstalled(): boolean;
|
|
24
|
+
/**
|
|
25
|
+
* Az utolso N sor lekerdezese.
|
|
26
|
+
*/
|
|
27
|
+
getLines(count?: number): string[];
|
|
28
|
+
/**
|
|
29
|
+
* Az osszes buffered sor szama.
|
|
30
|
+
*/
|
|
31
|
+
getLineCount(): number;
|
|
32
|
+
/**
|
|
33
|
+
* Buffer uritese.
|
|
34
|
+
*/
|
|
35
|
+
clear(): void;
|
|
36
|
+
private addLine;
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=log-buffer.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"log-buffer.service.d.ts","sourceRoot":"","sources":["../../../src/_modules/logs/log-buffer.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,sBAAsB,EAAE,MAAM,wCAAwC,CAAC;AAEhF;;;;;;;GAOG;AACH,qBAAa,uBAAwB,SAAQ,sBAAsB;IAEjE,MAAM,CAAC,WAAW,IAAI,uBAAuB;IAI7C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAgB;IACzC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAgB;IACvC,OAAO,CAAC,SAAS,CAAkB;IAEnC;;;OAGG;IACH,OAAO,IAAI,IAAI;IAgCf;;OAEG;IACH,WAAW,IAAI,OAAO;IAItB;;OAEG;IACH,QAAQ,CAAC,KAAK,GAAE,MAAY,GAAG,MAAM,EAAE;IAKvC;;OAEG;IACH,YAAY,IAAI,MAAM;IAItB;;OAEG;IACH,KAAK,IAAI,IAAI;IAIb,OAAO,CAAC,OAAO;CAShB"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DyNTS_LogBuffer_Service = void 0;
|
|
4
|
+
const singleton_service_1 = require("../../_services/base/singleton.service");
|
|
5
|
+
/**
|
|
6
|
+
* In-memory ring buffer a szerver console kimenethez.
|
|
7
|
+
* Interceptalja a console.log/error/warn/info hivasokat es eltarolja az utolso N sort.
|
|
8
|
+
*
|
|
9
|
+
* Hasznalat:
|
|
10
|
+
* DyNTS_LogBuffer_Service.getInstance().install(); // app startup-nal
|
|
11
|
+
* DyNTS_LogBuffer_Service.getInstance().getLines(100); // utolso 100 sor
|
|
12
|
+
*/
|
|
13
|
+
class DyNTS_LogBuffer_Service extends singleton_service_1.DyNTS_SingletonService {
|
|
14
|
+
static getInstance() {
|
|
15
|
+
return DyNTS_LogBuffer_Service.getSingletonInstance();
|
|
16
|
+
}
|
|
17
|
+
maxLines = 2000;
|
|
18
|
+
buffer = [];
|
|
19
|
+
installed = false;
|
|
20
|
+
/**
|
|
21
|
+
* Interceptalja a console.log/error/warn/info kimeneteket es a bufferbe irja.
|
|
22
|
+
* Egyszer kell hivni, a szerver indulasakor (lehetoleg a legelso muvelet).
|
|
23
|
+
*/
|
|
24
|
+
install() {
|
|
25
|
+
if (this.installed) {
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
this.installed = true;
|
|
29
|
+
const self = this;
|
|
30
|
+
const originalLog = console.log.bind(console);
|
|
31
|
+
const originalError = console.error.bind(console);
|
|
32
|
+
const originalWarn = console.warn.bind(console);
|
|
33
|
+
const originalInfo = console.info.bind(console);
|
|
34
|
+
console.log = (...args) => {
|
|
35
|
+
self.addLine('LOG', args);
|
|
36
|
+
originalLog(...args);
|
|
37
|
+
};
|
|
38
|
+
console.error = (...args) => {
|
|
39
|
+
self.addLine('ERR', args);
|
|
40
|
+
originalError(...args);
|
|
41
|
+
};
|
|
42
|
+
console.warn = (...args) => {
|
|
43
|
+
self.addLine('WRN', args);
|
|
44
|
+
originalWarn(...args);
|
|
45
|
+
};
|
|
46
|
+
console.info = (...args) => {
|
|
47
|
+
self.addLine('INF', args);
|
|
48
|
+
originalInfo(...args);
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* A log buffer be van-e kapcsolva (install megtortent-e).
|
|
53
|
+
*/
|
|
54
|
+
isInstalled() {
|
|
55
|
+
return this.installed;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Az utolso N sor lekerdezese.
|
|
59
|
+
*/
|
|
60
|
+
getLines(count = 200) {
|
|
61
|
+
const start = Math.max(0, this.buffer.length - count);
|
|
62
|
+
return this.buffer.slice(start);
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Az osszes buffered sor szama.
|
|
66
|
+
*/
|
|
67
|
+
getLineCount() {
|
|
68
|
+
return this.buffer.length;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Buffer uritese.
|
|
72
|
+
*/
|
|
73
|
+
clear() {
|
|
74
|
+
this.buffer.length = 0;
|
|
75
|
+
}
|
|
76
|
+
addLine(level, args) {
|
|
77
|
+
const timestamp = new Date().toISOString();
|
|
78
|
+
const message = args.map(formatArg).join(' ');
|
|
79
|
+
this.buffer.push(`${timestamp} [${level}] ${message}`);
|
|
80
|
+
if (this.buffer.length > this.maxLines) {
|
|
81
|
+
this.buffer.shift();
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
exports.DyNTS_LogBuffer_Service = DyNTS_LogBuffer_Service;
|
|
86
|
+
function formatArg(arg) {
|
|
87
|
+
if (typeof arg === 'string') {
|
|
88
|
+
return arg;
|
|
89
|
+
}
|
|
90
|
+
try {
|
|
91
|
+
return JSON.stringify(arg);
|
|
92
|
+
}
|
|
93
|
+
catch {
|
|
94
|
+
return String(arg);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
//# sourceMappingURL=log-buffer.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"log-buffer.service.js","sourceRoot":"","sources":["../../../src/_modules/logs/log-buffer.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { Request, Response } from 'express';
|
|
2
|
+
import { DyNTS_Controller } from '../../_services/route/controller.service';
|
|
3
|
+
/**
|
|
4
|
+
* Overseer-szintu log parameter tipus.
|
|
5
|
+
* Az authPreProcess opcionalis — ha megadod, a /get endpoint vedett lesz.
|
|
6
|
+
*/
|
|
7
|
+
export interface DyNTS_LogsController_Config {
|
|
8
|
+
/** Opcionalis auth preprocess. Ha nincs megadva → nyilt hozzaferes. */
|
|
9
|
+
authPreProcess?: (req: Request, res: Response) => Promise<void>;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* NTS Logs Controller — beepitett /logs/get endpoint a szerver logok lekeresehez.
|
|
13
|
+
*
|
|
14
|
+
* Hasznalat:
|
|
15
|
+
* DyNTS_getLogsRoutingModule() — auth nelkul
|
|
16
|
+
* DyNTS_getLogsRoutingModule({ authPreProcess: myAuth }) — auth-tal
|
|
17
|
+
*
|
|
18
|
+
* Ha a logs_endpoint.enabled === false, a controller 503-at dob.
|
|
19
|
+
*/
|
|
20
|
+
export declare class DyNTS_Logs_Controller extends DyNTS_Controller {
|
|
21
|
+
private static config;
|
|
22
|
+
static configure(config: DyNTS_LogsController_Config): void;
|
|
23
|
+
static getInstance(): DyNTS_Logs_Controller;
|
|
24
|
+
private readonly logsService;
|
|
25
|
+
setupEndpoints(): void;
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=logs.controller.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logs.controller.d.ts","sourceRoot":"","sources":["../../../src/_modules/logs/logs.controller.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAI5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,0CAA0C,CAAC;AAK5E;;;GAGG;AACH,MAAM,WAAW,2BAA2B;IAC1C,uEAAuE;IACvE,cAAc,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACjE;AAED;;;;;;;;GAQG;AACH,qBAAa,qBAAsB,SAAQ,gBAAgB;IAEzD,OAAO,CAAC,MAAM,CAAC,MAAM,CAAmC;IAExD,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,2BAA2B,GAAG,IAAI;IAI3D,MAAM,CAAC,WAAW,IAAI,qBAAqB;IAI3C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAwD;IAEpF,cAAc,IAAI,IAAI;CAmEvB"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DyNTS_Logs_Controller = void 0;
|
|
4
|
+
const fsm_dynamo_1 = require("@futdevpro/fsm-dynamo");
|
|
5
|
+
const controller_service_1 = require("../../_services/route/controller.service");
|
|
6
|
+
const endpoint_params_control_model_1 = require("../../_models/control-models/endpoint-params.control-model");
|
|
7
|
+
const global_settings_const_1 = require("../../_collections/global-settings.const");
|
|
8
|
+
const logs_service_1 = require("./logs.service");
|
|
9
|
+
/**
|
|
10
|
+
* NTS Logs Controller — beepitett /logs/get endpoint a szerver logok lekeresehez.
|
|
11
|
+
*
|
|
12
|
+
* Hasznalat:
|
|
13
|
+
* DyNTS_getLogsRoutingModule() — auth nelkul
|
|
14
|
+
* DyNTS_getLogsRoutingModule({ authPreProcess: myAuth }) — auth-tal
|
|
15
|
+
*
|
|
16
|
+
* Ha a logs_endpoint.enabled === false, a controller 503-at dob.
|
|
17
|
+
*/
|
|
18
|
+
class DyNTS_Logs_Controller extends controller_service_1.DyNTS_Controller {
|
|
19
|
+
static config = {};
|
|
20
|
+
static configure(config) {
|
|
21
|
+
DyNTS_Logs_Controller.config = config;
|
|
22
|
+
}
|
|
23
|
+
static getInstance() {
|
|
24
|
+
return DyNTS_Logs_Controller.getSingletonInstance();
|
|
25
|
+
}
|
|
26
|
+
logsService = logs_service_1.DyNTS_Logs_Service.getInstance();
|
|
27
|
+
setupEndpoints() {
|
|
28
|
+
const preProcesses = [];
|
|
29
|
+
if (DyNTS_Logs_Controller.config.authPreProcess) {
|
|
30
|
+
preProcesses.push(DyNTS_Logs_Controller.config.authPreProcess);
|
|
31
|
+
}
|
|
32
|
+
this.endpoints = [
|
|
33
|
+
// GET /get?tail=200 — utolso N sor a log bufferbol
|
|
34
|
+
new endpoint_params_control_model_1.DyNTS_Endpoint_Params({
|
|
35
|
+
name: 'getLogs',
|
|
36
|
+
type: fsm_dynamo_1.DyFM_HttpCallType.get,
|
|
37
|
+
endpoint: '/get',
|
|
38
|
+
preProcesses: preProcesses,
|
|
39
|
+
logRequest: false,
|
|
40
|
+
tasks: [
|
|
41
|
+
async (req, res) => {
|
|
42
|
+
// Ellenorzes: be van-e kapcsolva a logs endpoint
|
|
43
|
+
if (!global_settings_const_1.DyNTS_global_settings.log_settings?.logs_endpoint?.enabled) {
|
|
44
|
+
res.status(503).send({
|
|
45
|
+
error: 'Logs endpoint is not enabled on this server.',
|
|
46
|
+
hint: 'Set DyNTS_global_settings.log_settings.logs_endpoint.enabled = true',
|
|
47
|
+
});
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
// Ellenorzes: install megtortent-e
|
|
51
|
+
if (!this.logsService.isInstalled()) {
|
|
52
|
+
res.status(503).send({
|
|
53
|
+
error: 'Log buffer is not installed. Call DyNTS_Logs_Service.getInstance().install() at server startup.',
|
|
54
|
+
});
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
const tail = Math.min(parseInt(req.query.tail) || 200, 2000);
|
|
58
|
+
const lines = this.logsService.getLines(tail);
|
|
59
|
+
res.send({
|
|
60
|
+
totalBuffered: this.logsService.getLineCount(),
|
|
61
|
+
returned: lines.length,
|
|
62
|
+
lines: lines,
|
|
63
|
+
});
|
|
64
|
+
},
|
|
65
|
+
],
|
|
66
|
+
}),
|
|
67
|
+
// DELETE /clear — buffer uritese
|
|
68
|
+
new endpoint_params_control_model_1.DyNTS_Endpoint_Params({
|
|
69
|
+
name: 'clearLogs',
|
|
70
|
+
type: fsm_dynamo_1.DyFM_HttpCallType.delete,
|
|
71
|
+
endpoint: '/clear',
|
|
72
|
+
preProcesses: preProcesses,
|
|
73
|
+
logRequest: false,
|
|
74
|
+
tasks: [
|
|
75
|
+
async (req, res) => {
|
|
76
|
+
if (!global_settings_const_1.DyNTS_global_settings.log_settings?.logs_endpoint?.enabled) {
|
|
77
|
+
res.status(503).send({ error: 'Logs endpoint is not enabled.' });
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
const count = this.logsService.getLineCount();
|
|
81
|
+
this.logsService.clear();
|
|
82
|
+
res.send({ result: 'Log buffer cleared', clearedLines: count });
|
|
83
|
+
},
|
|
84
|
+
],
|
|
85
|
+
}),
|
|
86
|
+
];
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
exports.DyNTS_Logs_Controller = DyNTS_Logs_Controller;
|
|
90
|
+
//# sourceMappingURL=logs.controller.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logs.controller.js","sourceRoot":"","sources":["../../../src/_modules/logs/logs.controller.ts"],"names":[],"mappings":"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"}
|