@aztec/telemetry-client 1.0.0-staging.0 → 1.0.0-staging.1

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/dest/bench.d.ts CHANGED
@@ -15,6 +15,7 @@ export declare class BenchmarkTelemetryClient implements TelemetryClient {
15
15
  private meters;
16
16
  constructor();
17
17
  setExportedPublicTelemetry(_prefixes: string[]): void;
18
+ setPublicTelemetryCollectFrom(_roles: string[]): void;
18
19
  getMeter(name: string): Meter;
19
20
  getTracer(): Tracer;
20
21
  stop(): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"bench.d.ts","sourceRoot":"","sources":["../src/bench.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAA2B,OAAO,EAA6B,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAGjH,OAAO,KAAK,EACV,cAAc,EAGd,KAAK,EAIL,eAAe,EACf,MAAM,EAEP,MAAM,gBAAgB,CAAC;AAExB,MAAM,MAAM,oBAAoB,GAAG;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE;QACP,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,OAAO,GAAG,SAAS,GAAG,WAAW,CAAC;QACxC,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,SAAS,CAAC,EAAE,SAAS,CAAC;QACtB,MAAM,EAAE,kBAAkB,EAAE,CAAC;KAC9B,EAAE,CAAC;CACL,EAAE,CAAC;AAEJ,qBAAa,wBAAyB,YAAW,eAAe;IAC9D,OAAO,CAAC,MAAM,CAA4B;;IAO1C,0BAA0B,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,IAAI;IAErD,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK;IAM7B,SAAS,IAAI,MAAM;IAInB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAIrB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAItB,SAAS;IAIT,SAAS,IAAI,oBAAoB;IAIjC,KAAK;CAGN;AAgDD,MAAM,MAAM,kBAAkB,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,cAAc,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC"}
1
+ {"version":3,"file":"bench.d.ts","sourceRoot":"","sources":["../src/bench.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAA2B,OAAO,EAA6B,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAGjH,OAAO,KAAK,EACV,cAAc,EAGd,KAAK,EAIL,eAAe,EACf,MAAM,EAEP,MAAM,gBAAgB,CAAC;AAExB,MAAM,MAAM,oBAAoB,GAAG;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE;QACP,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,OAAO,GAAG,SAAS,GAAG,WAAW,CAAC;QACxC,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,SAAS,CAAC,EAAE,SAAS,CAAC;QACtB,MAAM,EAAE,kBAAkB,EAAE,CAAC;KAC9B,EAAE,CAAC;CACL,EAAE,CAAC;AAEJ,qBAAa,wBAAyB,YAAW,eAAe;IAC9D,OAAO,CAAC,MAAM,CAA4B;;IAO1C,0BAA0B,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,IAAI;IACrD,6BAA6B,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI;IAErD,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK;IAM7B,SAAS,IAAI,MAAM;IAInB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAIrB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAItB,SAAS;IAIT,SAAS,IAAI,oBAAoB;IAIjC,KAAK;CAGN;AAgDD,MAAM,MAAM,kBAAkB,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,cAAc,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC"}
package/dest/bench.js CHANGED
@@ -7,6 +7,7 @@ export class BenchmarkTelemetryClient {
7
7
  log.info(`Using benchmark telemetry client`);
8
8
  }
9
9
  setExportedPublicTelemetry(_prefixes) {}
10
+ setPublicTelemetryCollectFrom(_roles) {}
10
11
  getMeter(name) {
11
12
  const meter = new InMemoryPlainMeter(name);
12
13
  this.meters.push(meter);
package/dest/config.d.ts CHANGED
@@ -3,6 +3,8 @@ export interface TelemetryClientConfig {
3
3
  metricsCollectorUrl?: URL;
4
4
  publicMetricsCollectorUrl?: URL;
5
5
  publicIncludeMetrics: string[];
6
+ publicMetricsOptOut: boolean;
7
+ publicMetricsCollectFrom: string[];
6
8
  tracesCollectorUrl?: URL;
7
9
  logsCollectorUrl?: URL;
8
10
  otelCollectIntervalMs: number;
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,kBAAkB,EAAyB,MAAM,0BAA0B,CAAC;AAE1F,MAAM,WAAW,qBAAqB;IACpC,mBAAmB,CAAC,EAAE,GAAG,CAAC;IAC1B,yBAAyB,CAAC,EAAE,GAAG,CAAC;IAChC,oBAAoB,EAAE,MAAM,EAAE,CAAC;IAC/B,kBAAkB,CAAC,EAAE,GAAG,CAAC;IACzB,gBAAgB,CAAC,EAAE,GAAG,CAAC;IACvB,qBAAqB,EAAE,MAAM,CAAC;IAC9B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,kBAAkB,EAAE,MAAM,EAAE,CAAC;CAC9B;AAED,eAAO,MAAM,6BAA6B,EAAE,kBAAkB,CAAC,qBAAqB,CAyDnF,CAAC;AAEF,wBAAgB,gBAAgB,IAAI,qBAAqB,CAExD"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,kBAAkB,EAA8C,MAAM,0BAA0B,CAAC;AAE/G,MAAM,WAAW,qBAAqB;IACpC,mBAAmB,CAAC,EAAE,GAAG,CAAC;IAC1B,yBAAyB,CAAC,EAAE,GAAG,CAAC;IAChC,oBAAoB,EAAE,MAAM,EAAE,CAAC;IAC/B,mBAAmB,EAAE,OAAO,CAAC;IAC7B,wBAAwB,EAAE,MAAM,EAAE,CAAC;IACnC,kBAAkB,CAAC,EAAE,GAAG,CAAC;IACzB,gBAAgB,CAAC,EAAE,GAAG,CAAC;IACvB,qBAAqB,EAAE,MAAM,CAAC;IAC9B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,kBAAkB,EAAE,MAAM,EAAE,CAAC;CAC9B;AAED,eAAO,MAAM,6BAA6B,EAAE,kBAAkB,CAAC,qBAAqB,CA2EnF,CAAC;AAEF,wBAAgB,gBAAgB,IAAI,qBAAqB,CAExD"}
package/dest/config.js CHANGED
@@ -1,15 +1,10 @@
1
- import { getConfigFromMappings } from '@aztec/foundation/config';
1
+ import { booleanConfigHelper, getConfigFromMappings } from '@aztec/foundation/config';
2
2
  export const telemetryClientConfigMappings = {
3
3
  metricsCollectorUrl: {
4
4
  env: 'OTEL_EXPORTER_OTLP_METRICS_ENDPOINT',
5
5
  description: 'The URL of the telemetry collector for metrics',
6
6
  parseEnv: (val)=>val && new URL(val)
7
7
  },
8
- publicMetricsCollectorUrl: {
9
- env: 'PUBLIC_OTEL_EXPORTER_OTLP_METRICS_ENDPOINT',
10
- description: 'A URL to publish a subset of metrics for public consumption',
11
- parseEnv: (val)=>val && new URL(val)
12
- },
13
8
  tracesCollectorUrl: {
14
9
  env: 'OTEL_EXPORTER_OTLP_TRACES_ENDPOINT',
15
10
  description: 'The URL of the telemetry collector for traces',
@@ -38,11 +33,27 @@ export const telemetryClientConfigMappings = {
38
33
  parseEnv: (val)=>val ? val.split(',').map((s)=>s.trim()).filter((s)=>s.length > 0) : [],
39
34
  defaultValue: []
40
35
  },
36
+ publicMetricsCollectorUrl: {
37
+ env: 'PUBLIC_OTEL_EXPORTER_OTLP_METRICS_ENDPOINT',
38
+ description: 'A URL to publish a subset of metrics for public consumption',
39
+ parseEnv: (val)=>val && new URL(val)
40
+ },
41
+ publicMetricsCollectFrom: {
42
+ env: 'PUBLIC_OTEL_COLLECT_FROM',
43
+ description: 'The role types to collect metrics from',
44
+ parseEnv: (val)=>val ? val.split(',').map((s)=>s.trim()).filter((s)=>s.length > 0) : [],
45
+ defaultValue: []
46
+ },
41
47
  publicIncludeMetrics: {
42
48
  env: 'PUBLIC_OTEL_INCLUDE_METRICS',
43
49
  description: 'A list of metric prefixes to publicly export',
44
50
  parseEnv: (val)=>val ? val.split(',').map((s)=>s.trim()).filter((s)=>s.length > 0) : [],
45
51
  defaultValue: []
52
+ },
53
+ publicMetricsOptOut: {
54
+ env: 'PUBLIC_OTEL_OPT_OUT',
55
+ description: 'Whether to opt out of sharing optional telemetry',
56
+ ...booleanConfigHelper(false)
46
57
  }
47
58
  };
48
59
  export function getConfigEnvVars() {
package/dest/noop.d.ts CHANGED
@@ -2,6 +2,7 @@ import { type Meter, type Span, type Tracer } from '@opentelemetry/api';
2
2
  import type { TelemetryClient } from './telemetry.js';
3
3
  export declare class NoopTelemetryClient implements TelemetryClient {
4
4
  setExportedPublicTelemetry(_prefixes: string[]): void;
5
+ setPublicTelemetryCollectFrom(_roles: string[]): void;
5
6
  getMeter(): Meter;
6
7
  getTracer(): Tracer;
7
8
  stop(): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"noop.d.ts","sourceRoot":"","sources":["../src/noop.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,KAAK,EAAE,KAAK,IAAI,EAAoB,KAAK,MAAM,EAAmB,MAAM,oBAAoB,CAAC;AAE3G,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEtD,qBAAa,mBAAoB,YAAW,eAAe;IACzD,0BAA0B,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,IAAI;IAErD,QAAQ,IAAI,KAAK;IAIjB,SAAS,IAAI,MAAM;IAInB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAIrB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAItB,SAAS;CAGV;AAKD,qBAAa,UAAW,YAAW,MAAM;IACvC,SAAS,IAAI,IAAI;IAIjB,eAAe,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,UAAU,CAAC,CAAC,CAAC;CAKrG"}
1
+ {"version":3,"file":"noop.d.ts","sourceRoot":"","sources":["../src/noop.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,KAAK,EAAE,KAAK,IAAI,EAAoB,KAAK,MAAM,EAAmB,MAAM,oBAAoB,CAAC;AAE3G,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEtD,qBAAa,mBAAoB,YAAW,eAAe;IACzD,0BAA0B,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,IAAI;IACrD,6BAA6B,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI;IAErD,QAAQ,IAAI,KAAK;IAIjB,SAAS,IAAI,MAAM;IAInB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAIrB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAItB,SAAS;CAGV;AAKD,qBAAa,UAAW,YAAW,MAAM;IACvC,SAAS,IAAI,IAAI;IAIjB,eAAe,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,UAAU,CAAC,CAAC,CAAC;CAKrG"}
package/dest/noop.js CHANGED
@@ -1,6 +1,7 @@
1
1
  import { createNoopMeter } from '@opentelemetry/api';
2
2
  export class NoopTelemetryClient {
3
3
  setExportedPublicTelemetry(_prefixes) {}
4
+ setPublicTelemetryCollectFrom(_roles) {}
4
5
  getMeter() {
5
6
  return createNoopMeter();
6
7
  }
package/dest/otel.d.ts CHANGED
@@ -6,7 +6,7 @@ import type { LoggerProvider } from '@opentelemetry/sdk-logs';
6
6
  import { MeterProvider, type PeriodicExportingMetricReaderOptions } from '@opentelemetry/sdk-metrics';
7
7
  import type { TelemetryClientConfig } from './config.js';
8
8
  import { NodejsMetricsMonitor } from './nodejs_metrics_monitor.js';
9
- import { OtelFilterMetricExporter } from './otel_filter_metric_exporter.js';
9
+ import { PublicOtelFilterMetricExporter } from './otel_filter_metric_exporter.js';
10
10
  import type { TelemetryClient } from './telemetry.js';
11
11
  export type OpenTelemetryClientFactory = (resource: IResource, log: Logger) => OpenTelemetryClient;
12
12
  export declare class OpenTelemetryClient implements TelemetryClient {
@@ -20,8 +20,9 @@ export declare class OpenTelemetryClient implements TelemetryClient {
20
20
  nodejsMetricsMonitor: NodejsMetricsMonitor | undefined;
21
21
  private meters;
22
22
  private tracers;
23
- protected constructor(resource: IResource, meterProvider: MeterProvider, traceProvider: TracerProvider, loggerProvider: LoggerProvider | undefined, publicMetricExporter: OtelFilterMetricExporter | undefined, log: Logger);
23
+ protected constructor(resource: IResource, meterProvider: MeterProvider, traceProvider: TracerProvider, loggerProvider: LoggerProvider | undefined, publicMetricExporter: PublicOtelFilterMetricExporter | undefined, log: Logger);
24
24
  setExportedPublicTelemetry(metrics: string[]): void;
25
+ setPublicTelemetryCollectFrom(roles: string[]): void;
25
26
  getMeter(name: string): Meter;
26
27
  getTracer(name: string): Tracer;
27
28
  start(): void;
@@ -1 +1 @@
1
- {"version":3,"file":"otel.d.ts","sourceRoot":"","sources":["../src/otel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,KAAK,MAAM,EAAqB,MAAM,uBAAuB,CAAC;AAErF,OAAO,EAGL,KAAK,KAAK,EACV,KAAK,MAAM,EACX,KAAK,cAAc,EAKpB,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC1D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAGL,aAAa,EAEb,KAAK,oCAAoC,EAE1C,MAAM,4BAA4B,CAAC;AAIpC,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACnE,OAAO,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AAG5E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEtD,MAAM,MAAM,0BAA0B,GAAG,CAAC,QAAQ,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,KAAK,mBAAmB,CAAC;AAEnG,qBAAa,mBAAoB,YAAW,eAAe;IAOvD,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,aAAa;IACrB,OAAO,CAAC,aAAa;IACrB,OAAO,CAAC,cAAc;IACtB,OAAO,CAAC,oBAAoB;IAC5B,OAAO,CAAC,GAAG;IAXb,WAAW,EAAE,WAAW,GAAG,SAAS,CAAC;IACrC,oBAAoB,EAAE,oBAAoB,GAAG,SAAS,CAAC;IACvD,OAAO,CAAC,MAAM,CAAgD;IAC9D,OAAO,CAAC,OAAO,CAAkD;IAEjE,SAAS,aACC,QAAQ,EAAE,SAAS,EACnB,aAAa,EAAE,aAAa,EAC5B,aAAa,EAAE,cAAc,EAC7B,cAAc,EAAE,cAAc,GAAG,SAAS,EAC1C,oBAAoB,EAAE,wBAAwB,GAAG,SAAS,EAC1D,GAAG,EAAE,MAAM;IAGrB,0BAA0B,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI;IAInD,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK;IAS7B,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IASxB,KAAK;IA+BL,SAAS;IAIH,KAAK;IAQL,IAAI;WAkBH,mBAAmB,CAC/B,QAAQ,EAAE,SAAS,EACnB,SAAS,EAAE,KAAK,CAAC,oCAAoC,CAAC,GACrD,aAAa;IAiIhB,OAAO,CAAC,MAAM,CAAC,sBAAsB;WAiDvB,cAAc,CAAC,MAAM,EAAE,qBAAqB,EAAE,GAAG,EAAE,MAAM,GAAG,mBAAmB;CAS9F"}
1
+ {"version":3,"file":"otel.d.ts","sourceRoot":"","sources":["../src/otel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,KAAK,MAAM,EAAqB,MAAM,uBAAuB,CAAC;AAErF,OAAO,EAGL,KAAK,KAAK,EACV,KAAK,MAAM,EACX,KAAK,cAAc,EAKpB,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC1D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAGL,aAAa,EAEb,KAAK,oCAAoC,EAE1C,MAAM,4BAA4B,CAAC;AAIpC,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACnE,OAAO,EAA4B,8BAA8B,EAAE,MAAM,kCAAkC,CAAC;AAG5G,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEtD,MAAM,MAAM,0BAA0B,GAAG,CAAC,QAAQ,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,KAAK,mBAAmB,CAAC;AAEnG,qBAAa,mBAAoB,YAAW,eAAe;IAOvD,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,aAAa;IACrB,OAAO,CAAC,aAAa;IACrB,OAAO,CAAC,cAAc;IACtB,OAAO,CAAC,oBAAoB;IAC5B,OAAO,CAAC,GAAG;IAXb,WAAW,EAAE,WAAW,GAAG,SAAS,CAAC;IACrC,oBAAoB,EAAE,oBAAoB,GAAG,SAAS,CAAC;IACvD,OAAO,CAAC,MAAM,CAAgD;IAC9D,OAAO,CAAC,OAAO,CAAkD;IAEjE,SAAS,aACC,QAAQ,EAAE,SAAS,EACnB,aAAa,EAAE,aAAa,EAC5B,aAAa,EAAE,cAAc,EAC7B,cAAc,EAAE,cAAc,GAAG,SAAS,EAC1C,oBAAoB,EAAE,8BAA8B,GAAG,SAAS,EAChE,GAAG,EAAE,MAAM;IAGrB,0BAA0B,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI;IAInD,6BAA6B,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI;IAIpD,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK;IAS7B,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IASxB,KAAK;IA+BL,SAAS;IAIH,KAAK;IAQL,IAAI;WAkBH,mBAAmB,CAC/B,QAAQ,EAAE,SAAS,EACnB,SAAS,EAAE,KAAK,CAAC,oCAAoC,CAAC,GACrD,aAAa;IAiIhB,OAAO,CAAC,MAAM,CAAC,sBAAsB;WAiDvB,cAAc,CAAC,MAAM,EAAE,qBAAqB,EAAE,GAAG,EAAE,MAAM,GAAG,mBAAmB;CAS9F"}
package/dest/otel.js CHANGED
@@ -7,7 +7,7 @@ import { ExplicitBucketHistogramAggregation, InstrumentType, MeterProvider, Peri
7
7
  import { BatchSpanProcessor, NodeTracerProvider } from '@opentelemetry/sdk-trace-node';
8
8
  import { ATTR_SERVICE_NAME, ATTR_SERVICE_VERSION } from '@opentelemetry/semantic-conventions';
9
9
  import { NodejsMetricsMonitor } from './nodejs_metrics_monitor.js';
10
- import { OtelFilterMetricExporter } from './otel_filter_metric_exporter.js';
10
+ import { OtelFilterMetricExporter, PublicOtelFilterMetricExporter } from './otel_filter_metric_exporter.js';
11
11
  import { registerOtelLoggerProvider } from './otel_logger_provider.js';
12
12
  import { getOtelResource } from './otel_resource.js';
13
13
  export class OpenTelemetryClient {
@@ -34,6 +34,9 @@ export class OpenTelemetryClient {
34
34
  setExportedPublicTelemetry(metrics) {
35
35
  this.publicMetricExporter?.setMetricPrefixes(metrics);
36
36
  }
37
+ setPublicTelemetryCollectFrom(roles) {
38
+ this.publicMetricExporter?.setAllowedRoles(roles);
39
+ }
37
40
  getMeter(name) {
38
41
  let meter = this.meters.get(name);
39
42
  if (!meter) {
@@ -347,14 +350,14 @@ export class OpenTelemetryClient {
347
350
  });
348
351
  }
349
352
  let publicExporter;
350
- if (config.publicMetricsCollectorUrl && config.publicIncludeMetrics.length > 0) {
353
+ if (config.publicMetricsCollectorUrl && !config.publicMetricsOptOut) {
351
354
  log.info(`Exporting public metrics: ${config.publicIncludeMetrics}`, {
352
355
  publicMetrics: config.publicIncludeMetrics,
353
356
  collectorUrl: config.publicMetricsCollectorUrl
354
357
  });
355
- publicExporter = new OtelFilterMetricExporter(new OTLPMetricExporter({
358
+ publicExporter = new PublicOtelFilterMetricExporter(config.publicMetricsCollectFrom, new OTLPMetricExporter({
356
359
  url: config.publicMetricsCollectorUrl.href
357
- }), config.publicIncludeMetrics, 'allow');
360
+ }), config.publicIncludeMetrics);
358
361
  exporters.push({
359
362
  exporter: publicExporter,
360
363
  exportTimeoutMillis: config.otelExportTimeoutMs,
@@ -1,4 +1,4 @@
1
- import type { ExportResult } from '@opentelemetry/core';
1
+ import { type ExportResult } from '@opentelemetry/core';
2
2
  import type { PushMetricExporter, ResourceMetrics } from '@opentelemetry/sdk-metrics';
3
3
  export declare class OtelFilterMetricExporter implements PushMetricExporter {
4
4
  private readonly exporter;
@@ -11,4 +11,10 @@ export declare class OtelFilterMetricExporter implements PushMetricExporter {
11
11
  shutdown(): Promise<void>;
12
12
  setMetricPrefixes(metrics: string[]): void;
13
13
  }
14
+ export declare class PublicOtelFilterMetricExporter extends OtelFilterMetricExporter {
15
+ private allowedRoles;
16
+ constructor(allowedRoles: string[], exporter: PushMetricExporter, metricPrefix: string[]);
17
+ export(metrics: ResourceMetrics, resultCallback: (result: ExportResult) => void): void;
18
+ setAllowedRoles(roles: string[]): void;
19
+ }
14
20
  //# sourceMappingURL=otel_filter_metric_exporter.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"otel_filter_metric_exporter.d.ts","sourceRoot":"","sources":["../src/otel_filter_metric_exporter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EAAc,kBAAkB,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAElG,qBAAa,wBAAyB,YAAW,kBAAkB;IAE/D,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAFN,QAAQ,EAAE,kBAAkB,EACrC,YAAY,EAAE,MAAM,EAAE,EACb,MAAM,GAAE,OAAO,GAAG,MAAe;IAU7C,MAAM,CAAC,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,IAAI,GAAG,IAAI;IAW7F,OAAO,CAAC,aAAa;IAcd,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAI3B,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAIzB,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE;CAG3C"}
1
+ {"version":3,"file":"otel_filter_metric_exporter.d.ts","sourceRoot":"","sources":["../src/otel_filter_metric_exporter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,YAAY,EAAoB,MAAM,qBAAqB,CAAC;AAC1E,OAAO,KAAK,EAAc,kBAAkB,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAIlG,qBAAa,wBAAyB,YAAW,kBAAkB;IAE/D,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAFN,QAAQ,EAAE,kBAAkB,EACrC,YAAY,EAAE,MAAM,EAAE,EACb,MAAM,GAAE,OAAO,GAAG,MAAe;IAU7C,MAAM,CAAC,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,IAAI,GAAG,IAAI;IAW7F,OAAO,CAAC,aAAa;IAcd,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAI3B,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAIzB,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE;CAG3C;AAED,qBAAa,8BAA+B,SAAQ,wBAAwB;IAExE,OAAO,CAAC,YAAY;gBAAZ,YAAY,EAAE,MAAM,EAAE,EAC9B,QAAQ,EAAE,kBAAkB,EAC5B,YAAY,EAAE,MAAM,EAAE;IAKR,MAAM,CAAC,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,IAAI,GAAG,IAAI;IAU/F,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE;CAGvC"}
@@ -1,3 +1,5 @@
1
+ import { ExportResultCode } from '@opentelemetry/core';
2
+ import { AZTEC_NODE_ROLE } from './attributes.js';
1
3
  export class OtelFilterMetricExporter {
2
4
  exporter;
3
5
  metricPrefix;
@@ -44,3 +46,22 @@ export class OtelFilterMetricExporter {
44
46
  this.metricPrefix = metrics;
45
47
  }
46
48
  }
49
+ export class PublicOtelFilterMetricExporter extends OtelFilterMetricExporter {
50
+ allowedRoles;
51
+ constructor(allowedRoles, exporter, metricPrefix){
52
+ super(exporter, metricPrefix, 'allow'), this.allowedRoles = allowedRoles;
53
+ }
54
+ export(metrics, resultCallback) {
55
+ const role = String(metrics.resource.attributes[AZTEC_NODE_ROLE] ?? '');
56
+ if (!role || !this.allowedRoles.includes(role)) {
57
+ // noop
58
+ return resultCallback({
59
+ code: ExportResultCode.SUCCESS
60
+ });
61
+ }
62
+ super.export(metrics, resultCallback);
63
+ }
64
+ setAllowedRoles(roles) {
65
+ this.allowedRoles = roles;
66
+ }
67
+ }
@@ -93,6 +93,10 @@ export interface TelemetryClient {
93
93
  * Updates what telemetry is exported to the public collector
94
94
  */
95
95
  setExportedPublicTelemetry(prefixes: string[]): void;
96
+ /**
97
+ * Updates the roles that would share telemetry (if enabled)
98
+ */
99
+ setPublicTelemetryCollectFrom(roles: string[]): void;
96
100
  }
97
101
  /** Objects that adhere to this interface can use @trackSpan */
98
102
  export interface Traceable {
@@ -1 +1 @@
1
- {"version":3,"file":"telemetry.d.ts","sourceRoot":"","sources":["../src/telemetry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"telemetry.d.ts","sourceRoot":"","sources":["../src/telemetry.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aztec/telemetry-client",
3
- "version": "1.0.0-staging.0",
3
+ "version": "1.0.0-staging.1",
4
4
  "inherits": [
5
5
  "../package.common.json"
6
6
  ],
@@ -25,8 +25,8 @@
25
25
  "!*.test.*"
26
26
  ],
27
27
  "dependencies": {
28
- "@aztec/foundation": "1.0.0-staging.0",
29
- "@aztec/stdlib": "1.0.0-staging.0",
28
+ "@aztec/foundation": "1.0.0-staging.1",
29
+ "@aztec/stdlib": "1.0.0-staging.1",
30
30
  "@opentelemetry/api": "^1.9.0",
31
31
  "@opentelemetry/api-logs": "^0.55.0",
32
32
  "@opentelemetry/core": "^1.28.0",
package/src/bench.ts CHANGED
@@ -37,6 +37,7 @@ export class BenchmarkTelemetryClient implements TelemetryClient {
37
37
  }
38
38
 
39
39
  setExportedPublicTelemetry(_prefixes: string[]): void {}
40
+ setPublicTelemetryCollectFrom(_roles: string[]): void {}
40
41
 
41
42
  getMeter(name: string): Meter {
42
43
  const meter = new InMemoryPlainMeter(name);
package/src/config.ts CHANGED
@@ -1,9 +1,11 @@
1
- import { type ConfigMappingsType, getConfigFromMappings } from '@aztec/foundation/config';
1
+ import { type ConfigMappingsType, booleanConfigHelper, getConfigFromMappings } from '@aztec/foundation/config';
2
2
 
3
3
  export interface TelemetryClientConfig {
4
4
  metricsCollectorUrl?: URL;
5
5
  publicMetricsCollectorUrl?: URL;
6
6
  publicIncludeMetrics: string[];
7
+ publicMetricsOptOut: boolean;
8
+ publicMetricsCollectFrom: string[];
7
9
  tracesCollectorUrl?: URL;
8
10
  logsCollectorUrl?: URL;
9
11
  otelCollectIntervalMs: number;
@@ -17,11 +19,6 @@ export const telemetryClientConfigMappings: ConfigMappingsType<TelemetryClientCo
17
19
  description: 'The URL of the telemetry collector for metrics',
18
20
  parseEnv: (val: string) => val && new URL(val),
19
21
  },
20
- publicMetricsCollectorUrl: {
21
- env: 'PUBLIC_OTEL_EXPORTER_OTLP_METRICS_ENDPOINT',
22
- description: 'A URL to publish a subset of metrics for public consumption',
23
- parseEnv: (val: string) => val && new URL(val),
24
- },
25
22
  tracesCollectorUrl: {
26
23
  env: 'OTEL_EXPORTER_OTLP_TRACES_ENDPOINT',
27
24
  description: 'The URL of the telemetry collector for traces',
@@ -56,6 +53,24 @@ export const telemetryClientConfigMappings: ConfigMappingsType<TelemetryClientCo
56
53
  : [],
57
54
  defaultValue: [],
58
55
  },
56
+
57
+ publicMetricsCollectorUrl: {
58
+ env: 'PUBLIC_OTEL_EXPORTER_OTLP_METRICS_ENDPOINT',
59
+ description: 'A URL to publish a subset of metrics for public consumption',
60
+ parseEnv: (val: string) => val && new URL(val),
61
+ },
62
+ publicMetricsCollectFrom: {
63
+ env: 'PUBLIC_OTEL_COLLECT_FROM',
64
+ description: 'The role types to collect metrics from',
65
+ parseEnv: (val: string) =>
66
+ val
67
+ ? val
68
+ .split(',')
69
+ .map(s => s.trim())
70
+ .filter(s => s.length > 0)
71
+ : [],
72
+ defaultValue: [],
73
+ },
59
74
  publicIncludeMetrics: {
60
75
  env: 'PUBLIC_OTEL_INCLUDE_METRICS',
61
76
  description: 'A list of metric prefixes to publicly export',
@@ -68,6 +83,11 @@ export const telemetryClientConfigMappings: ConfigMappingsType<TelemetryClientCo
68
83
  : [],
69
84
  defaultValue: [],
70
85
  },
86
+ publicMetricsOptOut: {
87
+ env: 'PUBLIC_OTEL_OPT_OUT',
88
+ description: 'Whether to opt out of sharing optional telemetry',
89
+ ...booleanConfigHelper(false),
90
+ },
71
91
  };
72
92
 
73
93
  export function getConfigEnvVars(): TelemetryClientConfig {
package/src/noop.ts CHANGED
@@ -4,6 +4,7 @@ import type { TelemetryClient } from './telemetry.js';
4
4
 
5
5
  export class NoopTelemetryClient implements TelemetryClient {
6
6
  setExportedPublicTelemetry(_prefixes: string[]): void {}
7
+ setPublicTelemetryCollectFrom(_roles: string[]): void {}
7
8
 
8
9
  getMeter(): Meter {
9
10
  return createNoopMeter();
package/src/otel.ts CHANGED
@@ -29,7 +29,7 @@ import { ATTR_SERVICE_NAME, ATTR_SERVICE_VERSION } from '@opentelemetry/semantic
29
29
 
30
30
  import type { TelemetryClientConfig } from './config.js';
31
31
  import { NodejsMetricsMonitor } from './nodejs_metrics_monitor.js';
32
- import { OtelFilterMetricExporter } from './otel_filter_metric_exporter.js';
32
+ import { OtelFilterMetricExporter, PublicOtelFilterMetricExporter } from './otel_filter_metric_exporter.js';
33
33
  import { registerOtelLoggerProvider } from './otel_logger_provider.js';
34
34
  import { getOtelResource } from './otel_resource.js';
35
35
  import type { TelemetryClient } from './telemetry.js';
@@ -47,7 +47,7 @@ export class OpenTelemetryClient implements TelemetryClient {
47
47
  private meterProvider: MeterProvider,
48
48
  private traceProvider: TracerProvider,
49
49
  private loggerProvider: LoggerProvider | undefined,
50
- private publicMetricExporter: OtelFilterMetricExporter | undefined,
50
+ private publicMetricExporter: PublicOtelFilterMetricExporter | undefined,
51
51
  private log: Logger,
52
52
  ) {}
53
53
 
@@ -55,6 +55,10 @@ export class OpenTelemetryClient implements TelemetryClient {
55
55
  this.publicMetricExporter?.setMetricPrefixes(metrics);
56
56
  }
57
57
 
58
+ setPublicTelemetryCollectFrom(roles: string[]): void {
59
+ this.publicMetricExporter?.setAllowedRoles(roles);
60
+ }
61
+
58
62
  getMeter(name: string): Meter {
59
63
  let meter = this.meters.get(name);
60
64
  if (!meter) {
@@ -290,16 +294,16 @@ export class OpenTelemetryClient implements TelemetryClient {
290
294
  });
291
295
  }
292
296
 
293
- let publicExporter: OtelFilterMetricExporter | undefined;
294
- if (config.publicMetricsCollectorUrl && config.publicIncludeMetrics.length > 0) {
297
+ let publicExporter: PublicOtelFilterMetricExporter | undefined;
298
+ if (config.publicMetricsCollectorUrl && !config.publicMetricsOptOut) {
295
299
  log.info(`Exporting public metrics: ${config.publicIncludeMetrics}`, {
296
300
  publicMetrics: config.publicIncludeMetrics,
297
301
  collectorUrl: config.publicMetricsCollectorUrl,
298
302
  });
299
- publicExporter = new OtelFilterMetricExporter(
303
+ publicExporter = new PublicOtelFilterMetricExporter(
304
+ config.publicMetricsCollectFrom,
300
305
  new OTLPMetricExporter({ url: config.publicMetricsCollectorUrl.href }),
301
306
  config.publicIncludeMetrics,
302
- 'allow',
303
307
  );
304
308
  exporters.push({
305
309
  exporter: publicExporter,
@@ -1,6 +1,8 @@
1
- import type { ExportResult } from '@opentelemetry/core';
1
+ import { type ExportResult, ExportResultCode } from '@opentelemetry/core';
2
2
  import type { MetricData, PushMetricExporter, ResourceMetrics } from '@opentelemetry/sdk-metrics';
3
3
 
4
+ import { AZTEC_NODE_ROLE } from './attributes.js';
5
+
4
6
  export class OtelFilterMetricExporter implements PushMetricExporter {
5
7
  constructor(
6
8
  private readonly exporter: PushMetricExporter,
@@ -52,3 +54,27 @@ export class OtelFilterMetricExporter implements PushMetricExporter {
52
54
  this.metricPrefix = metrics;
53
55
  }
54
56
  }
57
+
58
+ export class PublicOtelFilterMetricExporter extends OtelFilterMetricExporter {
59
+ constructor(
60
+ private allowedRoles: string[],
61
+ exporter: PushMetricExporter,
62
+ metricPrefix: string[],
63
+ ) {
64
+ super(exporter, metricPrefix, 'allow');
65
+ }
66
+
67
+ public override export(metrics: ResourceMetrics, resultCallback: (result: ExportResult) => void): void {
68
+ const role = String(metrics.resource.attributes[AZTEC_NODE_ROLE] ?? '');
69
+ if (!role || !this.allowedRoles.includes(role)) {
70
+ // noop
71
+ return resultCallback({ code: ExportResultCode.SUCCESS });
72
+ }
73
+
74
+ super.export(metrics, resultCallback);
75
+ }
76
+
77
+ public setAllowedRoles(roles: string[]) {
78
+ this.allowedRoles = roles;
79
+ }
80
+ }
package/src/telemetry.ts CHANGED
@@ -155,6 +155,11 @@ export interface TelemetryClient {
155
155
  * Updates what telemetry is exported to the public collector
156
156
  */
157
157
  setExportedPublicTelemetry(prefixes: string[]): void;
158
+
159
+ /**
160
+ * Updates the roles that would share telemetry (if enabled)
161
+ */
162
+ setPublicTelemetryCollectFrom(roles: string[]): void;
158
163
  }
159
164
 
160
165
  /** Objects that adhere to this interface can use @trackSpan */