badmfck-api-server 1.4.3 → 1.4.5
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.
@@ -21,10 +21,10 @@ function getDefaultOptions() {
|
|
21
21
|
endpoints: [],
|
22
22
|
jsonLimit: "10mb",
|
23
23
|
onNetworkLog: function (log) {
|
24
|
-
(0, LogService_1.logInfo)(log);
|
24
|
+
(0, LogService_1.logInfo)("${APIService.js}", log);
|
25
25
|
},
|
26
26
|
onError: function (err) {
|
27
|
-
(0, LogService_1.logError)(err);
|
27
|
+
(0, LogService_1.logError)("${APIService.js}", err);
|
28
28
|
},
|
29
29
|
isProductionEnvironment: false
|
30
30
|
};
|
@@ -43,7 +43,7 @@ async function Initializer(services) {
|
|
43
43
|
exports.Initializer = Initializer;
|
44
44
|
class APIService extends BaseService_1.BaseService {
|
45
45
|
static nextLogID = 0;
|
46
|
-
version = "1.4.
|
46
|
+
version = "1.4.5";
|
47
47
|
options;
|
48
48
|
netLog = [];
|
49
49
|
constructor(options) {
|
@@ -177,7 +177,7 @@ class APIService extends BaseService_1.BaseService {
|
|
177
177
|
}, tme, req.path);
|
178
178
|
});
|
179
179
|
app.listen(this.options.port, () => {
|
180
|
-
(0, LogService_1.logCrit)('API Service started at: ' + this.options.port + ", with base endpoint:" + this.options.baseEndPoint + ", ver.: " + this.version);
|
180
|
+
(0, LogService_1.logCrit)('${APIService.js}', 'API Service started at: ' + this.options.port + ", with base endpoint:" + this.options.baseEndPoint + ", ver.: " + this.version);
|
181
181
|
});
|
182
182
|
}
|
183
183
|
sendResponse(res, data, requestTime, endpoint, log) {
|
@@ -42,11 +42,11 @@ class BaseEndpoint {
|
|
42
42
|
}
|
43
43
|
async init() {
|
44
44
|
if (!this.endpoints) {
|
45
|
-
(0, LogService_1.
|
45
|
+
(0, LogService_1.logCrit)("${BaseEndpoint.js}", "No endpoints registered for " + this.endpoint);
|
46
46
|
return;
|
47
47
|
}
|
48
48
|
for (let i of this.endpoints)
|
49
|
-
(0, LogService_1.logInfo)("endpoint: " + i.endpoint + " initalized, ignoreInterceptor: " + (i.ignoreInterceptor ?? "false"));
|
49
|
+
(0, LogService_1.logInfo)("${BaseEndpoint.js}", "endpoint: " + i.endpoint + " initalized, ignoreInterceptor: " + (i.ignoreInterceptor ?? "false"));
|
50
50
|
}
|
51
51
|
;
|
52
52
|
async execute(req) {
|
@@ -56,6 +56,7 @@ class BaseEndpoint {
|
|
56
56
|
return i.handler(req);
|
57
57
|
}
|
58
58
|
}
|
59
|
+
(0, LogService_1.logWarn)("${BaseEndpoint.js}", "Unhandled entrypoint: " + this.endpoint);
|
59
60
|
return {
|
60
61
|
error: DefaultErrors_1.default.NOT_IMPLEMENTED,
|
61
62
|
data: null
|
@@ -19,6 +19,8 @@ export interface ILogServiceOptions {
|
|
19
19
|
output?: (data?: any) => void;
|
20
20
|
stackSize: number;
|
21
21
|
level: LOG_LEVEL;
|
22
|
+
textLimit: number;
|
23
|
+
watchFor?: string[];
|
22
24
|
}
|
23
25
|
export declare const getDefaultLogOptions: () => ILogServiceOptions;
|
24
26
|
export declare const logInfo: (message: any, ...optional: any[]) => void;
|
@@ -32,16 +34,25 @@ export declare const S_LOG: Signal<{
|
|
32
34
|
export declare const S_LOG_CREATED: Signal<ILogItem>;
|
33
35
|
export declare const S_LOG_CHANGE_LEVEL: Signal<LOG_LEVEL>;
|
34
36
|
export declare const S_LOG_FLUSH: Signal<void>;
|
37
|
+
export declare const S_LOG_ADD_SERVICE_TO_WATCH: Signal<string>;
|
38
|
+
export declare const S_LOG_REMOVE_SERVICE_FROM_WATCH: Signal<string>;
|
39
|
+
export declare const S_LOG_SET_TEXT_LIMIT: Signal<number>;
|
35
40
|
export declare const REQ_LOG: Req<{
|
36
41
|
lastID: number;
|
37
42
|
} | null | undefined, ILogItem[]>;
|
43
|
+
export declare const REQ_LOG_UNIQUE_SERVICES: Req<void, {
|
44
|
+
name: string;
|
45
|
+
count: number;
|
46
|
+
}[]>;
|
38
47
|
export declare class LogService extends BaseService {
|
39
48
|
epoch: number;
|
40
49
|
log: ILogItem[];
|
41
50
|
options: ILogServiceOptions;
|
42
51
|
level: LOG_LEVEL;
|
52
|
+
uniqueServices: Map<string, number>;
|
43
53
|
constructor(opt?: ILogServiceOptions);
|
44
54
|
init(): Promise<void>;
|
55
|
+
checkTextLimit(): void;
|
45
56
|
createDate(d?: Date): string;
|
46
57
|
leadZero(num: number): string;
|
47
58
|
createText(data: any): string;
|
@@ -23,7 +23,7 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
23
23
|
return result;
|
24
24
|
};
|
25
25
|
Object.defineProperty(exports, "__esModule", { value: true });
|
26
|
-
exports.LogService = exports.REQ_LOG = exports.S_LOG_FLUSH = exports.S_LOG_CHANGE_LEVEL = exports.S_LOG_CREATED = exports.S_LOG = exports.logError = exports.logCrit = exports.logWarn = exports.logInfo = exports.getDefaultLogOptions = exports.LOG_LEVEL = void 0;
|
26
|
+
exports.LogService = exports.REQ_LOG_UNIQUE_SERVICES = exports.REQ_LOG = exports.S_LOG_SET_TEXT_LIMIT = exports.S_LOG_REMOVE_SERVICE_FROM_WATCH = exports.S_LOG_ADD_SERVICE_TO_WATCH = exports.S_LOG_FLUSH = exports.S_LOG_CHANGE_LEVEL = exports.S_LOG_CREATED = exports.S_LOG = exports.logError = exports.logCrit = exports.logWarn = exports.logInfo = exports.getDefaultLogOptions = exports.LOG_LEVEL = void 0;
|
27
27
|
const badmfck_signal_1 = __importStar(require("badmfck-signal"));
|
28
28
|
const BaseService_1 = require("./BaseService");
|
29
29
|
var LOG_LEVEL;
|
@@ -37,6 +37,7 @@ var LOG_LEVEL;
|
|
37
37
|
const getDefaultLogOptions = () => {
|
38
38
|
return {
|
39
39
|
stackSize: 1000,
|
40
|
+
textLimit: 1024,
|
40
41
|
level: LOG_LEVEL.ALL
|
41
42
|
};
|
42
43
|
};
|
@@ -53,20 +54,32 @@ exports.S_LOG = new badmfck_signal_1.default();
|
|
53
54
|
exports.S_LOG_CREATED = new badmfck_signal_1.default();
|
54
55
|
exports.S_LOG_CHANGE_LEVEL = new badmfck_signal_1.default();
|
55
56
|
exports.S_LOG_FLUSH = new badmfck_signal_1.default();
|
57
|
+
exports.S_LOG_ADD_SERVICE_TO_WATCH = new badmfck_signal_1.default();
|
58
|
+
exports.S_LOG_REMOVE_SERVICE_FROM_WATCH = new badmfck_signal_1.default();
|
59
|
+
exports.S_LOG_SET_TEXT_LIMIT = new badmfck_signal_1.default();
|
56
60
|
exports.REQ_LOG = new badmfck_signal_1.Req();
|
61
|
+
exports.REQ_LOG_UNIQUE_SERVICES = new badmfck_signal_1.Req();
|
57
62
|
class LogService extends BaseService_1.BaseService {
|
58
63
|
epoch = 1699476234961;
|
59
64
|
log = [];
|
60
65
|
options;
|
61
66
|
level = LOG_LEVEL.ALL;
|
67
|
+
uniqueServices = new Map();
|
62
68
|
constructor(opt) {
|
63
69
|
super("LogService");
|
64
70
|
if (!opt)
|
65
71
|
opt = (0, exports.getDefaultLogOptions)();
|
66
72
|
this.options = opt;
|
67
73
|
this.level = opt.level;
|
74
|
+
this.checkTextLimit();
|
68
75
|
}
|
69
76
|
async init() {
|
77
|
+
exports.REQ_LOG_UNIQUE_SERVICES.listener = async () => {
|
78
|
+
const arr = [];
|
79
|
+
for (let i of this.uniqueServices)
|
80
|
+
arr.push({ name: i[0], count: i[1] });
|
81
|
+
return arr;
|
82
|
+
};
|
70
83
|
exports.REQ_LOG.listener = async (req) => {
|
71
84
|
if (req && req.lastID) {
|
72
85
|
let result = this.log.filter(val => val.id > req.lastID);
|
@@ -75,6 +88,31 @@ class LogService extends BaseService_1.BaseService {
|
|
75
88
|
else
|
76
89
|
return [...this.log];
|
77
90
|
};
|
91
|
+
exports.S_LOG_SET_TEXT_LIMIT.subscribe(l => {
|
92
|
+
this.options.textLimit = l;
|
93
|
+
this.checkTextLimit();
|
94
|
+
});
|
95
|
+
exports.S_LOG_ADD_SERVICE_TO_WATCH.subscribe(service => {
|
96
|
+
if (!this.options.watchFor)
|
97
|
+
this.options.watchFor = [];
|
98
|
+
if (this.options.watchFor.find(val => val === service)) {
|
99
|
+
(0, exports.logCrit)("${LogService.js}", "Service \"" + service + "\" aleready added");
|
100
|
+
return;
|
101
|
+
}
|
102
|
+
this.options.watchFor.push(service);
|
103
|
+
});
|
104
|
+
exports.S_LOG_REMOVE_SERVICE_FROM_WATCH.subscribe(service => {
|
105
|
+
if (!this.options.watchFor)
|
106
|
+
return;
|
107
|
+
try {
|
108
|
+
const i = this.options.watchFor.findIndex(val => val === service);
|
109
|
+
if (i > -1)
|
110
|
+
this.options.watchFor.splice(i, 1);
|
111
|
+
}
|
112
|
+
catch (e) {
|
113
|
+
(0, exports.logCrit)("${LogService.js}", "Service \"" + service + "\" not deleted");
|
114
|
+
}
|
115
|
+
});
|
78
116
|
exports.S_LOG_CHANGE_LEVEL.subscribe(l => { this.level = l; });
|
79
117
|
exports.S_LOG_FLUSH.subscribe(() => this.log = []);
|
80
118
|
exports.S_LOG.subscribe((log) => {
|
@@ -88,6 +126,20 @@ class LogService extends BaseService_1.BaseService {
|
|
88
126
|
source = text.substring(2, text.length - 1);
|
89
127
|
text = "";
|
90
128
|
}
|
129
|
+
const usc = this.uniqueServices.get(source) ?? 0;
|
130
|
+
this.uniqueServices.set(source, usc + 1);
|
131
|
+
let showlog = true;
|
132
|
+
if (this.options && this.options.watchFor && Array.isArray(this.options.watchFor) && this.options.watchFor.length > 0) {
|
133
|
+
showlog = false;
|
134
|
+
for (let i of this.options.watchFor) {
|
135
|
+
if (source.toLowerCase().indexOf(i.toLowerCase()) !== -1) {
|
136
|
+
showlog = true;
|
137
|
+
break;
|
138
|
+
}
|
139
|
+
}
|
140
|
+
}
|
141
|
+
if (!showlog && this.level === LOG_LEVEL.CRIT)
|
142
|
+
showlog = true;
|
91
143
|
if (optional) {
|
92
144
|
for (let i of optional)
|
93
145
|
text += ", " + this.createText(i);
|
@@ -113,6 +165,10 @@ class LogService extends BaseService_1.BaseService {
|
|
113
165
|
});
|
114
166
|
super.init();
|
115
167
|
}
|
168
|
+
checkTextLimit() {
|
169
|
+
if (this.options.textLimit > 1024 * 4)
|
170
|
+
this.options.textLimit = 1024 * 4;
|
171
|
+
}
|
116
172
|
createDate(d) {
|
117
173
|
if (!d)
|
118
174
|
d = new Date();
|
@@ -142,14 +198,23 @@ class LogService extends BaseService_1.BaseService {
|
|
142
198
|
res = `${data}`;
|
143
199
|
}
|
144
200
|
}
|
201
|
+
if (res === "[object Map]" && "size" in data) {
|
202
|
+
try {
|
203
|
+
const arr = [];
|
204
|
+
for (let i of data)
|
205
|
+
arr.push({ key: i[0], value: i[1] });
|
206
|
+
res = "MAP (size:" + data.size + ") \n" + JSON.stringify(arr, null, "\t");
|
207
|
+
}
|
208
|
+
catch (e) { }
|
209
|
+
}
|
145
210
|
if (Array.isArray(data))
|
146
211
|
res + ", total items: " + data.length;
|
147
212
|
}
|
148
213
|
else {
|
149
214
|
res = data + "";
|
150
215
|
}
|
151
|
-
if (res.length >
|
152
|
-
res = res.substring(0,
|
216
|
+
if (res.length > this.options.textLimit)
|
217
|
+
res = res.substring(0, this.options.textLimit) + "... (total: " + res.length + ")";
|
153
218
|
return res;
|
154
219
|
}
|
155
220
|
}
|
@@ -48,18 +48,18 @@ class MysqlService extends BaseService_1.BaseService {
|
|
48
48
|
};
|
49
49
|
}
|
50
50
|
async recreatePool() {
|
51
|
-
(0, LogService_1.logInfo)("Mysql server trying to create pool");
|
51
|
+
(0, LogService_1.logInfo)("${MysqlService.js}", "Mysql server trying to create pool");
|
52
52
|
this.serviceStarted = false;
|
53
53
|
const ok = await this.createPool();
|
54
54
|
if (!ok) {
|
55
|
-
(0, LogService_1.logWarn)("Mysql server not connected, retrying in 3 sec");
|
55
|
+
(0, LogService_1.logWarn)("${MysqlService.js}", "Mysql server not connected, retrying in 3 sec");
|
56
56
|
if (this.timeoutID)
|
57
57
|
clearTimeout(this.timeoutID);
|
58
58
|
this.timeoutID = setTimeout(() => { this.recreatePool(); }, 3000);
|
59
59
|
}
|
60
60
|
else {
|
61
61
|
this.serviceStarted = true;
|
62
|
-
(0, LogService_1.logInfo)("Mysql Service started!");
|
62
|
+
(0, LogService_1.logInfo)("${MysqlService.js}", "Mysql Service started!");
|
63
63
|
}
|
64
64
|
}
|
65
65
|
async onApplicationReady() { }
|
@@ -132,7 +132,7 @@ class MysqlService extends BaseService_1.BaseService {
|
|
132
132
|
async execute(query) {
|
133
133
|
return new Promise((resolve, reject) => {
|
134
134
|
if (!this.pool) {
|
135
|
-
(0, LogService_1.logError)("No pool");
|
135
|
+
(0, LogService_1.logError)("${MysqlService.js}", "No pool");
|
136
136
|
resolve({
|
137
137
|
error: {
|
138
138
|
code: "NO_POOL",
|
@@ -149,7 +149,7 @@ class MysqlService extends BaseService_1.BaseService {
|
|
149
149
|
}
|
150
150
|
this.pool.getConnection((err, conn) => {
|
151
151
|
if (err) {
|
152
|
-
(0, LogService_1.logError)(err);
|
152
|
+
(0, LogService_1.logError)("${MysqlService.js}", err);
|
153
153
|
if (`${err}`.indexOf('ECONNREFUSED') !== -1) {
|
154
154
|
this.recreatePool();
|
155
155
|
}
|
@@ -161,7 +161,7 @@ class MysqlService extends BaseService_1.BaseService {
|
|
161
161
|
return;
|
162
162
|
}
|
163
163
|
if (!conn) {
|
164
|
-
(0, LogService_1.logCrit)(`No connection created!`);
|
164
|
+
(0, LogService_1.logCrit)("${MysqlService.js}", `No connection created!`);
|
165
165
|
resolve({
|
166
166
|
error: {
|
167
167
|
code: "NO_CONN",
|
@@ -184,7 +184,7 @@ class MysqlService extends BaseService_1.BaseService {
|
|
184
184
|
conn.release();
|
185
185
|
}
|
186
186
|
catch (e) { }
|
187
|
-
(0, LogService_1.logError)("QUERY_ERR: " + e);
|
187
|
+
(0, LogService_1.logError)("${MysqlService.js}", "QUERY_ERR: " + e);
|
188
188
|
resolve({
|
189
189
|
error: {
|
190
190
|
code: "QUERY_ERR",
|
@@ -207,7 +207,7 @@ class MysqlService extends BaseService_1.BaseService {
|
|
207
207
|
errCatched = true;
|
208
208
|
conn.release();
|
209
209
|
conn.removeAllListeners();
|
210
|
-
(0, LogService_1.logError)(err);
|
210
|
+
(0, LogService_1.logError)("${MysqlService.js}", err);
|
211
211
|
conn.removeAllListeners();
|
212
212
|
resolve({
|
213
213
|
error: {
|
@@ -222,7 +222,7 @@ class MysqlService extends BaseService_1.BaseService {
|
|
222
222
|
fields: null
|
223
223
|
});
|
224
224
|
});
|
225
|
-
(0, LogService_1.logInfo)(query);
|
225
|
+
(0, LogService_1.logInfo)("${MysqlService.js}", query);
|
226
226
|
conn.query(query, (err, results, fields) => {
|
227
227
|
conn.release();
|
228
228
|
conn.removeAllListeners();
|
@@ -230,7 +230,7 @@ class MysqlService extends BaseService_1.BaseService {
|
|
230
230
|
return;
|
231
231
|
if (err) {
|
232
232
|
const dup = `${err}`.toLowerCase().indexOf("er_dup_entry") !== -1;
|
233
|
-
(0, LogService_1.logError)(err);
|
233
|
+
(0, LogService_1.logError)("${MysqlService.js}", err);
|
234
234
|
resolve({
|
235
235
|
error: err,
|
236
236
|
data: null,
|
@@ -248,18 +248,18 @@ class MysqlService extends BaseService_1.BaseService {
|
|
248
248
|
});
|
249
249
|
}
|
250
250
|
async createPool() {
|
251
|
-
(0, LogService_1.logInfo)("Connecting to mysql: \n HOST: " + this.options.host + '\n PORT:' + this.options.port);
|
251
|
+
(0, LogService_1.logInfo)("${MysqlService.js}", "Connecting to mysql: \n HOST: " + this.options.host + '\n PORT:' + this.options.port);
|
252
252
|
let err = false;
|
253
253
|
if (this.pool) {
|
254
254
|
try {
|
255
255
|
this.pool.removeAllListeners();
|
256
256
|
this.pool.end(err => {
|
257
257
|
if (err)
|
258
|
-
(0, LogService_1.logError)(err);
|
258
|
+
(0, LogService_1.logError)("${MysqlService.js}", err);
|
259
259
|
});
|
260
260
|
}
|
261
261
|
catch (e) {
|
262
|
-
(0, LogService_1.logCrit)(e);
|
262
|
+
(0, LogService_1.logCrit)("${MysqlService.js}", e);
|
263
263
|
}
|
264
264
|
}
|
265
265
|
try {
|
@@ -274,12 +274,12 @@ class MysqlService extends BaseService_1.BaseService {
|
|
274
274
|
});
|
275
275
|
}
|
276
276
|
catch (e) {
|
277
|
-
(0, LogService_1.logCrit)("Can't connect to MYSQL!");
|
277
|
+
(0, LogService_1.logCrit)("${MysqlService.js}", "Can't connect to MYSQL!");
|
278
278
|
err = true;
|
279
279
|
}
|
280
280
|
if (!err && this.pool) {
|
281
281
|
this.pool.on("error", (evt) => {
|
282
|
-
(0, LogService_1.logError)(evt);
|
282
|
+
(0, LogService_1.logError)("${MysqlService.js}", evt);
|
283
283
|
});
|
284
284
|
}
|
285
285
|
return new Promise((res, rej) => {
|
@@ -293,7 +293,7 @@ class MysqlService extends BaseService_1.BaseService {
|
|
293
293
|
}
|
294
294
|
this.pool.getConnection((e, cnn) => {
|
295
295
|
if (e) {
|
296
|
-
(0, LogService_1.logError)(e.message);
|
296
|
+
(0, LogService_1.logError)("${MysqlService.js}", e.message);
|
297
297
|
res(false);
|
298
298
|
return;
|
299
299
|
}
|