@wizeworks/lens-cloud 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 (597) hide show
  1. package/README.md +4 -0
  2. package/dist/alerts/evaluate.d.ts +6 -5
  3. package/dist/alerts/evaluate.d.ts.map +1 -1
  4. package/dist/alerts/evaluate.js +60 -28
  5. package/dist/alerts/evaluate.js.map +1 -1
  6. package/dist/alerts/problem-link.d.ts +12 -0
  7. package/dist/alerts/problem-link.d.ts.map +1 -0
  8. package/dist/alerts/problem-link.js +31 -0
  9. package/dist/alerts/problem-link.js.map +1 -0
  10. package/dist/app.d.ts +15 -0
  11. package/dist/app.d.ts.map +1 -1
  12. package/dist/auth/auth.d.ts +8 -2
  13. package/dist/auth/auth.d.ts.map +1 -1
  14. package/dist/auth/auth.js +25 -2
  15. package/dist/auth/auth.js.map +1 -1
  16. package/dist/auth/billing-hooks.d.ts +9 -0
  17. package/dist/auth/billing-hooks.d.ts.map +1 -0
  18. package/dist/auth/billing-hooks.js +49 -0
  19. package/dist/auth/billing-hooks.js.map +1 -0
  20. package/dist/auth/bridge.js +2 -2
  21. package/dist/auth/bridge.js.map +1 -1
  22. package/dist/auth/crypto.d.ts +2 -0
  23. package/dist/auth/crypto.d.ts.map +1 -1
  24. package/dist/auth/crypto.js +2 -2
  25. package/dist/auth/crypto.js.map +1 -1
  26. package/dist/auth/deps.d.ts +7 -0
  27. package/dist/auth/deps.d.ts.map +1 -1
  28. package/dist/auth/deps.js.map +1 -1
  29. package/dist/auth/hooks.d.ts.map +1 -1
  30. package/dist/auth/hooks.js +8 -1
  31. package/dist/auth/hooks.js.map +1 -1
  32. package/dist/auth/join-scope.d.ts +7 -0
  33. package/dist/auth/join-scope.d.ts.map +1 -0
  34. package/dist/auth/join-scope.js +21 -0
  35. package/dist/auth/join-scope.js.map +1 -0
  36. package/dist/auth/oauth-access.d.ts +8 -0
  37. package/dist/auth/oauth-access.d.ts.map +1 -0
  38. package/dist/auth/oauth-access.js +31 -0
  39. package/dist/auth/oauth-access.js.map +1 -0
  40. package/dist/auth/oauth-grant.d.ts +5 -0
  41. package/dist/auth/oauth-grant.d.ts.map +1 -0
  42. package/dist/auth/oauth-grant.js +79 -0
  43. package/dist/auth/oauth-grant.js.map +1 -0
  44. package/dist/auth/oauth-names.d.ts +104 -0
  45. package/dist/auth/oauth-names.d.ts.map +1 -0
  46. package/dist/auth/oauth-names.js +72 -0
  47. package/dist/auth/oauth-names.js.map +1 -0
  48. package/dist/auth/oauth.d.ts +17 -0
  49. package/dist/auth/oauth.d.ts.map +1 -0
  50. package/dist/auth/oauth.js +47 -0
  51. package/dist/auth/oauth.js.map +1 -0
  52. package/dist/auth/options.d.ts.map +1 -1
  53. package/dist/auth/options.js +2 -0
  54. package/dist/auth/options.js.map +1 -1
  55. package/dist/auth/plugins.d.ts.map +1 -1
  56. package/dist/auth/plugins.js +15 -1
  57. package/dist/auth/plugins.js.map +1 -1
  58. package/dist/auth/principal.d.ts +10 -1
  59. package/dist/auth/principal.d.ts.map +1 -1
  60. package/dist/auth/principal.js +8 -7
  61. package/dist/auth/principal.js.map +1 -1
  62. package/dist/auth/roles.d.ts +5 -2
  63. package/dist/auth/roles.d.ts.map +1 -1
  64. package/dist/auth/roles.js +1 -0
  65. package/dist/auth/roles.js.map +1 -1
  66. package/dist/auth/schema-names.d.ts +33 -0
  67. package/dist/auth/schema-names.d.ts.map +1 -1
  68. package/dist/auth/schema-names.js +23 -0
  69. package/dist/auth/schema-names.js.map +1 -1
  70. package/dist/auth/scim.d.ts +6 -0
  71. package/dist/auth/scim.d.ts.map +1 -0
  72. package/dist/auth/scim.js +56 -0
  73. package/dist/auth/scim.js.map +1 -0
  74. package/dist/auth/signup.d.ts.map +1 -1
  75. package/dist/auth/signup.js +5 -2
  76. package/dist/auth/signup.js.map +1 -1
  77. package/dist/auth/wire.d.ts +2 -1
  78. package/dist/auth/wire.d.ts.map +1 -1
  79. package/dist/auth/wire.js +4 -1
  80. package/dist/auth/wire.js.map +1 -1
  81. package/dist/billing/cli.d.ts +6 -0
  82. package/dist/billing/cli.d.ts.map +1 -0
  83. package/dist/billing/cli.js +54 -0
  84. package/dist/billing/cli.js.map +1 -0
  85. package/dist/billing/gate.d.ts +13 -0
  86. package/dist/billing/gate.d.ts.map +1 -0
  87. package/dist/billing/gate.js +27 -0
  88. package/dist/billing/gate.js.map +1 -0
  89. package/dist/billing/limits.d.ts +29 -0
  90. package/dist/billing/limits.d.ts.map +1 -0
  91. package/dist/billing/limits.js +69 -0
  92. package/dist/billing/limits.js.map +1 -0
  93. package/dist/billing/notices.d.ts +4 -0
  94. package/dist/billing/notices.d.ts.map +1 -0
  95. package/dist/billing/notices.js +40 -0
  96. package/dist/billing/notices.js.map +1 -0
  97. package/dist/billing/options.d.ts +37 -0
  98. package/dist/billing/options.d.ts.map +1 -0
  99. package/dist/billing/options.js +33 -0
  100. package/dist/billing/options.js.map +1 -0
  101. package/dist/billing/plans.d.ts +50 -0
  102. package/dist/billing/plans.d.ts.map +1 -0
  103. package/dist/billing/plans.js +47 -0
  104. package/dist/billing/plans.js.map +1 -0
  105. package/dist/billing/report.d.ts +26 -0
  106. package/dist/billing/report.d.ts.map +1 -0
  107. package/dist/billing/report.js +53 -0
  108. package/dist/billing/report.js.map +1 -0
  109. package/dist/billing/service.d.ts +20 -0
  110. package/dist/billing/service.d.ts.map +1 -0
  111. package/dist/billing/service.js +29 -0
  112. package/dist/billing/service.js.map +1 -0
  113. package/dist/billing/stripe-plugin.d.ts +14 -0
  114. package/dist/billing/stripe-plugin.d.ts.map +1 -0
  115. package/dist/billing/stripe-plugin.js +39 -0
  116. package/dist/billing/stripe-plugin.js.map +1 -0
  117. package/dist/billing/stripe-setup.d.ts +15 -0
  118. package/dist/billing/stripe-setup.d.ts.map +1 -0
  119. package/dist/billing/stripe-setup.js +73 -0
  120. package/dist/billing/stripe-setup.js.map +1 -0
  121. package/dist/billing/summary.d.ts +59 -0
  122. package/dist/billing/summary.d.ts.map +1 -0
  123. package/dist/billing/summary.js +50 -0
  124. package/dist/billing/summary.js.map +1 -0
  125. package/dist/billing/sync.d.ts +5 -0
  126. package/dist/billing/sync.d.ts.map +1 -0
  127. package/dist/billing/sync.js +35 -0
  128. package/dist/billing/sync.js.map +1 -0
  129. package/dist/billing/usage-sub.d.ts +17 -0
  130. package/dist/billing/usage-sub.d.ts.map +1 -0
  131. package/dist/billing/usage-sub.js +47 -0
  132. package/dist/billing/usage-sub.js.map +1 -0
  133. package/dist/billing/usage.d.ts +28 -0
  134. package/dist/billing/usage.d.ts.map +1 -0
  135. package/dist/billing/usage.js +80 -0
  136. package/dist/billing/usage.js.map +1 -0
  137. package/dist/billing/webhook.d.ts +6 -0
  138. package/dist/billing/webhook.d.ts.map +1 -0
  139. package/dist/billing/webhook.js +41 -0
  140. package/dist/billing/webhook.js.map +1 -0
  141. package/dist/changes.d.ts +15 -0
  142. package/dist/changes.d.ts.map +1 -0
  143. package/dist/changes.js +45 -0
  144. package/dist/changes.js.map +1 -0
  145. package/dist/cli-args.d.ts +1 -1
  146. package/dist/cli-args.d.ts.map +1 -1
  147. package/dist/cli-args.js +44 -2
  148. package/dist/cli-args.js.map +1 -1
  149. package/dist/cli.js +10 -0
  150. package/dist/cli.js.map +1 -1
  151. package/dist/config.d.ts +19 -3
  152. package/dist/config.d.ts.map +1 -1
  153. package/dist/config.js +21 -1
  154. package/dist/config.js.map +1 -1
  155. package/dist/copy-cli.d.ts +3 -0
  156. package/dist/copy-cli.d.ts.map +1 -0
  157. package/dist/copy-cli.js +24 -0
  158. package/dist/copy-cli.js.map +1 -0
  159. package/dist/db/db.d.ts +2 -0
  160. package/dist/db/db.d.ts.map +1 -1
  161. package/dist/db/db.js +15 -4
  162. package/dist/db/db.js.map +1 -1
  163. package/dist/db/schema-alerts.d.ts +2 -0
  164. package/dist/db/schema-alerts.d.ts.map +1 -0
  165. package/dist/db/schema-alerts.js +15 -0
  166. package/dist/db/schema-alerts.js.map +1 -0
  167. package/dist/db/schema-billing.d.ts +2 -0
  168. package/dist/db/schema-billing.d.ts.map +1 -0
  169. package/dist/db/schema-billing.js +38 -0
  170. package/dist/db/schema-billing.js.map +1 -0
  171. package/dist/db/schema-issues.d.ts +2 -0
  172. package/dist/db/schema-issues.d.ts.map +1 -0
  173. package/dist/db/schema-issues.js +9 -0
  174. package/dist/db/schema-issues.js.map +1 -0
  175. package/dist/db/schema-logs.d.ts +2 -0
  176. package/dist/db/schema-logs.d.ts.map +1 -0
  177. package/dist/db/schema-logs.js +13 -0
  178. package/dist/db/schema-logs.js.map +1 -0
  179. package/dist/db/schema-oauth.d.ts +2 -0
  180. package/dist/db/schema-oauth.d.ts.map +1 -0
  181. package/dist/db/schema-oauth.js +69 -0
  182. package/dist/db/schema-oauth.js.map +1 -0
  183. package/dist/db/schema-saved-move.d.ts +2 -0
  184. package/dist/db/schema-saved-move.d.ts.map +1 -0
  185. package/dist/db/schema-saved-move.js +13 -0
  186. package/dist/db/schema-saved-move.js.map +1 -0
  187. package/dist/db/schema-saved.d.ts +2 -0
  188. package/dist/db/schema-saved.d.ts.map +1 -0
  189. package/dist/db/schema-saved.js +13 -0
  190. package/dist/db/schema-saved.js.map +1 -0
  191. package/dist/db/schema-scim.d.ts +2 -0
  192. package/dist/db/schema-scim.d.ts.map +1 -0
  193. package/dist/db/schema-scim.js +28 -0
  194. package/dist/db/schema-scim.js.map +1 -0
  195. package/dist/db/schema-search.d.ts +2 -0
  196. package/dist/db/schema-search.d.ts.map +1 -0
  197. package/dist/db/schema-search.js +16 -0
  198. package/dist/db/schema-search.js.map +1 -0
  199. package/dist/db/schema-slos.d.ts +2 -0
  200. package/dist/db/schema-slos.d.ts.map +1 -0
  201. package/dist/db/schema-slos.js +12 -0
  202. package/dist/db/schema-slos.js.map +1 -0
  203. package/dist/db/schema-sourcemaps.d.ts +2 -0
  204. package/dist/db/schema-sourcemaps.d.ts.map +1 -0
  205. package/dist/db/schema-sourcemaps.js +9 -0
  206. package/dist/db/schema-sourcemaps.js.map +1 -0
  207. package/dist/db/schema-tags.d.ts +2 -0
  208. package/dist/db/schema-tags.d.ts.map +1 -0
  209. package/dist/db/schema-tags.js +12 -0
  210. package/dist/db/schema-tags.js.map +1 -0
  211. package/dist/db/schema-team.d.ts +2 -0
  212. package/dist/db/schema-team.d.ts.map +1 -0
  213. package/dist/db/schema-team.js +15 -0
  214. package/dist/db/schema-team.js.map +1 -0
  215. package/dist/db/schema-uptime.d.ts +2 -0
  216. package/dist/db/schema-uptime.d.ts.map +1 -0
  217. package/dist/db/schema-uptime.js +22 -0
  218. package/dist/db/schema-uptime.js.map +1 -0
  219. package/dist/db/schema.d.ts.map +1 -1
  220. package/dist/db/schema.js +32 -0
  221. package/dist/db/schema.js.map +1 -1
  222. package/dist/db/trigram.d.ts +4 -0
  223. package/dist/db/trigram.d.ts.map +1 -0
  224. package/dist/db/trigram.js +34 -0
  225. package/dist/db/trigram.js.map +1 -0
  226. package/dist/http/http.d.ts +5 -1
  227. package/dist/http/http.d.ts.map +1 -1
  228. package/dist/http/http.js +5 -1
  229. package/dist/http/http.js.map +1 -1
  230. package/dist/jobs.d.ts +1 -1
  231. package/dist/jobs.d.ts.map +1 -1
  232. package/dist/jobs.js +23 -9
  233. package/dist/jobs.js.map +1 -1
  234. package/dist/mail/blocks.d.ts +1 -1
  235. package/dist/mail/blocks.js +2 -2
  236. package/dist/mail/blocks.js.map +1 -1
  237. package/dist/mail/emails-billing.d.ts +17 -0
  238. package/dist/mail/emails-billing.d.ts.map +1 -0
  239. package/dist/mail/emails-billing.js +36 -0
  240. package/dist/mail/emails-billing.js.map +1 -0
  241. package/dist/mail/emails.d.ts +1 -1
  242. package/dist/mail/emails.d.ts.map +1 -1
  243. package/dist/mail/emails.js +7 -4
  244. package/dist/mail/emails.js.map +1 -1
  245. package/dist/mail/layout.d.ts +1 -1
  246. package/dist/mail/layout.d.ts.map +1 -1
  247. package/dist/mail/layout.js +2 -2
  248. package/dist/mail/layout.js.map +1 -1
  249. package/dist/mail/mailer.d.ts +1 -1
  250. package/dist/mail/mailer.d.ts.map +1 -1
  251. package/dist/mail/mailer.js +4 -3
  252. package/dist/mail/mailer.js.map +1 -1
  253. package/dist/mail/resend.d.ts +2 -0
  254. package/dist/mail/resend.d.ts.map +1 -1
  255. package/dist/mail/resend.js +1 -1
  256. package/dist/mail/resend.js.map +1 -1
  257. package/dist/mail/samples.d.ts.map +1 -1
  258. package/dist/mail/samples.js +17 -0
  259. package/dist/mail/samples.js.map +1 -1
  260. package/dist/mail/templates.d.ts +1 -1
  261. package/dist/mail/templates.d.ts.map +1 -1
  262. package/dist/mail/theme.d.ts +7 -1
  263. package/dist/mail/theme.d.ts.map +1 -1
  264. package/dist/mail/theme.js +7 -1
  265. package/dist/mail/theme.js.map +1 -1
  266. package/dist/notify/digest-data.d.ts +2 -1
  267. package/dist/notify/digest-data.d.ts.map +1 -1
  268. package/dist/notify/digest-data.js +5 -11
  269. package/dist/notify/digest-data.js.map +1 -1
  270. package/dist/notify/digest.d.ts.map +1 -1
  271. package/dist/notify/digest.js +5 -2
  272. package/dist/notify/digest.js.map +1 -1
  273. package/dist/notify/health.d.ts.map +1 -1
  274. package/dist/notify/health.js +4 -5
  275. package/dist/notify/health.js.map +1 -1
  276. package/dist/notify/team-describe.d.ts.map +1 -1
  277. package/dist/notify/team-describe.js +14 -0
  278. package/dist/notify/team-describe.js.map +1 -1
  279. package/dist/repo/alert-events.d.ts +38 -0
  280. package/dist/repo/alert-events.d.ts.map +1 -0
  281. package/dist/repo/alert-events.js +29 -0
  282. package/dist/repo/alert-events.js.map +1 -0
  283. package/dist/repo/alerts.d.ts +14 -44
  284. package/dist/repo/alerts.d.ts.map +1 -1
  285. package/dist/repo/alerts.js +35 -13
  286. package/dist/repo/alerts.js.map +1 -1
  287. package/dist/repo/audit.d.ts +19 -1
  288. package/dist/repo/audit.d.ts.map +1 -1
  289. package/dist/repo/audit.js +24 -2
  290. package/dist/repo/audit.js.map +1 -1
  291. package/dist/repo/auth-prune.d.ts +1 -1
  292. package/dist/repo/auth-prune.d.ts.map +1 -1
  293. package/dist/repo/auth-prune.js +13 -1
  294. package/dist/repo/auth-prune.js.map +1 -1
  295. package/dist/repo/billing.d.ts +30 -0
  296. package/dist/repo/billing.d.ts.map +1 -0
  297. package/dist/repo/billing.js +47 -0
  298. package/dist/repo/billing.js.map +1 -0
  299. package/dist/repo/grants.d.ts +30 -0
  300. package/dist/repo/grants.d.ts.map +1 -0
  301. package/dist/repo/grants.js +57 -0
  302. package/dist/repo/grants.js.map +1 -0
  303. package/dist/repo/issues.d.ts +15 -0
  304. package/dist/repo/issues.d.ts.map +1 -0
  305. package/dist/repo/issues.js +31 -0
  306. package/dist/repo/issues.js.map +1 -0
  307. package/dist/repo/keys.d.ts +51 -0
  308. package/dist/repo/keys.d.ts.map +1 -0
  309. package/dist/repo/keys.js +58 -0
  310. package/dist/repo/keys.js.map +1 -0
  311. package/dist/repo/log-retention.d.ts +8 -0
  312. package/dist/repo/log-retention.d.ts.map +1 -0
  313. package/dist/repo/log-retention.js +20 -0
  314. package/dist/repo/log-retention.js.map +1 -0
  315. package/dist/repo/metric-read.d.ts +2 -0
  316. package/dist/repo/metric-read.d.ts.map +1 -1
  317. package/dist/repo/metric-read.js +5 -1
  318. package/dist/repo/metric-read.js.map +1 -1
  319. package/dist/repo/metric-write.d.ts.map +1 -1
  320. package/dist/repo/metric-write.js +3 -2
  321. package/dist/repo/metric-write.js.map +1 -1
  322. package/dist/repo/orgs.d.ts +2 -0
  323. package/dist/repo/orgs.d.ts.map +1 -1
  324. package/dist/repo/orgs.js +5 -1
  325. package/dist/repo/orgs.js.map +1 -1
  326. package/dist/repo/project-roles.d.ts +28 -0
  327. package/dist/repo/project-roles.d.ts.map +1 -0
  328. package/dist/repo/project-roles.js +39 -0
  329. package/dist/repo/project-roles.js.map +1 -0
  330. package/dist/repo/projects.d.ts +3 -22
  331. package/dist/repo/projects.d.ts.map +1 -1
  332. package/dist/repo/projects.js +4 -29
  333. package/dist/repo/projects.js.map +1 -1
  334. package/dist/repo/saved.d.ts +9 -0
  335. package/dist/repo/saved.d.ts.map +1 -0
  336. package/dist/repo/saved.js +29 -0
  337. package/dist/repo/saved.js.map +1 -0
  338. package/dist/repo/scim-tokens.d.ts +20 -0
  339. package/dist/repo/scim-tokens.d.ts.map +1 -0
  340. package/dist/repo/scim-tokens.js +32 -0
  341. package/dist/repo/scim-tokens.js.map +1 -0
  342. package/dist/repo/services.d.ts +6 -0
  343. package/dist/repo/services.d.ts.map +1 -0
  344. package/dist/repo/services.js +17 -0
  345. package/dist/repo/services.js.map +1 -0
  346. package/dist/repo/settings.d.ts +30 -0
  347. package/dist/repo/settings.d.ts.map +1 -0
  348. package/dist/repo/settings.js +55 -0
  349. package/dist/repo/settings.js.map +1 -0
  350. package/dist/repo/slos.d.ts +10 -0
  351. package/dist/repo/slos.d.ts.map +1 -0
  352. package/dist/repo/slos.js +27 -0
  353. package/dist/repo/slos.js.map +1 -0
  354. package/dist/repo/sourcemaps.d.ts +9 -0
  355. package/dist/repo/sourcemaps.d.ts.map +1 -0
  356. package/dist/repo/sourcemaps.js +34 -0
  357. package/dist/repo/sourcemaps.js.map +1 -0
  358. package/dist/repo/tags.d.ts +11 -0
  359. package/dist/repo/tags.d.ts.map +1 -0
  360. package/dist/repo/tags.js +33 -0
  361. package/dist/repo/tags.js.map +1 -0
  362. package/dist/repo/trace-join.d.ts +9 -0
  363. package/dist/repo/trace-join.d.ts.map +1 -0
  364. package/dist/repo/trace-join.js +35 -0
  365. package/dist/repo/trace-join.js.map +1 -0
  366. package/dist/repo/trace-read.d.ts +6 -13
  367. package/dist/repo/trace-read.d.ts.map +1 -1
  368. package/dist/repo/trace-read.js +11 -4
  369. package/dist/repo/trace-read.js.map +1 -1
  370. package/dist/repo/trace-write.d.ts +6 -2
  371. package/dist/repo/trace-write.d.ts.map +1 -1
  372. package/dist/repo/trace-write.js +22 -7
  373. package/dist/repo/trace-write.js.map +1 -1
  374. package/dist/repo/uptime.d.ts +21 -0
  375. package/dist/repo/uptime.d.ts.map +1 -0
  376. package/dist/repo/uptime.js +53 -0
  377. package/dist/repo/uptime.js.map +1 -0
  378. package/dist/routes/alerts.d.ts.map +1 -1
  379. package/dist/routes/alerts.js +65 -66
  380. package/dist/routes/alerts.js.map +1 -1
  381. package/dist/routes/apps.d.ts +20 -0
  382. package/dist/routes/apps.d.ts.map +1 -0
  383. package/dist/routes/apps.js +53 -0
  384. package/dist/routes/apps.js.map +1 -0
  385. package/dist/routes/billing.d.ts +4 -0
  386. package/dist/routes/billing.d.ts.map +1 -0
  387. package/dist/routes/billing.js +51 -0
  388. package/dist/routes/billing.js.map +1 -0
  389. package/dist/routes/changes.d.ts +4 -0
  390. package/dist/routes/changes.d.ts.map +1 -0
  391. package/dist/routes/changes.js +19 -0
  392. package/dist/routes/changes.js.map +1 -0
  393. package/dist/routes/data.d.ts.map +1 -1
  394. package/dist/routes/data.js +38 -14
  395. package/dist/routes/data.js.map +1 -1
  396. package/dist/routes/index.d.ts.map +1 -1
  397. package/dist/routes/index.js +28 -0
  398. package/dist/routes/index.js.map +1 -1
  399. package/dist/routes/ingest.d.ts +3 -1
  400. package/dist/routes/ingest.d.ts.map +1 -1
  401. package/dist/routes/ingest.js +60 -14
  402. package/dist/routes/ingest.js.map +1 -1
  403. package/dist/routes/issues.d.ts +4 -0
  404. package/dist/routes/issues.d.ts.map +1 -0
  405. package/dist/routes/issues.js +34 -0
  406. package/dist/routes/issues.js.map +1 -0
  407. package/dist/routes/keys.d.ts +4 -0
  408. package/dist/routes/keys.d.ts.map +1 -0
  409. package/dist/routes/keys.js +70 -0
  410. package/dist/routes/keys.js.map +1 -0
  411. package/dist/routes/mcp.d.ts.map +1 -1
  412. package/dist/routes/mcp.js +85 -31
  413. package/dist/routes/mcp.js.map +1 -1
  414. package/dist/routes/me.d.ts.map +1 -1
  415. package/dist/routes/me.js +15 -5
  416. package/dist/routes/me.js.map +1 -1
  417. package/dist/routes/metrics.d.ts +2 -2
  418. package/dist/routes/metrics.d.ts.map +1 -1
  419. package/dist/routes/metrics.js +3 -4
  420. package/dist/routes/metrics.js.map +1 -1
  421. package/dist/routes/models.d.ts +9 -1
  422. package/dist/routes/models.d.ts.map +1 -1
  423. package/dist/routes/models.js +62 -21
  424. package/dist/routes/models.js.map +1 -1
  425. package/dist/routes/notify.d.ts.map +1 -1
  426. package/dist/routes/notify.js +3 -1
  427. package/dist/routes/notify.js.map +1 -1
  428. package/dist/routes/oauth-meta.d.ts +7 -0
  429. package/dist/routes/oauth-meta.d.ts.map +1 -0
  430. package/dist/routes/oauth-meta.js +52 -0
  431. package/dist/routes/oauth-meta.js.map +1 -0
  432. package/dist/routes/orgs.d.ts.map +1 -1
  433. package/dist/routes/orgs.js +27 -7
  434. package/dist/routes/orgs.js.map +1 -1
  435. package/dist/routes/projects.d.ts.map +1 -1
  436. package/dist/routes/projects.js +32 -22
  437. package/dist/routes/projects.js.map +1 -1
  438. package/dist/routes/saved.d.ts +4 -0
  439. package/dist/routes/saved.d.ts.map +1 -0
  440. package/dist/routes/saved.js +56 -0
  441. package/dist/routes/saved.js.map +1 -0
  442. package/dist/routes/scim.d.ts +4 -0
  443. package/dist/routes/scim.d.ts.map +1 -0
  444. package/dist/routes/scim.js +37 -0
  445. package/dist/routes/scim.js.map +1 -0
  446. package/dist/routes/search.d.ts +4 -0
  447. package/dist/routes/search.d.ts.map +1 -0
  448. package/dist/routes/search.js +36 -0
  449. package/dist/routes/search.js.map +1 -0
  450. package/dist/routes/settings.d.ts +4 -0
  451. package/dist/routes/settings.d.ts.map +1 -0
  452. package/dist/routes/settings.js +39 -0
  453. package/dist/routes/settings.js.map +1 -0
  454. package/dist/routes/shares.d.ts +3 -0
  455. package/dist/routes/shares.d.ts.map +1 -1
  456. package/dist/routes/shares.js +34 -18
  457. package/dist/routes/shares.js.map +1 -1
  458. package/dist/routes/slos.d.ts +4 -0
  459. package/dist/routes/slos.d.ts.map +1 -0
  460. package/dist/routes/slos.js +76 -0
  461. package/dist/routes/slos.js.map +1 -0
  462. package/dist/routes/sourcemaps.d.ts +9 -0
  463. package/dist/routes/sourcemaps.d.ts.map +1 -0
  464. package/dist/routes/sourcemaps.js +54 -0
  465. package/dist/routes/sourcemaps.js.map +1 -0
  466. package/dist/routes/status.d.ts +4 -0
  467. package/dist/routes/status.d.ts.map +1 -0
  468. package/dist/routes/status.js +60 -0
  469. package/dist/routes/status.js.map +1 -0
  470. package/dist/routes/tags.d.ts +4 -0
  471. package/dist/routes/tags.d.ts.map +1 -0
  472. package/dist/routes/tags.js +81 -0
  473. package/dist/routes/tags.js.map +1 -0
  474. package/dist/routes/uptime.d.ts +4 -0
  475. package/dist/routes/uptime.d.ts.map +1 -0
  476. package/dist/routes/uptime.js +71 -0
  477. package/dist/routes/uptime.js.map +1 -0
  478. package/dist/scale-exec.d.ts +3 -2
  479. package/dist/scale-exec.d.ts.map +1 -1
  480. package/dist/scale-exec.js +5 -4
  481. package/dist/scale-exec.js.map +1 -1
  482. package/dist/server.d.ts.map +1 -1
  483. package/dist/server.js +45 -10
  484. package/dist/server.js.map +1 -1
  485. package/dist/settle.d.ts +13 -9
  486. package/dist/settle.d.ts.map +1 -1
  487. package/dist/settle.js +40 -20
  488. package/dist/settle.js.map +1 -1
  489. package/dist/telemetry/cached.d.ts +11 -0
  490. package/dist/telemetry/cached.d.ts.map +1 -0
  491. package/dist/telemetry/cached.js +30 -0
  492. package/dist/telemetry/cached.js.map +1 -0
  493. package/dist/telemetry/ch/admin.d.ts +14 -0
  494. package/dist/telemetry/ch/admin.d.ts.map +1 -0
  495. package/dist/telemetry/ch/admin.js +82 -0
  496. package/dist/telemetry/ch/admin.js.map +1 -0
  497. package/dist/telemetry/ch/http.d.ts +19 -0
  498. package/dist/telemetry/ch/http.d.ts.map +1 -0
  499. package/dist/telemetry/ch/http.js +91 -0
  500. package/dist/telemetry/ch/http.js.map +1 -0
  501. package/dist/telemetry/ch/metrics.d.ts +10 -0
  502. package/dist/telemetry/ch/metrics.d.ts.map +1 -0
  503. package/dist/telemetry/ch/metrics.js +61 -0
  504. package/dist/telemetry/ch/metrics.js.map +1 -0
  505. package/dist/telemetry/ch/queries.d.ts +19 -0
  506. package/dist/telemetry/ch/queries.d.ts.map +1 -0
  507. package/dist/telemetry/ch/queries.js +30 -0
  508. package/dist/telemetry/ch/queries.js.map +1 -0
  509. package/dist/telemetry/ch/queue.d.ts +36 -0
  510. package/dist/telemetry/ch/queue.d.ts.map +1 -0
  511. package/dist/telemetry/ch/queue.js +83 -0
  512. package/dist/telemetry/ch/queue.js.map +1 -0
  513. package/dist/telemetry/ch/read.d.ts +12 -0
  514. package/dist/telemetry/ch/read.d.ts.map +1 -0
  515. package/dist/telemetry/ch/read.js +74 -0
  516. package/dist/telemetry/ch/read.js.map +1 -0
  517. package/dist/telemetry/ch/rebuild.d.ts +23 -0
  518. package/dist/telemetry/ch/rebuild.d.ts.map +1 -0
  519. package/dist/telemetry/ch/rebuild.js +65 -0
  520. package/dist/telemetry/ch/rebuild.js.map +1 -0
  521. package/dist/telemetry/ch/schema-facts.d.ts +6 -0
  522. package/dist/telemetry/ch/schema-facts.d.ts.map +1 -0
  523. package/dist/telemetry/ch/schema-facts.js +55 -0
  524. package/dist/telemetry/ch/schema-facts.js.map +1 -0
  525. package/dist/telemetry/ch/schema-raw.d.ts +10 -0
  526. package/dist/telemetry/ch/schema-raw.d.ts.map +1 -0
  527. package/dist/telemetry/ch/schema-raw.js +37 -0
  528. package/dist/telemetry/ch/schema-raw.js.map +1 -0
  529. package/dist/telemetry/ch/schema-rollups.d.ts +2 -0
  530. package/dist/telemetry/ch/schema-rollups.d.ts.map +1 -0
  531. package/dist/telemetry/ch/schema-rollups.js +61 -0
  532. package/dist/telemetry/ch/schema-rollups.js.map +1 -0
  533. package/dist/telemetry/ch/schema.d.ts +12 -0
  534. package/dist/telemetry/ch/schema.d.ts.map +1 -0
  535. package/dist/telemetry/ch/schema.js +25 -0
  536. package/dist/telemetry/ch/schema.js.map +1 -0
  537. package/dist/telemetry/ch/settle-pool.d.ts +24 -0
  538. package/dist/telemetry/ch/settle-pool.d.ts.map +1 -0
  539. package/dist/telemetry/ch/settle-pool.js +58 -0
  540. package/dist/telemetry/ch/settle-pool.js.map +1 -0
  541. package/dist/telemetry/ch/settle-rows.d.ts +16 -0
  542. package/dist/telemetry/ch/settle-rows.d.ts.map +1 -0
  543. package/dist/telemetry/ch/settle-rows.js +74 -0
  544. package/dist/telemetry/ch/settle-rows.js.map +1 -0
  545. package/dist/telemetry/ch/settle-work.d.ts +21 -0
  546. package/dist/telemetry/ch/settle-work.d.ts.map +1 -0
  547. package/dist/telemetry/ch/settle-work.js +52 -0
  548. package/dist/telemetry/ch/settle-work.js.map +1 -0
  549. package/dist/telemetry/ch/settle-worker.d.ts +2 -0
  550. package/dist/telemetry/ch/settle-worker.d.ts.map +1 -0
  551. package/dist/telemetry/ch/settle-worker.js +10 -0
  552. package/dist/telemetry/ch/settle-worker.js.map +1 -0
  553. package/dist/telemetry/ch/settle.d.ts +21 -0
  554. package/dist/telemetry/ch/settle.d.ts.map +1 -0
  555. package/dist/telemetry/ch/settle.js +55 -0
  556. package/dist/telemetry/ch/settle.js.map +1 -0
  557. package/dist/telemetry/ch/store.d.ts +27 -0
  558. package/dist/telemetry/ch/store.d.ts.map +1 -0
  559. package/dist/telemetry/ch/store.js +94 -0
  560. package/dist/telemetry/ch/store.js.map +1 -0
  561. package/dist/telemetry/ch/util.d.ts +27 -0
  562. package/dist/telemetry/ch/util.d.ts.map +1 -0
  563. package/dist/telemetry/ch/util.js +49 -0
  564. package/dist/telemetry/ch/util.js.map +1 -0
  565. package/dist/telemetry/ch/write.d.ts +12 -0
  566. package/dist/telemetry/ch/write.d.ts.map +1 -0
  567. package/dist/telemetry/ch/write.js +59 -0
  568. package/dist/telemetry/ch/write.js.map +1 -0
  569. package/dist/telemetry/copy.d.ts +9 -0
  570. package/dist/telemetry/copy.d.ts.map +1 -0
  571. package/dist/telemetry/copy.js +60 -0
  572. package/dist/telemetry/copy.js.map +1 -0
  573. package/dist/telemetry/index.d.ts +14 -0
  574. package/dist/telemetry/index.d.ts.map +1 -0
  575. package/dist/telemetry/index.js +26 -0
  576. package/dist/telemetry/index.js.map +1 -0
  577. package/dist/telemetry/pg-store.d.ts +5 -0
  578. package/dist/telemetry/pg-store.d.ts.map +1 -0
  579. package/dist/telemetry/pg-store.js +83 -0
  580. package/dist/telemetry/pg-store.js.map +1 -0
  581. package/dist/telemetry/store.d.ts +85 -0
  582. package/dist/telemetry/store.d.ts.map +1 -0
  583. package/dist/telemetry/store.js +2 -0
  584. package/dist/telemetry/store.js.map +1 -0
  585. package/dist/uptime/headers.d.ts +6 -0
  586. package/dist/uptime/headers.d.ts.map +1 -0
  587. package/dist/uptime/headers.js +25 -0
  588. package/dist/uptime/headers.js.map +1 -0
  589. package/dist/uptime/run.d.ts +9 -0
  590. package/dist/uptime/run.d.ts.map +1 -0
  591. package/dist/uptime/run.js +40 -0
  592. package/dist/uptime/run.js.map +1 -0
  593. package/package.json +10 -5
  594. package/dist/alerts/notify.d.ts +0 -28
  595. package/dist/alerts/notify.d.ts.map +0 -1
  596. package/dist/alerts/notify.js +0 -52
  597. package/dist/alerts/notify.js.map +0 -1
@@ -0,0 +1,23 @@
1
+ import type { ChClient } from "./http.js";
2
+ import type { SettleQueue } from "./queue.js";
3
+ export declare const ensureMeta: (ch: ChClient) => Promise<void>;
4
+ export declare class Rebuild {
5
+ private readonly ch;
6
+ private readonly queue;
7
+ private at;
8
+ private readonly size;
9
+ /** Keys of the page in the queue now; the next page loads when they are all settled. */
10
+ private page;
11
+ /** The current page is the last one. */
12
+ private ended;
13
+ private loading;
14
+ private constructor();
15
+ /** Picks up a rebuild a restart cut short, from its last settled page. */
16
+ static open(ch: ChClient, queue: SettleQueue, size?: number): Promise<Rebuild>;
17
+ /** Every trace settles again, from the first. */
18
+ start(): Promise<void>;
19
+ /** Before each settle run: when the current page is done, save the place and queue the next page. */
20
+ refill(): Promise<void>;
21
+ private next;
22
+ }
23
+ //# sourceMappingURL=rebuild.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rebuild.d.ts","sourceRoot":"","sources":["../../../src/telemetry/ch/rebuild.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAU9C,eAAO,MAAM,UAAU,OAAQ,QAAQ,kBACgG,CAAC;AAIxI,qBAAa,OAAO;IAQhB,OAAO,CAAC,QAAQ,CAAC,EAAE;IACnB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,EAAE;IACV,OAAO,CAAC,QAAQ,CAAC,IAAI;IAVvB,wFAAwF;IACxF,OAAO,CAAC,IAAI,CAAgB;IAC5B,wCAAwC;IACxC,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,OAAO,CAAS;IAExB,OAAO,eAKH;IAEJ,0EAA0E;IAC1E,OAAa,IAAI,CAAC,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,SAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAIjF;IAED,iDAAiD;IAC3C,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAK3B;IAED,qGAAqG;IAC/F,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAY5B;YAEa,IAAI;CAWnB"}
@@ -0,0 +1,65 @@
1
+ import { nextVer } from "./util.js";
2
+ const PAGE = 5_000;
3
+ const KEY = "rebuild";
4
+ const DONE = "done";
5
+ export const ensureMeta = (ch) => ch.command("CREATE TABLE IF NOT EXISTS ch_meta (key String, value String, ver UInt64) ENGINE = ReplacingMergeTree(ver) ORDER BY key");
6
+ const save = (ch, at) => ch.insert("ch_meta", [{ key: KEY, value: at ? JSON.stringify(at) : DONE, ver: nextVer(Date.now()) }]);
7
+ export class Rebuild {
8
+ ch;
9
+ queue;
10
+ at;
11
+ size;
12
+ /** Keys of the page in the queue now; the next page loads when they are all settled. */
13
+ page = [];
14
+ /** The current page is the last one. */
15
+ ended = false;
16
+ loading = false;
17
+ constructor(ch, queue, at, size) {
18
+ this.ch = ch;
19
+ this.queue = queue;
20
+ this.at = at;
21
+ this.size = size;
22
+ }
23
+ /** Picks up a rebuild a restart cut short, from its last settled page. */
24
+ static async open(ch, queue, size = PAGE) {
25
+ await ensureMeta(ch);
26
+ const [row] = await ch.query(`SELECT value FROM ch_meta FINAL WHERE key = '${KEY}'`);
27
+ return new Rebuild(ch, queue, row && row.value !== DONE ? JSON.parse(row.value) : null, size);
28
+ }
29
+ /** Every trace settles again, from the first. */
30
+ async start() {
31
+ this.at = ["", ""];
32
+ this.page = [];
33
+ this.ended = false;
34
+ await save(this.ch, this.at);
35
+ }
36
+ /** Before each settle run: when the current page is done, save the place and queue the next page. */
37
+ async refill() {
38
+ if (!this.at || this.loading)
39
+ return;
40
+ this.page = this.page.filter((k) => this.queue.has(k));
41
+ if (this.page.length)
42
+ return;
43
+ this.loading = true;
44
+ try {
45
+ await save(this.ch, this.ended ? null : this.at);
46
+ if (this.ended)
47
+ this.at = null;
48
+ else
49
+ await this.next(this.at);
50
+ }
51
+ finally {
52
+ this.loading = false;
53
+ }
54
+ }
55
+ async next(after) {
56
+ const rows = await this.ch.query(`SELECT project_id, trace_id, max(env) AS env, max(updated_ms) AS u FROM trace_heads WHERE (project_id, trace_id) > ({p1:String}, {p2:String})
57
+ GROUP BY project_id, trace_id ORDER BY project_id, trace_id LIMIT ${this.size}`, after);
58
+ this.page = rows.map((r) => this.queue.requeue(r.project_id, r.trace_id, r.env, r.u));
59
+ const last = rows.at(-1);
60
+ if (last)
61
+ this.at = [last.project_id, last.trace_id];
62
+ this.ended = rows.length < this.size;
63
+ }
64
+ }
65
+ //# sourceMappingURL=rebuild.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rebuild.js","sourceRoot":"","sources":["../../../src/telemetry/ch/rebuild.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export declare const FACT_DDL: readonly string[];
2
+ /** Changes to shipped fact tables, in order. The n-gram bloom filled up at 8,192 rows a block and skipped nothing; the text index lists each block's n-grams. Log facts gained their pattern id. */
3
+ export declare const FACT_ALTERS: readonly string[];
4
+ /** Fact tables (storage names) and the columns that identify a row within a trace, for tombstones. */
5
+ export declare const FACT_KEYS: Record<string, readonly string[]>;
6
+ //# sourceMappingURL=schema-facts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema-facts.d.ts","sourceRoot":"","sources":["../../../src/telemetry/ch/schema-facts.ts"],"names":[],"mappings":"AAmCA,eAAO,MAAM,QAAQ,EAAE,SAAS,MAAM,EASrC,CAAC;AAEF,oMAAoM;AACpM,eAAO,MAAM,WAAW,EAAE,SAAS,MAAM,EAMxC,CAAC;AAEF,sGAAsG;AACtG,eAAO,MAAM,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAOvD,CAAC"}
@@ -0,0 +1,55 @@
1
+ // ClickHouse fact tables (one row per request, trace, log line, slow span, search document, attribute), and views with the Postgres names.
2
+ import { EXPIRE, monthOf } from "./schema-raw.js";
3
+ const P = "project_id LowCardinality(String), trace_id String";
4
+ const VERSIONED = "ver UInt64, is_deleted UInt8, expire_ms Float64";
5
+ /** A fact table: replaced by version, deleted by tombstone; the view reads only live rows, with the Postgres columns. */
6
+ function fact(name, cols, order, time, indexes = "") {
7
+ const names = cols.split(/,\s*/).map((c) => c.trim().split(/\s+/)[0]);
8
+ return [
9
+ `CREATE TABLE IF NOT EXISTS ${name}_t (${P}, ${cols}, ${VERSIONED}${indexes ? `, ${indexes}` : ""})
10
+ ENGINE = ReplacingMergeTree(ver, is_deleted) PARTITION BY ${monthOf(time)} ORDER BY (${order}) ${EXPIRE}`,
11
+ `CREATE OR REPLACE VIEW ${name} AS SELECT project_id, trace_id, ${names.join(", ")} FROM ${name}_t FINAL`,
12
+ ];
13
+ }
14
+ const REQUEST_COLS = [
15
+ "env LowCardinality(String), start_ms Float64, method LowCardinality(String), path String, endpoint String, status Nullable(Int32)",
16
+ "status_class LowCardinality(String), failed Bool, dur_class LowCardinality(String), aborted Bool, duration_ms Float64, server_ms Nullable(Float64)",
17
+ "db_ms Float64, db_count Int32, fetch_count Int32, fetch_ms Float64, render_ms Nullable(Float64), network_ms Nullable(Float64)",
18
+ "service LowCardinality(String), services String, errors Int32, insights Int32, health LowCardinality(String), user_agent Nullable(String)",
19
+ "client_address Nullable(String), end_user Nullable(String), request_id Nullable(String), tags String, search String",
20
+ ].join(", ");
21
+ /** The log fact columns as shipped; `pattern` came later (FACT_ALTERS). */
22
+ const LOG_COLS = "idx Int32, env LowCardinality(String), time_ms Float64, level LowCardinality(String), level_rank Int16, service LowCardinality(String), category String, message String, trace_name String, span_id Nullable(String), attributes String, search String";
23
+ const LOG_NAMES = LOG_COLS.split(/,\s*/).map((c) => c.split(/\s+/)[0]).join(", ");
24
+ const SEARCH_COLS = [
25
+ "kind LowCardinality(String), owner String, env LowCardinality(String), time_ms Float64, span_id Nullable(String), service String",
26
+ "name Nullable(String), method Nullable(String), path Nullable(String), route Nullable(String), status Nullable(Int32), outcome Nullable(String)",
27
+ "duration_ms Nullable(Float64), level_rank Nullable(Int16), category Nullable(String), span_kind Nullable(String), end_user Nullable(String)",
28
+ "error Bool, message Nullable(String), text String",
29
+ ].join(", ");
30
+ export const FACT_DDL = [
31
+ ...fact("fact_requests", REQUEST_COLS, "project_id, start_ms, trace_id", "start_ms"),
32
+ ...fact("fact_traces", "env LowCardinality(String), start_ms Float64, path String, duration_ms Float64, health Nullable(String), status String, services String, span_count Int32, slow Bool, search String", "project_id, start_ms, trace_id", "start_ms"),
33
+ ...fact("fact_logs", LOG_COLS, "project_id, time_ms, trace_id, idx", "time_ms"),
34
+ ...fact("fact_critical", "span_id String, env LowCardinality(String), start_ms Float64, duration_ms Float64, name String, service LowCardinality(String), layer LowCardinality(String)", "project_id, start_ms, trace_id, span_id", "start_ms"),
35
+ ...fact("fact_search", SEARCH_COLS, "project_id, kind, time_ms, trace_id, owner", "time_ms", "INDEX ix_text text TYPE ngrambf_v1(3, 65536, 2, 0) GRANULARITY 1, INDEX ix_trace trace_id TYPE bloom_filter GRANULARITY 1"),
36
+ ...fact("fact_attrs", "src LowCardinality(String), owner String, key LowCardinality(String), value String, num Nullable(Float64), time_ms Float64", "project_id, key, value, trace_id, src, owner", "time_ms", "INDEX ix_trace trace_id TYPE bloom_filter GRANULARITY 1"),
37
+ ];
38
+ /** Changes to shipped fact tables, in order. The n-gram bloom filled up at 8,192 rows a block and skipped nothing; the text index lists each block's n-grams. Log facts gained their pattern id. */
39
+ export const FACT_ALTERS = [
40
+ "ALTER TABLE fact_search_t ADD INDEX IF NOT EXISTS ix_text_ngrams text TYPE text(tokenizer = ngrams(3)) GRANULARITY 1",
41
+ "ALTER TABLE fact_search_t DROP INDEX IF EXISTS ix_text",
42
+ "ALTER TABLE fact_logs_t ADD COLUMN IF NOT EXISTS pattern String DEFAULT ''",
43
+ "ALTER TABLE fact_logs_t ADD INDEX IF NOT EXISTS ix_pattern pattern TYPE bloom_filter GRANULARITY 1",
44
+ `CREATE OR REPLACE VIEW fact_logs AS SELECT project_id, trace_id, ${LOG_NAMES}, pattern FROM fact_logs_t FINAL`,
45
+ ];
46
+ /** Fact tables (storage names) and the columns that identify a row within a trace, for tombstones. */
47
+ export const FACT_KEYS = {
48
+ fact_requests_t: ["start_ms"],
49
+ fact_traces_t: ["start_ms"],
50
+ fact_logs_t: ["time_ms", "idx"],
51
+ fact_critical_t: ["start_ms", "span_id"],
52
+ fact_search_t: ["kind", "time_ms", "owner"],
53
+ fact_attrs_t: ["key", "value", "src", "owner"],
54
+ };
55
+ //# sourceMappingURL=schema-facts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema-facts.js","sourceRoot":"","sources":["../../../src/telemetry/ch/schema-facts.ts"],"names":[],"mappings":"AAAA,2IAA2I;AAC3I,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAElD,MAAM,CAAC,GAAG,oDAAoD,CAAC;AAC/D,MAAM,SAAS,GAAG,iDAAiD,CAAC;AAEpE,yHAAyH;AACzH,SAAS,IAAI,CAAC,IAAY,EAAE,IAAY,EAAE,KAAa,EAAE,IAAY,EAAE,OAAO,GAAG,EAAE;IACjF,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAE,CAAC,CAAC;IACvE,OAAO;QACL,8BAA8B,IAAI,OAAO,CAAC,KAAK,IAAI,KAAK,SAAS,GAAG,OAAO,CAAC,CAAC,CAAC,KAAK,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE;iEACpC,OAAO,CAAC,IAAI,CAAC,cAAc,KAAK,KAAK,MAAM,EAAE;QAC1G,0BAA0B,IAAI,oCAAoC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,UAAU;KAC1G,CAAC;AACJ,CAAC;AAED,MAAM,YAAY,GAAG;IACnB,mIAAmI;IACnI,oJAAoJ;IACpJ,+HAA+H;IAC/H,2IAA2I;IAC3I,qHAAqH;CACtH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAEb,2EAA2E;AAC3E,MAAM,QAAQ,GAAG,wPAAwP,CAAC;AAC1Q,MAAM,SAAS,GAAG,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAEnF,MAAM,WAAW,GAAG;IAClB,kIAAkI;IAClI,iJAAiJ;IACjJ,6IAA6I;IAC7I,mDAAmD;CACpD,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAEb,MAAM,CAAC,MAAM,QAAQ,GAAsB;IACzC,GAAG,IAAI,CAAC,eAAe,EAAE,YAAY,EAAE,gCAAgC,EAAE,UAAU,CAAC;IACpF,GAAG,IAAI,CAAC,aAAa,EAAE,qLAAqL,EAAE,gCAAgC,EAAE,UAAU,CAAC;IAC3P,GAAG,IAAI,CAAC,WAAW,EAAE,QAAQ,EAAE,oCAAoC,EAAE,SAAS,CAAC;IAC/E,GAAG,IAAI,CAAC,eAAe,EAAE,8JAA8J,EAAE,yCAAyC,EAAE,UAAU,CAAC;IAC/O,GAAG,IAAI,CAAC,aAAa,EAAE,WAAW,EAAE,4CAA4C,EAAE,SAAS,EACzF,2HAA2H,CAAC;IAC9H,GAAG,IAAI,CAAC,YAAY,EAAE,4HAA4H,EAAE,8CAA8C,EAAE,SAAS,EAC3M,yDAAyD,CAAC;CAC7D,CAAC;AAEF,oMAAoM;AACpM,MAAM,CAAC,MAAM,WAAW,GAAsB;IAC5C,sHAAsH;IACtH,wDAAwD;IACxD,4EAA4E;IAC5E,oGAAoG;IACpG,oEAAoE,SAAS,kCAAkC;CAChH,CAAC;AAEF,sGAAsG;AACtG,MAAM,CAAC,MAAM,SAAS,GAAsC;IAC1D,eAAe,EAAE,CAAC,UAAU,CAAC;IAC7B,aAAa,EAAE,CAAC,UAAU,CAAC;IAC3B,WAAW,EAAE,CAAC,SAAS,EAAE,KAAK,CAAC;IAC/B,eAAe,EAAE,CAAC,UAAU,EAAE,SAAS,CAAC;IACxC,aAAa,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC;IAC3C,YAAY,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC;CAC/C,CAAC"}
@@ -0,0 +1,10 @@
1
+ /** Epoch ms in a column as a DateTime, for partitions and TTLs. */
2
+ export declare const secondsOf: (col: string) => string;
3
+ export declare const monthOf: (col: string) => string;
4
+ export declare const dayOf: (col: string) => string;
5
+ /** Rows go when their organization's retention runs out, set when they are written. */
6
+ export declare const EXPIRE: string;
7
+ export declare const RAW_TABLES: readonly string[];
8
+ /** Changes to shipped raw tables, in order. Log retention per project: 0 means the trace retention. */
9
+ export declare const RAW_ALTERS: readonly string[];
10
+ //# sourceMappingURL=schema-raw.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema-raw.d.ts","sourceRoot":"","sources":["../../../src/telemetry/ch/schema-raw.ts"],"names":[],"mappings":"AAEA,mEAAmE;AACnE,eAAO,MAAM,SAAS,QAAS,MAAM,KAAG,MAA2F,CAAC;AACpI,eAAO,MAAM,OAAO,QAAS,MAAM,KAAG,MAAuC,CAAC;AAC9E,eAAO,MAAM,KAAK,QAAS,MAAM,KAAG,MAAyC,CAAC;AAC9E,uFAAuF;AACvF,eAAO,MAAM,MAAM,QAAyC,CAAC;AAE7D,eAAO,MAAM,UAAU,EAAE,SAAS,MAAM,EA0BvC,CAAC;AAEF,uGAAuG;AACvG,eAAO,MAAM,UAAU,EAAE,SAAS,MAAM,EAAyF,CAAC"}
@@ -0,0 +1,37 @@
1
+ // ClickHouse tables for what add-ons send: spans, logs, trace bounds, metric points, and the settle state.
2
+ /** Epoch ms in a column as a DateTime, for partitions and TTLs. */
3
+ export const secondsOf = (col) => `toDateTime(intDiv(toUInt64(least(greatest(${col}, 0.), 4102444800000.)), 1000))`;
4
+ export const monthOf = (col) => `toYYYYMM(${secondsOf(col)})`;
5
+ export const dayOf = (col) => `toYYYYMMDD(${secondsOf(col)})`;
6
+ /** Rows go when their organization's retention runs out, set when they are written. */
7
+ export const EXPIRE = `TTL ${secondsOf("expire_ms")} DELETE`;
8
+ export const RAW_TABLES = [
9
+ `CREATE TABLE IF NOT EXISTS spans_raw (
10
+ project_id LowCardinality(String), trace_id String, span_id String, service LowCardinality(String), start_ms Float64, duration_ms Float64,
11
+ session Nullable(String), json String CODEC(ZSTD(3)), ver UInt64, expire_ms Float64,
12
+ INDEX ix_session session TYPE bloom_filter GRANULARITY 4
13
+ ) ENGINE = ReplacingMergeTree(ver) PARTITION BY ${monthOf("start_ms")} ORDER BY (project_id, trace_id, span_id) ${EXPIRE}`,
14
+ `CREATE TABLE IF NOT EXISTS logs_raw (
15
+ project_id LowCardinality(String), trace_id String, key String, time_ms Float64, json String CODEC(ZSTD(3)), ver UInt64, expire_ms Float64
16
+ ) ENGINE = ReplacingMergeTree(ver) PARTITION BY ${monthOf("time_ms")} ORDER BY (project_id, trace_id, key) ${EXPIRE}`,
17
+ `CREATE TABLE IF NOT EXISTS trace_heads (
18
+ project_id LowCardinality(String), trace_id String, start_ms SimpleAggregateFunction(min, Float64), end_ms SimpleAggregateFunction(max, Float64),
19
+ updated_ms SimpleAggregateFunction(max, Float64), env SimpleAggregateFunction(max, String), expire_ms SimpleAggregateFunction(max, Float64)
20
+ ) ENGINE = AggregatingMergeTree ORDER BY (project_id, trace_id) ${EXPIRE}`,
21
+ `CREATE TABLE IF NOT EXISTS trace_updates (
22
+ project_id LowCardinality(String), trace_id String, updated_ms Float64, env String
23
+ ) ENGINE = MergeTree ORDER BY updated_ms TTL ${secondsOf("updated_ms")} + INTERVAL 2 DAY DELETE`,
24
+ `CREATE TABLE IF NOT EXISTS settle_state (
25
+ project_id LowCardinality(String), trace_id String, settled_ms Float64, contrib String CODEC(ZSTD(3)), ver UInt64, expire_ms Float64
26
+ ) ENGINE = ReplacingMergeTree(ver) ORDER BY (project_id, trace_id) ${EXPIRE}`,
27
+ `CREATE TABLE IF NOT EXISTS metric_points_raw (
28
+ project_id LowCardinality(String), time_ms Float64, env LowCardinality(String), service LowCardinality(String), name LowCardinality(String),
29
+ series_key String, json String CODEC(ZSTD(3)), expire_ms Float64
30
+ ) ENGINE = MergeTree PARTITION BY ${monthOf("time_ms")} ORDER BY (project_id, name, time_ms) ${EXPIRE}`,
31
+ `CREATE TABLE IF NOT EXISTS project_retention (
32
+ project_id String, days UInt32, ver UInt64
33
+ ) ENGINE = ReplacingMergeTree(ver) ORDER BY project_id`,
34
+ ];
35
+ /** Changes to shipped raw tables, in order. Log retention per project: 0 means the trace retention. */
36
+ export const RAW_ALTERS = ["ALTER TABLE project_retention ADD COLUMN IF NOT EXISTS log_days UInt32 DEFAULT 0"];
37
+ //# sourceMappingURL=schema-raw.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema-raw.js","sourceRoot":"","sources":["../../../src/telemetry/ch/schema-raw.ts"],"names":[],"mappings":"AAAA,2GAA2G;AAE3G,mEAAmE;AACnE,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,GAAW,EAAU,EAAE,CAAC,6CAA6C,GAAG,iCAAiC,CAAC;AACpI,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,GAAW,EAAU,EAAE,CAAC,YAAY,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC;AAC9E,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,GAAW,EAAU,EAAE,CAAC,cAAc,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC;AAC9E,uFAAuF;AACvF,MAAM,CAAC,MAAM,MAAM,GAAG,OAAO,SAAS,CAAC,WAAW,CAAC,SAAS,CAAC;AAE7D,MAAM,CAAC,MAAM,UAAU,GAAsB;IAC3C;;;;oDAIkD,OAAO,CAAC,UAAU,CAAC,6CAA6C,MAAM,EAAE;IAC1H;;oDAEkD,OAAO,CAAC,SAAS,CAAC,yCAAyC,MAAM,EAAE;IACrH;;;oEAGkE,MAAM,EAAE;IAC1E;;iDAE+C,SAAS,CAAC,YAAY,CAAC,0BAA0B;IAChG;;uEAEqE,MAAM,EAAE;IAC7E;;;sCAGoC,OAAO,CAAC,SAAS,CAAC,yCAAyC,MAAM,EAAE;IACvG;;yDAEuD;CACxD,CAAC;AAEF,uGAAuG;AACvG,MAAM,CAAC,MAAM,UAAU,GAAsB,CAAC,kFAAkF,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare const ROLLUP_DDL: readonly string[];
2
+ //# sourceMappingURL=schema-rollups.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema-rollups.d.ts","sourceRoot":"","sources":["../../../src/telemetry/ch/schema-rollups.ts"],"names":[],"mappings":"AAiEA,eAAO,MAAM,UAAU,EAAE,SAAS,MAAM,EAA8E,CAAC"}
@@ -0,0 +1,61 @@
1
+ // ClickHouse rollup, histogram, and metric tiers: rows add up when they merge, and views read them merged with the Postgres names.
2
+ import { IDS_MAX, TIERS } from "@wizeworks/lens-core";
3
+ import { dayOf, EXPIRE, monthOf, secondsOf } from "./schema-raw.js";
4
+ const sum = (c) => `${c} SimpleAggregateFunction(sum, Float64)`;
5
+ const COUNTERS = ["c0", "c1", "c2", "c3", "c4", "c5"];
6
+ /** Short tiers age out by bucket; the 1 h tier by retention. Day partitions for short tiers, month for 1 h. */
7
+ function tierTail(tier) {
8
+ const ttl = tier.keepMs === null ? EXPIRE : `TTL ${secondsOf("bucket_ms")} + INTERVAL ${Math.ceil(tier.keepMs / 1000)} SECOND DELETE`;
9
+ return `PARTITION BY ${tier.keepMs === null ? monthOf("bucket_ms") : dayOf("bucket_ms")} ${ttl}`;
10
+ }
11
+ function rollupDdl(tier) {
12
+ const t = tier.table;
13
+ const cols = [
14
+ "project_id LowCardinality(String), env LowCardinality(String), kind LowCardinality(String), key String, bucket_ms Float64",
15
+ ...["n", "err", "sum_v", ...COUNTERS].map(sum),
16
+ "first_ms SimpleAggregateFunction(min, Float64), last_ms SimpleAggregateFunction(max, Float64), top_rank SimpleAggregateFunction(max, Float64)",
17
+ `top AggregateFunction(argMax, Nullable(String), Float64), ids AggregateFunction(groupArraySorted(${IDS_MAX}), Tuple(Float64, String))`,
18
+ "expire_ms SimpleAggregateFunction(max, Float64)",
19
+ ].join(", ");
20
+ const read = ["project_id", "env", "kind", "key", "bucket_ms", "n", "err", "sum_v", ...COUNTERS, "first_ms", "last_ms", "top_rank"].join(", ");
21
+ const finals = "finalizeAggregation(top) AS top, arrayStringConcat(arrayMap(x -> x.2, finalizeAggregation(ids)), ' ') AS ids";
22
+ return [
23
+ `CREATE TABLE IF NOT EXISTS ${t}_t (${cols}) ENGINE = AggregatingMergeTree ORDER BY (project_id, kind, bucket_ms, env, key) ${tierTail(tier)}`,
24
+ `CREATE OR REPLACE VIEW ${t} AS SELECT ${read}, ${finals} FROM ${t}_t FINAL`,
25
+ `CREATE TABLE IF NOT EXISTS ${tier.hist}_t (
26
+ project_id LowCardinality(String), env LowCardinality(String), kind LowCardinality(String), key String, bucket_ms Float64, bin Int32,
27
+ cnt SimpleAggregateFunction(sum, Float64), expire_ms SimpleAggregateFunction(max, Float64)
28
+ ) ENGINE = AggregatingMergeTree ORDER BY (project_id, kind, bucket_ms, env, key, bin) ${tierTail(tier)}`,
29
+ `CREATE OR REPLACE VIEW ${tier.hist} AS SELECT project_id, env, kind, key, bucket_ms, bin, cnt FROM ${tier.hist}_t FINAL`,
30
+ ];
31
+ }
32
+ function metricDdl(tier) {
33
+ const t = `metric_${tier.name}`;
34
+ const nmin = (c) => `${c} SimpleAggregateFunction(min, Nullable(Float64))`;
35
+ const nmax = (c) => `${c} SimpleAggregateFunction(max, Nullable(Float64))`;
36
+ const cols = [
37
+ "project_id LowCardinality(String), env LowCardinality(String), series_key String, name LowCardinality(String), bucket_ms Float64",
38
+ sum("cnt"), sum("vsum"), nmin("vmin"), nmax("vmax"), "first_ms SimpleAggregateFunction(min, Float64)",
39
+ "first_v AggregateFunction(argMin, Nullable(Float64), Float64)", "last_ms SimpleAggregateFunction(max, Float64)",
40
+ "last_v AggregateFunction(argMax, Nullable(Float64), Float64)", sum("rate_delta"), sum("rate_ms"), sum("h_count"), sum("h_sum"), nmin("h_min"), nmax("h_max"),
41
+ "h_bounds AggregateFunction(argMax, Nullable(String), UInt64), h_counts AggregateFunction(argMax, Nullable(String), UInt64)",
42
+ "expire_ms SimpleAggregateFunction(max, Float64)",
43
+ ].join(", ");
44
+ const read = "project_id, env, series_key, name, bucket_ms, cnt, vsum, vmin, vmax, first_ms, last_ms, rate_delta, rate_ms, h_count, h_sum, h_min, h_max";
45
+ const finals = ["first_v", "last_v", "h_bounds", "h_counts"].map((c) => `finalizeAggregation(${c}) AS ${c}`).join(", ");
46
+ return [
47
+ `CREATE TABLE IF NOT EXISTS ${t}_t (${cols}) ENGINE = AggregatingMergeTree ORDER BY (project_id, name, bucket_ms, env, series_key) ${tierTail(tier)}`,
48
+ `CREATE OR REPLACE VIEW ${t} AS SELECT ${read}, ${finals} FROM ${t}_t FINAL`,
49
+ ];
50
+ }
51
+ const SERIES_DDL = [
52
+ `CREATE TABLE IF NOT EXISTS metric_series_t (
53
+ project_id LowCardinality(String), env LowCardinality(String), series_key String, name LowCardinality(String), service LowCardinality(String),
54
+ kind LowCardinality(String), unit String, description String, monotonic Bool, temporality String, attributes String, last_ms Float64,
55
+ last_value Nullable(Float64), last_hist Nullable(String), ver UInt64, expire_ms Float64
56
+ ) ENGINE = ReplacingMergeTree(ver) ORDER BY (project_id, env, series_key) ${EXPIRE}`,
57
+ `CREATE OR REPLACE VIEW metric_series AS SELECT project_id, env, series_key, name, service, kind, unit, description, monotonic, temporality,
58
+ attributes, last_ms, last_value, last_hist FROM metric_series_t FINAL`,
59
+ ];
60
+ export const ROLLUP_DDL = [...TIERS.flatMap(rollupDdl), ...TIERS.flatMap(metricDdl), ...SERIES_DDL];
61
+ //# sourceMappingURL=schema-rollups.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema-rollups.js","sourceRoot":"","sources":["../../../src/telemetry/ch/schema-rollups.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import { type ChClient } from "./http.js";
2
+ /** Every statement, in order. A change to a shipped table needs an ALTER added here, never an edit to its CREATE. */
3
+ export declare const CH_SCHEMA: readonly string[];
4
+ /** Tables whose rows belong to one project, for clearing it. Views are left out. */
5
+ export declare const PROJECT_TABLES: readonly string[];
6
+ /** Every statement without its TTL clauses: for tests on a fixed clock, whose rows would expire on insert. */
7
+ export declare const withoutTtl: (sql: string) => string;
8
+ /** Create the database (through the default one) and every table and view. `ttl: false` keeps every row (tests only). */
9
+ export declare function migrateClickHouse(url: string, client: ChClient, o?: {
10
+ ttl?: boolean;
11
+ }): Promise<void>;
12
+ //# sourceMappingURL=schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../src/telemetry/ch/schema.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,QAAQ,EAAY,MAAM,WAAW,CAAC;AAapD,qHAAqH;AACrH,eAAO,MAAM,SAAS,EAAE,SAAS,MAAM,EAAkH,CAAC;AAE1J,oFAAoF;AACpF,eAAO,MAAM,cAAc,EAAE,SAAS,MAAM,EAAgD,CAAC;AAE7F,8GAA8G;AAC9G,eAAO,MAAM,UAAU,QAAS,MAAM,KAAG,MAAmD,CAAC;AAE7F,yHAAyH;AACzH,wBAAsB,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAE;IAAE,GAAG,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAK/G"}
@@ -0,0 +1,25 @@
1
+ // ClickHouse schema setup: the database, then every table and view. Statements are idempotent, so each start runs them all.
2
+ import { chClient } from "./http.js";
3
+ import { FACT_ALTERS, FACT_DDL } from "./schema-facts.js";
4
+ import { RAW_ALTERS, RAW_TABLES } from "./schema-raw.js";
5
+ import { ROLLUP_DDL } from "./schema-rollups.js";
6
+ const TABLES = [...RAW_TABLES, ...FACT_DDL, ...ROLLUP_DDL].map((s) => /^CREATE TABLE IF NOT EXISTS (\w+)/.exec(s)?.[1]).filter((t) => !!t);
7
+ /** New parts write no column statistics (see http.ts); old parts lose theirs as they merge. */
8
+ const NO_STATISTICS = TABLES.map((t) => `ALTER TABLE ${t} MODIFY SETTING auto_statistics_types = ''`);
9
+ /** Tables only settling writes, always with a token: a retried insert lands once (see settle-rows.ts, Label). */
10
+ const DEDUPLICATED = TABLES.filter((t) => /^(fact_|rollup_|hist_)|^settle_state$/.test(t)).map((t) => `ALTER TABLE ${t} MODIFY SETTING non_replicated_deduplication_window = 1000`);
11
+ /** Every statement, in order. A change to a shipped table needs an ALTER added here, never an edit to its CREATE. */
12
+ export const CH_SCHEMA = [...RAW_TABLES, ...RAW_ALTERS, ...FACT_DDL, ...FACT_ALTERS, ...ROLLUP_DDL, ...NO_STATISTICS, ...DEDUPLICATED];
13
+ /** Tables whose rows belong to one project, for clearing it. Views are left out. */
14
+ export const PROJECT_TABLES = TABLES.filter((t) => t !== "trace_updates");
15
+ /** Every statement without its TTL clauses: for tests on a fixed clock, whose rows would expire on insert. */
16
+ export const withoutTtl = (sql) => sql.replace(/\sTTL\s[\s\S]*?DELETE/g, "");
17
+ /** Create the database (through the default one) and every table and view. `ttl: false` keeps every row (tests only). */
18
+ export async function migrateClickHouse(url, client, o = {}) {
19
+ const u = new URL(url);
20
+ u.pathname = "/default";
21
+ await chClient({ url: u.toString() }).command(`CREATE DATABASE IF NOT EXISTS \`${client.database.replace(/`/g, "")}\``);
22
+ for (const sql of CH_SCHEMA)
23
+ await client.command(o.ttl === false ? withoutTtl(sql) : sql);
24
+ }
25
+ //# sourceMappingURL=schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../src/telemetry/ch/schema.ts"],"names":[],"mappings":"AAAA,4HAA4H;AAC5H,OAAO,EAAiB,QAAQ,EAAE,MAAM,WAAW,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEjD,MAAM,MAAM,GAAG,CAAC,GAAG,UAAU,EAAE,GAAG,QAAQ,EAAE,GAAG,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,mCAAmC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAExJ,+FAA+F;AAC/F,MAAM,aAAa,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,4CAA4C,CAAC,CAAC;AAEtG,iHAAiH;AACjH,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,uCAAuC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,4DAA4D,CAAC,CAAC;AAEpL,qHAAqH;AACrH,MAAM,CAAC,MAAM,SAAS,GAAsB,CAAC,GAAG,UAAU,EAAE,GAAG,UAAU,EAAE,GAAG,QAAQ,EAAE,GAAG,WAAW,EAAE,GAAG,UAAU,EAAE,GAAG,aAAa,EAAE,GAAG,YAAY,CAAC,CAAC;AAE1J,oFAAoF;AACpF,MAAM,CAAC,MAAM,cAAc,GAAsB,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,eAAe,CAAC,CAAC;AAE7F,8GAA8G;AAC9G,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,GAAW,EAAU,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,wBAAwB,EAAE,EAAE,CAAC,CAAC;AAE7F,yHAAyH;AACzH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,GAAW,EAAE,MAAgB,EAAE,CAAC,GAAsB,EAAE;IAC9F,MAAM,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;IACvB,CAAC,CAAC,QAAQ,GAAG,UAAU,CAAC;IACxB,MAAM,QAAQ,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,mCAAmC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;IACxH,KAAK,MAAM,GAAG,IAAI,SAAS;QAAE,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,KAAK,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AAC7F,CAAC"}
@@ -0,0 +1,24 @@
1
+ import type { ProjectRunner } from "./settle-work.js";
2
+ export interface SettlePoolOptions {
3
+ /** The ClickHouse URL; each worker opens its own client. */
4
+ url: string;
5
+ size: number;
6
+ /** The worker file. Default: the built `settle-worker.js` next to this file. */
7
+ entry?: URL;
8
+ execArgv?: string[];
9
+ }
10
+ export declare class SettlePool {
11
+ private readonly slots;
12
+ private readonly o;
13
+ private lastId;
14
+ private closed;
15
+ constructor(o: SettlePoolOptions);
16
+ get size(): number;
17
+ private spawn;
18
+ /** A worker died: its tasks fail (their traces settle again later), and a new worker takes its place. */
19
+ private lost;
20
+ /** Settle one project task on the least busy worker. */
21
+ readonly run: ProjectRunner;
22
+ close(): Promise<void>;
23
+ }
24
+ //# sourceMappingURL=settle-pool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settle-pool.d.ts","sourceRoot":"","sources":["../../../src/telemetry/ch/settle-pool.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAe,MAAM,kBAAkB,CAAC;AAEnE,MAAM,WAAW,iBAAiB;IAChC,4DAA4D;IAC5D,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,gFAAgF;IAChF,KAAK,CAAC,EAAE,GAAG,CAAC;IACZ,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAYD,qBAAa,UAAU;IACrB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAc;IACpC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAoB;IACtC,OAAO,CAAC,MAAM,CAAK;IACnB,OAAO,CAAC,MAAM,CAAS;IAEvB,YAAY,CAAC,EAAE,iBAAiB,EAG/B;IAED,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,OAAO,CAAC,KAAK;IAcb,yGAAyG;IACzG,OAAO,CAAC,IAAI;IASZ,wDAAwD;IACxD,QAAQ,CAAC,GAAG,EAAE,aAAa,CAQzB;IAEI,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAG3B;CACF"}
@@ -0,0 +1,58 @@
1
+ // Worker threads for settle: the CPU work of a batch runs off the main thread, so ingest and pages stay fast and settle uses more cores.
2
+ import { Worker } from "node:worker_threads";
3
+ export class SettlePool {
4
+ slots = [];
5
+ o;
6
+ lastId = 0;
7
+ closed = false;
8
+ constructor(o) {
9
+ this.o = o;
10
+ for (let i = 0; i < o.size; i++)
11
+ this.slots.push(this.spawn());
12
+ }
13
+ get size() {
14
+ return this.slots.length;
15
+ }
16
+ spawn() {
17
+ const entry = this.o.entry ?? new URL("./settle-worker.js", import.meta.url);
18
+ const slot = { worker: new Worker(entry, { workerData: { url: this.o.url }, execArgv: this.o.execArgv }), pending: new Map() };
19
+ slot.worker.on("message", (m) => {
20
+ const w = slot.pending.get(m.id);
21
+ slot.pending.delete(m.id);
22
+ if (m.error === undefined)
23
+ w?.resolve();
24
+ else
25
+ w?.reject(new Error(m.error));
26
+ });
27
+ slot.worker.on("error", (err) => this.lost(slot, err));
28
+ slot.worker.on("exit", (code) => this.lost(slot, new Error(`A settle worker stopped (exit code ${code}).`)));
29
+ return slot;
30
+ }
31
+ /** A worker died: its tasks fail (their traces settle again later), and a new worker takes its place. */
32
+ lost(slot, err) {
33
+ for (const w of slot.pending.values())
34
+ w.reject(err);
35
+ slot.pending.clear();
36
+ const i = this.slots.indexOf(slot);
37
+ if (i < 0 || this.closed)
38
+ return;
39
+ console.error("[wizelens-cloud] A settle worker failed and was started again:", err.message);
40
+ this.slots[i] = this.spawn();
41
+ }
42
+ /** Settle one project task on the least busy worker. */
43
+ run = (task) => {
44
+ if (this.closed)
45
+ return Promise.reject(new Error("The settle workers are closed."));
46
+ const slot = this.slots.reduce((a, b) => (b.pending.size < a.pending.size ? b : a));
47
+ const id = ++this.lastId;
48
+ return new Promise((resolve, reject) => {
49
+ slot.pending.set(id, { resolve, reject });
50
+ slot.worker.postMessage({ id, task });
51
+ });
52
+ };
53
+ async close() {
54
+ this.closed = true;
55
+ await Promise.all(this.slots.map((s) => s.worker.terminate()));
56
+ }
57
+ }
58
+ //# sourceMappingURL=settle-pool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settle-pool.js","sourceRoot":"","sources":["../../../src/telemetry/ch/settle-pool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import { type FactTable, type SettleDelta } from "@wizeworks/lens-core";
2
+ import type { ChClient } from "./http.js";
3
+ import { type Keep } from "./util.js";
4
+ type Row = Record<string, unknown>;
5
+ /** How long a fact row is kept: log rows (lines, their search rows and attributes) by the log retention, the rest by the trace retention. */
6
+ export declare function factKeepOf(table: FactTable, r: Row, keep: Keep): number;
7
+ /** Fact rows as objects, with their version and expiry. */
8
+ export declare function factObjects(rows: Record<FactTable, unknown[][]>, ver: number, expireOf: (r: Row, table: FactTable) => number): Record<FactTable, Row[]>;
9
+ /** Rows the re-settled traces had before and no longer have, as tombstones. Only traces settled before can have any. */
10
+ export declare function tombstones(ch: ChClient, project: string, traceIds: readonly string[], fresh: Record<FactTable, Row[]>, ver: number): Promise<Record<FactTable, Row[]>>;
11
+ /** Settings that make one batch's insert into a table safe to send again: ClickHouse keeps the first copy of a token. */
12
+ export type Label = (table: string) => Record<string, string>;
13
+ /** Write a merged settle delta into every tier. Rows expire by their project's retention; log kinds by its log retention. */
14
+ export declare function writeDeltas(ch: ChClient, delta: SettleDelta, keepOf: (project: string) => Keep, label: Label): Promise<void>;
15
+ export {};
16
+ //# sourceMappingURL=settle-rows.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settle-rows.d.ts","sourceRoot":"","sources":["../../../src/telemetry/ch/settle-rows.ts"],"names":[],"mappings":"AACA,OAAO,EAA6B,KAAK,SAAS,EAA4E,KAAK,WAAW,EAAS,MAAM,sBAAsB,CAAC;AAEpL,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,KAAK,IAAI,EAAoB,MAAM,WAAW,CAAC;AAExD,KAAK,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAMnC,6IAA6I;AAC7I,wBAAgB,UAAU,CAAC,KAAK,EAAE,SAAS,EAAE,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,GAAG,MAAM,CAIvE;AAED,2DAA2D;AAC3D,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,CAAC,SAAS,EAAE,OAAO,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,KAAK,MAAM,GAAG,MAAM,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,CAUvJ;AAED,wHAAwH;AACxH,wBAAsB,UAAU,CAAC,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC,CAa5K;AAoBD,yHAAyH;AACzH,MAAM,MAAM,KAAK,GAAG,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAE9D,6HAA6H;AAC7H,wBAAsB,WAAW,CAAC,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,EAAE,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAelI"}
@@ -0,0 +1,74 @@
1
+ // What one settle batch writes to ClickHouse: fact rows, tombstones for rows a trace no longer has, and rollup deltas.
2
+ import { FACT_COLUMNS, FACT_TABLES, IDS_MAX, isLooseTraceId, LOG_KINDS, NONE_HIGH, NONE_LOW, TIERS } from "@wizeworks/lens-core";
3
+ import { FACT_KEYS } from "./schema-facts.js";
4
+ import { logKeepOf, rowOf } from "./util.js";
5
+ const COUNTERS = ["c0", "c1", "c2", "c3", "c4", "c5"];
6
+ const keyCols = (t) => FACT_KEYS[`${t}_t`];
7
+ const keyOf = (t, r) => [r.trace_id, ...keyCols(t).map((c) => r[c])].map((v) => JSON.stringify(v ?? null)).join("|");
8
+ /** How long a fact row is kept: log rows (lines, their search rows and attributes) by the log retention, the rest by the trace retention. */
9
+ export function factKeepOf(table, r, keep) {
10
+ const id = String(r.trace_id);
11
+ const logRow = table === "fact_logs" || (table === "fact_search" && r.kind === "logs") || (table === "fact_attrs" && r.src === "l");
12
+ return logRow ? logKeepOf(id, keep) : isLooseTraceId(id) ? keep.logMs : keep.ms;
13
+ }
14
+ /** Fact rows as objects, with their version and expiry. */
15
+ export function factObjects(rows, ver, expireOf) {
16
+ const out = {};
17
+ for (const t of FACT_TABLES) {
18
+ const cols = ["project_id", ...FACT_COLUMNS[t]];
19
+ out[t] = rows[t].map((values) => {
20
+ const r = rowOf(cols, values);
21
+ return { ...r, ver, is_deleted: 0, expire_ms: expireOf(r, t) };
22
+ });
23
+ }
24
+ return out;
25
+ }
26
+ /** Rows the re-settled traces had before and no longer have, as tombstones. Only traces settled before can have any. */
27
+ export async function tombstones(ch, project, traceIds, fresh, ver) {
28
+ const out = {};
29
+ for (const t of FACT_TABLES) {
30
+ out[t] = [];
31
+ if (!traceIds.length)
32
+ continue;
33
+ const cols = ["trace_id", ...keyCols(t)];
34
+ const sql = `SELECT ${cols.join(", ")} FROM ${t}_t FINAL WHERE project_id = {p1:String} AND has({p2:Array(String)}, trace_id)`;
35
+ const keep = new Set(fresh[t].map((r) => keyOf(t, r)));
36
+ for (const old of await ch.query(sql, [project, traceIds])) {
37
+ if (!keep.has(keyOf(t, old)))
38
+ out[t].push({ project_id: project, ...old, ver, is_deleted: 1, expire_ms: NONE_HIGH });
39
+ }
40
+ }
41
+ return out;
42
+ }
43
+ const ROLLUP_INPUT = [
44
+ "project_id String, env String, kind String, key String, bucket_ms Float64, n Float64, err Float64, sum_v Float64",
45
+ ...COUNTERS.map((c) => `${c} Float64`),
46
+ "first_ms Float64, last_ms Float64, top_rank Float64, top Nullable(String), ids String, expire_ms Float64",
47
+ ].join(", ");
48
+ /** Deltas add into the merge tables; a batch's deltas for one bucket and key become one row. */
49
+ function rollupInsert(table) {
50
+ const sums = ["n", "err", "sum_v", ...COUNTERS].map((c) => `sum(${c})`).join(", ");
51
+ const ids = `groupArraySortedArrayState(${IDS_MAX})(arrayMap(x -> (-last_ms, x), arrayFilter(x -> x != '', splitByChar(' ', ids))))`;
52
+ return `${table}_t SELECT project_id, env, kind, key, bucket_ms, ${sums}, min(first_ms), max(last_ms), max(top_rank), argMaxState(top, top_rank), ${ids}, max(expire_ms)
53
+ FROM input('${ROLLUP_INPUT}') GROUP BY project_id, env, kind, key, bucket_ms`;
54
+ }
55
+ const HIST_INPUT = "project_id String, env String, kind String, key String, bucket_ms Float64, bin Int32, cnt Float64, expire_ms Float64";
56
+ const histInsert = (table) => `${table}_t SELECT project_id, env, kind, key, bucket_ms, bin, sum(cnt), max(expire_ms) FROM input('${HIST_INPUT}') GROUP BY project_id, env, kind, key, bucket_ms, bin`;
57
+ /** Write a merged settle delta into every tier. Rows expire by their project's retention; log kinds by its log retention. */
58
+ export async function writeDeltas(ch, delta, keepOf, label) {
59
+ const ms = (project, kind) => (LOG_KINDS.has(kind) ? keepOf(project).logMs : keepOf(project).ms);
60
+ const writes = [];
61
+ for (const tier of TIERS) {
62
+ const rollups = delta.rollup.filter((r) => r.tier === tier.name).map((r) => ({
63
+ project_id: r.project, env: r.env, kind: r.kind, key: r.key, bucket_ms: r.bucket, n: r.n, err: r.err, sum_v: r.sum,
64
+ ...Object.fromEntries(COUNTERS.map((c, i) => [c, r.c[i] ?? 0])), first_ms: r.firstMs ?? NONE_HIGH, last_ms: r.lastMs ?? NONE_LOW,
65
+ top_rank: r.topRank ?? NONE_LOW, top: r.topRank === null ? null : JSON.stringify(r.top ?? null), ids: r.ids, expire_ms: r.bucket + ms(r.project, r.kind),
66
+ }));
67
+ const hists = delta.hist.filter((h) => h.tier === tier.name).map((h) => ({
68
+ project_id: h.project, env: h.env, kind: h.kind, key: h.key, bucket_ms: h.bucket, bin: h.bin, cnt: h.cnt, expire_ms: h.bucket + ms(h.project, h.kind),
69
+ }));
70
+ writes.push(ch.insert(rollupInsert(tier.table), rollups, label(tier.table)), ch.insert(histInsert(tier.hist), hists, label(tier.hist)));
71
+ }
72
+ await Promise.all(writes);
73
+ }
74
+ //# sourceMappingURL=settle-rows.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settle-rows.js","sourceRoot":"","sources":["../../../src/telemetry/ch/settle-rows.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import { type FactOptions } from "@wizeworks/lens-core";
2
+ import type { ChClient } from "./http.js";
3
+ import type { Dirty } from "./queue.js";
4
+ /** One project's part of a batch. Plain data, so it can go to a worker thread. */
5
+ export interface ProjectTask {
6
+ project: string;
7
+ items: Dirty[];
8
+ now: number;
9
+ retentionMs: number;
10
+ /** How long log rows are kept for this project. */
11
+ logRetentionMs: number;
12
+ /** The project's thresholds. */
13
+ facts?: Partial<FactOptions>;
14
+ /** The row version, from the main thread, so versions only grow. */
15
+ ver: number;
16
+ }
17
+ /** Settles one project's part of a batch. Resolves once every row is written. */
18
+ export type ProjectRunner = (task: ProjectTask) => Promise<void>;
19
+ /** Settle one project's part of a batch. */
20
+ export declare function settleProject(ch: ChClient, t: ProjectTask): Promise<void>;
21
+ //# sourceMappingURL=settle-work.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settle-work.d.ts","sourceRoot":"","sources":["../../../src/telemetry/ch/settle-work.ts"],"names":[],"mappings":"AACA,OAAO,EAAW,KAAK,WAAW,EAAmJ,MAAM,sBAAsB,CAAC;AAClN,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAMxC,kFAAkF;AAClF,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,KAAK,EAAE,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,EAAE,MAAM,CAAC;IACpB,mDAAmD;IACnD,cAAc,EAAE,MAAM,CAAC;IACvB,gCAAgC;IAChC,KAAK,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;IAC7B,oEAAoE;IACpE,GAAG,EAAE,MAAM,CAAC;CACb;AAED,iFAAiF;AACjF,MAAM,MAAM,aAAa,GAAG,CAAC,IAAI,EAAE,WAAW,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAwDjE,4CAA4C;AAC5C,wBAAsB,aAAa,CAAC,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAE/E"}