@dxos/observability 0.8.4-main.e098934 → 0.8.4-main.ead640a

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.
Files changed (52) hide show
  1. package/dist/lib/browser/{chunk-MB7KKARJ.mjs → chunk-CZBWMGUZ.mjs} +7 -7
  2. package/dist/lib/browser/{chunk-VSEBD3XA.mjs → chunk-JWOLOB5N.mjs} +4 -4
  3. package/dist/lib/browser/{chunk-VSEBD3XA.mjs.map → chunk-JWOLOB5N.mjs.map} +1 -1
  4. package/dist/lib/browser/{chunk-LJO63BXO.mjs → chunk-ZI3ZS3PA.mjs} +1 -1
  5. package/dist/lib/browser/{chunk-LJO63BXO.mjs.map → chunk-ZI3ZS3PA.mjs.map} +1 -1
  6. package/dist/lib/browser/index.mjs +3 -3
  7. package/dist/lib/browser/meta.json +1 -1
  8. package/dist/lib/browser/observability-NLOCHCE7.mjs +10 -0
  9. package/dist/lib/browser/{otel-UHLVSR24.mjs → otel-6FVBNA5F.mjs} +28 -26
  10. package/dist/lib/browser/otel-6FVBNA5F.mjs.map +7 -0
  11. package/dist/lib/browser/segment/index.mjs +2 -2
  12. package/dist/lib/browser/sentry/index.mjs +1 -1
  13. package/dist/lib/browser/{sentry-log-processor-RG4CFVGL.mjs → sentry-log-processor-F4JCYJ2E.mjs} +2 -2
  14. package/dist/lib/node-esm/{chunk-GOWQOSY6.mjs → chunk-24NMRR4E.mjs} +3 -3
  15. package/dist/lib/node-esm/{chunk-GOWQOSY6.mjs.map → chunk-24NMRR4E.mjs.map} +1 -1
  16. package/dist/lib/node-esm/{chunk-YLYRR73V.mjs → chunk-4EWQFQ2F.mjs} +6 -6
  17. package/dist/lib/node-esm/index.mjs +2 -2
  18. package/dist/lib/node-esm/meta.json +1 -1
  19. package/dist/lib/node-esm/{observability-2CTGITMR.mjs → observability-DHNVVRC7.mjs} +3 -3
  20. package/dist/lib/node-esm/{otel-W6KWKVW5.mjs → otel-KHSGBROB.mjs} +26 -24
  21. package/dist/lib/node-esm/otel-KHSGBROB.mjs.map +7 -0
  22. package/dist/lib/node-esm/segment/index.mjs +1 -1
  23. package/dist/types/src/otel/logs.d.ts.map +1 -1
  24. package/dist/types/src/otel/logs.js +6 -4
  25. package/dist/types/src/otel/logs.js.map +1 -1
  26. package/dist/types/src/otel/metrics.d.ts +0 -1
  27. package/dist/types/src/otel/metrics.d.ts.map +1 -1
  28. package/dist/types/src/otel/metrics.js +2 -3
  29. package/dist/types/src/otel/metrics.js.map +1 -1
  30. package/dist/types/src/otel/traces-browser.d.ts.map +1 -1
  31. package/dist/types/src/otel/traces-browser.js +16 -12
  32. package/dist/types/src/otel/traces-browser.js.map +1 -1
  33. package/dist/types/src/otel/traces.d.ts.map +1 -1
  34. package/dist/types/src/otel/traces.js +16 -12
  35. package/dist/types/src/otel/traces.js.map +1 -1
  36. package/dist/types/src/sentry/browser.js +1 -1
  37. package/dist/types/src/sentry/browser.js.map +1 -1
  38. package/dist/types/tsconfig.tsbuildinfo +1 -1
  39. package/package.json +27 -30
  40. package/src/otel/logs.ts +7 -5
  41. package/src/otel/metrics.ts +4 -11
  42. package/src/otel/traces-browser.ts +20 -17
  43. package/src/otel/traces.ts +20 -17
  44. package/src/sentry/browser.ts +1 -1
  45. package/dist/lib/browser/observability-NZM3OOLO.mjs +0 -10
  46. package/dist/lib/browser/otel-UHLVSR24.mjs.map +0 -7
  47. package/dist/lib/node-esm/otel-W6KWKVW5.mjs.map +0 -7
  48. /package/dist/lib/browser/{chunk-MB7KKARJ.mjs.map → chunk-CZBWMGUZ.mjs.map} +0 -0
  49. /package/dist/lib/browser/{observability-NZM3OOLO.mjs.map → observability-NLOCHCE7.mjs.map} +0 -0
  50. /package/dist/lib/browser/{sentry-log-processor-RG4CFVGL.mjs.map → sentry-log-processor-F4JCYJ2E.mjs.map} +0 -0
  51. /package/dist/lib/node-esm/{chunk-YLYRR73V.mjs.map → chunk-4EWQFQ2F.mjs.map} +0 -0
  52. /package/dist/lib/node-esm/{observability-2CTGITMR.mjs.map → observability-DHNVVRC7.mjs.map} +0 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dxos/observability",
3
- "version": "0.8.4-main.e098934",
3
+ "version": "0.8.4-main.ead640a",
4
4
  "description": "Provides a common interface for app and platform observability",
5
5
  "homepage": "https://dxos.org",
6
6
  "bugs": "https://github.com/dxos/dxos/issues",
@@ -51,18 +51,18 @@
51
51
  ],
52
52
  "dependencies": {
53
53
  "@opentelemetry/api": "^1.9.0",
54
- "@opentelemetry/api-logs": "^0.52.1",
55
- "@opentelemetry/auto-instrumentations-web": "^0.40.0",
56
- "@opentelemetry/exporter-logs-otlp-http": "^0.52.1",
57
- "@opentelemetry/exporter-metrics-otlp-http": "^0.52.0",
58
- "@opentelemetry/exporter-trace-otlp-http": "^0.52.1",
59
- "@opentelemetry/instrumentation": "^0.52.1",
60
- "@opentelemetry/resources": "^1.25.1",
61
- "@opentelemetry/sdk-logs": "^0.52.1",
62
- "@opentelemetry/sdk-metrics": "^1.25.1",
63
- "@opentelemetry/sdk-trace-base": "^1.25.1",
64
- "@opentelemetry/sdk-trace-web": "^1.25.1",
65
- "@opentelemetry/semantic-conventions": "^1.25.0",
54
+ "@opentelemetry/api-logs": "^0.203.0",
55
+ "@opentelemetry/auto-instrumentations-web": "^0.51.0",
56
+ "@opentelemetry/exporter-logs-otlp-http": "^0.203.0",
57
+ "@opentelemetry/exporter-metrics-otlp-http": "^0.203.0",
58
+ "@opentelemetry/exporter-trace-otlp-http": "^0.203.0",
59
+ "@opentelemetry/instrumentation": "^0.203.0",
60
+ "@opentelemetry/resources": "^2.1.0",
61
+ "@opentelemetry/sdk-logs": "^0.203.0",
62
+ "@opentelemetry/sdk-metrics": "^2.1.0",
63
+ "@opentelemetry/sdk-trace-base": "^2.1.0",
64
+ "@opentelemetry/sdk-trace-web": "^2.1.0",
65
+ "@opentelemetry/semantic-conventions": "^1.37.0",
66
66
  "@segment/analytics-node": "^2.1.0",
67
67
  "@segment/snippet": "^4.15.3",
68
68
  "@sentry/browser": "^8.8.0",
@@ -71,20 +71,20 @@
71
71
  "js-yaml": "^4.1.0",
72
72
  "localforage": "^1.10.0",
73
73
  "uuid": "^9.0.0",
74
- "@dxos/async": "0.8.4-main.e098934",
75
- "@dxos/client-protocol": "0.8.4-main.e098934",
76
- "@dxos/client": "0.8.4-main.e098934",
77
- "@dxos/client-services": "0.8.4-main.e098934",
78
- "@dxos/config": "0.8.4-main.e098934",
79
- "@dxos/context": "0.8.4-main.e098934",
80
- "@dxos/debug": "0.8.4-main.e098934",
81
- "@dxos/invariant": "0.8.4-main.e098934",
82
- "@dxos/network-manager": "0.8.4-main.e098934",
83
- "@dxos/node-std": "0.8.4-main.e098934",
84
- "@dxos/log": "0.8.4-main.e098934",
85
- "@dxos/protocols": "0.8.4-main.e098934",
86
- "@dxos/util": "0.8.4-main.e098934",
87
- "@dxos/tracing": "0.8.4-main.e098934"
74
+ "@dxos/async": "0.8.4-main.ead640a",
75
+ "@dxos/client": "0.8.4-main.ead640a",
76
+ "@dxos/client-protocol": "0.8.4-main.ead640a",
77
+ "@dxos/context": "0.8.4-main.ead640a",
78
+ "@dxos/config": "0.8.4-main.ead640a",
79
+ "@dxos/debug": "0.8.4-main.ead640a",
80
+ "@dxos/invariant": "0.8.4-main.ead640a",
81
+ "@dxos/log": "0.8.4-main.ead640a",
82
+ "@dxos/network-manager": "0.8.4-main.ead640a",
83
+ "@dxos/node-std": "0.8.4-main.ead640a",
84
+ "@dxos/client-services": "0.8.4-main.ead640a",
85
+ "@dxos/tracing": "0.8.4-main.ead640a",
86
+ "@dxos/util": "0.8.4-main.ead640a",
87
+ "@dxos/protocols": "0.8.4-main.ead640a"
88
88
  },
89
89
  "devDependencies": {
90
90
  "@sentry/types": "^8.8.0",
@@ -95,8 +95,5 @@
95
95
  },
96
96
  "publishConfig": {
97
97
  "access": "public"
98
- },
99
- "scripts": {
100
- "api-keys": "./scripts/inject_api_keys.mjs"
101
98
  }
102
99
  }
package/src/otel/logs.ts CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  import { SeverityNumber } from '@opentelemetry/api-logs';
6
6
  import { OTLPLogExporter } from '@opentelemetry/exporter-logs-otlp-http';
7
- import { Resource } from '@opentelemetry/resources';
7
+ import { defaultResource, resourceFromAttributes } from '@opentelemetry/resources';
8
8
  import { BatchLogRecordProcessor, LoggerProvider } from '@opentelemetry/sdk-logs';
9
9
  import { SEMRESATTRS_SERVICE_NAME, SEMRESATTRS_SERVICE_VERSION } from '@opentelemetry/semantic-conventions';
10
10
 
@@ -33,8 +33,8 @@ export class OtelLogs {
33
33
  private _loggerProvider: LoggerProvider;
34
34
  constructor(private readonly options: OtelLogOptions) {
35
35
  setDiagLogger(options.consoleDiagLogLevel);
36
- const resource = Resource.default().merge(
37
- new Resource({
36
+ const resource = defaultResource().merge(
37
+ resourceFromAttributes({
38
38
  [SEMRESATTRS_SERVICE_NAME]: this.options.serviceName,
39
39
  [SEMRESATTRS_SERVICE_VERSION]: this.options.serviceVersion,
40
40
  }),
@@ -46,8 +46,10 @@ export class OtelLogs {
46
46
  },
47
47
  concurrencyLimit: 10, // an optional limit on pending requests
48
48
  });
49
- this._loggerProvider = new LoggerProvider({ resource });
50
- this._loggerProvider.addLogRecordProcessor(new BatchLogRecordProcessor(logExporter));
49
+ this._loggerProvider = new LoggerProvider({
50
+ resource,
51
+ processors: [new BatchLogRecordProcessor(logExporter)],
52
+ });
51
53
  }
52
54
 
53
55
  public readonly logProcessor: LogProcessor = (config: LogConfig, entry: LogEntry) => {
@@ -2,9 +2,9 @@
2
2
  // Copyright 2024 DXOS.org
3
3
  //
4
4
 
5
- import { type Attributes, type Meter, type ObservableGauge } from '@opentelemetry/api';
5
+ import { type Meter } from '@opentelemetry/api';
6
6
  import { OTLPMetricExporter } from '@opentelemetry/exporter-metrics-otlp-http';
7
- import { Resource } from '@opentelemetry/resources';
7
+ import { defaultResource, resourceFromAttributes } from '@opentelemetry/resources';
8
8
  import { MeterProvider, PeriodicExportingMetricReader } from '@opentelemetry/sdk-metrics';
9
9
  import { SEMRESATTRS_SERVICE_NAME, SEMRESATTRS_SERVICE_VERSION } from '@opentelemetry/semantic-conventions';
10
10
 
@@ -15,23 +15,16 @@ import { type OtelOptions, setDiagLogger } from './otel';
15
15
 
16
16
  const EXPORT_INTERVAL = 60 * 1000;
17
17
 
18
- type SynchronousGauge = {
19
- gauge: ObservableGauge<Attributes>;
20
- nextValue: number;
21
- nextTags?: any;
22
- };
23
-
24
18
  export class OtelMetrics {
25
19
  private _meterProvider: MeterProvider;
26
20
  private _meter: Meter;
27
- private _gauges = new Map<string, SynchronousGauge>();
28
21
 
29
22
  constructor(private readonly options: OtelOptions) {
30
23
  // TODO: improve error handling/logging
31
24
  // https://github.com/open-telemetry/opentelemetry-js/issues/4823
32
25
  setDiagLogger(options.consoleDiagLogLevel);
33
- const resource = Resource.default().merge(
34
- new Resource({
26
+ const resource = defaultResource().merge(
27
+ resourceFromAttributes({
35
28
  [SEMRESATTRS_SERVICE_NAME]: this.options.serviceName,
36
29
  [SEMRESATTRS_SERVICE_VERSION]: this.options.serviceVersion,
37
30
  }),
@@ -6,7 +6,7 @@ import { type Tracer, trace } from '@opentelemetry/api';
6
6
  import { getWebAutoInstrumentations } from '@opentelemetry/auto-instrumentations-web';
7
7
  import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-http';
8
8
  import { registerInstrumentations } from '@opentelemetry/instrumentation';
9
- import { Resource } from '@opentelemetry/resources';
9
+ import { defaultResource, resourceFromAttributes } from '@opentelemetry/resources';
10
10
  import { BatchSpanProcessor, ConsoleSpanExporter, SimpleSpanProcessor } from '@opentelemetry/sdk-trace-base';
11
11
  import { WebTracerProvider } from '@opentelemetry/sdk-trace-web';
12
12
  import { SEMRESATTRS_SERVICE_NAME, SEMRESATTRS_SERVICE_VERSION } from '@opentelemetry/semantic-conventions';
@@ -19,28 +19,31 @@ import { type OtelOptions } from './otel';
19
19
  export class OtelTraces {
20
20
  private _tracer: Tracer;
21
21
  constructor(private readonly options: OtelOptions) {
22
- const resource = Resource.default().merge(
23
- new Resource({
22
+ const resource = defaultResource().merge(
23
+ resourceFromAttributes({
24
24
  [SEMRESATTRS_SERVICE_NAME]: this.options.serviceName,
25
25
  [SEMRESATTRS_SERVICE_VERSION]: this.options.serviceVersion,
26
26
  }),
27
27
  );
28
28
 
29
- const tracerProvider = new WebTracerProvider({ resource });
30
- tracerProvider.addSpanProcessor(new SimpleSpanProcessor(new ConsoleSpanExporter()));
31
- tracerProvider.addSpanProcessor(
32
- new BatchSpanProcessor(
33
- new OTLPTraceExporter({
34
- url: this.options.endpoint + '/v1/traces',
35
- headers: {
36
- Authorization: this.options.authorizationHeader,
37
- },
38
- concurrencyLimit: 10, // an optional limit on pending requests
39
- }),
40
- ),
41
- );
29
+ const tracerProvider = new WebTracerProvider({
30
+ resource,
31
+ spanProcessors: [
32
+ new SimpleSpanProcessor(new ConsoleSpanExporter()),
33
+ new BatchSpanProcessor(
34
+ new OTLPTraceExporter({
35
+ url: this.options.endpoint + '/v1/traces',
36
+ headers: {
37
+ Authorization: this.options.authorizationHeader,
38
+ },
39
+ concurrencyLimit: 10, // an optional limit on pending requests
40
+ }),
41
+ ),
42
+ ],
43
+ });
44
+
42
45
  // TODO(nf): ContextManager? Propogator?
43
- tracerProvider.register({});
46
+ trace.setGlobalTracerProvider(tracerProvider);
44
47
  this._tracer = trace.getTracer('dxos-observability', this.options.serviceVersion);
45
48
  }
46
49
 
@@ -4,7 +4,7 @@
4
4
 
5
5
  import { type Tracer, trace } from '@opentelemetry/api';
6
6
  import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-http';
7
- import { Resource } from '@opentelemetry/resources';
7
+ import { defaultResource, resourceFromAttributes } from '@opentelemetry/resources';
8
8
  import {
9
9
  BasicTracerProvider,
10
10
  BatchSpanProcessor,
@@ -21,27 +21,30 @@ import { type OtelOptions } from './otel';
21
21
  export class OtelTraces {
22
22
  private _tracer: Tracer;
23
23
  constructor(private readonly options: OtelOptions) {
24
- const resource = Resource.default().merge(
25
- new Resource({
24
+ const resource = defaultResource().merge(
25
+ resourceFromAttributes({
26
26
  [SEMRESATTRS_SERVICE_NAME]: this.options.serviceName,
27
27
  [SEMRESATTRS_SERVICE_VERSION]: this.options.serviceVersion,
28
28
  }),
29
29
  );
30
30
 
31
- const tracerProvider = new BasicTracerProvider({ resource });
32
- tracerProvider.addSpanProcessor(new SimpleSpanProcessor(new ConsoleSpanExporter()));
33
- tracerProvider.addSpanProcessor(
34
- new BatchSpanProcessor(
35
- new OTLPTraceExporter({
36
- url: this.options.endpoint + '/v1/traces',
37
- headers: {
38
- Authorization: this.options.authorizationHeader,
39
- },
40
- concurrencyLimit: 10, // an optional limit on pending requests
41
- }),
42
- ),
43
- );
44
- tracerProvider.register();
31
+ const tracerProvider = new BasicTracerProvider({
32
+ resource,
33
+ spanProcessors: [
34
+ new SimpleSpanProcessor(new ConsoleSpanExporter()),
35
+ new BatchSpanProcessor(
36
+ new OTLPTraceExporter({
37
+ url: this.options.endpoint + '/v1/traces',
38
+ headers: {
39
+ Authorization: this.options.authorizationHeader,
40
+ },
41
+ concurrencyLimit: 10, // an optional limit on pending requests
42
+ }),
43
+ ),
44
+ ],
45
+ });
46
+
47
+ trace.setGlobalTracerProvider(tracerProvider);
45
48
  this._tracer = trace.getTracer('dxos-observability', this.options.serviceVersion);
46
49
  }
47
50
 
@@ -57,7 +57,7 @@ export const init = (options: InitOptions) => {
57
57
  replaysSessionSampleRate: options.replaySampleRate,
58
58
  replaysOnErrorSampleRate: options.replaySampleRateOnError,
59
59
  tracesSampleRate: options.sampleRate,
60
- transport: options.transport,
60
+ transport: options.transport as any, // TODO(dmaretskyi): Fix
61
61
  beforeSend: (event) => {
62
62
  options.onError?.(event);
63
63
  return event;
@@ -1,10 +0,0 @@
1
- import {
2
- Observability
3
- } from "./chunk-MB7KKARJ.mjs";
4
- import "./chunk-VSEBD3XA.mjs";
5
- import "./chunk-5ICT2XF2.mjs";
6
- import "./chunk-LJO63BXO.mjs";
7
- export {
8
- Observability
9
- };
10
- //# sourceMappingURL=observability-NZM3OOLO.mjs.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/otel/otel.ts", "../../../src/otel/logs.ts", "../../../src/otel/metrics.ts", "../../../src/otel/traces-browser.ts"],
4
- "sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport { DiagConsoleLogger, DiagLogLevel, diag } from '@opentelemetry/api';\n\nexport type OtelOptions = {\n endpoint: string;\n authorizationHeader: string;\n serviceName: string; // For the Otel API, the name of the entity for which signals (metrics or trace) are collected.\n serviceVersion: string; // For the Otel API, The name of the entity for which signals (metrics or trace) are collected.\n getTags: () => { [key: string]: string };\n consoleDiagLogLevel?: string;\n};\n\nexport const setDiagLogger = (level?: string) => {\n const logLevel = DiagLogLevel[level as keyof typeof DiagLogLevel];\n if (logLevel) {\n diag.setLogger(new DiagConsoleLogger(), logLevel);\n }\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { SeverityNumber } from '@opentelemetry/api-logs';\nimport { OTLPLogExporter } from '@opentelemetry/exporter-logs-otlp-http';\nimport { Resource } from '@opentelemetry/resources';\nimport { BatchLogRecordProcessor, LoggerProvider } from '@opentelemetry/sdk-logs';\nimport { SEMRESATTRS_SERVICE_NAME, SEMRESATTRS_SERVICE_VERSION } from '@opentelemetry/semantic-conventions';\n\nimport {\n type LogConfig,\n type LogEntry,\n LogLevel,\n type LogProcessor,\n getContextFromEntry,\n getRelativeFilename,\n} from '@dxos/log';\nimport { jsonlogify } from '@dxos/util';\n\nimport { type OtelOptions, setDiagLogger } from './otel';\n\nexport type OtelLogOptions = OtelOptions & {\n logLevel: LogLevel;\n /**\n * Set `true` to capture logs sent through LoggingService from shared worker.\n * Better to set to `false` because shared worker is initializing its own logger.\n */\n includeSharedWorkerLogs: boolean;\n};\n\nexport class OtelLogs {\n private _loggerProvider: LoggerProvider;\n constructor(private readonly options: OtelLogOptions) {\n setDiagLogger(options.consoleDiagLogLevel);\n const resource = Resource.default().merge(\n new Resource({\n [SEMRESATTRS_SERVICE_NAME]: this.options.serviceName,\n [SEMRESATTRS_SERVICE_VERSION]: this.options.serviceVersion,\n }),\n );\n const logExporter = new OTLPLogExporter({\n url: this.options.endpoint + '/v1/logs',\n headers: {\n Authorization: this.options.authorizationHeader,\n },\n concurrencyLimit: 10, // an optional limit on pending requests\n });\n this._loggerProvider = new LoggerProvider({ resource });\n this._loggerProvider.addLogRecordProcessor(new BatchLogRecordProcessor(logExporter));\n }\n\n public readonly logProcessor: LogProcessor = (config: LogConfig, entry: LogEntry) => {\n const logger = this._loggerProvider.getLogger('dxos-observability', this.options.serviceVersion);\n\n if (\n entry.level < this.options.logLevel ||\n (!this.options.includeSharedWorkerLogs && entry.meta?.S?.remoteSessionId)\n ) {\n return;\n }\n\n const record = {\n ...entry,\n ...(entry.meta ? { meta: { file: getRelativeFilename(entry.meta.F), line: entry.meta.L } } : {}),\n context: jsonlogify(getContextFromEntry(entry)),\n };\n\n logger.emit({\n severityNumber: convertLevel(entry.level),\n body: JSON.stringify(record),\n attributes: this.options.getTags(),\n });\n };\n\n flush(): Promise<void> {\n return this._loggerProvider.forceFlush();\n }\n\n close(): Promise<void> {\n return this._loggerProvider.shutdown();\n }\n}\n\nconst convertLevel = (level: LogLevel): SeverityNumber => {\n switch (level) {\n case LogLevel.DEBUG:\n return SeverityNumber.DEBUG;\n case LogLevel.VERBOSE:\n return SeverityNumber.INFO;\n case LogLevel.INFO:\n return SeverityNumber.INFO;\n case LogLevel.WARN:\n return SeverityNumber.WARN;\n case LogLevel.ERROR:\n return SeverityNumber.ERROR;\n default:\n return SeverityNumber.ERROR;\n }\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { type Attributes, type Meter, type ObservableGauge } from '@opentelemetry/api';\nimport { OTLPMetricExporter } from '@opentelemetry/exporter-metrics-otlp-http';\nimport { Resource } from '@opentelemetry/resources';\nimport { MeterProvider, PeriodicExportingMetricReader } from '@opentelemetry/sdk-metrics';\nimport { SEMRESATTRS_SERVICE_NAME, SEMRESATTRS_SERVICE_VERSION } from '@opentelemetry/semantic-conventions';\n\nimport { log } from '@dxos/log';\nimport { type MetricData, TRACE_PROCESSOR } from '@dxos/tracing';\n\nimport { type OtelOptions, setDiagLogger } from './otel';\n\nconst EXPORT_INTERVAL = 60 * 1000;\n\ntype SynchronousGauge = {\n gauge: ObservableGauge<Attributes>;\n nextValue: number;\n nextTags?: any;\n};\n\nexport class OtelMetrics {\n private _meterProvider: MeterProvider;\n private _meter: Meter;\n private _gauges = new Map<string, SynchronousGauge>();\n\n constructor(private readonly options: OtelOptions) {\n // TODO: improve error handling/logging\n // https://github.com/open-telemetry/opentelemetry-js/issues/4823\n setDiagLogger(options.consoleDiagLogLevel);\n const resource = Resource.default().merge(\n new Resource({\n [SEMRESATTRS_SERVICE_NAME]: this.options.serviceName,\n [SEMRESATTRS_SERVICE_VERSION]: this.options.serviceVersion,\n }),\n );\n\n const grafanaMetricReader = new PeriodicExportingMetricReader({\n exporter: new OTLPMetricExporter({\n url: this.options.endpoint + '/v1/metrics',\n headers: {\n Authorization: this.options.authorizationHeader,\n },\n }),\n exportIntervalMillis: EXPORT_INTERVAL,\n });\n\n this._meterProvider = new MeterProvider({\n resource,\n readers: [grafanaMetricReader],\n });\n this._meter = this._meterProvider.getMeter('dxos-observability');\n\n const metrics = {\n // TODO: update metrics names and remove prefix?\n increment: (name: string, value?: number, data?: MetricData) => {\n this.increment(name, value, convertTags(data));\n },\n distribution: (name: string, value: number, data?: MetricData) => {\n this.distribution(name, value, convertTags(data));\n },\n set: (name: string, value: number | string, data?: MetricData) => {\n // Not implemented, not part of Otel spec.\n },\n gauge: (name: string, value: number, data?: MetricData) => {\n this.gauge(name, value, convertTags(data));\n },\n };\n\n TRACE_PROCESSOR.remoteMetrics.registerProcessor(metrics);\n }\n\n gauge(name: string, value: number, tags?: any): void {\n const gauge = this._meter.createGauge(name);\n log('otel gauge', { name, value, tags: { ...this.options.getTags(), ...tags } });\n gauge.record(value, { ...this.options.getTags(), ...tags });\n }\n\n increment(name: string, value?: number, tags?: any): void {\n const counter = this._meter.createCounter(name);\n log('otel counter', { name, value, tags: { ...this.options.getTags(), ...tags } });\n counter.add(value ?? 1, { ...this.options.getTags(), ...tags });\n }\n\n distribution(name: string, value: number, tags?: any): void {\n const distribution = this._meter.createHistogram(name);\n log('otel distribution', { name, value, tags: { ...this.options.getTags(), ...tags } });\n distribution.record(value, { ...this.options.getTags(), ...tags });\n }\n\n flush(): Promise<void> {\n return this._meterProvider.forceFlush();\n }\n\n close(): Promise<void> {\n return this._meterProvider.shutdown();\n }\n}\n\nconst convertTags = (data?: MetricData) => {\n if (data && data.tags) {\n return Object.entries(data.tags).reduce<{ [key: string]: any }>((obj, [key, value]) => {\n obj[key] = value;\n return obj;\n }, {});\n } else {\n return {};\n }\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { type Tracer, trace } from '@opentelemetry/api';\nimport { getWebAutoInstrumentations } from '@opentelemetry/auto-instrumentations-web';\nimport { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-http';\nimport { registerInstrumentations } from '@opentelemetry/instrumentation';\nimport { Resource } from '@opentelemetry/resources';\nimport { BatchSpanProcessor, ConsoleSpanExporter, SimpleSpanProcessor } from '@opentelemetry/sdk-trace-base';\nimport { WebTracerProvider } from '@opentelemetry/sdk-trace-web';\nimport { SEMRESATTRS_SERVICE_NAME, SEMRESATTRS_SERVICE_VERSION } from '@opentelemetry/semantic-conventions';\n\nimport { log } from '@dxos/log';\nimport { type StartSpanOptions, TRACE_PROCESSOR } from '@dxos/tracing';\n\nimport { type OtelOptions } from './otel';\n\nexport class OtelTraces {\n private _tracer: Tracer;\n constructor(private readonly options: OtelOptions) {\n const resource = Resource.default().merge(\n new Resource({\n [SEMRESATTRS_SERVICE_NAME]: this.options.serviceName,\n [SEMRESATTRS_SERVICE_VERSION]: this.options.serviceVersion,\n }),\n );\n\n const tracerProvider = new WebTracerProvider({ resource });\n tracerProvider.addSpanProcessor(new SimpleSpanProcessor(new ConsoleSpanExporter()));\n tracerProvider.addSpanProcessor(\n new BatchSpanProcessor(\n new OTLPTraceExporter({\n url: this.options.endpoint + '/v1/traces',\n headers: {\n Authorization: this.options.authorizationHeader,\n },\n concurrencyLimit: 10, // an optional limit on pending requests\n }),\n ),\n );\n // TODO(nf): ContextManager? Propogator?\n tracerProvider.register({});\n this._tracer = trace.getTracer('dxos-observability', this.options.serviceVersion);\n }\n\n public start(): void {\n registerInstrumentations({\n instrumentations: [getWebAutoInstrumentations()],\n });\n log('trace processor registered');\n TRACE_PROCESSOR.remoteTracing.registerProcessor({\n startSpan: (options: StartSpanOptions) => {\n log('begin otel trace', { options });\n return this._tracer.startSpan(options.name, options);\n },\n });\n }\n}\n"],
5
- "mappings": "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",
6
- "names": ["DiagConsoleLogger", "DiagLogLevel", "diag", "setDiagLogger", "level", "logLevel", "DiagLogLevel", "diag", "setLogger", "DiagConsoleLogger", "SeverityNumber", "OTLPLogExporter", "Resource", "BatchLogRecordProcessor", "LoggerProvider", "SEMRESATTRS_SERVICE_NAME", "SEMRESATTRS_SERVICE_VERSION", "LogLevel", "getContextFromEntry", "getRelativeFilename", "jsonlogify", "OtelLogs", "flush", "_loggerProvider", "forceFlush", "close", "shutdown", "options", "logProcessor", "config", "entry", "logger", "getLogger", "serviceVersion", "level", "logLevel", "includeSharedWorkerLogs", "meta", "S", "remoteSessionId", "record", "file", "getRelativeFilename", "F", "line", "L", "context", "jsonlogify", "getContextFromEntry", "emit", "severityNumber", "convertLevel", "body", "JSON", "stringify", "attributes", "getTags", "setDiagLogger", "consoleDiagLogLevel", "resource", "Resource", "default", "merge", "SEMRESATTRS_SERVICE_NAME", "serviceName", "SEMRESATTRS_SERVICE_VERSION", "logExporter", "OTLPLogExporter", "url", "endpoint", "headers", "Authorization", "authorizationHeader", "concurrencyLimit", "LoggerProvider", "addLogRecordProcessor", "BatchLogRecordProcessor", "LogLevel", "DEBUG", "SeverityNumber", "VERBOSE", "INFO", "WARN", "ERROR", "OTLPMetricExporter", "Resource", "MeterProvider", "PeriodicExportingMetricReader", "SEMRESATTRS_SERVICE_NAME", "SEMRESATTRS_SERVICE_VERSION", "log", "TRACE_PROCESSOR", "EXPORT_INTERVAL", "OtelMetrics", "gauge", "name", "value", "tags", "_meter", "createGauge", "log", "options", "getTags", "record", "increment", "counter", "createCounter", "add", "distribution", "createHistogram", "flush", "_meterProvider", "forceFlush", "close", "shutdown", "_define_property", "_gauges", "Map", "setDiagLogger", "consoleDiagLogLevel", "resource", "Resource", "default", "merge", "SEMRESATTRS_SERVICE_NAME", "serviceName", "SEMRESATTRS_SERVICE_VERSION", "serviceVersion", "grafanaMetricReader", "PeriodicExportingMetricReader", "exporter", "OTLPMetricExporter", "url", "endpoint", "headers", "Authorization", "authorizationHeader", "exportIntervalMillis", "MeterProvider", "readers", "getMeter", "metrics", "data", "convertTags", "set", "TRACE_PROCESSOR", "remoteMetrics", "registerProcessor", "Object", "entries", "reduce", "obj", "key", "trace", "getWebAutoInstrumentations", "OTLPTraceExporter", "registerInstrumentations", "Resource", "BatchSpanProcessor", "ConsoleSpanExporter", "SimpleSpanProcessor", "WebTracerProvider", "SEMRESATTRS_SERVICE_NAME", "SEMRESATTRS_SERVICE_VERSION", "log", "TRACE_PROCESSOR", "OtelTraces", "start", "instrumentations", "remoteTracing", "registerProcessor", "startSpan", "options", "_tracer", "name", "_define_property", "resource", "default", "merge", "serviceName", "serviceVersion", "tracerProvider", "addSpanProcessor", "url", "endpoint", "headers", "Authorization", "authorizationHeader", "concurrencyLimit", "register", "getTracer"]
7
- }
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/otel/otel.ts", "../../../src/otel/logs.ts", "../../../src/otel/metrics.ts", "../../../src/otel/traces.ts"],
4
- "sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport { DiagConsoleLogger, DiagLogLevel, diag } from '@opentelemetry/api';\n\nexport type OtelOptions = {\n endpoint: string;\n authorizationHeader: string;\n serviceName: string; // For the Otel API, the name of the entity for which signals (metrics or trace) are collected.\n serviceVersion: string; // For the Otel API, The name of the entity for which signals (metrics or trace) are collected.\n getTags: () => { [key: string]: string };\n consoleDiagLogLevel?: string;\n};\n\nexport const setDiagLogger = (level?: string) => {\n const logLevel = DiagLogLevel[level as keyof typeof DiagLogLevel];\n if (logLevel) {\n diag.setLogger(new DiagConsoleLogger(), logLevel);\n }\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { SeverityNumber } from '@opentelemetry/api-logs';\nimport { OTLPLogExporter } from '@opentelemetry/exporter-logs-otlp-http';\nimport { Resource } from '@opentelemetry/resources';\nimport { BatchLogRecordProcessor, LoggerProvider } from '@opentelemetry/sdk-logs';\nimport { SEMRESATTRS_SERVICE_NAME, SEMRESATTRS_SERVICE_VERSION } from '@opentelemetry/semantic-conventions';\n\nimport {\n type LogConfig,\n type LogEntry,\n LogLevel,\n type LogProcessor,\n getContextFromEntry,\n getRelativeFilename,\n} from '@dxos/log';\nimport { jsonlogify } from '@dxos/util';\n\nimport { type OtelOptions, setDiagLogger } from './otel';\n\nexport type OtelLogOptions = OtelOptions & {\n logLevel: LogLevel;\n /**\n * Set `true` to capture logs sent through LoggingService from shared worker.\n * Better to set to `false` because shared worker is initializing its own logger.\n */\n includeSharedWorkerLogs: boolean;\n};\n\nexport class OtelLogs {\n private _loggerProvider: LoggerProvider;\n constructor(private readonly options: OtelLogOptions) {\n setDiagLogger(options.consoleDiagLogLevel);\n const resource = Resource.default().merge(\n new Resource({\n [SEMRESATTRS_SERVICE_NAME]: this.options.serviceName,\n [SEMRESATTRS_SERVICE_VERSION]: this.options.serviceVersion,\n }),\n );\n const logExporter = new OTLPLogExporter({\n url: this.options.endpoint + '/v1/logs',\n headers: {\n Authorization: this.options.authorizationHeader,\n },\n concurrencyLimit: 10, // an optional limit on pending requests\n });\n this._loggerProvider = new LoggerProvider({ resource });\n this._loggerProvider.addLogRecordProcessor(new BatchLogRecordProcessor(logExporter));\n }\n\n public readonly logProcessor: LogProcessor = (config: LogConfig, entry: LogEntry) => {\n const logger = this._loggerProvider.getLogger('dxos-observability', this.options.serviceVersion);\n\n if (\n entry.level < this.options.logLevel ||\n (!this.options.includeSharedWorkerLogs && entry.meta?.S?.remoteSessionId)\n ) {\n return;\n }\n\n const record = {\n ...entry,\n ...(entry.meta ? { meta: { file: getRelativeFilename(entry.meta.F), line: entry.meta.L } } : {}),\n context: jsonlogify(getContextFromEntry(entry)),\n };\n\n logger.emit({\n severityNumber: convertLevel(entry.level),\n body: JSON.stringify(record),\n attributes: this.options.getTags(),\n });\n };\n\n flush(): Promise<void> {\n return this._loggerProvider.forceFlush();\n }\n\n close(): Promise<void> {\n return this._loggerProvider.shutdown();\n }\n}\n\nconst convertLevel = (level: LogLevel): SeverityNumber => {\n switch (level) {\n case LogLevel.DEBUG:\n return SeverityNumber.DEBUG;\n case LogLevel.VERBOSE:\n return SeverityNumber.INFO;\n case LogLevel.INFO:\n return SeverityNumber.INFO;\n case LogLevel.WARN:\n return SeverityNumber.WARN;\n case LogLevel.ERROR:\n return SeverityNumber.ERROR;\n default:\n return SeverityNumber.ERROR;\n }\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { type Attributes, type Meter, type ObservableGauge } from '@opentelemetry/api';\nimport { OTLPMetricExporter } from '@opentelemetry/exporter-metrics-otlp-http';\nimport { Resource } from '@opentelemetry/resources';\nimport { MeterProvider, PeriodicExportingMetricReader } from '@opentelemetry/sdk-metrics';\nimport { SEMRESATTRS_SERVICE_NAME, SEMRESATTRS_SERVICE_VERSION } from '@opentelemetry/semantic-conventions';\n\nimport { log } from '@dxos/log';\nimport { type MetricData, TRACE_PROCESSOR } from '@dxos/tracing';\n\nimport { type OtelOptions, setDiagLogger } from './otel';\n\nconst EXPORT_INTERVAL = 60 * 1000;\n\ntype SynchronousGauge = {\n gauge: ObservableGauge<Attributes>;\n nextValue: number;\n nextTags?: any;\n};\n\nexport class OtelMetrics {\n private _meterProvider: MeterProvider;\n private _meter: Meter;\n private _gauges = new Map<string, SynchronousGauge>();\n\n constructor(private readonly options: OtelOptions) {\n // TODO: improve error handling/logging\n // https://github.com/open-telemetry/opentelemetry-js/issues/4823\n setDiagLogger(options.consoleDiagLogLevel);\n const resource = Resource.default().merge(\n new Resource({\n [SEMRESATTRS_SERVICE_NAME]: this.options.serviceName,\n [SEMRESATTRS_SERVICE_VERSION]: this.options.serviceVersion,\n }),\n );\n\n const grafanaMetricReader = new PeriodicExportingMetricReader({\n exporter: new OTLPMetricExporter({\n url: this.options.endpoint + '/v1/metrics',\n headers: {\n Authorization: this.options.authorizationHeader,\n },\n }),\n exportIntervalMillis: EXPORT_INTERVAL,\n });\n\n this._meterProvider = new MeterProvider({\n resource,\n readers: [grafanaMetricReader],\n });\n this._meter = this._meterProvider.getMeter('dxos-observability');\n\n const metrics = {\n // TODO: update metrics names and remove prefix?\n increment: (name: string, value?: number, data?: MetricData) => {\n this.increment(name, value, convertTags(data));\n },\n distribution: (name: string, value: number, data?: MetricData) => {\n this.distribution(name, value, convertTags(data));\n },\n set: (name: string, value: number | string, data?: MetricData) => {\n // Not implemented, not part of Otel spec.\n },\n gauge: (name: string, value: number, data?: MetricData) => {\n this.gauge(name, value, convertTags(data));\n },\n };\n\n TRACE_PROCESSOR.remoteMetrics.registerProcessor(metrics);\n }\n\n gauge(name: string, value: number, tags?: any): void {\n const gauge = this._meter.createGauge(name);\n log('otel gauge', { name, value, tags: { ...this.options.getTags(), ...tags } });\n gauge.record(value, { ...this.options.getTags(), ...tags });\n }\n\n increment(name: string, value?: number, tags?: any): void {\n const counter = this._meter.createCounter(name);\n log('otel counter', { name, value, tags: { ...this.options.getTags(), ...tags } });\n counter.add(value ?? 1, { ...this.options.getTags(), ...tags });\n }\n\n distribution(name: string, value: number, tags?: any): void {\n const distribution = this._meter.createHistogram(name);\n log('otel distribution', { name, value, tags: { ...this.options.getTags(), ...tags } });\n distribution.record(value, { ...this.options.getTags(), ...tags });\n }\n\n flush(): Promise<void> {\n return this._meterProvider.forceFlush();\n }\n\n close(): Promise<void> {\n return this._meterProvider.shutdown();\n }\n}\n\nconst convertTags = (data?: MetricData) => {\n if (data && data.tags) {\n return Object.entries(data.tags).reduce<{ [key: string]: any }>((obj, [key, value]) => {\n obj[key] = value;\n return obj;\n }, {});\n } else {\n return {};\n }\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { type Tracer, trace } from '@opentelemetry/api';\nimport { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-http';\nimport { Resource } from '@opentelemetry/resources';\nimport {\n BasicTracerProvider,\n BatchSpanProcessor,\n ConsoleSpanExporter,\n SimpleSpanProcessor,\n} from '@opentelemetry/sdk-trace-base';\nimport { SEMRESATTRS_SERVICE_NAME, SEMRESATTRS_SERVICE_VERSION } from '@opentelemetry/semantic-conventions';\nimport { log } from 'debug';\n\nimport { type StartSpanOptions, TRACE_PROCESSOR } from '@dxos/tracing';\n\nimport { type OtelOptions } from './otel';\n\nexport class OtelTraces {\n private _tracer: Tracer;\n constructor(private readonly options: OtelOptions) {\n const resource = Resource.default().merge(\n new Resource({\n [SEMRESATTRS_SERVICE_NAME]: this.options.serviceName,\n [SEMRESATTRS_SERVICE_VERSION]: this.options.serviceVersion,\n }),\n );\n\n const tracerProvider = new BasicTracerProvider({ resource });\n tracerProvider.addSpanProcessor(new SimpleSpanProcessor(new ConsoleSpanExporter()));\n tracerProvider.addSpanProcessor(\n new BatchSpanProcessor(\n new OTLPTraceExporter({\n url: this.options.endpoint + '/v1/traces',\n headers: {\n Authorization: this.options.authorizationHeader,\n },\n concurrencyLimit: 10, // an optional limit on pending requests\n }),\n ),\n );\n tracerProvider.register();\n this._tracer = trace.getTracer('dxos-observability', this.options.serviceVersion);\n }\n\n public start(): void {\n log('trace processor registered');\n TRACE_PROCESSOR.remoteTracing.registerProcessor({\n startSpan: (options: StartSpanOptions) => {\n log('begin otel trace', { options });\n return this._tracer.startSpan(options.name, options);\n },\n });\n }\n}\n"],
5
- "mappings": "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",
6
- "names": ["DiagConsoleLogger", "DiagLogLevel", "diag", "setDiagLogger", "level", "logLevel", "DiagLogLevel", "diag", "setLogger", "DiagConsoleLogger", "SeverityNumber", "OTLPLogExporter", "Resource", "BatchLogRecordProcessor", "LoggerProvider", "SEMRESATTRS_SERVICE_NAME", "SEMRESATTRS_SERVICE_VERSION", "LogLevel", "getContextFromEntry", "getRelativeFilename", "jsonlogify", "OtelLogs", "flush", "_loggerProvider", "forceFlush", "close", "shutdown", "options", "logProcessor", "config", "entry", "logger", "getLogger", "serviceVersion", "level", "logLevel", "includeSharedWorkerLogs", "meta", "S", "remoteSessionId", "record", "file", "getRelativeFilename", "F", "line", "L", "context", "jsonlogify", "getContextFromEntry", "emit", "severityNumber", "convertLevel", "body", "JSON", "stringify", "attributes", "getTags", "setDiagLogger", "consoleDiagLogLevel", "resource", "Resource", "default", "merge", "SEMRESATTRS_SERVICE_NAME", "serviceName", "SEMRESATTRS_SERVICE_VERSION", "logExporter", "OTLPLogExporter", "url", "endpoint", "headers", "Authorization", "authorizationHeader", "concurrencyLimit", "LoggerProvider", "addLogRecordProcessor", "BatchLogRecordProcessor", "LogLevel", "DEBUG", "SeverityNumber", "VERBOSE", "INFO", "WARN", "ERROR", "OTLPMetricExporter", "Resource", "MeterProvider", "PeriodicExportingMetricReader", "SEMRESATTRS_SERVICE_NAME", "SEMRESATTRS_SERVICE_VERSION", "log", "TRACE_PROCESSOR", "EXPORT_INTERVAL", "OtelMetrics", "gauge", "name", "value", "tags", "_meter", "createGauge", "log", "options", "getTags", "record", "increment", "counter", "createCounter", "add", "distribution", "createHistogram", "flush", "_meterProvider", "forceFlush", "close", "shutdown", "_define_property", "_gauges", "Map", "setDiagLogger", "consoleDiagLogLevel", "resource", "Resource", "default", "merge", "SEMRESATTRS_SERVICE_NAME", "serviceName", "SEMRESATTRS_SERVICE_VERSION", "serviceVersion", "grafanaMetricReader", "PeriodicExportingMetricReader", "exporter", "OTLPMetricExporter", "url", "endpoint", "headers", "Authorization", "authorizationHeader", "exportIntervalMillis", "MeterProvider", "readers", "getMeter", "metrics", "data", "convertTags", "set", "TRACE_PROCESSOR", "remoteMetrics", "registerProcessor", "Object", "entries", "reduce", "obj", "key", "trace", "OTLPTraceExporter", "Resource", "BasicTracerProvider", "BatchSpanProcessor", "ConsoleSpanExporter", "SimpleSpanProcessor", "SEMRESATTRS_SERVICE_NAME", "SEMRESATTRS_SERVICE_VERSION", "log", "TRACE_PROCESSOR", "OtelTraces", "start", "log", "TRACE_PROCESSOR", "remoteTracing", "registerProcessor", "startSpan", "options", "_tracer", "name", "_define_property", "resource", "Resource", "default", "merge", "SEMRESATTRS_SERVICE_NAME", "serviceName", "SEMRESATTRS_SERVICE_VERSION", "serviceVersion", "tracerProvider", "BasicTracerProvider", "addSpanProcessor", "SimpleSpanProcessor", "ConsoleSpanExporter", "BatchSpanProcessor", "OTLPTraceExporter", "url", "endpoint", "headers", "Authorization", "authorizationHeader", "concurrencyLimit", "register", "trace", "getTracer"]
7
- }