@dxos/observability 0.3.11-main.547da9d → 0.3.11-main.5cbcf4e

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 (82) hide show
  1. package/README.md +9 -4
  2. package/dist/lib/browser/{chunk-2J5YS65Q.mjs → chunk-6ZTMPKEG.mjs} +3 -3
  3. package/dist/lib/browser/{chunk-2J5YS65Q.mjs.map → chunk-6ZTMPKEG.mjs.map} +3 -3
  4. package/dist/lib/browser/{chunk-ROSK6U3K.mjs → chunk-HPGC4HC7.mjs} +3 -3
  5. package/dist/lib/browser/chunk-HPGC4HC7.mjs.map +7 -0
  6. package/dist/lib/browser/{chunk-STWCJK52.mjs → chunk-OCQVYNE3.mjs} +223 -129
  7. package/dist/lib/browser/chunk-OCQVYNE3.mjs.map +7 -0
  8. package/dist/lib/browser/datadog/index.mjs +1 -1
  9. package/dist/lib/browser/index.mjs +9 -5
  10. package/dist/lib/browser/meta.json +1 -1
  11. package/dist/lib/browser/observability-QNG5QON4.mjs +10 -0
  12. package/dist/lib/browser/segment/index.mjs +1 -1
  13. package/dist/lib/node/{chunk-ARUBPK2W.cjs → chunk-BHF4PKAP.cjs} +6 -6
  14. package/dist/lib/node/chunk-BHF4PKAP.cjs.map +7 -0
  15. package/dist/lib/node/{chunk-DE7OVD7T.cjs → chunk-CBMRJXSL.cjs} +211 -119
  16. package/dist/lib/node/chunk-CBMRJXSL.cjs.map +7 -0
  17. package/dist/lib/node/{chunk-VDBBIYH6.cjs → chunk-ZJRKFREX.cjs} +6 -6
  18. package/dist/lib/node/{chunk-VDBBIYH6.cjs.map → chunk-ZJRKFREX.cjs.map} +3 -3
  19. package/dist/lib/node/datadog/index.cjs +3 -3
  20. package/dist/lib/node/datadog/index.cjs.map +1 -1
  21. package/dist/lib/node/index.cjs +20 -16
  22. package/dist/lib/node/index.cjs.map +2 -2
  23. package/dist/lib/node/meta.json +1 -1
  24. package/dist/lib/node/{observability-YMIQHLME.cjs → observability-JMKBRR4L.cjs} +8 -8
  25. package/dist/lib/node/observability-JMKBRR4L.cjs.map +7 -0
  26. package/dist/lib/node/segment/index.cjs +2 -2
  27. package/dist/lib/node/segment/index.cjs.map +1 -1
  28. package/dist/types/src/datadog/metrics.d.ts +3 -1
  29. package/dist/types/src/datadog/metrics.d.ts.map +1 -1
  30. package/dist/types/src/datadog/metrics.js +1 -1
  31. package/dist/types/src/datadog/metrics.js.map +1 -1
  32. package/dist/types/src/helpers/{app-observability.d.ts → browser-observability.d.ts} +4 -6
  33. package/dist/types/src/helpers/browser-observability.d.ts.map +1 -0
  34. package/dist/types/src/helpers/{app-observability.js → browser-observability.js} +22 -51
  35. package/dist/types/src/helpers/browser-observability.js.map +1 -0
  36. package/dist/types/src/helpers/common.d.ts +10 -0
  37. package/dist/types/src/helpers/common.d.ts.map +1 -0
  38. package/dist/types/src/helpers/common.js +23 -0
  39. package/dist/types/src/helpers/common.js.map +1 -0
  40. package/dist/types/src/helpers/index.d.ts +3 -1
  41. package/dist/types/src/helpers/index.d.ts.map +1 -1
  42. package/dist/types/src/helpers/index.js +3 -1
  43. package/dist/types/src/helpers/index.js.map +1 -1
  44. package/dist/types/src/helpers/node-observability.d.ts +34 -0
  45. package/dist/types/src/helpers/node-observability.d.ts.map +1 -0
  46. package/dist/types/src/helpers/node-observability.js +106 -0
  47. package/dist/types/src/helpers/node-observability.js.map +1 -0
  48. package/dist/types/src/helpers/setup-telemetry-listeners.d.ts.map +1 -1
  49. package/dist/types/src/helpers/setup-telemetry-listeners.js +7 -12
  50. package/dist/types/src/helpers/setup-telemetry-listeners.js.map +1 -1
  51. package/dist/types/src/observability.d.ts +5 -4
  52. package/dist/types/src/observability.d.ts.map +1 -1
  53. package/dist/types/src/observability.js +29 -16
  54. package/dist/types/src/observability.js.map +1 -1
  55. package/dist/types/src/segment/browser.d.ts.map +1 -1
  56. package/dist/types/src/segment/browser.js +2 -2
  57. package/dist/types/src/segment/browser.js.map +1 -1
  58. package/dist/types/src/segment/node.d.ts.map +1 -1
  59. package/dist/types/src/segment/node.js +2 -2
  60. package/dist/types/src/segment/node.js.map +1 -1
  61. package/dist/types/src/segment/types.d.ts +3 -1
  62. package/dist/types/src/segment/types.d.ts.map +1 -1
  63. package/package.json +17 -14
  64. package/src/datadog/metrics.ts +3 -5
  65. package/src/helpers/{app-observability.ts → browser-observability.ts} +26 -54
  66. package/src/helpers/common.ts +25 -0
  67. package/src/helpers/index.ts +3 -1
  68. package/src/helpers/node-observability.ts +151 -0
  69. package/src/helpers/setup-telemetry-listeners.ts +2 -7
  70. package/src/observability.ts +40 -20
  71. package/src/segment/browser.ts +3 -3
  72. package/src/segment/node.ts +3 -3
  73. package/src/segment/types.ts +1 -1
  74. package/dist/lib/browser/chunk-ROSK6U3K.mjs.map +0 -7
  75. package/dist/lib/browser/chunk-STWCJK52.mjs.map +0 -7
  76. package/dist/lib/browser/observability-XIDFB6PJ.mjs +0 -10
  77. package/dist/lib/node/chunk-ARUBPK2W.cjs.map +0 -7
  78. package/dist/lib/node/chunk-DE7OVD7T.cjs.map +0 -7
  79. package/dist/lib/node/observability-YMIQHLME.cjs.map +0 -7
  80. package/dist/types/src/helpers/app-observability.d.ts.map +0 -1
  81. package/dist/types/src/helpers/app-observability.js.map +0 -1
  82. /package/dist/lib/browser/{observability-XIDFB6PJ.mjs.map → observability-QNG5QON4.mjs.map} +0 -0
package/README.md CHANGED
@@ -1,4 +1,4 @@
1
- #
1
+ # Observability
2
2
 
3
3
  This package provides isomorphic observability capabilities for the DXOS platform.
4
4
 
@@ -7,7 +7,7 @@ This package provides isomorphic observability capabilities for the DXOS platfor
7
7
  * Telemetry logging for product usage statistics.
8
8
 
9
9
  The observability package provides the following facilities to support these capabilities:
10
- * Secrets loading
10
+ * Secrets loading for API keys for SaaS services
11
11
  * Common tag handling
12
12
  * Common group, opt-in handling
13
13
 
@@ -17,9 +17,14 @@ This is currently implemented using the following providers:
17
17
  * Time-series data = Datadog
18
18
  * Telemetry logging - Segment
19
19
 
20
- # Datadog
20
+ # Usage and Configuration
21
+ Entry points are provided in [helpers/](src/helpers/), which contain functionality to persist the configuration.
21
22
 
22
- ## Usage
23
+ `Mode` can be `disabled`, `basic`, and `full`. `basic` and `full` currently have the same behavior, but will control the exposure of public identity keys in the future. See https://github.com/orgs/dxos/discussions/5438
24
+
25
+ `Group` is intended to be used to distinguish different deployments and usages of the same application, such as internal and external deployments and testing of the observability infrastructure.
26
+
27
+ `Namespace` is used by the provider backends to distinguish different applications and services.
23
28
 
24
29
  # TODO
25
30
  * Stabilize API and further decouple it from the underlying providers
@@ -54,7 +54,7 @@ var DatadogMetrics = class {
54
54
  ]
55
55
  });
56
56
  const mergedTags = Object.entries({
57
- ...Object.fromEntries(this._getTags().entries()),
57
+ ...this._getTags(),
58
58
  ...tags
59
59
  }).map(([key, value2]) => `${key}:${value2}`);
60
60
  log2("datadog gauge", {
@@ -63,7 +63,7 @@ var DatadogMetrics = class {
63
63
  tags: mergedTags
64
64
  }, {
65
65
  F: __dxlog_file2,
66
- L: 42,
66
+ L: 40,
67
67
  S: this,
68
68
  C: (f, a) => f(...a)
69
69
  });
@@ -78,4 +78,4 @@ export {
78
78
  defaultOptions,
79
79
  DatadogMetrics
80
80
  };
81
- //# sourceMappingURL=chunk-2J5YS65Q.mjs.map
81
+ //# sourceMappingURL=chunk-6ZTMPKEG.mjs.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/datadog/browser.ts", "../../../src/datadog/metrics.ts"],
4
- "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { invariant } from '@dxos/invariant';\nimport { log } from '@dxos/log';\n\nimport { type DatadogOptions } from './metrics';\n\nexport const defaultOptions = ({ apiKey, config, host }: DatadogOptions) => {\n const corsProxy = config.get('runtime.app.env.DX_DATADOG_PROXY');\n invariant(corsProxy, 'need DX_DATADOG_PROXY for CORS proxy');\n return {\n apiKey,\n host,\n site: corsProxy,\n onError: (err: any) => {\n log.info('Datadog error', { err });\n },\n };\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport * as Datadog from 'datadog-metrics';\nimport debug from 'debug';\n\nimport { type Config } from '@dxos/client';\nimport { invariant } from '@dxos/invariant';\nimport { log } from '@dxos/log';\n\nimport { defaultOptions } from './node';\n// import { tags as globalTags } from '../tags';\n\nexport type DatadogOptions = {\n apiKey: string;\n host?: string;\n site?: String;\n getTags: () => Map<string, string>;\n // needed to read CORS proxy\n config: Config;\n};\n\ndebug.enable('metrics');\n\nexport class DatadogMetrics {\n private _datadogmetrics?: any;\n private _getTags: () => Map<string, string>;\n\n constructor(options: DatadogOptions) {\n this._getTags = options.getTags;\n this._datadogmetrics = Datadog;\n\n this._datadogmetrics.init(defaultOptions(options));\n }\n\n gauge(name: string, value: number, tags?: any) {\n invariant(this._datadogmetrics, 'Datadog not initialized');\n const mergedTags = Object.entries({ ...Object.fromEntries(this._getTags().entries()), ...tags }).map(\n ([key, value]) => `${key}:${value}`,\n );\n log('datadog gauge', { name, value, tags: mergedTags });\n this._datadogmetrics.gauge(name, value, mergedTags);\n }\n\n flush() {\n this._datadogmetrics.flush();\n }\n}\n"],
5
- "mappings": ";AAIA,SAASA,iBAAiB;AAC1B,SAASC,WAAW;;AAIb,IAAMC,iBAAiB,CAAC,EAAEC,QAAQC,QAAQC,KAAI,MAAkB;AACrE,QAAMC,YAAYF,OAAOG,IAAI,kCAAA;AAC7BP,YAAUM,WAAW,wCAAA;;;;;;;;;AACrB,SAAO;IACLH;IACAE;IACAG,MAAMF;IACNG,SAAS,CAACC,QAAAA;AACRT,UAAIU,KAAK,iBAAiB;QAAED;MAAI,GAAA;;;;;;IAClC;EACF;AACF;;;AChBA,YAAYE,aAAa;AACzB,OAAOC,WAAW;AAGlB,SAASC,aAAAA,kBAAiB;AAC1B,SAASC,OAAAA,YAAW;;AAcpBC,MAAMC,OAAO,SAAA;AAEN,IAAMC,iBAAN,MAAMA;EAIXC,YAAYC,SAAyB;AACnC,SAAKC,WAAWD,QAAQE;AACxB,SAAKC,kBAAkBC;AAEvB,SAAKD,gBAAgBE,KAAKC,eAAeN,OAAAA,CAAAA;EAC3C;EAEAO,MAAMC,MAAcC,OAAeC,MAAY;AAC7CC,IAAAA,WAAU,KAAKR,iBAAiB,2BAAA;;;;;;;;;AAChC,UAAMS,aAAaC,OAAOC,QAAQ;MAAE,GAAGD,OAAOE,YAAY,KAAKd,SAAQ,EAAGa,QAAO,CAAA;MAAK,GAAGJ;IAAK,CAAA,EAAGM,IAC/F,CAAC,CAACC,KAAKR,MAAAA,MAAW,GAAGQ,GAAAA,IAAOR,MAAAA,EAAO;AAErCS,IAAAA,KAAI,iBAAiB;MAAEV;MAAMC;MAAOC,MAAME;IAAW,GAAA;;;;;;AACrD,SAAKT,gBAAgBI,MAAMC,MAAMC,OAAOG,UAAAA;EAC1C;EAEAO,QAAQ;AACN,SAAKhB,gBAAgBgB,MAAK;EAC5B;AACF;",
6
- "names": ["invariant", "log", "defaultOptions", "apiKey", "config", "host", "corsProxy", "get", "site", "onError", "err", "info", "Datadog", "debug", "invariant", "log", "debug", "enable", "DatadogMetrics", "constructor", "options", "_getTags", "getTags", "_datadogmetrics", "Datadog", "init", "defaultOptions", "gauge", "name", "value", "tags", "invariant", "mergedTags", "Object", "entries", "fromEntries", "map", "key", "log", "flush"]
4
+ "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { invariant } from '@dxos/invariant';\nimport { log } from '@dxos/log';\n\nimport { type DatadogOptions } from './metrics';\n\nexport const defaultOptions = ({ apiKey, config, host }: DatadogOptions) => {\n const corsProxy = config.get('runtime.app.env.DX_DATADOG_PROXY');\n invariant(corsProxy, 'need DX_DATADOG_PROXY for CORS proxy');\n return {\n apiKey,\n host,\n site: corsProxy,\n onError: (err: any) => {\n log.info('Datadog error', { err });\n },\n };\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport * as Datadog from 'datadog-metrics';\nimport debug from 'debug';\n\nimport { type Config } from '@dxos/client';\nimport { invariant } from '@dxos/invariant';\nimport { log } from '@dxos/log';\n\nimport { defaultOptions } from './node';\n// import { tags as globalTags } from '../tags';\n\nexport type DatadogOptions = {\n apiKey: string;\n host?: string;\n site?: String;\n getTags: () => { [key: string]: string };\n // needed to read CORS proxy\n config: Config;\n};\n\ndebug.enable('metrics');\n\nexport class DatadogMetrics {\n private _datadogmetrics?: any;\n private _getTags: () => { [key: string]: string };\n\n constructor(options: DatadogOptions) {\n this._getTags = options.getTags;\n this._datadogmetrics = Datadog;\n\n this._datadogmetrics.init(defaultOptions(options));\n }\n\n gauge(name: string, value: number, tags?: any) {\n invariant(this._datadogmetrics, 'Datadog not initialized');\n const mergedTags = Object.entries({ ...this._getTags(), ...tags }).map(([key, value]) => `${key}:${value}`);\n log('datadog gauge', { name, value, tags: mergedTags });\n this._datadogmetrics.gauge(name, value, mergedTags);\n }\n\n flush() {\n this._datadogmetrics.flush();\n }\n}\n"],
5
+ "mappings": ";AAIA,SAASA,iBAAiB;AAC1B,SAASC,WAAW;;AAIb,IAAMC,iBAAiB,CAAC,EAAEC,QAAQC,QAAQC,KAAI,MAAkB;AACrE,QAAMC,YAAYF,OAAOG,IAAI,kCAAA;AAC7BP,YAAUM,WAAW,wCAAA;;;;;;;;;AACrB,SAAO;IACLH;IACAE;IACAG,MAAMF;IACNG,SAAS,CAACC,QAAAA;AACRT,UAAIU,KAAK,iBAAiB;QAAED;MAAI,GAAA;;;;;;IAClC;EACF;AACF;;;AChBA,YAAYE,aAAa;AACzB,OAAOC,WAAW;AAGlB,SAASC,aAAAA,kBAAiB;AAC1B,SAASC,OAAAA,YAAW;;AAcpBC,MAAMC,OAAO,SAAA;AAEN,IAAMC,iBAAN,MAAMA;EAIXC,YAAYC,SAAyB;AACnC,SAAKC,WAAWD,QAAQE;AACxB,SAAKC,kBAAkBC;AAEvB,SAAKD,gBAAgBE,KAAKC,eAAeN,OAAAA,CAAAA;EAC3C;EAEAO,MAAMC,MAAcC,OAAeC,MAAY;AAC7CC,IAAAA,WAAU,KAAKR,iBAAiB,2BAAA;;;;;;;;;AAChC,UAAMS,aAAaC,OAAOC,QAAQ;MAAE,GAAG,KAAKb,SAAQ;MAAI,GAAGS;IAAK,CAAA,EAAGK,IAAI,CAAC,CAACC,KAAKP,MAAAA,MAAW,GAAGO,GAAAA,IAAOP,MAAAA,EAAO;AAC1GQ,IAAAA,KAAI,iBAAiB;MAAET;MAAMC;MAAOC,MAAME;IAAW,GAAA;;;;;;AACrD,SAAKT,gBAAgBI,MAAMC,MAAMC,OAAOG,UAAAA;EAC1C;EAEAM,QAAQ;AACN,SAAKf,gBAAgBe,MAAK;EAC5B;AACF;",
6
+ "names": ["invariant", "log", "defaultOptions", "apiKey", "config", "host", "corsProxy", "get", "site", "onError", "err", "info", "Datadog", "debug", "invariant", "log", "debug", "enable", "DatadogMetrics", "constructor", "options", "_getTags", "getTags", "_datadogmetrics", "Datadog", "init", "defaultOptions", "gauge", "name", "value", "tags", "invariant", "mergedTags", "Object", "entries", "map", "key", "log", "flush"]
7
7
  }
@@ -29,7 +29,7 @@ var SegmentTelemetry = class {
29
29
  page({ identityId: userId, ...options } = {}) {
30
30
  try {
31
31
  window.analytics?.page({
32
- context: Object.fromEntries(this._getTags().entries()),
32
+ context: this._getTags(),
33
33
  ...options,
34
34
  userId
35
35
  });
@@ -46,7 +46,7 @@ var SegmentTelemetry = class {
46
46
  try {
47
47
  options.properties = {
48
48
  ...options.properties,
49
- ...Object.fromEntries(this._getTags().entries())
49
+ ...this._getTags()
50
50
  };
51
51
  window.analytics?.track({
52
52
  ...options,
@@ -80,4 +80,4 @@ var SegmentTelemetry = class {
80
80
  export {
81
81
  SegmentTelemetry
82
82
  };
83
- //# sourceMappingURL=chunk-ROSK6U3K.mjs.map
83
+ //# sourceMappingURL=chunk-HPGC4HC7.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/segment/browser.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2022 DXOS.org\n//\n\nimport snippet from '@segment/snippet';\n\nimport { log } from '@dxos/log';\n\nimport type { EventOptions, SegmentTelemetryOptions, PageOptions } from './types';\nimport { captureException } from '../sentry';\n\nexport class SegmentTelemetry {\n private _getTags: () => { [key: string]: string };\n\n constructor({ apiKey, batchSize, getTags }: SegmentTelemetryOptions) {\n this._getTags = getTags;\n try {\n const contents = snippet.min({\n apiKey,\n page: false,\n });\n\n const script = document.createElement('script');\n script.innerHTML = contents;\n document.body.append(script);\n } catch (err) {\n log.catch('Failed to initialize telemetry', err);\n }\n }\n\n page({ identityId: userId, ...options }: PageOptions = {}) {\n try {\n (window as any).analytics?.page({\n context: this._getTags(),\n ...options,\n userId,\n });\n } catch (err) {\n log.catch('Failed to track page', err);\n }\n }\n\n event({ identityId: userId, name: event, ...options }: EventOptions) {\n try {\n options.properties = {\n ...options.properties,\n ...this._getTags(),\n };\n (window as any).analytics?.track({\n ...options,\n event,\n });\n } catch (err) {\n log.catch('Failed to track event', err);\n }\n }\n\n async flush() {\n try {\n await (window as any).analytics?.flush((err: any) => {\n captureException(err);\n });\n } catch (err) {\n log.catch('Failed to flush telemetry', err);\n }\n }\n}\n"],
5
+ "mappings": ";;;;;AAIA,OAAOA,aAAa;AAEpB,SAASC,WAAW;;AAKb,IAAMC,mBAAN,MAAMA;EAGXC,YAAY,EAAEC,QAAQC,WAAWC,QAAO,GAA6B;AACnE,SAAKC,WAAWD;AAChB,QAAI;AACF,YAAME,WAAWC,QAAQC,IAAI;QAC3BN;QACAO,MAAM;MACR,CAAA;AAEA,YAAMC,SAASC,SAASC,cAAc,QAAA;AACtCF,aAAOG,YAAYP;AACnBK,eAASG,KAAKC,OAAOL,MAAAA;IACvB,SAASM,KAAK;AACZC,UAAIC,MAAM,kCAAkCF,KAAAA;;;;;;IAC9C;EACF;EAEAP,KAAK,EAAEU,YAAYC,QAAQ,GAAGC,QAAAA,IAAyB,CAAC,GAAG;AACzD,QAAI;AACDC,aAAeC,WAAWd,KAAK;QAC9Be,SAAS,KAAKnB,SAAQ;QACtB,GAAGgB;QACHD;MACF,CAAA;IACF,SAASJ,KAAK;AACZC,UAAIC,MAAM,wBAAwBF,KAAAA;;;;;;IACpC;EACF;EAEAS,MAAM,EAAEN,YAAYC,QAAQM,MAAMD,OAAO,GAAGJ,QAAAA,GAAyB;AACnE,QAAI;AACFA,cAAQM,aAAa;QACnB,GAAGN,QAAQM;QACX,GAAG,KAAKtB,SAAQ;MAClB;AACCiB,aAAeC,WAAWK,MAAM;QAC/B,GAAGP;QACHI;MACF,CAAA;IACF,SAAST,KAAK;AACZC,UAAIC,MAAM,yBAAyBF,KAAAA;;;;;;IACrC;EACF;EAEA,MAAMa,QAAQ;AACZ,QAAI;AACF,YAAOP,OAAeC,WAAWM,MAAM,CAACb,QAAAA;AACtCc,yBAAiBd,GAAAA;MACnB,CAAA;IACF,SAASA,KAAK;AACZC,UAAIC,MAAM,6BAA6BF,KAAAA;;;;;;IACzC;EACF;AACF;",
6
+ "names": ["snippet", "log", "SegmentTelemetry", "constructor", "apiKey", "batchSize", "getTags", "_getTags", "contents", "snippet", "min", "page", "script", "document", "createElement", "innerHTML", "body", "append", "err", "log", "catch", "identityId", "userId", "options", "window", "analytics", "context", "event", "name", "properties", "track", "flush", "captureException"]
7
+ }