@nocobase/telemetry 2.0.0-alpha.5 → 2.0.0-alpha.51
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/lib/index.d.ts +4 -0
- package/lib/index.js +17 -1
- package/lib/metric.d.ts +5 -5
- package/lib/metric.js +54 -18
- package/lib/telemetry.d.ts +5 -3
- package/lib/telemetry.js +8 -7
- package/lib/trace.d.ts +4 -2
- package/lib/trace.js +34 -16
- package/package.json +10 -10
package/lib/index.d.ts
CHANGED
|
@@ -7,3 +7,7 @@
|
|
|
7
7
|
* For more information, please refer to: https://www.nocobase.com/agreement.
|
|
8
8
|
*/
|
|
9
9
|
export * from './telemetry';
|
|
10
|
+
export * from './metric';
|
|
11
|
+
export * from './trace';
|
|
12
|
+
export { PeriodicExportingMetricReader } from '@opentelemetry/sdk-metrics';
|
|
13
|
+
export { Meter } from '@opentelemetry/api';
|
package/lib/index.js
CHANGED
|
@@ -11,6 +11,10 @@ var __defProp = Object.defineProperty;
|
|
|
11
11
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
12
12
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
13
13
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
14
|
+
var __export = (target, all) => {
|
|
15
|
+
for (var name in all)
|
|
16
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
17
|
+
};
|
|
14
18
|
var __copyProps = (to, from, except, desc) => {
|
|
15
19
|
if (from && typeof from === "object" || typeof from === "function") {
|
|
16
20
|
for (let key of __getOwnPropNames(from))
|
|
@@ -22,9 +26,21 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
22
26
|
var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
|
|
23
27
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
24
28
|
var src_exports = {};
|
|
29
|
+
__export(src_exports, {
|
|
30
|
+
Meter: () => import_api.Meter,
|
|
31
|
+
PeriodicExportingMetricReader: () => import_sdk_metrics.PeriodicExportingMetricReader
|
|
32
|
+
});
|
|
25
33
|
module.exports = __toCommonJS(src_exports);
|
|
26
34
|
__reExport(src_exports, require("./telemetry"), module.exports);
|
|
35
|
+
__reExport(src_exports, require("./metric"), module.exports);
|
|
36
|
+
__reExport(src_exports, require("./trace"), module.exports);
|
|
37
|
+
var import_sdk_metrics = require("@opentelemetry/sdk-metrics");
|
|
38
|
+
var import_api = require("@opentelemetry/api");
|
|
27
39
|
// Annotate the CommonJS export names for ESM import in node:
|
|
28
40
|
0 && (module.exports = {
|
|
29
|
-
|
|
41
|
+
Meter,
|
|
42
|
+
PeriodicExportingMetricReader,
|
|
43
|
+
...require("./telemetry"),
|
|
44
|
+
...require("./metric"),
|
|
45
|
+
...require("./trace")
|
|
30
46
|
});
|
package/lib/metric.d.ts
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* For more information, please refer to: https://www.nocobase.com/agreement.
|
|
8
8
|
*/
|
|
9
9
|
import { Registry } from '@nocobase/utils';
|
|
10
|
-
import { MetricReader, MeterProvider
|
|
10
|
+
import { MetricReader, MeterProvider } from '@opentelemetry/sdk-metrics';
|
|
11
11
|
import { Resource } from '@opentelemetry/resources';
|
|
12
12
|
export type MetricOptions = {
|
|
13
13
|
meterName?: string;
|
|
@@ -20,15 +20,15 @@ export declare class Metric {
|
|
|
20
20
|
version: string;
|
|
21
21
|
readerName: string | string[];
|
|
22
22
|
readers: Registry<GetMetricReader>;
|
|
23
|
-
provider
|
|
24
|
-
|
|
23
|
+
provider?: MeterProvider;
|
|
24
|
+
resource?: Resource;
|
|
25
|
+
activeReaders: MetricReader[];
|
|
25
26
|
constructor(options?: MetricOptions);
|
|
26
27
|
init(resource: Resource): void;
|
|
27
28
|
registerReader(name: string, reader: GetMetricReader): void;
|
|
28
29
|
getReader(name: string): GetMetricReader;
|
|
29
|
-
addView(...view: View[]): void;
|
|
30
|
-
getMeter(name?: string, version?: string): import("@opentelemetry/api").Meter;
|
|
31
30
|
start(): void;
|
|
31
|
+
getMeter(name?: string, version?: string): import("@opentelemetry/api").Meter;
|
|
32
32
|
shutdown(): Promise<void>;
|
|
33
33
|
}
|
|
34
34
|
export {};
|
package/lib/metric.js
CHANGED
|
@@ -49,7 +49,8 @@ const _Metric = class _Metric {
|
|
|
49
49
|
readerName;
|
|
50
50
|
readers = new import_utils.Registry();
|
|
51
51
|
provider;
|
|
52
|
-
|
|
52
|
+
resource;
|
|
53
|
+
activeReaders = [];
|
|
53
54
|
constructor(options) {
|
|
54
55
|
const { meterName, readerName, version } = options || {};
|
|
55
56
|
this.readerName = readerName || "console";
|
|
@@ -58,13 +59,14 @@ const _Metric = class _Metric {
|
|
|
58
59
|
this.registerReader(
|
|
59
60
|
"console",
|
|
60
61
|
() => new import_sdk_metrics.PeriodicExportingMetricReader({
|
|
61
|
-
exporter: new import_sdk_metrics.ConsoleMetricExporter(
|
|
62
|
+
exporter: new import_sdk_metrics.ConsoleMetricExporter({
|
|
63
|
+
temporalitySelector: /* @__PURE__ */ __name(() => import_sdk_metrics.AggregationTemporality.DELTA, "temporalitySelector")
|
|
64
|
+
})
|
|
62
65
|
})
|
|
63
66
|
);
|
|
64
67
|
}
|
|
65
68
|
init(resource) {
|
|
66
|
-
this.
|
|
67
|
-
import_api.default.metrics.setGlobalMeterProvider(this.provider);
|
|
69
|
+
this.resource = resource;
|
|
68
70
|
}
|
|
69
71
|
registerReader(name, reader) {
|
|
70
72
|
this.readers.register(name, reader);
|
|
@@ -72,24 +74,58 @@ const _Metric = class _Metric {
|
|
|
72
74
|
getReader(name) {
|
|
73
75
|
return this.readers.get(name);
|
|
74
76
|
}
|
|
75
|
-
|
|
76
|
-
this.
|
|
77
|
+
start() {
|
|
78
|
+
if (!this.resource) {
|
|
79
|
+
throw new Error("Metric.init(resource) must be called before start()");
|
|
80
|
+
}
|
|
81
|
+
const metricNames = new Set(
|
|
82
|
+
(process.env.TELEMETRY_METRICS || "").split(",").map((s) => s.trim()).filter(Boolean)
|
|
83
|
+
);
|
|
84
|
+
const views = [];
|
|
85
|
+
if (metricNames.size > 0) {
|
|
86
|
+
for (const metricName of metricNames) {
|
|
87
|
+
views.push({
|
|
88
|
+
instrumentName: metricName
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
views.push({
|
|
92
|
+
instrumentName: "*",
|
|
93
|
+
aggregation: { type: import_sdk_metrics.AggregationType.DROP }
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
let readerNames = this.readerName;
|
|
97
|
+
if (typeof readerNames === "string") {
|
|
98
|
+
readerNames = readerNames.split(",").map((n) => n.trim()).filter(Boolean);
|
|
99
|
+
}
|
|
100
|
+
const readers = [];
|
|
101
|
+
for (const name of readerNames) {
|
|
102
|
+
const reader = this.readers.get(name);
|
|
103
|
+
if (!reader) {
|
|
104
|
+
continue;
|
|
105
|
+
}
|
|
106
|
+
readers.push(reader());
|
|
107
|
+
}
|
|
108
|
+
this.activeReaders = readers;
|
|
109
|
+
const providerOptions = {
|
|
110
|
+
resource: this.resource,
|
|
111
|
+
readers
|
|
112
|
+
};
|
|
113
|
+
if (views.length > 0) {
|
|
114
|
+
providerOptions.views = views;
|
|
115
|
+
}
|
|
116
|
+
this.provider = new import_sdk_metrics.MeterProvider(providerOptions);
|
|
117
|
+
import_api.default.metrics.setGlobalMeterProvider(this.provider);
|
|
77
118
|
}
|
|
78
119
|
getMeter(name, version) {
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
start() {
|
|
82
|
-
let readerName = this.readerName;
|
|
83
|
-
if (typeof readerName === "string") {
|
|
84
|
-
readerName = readerName.split(",");
|
|
120
|
+
if (!this.provider) {
|
|
121
|
+
return null;
|
|
85
122
|
}
|
|
86
|
-
|
|
87
|
-
const reader = this.getReader(name)();
|
|
88
|
-
this.provider.addMetricReader(reader);
|
|
89
|
-
});
|
|
123
|
+
return this.provider.getMeter(name || this.meterName, version || this.version);
|
|
90
124
|
}
|
|
91
|
-
shutdown() {
|
|
92
|
-
|
|
125
|
+
async shutdown() {
|
|
126
|
+
var _a;
|
|
127
|
+
await Promise.all(this.activeReaders.map((r) => r.shutdown()));
|
|
128
|
+
await ((_a = this.provider) == null ? void 0 : _a.shutdown());
|
|
93
129
|
}
|
|
94
130
|
};
|
|
95
131
|
__name(_Metric, "Metric");
|
package/lib/telemetry.d.ts
CHANGED
|
@@ -6,19 +6,21 @@
|
|
|
6
6
|
* This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
|
|
7
7
|
* For more information, please refer to: https://www.nocobase.com/agreement.
|
|
8
8
|
*/
|
|
9
|
-
import {
|
|
9
|
+
import { Instrumentation } from '@opentelemetry/instrumentation';
|
|
10
10
|
import { Metric, MetricOptions } from './metric';
|
|
11
11
|
import { Trace, TraceOptions } from './trace';
|
|
12
12
|
export interface TelemetryOptions {
|
|
13
13
|
serviceName?: string;
|
|
14
|
+
appName?: string;
|
|
14
15
|
version?: string;
|
|
15
16
|
trace?: TraceOptions;
|
|
16
17
|
metric?: MetricOptions;
|
|
17
18
|
}
|
|
18
19
|
export declare class Telemetry {
|
|
19
20
|
serviceName: string;
|
|
21
|
+
appName: string;
|
|
20
22
|
version: string;
|
|
21
|
-
instrumentations:
|
|
23
|
+
instrumentations: Instrumentation[];
|
|
22
24
|
trace: Trace;
|
|
23
25
|
metric: Metric;
|
|
24
26
|
started: boolean;
|
|
@@ -26,5 +28,5 @@ export declare class Telemetry {
|
|
|
26
28
|
init(): void;
|
|
27
29
|
start(): void;
|
|
28
30
|
shutdown(): Promise<void>;
|
|
29
|
-
addInstrumentation(...instrumentation:
|
|
31
|
+
addInstrumentation(...instrumentation: Instrumentation[]): void;
|
|
30
32
|
}
|
package/lib/telemetry.js
CHANGED
|
@@ -37,28 +37,29 @@ var import_metric = require("./metric");
|
|
|
37
37
|
var import_trace = require("./trace");
|
|
38
38
|
const _Telemetry = class _Telemetry {
|
|
39
39
|
serviceName;
|
|
40
|
+
appName;
|
|
40
41
|
version;
|
|
41
42
|
instrumentations = [];
|
|
42
43
|
trace;
|
|
43
44
|
metric;
|
|
44
45
|
started = false;
|
|
45
46
|
constructor(options) {
|
|
46
|
-
const { trace, metric, serviceName, version } = options || {};
|
|
47
|
+
const { trace, metric, serviceName, appName, version } = options || {};
|
|
47
48
|
this.trace = new import_trace.Trace({ tracerName: `${serviceName}-trace`, version, ...trace });
|
|
48
49
|
this.metric = new import_metric.Metric({ meterName: `${serviceName}-meter`, version, ...metric });
|
|
49
50
|
this.serviceName = serviceName || "nocobase";
|
|
51
|
+
this.appName = appName;
|
|
50
52
|
this.version = version || "";
|
|
51
53
|
}
|
|
52
54
|
init() {
|
|
53
55
|
(0, import_instrumentation.registerInstrumentations)({
|
|
54
56
|
instrumentations: this.instrumentations
|
|
55
57
|
});
|
|
56
|
-
const resource = import_resources.
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
);
|
|
58
|
+
const resource = (0, import_resources.resourceFromAttributes)({
|
|
59
|
+
[import_semantic_conventions.ATTR_SERVICE_NAME]: this.serviceName,
|
|
60
|
+
[import_semantic_conventions.ATTR_SERVICE_VERSION]: this.version,
|
|
61
|
+
"app.name": this.appName
|
|
62
|
+
});
|
|
62
63
|
this.trace.init(resource);
|
|
63
64
|
this.metric.init(resource);
|
|
64
65
|
}
|
package/lib/trace.d.ts
CHANGED
|
@@ -21,13 +21,15 @@ export declare class Trace {
|
|
|
21
21
|
processors: Registry<GetSpanProcessor>;
|
|
22
22
|
tracerName: string;
|
|
23
23
|
version: string;
|
|
24
|
-
provider
|
|
24
|
+
provider?: NodeTracerProvider;
|
|
25
|
+
resource?: Resource;
|
|
26
|
+
activeProcessors: SpanProcessor[];
|
|
25
27
|
constructor(options?: TraceOptions);
|
|
26
28
|
init(resource: Resource): void;
|
|
27
29
|
registerProcessor(name: string, processor: GetSpanProcessor): void;
|
|
28
30
|
getProcessor(name: string): GetSpanProcessor;
|
|
29
|
-
getTracer(name?: string, version?: string): import("@opentelemetry/sdk-trace-base").Tracer;
|
|
30
31
|
start(): void;
|
|
32
|
+
getTracer(name?: string, version?: string): import("@opentelemetry/api").Tracer;
|
|
31
33
|
shutdown(): Promise<void>;
|
|
32
34
|
}
|
|
33
35
|
export {};
|
package/lib/trace.js
CHANGED
|
@@ -39,6 +39,8 @@ const _Trace = class _Trace {
|
|
|
39
39
|
tracerName;
|
|
40
40
|
version;
|
|
41
41
|
provider;
|
|
42
|
+
resource;
|
|
43
|
+
activeProcessors = [];
|
|
42
44
|
constructor(options) {
|
|
43
45
|
const { processorName, tracerName, version } = options || {};
|
|
44
46
|
this.processorName = processorName || "console";
|
|
@@ -47,10 +49,7 @@ const _Trace = class _Trace {
|
|
|
47
49
|
this.registerProcessor("console", () => new import_sdk_trace_base.BatchSpanProcessor(new import_sdk_trace_base.ConsoleSpanExporter()));
|
|
48
50
|
}
|
|
49
51
|
init(resource) {
|
|
50
|
-
this.
|
|
51
|
-
resource
|
|
52
|
-
});
|
|
53
|
-
this.provider.register();
|
|
52
|
+
this.resource = resource;
|
|
54
53
|
}
|
|
55
54
|
registerProcessor(name, processor) {
|
|
56
55
|
this.processors.register(name, processor);
|
|
@@ -58,21 +57,40 @@ const _Trace = class _Trace {
|
|
|
58
57
|
getProcessor(name) {
|
|
59
58
|
return this.processors.get(name);
|
|
60
59
|
}
|
|
61
|
-
getTracer(name, version) {
|
|
62
|
-
return this.provider.getTracer(name || this.tracerName, version || this.version);
|
|
63
|
-
}
|
|
64
60
|
start() {
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
61
|
+
if (!this.resource) {
|
|
62
|
+
throw new Error("Trace.init(resource) must be called before start()");
|
|
63
|
+
}
|
|
64
|
+
let names = this.processorName;
|
|
65
|
+
if (typeof names === "string") {
|
|
66
|
+
names = names.split(",");
|
|
67
|
+
}
|
|
68
|
+
const processors = [];
|
|
69
|
+
for (const name of names) {
|
|
70
|
+
const processor = this.getProcessor(name);
|
|
71
|
+
if (!processor) {
|
|
72
|
+
continue;
|
|
73
|
+
}
|
|
74
|
+
processors.push(processor());
|
|
68
75
|
}
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
this.
|
|
72
|
-
|
|
76
|
+
this.activeProcessors = processors;
|
|
77
|
+
const config = {
|
|
78
|
+
resource: this.resource,
|
|
79
|
+
spanProcessors: processors
|
|
80
|
+
};
|
|
81
|
+
this.provider = new import_sdk_trace_node.NodeTracerProvider(config);
|
|
82
|
+
this.provider.register();
|
|
83
|
+
}
|
|
84
|
+
getTracer(name, version) {
|
|
85
|
+
if (!this.provider) {
|
|
86
|
+
return null;
|
|
87
|
+
}
|
|
88
|
+
return this.provider.getTracer(name || this.tracerName, version || this.version);
|
|
73
89
|
}
|
|
74
|
-
shutdown() {
|
|
75
|
-
|
|
90
|
+
async shutdown() {
|
|
91
|
+
var _a;
|
|
92
|
+
await Promise.all(this.activeProcessors.map((p) => p.shutdown()));
|
|
93
|
+
await ((_a = this.provider) == null ? void 0 : _a.shutdown());
|
|
76
94
|
}
|
|
77
95
|
};
|
|
78
96
|
__name(_Trace, "Trace");
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nocobase/telemetry",
|
|
3
|
-
"version": "2.0.0-alpha.
|
|
3
|
+
"version": "2.0.0-alpha.51",
|
|
4
4
|
"description": "nocobase telemetry library",
|
|
5
5
|
"license": "AGPL-3.0",
|
|
6
6
|
"main": "./lib/index.js",
|
|
@@ -11,14 +11,14 @@
|
|
|
11
11
|
"directory": "packages/telemetry"
|
|
12
12
|
},
|
|
13
13
|
"dependencies": {
|
|
14
|
-
"@nocobase/utils": "2.0.0-alpha.
|
|
15
|
-
"@opentelemetry/api": "^1.
|
|
16
|
-
"@opentelemetry/instrumentation": "^0.
|
|
17
|
-
"@opentelemetry/resources": "^
|
|
18
|
-
"@opentelemetry/sdk-metrics": "^
|
|
19
|
-
"@opentelemetry/sdk-trace-base": "^
|
|
20
|
-
"@opentelemetry/sdk-trace-node": "^
|
|
21
|
-
"@opentelemetry/semantic-conventions": "^1.
|
|
14
|
+
"@nocobase/utils": "2.0.0-alpha.51",
|
|
15
|
+
"@opentelemetry/api": "^1.9.0",
|
|
16
|
+
"@opentelemetry/instrumentation": "^0.207.0",
|
|
17
|
+
"@opentelemetry/resources": "^2.2.0",
|
|
18
|
+
"@opentelemetry/sdk-metrics": "^2.2.0",
|
|
19
|
+
"@opentelemetry/sdk-trace-base": "^2.2.0",
|
|
20
|
+
"@opentelemetry/sdk-trace-node": "^2.2.0",
|
|
21
|
+
"@opentelemetry/semantic-conventions": "^1.37.0"
|
|
22
22
|
},
|
|
23
|
-
"gitHead": "
|
|
23
|
+
"gitHead": "a1e34dd97f370d54f3d80a6b83ab7ddb9c72dc18"
|
|
24
24
|
}
|