@wizeworks/lens-hub 0.3.0-alpha.2 → 0.3.0-alpha.4

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 (198) hide show
  1. package/dist/alerts/api.d.ts +5 -0
  2. package/dist/alerts/api.d.ts.map +1 -0
  3. package/dist/alerts/api.js +87 -0
  4. package/dist/alerts/api.js.map +1 -0
  5. package/dist/alerts/deliver.d.ts +54 -0
  6. package/dist/alerts/deliver.d.ts.map +1 -0
  7. package/dist/alerts/deliver.js +66 -0
  8. package/dist/alerts/deliver.js.map +1 -0
  9. package/dist/alerts/evaluate.d.ts +16 -0
  10. package/dist/alerts/evaluate.d.ts.map +1 -0
  11. package/dist/alerts/evaluate.js +76 -0
  12. package/dist/alerts/evaluate.js.map +1 -0
  13. package/dist/alerts/loop.d.ts +10 -0
  14. package/dist/alerts/loop.d.ts.map +1 -0
  15. package/dist/alerts/loop.js +27 -0
  16. package/dist/alerts/loop.js.map +1 -0
  17. package/dist/alerts/store.d.ts +32 -0
  18. package/dist/alerts/store.d.ts.map +1 -0
  19. package/dist/alerts/store.js +38 -0
  20. package/dist/alerts/store.js.map +1 -0
  21. package/dist/alerts/target.d.ts +3 -0
  22. package/dist/alerts/target.d.ts.map +1 -0
  23. package/dist/alerts/target.js +23 -0
  24. package/dist/alerts/target.js.map +1 -0
  25. package/dist/api.d.ts +5 -0
  26. package/dist/api.d.ts.map +1 -1
  27. package/dist/api.js +46 -4
  28. package/dist/api.js.map +1 -1
  29. package/dist/body.d.ts +2 -2
  30. package/dist/body.d.ts.map +1 -1
  31. package/dist/body.js +4 -4
  32. package/dist/body.js.map +1 -1
  33. package/dist/changes-api.d.ts +5 -0
  34. package/dist/changes-api.d.ts.map +1 -0
  35. package/dist/changes-api.js +21 -0
  36. package/dist/changes-api.js.map +1 -0
  37. package/dist/cli-args.d.ts +1 -1
  38. package/dist/cli-args.d.ts.map +1 -1
  39. package/dist/cli-args.js +32 -1
  40. package/dist/cli-args.js.map +1 -1
  41. package/dist/data.js +1 -1
  42. package/dist/data.js.map +1 -1
  43. package/dist/hub.d.ts.map +1 -1
  44. package/dist/hub.js +15 -3
  45. package/dist/hub.js.map +1 -1
  46. package/dist/infra-read.d.ts +11 -0
  47. package/dist/infra-read.d.ts.map +1 -0
  48. package/dist/infra-read.js +30 -0
  49. package/dist/infra-read.js.map +1 -0
  50. package/dist/ingest.d.ts.map +1 -1
  51. package/dist/ingest.js +14 -3
  52. package/dist/ingest.js.map +1 -1
  53. package/dist/issues.d.ts +10 -0
  54. package/dist/issues.d.ts.map +1 -0
  55. package/dist/issues.js +34 -0
  56. package/dist/issues.js.map +1 -0
  57. package/dist/kit.d.ts +6 -0
  58. package/dist/kit.d.ts.map +1 -1
  59. package/dist/kit.js +4 -0
  60. package/dist/kit.js.map +1 -1
  61. package/dist/list-search.d.ts +10 -0
  62. package/dist/list-search.d.ts.map +1 -0
  63. package/dist/list-search.js +13 -0
  64. package/dist/list-search.js.map +1 -0
  65. package/dist/mcp.d.ts +3 -2
  66. package/dist/mcp.d.ts.map +1 -1
  67. package/dist/mcp.js +59 -8
  68. package/dist/mcp.js.map +1 -1
  69. package/dist/metrics-read.js +1 -1
  70. package/dist/metrics-read.js.map +1 -1
  71. package/dist/models-api.d.ts +11 -1
  72. package/dist/models-api.d.ts.map +1 -1
  73. package/dist/models-api.js +41 -15
  74. package/dist/models-api.js.map +1 -1
  75. package/dist/options.d.ts +23 -2
  76. package/dist/options.d.ts.map +1 -1
  77. package/dist/options.js +10 -1
  78. package/dist/options.js.map +1 -1
  79. package/dist/otlp/db-params.d.ts +7 -0
  80. package/dist/otlp/db-params.d.ts.map +1 -0
  81. package/dist/otlp/db-params.js +74 -0
  82. package/dist/otlp/db-params.js.map +1 -0
  83. package/dist/otlp/logs.d.ts +1 -1
  84. package/dist/otlp/logs.d.ts.map +1 -1
  85. package/dist/otlp/logs.js +8 -7
  86. package/dist/otlp/logs.js.map +1 -1
  87. package/dist/otlp/metrics.d.ts +3 -3
  88. package/dist/otlp/metrics.d.ts.map +1 -1
  89. package/dist/otlp/metrics.js +7 -6
  90. package/dist/otlp/metrics.js.map +1 -1
  91. package/dist/otlp/nested.d.ts +4 -0
  92. package/dist/otlp/nested.d.ts.map +1 -0
  93. package/dist/otlp/nested.js +19 -0
  94. package/dist/otlp/nested.js.map +1 -0
  95. package/dist/otlp/semconv.d.ts +17 -0
  96. package/dist/otlp/semconv.d.ts.map +1 -0
  97. package/dist/otlp/semconv.js +68 -0
  98. package/dist/otlp/semconv.js.map +1 -0
  99. package/dist/otlp/spans.d.ts +3 -3
  100. package/dist/otlp/spans.d.ts.map +1 -1
  101. package/dist/otlp/spans.js +15 -7
  102. package/dist/otlp/spans.js.map +1 -1
  103. package/dist/otlp/values.d.ts +5 -10
  104. package/dist/otlp/values.d.ts.map +1 -1
  105. package/dist/otlp/values.js +32 -24
  106. package/dist/otlp/values.js.map +1 -1
  107. package/dist/saved.d.ts +7 -0
  108. package/dist/saved.d.ts.map +1 -0
  109. package/dist/saved.js +49 -0
  110. package/dist/saved.js.map +1 -0
  111. package/dist/scale-exec.d.ts +2 -2
  112. package/dist/scale-exec.d.ts.map +1 -1
  113. package/dist/scale-exec.js +4 -4
  114. package/dist/scale-exec.js.map +1 -1
  115. package/dist/schema-fts.d.ts +4 -0
  116. package/dist/schema-fts.d.ts.map +1 -0
  117. package/dist/schema-fts.js +20 -0
  118. package/dist/schema-fts.js.map +1 -0
  119. package/dist/schema-saved.d.ts +15 -0
  120. package/dist/schema-saved.d.ts.map +1 -0
  121. package/dist/schema-saved.js +43 -0
  122. package/dist/schema-saved.js.map +1 -0
  123. package/dist/schema-scale.d.ts.map +1 -1
  124. package/dist/schema-scale.js +27 -2
  125. package/dist/schema-scale.js.map +1 -1
  126. package/dist/schema.d.ts +2 -2
  127. package/dist/schema.d.ts.map +1 -1
  128. package/dist/schema.js +20 -1
  129. package/dist/schema.js.map +1 -1
  130. package/dist/search-api.d.ts +7 -0
  131. package/dist/search-api.d.ts.map +1 -0
  132. package/dist/search-api.js +25 -0
  133. package/dist/search-api.js.map +1 -0
  134. package/dist/settings-prune.d.ts +12 -0
  135. package/dist/settings-prune.d.ts.map +1 -0
  136. package/dist/settings-prune.js +15 -0
  137. package/dist/settings-prune.js.map +1 -0
  138. package/dist/settings.d.ts +27 -0
  139. package/dist/settings.d.ts.map +1 -0
  140. package/dist/settings.js +64 -0
  141. package/dist/settings.js.map +1 -0
  142. package/dist/settle.d.ts +3 -3
  143. package/dist/settle.d.ts.map +1 -1
  144. package/dist/settle.js +12 -6
  145. package/dist/settle.js.map +1 -1
  146. package/dist/slos.d.ts +14 -0
  147. package/dist/slos.d.ts.map +1 -0
  148. package/dist/slos.js +73 -0
  149. package/dist/slos.js.map +1 -0
  150. package/dist/sourcemaps-api.d.ts +15 -0
  151. package/dist/sourcemaps-api.d.ts.map +1 -0
  152. package/dist/sourcemaps-api.js +55 -0
  153. package/dist/sourcemaps-api.js.map +1 -0
  154. package/dist/sourcemaps.d.ts +10 -0
  155. package/dist/sourcemaps.d.ts.map +1 -0
  156. package/dist/sourcemaps.js +41 -0
  157. package/dist/sourcemaps.js.map +1 -0
  158. package/dist/store-read.d.ts +2 -0
  159. package/dist/store-read.d.ts.map +1 -1
  160. package/dist/store-read.js +3 -1
  161. package/dist/store-read.js.map +1 -1
  162. package/dist/store.d.ts +13 -3
  163. package/dist/store.d.ts.map +1 -1
  164. package/dist/store.js +35 -10
  165. package/dist/store.js.map +1 -1
  166. package/dist/tags-api.d.ts +5 -0
  167. package/dist/tags-api.d.ts.map +1 -0
  168. package/dist/tags-api.js +94 -0
  169. package/dist/tags-api.js.map +1 -0
  170. package/dist/tags.d.ts +11 -0
  171. package/dist/tags.d.ts.map +1 -0
  172. package/dist/tags.js +31 -0
  173. package/dist/tags.js.map +1 -0
  174. package/dist/uptime/api.d.ts +5 -0
  175. package/dist/uptime/api.d.ts.map +1 -0
  176. package/dist/uptime/api.js +78 -0
  177. package/dist/uptime/api.js.map +1 -0
  178. package/dist/uptime/cert.d.ts +5 -0
  179. package/dist/uptime/cert.d.ts.map +1 -0
  180. package/dist/uptime/cert.js +26 -0
  181. package/dist/uptime/cert.js.map +1 -0
  182. package/dist/uptime/guard.d.ts +13 -0
  183. package/dist/uptime/guard.d.ts.map +1 -0
  184. package/dist/uptime/guard.js +38 -0
  185. package/dist/uptime/guard.js.map +1 -0
  186. package/dist/uptime/run.d.ts +11 -0
  187. package/dist/uptime/run.d.ts.map +1 -0
  188. package/dist/uptime/run.js +96 -0
  189. package/dist/uptime/run.js.map +1 -0
  190. package/dist/uptime/schedule.d.ts +15 -0
  191. package/dist/uptime/schedule.d.ts.map +1 -0
  192. package/dist/uptime/schedule.js +26 -0
  193. package/dist/uptime/schedule.js.map +1 -0
  194. package/dist/uptime/store.d.ts +25 -0
  195. package/dist/uptime/store.d.ts.map +1 -0
  196. package/dist/uptime/store.js +80 -0
  197. package/dist/uptime/store.js.map +1 -0
  198. package/package.json +5 -4
package/dist/otlp/logs.js CHANGED
@@ -1,4 +1,4 @@
1
- import { redactAttributes } from "@wizeworks/lens-core";
1
+ import { looseTraceIdOf, redactAttributes } from "@wizeworks/lens-core";
2
2
  import { attributesOf, hexId, nanosToMs, senderOf, valueOf } from "./values.js";
3
3
  const LEVELS = ["trace", "debug", "info", "warn", "error", "critical"];
4
4
  /** Severity 1-4 is trace, 5-8 debug, ... 21-24 critical. Text wins when the number is missing. */
@@ -13,26 +13,27 @@ function levelOf(r) {
13
13
  return "critical";
14
14
  return LEVELS.find((l) => t.startsWith(l)) ?? "info";
15
15
  }
16
- /** Logs that belong to a trace. WizeLens shows logs per trace, so others are skipped. */
16
+ /** Log records: those of a trace go into it; those without one (startup, jobs) into a loose trace per source and 5-minute window. */
17
17
  export function writesFromLogs(list, redactKeys) {
18
18
  return list.map((rl) => {
19
19
  const sender = senderOf(rl.resource);
20
+ const source = [sender.project, sender.service, sender.environment, sender.host].join("|");
20
21
  const logs = [];
21
22
  for (const sl of rl.scopeLogs ?? []) {
22
23
  for (const r of sl.logRecords ?? []) {
23
- const traceId = hexId(r.traceId, 32);
24
- if (!traceId)
25
- continue;
24
+ const timeMs = nanosToMs(r.timeUnixNano) || nanosToMs(r.observedTimeUnixNano);
25
+ const traced = hexId(r.traceId, 32);
26
+ const traceId = traced || looseTraceIdOf(source, timeMs);
26
27
  const body = valueOf(r.body);
27
28
  logs.push({
28
29
  traceId,
29
30
  log: {
30
- timeMs: nanosToMs(r.timeUnixNano) || nanosToMs(r.observedTimeUnixNano),
31
+ timeMs,
31
32
  level: levelOf(r),
32
33
  category: sl.scope?.name || "otlp",
33
34
  message: body === null ? "" : String(body).slice(0, 10_000),
34
35
  service: sender.service,
35
- spanId: hexId(r.spanId, 16) ?? null,
36
+ spanId: traced ? (hexId(r.spanId, 16) ?? null) : null,
36
37
  attributes: redactAttributes(attributesOf(r.attributes), redactKeys),
37
38
  },
38
39
  });
@@ -1 +1 @@
1
- {"version":3,"file":"logs.js","sourceRoot":"","sources":["../../src/otlp/logs.ts"],"names":[],"mappings":"AAAA,OAAO,EAA8B,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAEpF,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,SAAS,EAA2D,QAAQ,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAkBzI,MAAM,MAAM,GAAe,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;AAEnF,kGAAkG;AAClG,SAAS,OAAO,CAAC,CAAgB;IAC/B,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC;IACnC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;QAAE,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAE,CAAC;IAC/D,MAAM,CAAC,GAAG,CAAC,CAAC,YAAY,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;IAC9C,IAAI,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC;QAAE,OAAO,MAAM,CAAC;IACxC,IAAI,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC;QAAE,OAAO,UAAU,CAAC;IACrE,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC;AACvD,CAAC;AAED,yFAAyF;AACzF,MAAM,UAAU,cAAc,CAAC,IAAiC,EAAE,UAA6B;IAC7F,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE;QACrB,MAAM,MAAM,GAAG,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC;QACrC,MAAM,IAAI,GAAa,EAAE,CAAC;QAC1B,KAAK,MAAM,EAAE,IAAI,EAAE,CAAC,SAAS,IAAI,EAAE,EAAE,CAAC;YACpC,KAAK,MAAM,CAAC,IAAI,EAAE,CAAC,UAAU,IAAI,EAAE,EAAE,CAAC;gBACpC,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;gBACrC,IAAI,CAAC,OAAO;oBAAE,SAAS;gBACvB,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;gBAC7B,IAAI,CAAC,IAAI,CAAC;oBACR,OAAO;oBACP,GAAG,EAAE;wBACH,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,oBAAoB,CAAC;wBACtE,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC;wBACjB,QAAQ,EAAE,EAAE,CAAC,KAAK,EAAE,IAAI,IAAI,MAAM;wBAClC,OAAO,EAAE,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC;wBAC3D,OAAO,EAAE,MAAM,CAAC,OAAO;wBACvB,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,IAAI;wBACnC,UAAU,EAAE,gBAAgB,CAAC,YAAY,CAAC,CAAC,CAAC,UAAU,CAAC,EAAE,UAAU,CAAC;qBACrE;iBACF,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QACD,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAe,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;IACxE,CAAC,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"logs.js","sourceRoot":"","sources":["../../src/otlp/logs.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { type MetricHistogram, type MetricPoint } from "@wizeworks/lens-core";
1
+ import { type Attributes, type MetricHistogram, type MetricPoint } from "@wizeworks/lens-core";
2
2
  import type { HubWrite } from "../store.js";
3
3
  import { type OtlpKeyValue, type OtlpResource } from "./values.js";
4
4
  type Num = string | number | undefined;
@@ -51,8 +51,8 @@ export interface OtlpResourceMetrics {
51
51
  }
52
52
  /** An exponential histogram as explicit buckets. Zero and negative values go to the first bucket. */
53
53
  export declare function fromExponential(dp: OtlpDataPoint): MetricHistogram;
54
- /** The points of one OTLP metric. Points that do not pass the core checks are skipped. */
55
- export declare function pointsOf(m: OtlpMetric, service: string, redactKeys: readonly string[]): MetricPoint[];
54
+ /** The points of one OTLP metric, with the resource's host and Kubernetes attributes (`resource`) under their own. Points that fail the core checks are skipped. */
55
+ export declare function pointsOf(m: OtlpMetric, service: string, redactKeys: readonly string[], resource?: Attributes): MetricPoint[];
56
56
  /** One write per resource: each resource is one sender. */
57
57
  export declare function writesFromMetrics(list: readonly OtlpResourceMetrics[], redactKeys: readonly string[]): HubWrite[];
58
58
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"metrics.d.ts","sourceRoot":"","sources":["../../src/otlp/metrics.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,eAAe,EAAmB,KAAK,WAAW,EAAuB,MAAM,sBAAsB,CAAC;AACpH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAA2B,KAAK,YAAY,EAAE,KAAK,YAAY,EAAY,MAAM,aAAa,CAAC;AAEtG,KAAK,GAAG,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;AAEvC,UAAU,aAAa;IACrB,UAAU,CAAC,EAAE,YAAY,EAAE,CAAC;IAC5B,iBAAiB,CAAC,EAAE,GAAG,CAAC;IACxB,YAAY,CAAC,EAAE,GAAG,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,GAAG,CAAC;IACZ,KAAK,CAAC,EAAE,GAAG,CAAC;IACZ,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,YAAY,CAAC,EAAE,GAAG,EAAE,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,GAAG,CAAC;IAChB,QAAQ,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,GAAG,EAAE,CAAA;KAAE,CAAC;IACrD,QAAQ,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,GAAG,EAAE,CAAA;KAAE,CAAC;CACtD;AAED,UAAU,QAAQ;IAChB,UAAU,CAAC,EAAE,aAAa,EAAE,CAAC;IAC7B,sBAAsB,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACzC,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,QAAQ,CAAC;IACjB,GAAG,CAAC,EAAE,QAAQ,CAAC;IACf,SAAS,CAAC,EAAE,QAAQ,CAAC;IACrB,oBAAoB,CAAC,EAAE,QAAQ,CAAC;IAChC,OAAO,CAAC,EAAE,QAAQ,CAAC;CACpB;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,YAAY,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE;YAAE,IAAI,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;QAAC,OAAO,CAAC,EAAE,UAAU,EAAE,CAAA;KAAE,EAAE,CAAC;CACxE;AAaD,qGAAqG;AACrG,wBAAgB,eAAe,CAAC,EAAE,EAAE,aAAa,GAAG,eAAe,CAUlE;AAoBD,0FAA0F;AAC1F,wBAAgB,QAAQ,CAAC,CAAC,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,MAAM,EAAE,GAAG,WAAW,EAAE,CAsBrG;AAED,2DAA2D;AAC3D,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,SAAS,mBAAmB,EAAE,EAAE,UAAU,EAAE,SAAS,MAAM,EAAE,GAAG,QAAQ,EAAE,CAMjH"}
1
+ {"version":3,"file":"metrics.d.ts","sourceRoot":"","sources":["../../src/otlp/metrics.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,UAAU,EAAuB,KAAK,eAAe,EAAmB,KAAK,WAAW,EAAuB,MAAM,sBAAsB,CAAC;AAC1J,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAA2B,KAAK,YAAY,EAAE,KAAK,YAAY,EAA0B,MAAM,aAAa,CAAC;AAEpH,KAAK,GAAG,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;AAEvC,UAAU,aAAa;IACrB,UAAU,CAAC,EAAE,YAAY,EAAE,CAAC;IAC5B,iBAAiB,CAAC,EAAE,GAAG,CAAC;IACxB,YAAY,CAAC,EAAE,GAAG,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,GAAG,CAAC;IACZ,KAAK,CAAC,EAAE,GAAG,CAAC;IACZ,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,YAAY,CAAC,EAAE,GAAG,EAAE,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,GAAG,CAAC;IAChB,QAAQ,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,GAAG,EAAE,CAAA;KAAE,CAAC;IACrD,QAAQ,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,GAAG,EAAE,CAAA;KAAE,CAAC;CACtD;AAED,UAAU,QAAQ;IAChB,UAAU,CAAC,EAAE,aAAa,EAAE,CAAC;IAC7B,sBAAsB,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACzC,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,QAAQ,CAAC;IACjB,GAAG,CAAC,EAAE,QAAQ,CAAC;IACf,SAAS,CAAC,EAAE,QAAQ,CAAC;IACrB,oBAAoB,CAAC,EAAE,QAAQ,CAAC;IAChC,OAAO,CAAC,EAAE,QAAQ,CAAC;CACpB;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,YAAY,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE;YAAE,IAAI,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;QAAC,OAAO,CAAC,EAAE,UAAU,EAAE,CAAA;KAAE,EAAE,CAAC;CACxE;AAaD,qGAAqG;AACrG,wBAAgB,eAAe,CAAC,EAAE,EAAE,aAAa,GAAG,eAAe,CAUlE;AAoBD,oKAAoK;AACpK,wBAAgB,QAAQ,CAAC,CAAC,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,MAAM,EAAE,EAAE,QAAQ,GAAE,UAAe,GAAG,WAAW,EAAE,CAsBhI;AAED,2DAA2D;AAC3D,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,SAAS,mBAAmB,EAAE,EAAE,UAAU,EAAE,SAAS,MAAM,EAAE,GAAG,QAAQ,EAAE,CAOjH"}
@@ -1,5 +1,5 @@
1
- import { sanitizeMetricPoint } from "@wizeworks/lens-core";
2
- import { attributesOf, nanosToMs, senderOf } from "./values.js";
1
+ import { INFRA_RESOURCE_KEYS, sanitizeMetricPoint } from "@wizeworks/lens-core";
2
+ import { attributesOf, nanosToMs, resourcePick, senderOf } from "./values.js";
3
3
  const num = (v) => (v === undefined || v === "" ? 0 : Number(v));
4
4
  const temporalityOf = (t) => (t === 1 || t === "AGGREGATION_TEMPORALITY_DELTA" ? "delta" : "cumulative");
5
5
  /** An explicit-bucket histogram as sent. Counts that do not fit the bounds keep count and sum only. */
@@ -37,8 +37,8 @@ function shapeOf(m) {
37
37
  return { kind: "histogram", data: m.summary, histogram: fromSummary };
38
38
  return null;
39
39
  }
40
- /** The points of one OTLP metric. Points that do not pass the core checks are skipped. */
41
- export function pointsOf(m, service, redactKeys) {
40
+ /** The points of one OTLP metric, with the resource's host and Kubernetes attributes (`resource`) under their own. Points that fail the core checks are skipped. */
41
+ export function pointsOf(m, service, redactKeys, resource = {}) {
42
42
  const shape = shapeOf(m);
43
43
  if (!shape || !m.name)
44
44
  return [];
@@ -50,7 +50,7 @@ export function pointsOf(m, service, redactKeys) {
50
50
  kind: shape.kind,
51
51
  unit: m.unit ?? "",
52
52
  description: m.description,
53
- attributes: attributesOf(dp.attributes),
53
+ attributes: { ...resource, ...attributesOf(dp.attributes) },
54
54
  timeMs: nanosToMs(dp.timeUnixNano),
55
55
  startMs: startMs || undefined,
56
56
  monotonic: shape.data.isMonotonic === true,
@@ -66,7 +66,8 @@ export function pointsOf(m, service, redactKeys) {
66
66
  export function writesFromMetrics(list, redactKeys) {
67
67
  return list.map((rm) => {
68
68
  const sender = senderOf(rm.resource);
69
- const metrics = (rm.scopeMetrics ?? []).flatMap((sm) => (sm.metrics ?? []).flatMap((m) => pointsOf(m, sender.service, redactKeys)));
69
+ const resource = resourcePick(rm.resource, INFRA_RESOURCE_KEYS);
70
+ const metrics = (rm.scopeMetrics ?? []).flatMap((sm) => (sm.metrics ?? []).flatMap((m) => pointsOf(m, sender.service, redactKeys, resource)));
70
71
  return { sender, via: "otlp", spans: [], logs: [], remotes: [], metrics };
71
72
  });
72
73
  }
@@ -1 +1 @@
1
- {"version":3,"file":"metrics.js","sourceRoot":"","sources":["../../src/otlp/metrics.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"metrics.js","sourceRoot":"","sources":["../../src/otlp/metrics.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { Span } from "@wizeworks/lens-core";
2
+ /** An ORM span (SQLAlchemy) over a driver span is one query: the driver span becomes internal, and its parameters move up. */
3
+ export declare function hideNestedDb(spans: Span[]): Span[];
4
+ //# sourceMappingURL=nested.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nested.d.ts","sourceRoot":"","sources":["../../src/otlp/nested.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAKjD,8HAA8H;AAC9H,wBAAgB,YAAY,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,CAYlD"}
@@ -0,0 +1,19 @@
1
+ import { DB_PARAMS } from "./db-params.js";
2
+ const text = (s) => s.attributes["db.query.text"];
3
+ /** An ORM span (SQLAlchemy) over a driver span is one query: the driver span becomes internal, and its parameters move up. */
4
+ export function hideNestedDb(spans) {
5
+ const byId = new Map(spans.map((s) => [s.spanId, s]));
6
+ for (const s of spans) {
7
+ if (s.category !== "db" || !s.parentSpanId)
8
+ continue;
9
+ const parent = byId.get(s.parentSpanId);
10
+ if (parent?.category !== "db")
11
+ continue;
12
+ if (parent.attributes[DB_PARAMS] === undefined && s.attributes[DB_PARAMS] !== undefined && text(parent) === text(s)) {
13
+ parent.attributes[DB_PARAMS] = s.attributes[DB_PARAMS];
14
+ }
15
+ s.category = "internal";
16
+ }
17
+ return spans;
18
+ }
19
+ //# sourceMappingURL=nested.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nested.js","sourceRoot":"","sources":["../../src/otlp/nested.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE3C,MAAM,IAAI,GAAG,CAAC,CAAO,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;AAExD,8HAA8H;AAC9H,MAAM,UAAU,YAAY,CAAC,KAAa;IACxC,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACtD,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,IAAI,CAAC,CAAC,QAAQ,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,YAAY;YAAE,SAAS;QACrD,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;QACxC,IAAI,MAAM,EAAE,QAAQ,KAAK,IAAI;YAAE,SAAS;QACxC,IAAI,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,KAAK,SAAS,IAAI,CAAC,CAAC,UAAU,CAAC,SAAS,CAAC,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;YACpH,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,SAAS,CAAE,CAAC;QAC1D,CAAC;QACD,CAAC,CAAC,QAAQ,GAAG,UAAU,CAAC;IAC1B,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -0,0 +1,17 @@
1
+ import type { AttributeValue, Attributes } from "@wizeworks/lens-core";
2
+ export declare const ALIASES: Record<string, string>;
3
+ /** Copy older names to the current ones when the current one is missing. First alias wins. */
4
+ export declare function applyAliases(out: Attributes): Attributes;
5
+ /** True for a captured header attribute (`http.request.header.*`, `http.response.header.*`). */
6
+ export declare const isHeaderKey: (key: string) => boolean;
7
+ /** Header names as the add-ons send them: lower case with dashes (Python sends `content_type`). */
8
+ export declare function headerKey(key: string): string;
9
+ /** The agents send each header as a list of values; the dashboard shows them joined with ", ". */
10
+ export declare function headerValue<V extends {
11
+ arrayValue?: {
12
+ values?: V[];
13
+ };
14
+ }>(v: V | undefined, one: (x: V | undefined) => AttributeValue): AttributeValue;
15
+ /** `http.target` holds the path and the query: split them into `url.path` and `url.query`. */
16
+ export declare function splitTarget(a: Attributes): void;
17
+ //# sourceMappingURL=semconv.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"semconv.d.ts","sourceRoot":"","sources":["../../src/otlp/semconv.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAGvE,eAAO,MAAM,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CA+B1C,CAAC;AAEF,8FAA8F;AAC9F,wBAAgB,YAAY,CAAC,GAAG,EAAE,UAAU,GAAG,UAAU,CAKxD;AAID,gGAAgG;AAChG,eAAO,MAAM,WAAW,QAAS,MAAM,KAAG,OAA8B,CAAC;AAEzE,mGAAmG;AACnG,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAG7C;AAED,kGAAkG;AAClG,wBAAgB,WAAW,CAAC,CAAC,SAAS;IAAE,UAAU,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,CAAC,EAAE,CAAA;KAAE,CAAA;CAAE,EAAE,CAAC,EAAE,CAAC,GAAG,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,SAAS,KAAK,cAAc,GAAG,cAAc,CAGpJ;AAED,8FAA8F;AAC9F,wBAAgB,WAAW,CAAC,CAAC,EAAE,UAAU,GAAG,IAAI,CAO/C"}
@@ -0,0 +1,68 @@
1
+ // Older semantic-convention names (what the Java, Python, and Go agents still send by default), mapped to the current ones.
2
+ export const ALIASES = {
3
+ "http.method": "http.request.method",
4
+ "http.status_code": "http.response.status_code",
5
+ "http.url": "url.full",
6
+ "http.target": "url.path",
7
+ "http.scheme": "url.scheme",
8
+ "http.user_agent": "user_agent.original",
9
+ "http.client_ip": "client.address",
10
+ "http.flavor": "network.protocol.version",
11
+ "http.request_content_length": "http.request.body.size",
12
+ "http.response_content_length": "http.response.body.size",
13
+ "db.statement": "db.query.text",
14
+ "db.system": "db.system.name",
15
+ "db.name": "db.namespace",
16
+ "db.operation": "db.operation.name",
17
+ "db.sql.table": "db.collection.name",
18
+ "db.mongodb.collection": "db.collection.name",
19
+ "db.cassandra.table": "db.collection.name",
20
+ "db.cosmosdb.container": "db.collection.name",
21
+ "net.peer.name": "server.address",
22
+ "net.peer.port": "server.port",
23
+ "net.host.name": "server.address",
24
+ "net.host.port": "server.port",
25
+ "net.sock.peer.addr": "network.peer.address",
26
+ "net.sock.peer.port": "network.peer.port",
27
+ "messaging.operation": "messaging.operation.type",
28
+ "messaging.destination": "messaging.destination.name",
29
+ "code.function": "code.function.name",
30
+ "code.filepath": "code.file.path",
31
+ "code.lineno": "code.line.number",
32
+ "deployment.environment": "deployment.environment.name",
33
+ };
34
+ /** Copy older names to the current ones when the current one is missing. First alias wins. */
35
+ export function applyAliases(out) {
36
+ for (const [old, current] of Object.entries(ALIASES)) {
37
+ if (out[old] !== undefined && out[current] === undefined)
38
+ out[current] = out[old];
39
+ }
40
+ return out;
41
+ }
42
+ const HEADER_RE = /^(http\.(?:request|response)\.header\.)(.+)$/;
43
+ /** True for a captured header attribute (`http.request.header.*`, `http.response.header.*`). */
44
+ export const isHeaderKey = (key) => HEADER_RE.test(key);
45
+ /** Header names as the add-ons send them: lower case with dashes (Python sends `content_type`). */
46
+ export function headerKey(key) {
47
+ const m = HEADER_RE.exec(key);
48
+ return m[1] + m[2].toLowerCase().replace(/_/g, "-");
49
+ }
50
+ /** The agents send each header as a list of values; the dashboard shows them joined with ", ". */
51
+ export function headerValue(v, one) {
52
+ if (!v?.arrayValue)
53
+ return one(v);
54
+ return (v.arrayValue.values ?? []).map((x) => String(one(x) ?? "")).join(", ");
55
+ }
56
+ /** `http.target` holds the path and the query: split them into `url.path` and `url.query`. */
57
+ export function splitTarget(a) {
58
+ const path = a["url.path"];
59
+ if (typeof path !== "string")
60
+ return;
61
+ const q = path.indexOf("?");
62
+ if (q < 0)
63
+ return;
64
+ a["url.path"] = path.slice(0, q);
65
+ if (a["url.query"] === undefined)
66
+ a["url.query"] = path.slice(q + 1);
67
+ }
68
+ //# sourceMappingURL=semconv.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"semconv.js","sourceRoot":"","sources":["../../src/otlp/semconv.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { type Span } from "@wizeworks/lens-core";
1
+ import { type Attributes, type Span } from "@wizeworks/lens-core";
2
2
  import type { HubWrite } from "../store.js";
3
3
  import { type OtlpKeyValue, type OtlpResource } from "./values.js";
4
4
  export interface OtlpSpan {
@@ -26,8 +26,8 @@ export interface OtlpResourceSpans {
26
26
  spans?: OtlpSpan[];
27
27
  }[];
28
28
  }
29
- /** One OTLP span as a contract span. Null when its ids are not valid. */
30
- export declare function toSpan(s: OtlpSpan, service: string, redactKeys: readonly string[]): Span | null;
29
+ /** One OTLP span as a contract span, with the resource's Kubernetes attributes (`resource`) under its own. Null when its ids are not valid. */
30
+ export declare function toSpan(s: OtlpSpan, service: string, redactKeys: readonly string[], resource?: Attributes): Span | null;
31
31
  /** One write per resource: each resource is one sender. */
32
32
  export declare function writesFromSpans(list: readonly OtlpResourceSpans[], redactKeys: readonly string[]): HubWrite[];
33
33
  //# sourceMappingURL=spans.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"spans.d.ts","sourceRoot":"","sources":["../../src/otlp/spans.ts"],"names":[],"mappings":"AAAA,OAAO,EAA+C,KAAK,IAAI,EAAoC,MAAM,sBAAsB,CAAC;AAChI,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAkC,KAAK,YAAY,EAAE,KAAK,YAAY,EAAY,MAAM,aAAa,CAAC;AAE7G,MAAM,WAAW,QAAQ;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACvB,iBAAiB,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACpC,eAAe,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAClC,UAAU,CAAC,EAAE,YAAY,EAAE,CAAC;IAC5B,MAAM,CAAC,EAAE;QAAE,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,YAAY,EAAE,CAAA;KAAE,EAAE,CAAC;IAC1F,MAAM,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CACvD;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,UAAU,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,QAAQ,EAAE,CAAA;KAAE,EAAE,CAAC;CACvC;AAqCD,yEAAyE;AACzE,wBAAgB,MAAM,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,GAAG,IAAI,CA4B/F;AAED,2DAA2D;AAC3D,wBAAgB,eAAe,CAAC,IAAI,EAAE,SAAS,iBAAiB,EAAE,EAAE,UAAU,EAAE,SAAS,MAAM,EAAE,GAAG,QAAQ,EAAE,CAO7G"}
1
+ {"version":3,"file":"spans.d.ts","sourceRoot":"","sources":["../../src/otlp/spans.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,UAAU,EAAkD,KAAK,IAAI,EAAkD,MAAM,sBAAsB,CAAC;AAClK,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAI5C,OAAO,EAAkC,KAAK,YAAY,EAAE,KAAK,YAAY,EAA0B,MAAM,aAAa,CAAC;AAE3H,MAAM,WAAW,QAAQ;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACvB,iBAAiB,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACpC,eAAe,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAClC,UAAU,CAAC,EAAE,YAAY,EAAE,CAAC;IAC5B,MAAM,CAAC,EAAE;QAAE,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,YAAY,EAAE,CAAA;KAAE,EAAE,CAAC;IAC1F,MAAM,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CACvD;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,UAAU,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,QAAQ,EAAE,CAAA;KAAE,EAAE,CAAC;CACvC;AAqCD,+IAA+I;AAC/I,wBAAgB,MAAM,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,MAAM,EAAE,EAAE,QAAQ,GAAE,UAAe,GAAG,IAAI,GAAG,IAAI,CA+B1H;AAED,2DAA2D;AAC3D,wBAAgB,eAAe,CAAC,IAAI,EAAE,SAAS,iBAAiB,EAAE,EAAE,UAAU,EAAE,SAAS,MAAM,EAAE,GAAG,QAAQ,EAAE,CAS7G"}
@@ -1,5 +1,8 @@
1
- import { isDbCall, redactAttributes } from "@wizeworks/lens-core";
2
- import { attributesOf, hexId, nanosToMs, senderOf } from "./values.js";
1
+ import { isDbCall, redactAttributes, SPAN_RESOURCE_KEYS, stampVersion } from "@wizeworks/lens-core";
2
+ import { foldDbParams } from "./db-params.js";
3
+ import { hideNestedDb } from "./nested.js";
4
+ import { splitTarget } from "./semconv.js";
5
+ import { attributesOf, hexId, nanosToMs, resourcePick, senderOf } from "./values.js";
3
6
  const KINDS = ["internal", "internal", "server", "client", "producer", "consumer"];
4
7
  const KIND_NAMES = {
5
8
  SPAN_KIND_SERVER: "server",
@@ -37,14 +40,17 @@ function clientName(a, fallback) {
37
40
  return fallback;
38
41
  }
39
42
  }
40
- /** One OTLP span as a contract span. Null when its ids are not valid. */
41
- export function toSpan(s, service, redactKeys) {
43
+ /** One OTLP span as a contract span, with the resource's Kubernetes attributes (`resource`) under its own. Null when its ids are not valid. */
44
+ export function toSpan(s, service, redactKeys, resource = {}) {
42
45
  const traceId = hexId(s.traceId, 32);
43
46
  const spanId = hexId(s.spanId, 16);
44
47
  if (!traceId || !spanId)
45
48
  return null;
46
49
  const kind = kindOf(s.kind);
47
- const attributes = redactAttributes(attributesOf(s.attributes), redactKeys);
50
+ const raw = attributesOf(s.attributes);
51
+ splitTarget(raw);
52
+ foldDbParams(raw, redactKeys);
53
+ const attributes = redactAttributes({ ...resource, ...raw }, redactKeys);
48
54
  const category = categoryOf(kind, attributes);
49
55
  const startMs = nanosToMs(s.startTimeUnixNano);
50
56
  const name = String(s.name ?? "span").slice(0, 500);
@@ -73,8 +79,10 @@ export function writesFromSpans(list, redactKeys) {
73
79
  return list.map((rs) => {
74
80
  const sender = senderOf(rs.resource);
75
81
  const spans = (rs.scopeSpans ?? []).flatMap((ss) => ss.spans ?? []);
76
- const mapped = spans.map((s) => toSpan(s, sender.service, redactKeys)).filter((s) => s !== null);
77
- return { sender, via: "otlp", spans: mapped, logs: [], remotes: [] };
82
+ const resource = resourcePick(rs.resource, SPAN_RESOURCE_KEYS);
83
+ const mapped = spans.map((s) => toSpan(s, sender.service, redactKeys, resource)).filter((s) => s !== null);
84
+ // The resource's service.version goes on the sender's spans, for releases and so Problems can tell a new one.
85
+ return { sender, via: "otlp", spans: stampVersion(hideNestedDb(mapped), sender), logs: [], remotes: [] };
78
86
  });
79
87
  }
80
88
  //# sourceMappingURL=spans.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"spans.js","sourceRoot":"","sources":["../../src/otlp/spans.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmB,QAAQ,EAAE,gBAAgB,EAA+C,MAAM,sBAAsB,CAAC;AAEhI,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,SAAS,EAAwC,QAAQ,EAAE,MAAM,aAAa,CAAC;AAoB7G,MAAM,KAAK,GAAe,CAAC,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;AAC/F,MAAM,UAAU,GAA6B;IAC3C,gBAAgB,EAAE,QAAQ;IAC1B,gBAAgB,EAAE,QAAQ;IAC1B,kBAAkB,EAAE,UAAU;IAC9B,kBAAkB,EAAE,UAAU;CAC/B,CAAC;AAEF,MAAM,MAAM,GAAG,CAAC,CAA8B,EAAY,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC;AAErJ,SAAS,QAAQ,CAAC,IAAiC;IACjD,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,KAAK,mBAAmB;QAAE,OAAO,OAAO,CAAC;IAC/D,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,KAAK,gBAAgB;QAAE,OAAO,IAAI,CAAC;IACzD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,+DAA+D;AAC/D,SAAS,UAAU,CAAC,IAAc,EAAE,CAAa;IAC/C,IAAI,CAAC,CAAC,kBAAkB,CAAC,IAAI,IAAI;QAAE,OAAO,WAAW,CAAC;IACtD,IAAI,QAAQ,CAAC,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IAC7B,MAAM,GAAG,GAAG,CAAC,CAAC,qBAAqB,CAAC,IAAI,IAAI,IAAI,CAAC,CAAC,YAAY,CAAC,IAAI,IAAI,CAAC;IACxE,IAAI,IAAI,KAAK,QAAQ,IAAI,GAAG;QAAE,OAAO,aAAa,CAAC;IACnD,IAAI,IAAI,KAAK,QAAQ,IAAI,GAAG;QAAE,OAAO,aAAa,CAAC;IACnD,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,SAAS,UAAU,CAAC,CAAa,EAAE,QAAgB;IACjD,IAAI,CAAC;QACH,MAAM,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QACzC,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,qBAAqB,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC;IAC/E,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,QAAQ,CAAC;IAClB,CAAC;AACH,CAAC;AAED,yEAAyE;AACzE,MAAM,UAAU,MAAM,CAAC,CAAW,EAAE,OAAe,EAAE,UAA6B;IAChF,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IACrC,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACnC,IAAI,CAAC,OAAO,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IACrC,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAC5B,MAAM,UAAU,GAAG,gBAAgB,CAAC,YAAY,CAAC,CAAC,CAAC,UAAU,CAAC,EAAE,UAAU,CAAC,CAAC;IAC5E,MAAM,QAAQ,GAAG,UAAU,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IAC9C,MAAM,OAAO,GAAG,SAAS,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC;IAC/C,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACpD,OAAO;QACL,OAAO;QACP,MAAM;QACN,YAAY,EAAE,KAAK,CAAC,CAAC,CAAC,YAAY,EAAE,EAAE,CAAC,IAAI,IAAI;QAC/C,IAAI,EAAE,QAAQ,KAAK,aAAa,IAAI,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI;QAChG,IAAI;QACJ,QAAQ;QACR,OAAO;QACP,OAAO;QACP,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,eAAe,CAAC,GAAG,OAAO,CAAC;QAC/D,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,IAAI,CAAC;QAChC,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,OAAO,IAAI,IAAI;QACxC,UAAU;QACV,MAAM,EAAE,CAAC,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAChD,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI,OAAO,CAAC;YAC/B,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC;YACjC,UAAU,EAAE,gBAAgB,CAAC,YAAY,CAAC,CAAC,CAAC,UAAU,CAAC,EAAE,UAAU,CAAC;SACrE,CAAC,CAAC;KACJ,CAAC;AACJ,CAAC;AAED,2DAA2D;AAC3D,MAAM,UAAU,eAAe,CAAC,IAAkC,EAAE,UAA6B;IAC/F,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE;QACrB,MAAM,MAAM,GAAG,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC;QACrC,MAAM,KAAK,GAAG,CAAC,EAAE,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;QACpE,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAa,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC;QAC5G,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAe,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;IAChF,CAAC,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"spans.js","sourceRoot":"","sources":["../../src/otlp/spans.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import type { AttributeValue, Attributes } from "@wizeworks/lens-core";
1
+ import { type AttributeValue, type Attributes, type HubSender } from "@wizeworks/lens-core";
2
2
  /** OTLP shapes after JSON parse or protobuf decode. Ids are hex, 64-bit numbers are strings or numbers. */
3
3
  export interface OtlpAnyValue {
4
4
  stringValue?: string;
@@ -28,13 +28,8 @@ export declare function attributesOf(list: OtlpKeyValue[] | undefined): Attribut
28
28
  export declare function nanosToMs(v: string | number | undefined): number;
29
29
  /** A 16- or 32-hex id, or undefined for an empty or all-zero id. */
30
30
  export declare function hexId(v: string | undefined, length: 16 | 32): string | undefined;
31
- /** The sender a resource describes. */
32
- export declare function senderOf(resource: OtlpResource | undefined): {
33
- service: string;
34
- project: string | undefined;
35
- version: string | undefined;
36
- runtime: string;
37
- environment: string | undefined;
38
- host: string | undefined;
39
- };
31
+ /** The resource attributes of `keys` that it has, to copy onto points or spans. */
32
+ export declare function resourcePick(resource: OtlpResource | undefined, keys: readonly string[]): Attributes;
33
+ /** The sender a resource describes. The collector's host and Kubernetes receivers send no service name: they are "infrastructure". */
34
+ export declare function senderOf(resource: OtlpResource | undefined): HubSender;
40
35
  //# sourceMappingURL=values.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"values.d.ts","sourceRoot":"","sources":["../../src/otlp/values.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAEvE,2GAA2G;AAC3G,MAAM,WAAW,YAAY;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,YAAY,EAAE,CAAA;KAAE,CAAC;IACzC,WAAW,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,YAAY,EAAE,CAAA;KAAE,CAAC;IAC1C,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,YAAY,CAAC;CACtB;AAED,MAAM,WAAW,YAAY;IAC3B,UAAU,CAAC,EAAE,YAAY,EAAE,CAAC;CAC7B;AAED,oFAAoF;AACpF,wBAAgB,OAAO,CAAC,CAAC,EAAE,YAAY,GAAG,SAAS,GAAG,cAAc,CAUnE;AAkBD,0FAA0F;AAC1F,wBAAgB,YAAY,CAAC,IAAI,EAAE,YAAY,EAAE,GAAG,SAAS,GAAG,UAAU,CAOzE;AAED,uDAAuD;AACvD,wBAAgB,SAAS,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,GAAG,MAAM,CAKhE;AAED,oEAAoE;AACpE,wBAAgB,KAAK,CAAC,CAAC,EAAE,MAAM,GAAG,SAAS,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,GAAG,MAAM,GAAG,SAAS,CAIhF;AAED,uCAAuC;AACvC,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,YAAY,GAAG,SAAS;IAKvD,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,WAAW;IACX,IAAI;EAEP"}
1
+ {"version":3,"file":"values.d.ts","sourceRoot":"","sources":["../../src/otlp/values.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAAE,KAAK,UAAU,EAAE,KAAK,SAAS,EAAiB,MAAM,sBAAsB,CAAC;AAG3G,2GAA2G;AAC3G,MAAM,WAAW,YAAY;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,YAAY,EAAE,CAAA;KAAE,CAAC;IACzC,WAAW,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,YAAY,EAAE,CAAA;KAAE,CAAC;IAC1C,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,YAAY,CAAC;CACtB;AAED,MAAM,WAAW,YAAY;IAC3B,UAAU,CAAC,EAAE,YAAY,EAAE,CAAC;CAC7B;AAED,oFAAoF;AACpF,wBAAgB,OAAO,CAAC,CAAC,EAAE,YAAY,GAAG,SAAS,GAAG,cAAc,CAUnE;AAED,0FAA0F;AAC1F,wBAAgB,YAAY,CAAC,IAAI,EAAE,YAAY,EAAE,GAAG,SAAS,GAAG,UAAU,CAQzE;AAED,uDAAuD;AACvD,wBAAgB,SAAS,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,GAAG,MAAM,CAKhE;AAED,oEAAoE;AACpE,wBAAgB,KAAK,CAAC,CAAC,EAAE,MAAM,GAAG,SAAS,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,GAAG,MAAM,GAAG,SAAS,CAIhF;AAED,mFAAmF;AACnF,wBAAgB,YAAY,CAAC,QAAQ,EAAE,YAAY,GAAG,SAAS,EAAE,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,UAAU,CAKpG;AASD,sIAAsI;AACtI,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,YAAY,GAAG,SAAS,GAAG,SAAS,CAiBtE"}
@@ -1,3 +1,5 @@
1
+ import { INFRA_SERVICE } from "@wizeworks/lens-core";
2
+ import { applyAliases, headerKey, headerValue, isHeaderKey } from "./semconv.js";
1
3
  /** One AnyValue as a contract attribute value. Arrays and maps become JSON text. */
2
4
  export function valueOf(v) {
3
5
  if (!v)
@@ -18,32 +20,18 @@ export function valueOf(v) {
18
20
  return v.bytesValue;
19
21
  return null;
20
22
  }
21
- // Older semantic-convention names, mapped to the ones the dashboard reads.
22
- const ALIASES = {
23
- "http.method": "http.request.method",
24
- "http.status_code": "http.response.status_code",
25
- "http.url": "url.full",
26
- "http.target": "url.path",
27
- "http.scheme": "url.scheme",
28
- "db.statement": "db.query.text",
29
- "db.system": "db.system.name",
30
- "db.name": "db.namespace",
31
- "db.operation": "db.operation.name",
32
- "net.peer.name": "server.address",
33
- "net.peer.port": "server.port",
34
- "deployment.environment": "deployment.environment.name",
35
- };
36
23
  /** Key-value list as contract attributes, with older names copied to the current ones. */
37
24
  export function attributesOf(list) {
38
25
  const out = {};
39
- for (const kv of list ?? [])
40
- if (kv?.key)
26
+ for (const kv of list ?? []) {
27
+ if (!kv?.key)
28
+ continue;
29
+ if (isHeaderKey(kv.key))
30
+ out[headerKey(kv.key)] = headerValue(kv.value, valueOf);
31
+ else
41
32
  out[kv.key] = valueOf(kv.value);
42
- for (const [old, current] of Object.entries(ALIASES)) {
43
- if (out[old] !== undefined && out[current] === undefined)
44
- out[current] = out[old];
45
33
  }
46
- return out;
34
+ return applyAliases(out);
47
35
  }
48
36
  /** Unix nanoseconds (string or number) as epoch ms. */
49
37
  export function nanosToMs(v) {
@@ -61,18 +49,38 @@ export function hexId(v, length) {
61
49
  return undefined;
62
50
  return id;
63
51
  }
64
- /** The sender a resource describes. */
52
+ /** The resource attributes of `keys` that it has, to copy onto points or spans. */
53
+ export function resourcePick(resource, keys) {
54
+ const a = attributesOf(resource?.attributes);
55
+ const out = {};
56
+ for (const k of keys)
57
+ if (a[k] !== undefined && a[k] !== null && a[k] !== "")
58
+ out[k] = a[k];
59
+ return out;
60
+ }
61
+ /** Where a resource runs in Kubernetes; undefined when it has no k8s attributes. */
62
+ function k8sOf(str) {
63
+ const all = { cluster: str("k8s.cluster.name"), namespace: str("k8s.namespace.name"), pod: str("k8s.pod.name"), node: str("k8s.node.name") };
64
+ const k8s = Object.fromEntries(Object.entries(all).filter(([, v]) => v));
65
+ return Object.keys(k8s).length > 0 ? k8s : undefined;
66
+ }
67
+ /** The sender a resource describes. The collector's host and Kubernetes receivers send no service name: they are "infrastructure". */
65
68
  export function senderOf(resource) {
66
69
  const a = attributesOf(resource?.attributes);
67
70
  const str = (k) => (typeof a[k] === "string" && a[k] ? String(a[k]).slice(0, 100) : undefined);
68
71
  const lang = str("telemetry.sdk.language");
72
+ const k8s = k8sOf(str);
73
+ const infra = !!(str("host.name") || k8s);
69
74
  return {
70
- service: str("service.name") ?? "unknown_service",
75
+ service: str("service.name") ?? (infra ? INFRA_SERVICE : "unknown_service"),
71
76
  project: str("wizelens.project") ?? str("service.namespace"),
72
77
  version: str("service.version"),
78
+ release: str("service.version"),
73
79
  runtime: lang ? `otlp ${lang}` : "otlp",
74
80
  environment: str("deployment.environment.name"),
75
- host: str("host.name"),
81
+ // A pod's host name is the pod's name; senders without host.name (most SDKs) still get one row per pod.
82
+ host: str("host.name") ?? k8s?.pod,
83
+ ...(k8s ? { k8s } : {}),
76
84
  };
77
85
  }
78
86
  //# sourceMappingURL=values.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"values.js","sourceRoot":"","sources":["../../src/otlp/values.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"values.js","sourceRoot":"","sources":["../../src/otlp/values.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { IncomingMessage, ServerResponse } from "node:http";
2
+ import type { DatabaseSync } from "node:sqlite";
3
+ import { type SavedItem } from "@wizeworks/lens-core";
4
+ export declare const listSaved: (db: DatabaseSync, project: string) => SavedItem[];
5
+ /** `api/saved?project=` lists and adds; `api/saved/:id` reads, changes, and deletes. */
6
+ export declare function handleSaved(db: DatabaseSync, sub: string, req: IncomingMessage, res: ServerResponse, url: URL, now: number): Promise<void>;
7
+ //# sourceMappingURL=saved.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"saved.d.ts","sourceRoot":"","sources":["../src/saved.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AACjE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAc,KAAK,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAOlE,eAAO,MAAM,SAAS,OAAQ,YAAY,WAAW,MAAM,KAAG,SAAS,EAAsG,CAAC;AAuB9K,wFAAwF;AACxF,wBAAsB,WAAW,CAAC,EAAE,EAAE,YAAY,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,eAAe,EAAE,GAAG,EAAE,cAAc,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAYhJ"}
package/dist/saved.js ADDED
@@ -0,0 +1,49 @@
1
+ // Saved views, searches, and dashboards on the hub: `api/saved?project=`. The hub has no accounts, so every item is shared.
2
+ import { randomUUID } from "node:crypto";
3
+ import { parseSaved } from "@wizeworks/lens-core";
4
+ import { sendJson } from "@wizeworks/lens-node/kit";
5
+ import { parseJson, readBody } from "./body.js";
6
+ // Items saved before log searches could be charts have no `chart`.
7
+ const itemsOf = (rows) => rows.map((r) => ({ chart: false, ...JSON.parse(r.json) }));
8
+ export const listSaved = (db, project) => itemsOf(db.prepare("SELECT json FROM saved WHERE project = ? ORDER BY created_ms").all(project));
9
+ const savedById = (db, project, id) => itemsOf(db.prepare("SELECT json FROM saved WHERE project = ? AND id = ?").all(project, id))[0];
10
+ function save(db, item) {
11
+ db.prepare("INSERT INTO saved (id, project, kind, json, created_ms) VALUES (?, ?, ?, ?, ?) ON CONFLICT (id) DO UPDATE SET json = excluded.json").run(item.id, item.projectId, item.kind, JSON.stringify(item), item.createdMs);
12
+ }
13
+ const body = async (req) => (parseJson(await readBody(req)) ?? {});
14
+ async function onItem(db, method, project, id, req, res, now) {
15
+ const item = savedById(db, project, id);
16
+ if (!item)
17
+ return sendJson(res, 404, { error: "Not found." });
18
+ if (method === "GET")
19
+ return sendJson(res, 200, item);
20
+ if (method === "DELETE")
21
+ return (db.prepare("DELETE FROM saved WHERE id = ?").run(id), sendJson(res, 200, { ok: true }));
22
+ if (method !== "PATCH")
23
+ return sendJson(res, 405, { error: "method not allowed" });
24
+ const input = parseSaved({ ...item, ...(await body(req)), kind: item.kind });
25
+ if (typeof input === "string")
26
+ return sendJson(res, 400, { error: input });
27
+ const next = { ...item, ...input, shared: true, updatedMs: now };
28
+ save(db, next);
29
+ sendJson(res, 200, next);
30
+ }
31
+ /** `api/saved?project=` lists and adds; `api/saved/:id` reads, changes, and deletes. */
32
+ export async function handleSaved(db, sub, req, res, url, now) {
33
+ const method = req.method ?? "GET";
34
+ const project = url.searchParams.get("project") ?? "";
35
+ const id = sub.split("/")[2];
36
+ if (id)
37
+ return onItem(db, method, project, decodeURIComponent(id), req, res, now);
38
+ if (method === "GET")
39
+ return sendJson(res, 200, { items: listSaved(db, project) });
40
+ if (method !== "POST")
41
+ return sendJson(res, 405, { error: "method not allowed" });
42
+ const input = parseSaved(await body(req));
43
+ if (typeof input === "string")
44
+ return sendJson(res, 400, { error: input });
45
+ const item = { ...input, id: randomUUID(), projectId: project, shared: true, owner: "", ownerName: "", createdMs: now, updatedMs: now };
46
+ save(db, item);
47
+ sendJson(res, 201, item);
48
+ }
49
+ //# sourceMappingURL=saved.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"saved.js","sourceRoot":"","sources":["../src/saved.ts"],"names":[],"mappings":"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"}
@@ -5,6 +5,6 @@ import type { HubStore } from "./store.js";
5
5
  export declare const sqliteRunner: (db: DatabaseSync) => SqlRunner;
6
6
  /** Page needs from the hub's stats tables. Scope: an optional project and environment; the 1 h tier keeps `maxAgeMs`. */
7
7
  export declare function hubExecutor(store: HubStore, scope?: SqlScope, keepRemote?: (endpoint: string) => boolean): Executor;
8
- /** Traces in the scope still waiting for their stats, for `pageContext(..., settling)`. Null when none. */
9
- export declare function hubSettling(store: HubStore, scope?: SqlScope): number | null;
8
+ /** Traces in the scope whose stats run behind (written over `behindMs` ago, not settled), for `pageContext(..., settling)`. Null when none. */
9
+ export declare function hubSettling(store: HubStore, scope?: SqlScope, behindMs?: number): number | null;
10
10
  //# sourceMappingURL=scale-exec.d.ts.map