@comake/skl-js-engine 1.3.7 → 1.3.8
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/dist/JsExecutor/examples/jsExecutor/index.js +0 -1
- package/dist/JsExecutor/examples/jsExecutor/index.js.map +1 -1
- package/dist/SklEngine.js +83 -115
- package/dist/SklEngine.js.map +1 -1
- package/dist/storage/query-adapter/sparql/SparqlQueryAdapter.js +101 -79
- package/dist/storage/query-adapter/sparql/SparqlQueryAdapter.js.map +1 -1
- package/dist/storage/query-adapter/sparql/SparqlQueryBuilder.js +218 -178
- package/dist/storage/query-adapter/sparql/SparqlQueryBuilder.js.map +1 -1
- package/dist/storage/query-adapter/sparql/query-executor/SparqlEndpointQueryExecutor.js +73 -29
- package/dist/storage/query-adapter/sparql/query-executor/SparqlEndpointQueryExecutor.js.map +1 -1
- package/dist/util/PerformanceLogger.d.ts +27 -0
- package/dist/util/PerformanceLogger.js +223 -0
- package/dist/util/PerformanceLogger.js.map +1 -0
- package/package.json +1 -1
|
@@ -7,6 +7,7 @@ exports.SparqlEndpointQueryExecutor = void 0;
|
|
|
7
7
|
const sparql_http_client_1 = __importDefault(require("sparql-http-client"));
|
|
8
8
|
const sparqljs_1 = require("sparqljs");
|
|
9
9
|
const logger_1 = require("../../../../logger");
|
|
10
|
+
const PerformanceLogger_1 = require("../../../../util/PerformanceLogger");
|
|
10
11
|
class SparqlEndpointQueryExecutor {
|
|
11
12
|
constructor(options) {
|
|
12
13
|
this.sparqlClient = new sparql_http_client_1.default({
|
|
@@ -21,51 +22,94 @@ class SparqlEndpointQueryExecutor {
|
|
|
21
22
|
return this.executeSparqlSelectAndGetDataRaw(generatedQuery);
|
|
22
23
|
}
|
|
23
24
|
async executeSparqlSelectAndGetDataRaw(query) {
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
const
|
|
28
|
-
|
|
29
|
-
data
|
|
25
|
+
const span = PerformanceLogger_1.PerformanceLogger.startSpan('SPARQL.SELECT', { query });
|
|
26
|
+
try {
|
|
27
|
+
// This.logger.debug(query);
|
|
28
|
+
const stream = await this.sparqlClient.query.select(query, { operation: 'postUrlencoded' });
|
|
29
|
+
const result = await new Promise((resolve, reject) => {
|
|
30
|
+
const data = [];
|
|
31
|
+
stream.on('data', (row) => {
|
|
32
|
+
data.push(row);
|
|
33
|
+
});
|
|
34
|
+
stream.on('end', () => {
|
|
35
|
+
resolve(data);
|
|
36
|
+
});
|
|
37
|
+
stream.on('error', (error) => {
|
|
38
|
+
reject(error);
|
|
39
|
+
});
|
|
30
40
|
});
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
}
|
|
41
|
+
PerformanceLogger_1.PerformanceLogger.endSpan(span, { resultCount: result.length });
|
|
42
|
+
return result;
|
|
43
|
+
}
|
|
44
|
+
catch (error) {
|
|
45
|
+
PerformanceLogger_1.PerformanceLogger.endSpan(span, { error: true });
|
|
46
|
+
throw error;
|
|
47
|
+
}
|
|
38
48
|
}
|
|
39
49
|
async executeSparqlConstructAndGetDataRaw(query) {
|
|
40
|
-
|
|
50
|
+
const span = PerformanceLogger_1.PerformanceLogger.startSpan('SPARQL.CONSTRUCT', { query });
|
|
51
|
+
try {
|
|
52
|
+
const result = await this.executeSparqlSelectAndGetDataRaw(query);
|
|
53
|
+
PerformanceLogger_1.PerformanceLogger.endSpan(span, { resultCount: result.length });
|
|
54
|
+
return result;
|
|
55
|
+
}
|
|
56
|
+
catch (error) {
|
|
57
|
+
PerformanceLogger_1.PerformanceLogger.endSpan(span, { error: true });
|
|
58
|
+
throw error;
|
|
59
|
+
}
|
|
41
60
|
}
|
|
42
61
|
async executeSparqlUpdate(query) {
|
|
43
62
|
const generatedQuery = this.sparqlGenerator.stringify(query);
|
|
44
63
|
await this.executeRawSparqlUpdate(generatedQuery);
|
|
45
64
|
}
|
|
46
65
|
async executeRawSparqlUpdate(query) {
|
|
47
|
-
|
|
66
|
+
const span = PerformanceLogger_1.PerformanceLogger.startSpan('SPARQL.UPDATE', { query });
|
|
67
|
+
try {
|
|
68
|
+
await this.sparqlClient.query.update(query);
|
|
69
|
+
PerformanceLogger_1.PerformanceLogger.endSpan(span);
|
|
70
|
+
}
|
|
71
|
+
catch (error) {
|
|
72
|
+
PerformanceLogger_1.PerformanceLogger.endSpan(span, { error: true });
|
|
73
|
+
throw error;
|
|
74
|
+
}
|
|
48
75
|
}
|
|
49
76
|
async executeAskQueryAndGetResponse(query) {
|
|
50
77
|
const generatedQuery = this.sparqlGenerator.stringify(query);
|
|
51
|
-
|
|
78
|
+
const span = PerformanceLogger_1.PerformanceLogger.startSpan('SPARQL.ASK', { query: generatedQuery });
|
|
79
|
+
try {
|
|
80
|
+
const result = await this.sparqlClient.query.ask(generatedQuery);
|
|
81
|
+
PerformanceLogger_1.PerformanceLogger.endSpan(span, { result });
|
|
82
|
+
return result;
|
|
83
|
+
}
|
|
84
|
+
catch (error) {
|
|
85
|
+
PerformanceLogger_1.PerformanceLogger.endSpan(span, { error: true });
|
|
86
|
+
throw error;
|
|
87
|
+
}
|
|
52
88
|
}
|
|
53
89
|
async executeSelectCountAndGetResponse(query) {
|
|
54
90
|
const generatedQuery = this.sparqlGenerator.stringify(query);
|
|
55
|
-
const
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
91
|
+
const span = PerformanceLogger_1.PerformanceLogger.startSpan('SPARQL.COUNT', { query: generatedQuery });
|
|
92
|
+
try {
|
|
93
|
+
const stream = await this.sparqlClient.query.select(generatedQuery, { operation: 'postUrlencoded' });
|
|
94
|
+
const countValue = await new Promise((resolve, reject) => {
|
|
95
|
+
let count;
|
|
96
|
+
stream.on('data', (row) => {
|
|
97
|
+
count = Number.parseInt(row.count.value, 10);
|
|
98
|
+
});
|
|
99
|
+
stream.on('end', () => {
|
|
100
|
+
resolve(count);
|
|
101
|
+
});
|
|
102
|
+
stream.on('error', (error) => {
|
|
103
|
+
reject(error);
|
|
104
|
+
});
|
|
61
105
|
});
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
}
|
|
106
|
+
PerformanceLogger_1.PerformanceLogger.endSpan(span, { count: countValue });
|
|
107
|
+
return countValue;
|
|
108
|
+
}
|
|
109
|
+
catch (error) {
|
|
110
|
+
PerformanceLogger_1.PerformanceLogger.endSpan(span, { error: true });
|
|
111
|
+
throw error;
|
|
112
|
+
}
|
|
69
113
|
}
|
|
70
114
|
}
|
|
71
115
|
exports.SparqlEndpointQueryExecutor = SparqlEndpointQueryExecutor;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SparqlEndpointQueryExecutor.js","sourceRoot":"","sources":["../../../../../src/storage/query-adapter/sparql/query-executor/SparqlEndpointQueryExecutor.ts"],"names":[],"mappings":";;;;;;AACA,4EAA8C;AAQ9C,uCAAqC;AACrC,+CAA4C;
|
|
1
|
+
{"version":3,"file":"SparqlEndpointQueryExecutor.js","sourceRoot":"","sources":["../../../../../src/storage/query-adapter/sparql/query-executor/SparqlEndpointQueryExecutor.ts"],"names":[],"mappings":";;;;;;AACA,4EAA8C;AAQ9C,uCAAqC;AACrC,+CAA4C;AAC5C,0EAAuE;AAcvE,MAAa,2BAA2B;IAItC,YAAmB,OAA2C;QAC5D,IAAI,CAAC,YAAY,GAAG,IAAI,4BAAY,CAAC;YACnC,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,WAAW;SACpD,CAAC,CAAC;QACH,IAAI,CAAC,eAAe,GAAG,IAAI,oBAAS,EAAE,CAAC;QACvC,IAAI,CAAC,MAAM,GAAG,eAAM,CAAC,WAAW,EAAE,CAAC;IACrC,CAAC;IAEM,KAAK,CAAC,6BAA6B,CAKxC,KAAa;QAEb,MAAM,cAAc,GAAG,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QAC7D,OAAO,IAAI,CAAC,gCAAgC,CAAC,cAAc,CAAC,CAAC;IAC/D,CAAC;IAEM,KAAK,CAAC,gCAAgC,CAC3C,KAAa;QAEb,MAAM,IAAI,GAAG,qCAAiB,CAAC,SAAS,CAAC,eAAe,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;QACrE,IAAI;YACF,4BAA4B;YAC5B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAC,CAAC;YAC5F,MAAM,MAAM,GAAG,MAAM,IAAI,OAAO,CAAM,CAAC,OAAO,EAAE,MAAM,EAAQ,EAAE;gBAC9D,MAAM,IAAI,GAAQ,EAAE,CAAC;gBACrB,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,GAAG,EAAQ,EAAE;oBAC9B,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBACjB,CAAC,CAAC,CAAC;gBAEH,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,GAAS,EAAE;oBAC1B,OAAO,CAAC,IAAI,CAAC,CAAC;gBAChB,CAAC,CAAC,CAAC;gBAEH,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAQ,EAAE;oBACjC,MAAM,CAAC,KAAK,CAAC,CAAC;gBAChB,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YACH,qCAAiB,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;YAChE,OAAO,MAAM,CAAC;SACf;QAAC,OAAO,KAAK,EAAE;YACd,qCAAiB,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YACjD,MAAM,KAAK,CAAC;SACb;IACH,CAAC;IAEM,KAAK,CAAC,mCAAmC,CAAC,KAAa;QAC5D,MAAM,IAAI,GAAG,qCAAiB,CAAC,SAAS,CAAC,kBAAkB,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;QACxE,IAAI;YACF,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,gCAAgC,CAAC,KAAK,CAAC,CAAC;YAClE,qCAAiB,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;YAChE,OAAO,MAAM,CAAC;SACf;QAAC,OAAO,KAAK,EAAE;YACd,qCAAiB,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YACjD,MAAM,KAAK,CAAC;SACb;IACH,CAAC;IAEM,KAAK,CAAC,mBAAmB,CAAC,KAAa;QAC5C,MAAM,cAAc,GAAG,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QAC7D,MAAM,IAAI,CAAC,sBAAsB,CAAC,cAAc,CAAC,CAAC;IACpD,CAAC;IAEM,KAAK,CAAC,sBAAsB,CAAC,KAAa;QAC/C,MAAM,IAAI,GAAG,qCAAiB,CAAC,SAAS,CAAC,eAAe,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;QACrE,IAAI;YACF,MAAM,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC5C,qCAAiB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;SACjC;QAAC,OAAO,KAAK,EAAE;YACd,qCAAiB,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YACjD,MAAM,KAAK,CAAC;SACb;IACH,CAAC;IAEM,KAAK,CAAC,6BAA6B,CAAC,KAAe;QACxD,MAAM,cAAc,GAAG,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QAC7D,MAAM,IAAI,GAAG,qCAAiB,CAAC,SAAS,CAAC,YAAY,EAAE,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC,CAAC;QAClF,IAAI;YACF,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;YACjE,qCAAiB,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;YAC5C,OAAO,MAAM,CAAC;SACf;QAAC,OAAO,KAAK,EAAE;YACd,qCAAiB,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YACjD,MAAM,KAAK,CAAC;SACb;IACH,CAAC;IAEM,KAAK,CAAC,gCAAgC,CAAC,KAAkB;QAC9D,MAAM,cAAc,GAAG,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QAC7D,MAAM,IAAI,GAAG,qCAAiB,CAAC,SAAS,CAAC,cAAc,EAAE,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC,CAAC;QACpF,IAAI;YACF,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,EAAE,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAC,CAAC;YACrG,MAAM,UAAU,GAAG,MAAM,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,MAAM,EAAQ,EAAE;gBACrE,IAAI,KAAa,CAAC;gBAClB,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,GAAuB,EAAQ,EAAE;oBAClD,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;gBAC/C,CAAC,CAAC,CAAC;gBAEH,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,GAAS,EAAE;oBAC1B,OAAO,CAAC,KAAK,CAAC,CAAC;gBACjB,CAAC,CAAC,CAAC;gBAEH,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAQ,EAAE;oBACjC,MAAM,CAAC,KAAK,CAAC,CAAC;gBAChB,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YACH,qCAAiB,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,CAAC;YACvD,OAAO,UAAU,CAAC;SACnB;QAAC,OAAO,KAAK,EAAE;YACd,qCAAiB,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YACjD,MAAM,KAAK,CAAC;SACb;IACH,CAAC;CACF;AAxHD,kEAwHC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
export interface Span {
|
|
2
|
+
id: string;
|
|
3
|
+
parentId?: string;
|
|
4
|
+
name: string;
|
|
5
|
+
startTime: number;
|
|
6
|
+
endTime?: number;
|
|
7
|
+
duration?: number;
|
|
8
|
+
attributes: Record<string, any>;
|
|
9
|
+
children: Span[];
|
|
10
|
+
}
|
|
11
|
+
export declare class PerformanceLogger {
|
|
12
|
+
private static asyncLocalStorage?;
|
|
13
|
+
private static enabled;
|
|
14
|
+
private static initialized;
|
|
15
|
+
private static spanCounter;
|
|
16
|
+
private static initialize;
|
|
17
|
+
private static generateSpanId;
|
|
18
|
+
static startSpan(name: string, attributes?: Record<string, any>): Span;
|
|
19
|
+
static endSpan(span: Span, additionalAttributes?: Record<string, any>): void;
|
|
20
|
+
static withSpan<T>(name: string, fn: () => Promise<T> | T, attributes?: Record<string, any>): Promise<T>;
|
|
21
|
+
static withSpanRoot<T>(name: string, fn: () => Promise<T> | T, attributes?: Record<string, any>): Promise<T>;
|
|
22
|
+
static getCurrentSpan(): Span | undefined;
|
|
23
|
+
static logSpanTree(rootSpan: Span): void;
|
|
24
|
+
private static buildSpanTreeLines;
|
|
25
|
+
private static addAttributeLines;
|
|
26
|
+
private static formatQuery;
|
|
27
|
+
}
|
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PerformanceLogger = void 0;
|
|
4
|
+
/* eslint-disable require-unicode-regexp */
|
|
5
|
+
/* eslint-disable @typescript-eslint/naming-convention */
|
|
6
|
+
const perf_hooks_1 = require("perf_hooks");
|
|
7
|
+
let AsyncLocalStorage;
|
|
8
|
+
try {
|
|
9
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports, prefer-destructuring, global-require, @typescript-eslint/no-var-requires
|
|
10
|
+
AsyncLocalStorage = require('async_hooks').AsyncLocalStorage;
|
|
11
|
+
}
|
|
12
|
+
catch {
|
|
13
|
+
// AsyncLocalStorage not available
|
|
14
|
+
}
|
|
15
|
+
// eslint-disable-next-line @typescript-eslint/no-extraneous-class
|
|
16
|
+
class PerformanceLogger {
|
|
17
|
+
static initialize() {
|
|
18
|
+
if (this.initialized) {
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
this.initialized = true;
|
|
22
|
+
// eslint-disable-next-line no-process-env
|
|
23
|
+
this.enabled = process.env.SKL_ENGINE_DEBUG_QUERIES === 'true' ||
|
|
24
|
+
// eslint-disable-next-line no-process-env
|
|
25
|
+
process.env.SKL_ENGINE_DEBUG_QUERIES === '1';
|
|
26
|
+
if (this.enabled && AsyncLocalStorage) {
|
|
27
|
+
this.asyncLocalStorage = new AsyncLocalStorage();
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
static generateSpanId() {
|
|
31
|
+
// eslint-disable-next-line no-plusplus
|
|
32
|
+
return `span-${++this.spanCounter}-${Date.now()}`;
|
|
33
|
+
}
|
|
34
|
+
static startSpan(name, attributes) {
|
|
35
|
+
this.initialize();
|
|
36
|
+
if (!this.enabled) {
|
|
37
|
+
return null;
|
|
38
|
+
}
|
|
39
|
+
const parent = this.asyncLocalStorage?.getStore();
|
|
40
|
+
const span = {
|
|
41
|
+
id: this.generateSpanId(),
|
|
42
|
+
parentId: parent?.id,
|
|
43
|
+
name,
|
|
44
|
+
startTime: perf_hooks_1.performance.now(),
|
|
45
|
+
attributes: attributes ?? {},
|
|
46
|
+
children: []
|
|
47
|
+
};
|
|
48
|
+
if (parent) {
|
|
49
|
+
parent.children.push(span);
|
|
50
|
+
}
|
|
51
|
+
return span;
|
|
52
|
+
}
|
|
53
|
+
static endSpan(span, additionalAttributes) {
|
|
54
|
+
if (!this.enabled || !span) {
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
span.endTime = perf_hooks_1.performance.now();
|
|
58
|
+
span.duration = span.endTime - span.startTime;
|
|
59
|
+
if (additionalAttributes) {
|
|
60
|
+
span.attributes = { ...span.attributes, ...additionalAttributes };
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
static async withSpan(name, fn, attributes) {
|
|
64
|
+
this.initialize();
|
|
65
|
+
if (!this.enabled) {
|
|
66
|
+
return fn();
|
|
67
|
+
}
|
|
68
|
+
const span = this.startSpan(name, attributes);
|
|
69
|
+
if (this.asyncLocalStorage) {
|
|
70
|
+
return this.asyncLocalStorage.run(span, async () => {
|
|
71
|
+
try {
|
|
72
|
+
const result = await fn();
|
|
73
|
+
this.endSpan(span);
|
|
74
|
+
return result;
|
|
75
|
+
}
|
|
76
|
+
catch (error) {
|
|
77
|
+
this.endSpan(span, { error: true, errorMessage: error instanceof Error ? error.message : String(error) });
|
|
78
|
+
throw error;
|
|
79
|
+
}
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
// Fallback without AsyncLocalStorage
|
|
83
|
+
try {
|
|
84
|
+
const result = await fn();
|
|
85
|
+
this.endSpan(span);
|
|
86
|
+
return result;
|
|
87
|
+
}
|
|
88
|
+
catch (error) {
|
|
89
|
+
this.endSpan(span, { error: true, errorMessage: error instanceof Error ? error.message : String(error) });
|
|
90
|
+
throw error;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
static async withSpanRoot(name, fn, attributes) {
|
|
94
|
+
this.initialize();
|
|
95
|
+
if (!this.enabled) {
|
|
96
|
+
return fn();
|
|
97
|
+
}
|
|
98
|
+
const span = this.startSpan(name, attributes);
|
|
99
|
+
if (this.asyncLocalStorage) {
|
|
100
|
+
return this.asyncLocalStorage.run(span, async () => {
|
|
101
|
+
try {
|
|
102
|
+
const result = await fn();
|
|
103
|
+
this.endSpan(span);
|
|
104
|
+
this.logSpanTree(span);
|
|
105
|
+
return result;
|
|
106
|
+
}
|
|
107
|
+
catch (error) {
|
|
108
|
+
this.endSpan(span, { error: true, errorMessage: error instanceof Error ? error.message : String(error) });
|
|
109
|
+
this.logSpanTree(span);
|
|
110
|
+
throw error;
|
|
111
|
+
}
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
// Fallback without AsyncLocalStorage
|
|
115
|
+
try {
|
|
116
|
+
const result = await fn();
|
|
117
|
+
this.endSpan(span);
|
|
118
|
+
this.logSpanTree(span);
|
|
119
|
+
return result;
|
|
120
|
+
}
|
|
121
|
+
catch (error) {
|
|
122
|
+
this.endSpan(span, { error: true, errorMessage: error instanceof Error ? error.message : String(error) });
|
|
123
|
+
this.logSpanTree(span);
|
|
124
|
+
throw error;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
static getCurrentSpan() {
|
|
128
|
+
this.initialize();
|
|
129
|
+
if (!this.enabled || !this.asyncLocalStorage) {
|
|
130
|
+
return undefined;
|
|
131
|
+
}
|
|
132
|
+
return this.asyncLocalStorage.getStore();
|
|
133
|
+
}
|
|
134
|
+
static logSpanTree(rootSpan) {
|
|
135
|
+
if (!this.enabled || !rootSpan) {
|
|
136
|
+
return;
|
|
137
|
+
}
|
|
138
|
+
const timestamp = new Date().toISOString();
|
|
139
|
+
const lines = [];
|
|
140
|
+
lines.push('');
|
|
141
|
+
lines.push('╔══════════════════════════════════════════════════════════════╗');
|
|
142
|
+
lines.push(`║ SKL Engine Performance Trace ║`);
|
|
143
|
+
lines.push(`║ Started: ${timestamp} ║`);
|
|
144
|
+
lines.push('╚══════════════════════════════════════════════════════════════╝');
|
|
145
|
+
lines.push('');
|
|
146
|
+
this.buildSpanTreeLines(rootSpan, lines, '', true);
|
|
147
|
+
lines.push('');
|
|
148
|
+
lines.push('═══════════════════════════════════════════════════════════════');
|
|
149
|
+
lines.push('');
|
|
150
|
+
// eslint-disable-next-line no-console
|
|
151
|
+
console.log(lines.join('\n'));
|
|
152
|
+
}
|
|
153
|
+
static buildSpanTreeLines(span, lines, prefix, isRoot) {
|
|
154
|
+
const duration = span.duration !== undefined ? `${span.duration.toFixed(2)}ms` : 'running...';
|
|
155
|
+
const status = span.attributes.error ? '✗' : '✓';
|
|
156
|
+
lines.push(`${prefix}${span.name} [${duration}] ${status}`);
|
|
157
|
+
// Show important attributes
|
|
158
|
+
this.addAttributeLines(span, lines, prefix);
|
|
159
|
+
// Process children
|
|
160
|
+
const childCount = span.children.length;
|
|
161
|
+
span.children.forEach((child, index) => {
|
|
162
|
+
const isLast = index === childCount - 1;
|
|
163
|
+
const childPrefix = prefix + (isRoot ? '' : '│ ');
|
|
164
|
+
const connector = isLast ? '└─ ' : '├─ ';
|
|
165
|
+
const nextPrefix = prefix + (isRoot ? '' : (isLast ? ' ' : '│ '));
|
|
166
|
+
this.buildSpanTreeLines(child, lines, childPrefix + connector, false);
|
|
167
|
+
});
|
|
168
|
+
}
|
|
169
|
+
static addAttributeLines(span, lines, prefix) {
|
|
170
|
+
const { query, resultCount, options, error, errorMessage, ...otherAttrs } = span.attributes;
|
|
171
|
+
// Show query if present (and format it) - but make it easy to copy
|
|
172
|
+
if (query && typeof query === 'string') {
|
|
173
|
+
lines.push(`${prefix}│ Query:`);
|
|
174
|
+
// Empty line before query
|
|
175
|
+
lines.push('');
|
|
176
|
+
const formattedQuery = this.formatQuery(query);
|
|
177
|
+
formattedQuery.split('\n').forEach(line => {
|
|
178
|
+
// Simple indentation without tree chars
|
|
179
|
+
lines.push(` ${line}`);
|
|
180
|
+
});
|
|
181
|
+
// Empty line after query
|
|
182
|
+
lines.push('');
|
|
183
|
+
}
|
|
184
|
+
// Show result count
|
|
185
|
+
if (resultCount !== undefined) {
|
|
186
|
+
lines.push(`${prefix}│ Result: ${resultCount} ${resultCount === 1 ? 'row' : 'rows'}`);
|
|
187
|
+
}
|
|
188
|
+
// Show error if present
|
|
189
|
+
if (error && errorMessage) {
|
|
190
|
+
lines.push(`${prefix}│ Error: ${errorMessage}`);
|
|
191
|
+
}
|
|
192
|
+
// Show other important attributes
|
|
193
|
+
if (Object.keys(otherAttrs).length > 0) {
|
|
194
|
+
const attrStr = JSON.stringify(otherAttrs);
|
|
195
|
+
if (attrStr.length < 100) {
|
|
196
|
+
lines.push(`${prefix}│ Attributes: ${attrStr}`);
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
static formatQuery(query) {
|
|
201
|
+
// Simple query formatting with proper indentation
|
|
202
|
+
let formatted = query.trim();
|
|
203
|
+
// Add line breaks after key SPARQL keywords for readability
|
|
204
|
+
formatted = formatted
|
|
205
|
+
.replace(/\s+/g, ' ')
|
|
206
|
+
.replace(/\s*{\s*/g, ' {\n ')
|
|
207
|
+
.replace(/\s*}\s*/g, '\n}')
|
|
208
|
+
.replace(/\s*\.\s*(?=[?A-Z])/g, ' .\n ')
|
|
209
|
+
.replace(/\bWHERE\b/g, '\nWHERE')
|
|
210
|
+
.replace(/\bFILTER\b/g, '\n FILTER')
|
|
211
|
+
.replace(/\bOPTIONAL\b/g, '\n OPTIONAL')
|
|
212
|
+
.replace(/\bUNION\b/g, '\nUNION')
|
|
213
|
+
.replace(/\bGRAPH\b/g, '\n GRAPH')
|
|
214
|
+
.replace(/\bORDER BY\b/g, '\nORDER BY')
|
|
215
|
+
.replace(/\bLIMIT\b/g, '\nLIMIT')
|
|
216
|
+
.replace(/\bOFFSET\b/g, '\nOFFSET');
|
|
217
|
+
return formatted;
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
exports.PerformanceLogger = PerformanceLogger;
|
|
221
|
+
PerformanceLogger.initialized = false;
|
|
222
|
+
PerformanceLogger.spanCounter = 0;
|
|
223
|
+
//# sourceMappingURL=PerformanceLogger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PerformanceLogger.js","sourceRoot":"","sources":["../../src/util/PerformanceLogger.ts"],"names":[],"mappings":"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"}
|