@nocobase/telemetry 2.0.0-alpha.32 → 2.0.0-alpha.34

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 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
- ...require("./telemetry")
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, View } from '@opentelemetry/sdk-metrics';
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: MeterProvider;
24
- views: View[];
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
- views = [];
52
+ resource;
53
+ activeReaders = [];
53
54
  constructor(options) {
54
55
  const { meterName, readerName, version } = options || {};
55
56
  this.readerName = readerName || "console";
@@ -63,8 +64,7 @@ const _Metric = class _Metric {
63
64
  );
64
65
  }
65
66
  init(resource) {
66
- this.provider = new import_sdk_metrics.MeterProvider({ resource, views: this.views });
67
- import_api.default.metrics.setGlobalMeterProvider(this.provider);
67
+ this.resource = resource;
68
68
  }
69
69
  registerReader(name, reader) {
70
70
  this.readers.register(name, reader);
@@ -72,24 +72,40 @@ const _Metric = class _Metric {
72
72
  getReader(name) {
73
73
  return this.readers.get(name);
74
74
  }
75
- addView(...view) {
76
- this.views.push(...view);
75
+ start() {
76
+ if (!this.resource) {
77
+ throw new Error("Metric.init(resource) must be called before start()");
78
+ }
79
+ let readerNames = this.readerName;
80
+ if (typeof readerNames === "string") {
81
+ readerNames = readerNames.split(",").map((n) => n.trim()).filter(Boolean);
82
+ }
83
+ const readers = [];
84
+ for (const name of readerNames) {
85
+ const reader = this.readers.get(name);
86
+ if (!reader) {
87
+ continue;
88
+ }
89
+ readers.push(reader());
90
+ }
91
+ this.activeReaders = readers;
92
+ const providerOptions = {
93
+ resource: this.resource,
94
+ readers
95
+ };
96
+ this.provider = new import_sdk_metrics.MeterProvider(providerOptions);
97
+ import_api.default.metrics.setGlobalMeterProvider(this.provider);
77
98
  }
78
99
  getMeter(name, version) {
79
- return this.provider.getMeter(name || this.meterName, version || this.version);
80
- }
81
- start() {
82
- let readerName = this.readerName;
83
- if (typeof readerName === "string") {
84
- readerName = readerName.split(",");
100
+ if (!this.provider) {
101
+ return null;
85
102
  }
86
- readerName.forEach((name) => {
87
- const reader = this.getReader(name)();
88
- this.provider.addMetricReader(reader);
89
- });
103
+ return this.provider.getMeter(name || this.meterName, version || this.version);
90
104
  }
91
- shutdown() {
92
- return this.provider.shutdown();
105
+ async shutdown() {
106
+ var _a;
107
+ await Promise.all(this.activeReaders.map((r) => r.shutdown()));
108
+ await ((_a = this.provider) == null ? void 0 : _a.shutdown());
93
109
  }
94
110
  };
95
111
  __name(_Metric, "Metric");
@@ -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 { InstrumentationOption } from '@opentelemetry/instrumentation';
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: InstrumentationOption[];
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: InstrumentationOption[]): void;
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.Resource.default().merge(
57
- new import_resources.Resource({
58
- [import_semantic_conventions.SemanticResourceAttributes.SERVICE_NAME]: this.serviceName,
59
- [import_semantic_conventions.SemanticResourceAttributes.SERVICE_VERSION]: this.version
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: NodeTracerProvider;
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.provider = new import_sdk_trace_node.NodeTracerProvider({
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
- let processorName = this.processorName;
66
- if (typeof processorName === "string") {
67
- processorName = processorName.split(",");
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
- processorName.forEach((name) => {
70
- const processor = this.getProcessor(name)();
71
- this.provider.addSpanProcessor(processor);
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
- return this.provider.shutdown();
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.32",
3
+ "version": "2.0.0-alpha.34",
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.32",
15
- "@opentelemetry/api": "^1.7.0",
16
- "@opentelemetry/instrumentation": "^0.46.0",
17
- "@opentelemetry/resources": "^1.19.0",
18
- "@opentelemetry/sdk-metrics": "^1.19.0",
19
- "@opentelemetry/sdk-trace-base": "^1.19.0",
20
- "@opentelemetry/sdk-trace-node": "^1.19.0",
21
- "@opentelemetry/semantic-conventions": "^1.19.0"
14
+ "@nocobase/utils": "2.0.0-alpha.34",
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": "50bb60d2f42e0fc2c1cd1eee397f9c0da94084df"
23
+ "gitHead": "d7bda14bac775be7ef207cb25986511740b2ed70"
24
24
  }