@noego/telemetry 0.0.3 → 0.1.0

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 (93) hide show
  1. package/README.md +6 -0
  2. package/dist/browser/index.cjs +21 -0
  3. package/dist/browser/index.cjs.map +1 -1
  4. package/dist/browser/index.d.cts +6 -5
  5. package/dist/browser/index.d.ts +6 -5
  6. package/dist/browser/index.js +21 -0
  7. package/dist/browser/index.js.map +1 -1
  8. package/dist/{browser_telemetry_client-BzBPQm4m.d.cts → browser_telemetry_client-ClZl3awO.d.cts} +2 -2
  9. package/dist/{browser_telemetry_client-Ch_VzwEa.d.ts → browser_telemetry_client-t4dPp8Ku.d.ts} +2 -2
  10. package/dist/cli/telemetry_bin.cjs +393 -35
  11. package/dist/cli/telemetry_bin.cjs.map +1 -1
  12. package/dist/cli/telemetry_bin.js +378 -20
  13. package/dist/cli/telemetry_bin.js.map +1 -1
  14. package/dist/cli/telemetry_cli.cjs +393 -35
  15. package/dist/cli/telemetry_cli.cjs.map +1 -1
  16. package/dist/cli/telemetry_cli.d.cts +35 -5
  17. package/dist/cli/telemetry_cli.d.ts +35 -5
  18. package/dist/cli/telemetry_cli.js +378 -20
  19. package/dist/cli/telemetry_cli.js.map +1 -1
  20. package/dist/{client_defaults-B5tC-TgG.d.ts → client_defaults-CZ8PysZX.d.ts} +2 -2
  21. package/dist/{client_defaults-C9LnSX4j.d.cts → client_defaults-lDbWYWWK.d.cts} +2 -2
  22. package/dist/core/index.cjs +26 -1
  23. package/dist/core/index.cjs.map +1 -1
  24. package/dist/core/index.d.cts +15 -12
  25. package/dist/core/index.d.ts +15 -12
  26. package/dist/core/index.js +26 -1
  27. package/dist/core/index.js.map +1 -1
  28. package/dist/electron/index.cjs +21 -0
  29. package/dist/electron/index.cjs.map +1 -1
  30. package/dist/electron/index.d.cts +5 -4
  31. package/dist/electron/index.d.ts +5 -4
  32. package/dist/electron/index.js +21 -0
  33. package/dist/electron/index.js.map +1 -1
  34. package/dist/{envelope.types-rOLpWXRC.d.cts → envelope.types-DIvZD3xH.d.ts} +2 -6
  35. package/dist/{envelope.types-rOLpWXRC.d.ts → envelope.types-DyrlRG49.d.cts} +2 -6
  36. package/dist/{in_memory_batch_transport-DKW9EZnU.d.cts → in_memory_batch_transport-3T6gElXP.d.cts} +1 -1
  37. package/dist/{in_memory_batch_transport-oOwNxXnA.d.ts → in_memory_batch_transport-DpQU6JqM.d.ts} +1 -1
  38. package/dist/index.cjs +26 -1
  39. package/dist/index.cjs.map +1 -1
  40. package/dist/index.d.cts +14 -12
  41. package/dist/index.d.ts +14 -12
  42. package/dist/index.js +26 -1
  43. package/dist/index.js.map +1 -1
  44. package/dist/json.types-BqS77fcN.d.cts +7 -0
  45. package/dist/json.types-BqS77fcN.d.ts +7 -0
  46. package/dist/{maintenance_coordinator.types-C4ULi4A4.d.cts → maintenance_coordinator.types-Crhx9i9k.d.cts} +3 -3
  47. package/dist/{maintenance_coordinator.types-ikUrRXmO.d.ts → maintenance_coordinator.types-DprmgpVn.d.ts} +3 -3
  48. package/dist/metric.types-D8aOAnUm.d.ts +67 -0
  49. package/dist/metric.types-Dg4eZq6u.d.cts +67 -0
  50. package/dist/{metric_definition_contract-BYtnODhu.d.ts → metric_definition_contract-C6MERhJs.d.ts} +1 -1
  51. package/dist/{metric_definition_contract-DfhhmTZ1.d.cts → metric_definition_contract-DoAk7NOw.d.cts} +1 -1
  52. package/dist/node/index.cjs +38 -2
  53. package/dist/node/index.cjs.map +1 -1
  54. package/dist/node/index.d.cts +62 -10
  55. package/dist/node/index.d.ts +62 -10
  56. package/dist/node/index.js +37 -2
  57. package/dist/node/index.js.map +1 -1
  58. package/dist/node/producer/index.cjs +21 -0
  59. package/dist/node/producer/index.cjs.map +1 -1
  60. package/dist/node/producer/index.d.cts +5 -4
  61. package/dist/node/producer/index.d.ts +5 -4
  62. package/dist/node/producer/index.js +21 -0
  63. package/dist/node/producer/index.js.map +1 -1
  64. package/dist/projector/index.cjs +1370 -0
  65. package/dist/projector/index.cjs.map +1 -0
  66. package/dist/projector/index.d.cts +246 -0
  67. package/dist/projector/index.d.ts +246 -0
  68. package/dist/projector/index.js +1328 -0
  69. package/dist/projector/index.js.map +1 -0
  70. package/dist/{query.types-DU5v7vM0.d.ts → query.types-CRqAsGTX.d.cts} +4 -66
  71. package/dist/{query.types-DuYWbFFe.d.cts → query.types-DnOMYXpC.d.ts} +4 -66
  72. package/dist/sqlite/index.cjs +5 -1
  73. package/dist/sqlite/index.cjs.map +1 -1
  74. package/dist/sqlite/index.d.cts +7 -5
  75. package/dist/sqlite/index.d.ts +7 -5
  76. package/dist/sqlite/index.js +5 -1
  77. package/dist/sqlite/index.js.map +1 -1
  78. package/dist/{storage.types-k7oElEB3.d.ts → storage.types-BKWoIOHp.d.ts} +3 -2
  79. package/dist/{storage.types-Bji_pWqr.d.cts → storage.types-DHbAm3j_.d.cts} +3 -2
  80. package/dist/{telemetry_client-BXw8WH_F.d.ts → telemetry_client-Bg5tbj5E.d.cts} +12 -3
  81. package/dist/{telemetry_client-CYaPYfOl.d.cts → telemetry_client-DWKgufmc.d.ts} +12 -3
  82. package/dist/{telemetry_configuration_parser-BZ8Nvnle.d.ts → telemetry_configuration_parser-6BR3_dD_.d.ts} +2 -2
  83. package/dist/{telemetry_configuration_parser-CgSN7R6A.d.cts → telemetry_configuration_parser-ybeweUPE.d.cts} +2 -2
  84. package/dist/testing/index.d.cts +7 -5
  85. package/dist/testing/index.d.ts +7 -5
  86. package/dist/trace-adapter/index.d.cts +4 -3
  87. package/dist/trace-adapter/index.d.ts +4 -3
  88. package/dist/{transport.types-BAl_TRtU.d.cts → transport.types-C2dP-eed.d.cts} +1 -1
  89. package/dist/{transport.types-DDnZoKWi.d.ts → transport.types-SA8KpLiK.d.ts} +1 -1
  90. package/migrations/1786100000000_animation_artifacts.down.sql +5 -0
  91. package/migrations/1786100000000_animation_artifacts.up.sql +41 -0
  92. package/native/noego_telemetry_native.node +0 -0
  93. package/package.json +11 -4
@@ -0,0 +1,7 @@
1
+ type TelemetryJsonPrimitive = string | number | boolean | null;
2
+ type TelemetryJsonValue = TelemetryJsonPrimitive | TelemetryJsonObject | readonly TelemetryJsonValue[];
3
+ type TelemetryJsonObject = Readonly<{
4
+ [key: string]: TelemetryJsonValue;
5
+ }>;
6
+
7
+ export type { TelemetryJsonObject as T, TelemetryJsonValue as a, TelemetryJsonPrimitive as b };
@@ -0,0 +1,7 @@
1
+ type TelemetryJsonPrimitive = string | number | boolean | null;
2
+ type TelemetryJsonValue = TelemetryJsonPrimitive | TelemetryJsonObject | readonly TelemetryJsonValue[];
3
+ type TelemetryJsonObject = Readonly<{
4
+ [key: string]: TelemetryJsonValue;
5
+ }>;
6
+
7
+ export type { TelemetryJsonObject as T, TelemetryJsonValue as a, TelemetryJsonPrimitive as b };
@@ -1,6 +1,6 @@
1
- import { T as TelemetryStorageTransport, e as TelemetryStorageTarget, a as TelemetryStorageCapabilities, b as StorageTargetStatus, M as MaintenanceStageResult } from './storage.types-Bji_pWqr.cjs';
2
- import { M as MetricDefinition, f as MetricExtraction } from './query.types-DuYWbFFe.cjs';
3
- import { d as TelemetryBatch, a as TelemetryBatchValidationLimits, f as TelemetryDropCounter, c as TelemetryBatchReceiver, e as TelemetryAcknowledgement } from './transport.types-BAl_TRtU.cjs';
1
+ import { T as TelemetryStorageTransport, e as TelemetryStorageTarget, a as TelemetryStorageCapabilities, b as StorageTargetStatus, M as MaintenanceStageResult } from './storage.types-DHbAm3j_.cjs';
2
+ import { M as MetricDefinition, b as MetricExtraction } from './metric.types-Dg4eZq6u.cjs';
3
+ import { d as TelemetryBatch, a as TelemetryBatchValidationLimits, f as TelemetryDropCounter, c as TelemetryBatchReceiver, e as TelemetryAcknowledgement } from './transport.types-C2dP-eed.cjs';
4
4
 
5
5
  interface TelemetrySinkPlugin {
6
6
  readonly name: string;
@@ -1,6 +1,6 @@
1
- import { T as TelemetryStorageTransport, e as TelemetryStorageTarget, a as TelemetryStorageCapabilities, b as StorageTargetStatus, M as MaintenanceStageResult } from './storage.types-k7oElEB3.js';
2
- import { M as MetricDefinition, f as MetricExtraction } from './query.types-DU5v7vM0.js';
3
- import { d as TelemetryBatch, a as TelemetryBatchValidationLimits, f as TelemetryDropCounter, c as TelemetryBatchReceiver, e as TelemetryAcknowledgement } from './transport.types-DDnZoKWi.js';
1
+ import { T as TelemetryStorageTransport, e as TelemetryStorageTarget, a as TelemetryStorageCapabilities, b as StorageTargetStatus, M as MaintenanceStageResult } from './storage.types-BKWoIOHp.js';
2
+ import { M as MetricDefinition, b as MetricExtraction } from './metric.types-D8aOAnUm.js';
3
+ import { d as TelemetryBatch, a as TelemetryBatchValidationLimits, f as TelemetryDropCounter, c as TelemetryBatchReceiver, e as TelemetryAcknowledgement } from './transport.types-SA8KpLiK.js';
4
4
 
5
5
  interface TelemetrySinkPlugin {
6
6
  readonly name: string;
@@ -0,0 +1,67 @@
1
+ import { T as TelemetryJsonObject } from './json.types-BqS77fcN.js';
2
+
3
+ declare const METRIC_AGGREGATES: readonly ["sum", "min", "max", "last"];
4
+ type MetricAggregate = (typeof METRIC_AGGREGATES)[number];
5
+ declare const METRIC_OVERFLOW_POLICIES: readonly ["other", "drop", "reject"];
6
+ type MetricOverflowPolicy = (typeof METRIC_OVERFLOW_POLICIES)[number];
7
+ type MetricCountMeasurement = Readonly<{
8
+ kind: 'count';
9
+ }>;
10
+ type MetricFieldMeasurement = Readonly<{
11
+ kind: 'field';
12
+ field: string;
13
+ aggregates: readonly MetricAggregate[];
14
+ }>;
15
+ type MetricMeasurement = MetricCountMeasurement | MetricFieldMeasurement;
16
+ type MetricCardinalityRule = Readonly<{
17
+ maxValuesPerBucket: number;
18
+ overflow: MetricOverflowPolicy;
19
+ }>;
20
+ type MetricDefinition = Readonly<{
21
+ name: string;
22
+ version: number;
23
+ selector: string;
24
+ groupBy: readonly string[];
25
+ measurements: readonly MetricMeasurement[];
26
+ cardinality: Readonly<Record<string, MetricCardinalityRule>>;
27
+ targetIds: readonly string[];
28
+ resolutionsMs: readonly number[];
29
+ missingField: 'skip' | 'record-failure';
30
+ }>;
31
+ type ExtractedMetricSample = Readonly<{
32
+ metricName: string;
33
+ definitionVersion: number;
34
+ occurredAtMs: number;
35
+ producerId: string;
36
+ sequence: number;
37
+ dimensions: TelemetryJsonObject;
38
+ dimensionKey: string;
39
+ values: Readonly<Record<string, number>>;
40
+ targetIds: readonly string[];
41
+ }>;
42
+ type MetricExtractionFailure = Readonly<{
43
+ metricName: string;
44
+ definitionVersion: number;
45
+ producerId: string;
46
+ sequence: number;
47
+ reason: string;
48
+ }>;
49
+ type MetricExtraction = Readonly<{
50
+ samples: readonly ExtractedMetricSample[];
51
+ failures: readonly MetricExtractionFailure[];
52
+ }>;
53
+ type MetricRollupValues = Readonly<{
54
+ count: number;
55
+ fields: Readonly<Record<string, Readonly<{
56
+ count: number;
57
+ sum: number;
58
+ min: number;
59
+ max: number;
60
+ last: number;
61
+ lastOccurredAtMs: number;
62
+ lastProducerId: string;
63
+ lastSequence: number;
64
+ }>>>;
65
+ }>;
66
+
67
+ export type { ExtractedMetricSample as E, MetricDefinition as M, MetricExtractionFailure as a, MetricExtraction as b, MetricAggregate as c, MetricCardinalityRule as d, MetricMeasurement as e, MetricOverflowPolicy as f, MetricRollupValues as g };
@@ -0,0 +1,67 @@
1
+ import { T as TelemetryJsonObject } from './json.types-BqS77fcN.cjs';
2
+
3
+ declare const METRIC_AGGREGATES: readonly ["sum", "min", "max", "last"];
4
+ type MetricAggregate = (typeof METRIC_AGGREGATES)[number];
5
+ declare const METRIC_OVERFLOW_POLICIES: readonly ["other", "drop", "reject"];
6
+ type MetricOverflowPolicy = (typeof METRIC_OVERFLOW_POLICIES)[number];
7
+ type MetricCountMeasurement = Readonly<{
8
+ kind: 'count';
9
+ }>;
10
+ type MetricFieldMeasurement = Readonly<{
11
+ kind: 'field';
12
+ field: string;
13
+ aggregates: readonly MetricAggregate[];
14
+ }>;
15
+ type MetricMeasurement = MetricCountMeasurement | MetricFieldMeasurement;
16
+ type MetricCardinalityRule = Readonly<{
17
+ maxValuesPerBucket: number;
18
+ overflow: MetricOverflowPolicy;
19
+ }>;
20
+ type MetricDefinition = Readonly<{
21
+ name: string;
22
+ version: number;
23
+ selector: string;
24
+ groupBy: readonly string[];
25
+ measurements: readonly MetricMeasurement[];
26
+ cardinality: Readonly<Record<string, MetricCardinalityRule>>;
27
+ targetIds: readonly string[];
28
+ resolutionsMs: readonly number[];
29
+ missingField: 'skip' | 'record-failure';
30
+ }>;
31
+ type ExtractedMetricSample = Readonly<{
32
+ metricName: string;
33
+ definitionVersion: number;
34
+ occurredAtMs: number;
35
+ producerId: string;
36
+ sequence: number;
37
+ dimensions: TelemetryJsonObject;
38
+ dimensionKey: string;
39
+ values: Readonly<Record<string, number>>;
40
+ targetIds: readonly string[];
41
+ }>;
42
+ type MetricExtractionFailure = Readonly<{
43
+ metricName: string;
44
+ definitionVersion: number;
45
+ producerId: string;
46
+ sequence: number;
47
+ reason: string;
48
+ }>;
49
+ type MetricExtraction = Readonly<{
50
+ samples: readonly ExtractedMetricSample[];
51
+ failures: readonly MetricExtractionFailure[];
52
+ }>;
53
+ type MetricRollupValues = Readonly<{
54
+ count: number;
55
+ fields: Readonly<Record<string, Readonly<{
56
+ count: number;
57
+ sum: number;
58
+ min: number;
59
+ max: number;
60
+ last: number;
61
+ lastOccurredAtMs: number;
62
+ lastProducerId: string;
63
+ lastSequence: number;
64
+ }>>>;
65
+ }>;
66
+
67
+ export type { ExtractedMetricSample as E, MetricDefinition as M, MetricExtractionFailure as a, MetricExtraction as b, MetricAggregate as c, MetricCardinalityRule as d, MetricMeasurement as e, MetricOverflowPolicy as f, MetricRollupValues as g };
@@ -1,4 +1,4 @@
1
- import { M as MetricDefinition } from './query.types-DU5v7vM0.js';
1
+ import { M as MetricDefinition } from './metric.types-D8aOAnUm.js';
2
2
  import { T as TelemetryResult } from './result.types-171Huujb.js';
3
3
 
4
4
  declare class MetricDefinitionContract {
@@ -1,4 +1,4 @@
1
- import { M as MetricDefinition } from './query.types-DuYWbFFe.cjs';
1
+ import { M as MetricDefinition } from './metric.types-Dg4eZq6u.cjs';
2
2
  import { T as TelemetryResult } from './result.types-171Huujb.cjs';
3
3
 
4
4
  declare class MetricDefinitionContract {
@@ -495,11 +495,15 @@ var MetricDefinitionContract = class {
495
495
  if (!eventSelector || !bracket) {
496
496
  return { ok: false, error: `Invalid metric selector ${selector}` };
497
497
  }
498
+ const groupBy = bracket === "*" ? [] : bracket.split(",").map((field) => field.trim());
499
+ if (groupBy.some((field) => field.length === 0)) {
500
+ return { ok: false, error: `Invalid metric selector ${selector}` };
501
+ }
498
502
  return {
499
503
  ok: true,
500
504
  value: {
501
505
  selector: eventSelector,
502
- groupBy: bracket === "*" ? [] : [bracket],
506
+ groupBy,
503
507
  wildcardUngrouped: bracket === "*"
504
508
  }
505
509
  };
@@ -5726,6 +5730,14 @@ var BoundedMetadataSnapshotter = class {
5726
5730
  };
5727
5731
 
5728
5732
  // src/core/telemetry_client.ts
5733
+ var TELEMETRY_LEVEL_RANKS = Object.freeze({
5734
+ trace: 0,
5735
+ debug: 1,
5736
+ info: 2,
5737
+ warn: 3,
5738
+ error: 4,
5739
+ fatal: 5
5740
+ });
5729
5741
  var TelemetryClient = class {
5730
5742
  constructor(options) {
5731
5743
  this.options = options;
@@ -5788,6 +5800,10 @@ var TelemetryClient = class {
5788
5800
  return { kind: "dropped", producerId: this.options.producerId, sequence, reason: "invalid-label" };
5789
5801
  }
5790
5802
  const priority = this.priorityFor(input.level);
5803
+ if (!this.meetsMinimumLevel(input.level)) {
5804
+ this.incrementDrop("sampled", priority);
5805
+ return { kind: "dropped", producerId: this.options.producerId, sequence, reason: "below-minimum-level" };
5806
+ }
5791
5807
  if (!this.isSampled(priority)) {
5792
5808
  this.incrementDrop("sampled", priority);
5793
5809
  return { kind: "dropped", producerId: this.options.producerId, sequence, reason: "sampled" };
@@ -6168,6 +6184,15 @@ var TelemetryClient = class {
6168
6184
  const sampleRate = this.options.admission.sampleRates[priority];
6169
6185
  return sampleRate >= 1 || this.options.random() < sampleRate;
6170
6186
  }
6187
+ meetsMinimumLevel(level) {
6188
+ const minimum = this.options.admission.minimumLevel;
6189
+ if (minimum === void 0) {
6190
+ return true;
6191
+ }
6192
+ const normalized = level.trim().toLowerCase();
6193
+ const rank = TELEMETRY_LEVEL_RANKS[normalized] ?? TELEMETRY_LEVEL_RANKS.info;
6194
+ return rank >= TELEMETRY_LEVEL_RANKS[minimum];
6195
+ }
6171
6196
  isValidLabel(label) {
6172
6197
  return /^[A-Za-z0-9][A-Za-z0-9_.:-]*$/.test(label) && label.length <= 256;
6173
6198
  }
@@ -6438,6 +6463,7 @@ var NodeTelemetryHost = class _NodeTelemetryHost {
6438
6463
  // src/platform/node/native_telemetry_host.ts
6439
6464
  var import_node_module = require("module");
6440
6465
  var import_node_path3 = require("path");
6466
+ var import_meta2 = {};
6441
6467
  var NativeTelemetryHost = class _NativeTelemetryHost {
6442
6468
  client;
6443
6469
  collector;
@@ -6480,6 +6506,16 @@ var NativeTelemetryHost = class _NativeTelemetryHost {
6480
6506
  collectorStatus() {
6481
6507
  return this.transport.status();
6482
6508
  }
6509
+ async storeAnimationArtifact(manifest, payload) {
6510
+ return JSON.parse(await this.native.storeAnimationArtifact(JSON.stringify(manifest), payload));
6511
+ }
6512
+ async getAnimationArtifact(artifactId) {
6513
+ const result = await this.native.getAnimationArtifact(artifactId);
6514
+ return Buffer.isBuffer(result) ? result : JSON.parse(result);
6515
+ }
6516
+ async listAnimationArtifacts() {
6517
+ return JSON.parse(await this.native.listAnimationArtifacts());
6518
+ }
6483
6519
  async maintenance() {
6484
6520
  return JSON.parse(await this.native.maintenance());
6485
6521
  }
@@ -6584,7 +6620,7 @@ var NativeTelemetryTransport = class {
6584
6620
  }
6585
6621
  };
6586
6622
  function loadNativeModule() {
6587
- const require2 = (0, import_node_module.createRequire)((0, import_node_path3.resolve)(process.cwd(), "package.json"));
6623
+ const require2 = (0, import_node_module.createRequire)(typeof __filename === "string" ? __filename : import_meta2.url);
6588
6624
  const packageRoot = (0, import_node_path3.dirname)(require2.resolve("@noego/telemetry/package.json"));
6589
6625
  const modulePath = (0, import_node_path3.resolve)(packageRoot, "native", "noego_telemetry_native.node");
6590
6626
  const loaded = require2(modulePath);