@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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slos.d.ts","sourceRoot":"","sources":["../src/slos.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,EAAE,KAAK,YAAY,EAA+B,KAAK,GAAG,EAAa,MAAM,sBAAsB,CAAC;AAI3G,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAI3C,eAAO,MAAM,YAAY,QAAO,MAAkB,CAAC;AAInD,eAAO,MAAM,QAAQ,OAAQ,YAAY,WAAW,MAAM,KAAG,GAAG,EAAoG,CAAC;AAErK,eAAO,MAAM,OAAO,OAAQ,YAAY,WAAW,MAAM,MAAM,MAAM,KAAG,GAAG,GAAG,SAAyG,CAAC;AAMxL,iDAAiD;AACjD,wBAAgB,YAAY,CAAC,EAAE,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,GAAG,YAAY,CAG5E;AAID,oGAAoG;AACpG,wBAAsB,WAAW,CAAC,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,eAAe,EAAE,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAQ7I;AAgBD,uGAAuG;AACvG,wBAAsB,UAAU,CAAC,KAAK,EAAE,QAAQ,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,CAe9I"}
package/dist/slos.js ADDED
@@ -0,0 +1,73 @@
1
+ // SLOs and Apdex targets on the hub, per project ("" for all): `api/slos` and `api/apdex`.
2
+ import { randomUUID } from "node:crypto";
3
+ import { parseApdexTargets, parseSlo, sloReport } from "@wizeworks/lens-core";
4
+ import { sendJson } from "@wizeworks/lens-node/kit";
5
+ import { parseJson, readBody } from "./body.js";
6
+ import { hubExecutor } from "./scale-exec.js";
7
+ /** Bumps when Apdex targets change, so cached page models are not reused. */
8
+ let apdexGen = 0;
9
+ export const apdexVersion = () => apdexGen;
10
+ const slosOf = (rows) => rows.map((r) => JSON.parse(r.json));
11
+ export const listSlos = (db, project) => slosOf(db.prepare("SELECT json FROM slos WHERE project = ? ORDER BY created_ms").all(project));
12
+ export const sloById = (db, project, id) => slosOf(db.prepare("SELECT json FROM slos WHERE project = ? AND id = ?").all(project, id))[0];
13
+ function saveSlo(db, s, now) {
14
+ db.prepare("INSERT INTO slos (id, project, json, created_ms) VALUES (?, ?, ?, ?) ON CONFLICT (id) DO UPDATE SET json = excluded.json").run(s.id, s.projectId, JSON.stringify(s), now);
15
+ }
16
+ /** A project's Apdex targets (service to ms). */
17
+ export function apdexTargets(db, project) {
18
+ const row = db.prepare("SELECT json FROM apdex_targets WHERE project = ?").get(project);
19
+ return row ? JSON.parse(row.json) : {};
20
+ }
21
+ const body = async (req) => (parseJson(await readBody(req)) ?? {});
22
+ /** `GET api/apdex?project=`: the targets. `PUT`: replace them with `{ apdex: { service: ms } }`. */
23
+ export async function handleApdex(db, method, project, req, res) {
24
+ if (method === "GET")
25
+ return sendJson(res, 200, { apdex: apdexTargets(db, project) });
26
+ if (method !== "PUT")
27
+ return sendJson(res, 405, { error: "method not allowed" });
28
+ const t = parseApdexTargets((await body(req)).apdex);
29
+ if (typeof t === "string")
30
+ return sendJson(res, 400, { error: t });
31
+ db.prepare("INSERT INTO apdex_targets (project, json) VALUES (?, ?) ON CONFLICT (project) DO UPDATE SET json = excluded.json").run(project, JSON.stringify(t));
32
+ apdexGen++;
33
+ sendJson(res, 200, { apdex: t });
34
+ }
35
+ async function onSlo(store, method, project, id, req, res, now) {
36
+ const db = store.db;
37
+ const slo = sloById(db, project, id);
38
+ if (!slo)
39
+ return sendJson(res, 404, { error: "SLO not found." });
40
+ if (method === "GET")
41
+ return sendJson(res, 200, await sloReport(slo, hubExecutor(store, { project: project || undefined }), now));
42
+ if (method === "DELETE")
43
+ return (db.prepare("DELETE FROM slos WHERE id = ?").run(id), sendJson(res, 200, { ok: true }));
44
+ if (method !== "PATCH")
45
+ return sendJson(res, 405, { error: "method not allowed" });
46
+ const input = parseSlo({ ...slo, ...(await body(req)) });
47
+ if (typeof input === "string")
48
+ return sendJson(res, 400, { error: input });
49
+ const next = { ...slo, ...input };
50
+ saveSlo(db, next, now);
51
+ sendJson(res, 200, next);
52
+ }
53
+ /** `api/slos?project=`: list (with reports) and create; `api/slos/:id`: one report, change, delete. */
54
+ export async function handleSlos(store, sub, req, res, url, now) {
55
+ const method = req.method ?? "GET";
56
+ const project = url.searchParams.get("project") ?? "";
57
+ const id = sub.split("/")[2];
58
+ if (id)
59
+ return onSlo(store, method, project, decodeURIComponent(id), req, res, now);
60
+ if (method === "GET") {
61
+ const ex = hubExecutor(store, { project: project || undefined });
62
+ return sendJson(res, 200, { slos: await Promise.all(listSlos(store.db, project).map((s) => sloReport(s, ex, now))), apdex: apdexTargets(store.db, project) });
63
+ }
64
+ if (method !== "POST")
65
+ return sendJson(res, 405, { error: "method not allowed" });
66
+ const input = parseSlo(await body(req));
67
+ if (typeof input === "string")
68
+ return sendJson(res, 400, { error: input });
69
+ const slo = { ...input, id: randomUUID(), projectId: project };
70
+ saveSlo(store.db, slo, now);
71
+ sendJson(res, 201, slo);
72
+ }
73
+ //# sourceMappingURL=slos.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slos.js","sourceRoot":"","sources":["../src/slos.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import type { IncomingMessage, ServerResponse } from "node:http";
2
+ import type { DatabaseSync } from "node:sqlite";
3
+ import { type MapLoader } from "@wizeworks/lens-core";
4
+ import { type SourceMapOptions } from "@wizeworks/lens-node/kit";
5
+ /** The map loader for one project: its uploads first, then build folders and dev servers. */
6
+ export type HubMaps = (project: string) => MapLoader;
7
+ /** One loader per project, made on first use. */
8
+ export declare function hubMaps(db: DatabaseSync, options: SourceMapOptions | false | undefined): HubMaps;
9
+ /** `POST api/sourcemaps?release=&file=[&project=]`: one map, body the map JSON (gzip allowed). */
10
+ export declare function uploadSourceMap(db: DatabaseSync, now: number, req: IncomingMessage, res: ServerResponse, url: URL): Promise<void>;
11
+ /** `GET api/sourcemaps[?release=&project=]`: the stored maps, newest first. */
12
+ export declare function listMaps(db: DatabaseSync, res: ServerResponse, url: URL): void;
13
+ /** `POST api/sourcemaps/resolve[?project=]` with `{stack, release, traceId?, spanId?}`. */
14
+ export declare function resolveMaps(maps: HubMaps, db: DatabaseSync, req: IncomingMessage, res: ServerResponse, url: URL): Promise<void>;
15
+ //# sourceMappingURL=sourcemaps-api.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sourcemaps-api.d.ts","sourceRoot":"","sources":["../src/sourcemaps-api.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AACjE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAA8B,KAAK,SAAS,EAA0E,MAAM,sBAAsB,CAAC;AAC1J,OAAO,EAA4B,KAAK,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAI3F,6FAA6F;AAC7F,MAAM,MAAM,OAAO,GAAG,CAAC,OAAO,EAAE,MAAM,KAAK,SAAS,CAAC;AAErD,iDAAiD;AACjD,wBAAgB,OAAO,CAAC,EAAE,EAAE,YAAY,EAAE,OAAO,EAAE,gBAAgB,GAAG,KAAK,GAAG,SAAS,GAAG,OAAO,CAOhG;AAID,kGAAkG;AAClG,wBAAsB,eAAe,CAAC,EAAE,EAAE,YAAY,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,eAAe,EAAE,GAAG,EAAE,cAAc,EAAE,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAYvI;AAED,+EAA+E;AAC/E,wBAAgB,QAAQ,CAAC,EAAE,EAAE,YAAY,EAAE,GAAG,EAAE,cAAc,EAAE,GAAG,EAAE,GAAG,GAAG,IAAI,CAE9E;AASD,2FAA2F;AAC3F,wBAAsB,WAAW,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,YAAY,EAAE,GAAG,EAAE,eAAe,EAAE,GAAG,EAAE,cAAc,EAAE,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CASrI"}
@@ -0,0 +1,55 @@
1
+ import { answerResolve, checkUpload, MAX_SOURCEMAP_BYTES, normalizeRelease, parseSourceMap, resolveTargetOf } from "@wizeworks/lens-core";
2
+ import { localMapLoader, sendJson } from "@wizeworks/lens-node/kit";
3
+ import { parseJson, readBody } from "./body.js";
4
+ import { listSourceMaps, saveSourceMap, uploadedMapLoader } from "./sourcemaps.js";
5
+ /** One loader per project, made on first use. */
6
+ export function hubMaps(db, options) {
7
+ const byProject = new Map();
8
+ return (project) => {
9
+ let load = byProject.get(project);
10
+ if (!load)
11
+ byProject.set(project, (load = localMapLoader(options, [uploadedMapLoader(db, project)]) ?? uploadedMapLoader(db, project)));
12
+ return load;
13
+ };
14
+ }
15
+ const projectOf = (url) => url.searchParams.get("project")?.slice(0, 100) ?? "";
16
+ /** `POST api/sourcemaps?release=&file=[&project=]`: one map, body the map JSON (gzip allowed). */
17
+ export async function uploadSourceMap(db, now, req, res, url) {
18
+ const q = checkUpload(url.searchParams);
19
+ if (typeof q === "string")
20
+ return sendJson(res, 400, { error: q });
21
+ let text;
22
+ try {
23
+ text = (await readBody(req, MAX_SOURCEMAP_BYTES)).toString("utf8");
24
+ }
25
+ catch {
26
+ return sendJson(res, 413, { error: "The map is too large (64 MB at most)." });
27
+ }
28
+ if (!parseSourceMap(text))
29
+ return sendJson(res, 400, { error: "The body is not a source map (version 3)." });
30
+ saveSourceMap(db, projectOf(url), q.release, q.file, text, now);
31
+ sendJson(res, 201, { release: q.release, file: q.file, bytes: Buffer.byteLength(text) });
32
+ }
33
+ /** `GET api/sourcemaps[?release=&project=]`: the stored maps, newest first. */
34
+ export function listMaps(db, res, url) {
35
+ sendJson(res, 200, { maps: listSourceMaps(db, projectOf(url), normalizeRelease(url.searchParams.get("release")) ?? undefined) });
36
+ }
37
+ /** The project whose maps a resolve call reads: the one its trace was sent to (so "All projects" works), else `?project=`. */
38
+ function resolveProject(db, body, url) {
39
+ const target = resolveTargetOf(body);
40
+ const row = target && db.prepare("SELECT project FROM traces WHERE trace_id = ?").get(target.traceId);
41
+ return row ? row.project : projectOf(url);
42
+ }
43
+ /** `POST api/sourcemaps/resolve[?project=]` with `{stack, release, traceId?, spanId?}`. */
44
+ export async function resolveMaps(maps, db, req, res, url) {
45
+ let body;
46
+ try {
47
+ body = parseJson(await readBody(req));
48
+ }
49
+ catch {
50
+ return sendJson(res, 400, { error: "invalid body" });
51
+ }
52
+ const answer = await answerResolve(body, maps(resolveProject(db, body, url)));
53
+ sendJson(res, answer.status, answer.body);
54
+ }
55
+ //# sourceMappingURL=sourcemaps-api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sourcemaps-api.js","sourceRoot":"","sources":["../src/sourcemaps-api.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import type { DatabaseSync } from "node:sqlite";
2
+ import { type MapLoader, type SourceMapEntry } from "@wizeworks/lens-core";
3
+ export declare const SOURCEMAPS_SCHEMA = "\nCREATE TABLE IF NOT EXISTS sourcemaps (\n project TEXT NOT NULL, release TEXT NOT NULL, file TEXT NOT NULL, map BLOB NOT NULL, bytes INTEGER NOT NULL,\n uploaded_ms REAL NOT NULL, PRIMARY KEY (project, release, file)\n);\nCREATE INDEX IF NOT EXISTS ix_sourcemaps_release ON sourcemaps(project, uploaded_ms);\n";
4
+ /** Save one map (replacing the same release and file), then drop the oldest releases past the kept count. */
5
+ export declare function saveSourceMap(db: DatabaseSync, project: string, release: string, file: string, map: string, now: number): void;
6
+ /** The maps of a project, newest first; only one release when given. */
7
+ export declare function listSourceMaps(db: DatabaseSync, project: string, release?: string): SourceMapEntry[];
8
+ /** Uploaded maps for one project (and maps uploaded with no project). Needs the release the browser sent. */
9
+ export declare function uploadedMapLoader(db: DatabaseSync, project: string): MapLoader;
10
+ //# sourceMappingURL=sourcemaps.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sourcemaps.d.ts","sourceRoot":"","sources":["../src/sourcemaps.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,OAAO,EAEL,KAAK,SAAS,EAKd,KAAK,cAAc,EACpB,MAAM,sBAAsB,CAAC;AAG9B,eAAO,MAAM,iBAAiB,8TAM7B,CAAC;AAEF,6GAA6G;AAC7G,wBAAgB,aAAa,CAAC,EAAE,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAa9H;AAED,wEAAwE;AACxE,wBAAgB,cAAc,CAAC,EAAE,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,cAAc,EAAE,CAGpG;AAWD,6GAA6G;AAC7G,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,GAAG,SAAS,CAO9E"}
@@ -0,0 +1,41 @@
1
+ import { gunzipSync, gzipSync } from "node:zlib";
2
+ import { cachedLoader, mapFileCandidates, MAX_SOURCEMAP_BYTES, parseSourceMap, SOURCEMAP_RELEASES_KEPT, } from "@wizeworks/lens-core";
3
+ // Uploaded source maps, per project ("" without one), release, and generated file. Maps are kept gzipped.
4
+ export const SOURCEMAPS_SCHEMA = `
5
+ CREATE TABLE IF NOT EXISTS sourcemaps (
6
+ project TEXT NOT NULL, release TEXT NOT NULL, file TEXT NOT NULL, map BLOB NOT NULL, bytes INTEGER NOT NULL,
7
+ uploaded_ms REAL NOT NULL, PRIMARY KEY (project, release, file)
8
+ );
9
+ CREATE INDEX IF NOT EXISTS ix_sourcemaps_release ON sourcemaps(project, uploaded_ms);
10
+ `;
11
+ /** Save one map (replacing the same release and file), then drop the oldest releases past the kept count. */
12
+ export function saveSourceMap(db, project, release, file, map, now) {
13
+ db.prepare("INSERT OR REPLACE INTO sourcemaps (project, release, file, map, bytes, uploaded_ms) VALUES (?, ?, ?, ?, ?, ?)").run(project, release, file, gzipSync(map), Buffer.byteLength(map), now);
14
+ db.prepare(`DELETE FROM sourcemaps WHERE project = ? AND release NOT IN (
15
+ SELECT release FROM sourcemaps WHERE project = ? GROUP BY release ORDER BY max(uploaded_ms) DESC, max(rowid) DESC LIMIT ?)`).run(project, project, SOURCEMAP_RELEASES_KEPT);
16
+ }
17
+ /** The maps of a project, newest first; only one release when given. */
18
+ export function listSourceMaps(db, project, release) {
19
+ const sql = `SELECT release, file, bytes, uploaded_ms AS uploadedMs FROM sourcemaps WHERE project = ?${release ? " AND release = ?" : ""} ORDER BY uploaded_ms DESC LIMIT 1000`;
20
+ return db.prepare(sql).all(...(release ? [project, release] : [project]));
21
+ }
22
+ function readMap(db, project, release, url) {
23
+ const files = mapFileCandidates(url);
24
+ if (files.length === 0)
25
+ return null;
26
+ const sql = `SELECT map FROM sourcemaps WHERE project IN (?, '') AND release = ? AND file IN (${files.map(() => "?").join(", ")})
27
+ ORDER BY project DESC, length(file) DESC LIMIT 1`;
28
+ const row = db.prepare(sql).get(project, release, ...files);
29
+ return row ? gunzipSync(row.map, { maxOutputLength: MAX_SOURCEMAP_BYTES }).toString("utf8") : null;
30
+ }
31
+ /** Uploaded maps for one project (and maps uploaded with no project). Needs the release the browser sent. */
32
+ export function uploadedMapLoader(db, project) {
33
+ const load = async (url, release) => {
34
+ if (!release)
35
+ return null;
36
+ const text = readMap(db, project, release, url);
37
+ return text ? parseSourceMap(text) : null;
38
+ };
39
+ return cachedLoader(load, { max: 20, missMs: 5000 });
40
+ }
41
+ //# sourceMappingURL=sourcemaps.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sourcemaps.js","sourceRoot":"","sources":["../src/sourcemaps.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACjD,OAAO,EACL,YAAY,EAEZ,iBAAiB,EACjB,mBAAmB,EACnB,cAAc,EACd,uBAAuB,GAExB,MAAM,sBAAsB,CAAC;AAE9B,0GAA0G;AAC1G,MAAM,CAAC,MAAM,iBAAiB,GAAG;;;;;;CAMhC,CAAC;AAEF,6GAA6G;AAC7G,MAAM,UAAU,aAAa,CAAC,EAAgB,EAAE,OAAe,EAAE,OAAe,EAAE,IAAY,EAAE,GAAW,EAAE,GAAW;IACtH,EAAE,CAAC,OAAO,CAAC,+GAA+G,CAAC,CAAC,GAAG,CAC7H,OAAO,EACP,OAAO,EACP,IAAI,EACJ,QAAQ,CAAC,GAAG,CAAC,EACb,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,EACtB,GAAG,CACJ,CAAC;IACF,EAAE,CAAC,OAAO,CACR;iIAC6H,CAC9H,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,uBAAuB,CAAC,CAAC;AACnD,CAAC;AAED,wEAAwE;AACxE,MAAM,UAAU,cAAc,CAAC,EAAgB,EAAE,OAAe,EAAE,OAAgB;IAChF,MAAM,GAAG,GAAG,2FAA2F,OAAO,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE,uCAAuC,CAAC;IAChL,OAAO,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAgC,CAAC;AAC3G,CAAC;AAED,SAAS,OAAO,CAAC,EAAgB,EAAE,OAAe,EAAE,OAAe,EAAE,GAAW;IAC9E,MAAM,KAAK,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC;IACrC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACpC,MAAM,GAAG,GAAG,oFAAoF,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;qDAC5E,CAAC;IACpD,MAAM,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,KAAK,CAAoC,CAAC;IAC/F,OAAO,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,eAAe,EAAE,mBAAmB,EAAE,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACrG,CAAC;AAED,6GAA6G;AAC7G,MAAM,UAAU,iBAAiB,CAAC,EAAgB,EAAE,OAAe;IACjE,MAAM,IAAI,GAAc,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE;QAC7C,IAAI,CAAC,OAAO;YAAE,OAAO,IAAI,CAAC;QAC1B,MAAM,IAAI,GAAG,OAAO,CAAC,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;QAChD,OAAO,IAAI,CAAC,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC5C,CAAC,CAAC;IACF,OAAO,YAAY,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;AACvD,CAAC"}
@@ -9,6 +9,8 @@ export interface TraceQuery {
9
9
  project?: string;
10
10
  /** Only traces with a browser span from this tab. */
11
11
  session?: string;
12
+ /** Leave out loose batches (lines outside a request), which are not traces to list. */
13
+ noLoose?: boolean;
12
14
  limit: number;
13
15
  }
14
16
  /** Trace ids that match, newest first. */
@@ -1 +1 @@
1
- {"version":3,"file":"store-read.d.ts","sourceRoot":"","sources":["../src/store-read.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAiB,MAAM,aAAa,CAAC;AAC/D,OAAO,EAA6C,KAAK,UAAU,EAA6B,KAAK,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAEzI,MAAM,WAAW,UAAU;IACzB,4EAA4E;IAC5E,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,kEAAkE;IAClE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,qDAAqD;IACrD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;CACf;AAID,0CAA0C;AAC1C,wBAAgB,YAAY,CAAC,EAAE,EAAE,YAAY,EAAE,CAAC,EAAE,UAAU,GAAG,MAAM,EAAE,CAWtE;AAgBD,gGAAgG;AAChG,wBAAgB,UAAU,CAAC,EAAE,EAAE,YAAY,EAAE,GAAG,EAAE,SAAS,MAAM,EAAE,EAAE,UAAU,GAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAoB,GAAG,KAAK,EAAE,CAUpI;AAED,wBAAgB,cAAc,CAAC,EAAE,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,GAAG,KAAK,GAAG,SAAS,CAG/H;AASD,sDAAsD;AACtD,wBAAgB,YAAY,CAAC,EAAE,EAAE,YAAY,EAAE,GAAG,EAAE,MAAM,GAAG,UAAU,EAAE,CASxE;AAED,sEAAsE;AACtE,wBAAgB,UAAU,CAAC,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,KAAK,GAAG,SAAS,GAAG,MAAM,EAAE,CAI/E;AAED,wBAAgB,SAAS,CAAC,EAAE,EAAE,YAAY,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAG7E"}
1
+ {"version":3,"file":"store-read.d.ts","sourceRoot":"","sources":["../src/store-read.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAiB,MAAM,aAAa,CAAC;AAC/D,OAAO,EAAiE,KAAK,UAAU,EAA6B,KAAK,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAE7J,MAAM,WAAW,UAAU;IACzB,4EAA4E;IAC5E,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,kEAAkE;IAClE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,qDAAqD;IACrD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,uFAAuF;IACvF,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;CACf;AAID,0CAA0C;AAC1C,wBAAgB,YAAY,CAAC,EAAE,EAAE,YAAY,EAAE,CAAC,EAAE,UAAU,GAAG,MAAM,EAAE,CAYtE;AAgBD,gGAAgG;AAChG,wBAAgB,UAAU,CAAC,EAAE,EAAE,YAAY,EAAE,GAAG,EAAE,SAAS,MAAM,EAAE,EAAE,UAAU,GAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAoB,GAAG,KAAK,EAAE,CAUpI;AAED,wBAAgB,cAAc,CAAC,EAAE,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,GAAG,KAAK,GAAG,SAAS,CAG/H;AASD,sDAAsD;AACtD,wBAAgB,YAAY,CAAC,EAAE,EAAE,YAAY,EAAE,GAAG,EAAE,MAAM,GAAG,UAAU,EAAE,CASxE;AAED,sEAAsE;AACtE,wBAAgB,UAAU,CAAC,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,KAAK,GAAG,SAAS,GAAG,MAAM,EAAE,CAI/E;AAED,wBAAgB,SAAS,CAAC,EAAE,EAAE,YAAY,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAG7E"}
@@ -1,4 +1,4 @@
1
- import { buildTrace, HUB_ONLINE_MS } from "@wizeworks/lens-core";
1
+ import { buildTrace, HUB_ONLINE_MS, LOOSE_TRACE_PREFIX } from "@wizeworks/lens-core";
2
2
  const CHUNK = 400;
3
3
  /** Trace ids that match, newest first. */
4
4
  export function findTraceIds(db, q) {
@@ -15,6 +15,8 @@ export function findTraceIds(db, q) {
15
15
  add("project = ?", q.project);
16
16
  if (q.session)
17
17
  add("trace_id IN (SELECT trace_id FROM spans WHERE session = ?)", q.session);
18
+ if (q.noLoose)
19
+ add("substr(trace_id, 1, 16) <> ?", LOOSE_TRACE_PREFIX);
18
20
  const sql = `SELECT trace_id FROM traces ${where.length ? `WHERE ${where.join(" AND ")}` : ""} ORDER BY start_ms DESC LIMIT ?`;
19
21
  return db.prepare(sql).all(...args, q.limit).map((r) => r.trace_id);
20
22
  }
@@ -1 +1 @@
1
- {"version":3,"file":"store-read.js","sourceRoot":"","sources":["../src/store-read.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"store-read.js","sourceRoot":"","sources":["../src/store-read.ts"],"names":[],"mappings":"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"}
package/dist/store.d.ts CHANGED
@@ -9,12 +9,18 @@ export interface HubStoreOptions {
9
9
  maxAgeMs?: number;
10
10
  /** Most metric points kept. Default 2,000,000. */
11
11
  maxMetricPoints?: number;
12
+ /** Oldest log line kept, in ms. Default: `maxAgeMs`. Lines outside a request go at this age; lines in a request go with their trace when that is sooner. */
13
+ logMaxAgeMs?: number;
14
+ /** Thresholds and redacted keys for projects that set none. */
15
+ slowQueryMs?: number;
16
+ nPlusOneThreshold?: number;
17
+ redactKeys?: readonly string[];
12
18
  now?: () => number;
13
19
  }
14
20
  /** What one write holds. Spans and logs are already checked and redacted. */
15
21
  export interface HubWrite {
16
22
  sender: HubSender;
17
- via: "addon" | "otlp";
23
+ via: "addon" | "otlp" | "uptime";
18
24
  spans: readonly Span[];
19
25
  logs: readonly HubLog[];
20
26
  remotes: readonly HubRemote[];
@@ -28,14 +34,18 @@ export declare class HubStore {
28
34
  readonly maxTraces: number;
29
35
  readonly maxAgeMs: number;
30
36
  readonly maxMetricPoints: number;
37
+ readonly logMaxAgeMs: number;
38
+ readonly slowQueryMs: number;
39
+ readonly nPlusOneThreshold: number;
40
+ readonly redactKeys: readonly string[];
31
41
  readonly path: string;
32
42
  readonly now: () => number;
33
43
  /** Goes up whenever stats change (settle or prune), for cache keys. */
34
44
  settleGen: number;
35
45
  constructor(o: HubStoreOptions);
36
- /** Save one batch in one transaction. */
46
+ /** Save one batch in one transaction, with the project's extra keys hidden too. */
37
47
  write(w: HubWrite): void;
38
- /** Drop traces past the age or count limit, and services not seen for as long. Returns traces dropped. */
48
+ /** Drop traces past the age or count limit, log lines past the log age, and services not seen for as long. Returns traces dropped. */
39
49
  prune(): number;
40
50
  close(): void;
41
51
  }
@@ -1 +1 @@
1
- {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAwB,KAAK,MAAM,EAAE,KAAK,SAAS,EAAE,KAAK,SAAS,EAAU,KAAK,WAAW,EAAe,KAAK,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAM3J,MAAM,WAAW,eAAe;IAC9B,kCAAkC;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,uCAAuC;IACvC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,mEAAmE;IACnE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,kDAAkD;IAClD,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CACpB;AAED,6EAA6E;AAC7E,MAAM,WAAW,QAAQ;IACvB,MAAM,EAAE,SAAS,CAAC;IAClB,GAAG,EAAE,OAAO,GAAG,MAAM,CAAC;IACtB,KAAK,EAAE,SAAS,IAAI,EAAE,CAAC;IACvB,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;IACxB,OAAO,EAAE,SAAS,SAAS,EAAE,CAAC;IAC9B,8EAA8E;IAC9E,OAAO,CAAC,EAAE,SAAS,WAAW,EAAE,CAAC;CAClC;AASD,wGAAwG;AACxG,qBAAa,QAAQ;;IACnB,QAAQ,CAAC,EAAE,EAAE,YAAY,CAAC;IAC1B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,GAAG,EAAE,MAAM,MAAM,CAAC;IAE3B,uEAAuE;IACvE,SAAS,SAAK;IAEd,YAAY,CAAC,EAAE,eAAe,EAW7B;IAED,yCAAyC;IACzC,KAAK,CAAC,CAAC,EAAE,QAAQ,GAAG,IAAI,CASvB;IA0BD,0GAA0G;IAC1G,KAAK,IAAI,MAAM,CAuBd;IAUD,KAAK,IAAI,IAAI,CAMZ;CACF"}
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAkF,KAAK,MAAM,EAAgC,KAAK,SAAS,EAAE,KAAK,SAAS,EAAU,KAAK,WAAW,EAAe,KAAK,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAQnP,MAAM,WAAW,eAAe;IAC9B,kCAAkC;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,uCAAuC;IACvC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,mEAAmE;IACnE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,kDAAkD;IAClD,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,4JAA4J;IAC5J,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,+DAA+D;IAC/D,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,UAAU,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC/B,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CACpB;AAED,6EAA6E;AAC7E,MAAM,WAAW,QAAQ;IACvB,MAAM,EAAE,SAAS,CAAC;IAClB,GAAG,EAAE,OAAO,GAAG,MAAM,GAAG,QAAQ,CAAC;IACjC,KAAK,EAAE,SAAS,IAAI,EAAE,CAAC;IACvB,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;IACxB,OAAO,EAAE,SAAS,SAAS,EAAE,CAAC;IAC9B,8EAA8E;IAC9E,OAAO,CAAC,EAAE,SAAS,WAAW,EAAE,CAAC;CAClC;AASD,wGAAwG;AACxG,qBAAa,QAAQ;;IACnB,QAAQ,CAAC,EAAE,EAAE,YAAY,CAAC;IAC1B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;IACvC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,GAAG,EAAE,MAAM,MAAM,CAAC;IAE3B,uEAAuE;IACvE,SAAS,SAAK;IAEd,YAAY,CAAC,EAAE,eAAe,EAe7B;IAED,mFAAmF;IACnF,KAAK,CAAC,CAAC,EAAE,QAAQ,GAAG,IAAI,CAUvB;IAwCD,sIAAsI;IACtI,KAAK,IAAI,MAAM,CAsBd;IAUD,KAAK,IAAI,IAAI,CAMZ;CACF"}
package/dist/store.js CHANGED
@@ -2,11 +2,13 @@ import { createHash } from "node:crypto";
2
2
  import { mkdirSync } from "node:fs";
3
3
  import { dirname } from "node:path";
4
4
  import { DatabaseSync } from "node:sqlite";
5
- import { ATTR_BROWSER_SESSION, logKey, seriesKeyOf } from "@wizeworks/lens-core";
5
+ import { ATTR_BROWSER_SESSION, DEFAULT_REDACT_KEYS, FACT_N_PLUS_ONE, FACT_SLOW_QUERY_MS, INFRA_SERVICE, redactSignals, logKey, seriesKeyOf } from "@wizeworks/lens-core";
6
6
  import { prepareHubStatements } from "./schema.js";
7
7
  import { upgradeHubSchema } from "./schema-scale.js";
8
8
  import { pruneStats } from "./settle.js";
9
9
  import { pruneMetricRollups, writeMetricRollups } from "./metrics-write.js";
10
+ import { projectSettings } from "./settings.js";
11
+ import { pruneProjectRows, shorterKeeps } from "./settings-prune.js";
10
12
  const DAY_MS = 24 * 60 * 60_000;
11
13
  const hashKey = (text) => createHash("sha1").update(text).digest("hex");
12
14
  const sessionOf = (s) => {
@@ -19,6 +21,10 @@ export class HubStore {
19
21
  maxTraces;
20
22
  maxAgeMs;
21
23
  maxMetricPoints;
24
+ logMaxAgeMs;
25
+ slowQueryMs;
26
+ nPlusOneThreshold;
27
+ redactKeys;
22
28
  path;
23
29
  now;
24
30
  #stmts;
@@ -29,6 +35,10 @@ export class HubStore {
29
35
  this.maxTraces = Math.max(1, o.maxTraces ?? 50_000);
30
36
  this.maxAgeMs = Math.max(60_000, o.maxAgeMs ?? 7 * DAY_MS);
31
37
  this.maxMetricPoints = Math.max(1, o.maxMetricPoints ?? 2_000_000);
38
+ this.logMaxAgeMs = Math.max(60_000, o.logMaxAgeMs ?? this.maxAgeMs);
39
+ this.slowQueryMs = o.slowQueryMs ?? FACT_SLOW_QUERY_MS;
40
+ this.nPlusOneThreshold = o.nPlusOneThreshold ?? FACT_N_PLUS_ONE;
41
+ this.redactKeys = o.redactKeys ?? DEFAULT_REDACT_KEYS;
32
42
  this.now = o.now ?? Date.now;
33
43
  if (o.path !== ":memory:")
34
44
  mkdirSync(dirname(o.path), { recursive: true });
@@ -37,11 +47,12 @@ export class HubStore {
37
47
  upgradeHubSchema(this.db);
38
48
  this.#stmts = prepareHubStatements(this.db);
39
49
  }
40
- /** Save one batch in one transaction. */
50
+ /** Save one batch in one transaction, with the project's extra keys hidden too. */
41
51
  write(w) {
52
+ const own = projectSettings(this.db, w.sender.project ?? "").redactKeys;
42
53
  this.db.exec("BEGIN");
43
54
  try {
44
- this.#writeAll(w);
55
+ this.#writeAll(redactSignals(w, own));
45
56
  this.db.exec("COMMIT");
46
57
  }
47
58
  catch (err) {
@@ -54,7 +65,9 @@ export class HubStore {
54
65
  const env = w.sender.environment ?? "";
55
66
  const project = w.sender.project ?? "";
56
67
  const st = this.#stmts;
57
- this.#touchService(w.sender, w.via, now);
68
+ // The collector's host and Kubernetes receivers are not a service.
69
+ if (w.sender.service !== INFRA_SERVICE)
70
+ this.#touchService(w.sender, w.via, now);
58
71
  for (const s of w.spans) {
59
72
  st.upsertTrace.run(s.traceId, s.startMs, s.startMs + s.durationMs, now, env, project);
60
73
  st.upsertSpan.run(s.traceId, s.spanId, s.service, s.startMs, s.durationMs, sessionOf(s), JSON.stringify(s));
@@ -73,13 +86,22 @@ export class HubStore {
73
86
  const s = sender;
74
87
  this.#stmts.upsertService.run(s.project ?? "", s.service, s.environment ?? "", s.host ?? "", via, JSON.stringify(sender), now, now);
75
88
  }
76
- /** Drop traces past the age or count limit, and services not seen for as long. Returns traces dropped. */
89
+ /** Traces past the age or count limit, loose batches (lines outside a request) past the log age, and traces of projects that keep less. */
90
+ #doomed(cutoff, logCutoff, shorter) {
91
+ const loose = "substr(trace_id, 1, 16) = '0000000000000000'";
92
+ const own = shorter.map(() => " UNION SELECT trace_id FROM traces WHERE project = ? AND start_ms < ?").join("");
93
+ return this.db
94
+ .prepare(`SELECT trace_id, project, env, contrib FROM traces WHERE trace_id IN (SELECT trace_id FROM traces WHERE start_ms < ? AND NOT ${loose}
95
+ UNION SELECT trace_id FROM traces WHERE start_ms < ? AND ${loose}${own}
96
+ UNION SELECT trace_id FROM (SELECT trace_id FROM traces WHERE NOT ${loose} ORDER BY start_ms DESC LIMIT -1 OFFSET ?))`)
97
+ .all(cutoff, logCutoff, ...shorter.flatMap((x) => [x.project, this.now() - x.keepMs]), this.maxTraces);
98
+ }
99
+ /** Drop traces past the age or count limit, log lines past the log age, and services not seen for as long. Returns traces dropped. */
77
100
  prune() {
78
101
  const cutoff = this.now() - this.maxAgeMs;
79
- const doomed = this.db
80
- .prepare(`SELECT trace_id, project, env, contrib FROM traces WHERE trace_id IN (SELECT trace_id FROM traces WHERE start_ms < ?
81
- UNION SELECT trace_id FROM (SELECT trace_id FROM traces ORDER BY start_ms DESC LIMIT -1 OFFSET ?))`)
82
- .all(cutoff, this.maxTraces);
102
+ const logCutoff = this.now() - this.logMaxAgeMs;
103
+ const shorter = shorterKeeps(this);
104
+ const doomed = this.#doomed(cutoff, logCutoff, shorter);
83
105
  this.db.exec("BEGIN");
84
106
  try {
85
107
  pruneStats(this, doomed);
@@ -88,8 +110,11 @@ export class HubStore {
88
110
  for (const r of doomed)
89
111
  del.run(r.trace_id);
90
112
  }
91
- this.db.prepare("DELETE FROM services WHERE last_seen < ?").run(cutoff);
113
+ this.db.prepare("DELETE FROM logs WHERE time_ms < ?").run(logCutoff);
114
+ this.db.prepare("DELETE FROM services WHERE last_seen < ?").run(Math.min(cutoff, logCutoff));
92
115
  this.#pruneMetrics(cutoff);
116
+ for (const s of shorter)
117
+ pruneProjectRows(this.db, s.project, this.now(), s.keepMs);
93
118
  this.db.exec("COMMIT");
94
119
  }
95
120
  catch (err) {
package/dist/store.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"store.js","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { IncomingMessage, ServerResponse } from "node:http";
2
+ import type { ApiContext } from "./api.js";
3
+ /** `api/tags`, `api/tags/match`, and `api/tags/{id}`. False when `sub` is not a tags path. */
4
+ export declare function handleTags(c: ApiContext, sub: string, req: IncomingMessage, res: ServerResponse, url: URL): Promise<boolean>;
5
+ //# sourceMappingURL=tags-api.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tags-api.d.ts","sourceRoot":"","sources":["../src/tags-api.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAGjE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AA6E3C,8FAA8F;AAC9F,wBAAsB,UAAU,CAAC,CAAC,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,eAAe,EAAE,GAAG,EAAE,cAAc,EAAE,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,CAIlI"}
@@ -0,0 +1,94 @@
1
+ import { activeTags, BUILT_IN_PREFIX, checkTagInput, matchTags, searchSql, SQLITE_DIALECT, TAG_LIMITS, tagMatchRequestOf } from "@wizeworks/lens-core";
2
+ import { sendJson } from "@wizeworks/lens-node/kit";
3
+ import { parseJson, readBody } from "./body.js";
4
+ import { sqliteRunner } from "./scale-exec.js";
5
+ import { createTag, deleteTag, hubTags, setBuiltIn, updateTag } from "./tags.js";
6
+ // The hub's tags API (docs/TAGS-PLAN.md). Changes come only from the hub's own pages (or a tool with no Origin), never another site.
7
+ /** True when a browser sent this from the hub's own origin, or no browser sent it. */
8
+ function sameOrigin(req) {
9
+ const origin = req.headers.origin;
10
+ if (!origin)
11
+ return true;
12
+ try {
13
+ return new URL(origin).host === req.headers.host;
14
+ }
15
+ catch {
16
+ return false;
17
+ }
18
+ }
19
+ async function bodyOf(req) {
20
+ try {
21
+ const b = parseJson(await readBody(req));
22
+ return b && typeof b === "object" ? b : {};
23
+ }
24
+ catch {
25
+ return {};
26
+ }
27
+ }
28
+ async function create(c, req, res) {
29
+ const db = c.data.store.db;
30
+ const own = hubTags(db).filter((t) => !t.builtIn);
31
+ if (own.length >= TAG_LIMITS.rules)
32
+ return sendJson(res, 400, { error: `The hub holds up to ${TAG_LIMITS.rules} tags. Delete one first.` });
33
+ const r = checkTagInput(await bodyOf(req), own.map((t) => t.name));
34
+ if (!r.ok)
35
+ return sendJson(res, 400, r);
36
+ sendJson(res, 201, createTag(db, r.input, c.o.now()));
37
+ }
38
+ /** A rule takes name, color, and query (what is left out stays); a built-in takes only `enabled`. */
39
+ async function change(c, id, req, res) {
40
+ const db = c.data.store.db;
41
+ const body = await bodyOf(req);
42
+ if (id.startsWith(BUILT_IN_PREFIX)) {
43
+ if (typeof body.enabled !== "boolean")
44
+ return sendJson(res, 400, { error: "A built-in tag can only be turned on or off: send { enabled }." });
45
+ return setBuiltIn(db, id, body.enabled) ? sendJson(res, 200, hubTags(db).find((t) => t.id === id)) : sendJson(res, 404, { error: "Tag not found." });
46
+ }
47
+ const tags = hubTags(db);
48
+ const current = tags.find((t) => t.id === id && !t.builtIn);
49
+ if (!current)
50
+ return sendJson(res, 404, { error: "Tag not found." });
51
+ const r = checkTagInput({ ...current, ...body }, tags.filter((t) => !t.builtIn && t.id !== id).map((t) => t.name));
52
+ if (!r.ok)
53
+ return sendJson(res, 400, r);
54
+ updateTag(db, id, r.input, c.o.now());
55
+ sendJson(res, 200, { ...current, ...r.input });
56
+ }
57
+ async function match(c, req, res, p) {
58
+ const r = tagMatchRequestOf(await bodyOf(req));
59
+ if (!r.ok)
60
+ return sendJson(res, 400, r);
61
+ const src = { d: SQLITE_DIALECT, run: sqliteRunner(c.data.store.db), scope: { project: p.get("project") || undefined } };
62
+ sendJson(res, 200, { matches: await matchTags((q) => searchSql(src, q), r.kind, r.items, activeTags(hubTags(c.data.store.db)), p.get("env") || undefined) });
63
+ }
64
+ function remove(c, id, res) {
65
+ if (deleteTag(c.data.store.db, id))
66
+ sendJson(res, 200, { ok: true });
67
+ else
68
+ sendJson(res, 404, { error: "Tag not found." });
69
+ }
70
+ async function routeTags(c, sub, req, res, url) {
71
+ const method = req.method ?? "GET";
72
+ if (sub === "api/tags" && method === "GET")
73
+ return sendJson(res, 200, { tags: hubTags(c.data.store.db), editable: true, max: TAG_LIMITS.rules });
74
+ if (sub === "api/tags/match" && method === "POST")
75
+ return match(c, req, res, url.searchParams);
76
+ if (!sameOrigin(req))
77
+ return sendJson(res, 403, { error: "Change tags from the hub's own dashboard." });
78
+ const id = decodeURIComponent(sub.slice("api/tags/".length));
79
+ if (sub === "api/tags" && method === "POST")
80
+ return create(c, req, res);
81
+ if (id && method === "PATCH")
82
+ return change(c, id, req, res);
83
+ if (id && method === "DELETE")
84
+ return remove(c, id, res);
85
+ sendJson(res, 405, { error: "method not allowed" });
86
+ }
87
+ /** `api/tags`, `api/tags/match`, and `api/tags/{id}`. False when `sub` is not a tags path. */
88
+ export async function handleTags(c, sub, req, res, url) {
89
+ if (sub !== "api/tags" && !sub.startsWith("api/tags/"))
90
+ return false;
91
+ await routeTags(c, sub, req, res, url);
92
+ return true;
93
+ }
94
+ //# sourceMappingURL=tags-api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tags-api.js","sourceRoot":"","sources":["../src/tags-api.ts"],"names":[],"mappings":"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"}
package/dist/tags.d.ts ADDED
@@ -0,0 +1,11 @@
1
+ import type { DatabaseSync } from "node:sqlite";
2
+ import { type TagInput, type TagRule } from "@wizeworks/lens-core";
3
+ /** Built-ins first (minus those turned off), then the hub's rules by name. */
4
+ export declare function hubTags(db: DatabaseSync): TagRule[];
5
+ export declare function createTag(db: DatabaseSync, input: TagInput, now: number): TagRule;
6
+ /** Change a rule; false when there is none with this id. */
7
+ export declare function updateTag(db: DatabaseSync, id: string, input: TagInput, now: number): boolean;
8
+ export declare function deleteTag(db: DatabaseSync, id: string): boolean;
9
+ /** Turn a built-in on or off; false when `id` is not a built-in. */
10
+ export declare function setBuiltIn(db: DatabaseSync, id: string, enabled: boolean): boolean;
11
+ //# sourceMappingURL=tags.d.ts.map