@futdevpro/nts-dynamo 1.15.16 → 1.15.19

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.
Files changed (38) hide show
  1. package/_specifications/BACKLOG.md +2 -2
  2. package/build/_models/interfaces/global-log-settings.interface.d.ts +35 -0
  3. package/build/_models/interfaces/global-log-settings.interface.d.ts.map +1 -1
  4. package/build/_modules/logs/file-log.service.d.ts +87 -0
  5. package/build/_modules/logs/file-log.service.d.ts.map +1 -0
  6. package/build/_modules/logs/file-log.service.js +267 -0
  7. package/build/_modules/logs/file-log.service.js.map +1 -0
  8. package/build/_modules/logs/get-logs-routing-module.util.d.ts +19 -0
  9. package/build/_modules/logs/get-logs-routing-module.util.d.ts.map +1 -0
  10. package/build/_modules/logs/get-logs-routing-module.util.js +32 -0
  11. package/build/_modules/logs/get-logs-routing-module.util.js.map +1 -0
  12. package/build/_modules/logs/index.d.ts +5 -0
  13. package/build/_modules/logs/index.d.ts.map +1 -0
  14. package/build/_modules/logs/index.js +12 -0
  15. package/build/_modules/logs/index.js.map +1 -0
  16. package/build/_modules/logs/log-buffer.service.d.ts +38 -0
  17. package/build/_modules/logs/log-buffer.service.d.ts.map +1 -0
  18. package/build/_modules/logs/log-buffer.service.js +97 -0
  19. package/build/_modules/logs/log-buffer.service.js.map +1 -0
  20. package/build/_modules/logs/logs.controller.d.ts +27 -0
  21. package/build/_modules/logs/logs.controller.d.ts.map +1 -0
  22. package/build/_modules/logs/logs.controller.js +90 -0
  23. package/build/_modules/logs/logs.controller.js.map +1 -0
  24. package/build/_modules/logs/logs.service.d.ts +40 -0
  25. package/build/_modules/logs/logs.service.d.ts.map +1 -0
  26. package/build/_modules/logs/logs.service.js +97 -0
  27. package/build/_modules/logs/logs.service.js.map +1 -0
  28. package/package.json +1 -1
  29. package/pipeline.cicd.config.json +3 -1
  30. package/pnpm-workspace.yaml +2 -0
  31. package/src/_models/interfaces/global-log-settings.interface.ts +36 -0
  32. package/src/_modules/logs/file-log.service.spec.ts +202 -0
  33. package/src/_modules/logs/file-log.service.ts +283 -0
  34. package/src/_modules/logs/get-logs-routing-module.util.ts +36 -0
  35. package/src/_modules/logs/index.ts +4 -0
  36. package/src/_modules/logs/log-buffer.service.ts +101 -0
  37. package/src/_modules/logs/logs.controller.ts +109 -0
  38. package/src/_modules/logs/logs.service.ts +100 -0
@@ -22,11 +22,11 @@
22
22
  details: Alkalmassá kell tenni a Dynamo NTS-t, hogy kiszolgálja a klienst (frontend/client-side serving)
23
23
 
24
24
  - [FEATURE] (BL-20260420-001) Átfogó file-based log kezelési rendszer
25
- status: pending
25
+ status: done
26
26
  priority: medium
27
27
  source: user
28
28
  area: backend
29
- details: Config-vezérelt log rendszer, ahol egy boolean flag-gel be lehet kapcsolni a file-ba történő log írást, és további config opciókkal lehet állítani a maximum tárolt log mennyiséget (file size / rotation / retention) és egyéb log kezelési paramétereket
29
+ details: Config-vezérelt log rendszer, ahol egy boolean flag-gel be lehet kapcsolni a file-ba történő log írást, és további config opciókkal lehet állítani a maximum tárolt log mennyiséget (file size / rotation / retention) és egyéb log kezelési paramétereket. Implementálva (2026-05-17): DyNTS_FileLog_Service (singleton) — process.stdout/stderr.write monkey-patch, per-session log fájl, sync appendFileSync (crash-safe), config: file_log.{enabled, logDir, filenamePrefix, maxFileSizeMb, maxFiles, retentionDays, stripAnsi, includeStdout, includeStderr}. Rotation size-limitre, retention by count + age (ami előbb teljesül). Silent failure (file IO sosem blokkolja a szervert). Spec: 11 spec / 0 fail. Full suite: 1133/0. Smoke verified.
30
30
 
31
31
  - [FEATURE] (BL-20260420-002) Admin API key alapú authentikációs réteg (env-ből)
32
32
  status: ⏳ pending
@@ -81,5 +81,40 @@ export interface DyNTS_GlobalLog_Settings {
81
81
  /** Max sorok szama a bufferben. Default: 2000. */
82
82
  maxEntries?: number;
83
83
  };
84
+ /**
85
+ * File-based log kiiras konfiguracio (DyNTS_FileLog_Service).
86
+ *
87
+ * Az in-memory ring buffer (DyNTS_Logs_Service) mellett mukodik — NEM
88
+ * helyette. A szerver stdout/stderr kimeneteket egy per-session log
89
+ * fajlba duplikalja (`{logDir}/{filenamePrefix}YYYY-MM-DD_HH-MM-SS.log`).
90
+ *
91
+ * Rotation: ha az aktiv fajl meghaladja a `maxFileSizeMb`-t, uj fajl jon
92
+ * letre. Retention: az `install()` + minden rotation utan a
93
+ * `maxFiles`-nel regebbi vagy a `retentionDays`-nel idosebb fajlok
94
+ * torlodnek (ami elobb teljesul).
95
+ *
96
+ * Hasznalat:
97
+ * DyNTS_FileLog_Service.getInstance().install(); // szerver startup
98
+ */
99
+ file_log?: {
100
+ /** Engedelyezve van-e a file-based logolás. Default: false. */
101
+ enabled: boolean;
102
+ /** Log mappa abszolut vagy relativ path-ja. Default: './logs/server'. */
103
+ logDir?: string;
104
+ /** Per-session fajlnev prefix. Default: 'server-'. */
105
+ filenamePrefix?: string;
106
+ /** Rotation trigger MB-ban. Default: 50. */
107
+ maxFileSizeMb?: number;
108
+ /** Retention by count — max ennyi log fajl marad meg. Default: 10. */
109
+ maxFiles?: number;
110
+ /** Retention by age — ennyi napnal regebbi fajl torlodik. Default: 30. */
111
+ retentionDays?: number;
112
+ /** ANSI escape kodok strippelese a fajl-irasnal. Default: true. */
113
+ stripAnsi?: boolean;
114
+ /** stdout interceptalasa. Default: true. */
115
+ includeStdout?: boolean;
116
+ /** stderr interceptalasa. Default: true. */
117
+ includeStderr?: boolean;
118
+ };
84
119
  }
85
120
  //# sourceMappingURL=global-log-settings.interface.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"global-log-settings.interface.d.ts","sourceRoot":"","sources":["../../../src/_models/interfaces/global-log-settings.interface.ts"],"names":[],"mappings":"AACA,MAAM,WAAW,wBAAwB;IACvC;;OAEG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAE3B,IAAI,CAAC,EAAE,OAAO,CAAC;IAEf;;OAEG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAEhB;;OAEG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB;;OAEG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB;;OAEG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IAEzB;;OAEG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAE1B;;OAEG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAE1B;;OAEG;IACH,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAG/B;;OAEG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAE3B;;OAEG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAE5B;;OAEG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAG9B;;OAEG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB;;OAEG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAE9B;;OAEG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAE9B;;OAEG;IACH,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAE/B;;OAEG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IAGrB;;OAEG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IAEzB,YAAY,CAAC,EAAE,OAAO,CAAC;IAEvB,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB;;;;OAIG;IACH,aAAa,CAAC,EAAE;QACd,2DAA2D;QAC3D,OAAO,EAAE,OAAO,CAAC;QACjB,kDAAkD;QAClD,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB,CAAC;CACH"}
1
+ {"version":3,"file":"global-log-settings.interface.d.ts","sourceRoot":"","sources":["../../../src/_models/interfaces/global-log-settings.interface.ts"],"names":[],"mappings":"AACA,MAAM,WAAW,wBAAwB;IACvC;;OAEG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAE3B,IAAI,CAAC,EAAE,OAAO,CAAC;IAEf;;OAEG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAEhB;;OAEG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB;;OAEG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB;;OAEG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IAEzB;;OAEG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAE1B;;OAEG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAE1B;;OAEG;IACH,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAG/B;;OAEG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAE3B;;OAEG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAE5B;;OAEG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAG9B;;OAEG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB;;OAEG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAE9B;;OAEG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAE9B;;OAEG;IACH,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAE/B;;OAEG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IAGrB;;OAEG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IAEzB,YAAY,CAAC,EAAE,OAAO,CAAC;IAEvB,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB;;;;OAIG;IACH,aAAa,CAAC,EAAE;QACd,2DAA2D;QAC3D,OAAO,EAAE,OAAO,CAAC;QACjB,kDAAkD;QAClD,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB,CAAC;IAEF;;;;;;;;;;;;;;OAcG;IACH,QAAQ,CAAC,EAAE;QACT,+DAA+D;QAC/D,OAAO,EAAE,OAAO,CAAC;QACjB,yEAAyE;QACzE,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,sDAAsD;QACtD,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,4CAA4C;QAC5C,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,sEAAsE;QACtE,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,0EAA0E;QAC1E,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,mEAAmE;QACnE,SAAS,CAAC,EAAE,OAAO,CAAC;QACpB,4CAA4C;QAC5C,aAAa,CAAC,EAAE,OAAO,CAAC;QACxB,4CAA4C;QAC5C,aAAa,CAAC,EAAE,OAAO,CAAC;KACzB,CAAC;CACH"}
@@ -0,0 +1,87 @@
1
+ import { DyNTS_SingletonServiceBase } from '../../_services/base/singleton.service-base';
2
+ /**
3
+ * File-based szerver log service — duplikalja a stdout/stderr-t per-session
4
+ * log fajl(ok)ba, miközben a console kimenet erintetlenul marad. Az
5
+ * in-memory ring buffer (`DyNTS_Logs_Service`) MELLETT mukodik, NEM
6
+ * helyette.
7
+ *
8
+ * Architecture:
9
+ * - `process.stdout.write` es `process.stderr.write` monkey-patch (NEM
10
+ * `console.*` — azt mar a `DyNTS_Logs_Service` patch-elheti)
11
+ * - Per-session fajl: `{logDir}/{prefix}YYYY-MM-DD_HH-MM-SS.log`
12
+ * - Sync `appendFileSync` iras — crash-safe, azonnali flush
13
+ * - Rotation: `maxFileSizeMb` atlepesenel uj session fajl
14
+ * - Retention: `maxFiles` (count) ES `retentionDays` (age) — ami elobb
15
+ * teljesul; install-kor + minden rotation utan futtatva
16
+ * - Silent failure: file IO hibak ELNYELODNEK (a file logger SOHASEM
17
+ * buktathatja el a szervert)
18
+ *
19
+ * Idempotens: tobbszori install() hivas no-op (a masodiktol).
20
+ *
21
+ * Hasznalat:
22
+ * DyNTS_global_settings.log_settings.file_log = { enabled: true, ... };
23
+ * DyNTS_FileLog_Service.getInstance().install(); // szerver startup
24
+ */
25
+ export declare class DyNTS_FileLog_Service extends DyNTS_SingletonServiceBase {
26
+ static getInstance(): DyNTS_FileLog_Service;
27
+ private installed;
28
+ private activeLogDir;
29
+ private filenamePrefix;
30
+ private maxFileSizeBytes;
31
+ private maxFiles;
32
+ private retentionDays;
33
+ private stripAnsiEnabled;
34
+ private currentLogPath;
35
+ private currentLogSizeBytes;
36
+ private originalStdoutWrite;
37
+ private originalStderrWrite;
38
+ /**
39
+ * Telepiti a file logger-t a `DyNTS_global_settings.log_settings.file_log`
40
+ * config alapjan. Ha `enabled === false` vagy hianyzik a config → no-op.
41
+ *
42
+ * Idempotens — masodszori hivas no-op (akkor is, ha kozben a config
43
+ * valtozott; a service uj install-jara teardownFor Testing() + install()).
44
+ */
45
+ install(): void;
46
+ /**
47
+ * Visszaadja az aktualis log fajl abszolut path-jat (csak akkor letezo,
48
+ * ha az install() sikeresen lefutott; egyebkent ures string).
49
+ */
50
+ getCurrentLogPath(): string;
51
+ /**
52
+ * Telepitve van-e (csak akkor true, ha az enabled === true es a setup nem bukott).
53
+ */
54
+ isInstalled(): boolean;
55
+ /**
56
+ * Test-only: visszallitja az eredeti stdout/stderr.write-okat, hogy a
57
+ * specfajlok egymas utan tisztán futhassanak. Production code NE hivja.
58
+ */
59
+ _teardownForTesting(): void;
60
+ /**
61
+ * Session fajl nev: `{prefix}YYYY-MM-DD_HH-MM-SS_RANDOM.log`. Az RANDOM
62
+ * suffix biztositja a unique nevet ha ugyanazon a masodpercen tobb fajl jon letre
63
+ * (pl. rotation kozvetlenul install utan, vagy specfajlok gyors egymas utan).
64
+ */
65
+ private buildSessionFilename;
66
+ /**
67
+ * Egyetlen stdout/stderr iras tee-zese az aktualis log fajlba.
68
+ * Hibakat csendben elnyeli — a file logger SOHASEM blokkolja a szervert.
69
+ * Size-trackeli az aktualis fajlt es szukseg szerint rotalja.
70
+ */
71
+ private teeWrite;
72
+ /**
73
+ * Uj session fajl letrehozasa (az aktualis lezarodik). Retention cleanup-ot is
74
+ * vegrehajt, hogy a rotation termeszetesen tisztan tarttsa a log dir-t.
75
+ */
76
+ private rotate;
77
+ /**
78
+ * Retention takaritas: ket szabaly ami ami elobb teljesul:
79
+ * 1) maxFiles — ha tobb mint N log fajl van, a legregebbieket torli
80
+ * 2) retentionDays — `retentionDays`-nel idosebb fajlokat torli
81
+ *
82
+ * Hibakat csendben elnyel. A torolt fajlokat es az okot NEM logoljuk, hogy
83
+ * ne kerüljön extra szennyezes a most induló session fajlba.
84
+ */
85
+ private cleanupOldLogs;
86
+ }
87
+ //# sourceMappingURL=file-log.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-log.service.d.ts","sourceRoot":"","sources":["../../../src/_modules/logs/file-log.service.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,0BAA0B,EAAE,MAAM,6CAA6C,CAAC;AAsBzF;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,qBAAa,qBAAsB,SAAQ,0BAA0B;IAEnE,MAAM,CAAC,WAAW,IAAI,qBAAqB;IAI3C,OAAO,CAAC,SAAS,CAAkB;IACnC,OAAO,CAAC,YAAY,CAAc;IAClC,OAAO,CAAC,cAAc,CAAmC;IACzD,OAAO,CAAC,gBAAgB,CAAkD;IAC1E,OAAO,CAAC,QAAQ,CAA6B;IAC7C,OAAO,CAAC,aAAa,CAAkC;IACvD,OAAO,CAAC,gBAAgB,CAA+B;IACvD,OAAO,CAAC,cAAc,CAAc;IACpC,OAAO,CAAC,mBAAmB,CAAa;IAExC,OAAO,CAAC,mBAAmB,CAA4C;IACvE,OAAO,CAAC,mBAAmB,CAA4C;IAGvE;;;;;;OAMG;IACH,OAAO,IAAI,IAAI;IAoEf;;;OAGG;IACH,iBAAiB,IAAI,MAAM;IAI3B;;OAEG;IACH,WAAW,IAAI,OAAO;IAItB;;;OAGG;IACH,mBAAmB,IAAI,IAAI;IAgB3B;;;;OAIG;IACH,OAAO,CAAC,oBAAoB;IAa5B;;;;OAIG;IACH,OAAO,CAAC,QAAQ;IAsBhB;;;OAGG;IACH,OAAO,CAAC,MAAM;IAWd;;;;;;;OAOG;IACH,OAAO,CAAC,cAAc;CAoCvB"}
@@ -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"}