logixia 2.0.0 → 2.0.6
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 +172 -2597
- package/dist/async-context-2mbUKhcl.mjs +132 -0
- package/dist/async-context-2mbUKhcl.mjs.map +1 -0
- package/dist/async-context-DUFMDYAr.js +148 -0
- package/dist/async-context-DUFMDYAr.js.map +1 -0
- package/dist/{azure-monitor.transport-CrvfHd9C.js → azure-monitor.transport-Bu4S2I2q.js} +32 -20
- package/dist/azure-monitor.transport-Bu4S2I2q.js.map +1 -0
- package/dist/{azure-monitor.transport-Cn_3Usvu.d.ts → azure-monitor.transport-Bvf7Xegt.d.ts} +3 -6
- package/dist/azure-monitor.transport-Bvf7Xegt.d.ts.map +1 -0
- package/dist/{azure-monitor.transport-CHnjVRF-.mjs → azure-monitor.transport-C1RWAumT.mjs} +27 -15
- package/dist/azure-monitor.transport-C1RWAumT.mjs.map +1 -0
- package/dist/{azure-monitor.transport-D7Da4RAb.d.mts → azure-monitor.transport-CbSHOnNX.d.mts} +3 -6
- package/dist/azure-monitor.transport-CbSHOnNX.d.mts.map +1 -0
- package/dist/azure.d.mts +1 -2
- package/dist/azure.d.ts +1 -2
- package/dist/azure.js +3 -6
- package/dist/azure.mjs +1 -6
- package/dist/{batch-buffer-PGvSgbmd.mjs → batch-buffer-BvXLDPlV.mjs} +21 -7
- package/dist/batch-buffer-BvXLDPlV.mjs.map +1 -0
- package/dist/{batch-buffer-BY-mRWIK.js → batch-buffer-C7Am4Mw-.js} +53 -40
- package/dist/batch-buffer-C7Am4Mw-.js.map +1 -0
- package/dist/browser.d.mts +47 -27
- package/dist/browser.d.mts.map +1 -1
- package/dist/browser.d.ts +47 -27
- package/dist/browser.d.ts.map +1 -1
- package/dist/browser.js +464 -62
- package/dist/browser.js.map +1 -1
- package/dist/browser.mjs +465 -65
- package/dist/browser.mjs.map +1 -1
- package/dist/{builder-0gEzRopq.mjs → builder-DhNhvOkt.mjs} +307 -246
- package/dist/builder-DhNhvOkt.mjs.map +1 -0
- package/dist/{builder-D44QktIo.js → builder-yFvJrz7o.js} +435 -399
- package/dist/builder-yFvJrz7o.js.map +1 -0
- package/dist/cli/index.js +216 -125
- package/dist/cloudwatch.d.mts +1 -2
- package/dist/cloudwatch.d.ts +1 -2
- package/dist/cloudwatch.js +3 -7
- package/dist/cloudwatch.mjs +1 -7
- package/dist/{cloudwatch.transport-DsEq633o.d.ts → cloudwatch.transport-CQyT6U91.d.ts} +2 -6
- package/dist/cloudwatch.transport-CQyT6U91.d.ts.map +1 -0
- package/dist/{cloudwatch.transport-BO1ahxw-.js → cloudwatch.transport-Ch1Uae-0.js} +61 -36
- package/dist/cloudwatch.transport-Ch1Uae-0.js.map +1 -0
- package/dist/{cloudwatch.transport-UlyZFWMn.d.mts → cloudwatch.transport-CjVrI6S4.d.mts} +2 -6
- package/dist/cloudwatch.transport-CjVrI6S4.d.mts.map +1 -0
- package/dist/{cloudwatch.transport-DZ6ies7g.mjs → cloudwatch.transport-DZqF2xZO.mjs} +54 -28
- package/dist/cloudwatch.transport-DZqF2xZO.mjs.map +1 -0
- package/dist/{coerce.utils-Cu6IUTgX.mjs → coerce.utils-B_rEudCn.mjs} +3 -4
- package/dist/{coerce.utils-Cu6IUTgX.mjs.map → coerce.utils-B_rEudCn.mjs.map} +1 -1
- package/dist/{coerce.utils-B-LilukN.js → coerce.utils-C1C5sIX0.js} +8 -10
- package/dist/{coerce.utils-B-LilukN.js.map → coerce.utils-C1C5sIX0.js.map} +1 -1
- package/dist/correlation.d.mts +15 -69
- package/dist/correlation.d.mts.map +1 -1
- package/dist/correlation.d.ts +15 -69
- package/dist/correlation.d.ts.map +1 -1
- package/dist/correlation.js +69 -20
- package/dist/correlation.js.map +1 -1
- package/dist/correlation.mjs +67 -17
- package/dist/correlation.mjs.map +1 -1
- package/dist/{entry-fields-BvOLFlJ4.js → entry-fields-BSLkzw18.js} +16 -13
- package/dist/entry-fields-BSLkzw18.js.map +1 -0
- package/dist/{entry-fields-BJkuPnIg.mjs → entry-fields-J1OBi24o.mjs} +11 -7
- package/dist/entry-fields-J1OBi24o.mjs.map +1 -0
- package/dist/gcp.d.mts +1 -2
- package/dist/gcp.d.ts +1 -2
- package/dist/gcp.js +3 -7
- package/dist/gcp.mjs +1 -7
- package/dist/{gcp.transport-B7oc97sG.d.ts → gcp.transport-BCIvdFV-.d.ts} +5 -8
- package/dist/gcp.transport-BCIvdFV-.d.ts.map +1 -0
- package/dist/{gcp.transport-GrJurKo8.d.mts → gcp.transport-D9SdLPwP.d.mts} +5 -8
- package/dist/gcp.transport-D9SdLPwP.d.mts.map +1 -0
- package/dist/{gcp.transport-DBX5TPIy.mjs → gcp.transport-DVCmnA3b.mjs} +59 -16
- package/dist/gcp.transport-DVCmnA3b.mjs.map +1 -0
- package/dist/{gcp.transport-CHV8MGgz.js → gcp.transport-Dy2Lf8FI.js} +64 -22
- package/dist/gcp.transport-Dy2Lf8FI.js.map +1 -0
- package/dist/http-shapes-BnBkJcid.d.mts +32 -0
- package/dist/http-shapes-BnBkJcid.d.mts.map +1 -0
- package/dist/http-shapes-BnBkJcid.d.ts +32 -0
- package/dist/http-shapes-BnBkJcid.d.ts.map +1 -0
- package/dist/{index-3mw5gaCw.d.mts → index-BSTtFcQ6.d.mts} +142 -13
- package/dist/index-BSTtFcQ6.d.mts.map +1 -0
- package/dist/{index-DhIoploR.d.ts → index-CFDGkI8n.d.ts} +142 -13
- package/dist/index-CFDGkI8n.d.ts.map +1 -0
- package/dist/index.d.mts +114 -217
- package/dist/index.d.mts.map +1 -1
- package/dist/index.d.ts +113 -216
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +182 -279
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +160 -256
- package/dist/index.mjs.map +1 -1
- package/dist/internal-log-Bg4V1cPg.mjs +170 -0
- package/dist/internal-log-Bg4V1cPg.mjs.map +1 -0
- package/dist/internal-log-By4Govmu.js +223 -0
- package/dist/internal-log-By4Govmu.js.map +1 -0
- package/dist/{logitron-logger-UVeN-mQm.d.ts → logitron-logger-D22Yb61K.d.mts} +121 -100
- package/dist/logitron-logger-D22Yb61K.d.mts.map +1 -0
- package/dist/{logitron-logger-BFDSO8Io.d.mts → logitron-logger-D_MYYrQt.d.ts} +121 -100
- package/dist/logitron-logger-D_MYYrQt.d.ts.map +1 -0
- package/dist/middleware.d.mts +13 -28
- package/dist/middleware.d.mts.map +1 -1
- package/dist/middleware.d.ts +13 -28
- package/dist/middleware.d.ts.map +1 -1
- package/dist/middleware.js +20 -81
- package/dist/middleware.js.map +1 -1
- package/dist/middleware.mjs +17 -79
- package/dist/middleware.mjs.map +1 -1
- package/dist/nest.d.mts +37 -48
- package/dist/nest.d.mts.map +1 -1
- package/dist/nest.d.ts +37 -48
- package/dist/nest.d.ts.map +1 -1
- package/dist/nest.js +124 -135
- package/dist/nest.js.map +1 -1
- package/dist/nest.mjs +69 -78
- package/dist/nest.mjs.map +1 -1
- package/dist/{transport.manager-BiuCAJd2.mjs → otel-Dt5riXuE.mjs} +275 -117
- package/dist/otel-Dt5riXuE.mjs.map +1 -0
- package/dist/{transport.manager-CXbKKdVE.js → otel-DyeH6DVR.js} +373 -178
- package/dist/otel-DyeH6DVR.js.map +1 -0
- package/dist/own-property-BWkibepN.js +40 -0
- package/dist/own-property-BWkibepN.js.map +1 -0
- package/dist/own-property-CjFw9qwZ.mjs +29 -0
- package/dist/own-property-CjFw9qwZ.mjs.map +1 -0
- package/dist/{trace.utils-CvXgaiQT.mjs → request-trace-BgNykH9M.mjs} +40 -9
- package/dist/request-trace-BgNykH9M.mjs.map +1 -0
- package/dist/{trace.utils-DpBOLDtq.js → request-trace-ByujsUZk.js} +117 -77
- package/dist/request-trace-ByujsUZk.js.map +1 -0
- package/dist/rolldown-runtime-D3PmRqjj.mjs +4 -0
- package/dist/{safe-stringify-DJ66tW5I.mjs → safe-stringify-B5p5ktFe.mjs} +39 -15
- package/dist/safe-stringify-B5p5ktFe.mjs.map +1 -0
- package/dist/{safe-stringify-DWo3aZp_.js → safe-stringify-J3sh-7YM.js} +59 -36
- package/dist/safe-stringify-J3sh-7YM.js.map +1 -0
- package/dist/{search-C4V0OMEn.js → search-CRjhHxe9.js} +319 -92
- package/dist/search-CRjhHxe9.js.map +1 -0
- package/dist/{search-CNh9uVwR.d.ts → search-DA3ft3X5.d.mts} +5 -22
- package/dist/search-DA3ft3X5.d.mts.map +1 -0
- package/dist/{search-BFbu_oVn.mjs → search-DAXKE-P9.mjs} +289 -62
- package/dist/search-DAXKE-P9.mjs.map +1 -0
- package/dist/{search-DXANsQ2n.d.mts → search-DEl3Pe47.d.ts} +5 -22
- package/dist/search-DEl3Pe47.d.ts.map +1 -0
- package/dist/search.d.mts +2 -4
- package/dist/search.d.ts +2 -4
- package/dist/search.js +3 -4
- package/dist/search.mjs +1 -4
- package/dist/secret-config-CmK2wVkr.js +272 -0
- package/dist/secret-config-CmK2wVkr.js.map +1 -0
- package/dist/secret-config-Dhb6pqTU.mjs +210 -0
- package/dist/secret-config-Dhb6pqTU.mjs.map +1 -0
- package/dist/{slack.transport-CXjQYOes.d.ts → slack.transport-BDyENuR0.d.mts} +56 -9
- package/dist/slack.transport-BDyENuR0.d.mts.map +1 -0
- package/dist/{slack.transport-Bzw7sucI.mjs → slack.transport-BTEwsREY.mjs} +263 -31
- package/dist/slack.transport-BTEwsREY.mjs.map +1 -0
- package/dist/{slack.transport-BZzoXDPn.d.mts → slack.transport-C6E0l4kw.d.ts} +56 -9
- package/dist/slack.transport-C6E0l4kw.d.ts.map +1 -0
- package/dist/{slack.transport-BfJRouB2.js → slack.transport-UbYvOdKx.js} +286 -42
- package/dist/slack.transport-UbYvOdKx.js.map +1 -0
- package/dist/testing.d.mts +13 -11
- package/dist/testing.d.mts.map +1 -1
- package/dist/testing.d.ts +13 -11
- package/dist/testing.d.ts.map +1 -1
- package/dist/testing.js +41 -7
- package/dist/testing.js.map +1 -1
- package/dist/testing.mjs +40 -6
- package/dist/testing.mjs.map +1 -1
- package/dist/{transport.types-CGoHpWQR.d.ts → transport.types-CzJq4IrF.d.mts} +14 -5
- package/dist/transport.types-CzJq4IrF.d.mts.map +1 -0
- package/dist/{transport.types-BMnurPcc.d.mts → transport.types-CzJq4IrF.d.ts} +14 -5
- package/dist/transport.types-CzJq4IrF.d.ts.map +1 -0
- package/dist/transports.d.mts +39 -41
- package/dist/transports.d.mts.map +1 -1
- package/dist/transports.d.ts +39 -41
- package/dist/transports.d.ts.map +1 -1
- package/dist/transports.js +19 -22
- package/dist/transports.mjs +7 -13
- package/dist/worker-entry.js +438 -107
- package/dist/worker.d.mts +1 -2
- package/dist/worker.d.ts +1 -2
- package/dist/worker.js +3 -4
- package/dist/worker.mjs +1 -4
- package/dist/{worker.transport-JvGPog3C.d.mts → worker.transport-B9mCQSM1.d.ts} +7 -6
- package/dist/worker.transport-B9mCQSM1.d.ts.map +1 -0
- package/dist/{worker.transport-CdzSZJmw.d.ts → worker.transport-Bl8lFRck.d.mts} +7 -6
- package/dist/worker.transport-Bl8lFRck.d.mts.map +1 -0
- package/dist/{worker.transport-lPxO2MVL.mjs → worker.transport-BmmOKb1-.mjs} +43 -10
- package/dist/worker.transport-BmmOKb1-.mjs.map +1 -0
- package/dist/{worker.transport-BdPxu3PN.js → worker.transport-DxxbqQCG.js} +48 -15
- package/dist/worker.transport-DxxbqQCG.js.map +1 -0
- package/package.json +51 -75
- package/dist/async-context-BzJrbfQs.mjs +0 -72
- package/dist/async-context-BzJrbfQs.mjs.map +0 -1
- package/dist/async-context-DyQQYq3I.js +0 -92
- package/dist/async-context-DyQQYq3I.js.map +0 -1
- package/dist/azure-monitor.transport-CHnjVRF-.mjs.map +0 -1
- package/dist/azure-monitor.transport-Cn_3Usvu.d.ts.map +0 -1
- package/dist/azure-monitor.transport-CrvfHd9C.js.map +0 -1
- package/dist/azure-monitor.transport-D7Da4RAb.d.mts.map +0 -1
- package/dist/batch-buffer-BY-mRWIK.js.map +0 -1
- package/dist/batch-buffer-PGvSgbmd.mjs.map +0 -1
- package/dist/builder-0gEzRopq.mjs.map +0 -1
- package/dist/builder-D44QktIo.js.map +0 -1
- package/dist/chunk-DLSkYcPk.mjs +0 -7
- package/dist/chunk-nOFOJqeH.js +0 -30
- package/dist/cloudwatch.transport-BO1ahxw-.js.map +0 -1
- package/dist/cloudwatch.transport-DZ6ies7g.mjs.map +0 -1
- package/dist/cloudwatch.transport-DsEq633o.d.ts.map +0 -1
- package/dist/cloudwatch.transport-UlyZFWMn.d.mts.map +0 -1
- package/dist/entry-fields-BJkuPnIg.mjs.map +0 -1
- package/dist/entry-fields-BvOLFlJ4.js.map +0 -1
- package/dist/gcp.transport-B7oc97sG.d.ts.map +0 -1
- package/dist/gcp.transport-CHV8MGgz.js.map +0 -1
- package/dist/gcp.transport-DBX5TPIy.mjs.map +0 -1
- package/dist/gcp.transport-GrJurKo8.d.mts.map +0 -1
- package/dist/index-3mw5gaCw.d.mts.map +0 -1
- package/dist/index-DhIoploR.d.ts.map +0 -1
- package/dist/internal-log-BUJYMZbE.js +0 -70
- package/dist/internal-log-BUJYMZbE.js.map +0 -1
- package/dist/internal-log-Cm8SOWSV.mjs +0 -52
- package/dist/internal-log-Cm8SOWSV.mjs.map +0 -1
- package/dist/logitron-logger-BFDSO8Io.d.mts.map +0 -1
- package/dist/logitron-logger-UVeN-mQm.d.ts.map +0 -1
- package/dist/safe-stringify-DJ66tW5I.mjs.map +0 -1
- package/dist/safe-stringify-DWo3aZp_.js.map +0 -1
- package/dist/search-BFbu_oVn.mjs.map +0 -1
- package/dist/search-C4V0OMEn.js.map +0 -1
- package/dist/search-CNh9uVwR.d.ts.map +0 -1
- package/dist/search-DXANsQ2n.d.mts.map +0 -1
- package/dist/slack.transport-BZzoXDPn.d.mts.map +0 -1
- package/dist/slack.transport-BfJRouB2.js.map +0 -1
- package/dist/slack.transport-Bzw7sucI.mjs.map +0 -1
- package/dist/slack.transport-CXjQYOes.d.ts.map +0 -1
- package/dist/trace.utils-CvXgaiQT.mjs.map +0 -1
- package/dist/trace.utils-DpBOLDtq.js.map +0 -1
- package/dist/transport.manager-BiuCAJd2.mjs.map +0 -1
- package/dist/transport.manager-CXbKKdVE.js.map +0 -1
- package/dist/transport.types-BMnurPcc.d.mts.map +0 -1
- package/dist/transport.types-CGoHpWQR.d.ts.map +0 -1
- package/dist/worker.transport-BdPxu3PN.js.map +0 -1
- package/dist/worker.transport-CdzSZJmw.d.ts.map +0 -1
- package/dist/worker.transport-JvGPog3C.d.mts.map +0 -1
- package/dist/worker.transport-lPxO2MVL.mjs.map +0 -1
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
import { t as safeToString } from "./coerce.utils-
|
|
2
|
-
|
|
3
|
-
//#region src/utils/csv.utils.ts
|
|
1
|
+
import { t as safeToString } from "./coerce.utils-B_rEudCn.mjs";
|
|
2
|
+
// src/utils/csv.utils.ts
|
|
4
3
|
const CSV_FORMULA_PREFIX = /^[=+\-@\t\r]/;
|
|
5
4
|
/**
|
|
6
5
|
* Render one CSV field. String values that a spreadsheet would treat as a
|
|
@@ -17,9 +16,7 @@ function csvField(value, alwaysQuote = false) {
|
|
|
17
16
|
if (alwaysQuote || /[",\r\n]/.test(str)) return `"${str.replace(/"/g, "\"\"")}"`;
|
|
18
17
|
return str;
|
|
19
18
|
}
|
|
20
|
-
|
|
21
|
-
//#endregion
|
|
22
|
-
//#region src/search/core/basic-log-indexer.ts
|
|
19
|
+
// src/search/core/basic-log-indexer.ts
|
|
23
20
|
/**
|
|
24
21
|
* Basic log indexer implementation
|
|
25
22
|
*/
|
|
@@ -220,9 +217,68 @@ var BasicLogIndexer = class {
|
|
|
220
217
|
}));
|
|
221
218
|
}
|
|
222
219
|
};
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
220
|
+
// src/search/core/user-id.ts
|
|
221
|
+
const STOPWORDS = /* @__PURE__ */ new Set([
|
|
222
|
+
"is",
|
|
223
|
+
"was",
|
|
224
|
+
"are",
|
|
225
|
+
"the",
|
|
226
|
+
"a",
|
|
227
|
+
"an",
|
|
228
|
+
"of",
|
|
229
|
+
"for",
|
|
230
|
+
"do",
|
|
231
|
+
"did",
|
|
232
|
+
"does",
|
|
233
|
+
"in",
|
|
234
|
+
"on",
|
|
235
|
+
"at",
|
|
236
|
+
"with",
|
|
237
|
+
"who",
|
|
238
|
+
"what",
|
|
239
|
+
"from",
|
|
240
|
+
"that",
|
|
241
|
+
"and",
|
|
242
|
+
"or",
|
|
243
|
+
"to",
|
|
244
|
+
"has",
|
|
245
|
+
"have",
|
|
246
|
+
"had",
|
|
247
|
+
"by",
|
|
248
|
+
"as",
|
|
249
|
+
"my",
|
|
250
|
+
"me",
|
|
251
|
+
"all",
|
|
252
|
+
"any",
|
|
253
|
+
"it",
|
|
254
|
+
"be",
|
|
255
|
+
"not",
|
|
256
|
+
"no",
|
|
257
|
+
"when",
|
|
258
|
+
"where",
|
|
259
|
+
"which",
|
|
260
|
+
"logs"
|
|
261
|
+
]);
|
|
262
|
+
const EXPLICIT = /\buser[\s_]?id(?:\s+is|\s*[:=])?\s*["']?([\w-]+)/i;
|
|
263
|
+
const WITH_DIGIT = /\buser\s+["']?([\w-]*\d[\w-]*)/i;
|
|
264
|
+
/**
|
|
265
|
+
* Extract a user id from natural-language text. An id must either contain a digit
|
|
266
|
+
* or follow explicit "user id" / "userId:" syntax and not be a stopword, so phrases
|
|
267
|
+
* like "what did user do yesterday" never produce a filter.
|
|
268
|
+
*/
|
|
269
|
+
function extractUserId(query) {
|
|
270
|
+
const explicit = EXPLICIT.exec(query);
|
|
271
|
+
if ((explicit === null || explicit === void 0 ? void 0 : explicit[1]) && !STOPWORDS.has(explicit[1].toLowerCase())) return {
|
|
272
|
+
id: explicit[1],
|
|
273
|
+
span: explicit[0]
|
|
274
|
+
};
|
|
275
|
+
const digit = WITH_DIGIT.exec(query);
|
|
276
|
+
if (digit === null || digit === void 0 ? void 0 : digit[1]) return {
|
|
277
|
+
id: digit[1],
|
|
278
|
+
span: digit[0]
|
|
279
|
+
};
|
|
280
|
+
}
|
|
281
|
+
// src/search/core/basic-search-engine.ts
|
|
226
282
|
/**
|
|
227
283
|
* Basic search engine implementation
|
|
228
284
|
*/
|
|
@@ -271,8 +327,9 @@ var BasicSearchEngine = class {
|
|
|
271
327
|
* Perform a full-text search across logs
|
|
272
328
|
*/
|
|
273
329
|
async search(query, filters, options) {
|
|
274
|
-
const
|
|
275
|
-
const
|
|
330
|
+
const textCache = /* @__PURE__ */ new Map();
|
|
331
|
+
const filteredLogs = this.applyFilters(this.logs, filters, textCache);
|
|
332
|
+
const results = this.performTextSearch(filteredLogs, query, options, textCache);
|
|
276
333
|
this.addToSearchHistory(query);
|
|
277
334
|
const sorted = this.applySorting(results, options === null || options === void 0 ? void 0 : options.sortBy, options === null || options === void 0 ? void 0 : options.sortOrder);
|
|
278
335
|
const paginated = this.applyPagination(sorted, options === null || options === void 0 ? void 0 : options.offset, options === null || options === void 0 ? void 0 : options.limit);
|
|
@@ -284,7 +341,7 @@ var BasicSearchEngine = class {
|
|
|
284
341
|
*/
|
|
285
342
|
async naturalLanguageSearch(query) {
|
|
286
343
|
const parsed = await this.parseNaturalLanguageQuery(query);
|
|
287
|
-
return this.search(parsed.originalQuery, parsed.filters, {
|
|
344
|
+
return this.search(parsed.textQuery ?? parsed.originalQuery, parsed.filters, {
|
|
288
345
|
semanticSearch: true,
|
|
289
346
|
includeContext: true
|
|
290
347
|
});
|
|
@@ -401,17 +458,34 @@ var BasicSearchEngine = class {
|
|
|
401
458
|
async parseNaturalLanguageQuery(query) {
|
|
402
459
|
const filters = {};
|
|
403
460
|
const lowerQuery = query.toLowerCase();
|
|
461
|
+
let remainder = query;
|
|
462
|
+
const consume = (re) => {
|
|
463
|
+
remainder = remainder.replace(re, " ");
|
|
464
|
+
};
|
|
404
465
|
const levels = [];
|
|
405
|
-
if (
|
|
406
|
-
if (
|
|
407
|
-
if (
|
|
408
|
-
if (levels.length > 0)
|
|
466
|
+
if (/\berrors?\b/i.test(query)) levels.push("error");
|
|
467
|
+
if (/\bwarn(?:ing)?s?\b/i.test(query)) levels.push("warn");
|
|
468
|
+
if (/\binfo\b/i.test(query)) levels.push("info");
|
|
469
|
+
if (levels.length > 0) {
|
|
470
|
+
filters.levels = levels;
|
|
471
|
+
consume(/\b(?:errors?|warn(?:ing)?s?|info)\b/gi);
|
|
472
|
+
}
|
|
409
473
|
const timeRange = this.extractTimeRange(query);
|
|
410
|
-
if (timeRange)
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
474
|
+
if (timeRange) {
|
|
475
|
+
filters.timeRange = timeRange;
|
|
476
|
+
consume(/\b(?:last|past)\s+(?:\d+\s+)?(?:second|minute|hour|day)s?\b/gi);
|
|
477
|
+
consume(/\btoday\b/gi);
|
|
478
|
+
}
|
|
479
|
+
const serviceMatch = query.match(/from\s+(?:the\s+)?([\w-]+)\s+service/i);
|
|
480
|
+
if (serviceMatch === null || serviceMatch === void 0 ? void 0 : serviceMatch[1]) {
|
|
481
|
+
filters.services = [serviceMatch[1]];
|
|
482
|
+
consume(/from\s+(?:the\s+)?[\w-]+\s+service/gi);
|
|
483
|
+
}
|
|
484
|
+
const userMatch = extractUserId(query);
|
|
485
|
+
if (userMatch) {
|
|
486
|
+
filters.userIds = [userMatch.id];
|
|
487
|
+
remainder = remainder.replace(userMatch.span, " ");
|
|
488
|
+
}
|
|
415
489
|
let intent = "general_search";
|
|
416
490
|
if (lowerQuery.includes("error")) intent = "find_errors";
|
|
417
491
|
if (lowerQuery.includes("trace") || lowerQuery.includes("request")) intent = "trace_request";
|
|
@@ -419,6 +493,7 @@ var BasicSearchEngine = class {
|
|
|
419
493
|
if (lowerQuery.includes("slow") || lowerQuery.includes("performance")) intent = "performance_analysis";
|
|
420
494
|
return {
|
|
421
495
|
originalQuery: query,
|
|
496
|
+
textQuery: remainder.split(/\s+/).map(trimPunctuation).filter((w) => w && !NL_FILLER_WORDS.has(w.toLowerCase())).join(" "),
|
|
422
497
|
intent,
|
|
423
498
|
entities: [],
|
|
424
499
|
filters,
|
|
@@ -454,18 +529,29 @@ var BasicSearchEngine = class {
|
|
|
454
529
|
async deletePreset(presetId) {
|
|
455
530
|
this.presets.delete(presetId);
|
|
456
531
|
}
|
|
457
|
-
applyFilters(logs, filters) {
|
|
532
|
+
applyFilters(logs, filters, textCache) {
|
|
458
533
|
if (!filters) return logs;
|
|
534
|
+
const range = filters.timeRange ? resolveTimeRange(filters.timeRange) : void 0;
|
|
535
|
+
const excludes = (filters.excludePatterns ?? []).filter(Boolean).map((p) => p.toLowerCase());
|
|
459
536
|
return logs.filter((log) => {
|
|
460
537
|
if (filters.levels && !filters.levels.includes(log.level)) return false;
|
|
461
538
|
if (filters.services && !filters.services.includes(log.appName)) return false;
|
|
462
539
|
if (filters.traceIds && log.traceId && !filters.traceIds.includes(log.traceId)) return false;
|
|
463
|
-
if (
|
|
540
|
+
if (range) {
|
|
464
541
|
const logTime = new Date(log.timestamp).getTime();
|
|
465
|
-
if (logTime <
|
|
466
|
-
if (
|
|
467
|
-
|
|
468
|
-
|
|
542
|
+
if (logTime < range.start) return false;
|
|
543
|
+
if (range.end !== void 0 && logTime > range.end) return false;
|
|
544
|
+
}
|
|
545
|
+
if (filters.userIds && !matchesAny(extractPayloadId(log, USER_ID_KEYS), filters.userIds)) return false;
|
|
546
|
+
if (filters.sessionIds && !matchesAny(extractPayloadId(log, SESSION_ID_KEYS), filters.sessionIds)) return false;
|
|
547
|
+
if (filters.minSeverity !== void 0 && levelSeverity(log.level) < filters.minSeverity) return false;
|
|
548
|
+
if (excludes.length > 0) {
|
|
549
|
+
const text = this.lowerSearchableText(log, textCache);
|
|
550
|
+
if (excludes.some((p) => text.includes(p))) return false;
|
|
551
|
+
}
|
|
552
|
+
if (filters.customFields) for (const [key, expected] of Object.entries(filters.customFields)) {
|
|
553
|
+
const actual = getPath(log, key);
|
|
554
|
+
if (!fieldMatches(actual === void 0 ? getPath(log.payload, key) : actual, expected)) return false;
|
|
469
555
|
}
|
|
470
556
|
if (filters.hasError !== void 0) {
|
|
471
557
|
const hasError = log.level === "error" || !!log.error;
|
|
@@ -475,7 +561,7 @@ var BasicSearchEngine = class {
|
|
|
475
561
|
return true;
|
|
476
562
|
});
|
|
477
563
|
}
|
|
478
|
-
performTextSearch(logs, query, options) {
|
|
564
|
+
performTextSearch(logs, query, options, textCache) {
|
|
479
565
|
if (!query) return logs.map((log) => ({
|
|
480
566
|
log,
|
|
481
567
|
score: 1
|
|
@@ -483,7 +569,7 @@ var BasicSearchEngine = class {
|
|
|
483
569
|
const queryTerms = query.toLowerCase().split(/\s+/);
|
|
484
570
|
const results = [];
|
|
485
571
|
for (const log of logs) {
|
|
486
|
-
const searchableText = this.
|
|
572
|
+
const searchableText = this.lowerSearchableText(log, textCache);
|
|
487
573
|
let score = 0;
|
|
488
574
|
const highlights = [];
|
|
489
575
|
const matchedTerms = [];
|
|
@@ -507,6 +593,14 @@ var BasicSearchEngine = class {
|
|
|
507
593
|
}
|
|
508
594
|
return results;
|
|
509
595
|
}
|
|
596
|
+
lowerSearchableText(log, cache) {
|
|
597
|
+
let text = cache.get(log);
|
|
598
|
+
if (text === void 0) {
|
|
599
|
+
text = this.getSearchableText(log).toLowerCase();
|
|
600
|
+
cache.set(log, text);
|
|
601
|
+
}
|
|
602
|
+
return text;
|
|
603
|
+
}
|
|
510
604
|
getSearchableText(log) {
|
|
511
605
|
const payloadText = log.payload ? safeToString(log.payload) : "";
|
|
512
606
|
return [
|
|
@@ -541,11 +635,7 @@ var BasicSearchEngine = class {
|
|
|
541
635
|
case "level":
|
|
542
636
|
comparison = a.log.level.localeCompare(b.log.level);
|
|
543
637
|
break;
|
|
544
|
-
|
|
545
|
-
case "relevance":
|
|
546
|
-
default:
|
|
547
|
-
comparison = a.score - b.score;
|
|
548
|
-
break;
|
|
638
|
+
default: comparison = a.score - b.score;
|
|
549
639
|
}
|
|
550
640
|
return sortOrder === "asc" ? comparison : -comparison;
|
|
551
641
|
});
|
|
@@ -582,7 +672,7 @@ var BasicSearchEngine = class {
|
|
|
582
672
|
const words1 = new Set(text1.toLowerCase().split(/\s+/));
|
|
583
673
|
const words2 = new Set(text2.toLowerCase().split(/\s+/));
|
|
584
674
|
const intersection = new Set([...words1].filter((x) => words2.has(x)));
|
|
585
|
-
const union = new Set([...words1, ...words2]);
|
|
675
|
+
const union = /* @__PURE__ */ new Set([...words1, ...words2]);
|
|
586
676
|
return union.size > 0 ? intersection.size / union.size : 0;
|
|
587
677
|
}
|
|
588
678
|
findMatchedPatterns(log1, log2) {
|
|
@@ -602,9 +692,20 @@ var BasicSearchEngine = class {
|
|
|
602
692
|
}
|
|
603
693
|
extractTimeRange(query) {
|
|
604
694
|
const lowerQuery = query.toLowerCase();
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
695
|
+
const relativeMatch = lowerQuery.match(/\b(?:last|past)\s+(?:(\d+)\s+)?(seconds?|minutes?|hours?|days?)\b/);
|
|
696
|
+
if (relativeMatch === null || relativeMatch === void 0 ? void 0 : relativeMatch[2]) {
|
|
697
|
+
const relative = {
|
|
698
|
+
value: relativeMatch[1] ? Number.parseInt(relativeMatch[1], 10) : 1,
|
|
699
|
+
unit: `${relativeMatch[2].replace(/s$/, "")}s`
|
|
700
|
+
};
|
|
701
|
+
return {
|
|
702
|
+
start: resolveTimeRange({
|
|
703
|
+
start: 0,
|
|
704
|
+
relative
|
|
705
|
+
}).start,
|
|
706
|
+
relative
|
|
707
|
+
};
|
|
708
|
+
}
|
|
608
709
|
if (lowerQuery.includes("today")) {
|
|
609
710
|
const today = /* @__PURE__ */ new Date();
|
|
610
711
|
today.setHours(0, 0, 0, 0);
|
|
@@ -629,9 +730,136 @@ var BasicSearchEngine = class {
|
|
|
629
730
|
return `preset_${Date.now()}_${Math.random().toString(36).slice(2, 11)}`;
|
|
630
731
|
}
|
|
631
732
|
};
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
733
|
+
const UNIT_MS = {
|
|
734
|
+
seconds: 1e3,
|
|
735
|
+
minutes: 6e4,
|
|
736
|
+
hours: 36e5,
|
|
737
|
+
days: 864e5
|
|
738
|
+
};
|
|
739
|
+
const LEVEL_SEVERITY = {
|
|
740
|
+
trace: 0,
|
|
741
|
+
verbose: 1,
|
|
742
|
+
debug: 1,
|
|
743
|
+
info: 2,
|
|
744
|
+
log: 2,
|
|
745
|
+
warn: 3,
|
|
746
|
+
warning: 3,
|
|
747
|
+
error: 4,
|
|
748
|
+
fatal: 5,
|
|
749
|
+
critical: 5
|
|
750
|
+
};
|
|
751
|
+
const USER_ID_KEYS = [
|
|
752
|
+
"userId",
|
|
753
|
+
"user_id",
|
|
754
|
+
"userid"
|
|
755
|
+
];
|
|
756
|
+
const SESSION_ID_KEYS = [
|
|
757
|
+
"sessionId",
|
|
758
|
+
"session_id",
|
|
759
|
+
"sessionid"
|
|
760
|
+
];
|
|
761
|
+
const NL_FILLER_WORDS = /* @__PURE__ */ new Set([
|
|
762
|
+
"show",
|
|
763
|
+
"me",
|
|
764
|
+
"find",
|
|
765
|
+
"get",
|
|
766
|
+
"list",
|
|
767
|
+
"search",
|
|
768
|
+
"display",
|
|
769
|
+
"all",
|
|
770
|
+
"any",
|
|
771
|
+
"the",
|
|
772
|
+
"a",
|
|
773
|
+
"an",
|
|
774
|
+
"in",
|
|
775
|
+
"of",
|
|
776
|
+
"for",
|
|
777
|
+
"from",
|
|
778
|
+
"with",
|
|
779
|
+
"during",
|
|
780
|
+
"within",
|
|
781
|
+
"over",
|
|
782
|
+
"logs",
|
|
783
|
+
"log",
|
|
784
|
+
"entries",
|
|
785
|
+
"entry",
|
|
786
|
+
"messages",
|
|
787
|
+
"message",
|
|
788
|
+
"events",
|
|
789
|
+
"event",
|
|
790
|
+
"recent",
|
|
791
|
+
"and",
|
|
792
|
+
"only",
|
|
793
|
+
"please",
|
|
794
|
+
"last",
|
|
795
|
+
"past"
|
|
796
|
+
]);
|
|
797
|
+
/** Strip leading and trailing non-word characters. */
|
|
798
|
+
function trimPunctuation(word) {
|
|
799
|
+
const isWord = (c) => c !== void 0 && /\w/.test(c);
|
|
800
|
+
let start = 0;
|
|
801
|
+
let end = word.length;
|
|
802
|
+
while (start < end && !isWord(word[start])) start++;
|
|
803
|
+
while (end > start && !isWord(word[end - 1])) end--;
|
|
804
|
+
return word.slice(start, end);
|
|
805
|
+
}
|
|
806
|
+
/** Severity rank of a level name; higher is more severe. Unknown levels rank as info. */
|
|
807
|
+
function levelSeverity(level) {
|
|
808
|
+
if (typeof level !== "string") return LEVEL_SEVERITY["info"];
|
|
809
|
+
return LEVEL_SEVERITY[level.toLowerCase()] ?? LEVEL_SEVERITY["info"];
|
|
810
|
+
}
|
|
811
|
+
function resolveTimeRange(range) {
|
|
812
|
+
const toMs = (v) => typeof v === "number" ? v : v.getTime();
|
|
813
|
+
if (range.relative) {
|
|
814
|
+
const { value, unit } = range.relative;
|
|
815
|
+
return {
|
|
816
|
+
start: Date.now() - value * UNIT_MS[unit],
|
|
817
|
+
end: range.end === void 0 ? void 0 : toMs(range.end)
|
|
818
|
+
};
|
|
819
|
+
}
|
|
820
|
+
return {
|
|
821
|
+
start: toMs(range.start),
|
|
822
|
+
end: range.end === void 0 ? void 0 : toMs(range.end)
|
|
823
|
+
};
|
|
824
|
+
}
|
|
825
|
+
function getPath(obj, path) {
|
|
826
|
+
let cur = obj;
|
|
827
|
+
for (const part of path.split(".")) {
|
|
828
|
+
if (cur === null || typeof cur !== "object") return void 0;
|
|
829
|
+
cur = cur[part];
|
|
830
|
+
}
|
|
831
|
+
return cur;
|
|
832
|
+
}
|
|
833
|
+
function deepEqual(a, b) {
|
|
834
|
+
if (a === b) return true;
|
|
835
|
+
if (typeof a !== "object" || typeof b !== "object" || a === null || b === null) return false;
|
|
836
|
+
if (Array.isArray(a) !== Array.isArray(b)) return false;
|
|
837
|
+
const ka = Object.keys(a);
|
|
838
|
+
const kb = Object.keys(b);
|
|
839
|
+
if (ka.length !== kb.length) return false;
|
|
840
|
+
return ka.every((k) => deepEqual(a[k], b[k]));
|
|
841
|
+
}
|
|
842
|
+
/**
|
|
843
|
+
* Type-aware equality: primitives by ===, except a numeric string matches a numeric
|
|
844
|
+
* log value; objects and arrays by deep equality. A missing field never matches.
|
|
845
|
+
*/
|
|
846
|
+
function fieldMatches(actual, expected) {
|
|
847
|
+
if (actual === void 0) return false;
|
|
848
|
+
if (typeof actual === "number" && typeof expected === "string" && expected.trim() !== "") return Number(expected) === actual;
|
|
849
|
+
return deepEqual(actual, expected);
|
|
850
|
+
}
|
|
851
|
+
function extractPayloadId(log, keys) {
|
|
852
|
+
const payload = log.payload;
|
|
853
|
+
if (!payload) return void 0;
|
|
854
|
+
for (const key of keys) {
|
|
855
|
+
const v = payload[key];
|
|
856
|
+
if (v !== void 0 && v !== null) return String(v);
|
|
857
|
+
}
|
|
858
|
+
}
|
|
859
|
+
function matchesAny(value, allowed) {
|
|
860
|
+
return value !== void 0 && allowed.includes(value);
|
|
861
|
+
}
|
|
862
|
+
// src/search/engines/correlation-engine.ts
|
|
635
863
|
/**
|
|
636
864
|
* Correlation engine for log analysis
|
|
637
865
|
*/
|
|
@@ -640,7 +868,7 @@ var CorrelationEngine = class {
|
|
|
640
868
|
this.options = options;
|
|
641
869
|
this.options = {
|
|
642
870
|
maxCorrelationDistance: 100,
|
|
643
|
-
temporalWindowMs:
|
|
871
|
+
temporalWindowMs: 3e5,
|
|
644
872
|
minSimilarityScore: .3,
|
|
645
873
|
...options
|
|
646
874
|
};
|
|
@@ -897,9 +1125,10 @@ var CorrelationEngine = class {
|
|
|
897
1125
|
};
|
|
898
1126
|
}
|
|
899
1127
|
};
|
|
900
|
-
|
|
901
|
-
|
|
902
|
-
|
|
1128
|
+
// src/search/engines/nlp-search-engine.ts
|
|
1129
|
+
/**
|
|
1130
|
+
* Advanced search engine with Natural Language Processing capabilities
|
|
1131
|
+
*/
|
|
903
1132
|
/**
|
|
904
1133
|
* NLP-enhanced search engine
|
|
905
1134
|
*/
|
|
@@ -940,7 +1169,7 @@ var NLPSearchEngine = class extends BasicSearchEngine {
|
|
|
940
1169
|
return this.search(cleanQuery, parsed.filters, options);
|
|
941
1170
|
}
|
|
942
1171
|
initializePatterns() {
|
|
943
|
-
this.intentPatterns = new Map([
|
|
1172
|
+
this.intentPatterns = /* @__PURE__ */ new Map([
|
|
944
1173
|
["find_errors", [
|
|
945
1174
|
/show.*errors?/i,
|
|
946
1175
|
/find.*errors?/i,
|
|
@@ -984,10 +1213,9 @@ var NLPSearchEngine = class extends BasicSearchEngine {
|
|
|
984
1213
|
/after.*occurred/i
|
|
985
1214
|
]]
|
|
986
1215
|
]);
|
|
987
|
-
this.entityPatterns = new Map([
|
|
1216
|
+
this.entityPatterns = /* @__PURE__ */ new Map([
|
|
988
1217
|
["level", /(error|warn|warning|info|debug|trace|verbose)/i],
|
|
989
1218
|
["service", /(?:from|in)\s+(?:the\s+)?(\w+)\s+(?:service|app|application)/i],
|
|
990
|
-
["user_id", /user\s+(?:id\s+)?['"]?(\w+)['"]?/i],
|
|
991
1219
|
["trace_id", /trace\s+(?:id\s+)?['"]?([\w-]+)['"]?/i],
|
|
992
1220
|
["time", /(?:last|past|previous)\s+(\d+)\s+(second|minute|hour|day|week)s?/i],
|
|
993
1221
|
["error_type", /(\w+Error|\w+Exception)/i]
|
|
@@ -1008,6 +1236,12 @@ var NLPSearchEngine = class extends BasicSearchEngine {
|
|
|
1008
1236
|
}
|
|
1009
1237
|
extractEntities(query) {
|
|
1010
1238
|
const entities = [];
|
|
1239
|
+
const userId = extractUserId(query);
|
|
1240
|
+
if (userId) entities.push({
|
|
1241
|
+
type: "user_id",
|
|
1242
|
+
value: userId.id,
|
|
1243
|
+
confidence: .8
|
|
1244
|
+
});
|
|
1011
1245
|
for (const [type, pattern] of this.entityPatterns.entries()) {
|
|
1012
1246
|
const matches = query.matchAll(new RegExp(pattern, "gi"));
|
|
1013
1247
|
for (const match of matches) {
|
|
@@ -1038,8 +1272,6 @@ var NLPSearchEngine = class extends BasicSearchEngine {
|
|
|
1038
1272
|
case "trace_id":
|
|
1039
1273
|
if (!filters.traceIds) filters.traceIds = [];
|
|
1040
1274
|
filters.traceIds.push(entity.value);
|
|
1041
|
-
break;
|
|
1042
|
-
case "error_type": break;
|
|
1043
1275
|
}
|
|
1044
1276
|
}
|
|
1045
1277
|
extractAdvancedTimeRange(query) {
|
|
@@ -1067,9 +1299,9 @@ var NLPSearchEngine = class extends BasicSearchEngine {
|
|
|
1067
1299
|
const value = Number.parseInt(match[1] ?? "0");
|
|
1068
1300
|
const multiplier = {
|
|
1069
1301
|
seconds: 1e3,
|
|
1070
|
-
minutes:
|
|
1071
|
-
hours:
|
|
1072
|
-
days:
|
|
1302
|
+
minutes: 6e4,
|
|
1303
|
+
hours: 36e5,
|
|
1304
|
+
days: 864e5
|
|
1073
1305
|
}[unit];
|
|
1074
1306
|
return {
|
|
1075
1307
|
start: new Date(Date.now() - value * multiplier),
|
|
@@ -1182,9 +1414,7 @@ var NLPSearchEngine = class extends BasicSearchEngine {
|
|
|
1182
1414
|
return cleanQuery || query;
|
|
1183
1415
|
}
|
|
1184
1416
|
};
|
|
1185
|
-
|
|
1186
|
-
//#endregion
|
|
1187
|
-
//#region src/search/engines/pattern-recognition-engine.ts
|
|
1417
|
+
// src/search/engines/pattern-recognition-engine.ts
|
|
1188
1418
|
const STACK_FRAME_TAIL = /:\d+:\d+\)?$/;
|
|
1189
1419
|
/** True when any line is a real stack frame, e.g. ` at fn (/app/file.js:10:5)`. */
|
|
1190
1420
|
function hasStackFrame(message) {
|
|
@@ -1379,9 +1609,7 @@ var PatternRecognitionEngine = class {
|
|
|
1379
1609
|
return normalizedMessage === pattern.pattern;
|
|
1380
1610
|
}
|
|
1381
1611
|
};
|
|
1382
|
-
|
|
1383
|
-
//#endregion
|
|
1384
|
-
//#region src/search/search-manager.ts
|
|
1612
|
+
// src/search/search-manager.ts
|
|
1385
1613
|
/**
|
|
1386
1614
|
* Main search manager class
|
|
1387
1615
|
*/
|
|
@@ -1613,7 +1841,6 @@ var SearchManager = class {
|
|
|
1613
1841
|
}, obj);
|
|
1614
1842
|
}
|
|
1615
1843
|
};
|
|
1616
|
-
|
|
1617
|
-
//#endregion
|
|
1618
1844
|
export { BasicSearchEngine as a, CorrelationEngine as i, PatternRecognitionEngine as n, BasicLogIndexer as o, NLPSearchEngine as r, SearchManager as t };
|
|
1619
|
-
|
|
1845
|
+
|
|
1846
|
+
//# sourceMappingURL=search-DAXKE-P9.mjs.map
|