@abyss-project/monitor 2.2.1 → 2.3.0
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/README.md +36 -0
- package/dist/__tests__/alert-log-url.test.d.ts +1 -0
- package/dist/__tests__/alert-log-url.test.js +21 -0
- package/dist/__tests__/alert-log-url.test.js.map +1 -0
- package/dist/__tests__/application-log-bulk-api.test.d.ts +1 -0
- package/dist/__tests__/application-log-bulk-api.test.js +125 -0
- package/dist/__tests__/application-log-bulk-api.test.js.map +1 -0
- package/dist/__tests__/graceful-shutdown-flush.test.d.ts +1 -0
- package/dist/__tests__/graceful-shutdown-flush.test.js +253 -0
- package/dist/__tests__/graceful-shutdown-flush.test.js.map +1 -0
- package/dist/__tests__/log-queue.test.d.ts +1 -0
- package/dist/__tests__/log-queue.test.js +97 -0
- package/dist/__tests__/log-queue.test.js.map +1 -0
- package/dist/__tests__/log-shipper-preconfig.test.d.ts +1 -0
- package/dist/__tests__/log-shipper-preconfig.test.js +54 -0
- package/dist/__tests__/log-shipper-preconfig.test.js.map +1 -0
- package/dist/__tests__/log-shipper.test.d.ts +1 -0
- package/dist/__tests__/log-shipper.test.js +1040 -0
- package/dist/__tests__/log-shipper.test.js.map +1 -0
- package/dist/__tests__/log-spool.test.d.ts +1 -0
- package/dist/__tests__/log-spool.test.js +297 -0
- package/dist/__tests__/log-spool.test.js.map +1 -0
- package/dist/__tests__/logger-body-size.test.d.ts +1 -0
- package/dist/__tests__/logger-body-size.test.js +12 -0
- package/dist/__tests__/logger-body-size.test.js.map +1 -0
- package/dist/__tests__/logger-enqueues.test.d.ts +1 -0
- package/dist/__tests__/logger-enqueues.test.js +276 -0
- package/dist/__tests__/logger-enqueues.test.js.map +1 -0
- package/dist/__tests__/logger-returns-promise.test.d.ts +1 -0
- package/dist/__tests__/logger-returns-promise.test.js +27 -0
- package/dist/__tests__/logger-returns-promise.test.js.map +1 -0
- package/dist/__tests__/setconfig-keeps-queued-logs.test.d.ts +1 -0
- package/dist/__tests__/setconfig-keeps-queued-logs.test.js +59 -0
- package/dist/__tests__/setconfig-keeps-queued-logs.test.js.map +1 -0
- package/dist/__tests__/shipper-replay-on-config.test.d.ts +1 -0
- package/dist/__tests__/shipper-replay-on-config.test.js +59 -0
- package/dist/__tests__/shipper-replay-on-config.test.js.map +1 -0
- package/dist/__tests__/utils/setup-global.d.ts +1 -0
- package/dist/__tests__/utils/setup-global.js +35 -0
- package/dist/__tests__/utils/setup-global.js.map +1 -0
- package/dist/__tests__/utils/teardown-global.d.ts +1 -0
- package/dist/__tests__/utils/teardown-global.js +36 -0
- package/dist/__tests__/utils/teardown-global.js.map +1 -0
- package/dist/api/application-log.api.d.ts +5 -1
- package/dist/api/application-log.api.js +10 -1
- package/dist/api/application-log.api.js.map +1 -1
- package/dist/index.d.ts +5 -0
- package/dist/index.js +22 -0
- package/dist/index.js.map +1 -1
- package/dist/models/index.d.ts +3 -0
- package/dist/models/index.js +3 -0
- package/dist/models/index.js.map +1 -1
- package/dist/models/log-queue.model.d.ts +25 -0
- package/dist/models/log-queue.model.js +68 -0
- package/dist/models/log-queue.model.js.map +1 -0
- package/dist/models/log-shipper.model.d.ts +75 -0
- package/dist/models/log-shipper.model.js +452 -0
- package/dist/models/log-shipper.model.js.map +1 -0
- package/dist/models/log-spool.model.d.ts +32 -0
- package/dist/models/log-spool.model.js +202 -0
- package/dist/models/log-spool.model.js.map +1 -0
- package/dist/models/logger.model.d.ts +2 -0
- package/dist/models/logger.model.js +49 -70
- package/dist/models/logger.model.js.map +1 -1
- package/dist/types/interface/api/requests/application-log.request.d.ts +10 -0
- package/dist/types/interface/api/responses/application-log.response.d.ts +5 -0
- package/dist/utils/alert.utils.d.ts +1 -0
- package/dist/utils/alert.utils.js +8 -5
- package/dist/utils/alert.utils.js.map +1 -1
- package/dist/utils/graceful-shutdown.utils.d.ts +1 -0
- package/dist/utils/graceful-shutdown.utils.js +53 -8
- package/dist/utils/graceful-shutdown.utils.js.map +1 -1
- package/jest.config.ts +5 -0
- package/package.json +1 -1
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.LogSpool = void 0;
|
|
4
|
+
const node_require_1 = require("../utils/node-require");
|
|
5
|
+
const FILE_PREFIX = 'batch-';
|
|
6
|
+
const FILE_SUFFIX = '.jsonl';
|
|
7
|
+
const PROBE_PREFIX = '.probe-';
|
|
8
|
+
const TEMPORARY_PREFIX = '.tmp-';
|
|
9
|
+
const LINE_COUNT_PATTERN = /-n(\d+)\.jsonl$/;
|
|
10
|
+
function parseLineCount(fileName) {
|
|
11
|
+
const match = LINE_COUNT_PATTERN.exec(fileName);
|
|
12
|
+
return match ? Number(match[1]) : 0;
|
|
13
|
+
}
|
|
14
|
+
class LogSpool {
|
|
15
|
+
constructor(options) {
|
|
16
|
+
this.sequence = 0;
|
|
17
|
+
this.evictedCount = 0;
|
|
18
|
+
this.sizes = new Map();
|
|
19
|
+
this.totalBytes = 0;
|
|
20
|
+
this.directory = options.directory;
|
|
21
|
+
this.maxBytes = options.maxBytes;
|
|
22
|
+
let fsModule = null;
|
|
23
|
+
let pathModule = null;
|
|
24
|
+
let available = false;
|
|
25
|
+
try {
|
|
26
|
+
fsModule = (0, node_require_1.nodeRequire)('fs');
|
|
27
|
+
pathModule = (0, node_require_1.nodeRequire)('path');
|
|
28
|
+
fsModule.mkdirSync(this.directory, { recursive: true });
|
|
29
|
+
const probePath = pathModule.join(this.directory, `${PROBE_PREFIX}${process.pid}`);
|
|
30
|
+
fsModule.writeFileSync(probePath, '');
|
|
31
|
+
fsModule.rmSync(probePath, { force: true });
|
|
32
|
+
available = true;
|
|
33
|
+
}
|
|
34
|
+
catch {
|
|
35
|
+
fsModule = null;
|
|
36
|
+
pathModule = null;
|
|
37
|
+
available = false;
|
|
38
|
+
}
|
|
39
|
+
this.fs = fsModule;
|
|
40
|
+
this.path = pathModule;
|
|
41
|
+
this.available = available;
|
|
42
|
+
if (available) {
|
|
43
|
+
this.reconcile(this.listBatchNames());
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
isAvailable() {
|
|
47
|
+
return this.available;
|
|
48
|
+
}
|
|
49
|
+
async writeBatch(logs, beforeVisible) {
|
|
50
|
+
if (!this.available || !this.fs || !this.path || logs.length === 0) {
|
|
51
|
+
return null;
|
|
52
|
+
}
|
|
53
|
+
this.sequence += 1;
|
|
54
|
+
const fileName = `${FILE_PREFIX}${Date.now()}-${process.pid}-${String(this.sequence).padStart(6, '0')}-n${logs.length}${FILE_SUFFIX}`;
|
|
55
|
+
const content = logs.map((log) => JSON.stringify(log)).join('\n');
|
|
56
|
+
const finalPath = this.path.join(this.directory, fileName);
|
|
57
|
+
const temporaryPath = this.path.join(this.directory, `${TEMPORARY_PREFIX}${fileName}`);
|
|
58
|
+
try {
|
|
59
|
+
this.fs.writeFileSync(temporaryPath, content, 'utf8');
|
|
60
|
+
beforeVisible?.({ fileName });
|
|
61
|
+
this.fs.renameSync(temporaryPath, finalPath);
|
|
62
|
+
}
|
|
63
|
+
catch {
|
|
64
|
+
try {
|
|
65
|
+
this.fs.rmSync(temporaryPath, { force: true });
|
|
66
|
+
}
|
|
67
|
+
catch {
|
|
68
|
+
}
|
|
69
|
+
return null;
|
|
70
|
+
}
|
|
71
|
+
this.track(fileName, Buffer.byteLength(content, 'utf8'));
|
|
72
|
+
this.enforceMaxBytes(fileName);
|
|
73
|
+
return { fileName };
|
|
74
|
+
}
|
|
75
|
+
async removeBatch(ref) {
|
|
76
|
+
if (!this.fs || !this.path) {
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
try {
|
|
80
|
+
this.fs.rmSync(this.path.join(this.directory, ref.fileName), { force: true });
|
|
81
|
+
this.untrack(ref.fileName);
|
|
82
|
+
}
|
|
83
|
+
catch {
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
async listPendingBatches() {
|
|
87
|
+
if (!this.fs) {
|
|
88
|
+
return [];
|
|
89
|
+
}
|
|
90
|
+
const names = this.listBatchNames();
|
|
91
|
+
this.reconcile(names);
|
|
92
|
+
return names.map((fileName) => ({ fileName }));
|
|
93
|
+
}
|
|
94
|
+
async readBatch(ref) {
|
|
95
|
+
if (!this.fs || !this.path) {
|
|
96
|
+
return null;
|
|
97
|
+
}
|
|
98
|
+
let raw;
|
|
99
|
+
try {
|
|
100
|
+
raw = this.fs.readFileSync(this.path.join(this.directory, ref.fileName), 'utf8');
|
|
101
|
+
}
|
|
102
|
+
catch {
|
|
103
|
+
return null;
|
|
104
|
+
}
|
|
105
|
+
try {
|
|
106
|
+
return raw
|
|
107
|
+
.split('\n')
|
|
108
|
+
.filter((line) => line.trim().length > 0)
|
|
109
|
+
.map((line) => JSON.parse(line));
|
|
110
|
+
}
|
|
111
|
+
catch {
|
|
112
|
+
return [];
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
lineCount(ref) {
|
|
116
|
+
return parseLineCount(ref.fileName);
|
|
117
|
+
}
|
|
118
|
+
takeEvictedCount() {
|
|
119
|
+
const evicted = this.evictedCount;
|
|
120
|
+
this.evictedCount = 0;
|
|
121
|
+
return evicted;
|
|
122
|
+
}
|
|
123
|
+
listBatchNames() {
|
|
124
|
+
if (!this.fs) {
|
|
125
|
+
return [];
|
|
126
|
+
}
|
|
127
|
+
try {
|
|
128
|
+
return this.fs
|
|
129
|
+
.readdirSync(this.directory)
|
|
130
|
+
.filter((name) => !name.startsWith('.') && name.endsWith(FILE_SUFFIX))
|
|
131
|
+
.sort();
|
|
132
|
+
}
|
|
133
|
+
catch {
|
|
134
|
+
return [];
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
reconcile(sortedNames) {
|
|
138
|
+
if (!this.fs || !this.path) {
|
|
139
|
+
return;
|
|
140
|
+
}
|
|
141
|
+
const listed = new Set(sortedNames);
|
|
142
|
+
for (const name of [...this.sizes.keys()]) {
|
|
143
|
+
if (!listed.has(name)) {
|
|
144
|
+
this.untrack(name);
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
const unknown = sortedNames.filter((name) => !this.sizes.has(name));
|
|
148
|
+
if (unknown.length === 0) {
|
|
149
|
+
return;
|
|
150
|
+
}
|
|
151
|
+
for (const name of unknown) {
|
|
152
|
+
let size = 0;
|
|
153
|
+
try {
|
|
154
|
+
size = this.fs.statSync(this.path.join(this.directory, name)).size;
|
|
155
|
+
}
|
|
156
|
+
catch {
|
|
157
|
+
continue;
|
|
158
|
+
}
|
|
159
|
+
this.track(name, size);
|
|
160
|
+
}
|
|
161
|
+
const ordered = [...this.sizes.entries()].sort(([a], [b]) => (a < b ? -1 : a > b ? 1 : 0));
|
|
162
|
+
this.sizes.clear();
|
|
163
|
+
ordered.forEach(([name, size]) => this.sizes.set(name, size));
|
|
164
|
+
}
|
|
165
|
+
track(fileName, size) {
|
|
166
|
+
this.untrack(fileName);
|
|
167
|
+
this.sizes.set(fileName, size);
|
|
168
|
+
this.totalBytes += size;
|
|
169
|
+
}
|
|
170
|
+
untrack(fileName) {
|
|
171
|
+
const size = this.sizes.get(fileName);
|
|
172
|
+
if (size !== undefined) {
|
|
173
|
+
this.sizes.delete(fileName);
|
|
174
|
+
this.totalBytes -= size;
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
enforceMaxBytes(protectedFileName) {
|
|
178
|
+
if (!this.fs || !this.path || this.totalBytes <= this.maxBytes) {
|
|
179
|
+
return;
|
|
180
|
+
}
|
|
181
|
+
for (const fileName of this.sizes.keys()) {
|
|
182
|
+
if (this.totalBytes <= this.maxBytes) {
|
|
183
|
+
break;
|
|
184
|
+
}
|
|
185
|
+
if (fileName === protectedFileName) {
|
|
186
|
+
continue;
|
|
187
|
+
}
|
|
188
|
+
try {
|
|
189
|
+
this.fs.unlinkSync(this.path.join(this.directory, fileName));
|
|
190
|
+
this.evictedCount += parseLineCount(fileName);
|
|
191
|
+
this.untrack(fileName);
|
|
192
|
+
}
|
|
193
|
+
catch (error) {
|
|
194
|
+
if (error.code === 'ENOENT') {
|
|
195
|
+
this.untrack(fileName);
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
exports.LogSpool = LogSpool;
|
|
202
|
+
//# sourceMappingURL=log-spool.model.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"log-spool.model.js","sourceRoot":"","sources":["../../src/models/log-spool.model.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { APIMethod, ICreateApplicationLogBody, LogLevel } from '../types';
|
|
2
|
+
export declare const MAXIMUM_BODY_SIZE: number;
|
|
2
3
|
export type LogData = ICreateApplicationLogBody;
|
|
3
4
|
export type PayloadLog = {
|
|
4
5
|
context?: string | null;
|
|
@@ -59,6 +60,7 @@ export declare class Logger {
|
|
|
59
60
|
info(message: string, payload?: PayloadLog, options?: Options): Promise<void>;
|
|
60
61
|
warn(message: string, payload?: PayloadLog, options?: Options): Promise<void>;
|
|
61
62
|
private publishLog;
|
|
63
|
+
private mayAlert;
|
|
62
64
|
private console;
|
|
63
65
|
}
|
|
64
66
|
export {};
|
|
@@ -3,16 +3,14 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.Logger = void 0;
|
|
7
|
-
const api_1 = require("../api");
|
|
6
|
+
exports.Logger = exports.MAXIMUM_BODY_SIZE = void 0;
|
|
8
7
|
const types_1 = require("../types");
|
|
9
8
|
const uuid_1 = require("uuid");
|
|
10
9
|
const dayjs_1 = __importDefault(require("dayjs"));
|
|
11
10
|
const __1 = require("..");
|
|
12
|
-
const lodash_1 = require("lodash");
|
|
13
11
|
const alert_utils_1 = require("../utils/alert.utils");
|
|
14
|
-
const
|
|
15
|
-
|
|
12
|
+
const log_shipper_model_1 = require("./log-shipper.model");
|
|
13
|
+
exports.MAXIMUM_BODY_SIZE = 1024 * 1024;
|
|
16
14
|
let chalk;
|
|
17
15
|
if (typeof window === 'undefined') {
|
|
18
16
|
chalk = require('chalk');
|
|
@@ -40,14 +38,14 @@ class Logger {
|
|
|
40
38
|
return typeof parsed === 'number' ? parsed : types_1.LogLevel.LOG;
|
|
41
39
|
}
|
|
42
40
|
async log(message, payload = {}, options) {
|
|
43
|
-
this.publishLog({ ...payload, message, level: types_1.LogLevel.LOG }, options);
|
|
41
|
+
return this.publishLog({ ...payload, message, level: types_1.LogLevel.LOG }, options);
|
|
44
42
|
}
|
|
45
43
|
async debug(message, payload = {}, options) {
|
|
46
|
-
this.publishLog({ ...payload, message, stack: new Error().stack, level: types_1.LogLevel.LOG }, options);
|
|
44
|
+
return this.publishLog({ ...payload, message, stack: new Error().stack, level: types_1.LogLevel.LOG }, options);
|
|
47
45
|
}
|
|
48
46
|
async error(message, payload = {}, options) {
|
|
49
47
|
if (message instanceof Error) {
|
|
50
|
-
this.publishLog({
|
|
48
|
+
return this.publishLog({
|
|
51
49
|
...payload,
|
|
52
50
|
message: `${message.name} ${message.message}`,
|
|
53
51
|
stack: message.stack,
|
|
@@ -59,14 +57,14 @@ class Logger {
|
|
|
59
57
|
}, options);
|
|
60
58
|
}
|
|
61
59
|
else {
|
|
62
|
-
this.publishLog({ ...payload, message, level: types_1.LogLevel.ERROR }, options);
|
|
60
|
+
return this.publishLog({ ...payload, message, level: types_1.LogLevel.ERROR }, options);
|
|
63
61
|
}
|
|
64
62
|
}
|
|
65
63
|
async info(message, payload = {}, options) {
|
|
66
|
-
this.publishLog({ ...payload, message, level: types_1.LogLevel.INFO }, options);
|
|
64
|
+
return this.publishLog({ ...payload, message, level: types_1.LogLevel.INFO }, options);
|
|
67
65
|
}
|
|
68
66
|
async warn(message, payload = {}, options) {
|
|
69
|
-
this.publishLog({ ...payload, message, level: types_1.LogLevel.WARN }, options);
|
|
67
|
+
return this.publishLog({ ...payload, message, level: types_1.LogLevel.WARN }, options);
|
|
70
68
|
}
|
|
71
69
|
async publishLog(payload, options) {
|
|
72
70
|
const log = {
|
|
@@ -79,73 +77,54 @@ class Logger {
|
|
|
79
77
|
this.console(log, options?.customerConsoleLogger);
|
|
80
78
|
if (this.customPublishLog) {
|
|
81
79
|
await this.customPublishLog(log, options);
|
|
80
|
+
return;
|
|
82
81
|
}
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
const newSize = Buffer.byteLength(JSON.stringify(body));
|
|
99
|
-
if (newSize >= MAXIMUM_BODY_SIZE) {
|
|
100
|
-
this.warn(`Unable to save log because payload is too big (more than 1Mo even after removing responseBody and requestBody)`, {
|
|
101
|
-
requestId: body.requestId
|
|
102
|
-
? (0, lodash_1.truncate)(body.requestId, { length: MAXIMUM_FIELD_LENGTH })
|
|
103
|
-
: undefined,
|
|
104
|
-
context: body.context
|
|
105
|
-
? (0, lodash_1.truncate)(body.context, { length: MAXIMUM_FIELD_LENGTH })
|
|
106
|
-
: undefined,
|
|
107
|
-
scenario: body.scenario
|
|
108
|
-
? (0, lodash_1.truncate)(body.scenario, { length: MAXIMUM_FIELD_LENGTH })
|
|
109
|
-
: undefined,
|
|
110
|
-
});
|
|
111
|
-
return;
|
|
112
|
-
}
|
|
113
|
-
const applicationLog = await (0, api_1.createApplicationLog)({ applicationId }, { token: secretPublishToken }, body);
|
|
114
|
-
(0, __1.nonBlockingPromise)((async () => {
|
|
115
|
-
(0, alert_utils_1.sendLogAlert)({
|
|
116
|
-
...payload,
|
|
117
|
-
logData: log,
|
|
118
|
-
logger: this,
|
|
119
|
-
applicationLogId: applicationLog.data.applicationLog.id || '',
|
|
120
|
-
compact: options?.compact,
|
|
121
|
-
});
|
|
122
|
-
})(), this);
|
|
123
|
-
if (isBodyTruncated) {
|
|
124
|
-
this.warn(`Endpoint log ${applicationLog.data.applicationLog.id} has been truncated (requestBody & responseBody) because payload was too big (more than 1Mo)`, {
|
|
125
|
-
requestId: body.requestId
|
|
126
|
-
? (0, lodash_1.truncate)(body.requestId, { length: MAXIMUM_FIELD_LENGTH })
|
|
127
|
-
: undefined,
|
|
128
|
-
context: body.context
|
|
129
|
-
? (0, lodash_1.truncate)(body.context, { length: MAXIMUM_FIELD_LENGTH })
|
|
130
|
-
: undefined,
|
|
131
|
-
scenario: body.scenario
|
|
132
|
-
? (0, lodash_1.truncate)(body.scenario, { length: MAXIMUM_FIELD_LENGTH })
|
|
133
|
-
: undefined,
|
|
134
|
-
});
|
|
135
|
-
}
|
|
82
|
+
if (this.shouldDisableRemoteLogging) {
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
let size = (0, log_shipper_model_1.byteLengthOf)(JSON.stringify(log));
|
|
86
|
+
if (size >= exports.MAXIMUM_BODY_SIZE) {
|
|
87
|
+
if (log.applicationLogEndpoint?.requestBody) {
|
|
88
|
+
log.applicationLogEndpoint.requestBody = 'Payload Too Large';
|
|
89
|
+
}
|
|
90
|
+
if (log.applicationLogEndpoint?.responseBody) {
|
|
91
|
+
log.applicationLogEndpoint.responseBody = 'Payload Too Large';
|
|
92
|
+
}
|
|
93
|
+
size = (0, log_shipper_model_1.byteLengthOf)(JSON.stringify(log));
|
|
94
|
+
if (size >= exports.MAXIMUM_BODY_SIZE) {
|
|
95
|
+
console.error(`Unable to queue log: payload still exceeds ${exports.MAXIMUM_BODY_SIZE} bytes after truncating request/response bodies`);
|
|
96
|
+
return;
|
|
136
97
|
}
|
|
137
98
|
}
|
|
99
|
+
__1.AbyssMonitorCore.getShipper().enqueue(log, size);
|
|
100
|
+
if (this.mayAlert()) {
|
|
101
|
+
(0, __1.nonBlockingPromise)((async () => {
|
|
102
|
+
(0, alert_utils_1.sendLogAlert)({
|
|
103
|
+
...payload,
|
|
104
|
+
logData: log,
|
|
105
|
+
logger: this,
|
|
106
|
+
applicationLogId: null,
|
|
107
|
+
compact: options?.compact,
|
|
108
|
+
});
|
|
109
|
+
})(), this);
|
|
110
|
+
}
|
|
138
111
|
}
|
|
139
112
|
catch (error) {
|
|
140
113
|
console.error(`Unable to publish log. Error: ${error}`);
|
|
141
|
-
(
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
114
|
+
if (this.mayAlert()) {
|
|
115
|
+
(0, alert_utils_1.sendLogAlert)({
|
|
116
|
+
...payload,
|
|
117
|
+
logData: log,
|
|
118
|
+
logger: this,
|
|
119
|
+
author: 'AbyssMonitor Logger',
|
|
120
|
+
});
|
|
121
|
+
}
|
|
147
122
|
}
|
|
148
123
|
}
|
|
124
|
+
mayAlert() {
|
|
125
|
+
const { applicationId, secretPublishToken } = __1.AbyssMonitorCore.getConfig();
|
|
126
|
+
return !this.shouldDisableRemoteLogging && !!applicationId && !!secretPublishToken;
|
|
127
|
+
}
|
|
149
128
|
console(data, customConsoleLogger) {
|
|
150
129
|
if (this.shouldDisableConsoleLogging) {
|
|
151
130
|
return;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.model.js","sourceRoot":"","sources":["../../src/models/logger.model.ts"],"names":[],"mappings":";;;;;;AAAA,
|
|
1
|
+
{"version":3,"file":"logger.model.js","sourceRoot":"","sources":["../../src/models/logger.model.ts"],"names":[],"mappings":"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"}
|
|
@@ -60,3 +60,13 @@ export interface ICreateApplicationLogBody {
|
|
|
60
60
|
data?: Record<string, unknown> | null;
|
|
61
61
|
};
|
|
62
62
|
}
|
|
63
|
+
export interface ICreateBulkApplicationLogParams {
|
|
64
|
+
applicationId: string;
|
|
65
|
+
}
|
|
66
|
+
export interface ICreateBulkApplicationLogQuery {
|
|
67
|
+
token: string;
|
|
68
|
+
}
|
|
69
|
+
export interface ICreateBulkApplicationLogBody {
|
|
70
|
+
logs: ICreateApplicationLogBody[];
|
|
71
|
+
droppedCount?: number | null;
|
|
72
|
+
}
|
|
@@ -8,3 +8,8 @@ export interface ICreateApplicationLogData {
|
|
|
8
8
|
applicationLog: IApplicationLog;
|
|
9
9
|
}
|
|
10
10
|
export type ICreateApplicationLogResponse = IResponse<ICreateApplicationLogData>;
|
|
11
|
+
export interface ICreateBulkApplicationLogData {
|
|
12
|
+
created: number;
|
|
13
|
+
deduped: number;
|
|
14
|
+
}
|
|
15
|
+
export type ICreateBulkApplicationLogResponse = IResponse<ICreateBulkApplicationLogData>;
|
|
@@ -30,6 +30,7 @@ export type PayloadSendStatsAlert = {
|
|
|
30
30
|
export type ParamsSendStatsAlert = {
|
|
31
31
|
webhookUrl?: string;
|
|
32
32
|
} & BaseSendAlertParams & PayloadSendStatsAlert;
|
|
33
|
+
export declare const buildDashboardLogUrl: (applicationLogId?: string | null) => string;
|
|
33
34
|
export declare const sendLogAlert: (params: ParamsSendLogAlert) => Promise<void>;
|
|
34
35
|
export declare const sendStatsAlert: (params: ParamsSendStatsAlert) => Promise<void>;
|
|
35
36
|
export {};
|
|
@@ -26,7 +26,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
26
26
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
27
27
|
};
|
|
28
28
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
|
-
exports.sendStatsAlert = exports.sendLogAlert = void 0;
|
|
29
|
+
exports.sendStatsAlert = exports.sendLogAlert = exports.buildDashboardLogUrl = void 0;
|
|
30
30
|
const __1 = require("..");
|
|
31
31
|
const json_utils_1 = require("./json.utils");
|
|
32
32
|
const axios_1 = __importDefault(require("axios"));
|
|
@@ -36,6 +36,11 @@ const webhookClients = new Map();
|
|
|
36
36
|
const MAX_REQUEST_PER_MINUTE = 30;
|
|
37
37
|
const RATE_LIMIT_PERIOD_IN_MS = 60 * 1000;
|
|
38
38
|
const APPLICATION_LOG_ID_QUERY_PARAMS = 'application_log_id';
|
|
39
|
+
const buildDashboardLogUrl = (applicationLogId) => {
|
|
40
|
+
const base = `${__1.AbyssMonitorCore.getConfig().baseClientURL}dashboard/project/${__1.AbyssMonitorCore.getConfig().projectId}/application/${__1.AbyssMonitorCore.getConfig().applicationId}/monitor/log`;
|
|
41
|
+
return applicationLogId ? `${base}?${APPLICATION_LOG_ID_QUERY_PARAMS}=${applicationLogId}` : base;
|
|
42
|
+
};
|
|
43
|
+
exports.buildDashboardLogUrl = buildDashboardLogUrl;
|
|
39
44
|
const sendLogAlert = async (params) => {
|
|
40
45
|
const webhookUrl = params.webhookUrl ||
|
|
41
46
|
(await __1.AbyssMonitorCore.getConfig().getWebhookUrl({
|
|
@@ -51,9 +56,7 @@ const sendLogAlert = async (params) => {
|
|
|
51
56
|
body: (0, __1.generateDiscordApiLogMessageContent)({
|
|
52
57
|
...params.logData,
|
|
53
58
|
author: params.author || __1.AbyssMonitorCore.getConfig().applicationName,
|
|
54
|
-
dashboardLogUrl:
|
|
55
|
-
? `${APPLICATION_LOG_ID_QUERY_PARAMS}=${params.applicationLogId}`
|
|
56
|
-
: ''}`,
|
|
59
|
+
dashboardLogUrl: (0, exports.buildDashboardLogUrl)(params.applicationLogId),
|
|
57
60
|
dateValue: params.logData.dateValue,
|
|
58
61
|
}),
|
|
59
62
|
webhookUrl,
|
|
@@ -72,7 +75,7 @@ const sendLogAlert = async (params) => {
|
|
|
72
75
|
stack: params.logData.stack,
|
|
73
76
|
processId: params.logData.processId,
|
|
74
77
|
requestId: params.logData.requestId,
|
|
75
|
-
dashboardLogUrl:
|
|
78
|
+
dashboardLogUrl: (0, exports.buildDashboardLogUrl)(params.applicationLogId),
|
|
76
79
|
dateValue: params.logData.dateValue,
|
|
77
80
|
}, { compact: params.compact }),
|
|
78
81
|
webhookUrl,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"alert.utils.js","sourceRoot":"","sources":["../../src/utils/alert.utils.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,0BAWY;AACZ,6CAA2C;AAC3C,kDAA6C;AAC7C,wEAAyC;AACzC,2DAA4E;AAE5E,MAAM,cAAc,GAAG,IAAI,GAAG,EAAyB,CAAC;AAExD,MAAM,sBAAsB,GAAG,EAAE,CAAC;AAClC,MAAM,uBAAuB,GAAG,EAAE,GAAG,IAAI,CAAC;AAE1C,MAAM,+BAA+B,GAAG,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"alert.utils.js","sourceRoot":"","sources":["../../src/utils/alert.utils.ts"],"names":[],"mappings":"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"}
|