@marinoscar/platform-web 0.0.0-stage → 0.1.0-next.3

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 (356) hide show
  1. package/CHANGELOG.md +42 -0
  2. package/LICENSE +21 -0
  3. package/README.md +96 -2
  4. package/dist/core/api-client.d.ts +112 -0
  5. package/dist/core/api-client.d.ts.map +1 -0
  6. package/dist/core/api-client.js +24 -0
  7. package/dist/core/api-client.js.map +1 -0
  8. package/dist/core/host.d.ts +74 -0
  9. package/dist/core/host.d.ts.map +1 -0
  10. package/dist/core/host.js +84 -0
  11. package/dist/core/host.js.map +1 -0
  12. package/dist/core/index.d.ts +7 -0
  13. package/dist/core/index.d.ts.map +1 -0
  14. package/dist/core/index.js +5 -0
  15. package/dist/core/index.js.map +1 -0
  16. package/dist/core/settings-page.d.ts +47 -0
  17. package/dist/core/settings-page.d.ts.map +1 -0
  18. package/dist/core/settings-page.js +5 -0
  19. package/dist/core/settings-page.js.map +1 -0
  20. package/dist/core/viewer.d.ts +14 -0
  21. package/dist/core/viewer.d.ts.map +1 -0
  22. package/dist/core/viewer.js +4 -0
  23. package/dist/core/viewer.js.map +1 -0
  24. package/dist/doctor/headless/categories.d.ts +31 -0
  25. package/dist/doctor/headless/categories.d.ts.map +1 -0
  26. package/dist/doctor/headless/categories.js +41 -0
  27. package/dist/doctor/headless/categories.js.map +1 -0
  28. package/dist/doctor/headless/client.d.ts +33 -0
  29. package/dist/doctor/headless/client.d.ts.map +1 -0
  30. package/dist/doctor/headless/client.js +31 -0
  31. package/dist/doctor/headless/client.js.map +1 -0
  32. package/dist/doctor/headless/contract.d.ts +18 -0
  33. package/dist/doctor/headless/contract.d.ts.map +1 -0
  34. package/dist/doctor/headless/contract.js +15 -0
  35. package/dist/doctor/headless/contract.js.map +1 -0
  36. package/dist/doctor/headless/index.d.ts +12 -0
  37. package/dist/doctor/headless/index.d.ts.map +1 -0
  38. package/dist/doctor/headless/index.js +8 -0
  39. package/dist/doctor/headless/index.js.map +1 -0
  40. package/dist/doctor/headless/use-doctor.d.ts +36 -0
  41. package/dist/doctor/headless/use-doctor.d.ts.map +1 -0
  42. package/dist/doctor/headless/use-doctor.js +80 -0
  43. package/dist/doctor/headless/use-doctor.js.map +1 -0
  44. package/dist/doctor/headless/use-support-bundle-download.d.ts +68 -0
  45. package/dist/doctor/headless/use-support-bundle-download.d.ts.map +1 -0
  46. package/dist/doctor/headless/use-support-bundle-download.js +135 -0
  47. package/dist/doctor/headless/use-support-bundle-download.js.map +1 -0
  48. package/dist/doctor/internal/relative-time.d.ts +2 -0
  49. package/dist/doctor/internal/relative-time.d.ts.map +1 -0
  50. package/dist/doctor/internal/relative-time.js +29 -0
  51. package/dist/doctor/internal/relative-time.js.map +1 -0
  52. package/dist/doctor/internal/status-colors.d.ts +5 -0
  53. package/dist/doctor/internal/status-colors.d.ts.map +1 -0
  54. package/dist/doctor/internal/status-colors.js +29 -0
  55. package/dist/doctor/internal/status-colors.js.map +1 -0
  56. package/dist/doctor/internal/use-is-mounted.d.ts +2 -0
  57. package/dist/doctor/internal/use-is-mounted.d.ts.map +1 -0
  58. package/dist/doctor/internal/use-is-mounted.js +15 -0
  59. package/dist/doctor/internal/use-is-mounted.js.map +1 -0
  60. package/dist/doctor/ui/check-row.d.ts +54 -0
  61. package/dist/doctor/ui/check-row.d.ts.map +1 -0
  62. package/dist/doctor/ui/check-row.js +100 -0
  63. package/dist/doctor/ui/check-row.js.map +1 -0
  64. package/dist/doctor/ui/copy.d.ts +3 -0
  65. package/dist/doctor/ui/copy.d.ts.map +1 -0
  66. package/dist/doctor/ui/copy.js +6 -0
  67. package/dist/doctor/ui/copy.js.map +1 -0
  68. package/dist/doctor/ui/doctor-page.d.ts +50 -0
  69. package/dist/doctor/ui/doctor-page.d.ts.map +1 -0
  70. package/dist/doctor/ui/doctor-page.js +152 -0
  71. package/dist/doctor/ui/doctor-page.js.map +1 -0
  72. package/dist/doctor/ui/index.d.ts +8 -0
  73. package/dist/doctor/ui/index.d.ts.map +1 -0
  74. package/dist/doctor/ui/index.js +7 -0
  75. package/dist/doctor/ui/index.js.map +1 -0
  76. package/dist/doctor/ui/settings-page.d.ts +20 -0
  77. package/dist/doctor/ui/settings-page.d.ts.map +1 -0
  78. package/dist/doctor/ui/settings-page.js +32 -0
  79. package/dist/doctor/ui/settings-page.js.map +1 -0
  80. package/dist/doctor/ui/support-bundle-button.d.ts +37 -0
  81. package/dist/doctor/ui/support-bundle-button.d.ts.map +1 -0
  82. package/dist/doctor/ui/support-bundle-button.js +39 -0
  83. package/dist/doctor/ui/support-bundle-button.js.map +1 -0
  84. package/dist/index.d.ts +11 -0
  85. package/dist/index.d.ts.map +1 -0
  86. package/dist/index.js +11 -0
  87. package/dist/index.js.map +1 -0
  88. package/dist/telemetry/headless/adapters/TelemetryWebAdapters.d.ts +106 -0
  89. package/dist/telemetry/headless/adapters/TelemetryWebAdapters.d.ts.map +1 -0
  90. package/dist/telemetry/headless/adapters/TelemetryWebAdapters.js +58 -0
  91. package/dist/telemetry/headless/adapters/TelemetryWebAdapters.js.map +1 -0
  92. package/dist/telemetry/headless/context/TelemetryConfigProvider.d.ts +43 -0
  93. package/dist/telemetry/headless/context/TelemetryConfigProvider.d.ts.map +1 -0
  94. package/dist/telemetry/headless/context/TelemetryConfigProvider.js +24 -0
  95. package/dist/telemetry/headless/context/TelemetryConfigProvider.js.map +1 -0
  96. package/dist/telemetry/headless/context/telemetryConfig.d.ts +68 -0
  97. package/dist/telemetry/headless/context/telemetryConfig.d.ts.map +1 -0
  98. package/dist/telemetry/headless/context/telemetryConfig.js +119 -0
  99. package/dist/telemetry/headless/context/telemetryConfig.js.map +1 -0
  100. package/dist/telemetry/headless/guards/RequireTelemetryEnabled.d.ts +35 -0
  101. package/dist/telemetry/headless/guards/RequireTelemetryEnabled.d.ts.map +1 -0
  102. package/dist/telemetry/headless/guards/RequireTelemetryEnabled.js +44 -0
  103. package/dist/telemetry/headless/guards/RequireTelemetryEnabled.js.map +1 -0
  104. package/dist/telemetry/headless/hooks/useTelemetryAdmin.d.ts +40 -0
  105. package/dist/telemetry/headless/hooks/useTelemetryAdmin.d.ts.map +1 -0
  106. package/dist/telemetry/headless/hooks/useTelemetryAdmin.js +111 -0
  107. package/dist/telemetry/headless/hooks/useTelemetryAdmin.js.map +1 -0
  108. package/dist/telemetry/headless/hooks/useTelemetryAssistant.d.ts +120 -0
  109. package/dist/telemetry/headless/hooks/useTelemetryAssistant.d.ts.map +1 -0
  110. package/dist/telemetry/headless/hooks/useTelemetryAssistant.js +185 -0
  111. package/dist/telemetry/headless/hooks/useTelemetryAssistant.js.map +1 -0
  112. package/dist/telemetry/headless/hooks/useTelemetryAssistantAvailable.d.ts +12 -0
  113. package/dist/telemetry/headless/hooks/useTelemetryAssistantAvailable.d.ts.map +1 -0
  114. package/dist/telemetry/headless/hooks/useTelemetryAssistantAvailable.js +36 -0
  115. package/dist/telemetry/headless/hooks/useTelemetryAssistantAvailable.js.map +1 -0
  116. package/dist/telemetry/headless/hooks/useTelemetryConnection.d.ts +46 -0
  117. package/dist/telemetry/headless/hooks/useTelemetryConnection.d.ts.map +1 -0
  118. package/dist/telemetry/headless/hooks/useTelemetryConnection.js +133 -0
  119. package/dist/telemetry/headless/hooks/useTelemetryConnection.js.map +1 -0
  120. package/dist/telemetry/headless/hooks/useTelemetryDashboard.d.ts +147 -0
  121. package/dist/telemetry/headless/hooks/useTelemetryDashboard.d.ts.map +1 -0
  122. package/dist/telemetry/headless/hooks/useTelemetryDashboard.js +231 -0
  123. package/dist/telemetry/headless/hooks/useTelemetryDashboard.js.map +1 -0
  124. package/dist/telemetry/headless/hooks/useTelemetryExplorer.d.ts +95 -0
  125. package/dist/telemetry/headless/hooks/useTelemetryExplorer.d.ts.map +1 -0
  126. package/dist/telemetry/headless/hooks/useTelemetryExplorer.js +197 -0
  127. package/dist/telemetry/headless/hooks/useTelemetryExplorer.js.map +1 -0
  128. package/dist/telemetry/headless/hooks/useTelemetryStack.d.ts +69 -0
  129. package/dist/telemetry/headless/hooks/useTelemetryStack.d.ts.map +1 -0
  130. package/dist/telemetry/headless/hooks/useTelemetryStack.js +129 -0
  131. package/dist/telemetry/headless/hooks/useTelemetryStack.js.map +1 -0
  132. package/dist/telemetry/headless/index.d.ts +34 -0
  133. package/dist/telemetry/headless/index.d.ts.map +1 -0
  134. package/dist/telemetry/headless/index.js +34 -0
  135. package/dist/telemetry/headless/index.js.map +1 -0
  136. package/dist/telemetry/headless/lib/assistantExport.d.ts +12 -0
  137. package/dist/telemetry/headless/lib/assistantExport.d.ts.map +1 -0
  138. package/dist/telemetry/headless/lib/assistantExport.js +116 -0
  139. package/dist/telemetry/headless/lib/assistantExport.js.map +1 -0
  140. package/dist/telemetry/headless/lib/dashboard/assistantPrompt.d.ts +91 -0
  141. package/dist/telemetry/headless/lib/dashboard/assistantPrompt.d.ts.map +1 -0
  142. package/dist/telemetry/headless/lib/dashboard/assistantPrompt.js +246 -0
  143. package/dist/telemetry/headless/lib/dashboard/assistantPrompt.js.map +1 -0
  144. package/dist/telemetry/headless/lib/dashboardState.d.ts +58 -0
  145. package/dist/telemetry/headless/lib/dashboardState.d.ts.map +1 -0
  146. package/dist/telemetry/headless/lib/dashboardState.js +153 -0
  147. package/dist/telemetry/headless/lib/dashboardState.js.map +1 -0
  148. package/dist/telemetry/headless/lib/explorerHandoff.d.ts +62 -0
  149. package/dist/telemetry/headless/lib/explorerHandoff.d.ts.map +1 -0
  150. package/dist/telemetry/headless/lib/explorerHandoff.js +77 -0
  151. package/dist/telemetry/headless/lib/explorerHandoff.js.map +1 -0
  152. package/dist/telemetry/headless/lib/format.d.ts +113 -0
  153. package/dist/telemetry/headless/lib/format.d.ts.map +1 -0
  154. package/dist/telemetry/headless/lib/format.js +280 -0
  155. package/dist/telemetry/headless/lib/format.js.map +1 -0
  156. package/dist/telemetry/headless/lib/metrics/metricSections.d.ts +44 -0
  157. package/dist/telemetry/headless/lib/metrics/metricSections.d.ts.map +1 -0
  158. package/dist/telemetry/headless/lib/metrics/metricSections.js +61 -0
  159. package/dist/telemetry/headless/lib/metrics/metricSections.js.map +1 -0
  160. package/dist/telemetry/headless/lib/metrics/topNPreference.d.ts +15 -0
  161. package/dist/telemetry/headless/lib/metrics/topNPreference.d.ts.map +1 -0
  162. package/dist/telemetry/headless/lib/metrics/topNPreference.js +33 -0
  163. package/dist/telemetry/headless/lib/metrics/topNPreference.js.map +1 -0
  164. package/dist/telemetry/headless/lib/queryHistory.d.ts +20 -0
  165. package/dist/telemetry/headless/lib/queryHistory.d.ts.map +1 -0
  166. package/dist/telemetry/headless/lib/queryHistory.js +53 -0
  167. package/dist/telemetry/headless/lib/queryHistory.js.map +1 -0
  168. package/dist/telemetry/headless/lib/starterQueries.d.ts +48 -0
  169. package/dist/telemetry/headless/lib/starterQueries.d.ts.map +1 -0
  170. package/dist/telemetry/headless/lib/starterQueries.js +84 -0
  171. package/dist/telemetry/headless/lib/starterQueries.js.map +1 -0
  172. package/dist/telemetry/headless/lib/traceLink.d.ts +26 -0
  173. package/dist/telemetry/headless/lib/traceLink.d.ts.map +1 -0
  174. package/dist/telemetry/headless/lib/traceLink.js +32 -0
  175. package/dist/telemetry/headless/lib/traceLink.js.map +1 -0
  176. package/dist/telemetry/headless/lib/unknownRoutes.d.ts +23 -0
  177. package/dist/telemetry/headless/lib/unknownRoutes.d.ts.map +1 -0
  178. package/dist/telemetry/headless/lib/unknownRoutes.js +35 -0
  179. package/dist/telemetry/headless/lib/unknownRoutes.js.map +1 -0
  180. package/dist/telemetry/headless/services/client.d.ts +144 -0
  181. package/dist/telemetry/headless/services/client.d.ts.map +1 -0
  182. package/dist/telemetry/headless/services/client.js +144 -0
  183. package/dist/telemetry/headless/services/client.js.map +1 -0
  184. package/dist/telemetry/headless/services/telemetry.d.ts +483 -0
  185. package/dist/telemetry/headless/services/telemetry.d.ts.map +1 -0
  186. package/dist/telemetry/headless/services/telemetry.js +190 -0
  187. package/dist/telemetry/headless/services/telemetry.js.map +1 -0
  188. package/dist/telemetry/headless/services/telemetryDashboard.d.ts +321 -0
  189. package/dist/telemetry/headless/services/telemetryDashboard.d.ts.map +1 -0
  190. package/dist/telemetry/headless/services/telemetryDashboard.js +103 -0
  191. package/dist/telemetry/headless/services/telemetryDashboard.js.map +1 -0
  192. package/dist/telemetry/internal/useIsMounted.d.ts +9 -0
  193. package/dist/telemetry/internal/useIsMounted.d.ts.map +1 -0
  194. package/dist/telemetry/internal/useIsMounted.js +19 -0
  195. package/dist/telemetry/internal/useIsMounted.js.map +1 -0
  196. package/dist/telemetry/internal/useVisiblePolling.d.ts +55 -0
  197. package/dist/telemetry/internal/useVisiblePolling.d.ts.map +1 -0
  198. package/dist/telemetry/internal/useVisiblePolling.js +96 -0
  199. package/dist/telemetry/internal/useVisiblePolling.js.map +1 -0
  200. package/dist/telemetry/internal/visuallyHidden.d.ts +12 -0
  201. package/dist/telemetry/internal/visuallyHidden.d.ts.map +1 -0
  202. package/dist/telemetry/internal/visuallyHidden.js +15 -0
  203. package/dist/telemetry/internal/visuallyHidden.js.map +1 -0
  204. package/dist/telemetry/theme/augment.d.ts +65 -0
  205. package/dist/telemetry/theme/augment.d.ts.map +1 -0
  206. package/dist/telemetry/theme/augment.js +37 -0
  207. package/dist/telemetry/theme/augment.js.map +1 -0
  208. package/dist/telemetry/theme/telemetryTokens.d.ts +121 -0
  209. package/dist/telemetry/theme/telemetryTokens.d.ts.map +1 -0
  210. package/dist/telemetry/theme/telemetryTokens.js +129 -0
  211. package/dist/telemetry/theme/telemetryTokens.js.map +1 -0
  212. package/dist/telemetry/ui/admin.d.ts +35 -0
  213. package/dist/telemetry/ui/admin.d.ts.map +1 -0
  214. package/dist/telemetry/ui/admin.js +58 -0
  215. package/dist/telemetry/ui/admin.js.map +1 -0
  216. package/dist/telemetry/ui/components/AssistantContainer.d.ts +35 -0
  217. package/dist/telemetry/ui/components/AssistantContainer.d.ts.map +1 -0
  218. package/dist/telemetry/ui/components/AssistantContainer.js +83 -0
  219. package/dist/telemetry/ui/components/AssistantContainer.js.map +1 -0
  220. package/dist/telemetry/ui/components/AssistantPanel.d.ts +22 -0
  221. package/dist/telemetry/ui/components/AssistantPanel.d.ts.map +1 -0
  222. package/dist/telemetry/ui/components/AssistantPanel.js +150 -0
  223. package/dist/telemetry/ui/components/AssistantPanel.js.map +1 -0
  224. package/dist/telemetry/ui/components/AssistantReport.d.ts +13 -0
  225. package/dist/telemetry/ui/components/AssistantReport.d.ts.map +1 -0
  226. package/dist/telemetry/ui/components/AssistantReport.js +89 -0
  227. package/dist/telemetry/ui/components/AssistantReport.js.map +1 -0
  228. package/dist/telemetry/ui/components/AssistantTimeline.d.ts +10 -0
  229. package/dist/telemetry/ui/components/AssistantTimeline.d.ts.map +1 -0
  230. package/dist/telemetry/ui/components/AssistantTimeline.js +84 -0
  231. package/dist/telemetry/ui/components/AssistantTimeline.js.map +1 -0
  232. package/dist/telemetry/ui/components/ResultsGrid.d.ts +10 -0
  233. package/dist/telemetry/ui/components/ResultsGrid.d.ts.map +1 -0
  234. package/dist/telemetry/ui/components/ResultsGrid.js +71 -0
  235. package/dist/telemetry/ui/components/ResultsGrid.js.map +1 -0
  236. package/dist/telemetry/ui/components/SchemaPanel.d.ts +9 -0
  237. package/dist/telemetry/ui/components/SchemaPanel.d.ts.map +1 -0
  238. package/dist/telemetry/ui/components/SchemaPanel.js +42 -0
  239. package/dist/telemetry/ui/components/SchemaPanel.js.map +1 -0
  240. package/dist/telemetry/ui/components/SqlEditor.d.ts +21 -0
  241. package/dist/telemetry/ui/components/SqlEditor.d.ts.map +1 -0
  242. package/dist/telemetry/ui/components/SqlEditor.js +60 -0
  243. package/dist/telemetry/ui/components/SqlEditor.js.map +1 -0
  244. package/dist/telemetry/ui/components/TelemetryConnectionSection.d.ts +14 -0
  245. package/dist/telemetry/ui/components/TelemetryConnectionSection.d.ts.map +1 -0
  246. package/dist/telemetry/ui/components/TelemetryConnectionSection.js +243 -0
  247. package/dist/telemetry/ui/components/TelemetryConnectionSection.js.map +1 -0
  248. package/dist/telemetry/ui/components/TelemetryCrossLink.d.ts +12 -0
  249. package/dist/telemetry/ui/components/TelemetryCrossLink.d.ts.map +1 -0
  250. package/dist/telemetry/ui/components/TelemetryCrossLink.js +21 -0
  251. package/dist/telemetry/ui/components/TelemetryCrossLink.js.map +1 -0
  252. package/dist/telemetry/ui/components/TelemetryServicesSection.d.ts +23 -0
  253. package/dist/telemetry/ui/components/TelemetryServicesSection.d.ts.map +1 -0
  254. package/dist/telemetry/ui/components/TelemetryServicesSection.js +138 -0
  255. package/dist/telemetry/ui/components/TelemetryServicesSection.js.map +1 -0
  256. package/dist/telemetry/ui/components/TelemetrySpinner.d.ts +3 -0
  257. package/dist/telemetry/ui/components/TelemetrySpinner.d.ts.map +1 -0
  258. package/dist/telemetry/ui/components/TelemetrySpinner.js +14 -0
  259. package/dist/telemetry/ui/components/TelemetrySpinner.js.map +1 -0
  260. package/dist/telemetry/ui/components/dashboard/ApiTimelineChart.d.ts +17 -0
  261. package/dist/telemetry/ui/components/dashboard/ApiTimelineChart.d.ts.map +1 -0
  262. package/dist/telemetry/ui/components/dashboard/ApiTimelineChart.js +70 -0
  263. package/dist/telemetry/ui/components/dashboard/ApiTimelineChart.js.map +1 -0
  264. package/dist/telemetry/ui/components/dashboard/DashboardFilterBar.d.ts +39 -0
  265. package/dist/telemetry/ui/components/dashboard/DashboardFilterBar.d.ts.map +1 -0
  266. package/dist/telemetry/ui/components/dashboard/DashboardFilterBar.js +143 -0
  267. package/dist/telemetry/ui/components/dashboard/DashboardFilterBar.js.map +1 -0
  268. package/dist/telemetry/ui/components/dashboard/DashboardPanel.d.ts +58 -0
  269. package/dist/telemetry/ui/components/dashboard/DashboardPanel.d.ts.map +1 -0
  270. package/dist/telemetry/ui/components/dashboard/DashboardPanel.js +62 -0
  271. package/dist/telemetry/ui/components/dashboard/DashboardPanel.js.map +1 -0
  272. package/dist/telemetry/ui/components/dashboard/EventsFeed.d.ts +21 -0
  273. package/dist/telemetry/ui/components/dashboard/EventsFeed.d.ts.map +1 -0
  274. package/dist/telemetry/ui/components/dashboard/EventsFeed.js +96 -0
  275. package/dist/telemetry/ui/components/dashboard/EventsFeed.js.map +1 -0
  276. package/dist/telemetry/ui/components/dashboard/KpiTiles.d.ts +13 -0
  277. package/dist/telemetry/ui/components/dashboard/KpiTiles.d.ts.map +1 -0
  278. package/dist/telemetry/ui/components/dashboard/KpiTiles.js +82 -0
  279. package/dist/telemetry/ui/components/dashboard/KpiTiles.js.map +1 -0
  280. package/dist/telemetry/ui/components/dashboard/LogSeverityChart.d.ts +8 -0
  281. package/dist/telemetry/ui/components/dashboard/LogSeverityChart.d.ts.map +1 -0
  282. package/dist/telemetry/ui/components/dashboard/LogSeverityChart.js +34 -0
  283. package/dist/telemetry/ui/components/dashboard/LogSeverityChart.js.map +1 -0
  284. package/dist/telemetry/ui/components/dashboard/TopProblems.d.ts +19 -0
  285. package/dist/telemetry/ui/components/dashboard/TopProblems.d.ts.map +1 -0
  286. package/dist/telemetry/ui/components/dashboard/TopProblems.js +61 -0
  287. package/dist/telemetry/ui/components/dashboard/TopProblems.js.map +1 -0
  288. package/dist/telemetry/ui/components/dashboard/UnknownRoutesPanel.d.ts +12 -0
  289. package/dist/telemetry/ui/components/dashboard/UnknownRoutesPanel.d.ts.map +1 -0
  290. package/dist/telemetry/ui/components/dashboard/UnknownRoutesPanel.js +36 -0
  291. package/dist/telemetry/ui/components/dashboard/UnknownRoutesPanel.js.map +1 -0
  292. package/dist/telemetry/ui/components/dashboard/VerdictBanner.d.ts +35 -0
  293. package/dist/telemetry/ui/components/dashboard/VerdictBanner.d.ts.map +1 -0
  294. package/dist/telemetry/ui/components/dashboard/VerdictBanner.js +68 -0
  295. package/dist/telemetry/ui/components/dashboard/VerdictBanner.js.map +1 -0
  296. package/dist/telemetry/ui/components/dashboard/ZoomBrush.d.ts +9 -0
  297. package/dist/telemetry/ui/components/dashboard/ZoomBrush.d.ts.map +1 -0
  298. package/dist/telemetry/ui/components/dashboard/ZoomBrush.js +96 -0
  299. package/dist/telemetry/ui/components/dashboard/ZoomBrush.js.map +1 -0
  300. package/dist/telemetry/ui/components/dashboard/metrics/MetricSections.d.ts +75 -0
  301. package/dist/telemetry/ui/components/dashboard/metrics/MetricSections.d.ts.map +1 -0
  302. package/dist/telemetry/ui/components/dashboard/metrics/MetricSections.js +247 -0
  303. package/dist/telemetry/ui/components/dashboard/metrics/MetricSections.js.map +1 -0
  304. package/dist/telemetry/ui/components/dashboard/metrics/MetricSeriesChart.d.ts +19 -0
  305. package/dist/telemetry/ui/components/dashboard/metrics/MetricSeriesChart.d.ts.map +1 -0
  306. package/dist/telemetry/ui/components/dashboard/metrics/MetricSeriesChart.js +64 -0
  307. package/dist/telemetry/ui/components/dashboard/metrics/MetricSeriesChart.js.map +1 -0
  308. package/dist/telemetry/ui/components/dashboard/metrics/MetricTable.d.ts +74 -0
  309. package/dist/telemetry/ui/components/dashboard/metrics/MetricTable.d.ts.map +1 -0
  310. package/dist/telemetry/ui/components/dashboard/metrics/MetricTable.js +126 -0
  311. package/dist/telemetry/ui/components/dashboard/metrics/MetricTable.js.map +1 -0
  312. package/dist/telemetry/ui/components/dashboard/severity.d.ts +43 -0
  313. package/dist/telemetry/ui/components/dashboard/severity.d.ts.map +1 -0
  314. package/dist/telemetry/ui/components/dashboard/severity.js +66 -0
  315. package/dist/telemetry/ui/components/dashboard/severity.js.map +1 -0
  316. package/dist/telemetry/ui/components/dashboard/timelineAxis.d.ts +11 -0
  317. package/dist/telemetry/ui/components/dashboard/timelineAxis.d.ts.map +1 -0
  318. package/dist/telemetry/ui/components/dashboard/timelineAxis.js +20 -0
  319. package/dist/telemetry/ui/components/dashboard/timelineAxis.js.map +1 -0
  320. package/dist/telemetry/ui/dashboard-page.d.ts +2 -0
  321. package/dist/telemetry/ui/dashboard-page.d.ts.map +1 -0
  322. package/dist/telemetry/ui/dashboard-page.js +6 -0
  323. package/dist/telemetry/ui/dashboard-page.js.map +1 -0
  324. package/dist/telemetry/ui/explorer-page.d.ts +2 -0
  325. package/dist/telemetry/ui/explorer-page.d.ts.map +1 -0
  326. package/dist/telemetry/ui/explorer-page.js +6 -0
  327. package/dist/telemetry/ui/explorer-page.js.map +1 -0
  328. package/dist/telemetry/ui/index.d.ts +6 -0
  329. package/dist/telemetry/ui/index.d.ts.map +1 -0
  330. package/dist/telemetry/ui/index.js +10 -0
  331. package/dist/telemetry/ui/index.js.map +1 -0
  332. package/dist/telemetry/ui/pages/TelemetryDashboardPage.d.ts +14 -0
  333. package/dist/telemetry/ui/pages/TelemetryDashboardPage.d.ts.map +1 -0
  334. package/dist/telemetry/ui/pages/TelemetryDashboardPage.js +286 -0
  335. package/dist/telemetry/ui/pages/TelemetryDashboardPage.js.map +1 -0
  336. package/dist/telemetry/ui/pages/TelemetryExplorerPage.d.ts +15 -0
  337. package/dist/telemetry/ui/pages/TelemetryExplorerPage.d.ts.map +1 -0
  338. package/dist/telemetry/ui/pages/TelemetryExplorerPage.js +197 -0
  339. package/dist/telemetry/ui/pages/TelemetryExplorerPage.js.map +1 -0
  340. package/dist/telemetry/ui/pages/TelemetrySettingsPage.d.ts +28 -0
  341. package/dist/telemetry/ui/pages/TelemetrySettingsPage.d.ts.map +1 -0
  342. package/dist/telemetry/ui/pages/TelemetrySettingsPage.js +278 -0
  343. package/dist/telemetry/ui/pages/TelemetrySettingsPage.js.map +1 -0
  344. package/dist/telemetry/ui/settings-page.d.ts +2 -0
  345. package/dist/telemetry/ui/settings-page.d.ts.map +1 -0
  346. package/dist/telemetry/ui/settings-page.js +6 -0
  347. package/dist/telemetry/ui/settings-page.js.map +1 -0
  348. package/dist/testing/index.d.ts +3 -0
  349. package/dist/testing/index.d.ts.map +1 -0
  350. package/dist/testing/index.js +4 -0
  351. package/dist/testing/index.js.map +1 -0
  352. package/dist/testing/test-platform-host.d.ts +108 -0
  353. package/dist/testing/test-platform-host.d.ts.map +1 -0
  354. package/dist/testing/test-platform-host.js +101 -0
  355. package/dist/testing/test-platform-host.js.map +1 -0
  356. package/package.json +132 -4
@@ -0,0 +1,91 @@
1
+ /**
2
+ * The question the Telemetry Dashboard's "Ask assistant" / "Explain this"
3
+ * prefills — issue #579, epic #576.
4
+ *
5
+ * A pure function of what the panel SHOWS and the dashboard's window and
6
+ * filters, so the assistant starts from the same picture as the reader:
7
+ *
8
+ * Investigate "\<panel title\>" for \<window\> (\<filters | all services\>).
9
+ * Current state: \<what the panel shows\>.
10
+ * What is most likely causing this, and what should I check next?
11
+ *
12
+ * Bounds: the whole question is at most {@link ASSISTANT_PROMPT_MAX}
13
+ * characters, any one message (a log body, an error, a verdict reason) at most
14
+ * {@link ASSISTANT_PROMPT_MESSAGE_MAX}, lists stop at
15
+ * {@link ASSISTANT_PROMPT_TOP_N} entries, and at most ONE sample trace id is
16
+ * included. The text is prefilled, never sent: the reader can edit it.
17
+ */
18
+ import { type DashboardApiBucket, type DashboardEvent, type DashboardLogsBucket, type DashboardMetricGroup, type DashboardMetricTable, type DashboardRange, type DashboardSeverity, type DashboardTile, type DashboardTopError, type DashboardTopRoute, type DashboardUnknownRoutes, type DashboardVerdictLevel } from '../../services/telemetryDashboard.js';
19
+ export declare const ASSISTANT_PROMPT_MAX = 2000;
20
+ export declare const ASSISTANT_PROMPT_MESSAGE_MAX = 200;
21
+ export declare const ASSISTANT_PROMPT_TOP_N = 5;
22
+ /** What a panel shows, by kind. `title` is the panel's heading. */
23
+ export type AssistantPanelContext = {
24
+ kind: 'verdict';
25
+ title: string;
26
+ verdict: {
27
+ level: DashboardVerdictLevel;
28
+ reasons: string[];
29
+ };
30
+ } | {
31
+ kind: 'tiles';
32
+ title: string;
33
+ tiles: DashboardTile[];
34
+ runtime?: DashboardTile[];
35
+ } | {
36
+ kind: 'api';
37
+ title: string;
38
+ buckets: DashboardApiBucket[];
39
+ } | {
40
+ kind: 'logs';
41
+ title: string;
42
+ buckets: DashboardLogsBucket[];
43
+ severities: DashboardSeverity[];
44
+ } | {
45
+ kind: 'routes';
46
+ title: string;
47
+ items: DashboardTopRoute[];
48
+ }
49
+ /** The summary's unknown API routes (#650). */
50
+ | {
51
+ kind: 'unknownRoutes';
52
+ title: string;
53
+ unknownRoutes: DashboardUnknownRoutes;
54
+ } | {
55
+ kind: 'errors';
56
+ title: string;
57
+ items: DashboardTopError[];
58
+ } | {
59
+ kind: 'events';
60
+ title: string;
61
+ items: DashboardEvent[];
62
+ severities: DashboardSeverity[];
63
+ q: string;
64
+ }
65
+ /** An infrastructure section (#602): its tiles and tables, as `/metrics` returned them. */
66
+ | {
67
+ kind: 'metrics';
68
+ title: string;
69
+ group: DashboardMetricGroup;
70
+ tiles: DashboardTile[];
71
+ tables: DashboardMetricTable[];
72
+ /** For a hint when the section is partial. */
73
+ skipped?: string[];
74
+ };
75
+ /** The dashboard's window and filters (a subset of `DashboardState`). */
76
+ export interface AssistantQuestionContext {
77
+ range: DashboardRange;
78
+ from: string | null;
79
+ to: string | null;
80
+ service: string | null;
81
+ instance: string | null;
82
+ /** The host filter (#602); mentioned for an infrastructure section only, the one place it applies. */
83
+ host?: string | null;
84
+ /** For relative times ("Last data 2m ago"). Default `Date.now()`. */
85
+ now?: number;
86
+ }
87
+ /** Whitespace collapsed, cut to `max` characters with an ellipsis. */
88
+ export declare function clip(text: string, max?: number): string;
89
+ /** The prefilled question for `panel` under the dashboard's `context`. */
90
+ export declare function buildAssistantQuestion(panel: AssistantPanelContext, context: AssistantQuestionContext): string;
91
+ //# sourceMappingURL=assistantPrompt.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assistantPrompt.d.ts","sourceRoot":"","sources":["../../../../../src/telemetry/headless/lib/dashboard/assistantPrompt.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,246 @@
1
+ /**
2
+ * The question the Telemetry Dashboard's "Ask assistant" / "Explain this"
3
+ * prefills — issue #579, epic #576.
4
+ *
5
+ * A pure function of what the panel SHOWS and the dashboard's window and
6
+ * filters, so the assistant starts from the same picture as the reader:
7
+ *
8
+ * Investigate "\<panel title\>" for \<window\> (\<filters | all services\>).
9
+ * Current state: \<what the panel shows\>.
10
+ * What is most likely causing this, and what should I check next?
11
+ *
12
+ * Bounds: the whole question is at most {@link ASSISTANT_PROMPT_MAX}
13
+ * characters, any one message (a log body, an error, a verdict reason) at most
14
+ * {@link ASSISTANT_PROMPT_MESSAGE_MAX}, lists stop at
15
+ * {@link ASSISTANT_PROMPT_TOP_N} entries, and at most ONE sample trace id is
16
+ * included. The text is prefilled, never sent: the reader can edit it.
17
+ */
18
+ import { DASHBOARD_RANGE_LABELS, } from '../../services/telemetryDashboard.js';
19
+ import { formatDuration, formatMetricValue, formatTileValue, toNumber } from '../format.js';
20
+ import { isTraceId } from '../traceLink.js';
21
+ export const ASSISTANT_PROMPT_MAX = 2000;
22
+ export const ASSISTANT_PROMPT_MESSAGE_MAX = 200;
23
+ export const ASSISTANT_PROMPT_TOP_N = 5;
24
+ const CLOSING = 'What is most likely causing this, and what should I check next?';
25
+ const LEVEL_LABELS = {
26
+ healthy: 'Healthy',
27
+ degraded: 'Degraded',
28
+ critical: 'Critical',
29
+ no_data: 'No telemetry received',
30
+ };
31
+ /** Whitespace collapsed, cut to `max` characters with an ellipsis. */
32
+ export function clip(text, max = ASSISTANT_PROMPT_MESSAGE_MAX) {
33
+ const flat = text.replace(/\s+/g, ' ').trim();
34
+ return flat.length > max ? `${flat.slice(0, max - 1)}…` : flat;
35
+ }
36
+ /** `2026-09-27T10:03:00.000Z` → `2026-09-27 10:03 UTC`. */
37
+ function utcMinute(iso) {
38
+ const ms = Date.parse(iso);
39
+ if (!Number.isFinite(ms))
40
+ return iso;
41
+ return `${new Date(ms).toISOString().slice(0, 16).replace('T', ' ')} UTC`;
42
+ }
43
+ function windowText(context) {
44
+ if (context.from && context.to)
45
+ return `${utcMinute(context.from)} – ${utcMinute(context.to)}`;
46
+ return `the ${DASHBOARD_RANGE_LABELS[context.range].toLowerCase()}`;
47
+ }
48
+ function filtersText(context, withHost = false) {
49
+ const parts = [];
50
+ if (context.service)
51
+ parts.push(`service ${clip(context.service)}`);
52
+ if (context.instance)
53
+ parts.push(`instance ${clip(context.instance)}`);
54
+ if (withHost && context.host)
55
+ parts.push(`host ${clip(context.host)}`);
56
+ return parts.length > 0 ? parts.join(', ') : 'all services';
57
+ }
58
+ const count = (n) => Math.round(n).toLocaleString('en-US');
59
+ const pct = (n) => `${n.toLocaleString('en-US', { maximumFractionDigits: 2 })}%`;
60
+ function tileText(tile, now) {
61
+ const current = formatTileValue(tile.value, tile.unit, now);
62
+ const value = `${current.value}${current.unit === '%' || !current.unit ? current.unit : ` ${current.unit}`}`;
63
+ if (tile.unit === 'timestamp' || toNumber(tile.previous) === null)
64
+ return `${clip(tile.label)} ${value}`;
65
+ const before = formatTileValue(tile.previous, tile.unit, now);
66
+ const previous = `${before.value}${before.unit === '%' || !before.unit ? before.unit : ` ${before.unit}`}`;
67
+ return `${clip(tile.label)} ${value} (previous window ${previous})`;
68
+ }
69
+ /** The busiest bucket by `pick`, or null when every value is 0. */
70
+ function peak(buckets, pick) {
71
+ let best = null;
72
+ for (const bucket of buckets) {
73
+ const value = pick(bucket);
74
+ if (value > 0 && (!best || value > best.value))
75
+ best = { t: bucket.t, value };
76
+ }
77
+ return best;
78
+ }
79
+ function apiState(buckets) {
80
+ if (buckets.length === 0)
81
+ return 'no requests in this window';
82
+ let total = 0;
83
+ let s4xx = 0;
84
+ let s5xx = 0;
85
+ for (const b of buckets) {
86
+ total += b.s2xx + b.s3xx + b.s4xx + b.s5xx;
87
+ s4xx += b.s4xx;
88
+ s5xx += b.s5xx;
89
+ }
90
+ if (total === 0)
91
+ return 'no requests in this window';
92
+ const parts = [`${count(total)} requests, ${count(s5xx)} 5xx (${pct((s5xx / total) * 100)}), ${count(s4xx)} 4xx`];
93
+ const worstP95 = buckets.reduce((worst, b) => (b.p95Ms !== null && (worst?.p95Ms ?? -1) < b.p95Ms ? b : worst), null);
94
+ if (worstP95?.p95Ms != null)
95
+ parts.push(`worst p95 ${formatDuration(worstP95.p95Ms)} at ${utcMinute(worstP95.t)}`);
96
+ const most5xx = peak(buckets, (b) => b.s5xx);
97
+ if (most5xx)
98
+ parts.push(`most 5xx at ${utcMinute(most5xx.t)} (${count(most5xx.value)})`);
99
+ return parts.join('; ');
100
+ }
101
+ function logsState(buckets, severities) {
102
+ const totals = { error: 0, warn: 0, info: 0 };
103
+ for (const b of buckets) {
104
+ totals.error += b.error;
105
+ totals.warn += b.warn;
106
+ totals.info += b.info + b.other;
107
+ }
108
+ const shown = severities.filter((severity) => totals[severity] > 0);
109
+ if (shown.length === 0)
110
+ return `no ${severities.join('/')} log records in this window`;
111
+ const parts = [`${shown.map((severity) => `${count(totals[severity])} ${severity}`).join(', ')} log records`];
112
+ const mostErrors = severities.includes('error') ? peak(buckets, (b) => b.error) : null;
113
+ if (mostErrors)
114
+ parts.push(`most errors at ${utcMinute(mostErrors.t)} (${count(mostErrors.value)})`);
115
+ return parts.join('; ');
116
+ }
117
+ function routesState(items) {
118
+ if (items.length === 0)
119
+ return 'no requests in this window';
120
+ return items
121
+ .slice(0, ASSISTANT_PROMPT_TOP_N)
122
+ .map((item) => {
123
+ const route = clip([item.method, item.route].filter(Boolean).join(' ') || 'unknown route');
124
+ const p95 = item.p95Ms === null ? 'p95 n/a' : `p95 ${formatDuration(item.p95Ms)}`;
125
+ const unknown = item.unknown ? ' (unknown route: no API route matches it)' : '';
126
+ const clientErrors = item.clientErrors === undefined ? '' : `, ${count(item.clientErrors)} 4xx`;
127
+ return `${route}${unknown} — ${count(item.count)} requests, ${pct(item.errorRatePct)} errors${clientErrors}, ${p95}`;
128
+ })
129
+ .join('; ');
130
+ }
131
+ function unknownRoutesState(block) {
132
+ if (block.requests <= 0)
133
+ return 'no requests to unknown API routes in this window';
134
+ const parts = [
135
+ `${count(block.requests)} requests to unknown API routes (404, no route matched): ` +
136
+ `${count(block.bearer)} from the application with a bearer token, ${count(block.anonymous)} anonymous; ` +
137
+ `previous window ${count(block.previousRequests)} (${count(block.previousBearer)} with a bearer)`,
138
+ ];
139
+ const top = block.topRoutes.slice(0, ASSISTANT_PROMPT_TOP_N).map((item) => {
140
+ const route = clip([item.method, item.route].filter(Boolean).join(' ') || 'unknown route');
141
+ return `${route} — ${count(item.count)} requests, ${count(item.bearer)} with a bearer`;
142
+ });
143
+ if (top.length > 0)
144
+ parts.push(top.join('; '));
145
+ return parts.join('; ');
146
+ }
147
+ function sampleTrace(ids) {
148
+ return ids.find(isTraceId) ?? null;
149
+ }
150
+ function errorsState(items) {
151
+ if (items.length === 0)
152
+ return 'no error logs in this window';
153
+ const top = items.slice(0, ASSISTANT_PROMPT_TOP_N);
154
+ const text = top.map((item) => `"${clip(item.message ?? '(no message)')}" (${count(item.count)})`).join('; ');
155
+ const trace = sampleTrace(top.map((item) => item.sampleTraceId));
156
+ return trace ? `${text}; sample trace ${trace}` : text;
157
+ }
158
+ function eventsState(items, severities, q) {
159
+ const filter = `${severities.join('/')} events${q ? ` matching "${clip(q)}"` : ''}`;
160
+ if (items.length === 0)
161
+ return `no ${filter} in this window`;
162
+ const top = items.slice(0, ASSISTANT_PROMPT_TOP_N);
163
+ const text = top
164
+ .map((item) => `[${clip(item.severity, 16)}] ${clip(item.body ?? '(no message)')}`)
165
+ .join('; ');
166
+ const trace = sampleTrace(top.map((item) => item.traceId));
167
+ return `latest ${filter}: ${text}${trace ? `; sample trace ${trace}` : ''}`;
168
+ }
169
+ function verdictState(verdict) {
170
+ const label = LEVEL_LABELS[verdict.level] ?? verdict.level;
171
+ const reasons = verdict.reasons.slice(0, ASSISTANT_PROMPT_TOP_N).map((reason) => clip(reason));
172
+ return reasons.length > 0 ? `${label} — ${reasons.join('; ')}` : label;
173
+ }
174
+ /** A row is a problem when a status column says so: a failing URL or scrape job, a type with no eligible node. */
175
+ function isProblemRow(row) {
176
+ return row.up === false || row.noEligibleNode === true;
177
+ }
178
+ /** `key — Label value, Label value` for up to four of the row's measured columns. */
179
+ function rowText(table, row, now) {
180
+ const cells = table.columns
181
+ .filter((column) => column.key !== 'key' && column.key !== 'lastSeenAt')
182
+ .filter((column) => row[column.key] !== null && row[column.key] !== undefined)
183
+ .slice(0, 4)
184
+ .map((column) => `${column.label} ${clip(formatMetricValue(row[column.key], column.unit, now), 80)}`);
185
+ const key = clip(String(row.key ?? '(unknown)'), 80);
186
+ return cells.length > 0 ? `${key} — ${cells.join(', ')}` : key;
187
+ }
188
+ /**
189
+ * A section's tiles (at most {@link ASSISTANT_PROMPT_TOP_N}), then at most
190
+ * {@link ASSISTANT_PROMPT_TOP_N} table rows in all, problem rows first.
191
+ */
192
+ function metricsState(tiles, tables, skipped, now) {
193
+ const parts = [];
194
+ const shownTiles = tiles.slice(0, ASSISTANT_PROMPT_TOP_N).map((tile) => tileText(tile, now));
195
+ if (shownTiles.length > 0)
196
+ parts.push(shownTiles.join('; '));
197
+ let budget = ASSISTANT_PROMPT_TOP_N;
198
+ for (const table of tables) {
199
+ if (budget <= 0)
200
+ break;
201
+ const rows = [...table.rows].sort((a, b) => Number(isProblemRow(b)) - Number(isProblemRow(a))).slice(0, budget);
202
+ if (rows.length === 0)
203
+ continue;
204
+ budget -= rows.length;
205
+ const more = table.rows.length - rows.length;
206
+ parts.push(`${clip(table.label, 80)}: ${rows.map((row) => rowText(table, row, now)).join('; ')}${more > 0 ? ` (+${more} more)` : ''}`);
207
+ }
208
+ if (skipped.length > 0)
209
+ parts.push(`${skipped.length} metric(s) of this section are not collected`);
210
+ return parts.length > 0 ? parts.join('; ') : 'nothing collected for this section in this window';
211
+ }
212
+ function stateText(panel, now) {
213
+ switch (panel.kind) {
214
+ case 'verdict':
215
+ return verdictState(panel.verdict);
216
+ case 'tiles': {
217
+ const tiles = [...panel.tiles, ...(panel.runtime ?? [])];
218
+ return tiles.length > 0 ? tiles.map((tile) => tileText(tile, now)).join('; ') : 'no indicators in this window';
219
+ }
220
+ case 'api':
221
+ return apiState(panel.buckets);
222
+ case 'logs':
223
+ return logsState(panel.buckets, panel.severities);
224
+ case 'routes':
225
+ return routesState(panel.items);
226
+ case 'unknownRoutes':
227
+ return unknownRoutesState(panel.unknownRoutes);
228
+ case 'errors':
229
+ return errorsState(panel.items);
230
+ case 'events':
231
+ return eventsState(panel.items, panel.severities, panel.q);
232
+ case 'metrics':
233
+ return metricsState(panel.tiles, panel.tables, panel.skipped ?? [], now);
234
+ }
235
+ }
236
+ /** The prefilled question for `panel` under the dashboard's `context`. */
237
+ export function buildAssistantQuestion(panel, context) {
238
+ const now = context.now ?? Date.now();
239
+ const opening = `Investigate "${clip(panel.title, 80)}" for ${windowText(context)} (${filtersText(context, panel.kind === 'metrics')}).`;
240
+ const prefix = `${opening}\nCurrent state: `;
241
+ const suffix = `.\n${CLOSING}`;
242
+ const budget = ASSISTANT_PROMPT_MAX - prefix.length - suffix.length;
243
+ const state = stateText(panel, now).replace(/[.\s]+$/, '');
244
+ return `${prefix}${clip(state, Math.max(budget, 1))}${suffix}`;
245
+ }
246
+ //# sourceMappingURL=assistantPrompt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assistantPrompt.js","sourceRoot":"","sources":["../../../../../src/telemetry/headless/lib/dashboard/assistantPrompt.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,58 @@
1
+ /**
2
+ * The Telemetry Dashboard's URL state — issue #578, epic #576.
3
+ *
4
+ * Everything a reader might want to share or come back to lives in the query
5
+ * string, so a link reproduces the view:
6
+ *
7
+ * ?range=15m|1h|6h|24h|7d relative window (default 1h)
8
+ * &from=…&to=… absolute window (a zoom); wins over `range`
9
+ * &service=…&instance=… filters (values from `/filters`)
10
+ * &host=… host filter for the infrastructure sections only (#602)
11
+ * &sev=error,warn,info severities for the log panels (default error,warn)
12
+ * &q=… events search (≤ 200 characters)
13
+ * &refresh=30|off auto-refresh (default 30 s)
14
+ *
15
+ * Anything invalid falls back to its default rather than erroring: a mangled
16
+ * link still opens a working dashboard. Defaults are left OUT of the URL, so
17
+ * the plain route is the default view. `range` is kept alongside a zoom so
18
+ * "Reset zoom" returns to the preset the reader zoomed from.
19
+ */
20
+ import { type DashboardMetricsQuery, type DashboardQuery, type DashboardRange, type DashboardSeverity } from '../services/telemetryDashboard.js';
21
+ export declare const DASHBOARD_REFRESH_MS = 30000;
22
+ export interface DashboardState {
23
+ range: DashboardRange;
24
+ /** A zoomed window. Both set or both null. */
25
+ from: string | null;
26
+ to: string | null;
27
+ service: string | null;
28
+ instance: string | null;
29
+ /** A `/filters` `hosts` value; sent to `/metrics` only (the API applies it to collector tables). */
30
+ host: string | null;
31
+ sev: DashboardSeverity[];
32
+ q: string;
33
+ refresh: boolean;
34
+ }
35
+ export declare const DEFAULT_DASHBOARD_STATE: DashboardState;
36
+ /** Severities in canonical order, deduplicated; `null` when none is valid. */
37
+ export declare function parseSeverities(value: string | null): DashboardSeverity[] | null;
38
+ export declare function parseDashboardState(params: URLSearchParams): DashboardState;
39
+ /** The query string for `state`, defaults omitted. */
40
+ export declare function dashboardStateToParams(state: DashboardState): URLSearchParams;
41
+ export declare function isZoomed(state: DashboardState): boolean;
42
+ /** The window + filter half of the API query, shared by every panel. */
43
+ export declare function dashboardQuery(state: DashboardState): DashboardQuery;
44
+ /** The `/metrics` query: the shared window and filters plus `host`, which only `/metrics` takes. */
45
+ export declare function metricsQuery(state: DashboardState): DashboardMetricsQuery;
46
+ /**
47
+ * The absolute window covering buckets `startIndex..endIndex` (inclusive, any
48
+ * order) of a series whose buckets start at `starts` and last `bucketSeconds`.
49
+ * `to` is clamped to `now`, since the API refuses a window ending more than a
50
+ * minute ahead. `null` when the selection is empty.
51
+ */
52
+ export declare function bucketWindow(starts: string[], bucketSeconds: number, startIndex: number, endIndex: number, now?: number): {
53
+ from: string;
54
+ to: string;
55
+ } | null;
56
+ /** The window's span in ms — for labels and tick formatting. */
57
+ export declare function windowSpanMs(state: DashboardState): number;
58
+ //# sourceMappingURL=dashboardState.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dashboardState.d.ts","sourceRoot":"","sources":["../../../../src/telemetry/headless/lib/dashboardState.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AACH,OAAO,EASL,KAAK,qBAAqB,EAC1B,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,KAAK,iBAAiB,EACvB,MAAM,mCAAmC,CAAC;AAE3C,eAAO,MAAM,oBAAoB,QAAS,CAAC;AAE3C,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,cAAc,CAAC;IACtB,8CAA8C;IAC9C,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAClB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,oGAAoG;IACpG,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,GAAG,EAAE,iBAAiB,EAAE,CAAC;IACzB,CAAC,EAAE,MAAM,CAAC;IACV,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,eAAO,MAAM,uBAAuB,EAAE,cAUrC,CAAC;AAYF,8EAA8E;AAC9E,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,iBAAiB,EAAE,GAAG,IAAI,CAKhF;AAWD,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,eAAe,GAAG,cAAc,CAe3E;AAMD,sDAAsD;AACtD,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,cAAc,GAAG,eAAe,CAiB7E;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAEvD;AAED,wEAAwE;AACxE,wBAAgB,cAAc,CAAC,KAAK,EAAE,cAAc,GAAG,cAAc,CAOpE;AAED,oGAAoG;AACpG,wBAAgB,YAAY,CAAC,KAAK,EAAE,cAAc,GAAG,qBAAqB,CAIzE;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAC1B,MAAM,EAAE,MAAM,EAAE,EAChB,aAAa,EAAE,MAAM,EACrB,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,GAAG,GAAE,MAAmB,GACvB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAWrC;AAED,gEAAgE;AAChE,wBAAgB,YAAY,CAAC,KAAK,EAAE,cAAc,GAAG,MAAM,CAG1D"}
@@ -0,0 +1,153 @@
1
+ /**
2
+ * The Telemetry Dashboard's URL state — issue #578, epic #576.
3
+ *
4
+ * Everything a reader might want to share or come back to lives in the query
5
+ * string, so a link reproduces the view:
6
+ *
7
+ * ?range=15m|1h|6h|24h|7d relative window (default 1h)
8
+ * &from=…&to=… absolute window (a zoom); wins over `range`
9
+ * &service=…&instance=… filters (values from `/filters`)
10
+ * &host=… host filter for the infrastructure sections only (#602)
11
+ * &sev=error,warn,info severities for the log panels (default error,warn)
12
+ * &q=… events search (≤ 200 characters)
13
+ * &refresh=30|off auto-refresh (default 30 s)
14
+ *
15
+ * Anything invalid falls back to its default rather than erroring: a mangled
16
+ * link still opens a working dashboard. Defaults are left OUT of the URL, so
17
+ * the plain route is the default view. `range` is kept alongside a zoom so
18
+ * "Reset zoom" returns to the preset the reader zoomed from.
19
+ */
20
+ import { DASHBOARD_FILTER_VALUE_MAX, DASHBOARD_MAX_SPAN_MS, DASHBOARD_RANGES, DASHBOARD_RANGE_MS, DASHBOARD_SEARCH_MAX_LENGTH, DASHBOARD_SEVERITIES, DEFAULT_DASHBOARD_RANGE, DEFAULT_DASHBOARD_SEVERITIES, } from '../services/telemetryDashboard.js';
21
+ export const DASHBOARD_REFRESH_MS = 30_000;
22
+ export const DEFAULT_DASHBOARD_STATE = {
23
+ range: DEFAULT_DASHBOARD_RANGE,
24
+ from: null,
25
+ to: null,
26
+ service: null,
27
+ instance: null,
28
+ host: null,
29
+ sev: [...DEFAULT_DASHBOARD_SEVERITIES],
30
+ q: '',
31
+ refresh: true,
32
+ };
33
+ function isRange(value) {
34
+ return value !== null && DASHBOARD_RANGES.includes(value);
35
+ }
36
+ function filterValue(value) {
37
+ if (value === null)
38
+ return null;
39
+ const trimmed = value.trim();
40
+ return trimmed && trimmed.length <= DASHBOARD_FILTER_VALUE_MAX ? trimmed : null;
41
+ }
42
+ /** Severities in canonical order, deduplicated; `null` when none is valid. */
43
+ export function parseSeverities(value) {
44
+ if (!value)
45
+ return null;
46
+ const wanted = new Set(value.split(',').map((part) => part.trim().toLowerCase()));
47
+ const picked = DASHBOARD_SEVERITIES.filter((severity) => wanted.has(severity));
48
+ return picked.length > 0 ? picked : null;
49
+ }
50
+ function parseWindow(from, to) {
51
+ if (!from || !to)
52
+ return null;
53
+ const start = Date.parse(from);
54
+ const end = Date.parse(to);
55
+ if (!Number.isFinite(start) || !Number.isFinite(end))
56
+ return null;
57
+ if (!(start < end) || end - start > DASHBOARD_MAX_SPAN_MS)
58
+ return null;
59
+ return { from: new Date(start).toISOString(), to: new Date(end).toISOString() };
60
+ }
61
+ export function parseDashboardState(params) {
62
+ const range = params.get('range');
63
+ const window = parseWindow(params.get('from'), params.get('to'));
64
+ const q = params.get('q') ?? '';
65
+ return {
66
+ range: isRange(range) ? range : DEFAULT_DASHBOARD_STATE.range,
67
+ from: window?.from ?? null,
68
+ to: window?.to ?? null,
69
+ service: filterValue(params.get('service')),
70
+ instance: filterValue(params.get('instance')),
71
+ host: filterValue(params.get('host')),
72
+ sev: parseSeverities(params.get('sev')) ?? [...DEFAULT_DASHBOARD_SEVERITIES],
73
+ q: q.slice(0, DASHBOARD_SEARCH_MAX_LENGTH),
74
+ refresh: params.get('refresh') !== 'off',
75
+ };
76
+ }
77
+ function sameSeverities(a, b) {
78
+ return a.length === b.length && a.every((severity, index) => severity === b[index]);
79
+ }
80
+ /** The query string for `state`, defaults omitted. */
81
+ export function dashboardStateToParams(state) {
82
+ const params = new URLSearchParams();
83
+ if (state.range !== DEFAULT_DASHBOARD_STATE.range)
84
+ params.set('range', state.range);
85
+ if (state.from && state.to) {
86
+ params.set('from', state.from);
87
+ params.set('to', state.to);
88
+ }
89
+ if (state.service)
90
+ params.set('service', state.service);
91
+ if (state.instance)
92
+ params.set('instance', state.instance);
93
+ if (state.host)
94
+ params.set('host', state.host);
95
+ const sev = DASHBOARD_SEVERITIES.filter((severity) => state.sev.includes(severity));
96
+ if (sev.length > 0 && !sameSeverities(sev, DEFAULT_DASHBOARD_SEVERITIES)) {
97
+ params.set('sev', sev.join(','));
98
+ }
99
+ if (state.q)
100
+ params.set('q', state.q.slice(0, DASHBOARD_SEARCH_MAX_LENGTH));
101
+ if (!state.refresh)
102
+ params.set('refresh', 'off');
103
+ return params;
104
+ }
105
+ export function isZoomed(state) {
106
+ return state.from !== null && state.to !== null;
107
+ }
108
+ /** The window + filter half of the API query, shared by every panel. */
109
+ export function dashboardQuery(state) {
110
+ const query = isZoomed(state)
111
+ ? { from: state.from, to: state.to }
112
+ : { range: state.range };
113
+ if (state.service)
114
+ query.service = state.service;
115
+ if (state.instance)
116
+ query.instance = state.instance;
117
+ return query;
118
+ }
119
+ /** The `/metrics` query: the shared window and filters plus `host`, which only `/metrics` takes. */
120
+ export function metricsQuery(state) {
121
+ const query = dashboardQuery(state);
122
+ if (state.host)
123
+ query.host = state.host;
124
+ return query;
125
+ }
126
+ /**
127
+ * The absolute window covering buckets `startIndex..endIndex` (inclusive, any
128
+ * order) of a series whose buckets start at `starts` and last `bucketSeconds`.
129
+ * `to` is clamped to `now`, since the API refuses a window ending more than a
130
+ * minute ahead. `null` when the selection is empty.
131
+ */
132
+ export function bucketWindow(starts, bucketSeconds, startIndex, endIndex, now = Date.now()) {
133
+ if (starts.length === 0)
134
+ return null;
135
+ const clamp = (index) => Math.min(Math.max(index, 0), starts.length - 1);
136
+ const first = clamp(Math.min(startIndex, endIndex));
137
+ const last = clamp(Math.max(startIndex, endIndex));
138
+ const from = Date.parse(starts[first]);
139
+ const bucketEnd = Date.parse(starts[last]) + bucketSeconds * 1000;
140
+ if (!Number.isFinite(from) || !Number.isFinite(bucketEnd))
141
+ return null;
142
+ const to = Math.min(bucketEnd, now);
143
+ if (!(from < to))
144
+ return null;
145
+ return { from: new Date(from).toISOString(), to: new Date(to).toISOString() };
146
+ }
147
+ /** The window's span in ms — for labels and tick formatting. */
148
+ export function windowSpanMs(state) {
149
+ if (state.from && state.to)
150
+ return Date.parse(state.to) - Date.parse(state.from);
151
+ return DASHBOARD_RANGE_MS[state.range];
152
+ }
153
+ //# sourceMappingURL=dashboardState.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dashboardState.js","sourceRoot":"","sources":["../../../../src/telemetry/headless/lib/dashboardState.ts"],"names":[],"mappings":"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"}