@oneuptime/common 12.0.5 → 12.0.6

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 (528) hide show
  1. package/Models/DatabaseModels/AIRun.ts +33 -0
  2. package/Models/DatabaseModels/DataSource.ts +744 -0
  3. package/Models/DatabaseModels/Index.ts +3 -0
  4. package/Models/DatabaseModels/ProjectCallSMSConfig.ts +10 -2
  5. package/Models/DatabaseModels/User.ts +2 -0
  6. package/Models/DatabaseModels/UserOnCallLog.ts +2 -0
  7. package/Models/DatabaseModels/UserOnCallLogTimeline.ts +2 -0
  8. package/Models/DatabaseModels/UserSession.ts +2 -0
  9. package/Models/DatabaseModels/UserTotpAuth.ts +6 -4
  10. package/Models/DatabaseModels/UserWebAuthn.ts +5 -3
  11. package/Server/API/AIInsightAPI.ts +47 -4
  12. package/Server/API/AIInvestigationAPI.ts +25 -0
  13. package/Server/API/DashboardAPI.ts +176 -492
  14. package/Server/API/DataSourceAPI.ts +268 -0
  15. package/Server/API/StatusPageAPI.ts +11 -1
  16. package/Server/API/UserAPI.ts +119 -0
  17. package/Server/Infrastructure/ClickhouseConfig.ts +59 -0
  18. package/Server/Infrastructure/Postgres/SchemaMigrations/1786303472848-AddDataSourceTable.ts +39 -0
  19. package/Server/Infrastructure/Postgres/SchemaMigrations/1786600000000-AddInvestigationAnalysisTldr.ts +24 -0
  20. package/Server/Infrastructure/Postgres/SchemaMigrations/1786700000000-DropProjectCallSMSConfigCredentialUniques.ts +76 -0
  21. package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +6 -0
  22. package/Server/Infrastructure/Queue.ts +26 -0
  23. package/Server/Infrastructure/QueueWorker.ts +17 -0
  24. package/Server/Middleware/TelemetryIngest.ts +8 -3
  25. package/Server/Services/AIInsightService.ts +132 -12
  26. package/Server/Services/AIRunService.ts +34 -0
  27. package/Server/Services/AIService.ts +17 -2
  28. package/Server/Services/AlertService.ts +38 -32
  29. package/Server/Services/AnalyticsDatabaseService.ts +8 -4
  30. package/Server/Services/DataSourceService.ts +200 -0
  31. package/Server/Services/HostService.ts +92 -0
  32. package/Server/Services/IncidentService.ts +45 -0
  33. package/Server/Services/Index.ts +2 -0
  34. package/Server/Services/MonitorService.ts +49 -0
  35. package/Server/Services/MonitorStatusService.ts +166 -0
  36. package/Server/Services/OpenTelemetryIngestService.ts +255 -184
  37. package/Server/Services/RumSessionPinService.ts +7 -21
  38. package/Server/Services/StatusPageSubscriberService.ts +13 -0
  39. package/Server/Services/UserService.ts +280 -9
  40. package/Server/Static/Vendor/README.md +62 -0
  41. package/Server/Static/Vendor/fonts/InterVariable.woff2 +0 -0
  42. package/Server/Static/Vendor/highlight/highlight.min.js +1244 -0
  43. package/Server/Static/Vendor/highlight/languages/apache.min.js +15 -0
  44. package/Server/Static/Vendor/highlight/languages/bash.min.js +21 -0
  45. package/Server/Static/Vendor/highlight/languages/c.min.js +41 -0
  46. package/Server/Static/Vendor/highlight/languages/cpp.min.js +47 -0
  47. package/Server/Static/Vendor/highlight/languages/csharp.min.js +49 -0
  48. package/Server/Static/Vendor/highlight/languages/css.min.js +31 -0
  49. package/Server/Static/Vendor/highlight/languages/diff.min.js +9 -0
  50. package/Server/Static/Vendor/highlight/languages/dns.min.js +11 -0
  51. package/Server/Static/Vendor/highlight/languages/dockerfile.min.js +8 -0
  52. package/Server/Static/Vendor/highlight/languages/go.min.js +20 -0
  53. package/Server/Static/Vendor/highlight/languages/graphql.min.js +12 -0
  54. package/Server/Static/Vendor/highlight/languages/http.min.js +14 -0
  55. package/Server/Static/Vendor/highlight/languages/ini.min.js +15 -0
  56. package/Server/Static/Vendor/highlight/languages/java.min.js +38 -0
  57. package/Server/Static/Vendor/highlight/languages/javascript.min.js +81 -0
  58. package/Server/Static/Vendor/highlight/languages/json.min.js +8 -0
  59. package/Server/Static/Vendor/highlight/languages/kotlin.min.js +46 -0
  60. package/Server/Static/Vendor/highlight/languages/lua.min.js +15 -0
  61. package/Server/Static/Vendor/highlight/languages/makefile.min.js +14 -0
  62. package/Server/Static/Vendor/highlight/languages/nginx.min.js +21 -0
  63. package/Server/Static/Vendor/highlight/languages/perl.min.js +41 -0
  64. package/Server/Static/Vendor/highlight/languages/php.min.js +59 -0
  65. package/Server/Static/Vendor/highlight/languages/powershell.min.js +39 -0
  66. package/Server/Static/Vendor/highlight/languages/python.min.js +42 -0
  67. package/Server/Static/Vendor/highlight/languages/r.min.js +26 -0
  68. package/Server/Static/Vendor/highlight/languages/ruby.min.js +54 -0
  69. package/Server/Static/Vendor/highlight/languages/rust.min.js +27 -0
  70. package/Server/Static/Vendor/highlight/languages/scala.min.js +28 -0
  71. package/Server/Static/Vendor/highlight/languages/sql.min.js +21 -0
  72. package/Server/Static/Vendor/highlight/languages/swift.min.js +68 -0
  73. package/Server/Static/Vendor/highlight/languages/typescript.min.js +99 -0
  74. package/Server/Static/Vendor/highlight/languages/xml.min.js +29 -0
  75. package/Server/Static/Vendor/highlight/languages/yaml.min.js +28 -0
  76. package/Server/Static/Vendor/highlight/styles/github-dark.min.css +10 -0
  77. package/Server/Static/Vendor/highlight/styles/vs2015.min.css +1 -0
  78. package/Server/Static/Vendor/tailwind/tailwind-3.4.5.js +21028 -0
  79. package/Server/Types/Database/Permissions/BasePermission.ts +7 -0
  80. package/Server/Types/Database/Permissions/DeletePermission.ts +2 -0
  81. package/Server/Types/Database/Permissions/ReadPermission.ts +3 -0
  82. package/Server/Types/Database/Permissions/TenantPermission.ts +101 -16
  83. package/Server/Utils/AI/CodeFix/FixRunBudget.ts +2 -2
  84. package/Server/Utils/AI/SRE/AIInvestigationEngine.ts +90 -11
  85. package/Server/Utils/AI/SRE/AlertInvestigationRunner.ts +1 -0
  86. package/Server/Utils/AI/SRE/IncidentInvestigationRunner.ts +1 -0
  87. package/Server/Utils/AI/SRE/Insights/Detectors/ExceptionIdentity.ts +125 -0
  88. package/Server/Utils/AI/SRE/Insights/Detectors/ExceptionSpikeDetector.ts +25 -15
  89. package/Server/Utils/AI/SRE/Insights/Detectors/NewExceptionDetector.ts +256 -57
  90. package/Server/Utils/AI/SRE/Insights/InsightStore.ts +76 -18
  91. package/Server/Utils/AI/SRE/InvestigationTldr.ts +352 -0
  92. package/Server/Utils/AnalyticsDatabase/InsertDedupContext.ts +7 -2
  93. package/Server/Utils/Dashboard/PublicDashboardResourceListPolicy.ts +1793 -0
  94. package/Server/Utils/Dashboard/PublicDashboardViewConfig.ts +65 -0
  95. package/Server/Utils/DataSource/ConnectorRegistry.ts +53 -0
  96. package/Server/Utils/DataSource/Connectors/ClickHouseConnector.ts +338 -0
  97. package/Server/Utils/DataSource/Connectors/ElasticsearchConnector.ts +717 -0
  98. package/Server/Utils/DataSource/Connectors/LokiConnector.ts +606 -0
  99. package/Server/Utils/DataSource/Connectors/MySqlConnector.ts +307 -0
  100. package/Server/Utils/DataSource/Connectors/PostgresConnector.ts +260 -0
  101. package/Server/Utils/DataSource/Connectors/PrometheusConnector.ts +555 -0
  102. package/Server/Utils/DataSource/Connectors/RestApiConnector.ts +597 -0
  103. package/Server/Utils/DataSource/Connectors/SqlServerConnector.ts +318 -0
  104. package/Server/Utils/DataSource/EgressGuard.ts +446 -0
  105. package/Server/Utils/DataSource/HttpFetch.ts +221 -0
  106. package/Server/Utils/DataSource/SqlQueryGuard.ts +383 -0
  107. package/Server/Utils/DataSource/SqlResultShaper.ts +372 -0
  108. package/Server/Utils/DataSource/Types.ts +93 -0
  109. package/Server/Utils/Database/PostgresErrorTranslator.ts +172 -17
  110. package/Server/Utils/InProcessMemo.ts +141 -0
  111. package/Server/Utils/InstanceHealth/TelemetryIngestion.ts +628 -0
  112. package/Server/Utils/Monitor/MonitorMetricUtil.ts +58 -0
  113. package/Server/Utils/Monitor/MonitorResource.ts +14 -0
  114. package/Server/Utils/Response.ts +12 -1
  115. package/Server/Utils/SSRFProtection.ts +237 -0
  116. package/Server/Utils/StartServer.ts +8 -0
  117. package/Server/Utils/StatusPageSubscriberWebhook.ts +30 -0
  118. package/Server/Utils/Telemetry/CaptureSpan.ts +30 -18
  119. package/Server/Utils/Telemetry/IngestionTimestamp.ts +75 -0
  120. package/Server/Utils/Telemetry/ResourceHeartbeat.ts +99 -7
  121. package/Server/Utils/Telemetry/Telemetry.ts +112 -1
  122. package/Server/Utils/Telemetry.ts +104 -3
  123. package/Server/Utils/VendorAssets.ts +165 -0
  124. package/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.ts +28 -5
  125. package/Server/Utils/Workspace/Slack/Slack.ts +5 -0
  126. package/Server/Views/Partials/Head.ejs +21 -7
  127. package/Tests/App/AdminDashboard/AdminProjectsIdFilter.test.tsx +207 -0
  128. package/Tests/App/AdminDashboard/AdminUsersIdFilter.test.tsx +216 -0
  129. package/Tests/App/Dashboard/AIInsightViewActions.test.tsx +422 -0
  130. package/Tests/App/Dashboard/AddWidgetModal.test.tsx +10 -3
  131. package/Tests/App/Dashboard/AlertsSideMenu.test.tsx +387 -0
  132. package/Tests/App/Dashboard/ChatActivityFeed.test.tsx +199 -0
  133. package/Tests/App/Dashboard/DataSourceChartSyntheticConfig.test.tsx +736 -0
  134. package/Tests/App/Dashboard/DataSourceQueryEditor.test.tsx +868 -0
  135. package/Tests/App/Dashboard/DataSourceWidgetCatalog.test.ts +440 -0
  136. package/Tests/App/Dashboard/DataSourceWidgetFetching.test.tsx +2109 -0
  137. package/Tests/App/Dashboard/DataSourceWidgetViews.test.tsx +726 -0
  138. package/Tests/App/Dashboard/IncidentsSideMenu.test.tsx +447 -0
  139. package/Tests/App/Dashboard/InvestigationPanel.test.tsx +514 -3
  140. package/Tests/App/Dashboard/ProductMenuBreadcrumbs.test.tsx +391 -0
  141. package/Tests/App/Dashboard/ScheduledMaintenanceSideMenu.test.tsx +326 -0
  142. package/Tests/App/Dashboard/SideMenuHarness.tsx +187 -0
  143. package/Tests/App/Dashboard/WidgetCatalog.test.ts +6 -1
  144. package/Tests/App/StatusPage/StatusPageResourceExplorer.test.tsx +1858 -0
  145. package/Tests/Models/DatabaseModels/DataSourceModelSecrets.test.ts +70 -0
  146. package/Tests/Server/API/AIInvestigationAPI.test.ts +187 -0
  147. package/Tests/Server/API/DashboardPublicDataSourceStrip.test.ts +686 -0
  148. package/Tests/Server/API/DashboardPublicResourceListAPI.test.ts +585 -823
  149. package/Tests/Server/API/DataSourceAPIRoutes.test.ts +486 -0
  150. package/Tests/Server/API/StatusPageSubscriberOwnership.test.ts +291 -0
  151. package/Tests/Server/API/UserAuthenticationAPI.test.ts +641 -0
  152. package/Tests/Server/Infrastructure/ClickhouseKeepAliveOptions.test.ts +441 -0
  153. package/Tests/Server/Middleware/TelemetryIngestTokenLog.test.ts +140 -0
  154. package/Tests/Server/Services/AIInsightService.test.ts +266 -11
  155. package/Tests/Server/Services/AIRunAnalysisTldrPersistence.test.ts +160 -0
  156. package/Tests/Server/Services/AIServiceDailyBudget.test.ts +4 -0
  157. package/Tests/Server/Services/AlertMetricResourceAttributes.test.ts +352 -0
  158. package/Tests/Server/Services/DataSourceServiceSettings.test.ts +244 -0
  159. package/Tests/Server/Services/HostServiceFindOrCreateMemo.test.ts +397 -0
  160. package/Tests/Server/Services/HostServiceUpdateLastSeen.test.ts +41 -2
  161. package/Tests/Server/Services/IncidentMetricResourceAttributes.test.ts +408 -0
  162. package/Tests/Server/Services/MonitorStatusServiceDeleteReferenceCleanup.test.ts +351 -0
  163. package/Tests/Server/Services/MonitorStatusServiceValidation.test.ts +171 -0
  164. package/Tests/Server/Services/OpenTelemetryResourceRetentionMemo.test.ts +398 -0
  165. package/Tests/Server/Services/OpenTelemetryServiceResolutionCache.test.ts +19 -0
  166. package/Tests/Server/Services/ProjectCallSMSConfigCredentialUniqueness.test.ts +305 -0
  167. package/Tests/Server/Services/ResourceUpdateLastSeenLivenessFallback.test.ts +36 -1
  168. package/Tests/Server/Services/RumSessionPinUniqueViolationRecovery.test.ts +163 -0
  169. package/Tests/Server/Services/UserAuthenticationService.test.ts +973 -0
  170. package/Tests/Server/Types/Database/ObjectIdColumnQuery.test.ts +262 -0
  171. package/Tests/Server/Types/Database/Permissions/TenantPermission.test.ts +358 -0
  172. package/Tests/Server/Utils/AI/FixRunBudget.test.ts +2 -2
  173. package/Tests/Server/Utils/AI/Insights/ExceptionSpikeDetector.test.ts +6 -1
  174. package/Tests/Server/Utils/AI/Insights/InsightStore.test.ts +121 -4
  175. package/Tests/Server/Utils/AI/Insights/NewExceptionDetector.test.ts +361 -10
  176. package/Tests/Server/Utils/AI/InvestigationSettlement.test.ts +292 -0
  177. package/Tests/Server/Utils/AI/InvestigationTldr.test.ts +623 -0
  178. package/Tests/Server/Utils/AI/InvestigationTldrWiring.test.ts +98 -0
  179. package/Tests/Server/Utils/Dashboard/PublicDashboardResourceListPolicy.test.ts +857 -0
  180. package/Tests/Server/Utils/Dashboard/PublicDashboardViewConfig.test.ts +480 -0
  181. package/Tests/Server/Utils/DataSource/ClickHouseConnector.test.ts +759 -0
  182. package/Tests/Server/Utils/DataSource/ConnectorRegistry.test.ts +37 -0
  183. package/Tests/Server/Utils/DataSource/EgressGuard.test.ts +645 -0
  184. package/Tests/Server/Utils/DataSource/ElasticsearchConnector.test.ts +1206 -0
  185. package/Tests/Server/Utils/DataSource/HttpFetch.test.ts +616 -0
  186. package/Tests/Server/Utils/DataSource/LokiConnector.test.ts +970 -0
  187. package/Tests/Server/Utils/DataSource/MySqlConnector.test.ts +935 -0
  188. package/Tests/Server/Utils/DataSource/PostgresConnector.test.ts +854 -0
  189. package/Tests/Server/Utils/DataSource/PrometheusConnector.test.ts +881 -0
  190. package/Tests/Server/Utils/DataSource/RestApiConnector.test.ts +1020 -0
  191. package/Tests/Server/Utils/DataSource/SqlQueryGuard.test.ts +425 -0
  192. package/Tests/Server/Utils/DataSource/SqlResultShaper.test.ts +555 -0
  193. package/Tests/Server/Utils/DataSource/SqlServerConnector.test.ts +934 -0
  194. package/Tests/Server/Utils/Database/PostgresErrorTranslator.test.ts +228 -7
  195. package/Tests/Server/Utils/InProcessMemo.test.ts +292 -0
  196. package/Tests/Server/Utils/InstanceHealth/TelemetryIngestion.test.ts +960 -0
  197. package/Tests/Server/Utils/MicrosoftTeamsWebhookUrlValidation.test.ts +103 -0
  198. package/Tests/Server/Utils/Monitor/MonitorMetricResourceAttributes.test.ts +336 -0
  199. package/Tests/Server/Utils/OfflineAssetHygiene.test.ts +521 -0
  200. package/Tests/Server/Utils/ResponseRenderAnalytics.test.ts +143 -0
  201. package/Tests/Server/Utils/SSRFProtection.test.ts +193 -0
  202. package/Tests/Server/Utils/StatusPageSubscriberWebhook.test.ts +101 -0
  203. package/Tests/Server/Utils/TailwindBuildCopy.test.ts +225 -0
  204. package/Tests/Server/Utils/Telemetry/ResourceHeartbeatL1Memo.test.ts +355 -0
  205. package/Tests/Server/Utils/Telemetry/TelemetryFanInWriter.test.ts +128 -0
  206. package/Tests/Server/Utils/Telemetry/TelemetryUtilAttributeKeys.test.ts +381 -0
  207. package/Tests/Server/Utils/Telemetry.test.ts +87 -0
  208. package/Tests/Server/Utils/VendorAssetIntegrity.test.ts +343 -0
  209. package/Tests/Server/Utils/VendorAssets.test.ts +671 -0
  210. package/Tests/Server/Views/OfflineRender.test.ts +297 -0
  211. package/Tests/Types/Dashboard/DataSourceComponentTypes.test.ts +618 -0
  212. package/Tests/Types/DateClickhouseFormat.test.ts +192 -0
  213. package/Tests/Types/Password.test.ts +363 -0
  214. package/Tests/UI/Components/ConfirmModal.test.tsx +7 -0
  215. package/Tests/UI/Components/ErrorBoundary.test.tsx +53 -0
  216. package/Tests/UI/Components/Modal.test.tsx +281 -1
  217. package/Tests/UI/Components/ObjectIdFilterPipeline.test.tsx +396 -0
  218. package/Tests/UI/Components/StatusPage/ResourceGroupNavigator.test.tsx +1147 -0
  219. package/Tests/UI/Utils/Breadcrumb/fixtures/RealBreadcrumbTrails.ts +116 -1
  220. package/Tests/UI/Utils/Breadcrumb/fixtures/RealRoutePatterns.ts +2 -0
  221. package/Tests/Utils/Analytics.test.ts +23 -0
  222. package/Tests/Utils/Dashboard/Components/DashboardDataSourceComponents.test.ts +640 -0
  223. package/Tests/Utils/DataSource/DataSourceQueryText.test.ts +138 -0
  224. package/Tests/Utils/DataSource/DataSourceValueReducer.test.ts +526 -0
  225. package/Tests/Utils/Metrics/MetricResourceAttributeUtil.test.ts +691 -0
  226. package/Tests/Utils/StatusPage/GroupHierarchyView.test.ts +1452 -0
  227. package/Tests/Utils/StatusPage/ResourceExplorer.test.ts +931 -0
  228. package/Tests/Utils/Telemetry/CaptureSpanExportGating.test.ts +288 -0
  229. package/Tests/Utils/Telemetry/IngestionTimestamp.test.ts +170 -0
  230. package/Types/AI/AIInsightEvidence.ts +6 -0
  231. package/Types/Analytics/RevenueEvent.ts +31 -0
  232. package/Types/Dashboard/DashboardComponentType.ts +31 -0
  233. package/Types/Dashboard/DashboardComponents/DashboardDataSourceChartComponent.ts +27 -0
  234. package/Types/Dashboard/DashboardComponents/DashboardDataSourceGaugeComponent.ts +32 -0
  235. package/Types/Dashboard/DashboardComponents/DashboardDataSourceTableComponent.ts +30 -0
  236. package/Types/Dashboard/DashboardComponents/DashboardDataSourceValueComponent.ts +55 -0
  237. package/Types/DataSource/DataSourceLimits.ts +62 -0
  238. package/Types/DataSource/DataSourceQueryConfig.ts +41 -0
  239. package/Types/DataSource/DataSourceTableResult.ts +38 -0
  240. package/Types/DataSource/DataSourceType.ts +213 -0
  241. package/Types/Date.ts +43 -3
  242. package/Types/Password.ts +64 -0
  243. package/Types/Permission.ts +46 -0
  244. package/Types/UserAuthenticationStatus.ts +34 -0
  245. package/UI/Components/Button/Button.tsx +1 -1
  246. package/UI/Components/ErrorBoundary.tsx +459 -108
  247. package/UI/Components/Icon/Icon.tsx +10 -9
  248. package/UI/Components/Modal/ConfirmModal.tsx +6 -1
  249. package/UI/Components/Modal/Modal.tsx +267 -35
  250. package/UI/Components/Modal/ModalFooter.tsx +6 -1
  251. package/UI/Components/MoreMenu/MoreMenu.tsx +19 -4
  252. package/UI/Components/MoreMenu/MoreMenuItem.tsx +6 -1
  253. package/UI/Components/StatusPage/ResourceGrid.tsx +314 -0
  254. package/UI/Components/StatusPage/ResourceGroupNavigator.tsx +808 -0
  255. package/UI/Components/StatusPage/ResourceList.tsx +570 -0
  256. package/UI/Styles/Theme.css +18 -0
  257. package/UI/Utils/API/RequestOptions.ts +7 -0
  258. package/UI/Utils/AnalyticsModelAPI/AnalyticsModelAPI.ts +1 -0
  259. package/UI/Utils/ModelAPI/ModelAPI.ts +1 -0
  260. package/UI/Utils/TestDataSource.ts +61 -0
  261. package/UI/esbuild-config.js +45 -0
  262. package/Utils/Analytics.ts +15 -0
  263. package/Utils/Dashboard/Components/DashboardDataSourceChartComponent.ts +88 -0
  264. package/Utils/Dashboard/Components/DashboardDataSourceGaugeComponent.ts +123 -0
  265. package/Utils/Dashboard/Components/DashboardDataSourceShared.ts +16 -0
  266. package/Utils/Dashboard/Components/DashboardDataSourceTableComponent.ts +72 -0
  267. package/Utils/Dashboard/Components/DashboardDataSourceValueComponent.ts +126 -0
  268. package/Utils/Dashboard/Components/Index.ts +28 -0
  269. package/Utils/DataSource/DataSourceQueryText.ts +94 -0
  270. package/Utils/DataSource/DataSourceValueReducer.ts +156 -0
  271. package/Utils/Metrics/MetricResourceAttributeUtil.ts +380 -0
  272. package/Utils/NetworkDiscovery/ScanTargetUtil.ts +8 -6
  273. package/Utils/StatusPage/GroupHierarchyView.ts +931 -0
  274. package/Utils/StatusPage/ResourceExplorer.ts +853 -0
  275. package/build/dist/Models/DatabaseModels/AIRun.js +34 -0
  276. package/build/dist/Models/DatabaseModels/AIRun.js.map +1 -1
  277. package/build/dist/Models/DatabaseModels/DataSource.js +774 -0
  278. package/build/dist/Models/DatabaseModels/DataSource.js.map +1 -0
  279. package/build/dist/Models/DatabaseModels/Index.js +2 -0
  280. package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
  281. package/build/dist/Models/DatabaseModels/ProjectCallSMSConfig.js +14 -4
  282. package/build/dist/Models/DatabaseModels/ProjectCallSMSConfig.js.map +1 -1
  283. package/build/dist/Models/DatabaseModels/User.js +2 -0
  284. package/build/dist/Models/DatabaseModels/User.js.map +1 -1
  285. package/build/dist/Models/DatabaseModels/UserOnCallLog.js +2 -0
  286. package/build/dist/Models/DatabaseModels/UserOnCallLog.js.map +1 -1
  287. package/build/dist/Models/DatabaseModels/UserOnCallLogTimeline.js +2 -0
  288. package/build/dist/Models/DatabaseModels/UserOnCallLogTimeline.js.map +1 -1
  289. package/build/dist/Models/DatabaseModels/UserSession.js +2 -0
  290. package/build/dist/Models/DatabaseModels/UserSession.js.map +1 -1
  291. package/build/dist/Models/DatabaseModels/UserTotpAuth.js +6 -4
  292. package/build/dist/Models/DatabaseModels/UserTotpAuth.js.map +1 -1
  293. package/build/dist/Models/DatabaseModels/UserWebAuthn.js +5 -3
  294. package/build/dist/Models/DatabaseModels/UserWebAuthn.js.map +1 -1
  295. package/build/dist/Server/API/AIInsightAPI.js +34 -4
  296. package/build/dist/Server/API/AIInsightAPI.js.map +1 -1
  297. package/build/dist/Server/API/AIInvestigationAPI.js +23 -0
  298. package/build/dist/Server/API/AIInvestigationAPI.js.map +1 -1
  299. package/build/dist/Server/API/DashboardAPI.js +119 -433
  300. package/build/dist/Server/API/DashboardAPI.js.map +1 -1
  301. package/build/dist/Server/API/DataSourceAPI.js +173 -0
  302. package/build/dist/Server/API/DataSourceAPI.js.map +1 -0
  303. package/build/dist/Server/API/StatusPageAPI.js +11 -1
  304. package/build/dist/Server/API/StatusPageAPI.js.map +1 -1
  305. package/build/dist/Server/API/UserAPI.js +94 -2
  306. package/build/dist/Server/API/UserAPI.js.map +1 -1
  307. package/build/dist/Server/Infrastructure/ClickhouseConfig.js +49 -0
  308. package/build/dist/Server/Infrastructure/ClickhouseConfig.js.map +1 -1
  309. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786303472848-AddDataSourceTable.js +20 -0
  310. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786303472848-AddDataSourceTable.js.map +1 -0
  311. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786600000000-AddInvestigationAnalysisTldr.js +19 -0
  312. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786600000000-AddInvestigationAnalysisTldr.js.map +1 -0
  313. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786700000000-DropProjectCallSMSConfigCredentialUniques.js +64 -0
  314. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786700000000-DropProjectCallSMSConfigCredentialUniques.js.map +1 -0
  315. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +6 -0
  316. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
  317. package/build/dist/Server/Infrastructure/Queue.js +27 -0
  318. package/build/dist/Server/Infrastructure/Queue.js.map +1 -1
  319. package/build/dist/Server/Infrastructure/QueueWorker.js +13 -0
  320. package/build/dist/Server/Infrastructure/QueueWorker.js.map +1 -1
  321. package/build/dist/Server/Middleware/TelemetryIngest.js +8 -3
  322. package/build/dist/Server/Middleware/TelemetryIngest.js.map +1 -1
  323. package/build/dist/Server/Services/AIInsightService.js +110 -10
  324. package/build/dist/Server/Services/AIInsightService.js.map +1 -1
  325. package/build/dist/Server/Services/AIRunService.js +34 -0
  326. package/build/dist/Server/Services/AIRunService.js.map +1 -1
  327. package/build/dist/Server/Services/AIService.js +16 -2
  328. package/build/dist/Server/Services/AIService.js.map +1 -1
  329. package/build/dist/Server/Services/AlertService.js +28 -35
  330. package/build/dist/Server/Services/AlertService.js.map +1 -1
  331. package/build/dist/Server/Services/AnalyticsDatabaseService.js +8 -4
  332. package/build/dist/Server/Services/AnalyticsDatabaseService.js.map +1 -1
  333. package/build/dist/Server/Services/DataSourceService.js +159 -0
  334. package/build/dist/Server/Services/DataSourceService.js.map +1 -0
  335. package/build/dist/Server/Services/HostService.js +74 -0
  336. package/build/dist/Server/Services/HostService.js.map +1 -1
  337. package/build/dist/Server/Services/IncidentService.js +35 -24
  338. package/build/dist/Server/Services/IncidentService.js.map +1 -1
  339. package/build/dist/Server/Services/Index.js +2 -0
  340. package/build/dist/Server/Services/Index.js.map +1 -1
  341. package/build/dist/Server/Services/MonitorService.js +45 -0
  342. package/build/dist/Server/Services/MonitorService.js.map +1 -1
  343. package/build/dist/Server/Services/MonitorStatusService.js +129 -0
  344. package/build/dist/Server/Services/MonitorStatusService.js.map +1 -1
  345. package/build/dist/Server/Services/OpenTelemetryIngestService.js +222 -159
  346. package/build/dist/Server/Services/OpenTelemetryIngestService.js.map +1 -1
  347. package/build/dist/Server/Services/RumSessionPinService.js +7 -15
  348. package/build/dist/Server/Services/RumSessionPinService.js.map +1 -1
  349. package/build/dist/Server/Services/StatusPageSubscriberService.js +10 -0
  350. package/build/dist/Server/Services/StatusPageSubscriberService.js.map +1 -1
  351. package/build/dist/Server/Services/UserService.js +241 -10
  352. package/build/dist/Server/Services/UserService.js.map +1 -1
  353. package/build/dist/Server/Types/Database/Permissions/BasePermission.js +6 -0
  354. package/build/dist/Server/Types/Database/Permissions/BasePermission.js.map +1 -1
  355. package/build/dist/Server/Types/Database/Permissions/DeletePermission.js +1 -0
  356. package/build/dist/Server/Types/Database/Permissions/DeletePermission.js.map +1 -1
  357. package/build/dist/Server/Types/Database/Permissions/ReadPermission.js +2 -0
  358. package/build/dist/Server/Types/Database/Permissions/ReadPermission.js.map +1 -1
  359. package/build/dist/Server/Types/Database/Permissions/TenantPermission.js +68 -12
  360. package/build/dist/Server/Types/Database/Permissions/TenantPermission.js.map +1 -1
  361. package/build/dist/Server/Utils/AI/CodeFix/FixRunBudget.js +2 -2
  362. package/build/dist/Server/Utils/AI/CodeFix/FixRunBudget.js.map +1 -1
  363. package/build/dist/Server/Utils/AI/SRE/AIInvestigationEngine.js +68 -8
  364. package/build/dist/Server/Utils/AI/SRE/AIInvestigationEngine.js.map +1 -1
  365. package/build/dist/Server/Utils/AI/SRE/AlertInvestigationRunner.js +1 -0
  366. package/build/dist/Server/Utils/AI/SRE/AlertInvestigationRunner.js.map +1 -1
  367. package/build/dist/Server/Utils/AI/SRE/IncidentInvestigationRunner.js +1 -0
  368. package/build/dist/Server/Utils/AI/SRE/IncidentInvestigationRunner.js.map +1 -1
  369. package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/ExceptionIdentity.js +97 -0
  370. package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/ExceptionIdentity.js.map +1 -0
  371. package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/ExceptionSpikeDetector.js +17 -15
  372. package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/ExceptionSpikeDetector.js.map +1 -1
  373. package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/NewExceptionDetector.js +178 -54
  374. package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/NewExceptionDetector.js.map +1 -1
  375. package/build/dist/Server/Utils/AI/SRE/Insights/InsightStore.js +65 -16
  376. package/build/dist/Server/Utils/AI/SRE/Insights/InsightStore.js.map +1 -1
  377. package/build/dist/Server/Utils/AI/SRE/InvestigationTldr.js +303 -0
  378. package/build/dist/Server/Utils/AI/SRE/InvestigationTldr.js.map +1 -0
  379. package/build/dist/Server/Utils/AnalyticsDatabase/InsertDedupContext.js.map +1 -1
  380. package/build/dist/Server/Utils/Dashboard/PublicDashboardResourceListPolicy.js +1261 -0
  381. package/build/dist/Server/Utils/Dashboard/PublicDashboardResourceListPolicy.js.map +1 -0
  382. package/build/dist/Server/Utils/Dashboard/PublicDashboardViewConfig.js +47 -0
  383. package/build/dist/Server/Utils/Dashboard/PublicDashboardViewConfig.js.map +1 -0
  384. package/build/dist/Server/Utils/DataSource/ConnectorRegistry.js +42 -0
  385. package/build/dist/Server/Utils/DataSource/ConnectorRegistry.js.map +1 -0
  386. package/build/dist/Server/Utils/DataSource/Connectors/ClickHouseConnector.js +187 -0
  387. package/build/dist/Server/Utils/DataSource/Connectors/ClickHouseConnector.js.map +1 -0
  388. package/build/dist/Server/Utils/DataSource/Connectors/ElasticsearchConnector.js +493 -0
  389. package/build/dist/Server/Utils/DataSource/Connectors/ElasticsearchConnector.js.map +1 -0
  390. package/build/dist/Server/Utils/DataSource/Connectors/LokiConnector.js +399 -0
  391. package/build/dist/Server/Utils/DataSource/Connectors/LokiConnector.js.map +1 -0
  392. package/build/dist/Server/Utils/DataSource/Connectors/MySqlConnector.js +195 -0
  393. package/build/dist/Server/Utils/DataSource/Connectors/MySqlConnector.js.map +1 -0
  394. package/build/dist/Server/Utils/DataSource/Connectors/PostgresConnector.js +149 -0
  395. package/build/dist/Server/Utils/DataSource/Connectors/PostgresConnector.js.map +1 -0
  396. package/build/dist/Server/Utils/DataSource/Connectors/PrometheusConnector.js +362 -0
  397. package/build/dist/Server/Utils/DataSource/Connectors/PrometheusConnector.js.map +1 -0
  398. package/build/dist/Server/Utils/DataSource/Connectors/RestApiConnector.js +342 -0
  399. package/build/dist/Server/Utils/DataSource/Connectors/RestApiConnector.js.map +1 -0
  400. package/build/dist/Server/Utils/DataSource/Connectors/SqlServerConnector.js +186 -0
  401. package/build/dist/Server/Utils/DataSource/Connectors/SqlServerConnector.js.map +1 -0
  402. package/build/dist/Server/Utils/DataSource/EgressGuard.js +305 -0
  403. package/build/dist/Server/Utils/DataSource/EgressGuard.js.map +1 -0
  404. package/build/dist/Server/Utils/DataSource/HttpFetch.js +134 -0
  405. package/build/dist/Server/Utils/DataSource/HttpFetch.js.map +1 -0
  406. package/build/dist/Server/Utils/DataSource/SqlQueryGuard.js +331 -0
  407. package/build/dist/Server/Utils/DataSource/SqlQueryGuard.js.map +1 -0
  408. package/build/dist/Server/Utils/DataSource/SqlResultShaper.js +280 -0
  409. package/build/dist/Server/Utils/DataSource/SqlResultShaper.js.map +1 -0
  410. package/build/dist/Server/Utils/DataSource/Types.js +2 -0
  411. package/build/dist/Server/Utils/DataSource/Types.js.map +1 -0
  412. package/build/dist/Server/Utils/Database/PostgresErrorTranslator.js +103 -9
  413. package/build/dist/Server/Utils/Database/PostgresErrorTranslator.js.map +1 -1
  414. package/build/dist/Server/Utils/InProcessMemo.js +113 -0
  415. package/build/dist/Server/Utils/InProcessMemo.js.map +1 -0
  416. package/build/dist/Server/Utils/InstanceHealth/TelemetryIngestion.js +406 -0
  417. package/build/dist/Server/Utils/InstanceHealth/TelemetryIngestion.js.map +1 -0
  418. package/build/dist/Server/Utils/Monitor/MonitorMetricUtil.js +34 -0
  419. package/build/dist/Server/Utils/Monitor/MonitorMetricUtil.js.map +1 -1
  420. package/build/dist/Server/Utils/Monitor/MonitorResource.js +14 -0
  421. package/build/dist/Server/Utils/Monitor/MonitorResource.js.map +1 -1
  422. package/build/dist/Server/Utils/Response.js +9 -1
  423. package/build/dist/Server/Utils/Response.js.map +1 -1
  424. package/build/dist/Server/Utils/SSRFProtection.js +192 -0
  425. package/build/dist/Server/Utils/SSRFProtection.js.map +1 -0
  426. package/build/dist/Server/Utils/StartServer.js +7 -0
  427. package/build/dist/Server/Utils/StartServer.js.map +1 -1
  428. package/build/dist/Server/Utils/StatusPageSubscriberWebhook.js +24 -0
  429. package/build/dist/Server/Utils/StatusPageSubscriberWebhook.js.map +1 -1
  430. package/build/dist/Server/Utils/Telemetry/CaptureSpan.js +25 -11
  431. package/build/dist/Server/Utils/Telemetry/CaptureSpan.js.map +1 -1
  432. package/build/dist/Server/Utils/Telemetry/IngestionTimestamp.js +32 -0
  433. package/build/dist/Server/Utils/Telemetry/IngestionTimestamp.js.map +1 -0
  434. package/build/dist/Server/Utils/Telemetry/ResourceHeartbeat.js +92 -5
  435. package/build/dist/Server/Utils/Telemetry/ResourceHeartbeat.js.map +1 -1
  436. package/build/dist/Server/Utils/Telemetry/Telemetry.js +92 -6
  437. package/build/dist/Server/Utils/Telemetry/Telemetry.js.map +1 -1
  438. package/build/dist/Server/Utils/Telemetry.js +93 -6
  439. package/build/dist/Server/Utils/Telemetry.js.map +1 -1
  440. package/build/dist/Server/Utils/VendorAssets.js +121 -0
  441. package/build/dist/Server/Utils/VendorAssets.js.map +1 -0
  442. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.js +25 -4
  443. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.js.map +1 -1
  444. package/build/dist/Server/Utils/Workspace/Slack/Slack.js +5 -0
  445. package/build/dist/Server/Utils/Workspace/Slack/Slack.js.map +1 -1
  446. package/build/dist/Types/Analytics/RevenueEvent.js +26 -0
  447. package/build/dist/Types/Analytics/RevenueEvent.js.map +1 -0
  448. package/build/dist/Types/Dashboard/DashboardComponentType.js +27 -0
  449. package/build/dist/Types/Dashboard/DashboardComponentType.js.map +1 -1
  450. package/build/dist/Types/Dashboard/DashboardComponents/DashboardDataSourceChartComponent.js +2 -0
  451. package/build/dist/Types/Dashboard/DashboardComponents/DashboardDataSourceChartComponent.js.map +1 -0
  452. package/build/dist/Types/Dashboard/DashboardComponents/DashboardDataSourceGaugeComponent.js +2 -0
  453. package/build/dist/Types/Dashboard/DashboardComponents/DashboardDataSourceGaugeComponent.js.map +1 -0
  454. package/build/dist/Types/Dashboard/DashboardComponents/DashboardDataSourceTableComponent.js +2 -0
  455. package/build/dist/Types/Dashboard/DashboardComponents/DashboardDataSourceTableComponent.js.map +1 -0
  456. package/build/dist/Types/Dashboard/DashboardComponents/DashboardDataSourceValueComponent.js +16 -0
  457. package/build/dist/Types/Dashboard/DashboardComponents/DashboardDataSourceValueComponent.js.map +1 -0
  458. package/build/dist/Types/DataSource/DataSourceLimits.js +47 -0
  459. package/build/dist/Types/DataSource/DataSourceLimits.js.map +1 -0
  460. package/build/dist/Types/DataSource/DataSourceQueryConfig.js +10 -0
  461. package/build/dist/Types/DataSource/DataSourceQueryConfig.js.map +1 -0
  462. package/build/dist/Types/DataSource/DataSourceTableResult.js +14 -0
  463. package/build/dist/Types/DataSource/DataSourceTableResult.js.map +1 -0
  464. package/build/dist/Types/DataSource/DataSourceType.js +183 -0
  465. package/build/dist/Types/DataSource/DataSourceType.js.map +1 -0
  466. package/build/dist/Types/Date.js +38 -3
  467. package/build/dist/Types/Date.js.map +1 -1
  468. package/build/dist/Types/Password.js +56 -0
  469. package/build/dist/Types/Password.js.map +1 -0
  470. package/build/dist/Types/Permission.js +42 -0
  471. package/build/dist/Types/Permission.js.map +1 -1
  472. package/build/dist/Types/UserAuthenticationStatus.js +2 -0
  473. package/build/dist/Types/UserAuthenticationStatus.js.map +1 -0
  474. package/build/dist/UI/Components/ErrorBoundary.js +388 -72
  475. package/build/dist/UI/Components/ErrorBoundary.js.map +1 -1
  476. package/build/dist/UI/Components/Icon/Icon.js +10 -4
  477. package/build/dist/UI/Components/Icon/Icon.js.map +1 -1
  478. package/build/dist/UI/Components/Modal/ConfirmModal.js +1 -1
  479. package/build/dist/UI/Components/Modal/ConfirmModal.js.map +1 -1
  480. package/build/dist/UI/Components/Modal/Modal.js +178 -19
  481. package/build/dist/UI/Components/Modal/Modal.js.map +1 -1
  482. package/build/dist/UI/Components/Modal/ModalFooter.js +3 -1
  483. package/build/dist/UI/Components/Modal/ModalFooter.js.map +1 -1
  484. package/build/dist/UI/Components/MoreMenu/MoreMenu.js +9 -6
  485. package/build/dist/UI/Components/MoreMenu/MoreMenu.js.map +1 -1
  486. package/build/dist/UI/Components/MoreMenu/MoreMenuItem.js +7 -1
  487. package/build/dist/UI/Components/MoreMenu/MoreMenuItem.js.map +1 -1
  488. package/build/dist/UI/Components/StatusPage/ResourceGrid.js +119 -0
  489. package/build/dist/UI/Components/StatusPage/ResourceGrid.js.map +1 -0
  490. package/build/dist/UI/Components/StatusPage/ResourceGroupNavigator.js +354 -0
  491. package/build/dist/UI/Components/StatusPage/ResourceGroupNavigator.js.map +1 -0
  492. package/build/dist/UI/Components/StatusPage/ResourceList.js +203 -0
  493. package/build/dist/UI/Components/StatusPage/ResourceList.js.map +1 -0
  494. package/build/dist/UI/Utils/AnalyticsModelAPI/AnalyticsModelAPI.js +1 -6
  495. package/build/dist/UI/Utils/AnalyticsModelAPI/AnalyticsModelAPI.js.map +1 -1
  496. package/build/dist/UI/Utils/ModelAPI/ModelAPI.js +3 -8
  497. package/build/dist/UI/Utils/ModelAPI/ModelAPI.js.map +1 -1
  498. package/build/dist/UI/Utils/TestDataSource.js +39 -0
  499. package/build/dist/UI/Utils/TestDataSource.js.map +1 -0
  500. package/build/dist/Utils/Analytics.js +4 -0
  501. package/build/dist/Utils/Analytics.js.map +1 -1
  502. package/build/dist/Utils/Dashboard/Components/DashboardDataSourceChartComponent.js +79 -0
  503. package/build/dist/Utils/Dashboard/Components/DashboardDataSourceChartComponent.js.map +1 -0
  504. package/build/dist/Utils/Dashboard/Components/DashboardDataSourceGaugeComponent.js +111 -0
  505. package/build/dist/Utils/Dashboard/Components/DashboardDataSourceGaugeComponent.js.map +1 -0
  506. package/build/dist/Utils/Dashboard/Components/DashboardDataSourceShared.js +15 -0
  507. package/build/dist/Utils/Dashboard/Components/DashboardDataSourceShared.js.map +1 -0
  508. package/build/dist/Utils/Dashboard/Components/DashboardDataSourceTableComponent.js +62 -0
  509. package/build/dist/Utils/Dashboard/Components/DashboardDataSourceTableComponent.js.map +1 -0
  510. package/build/dist/Utils/Dashboard/Components/DashboardDataSourceValueComponent.js +112 -0
  511. package/build/dist/Utils/Dashboard/Components/DashboardDataSourceValueComponent.js.map +1 -0
  512. package/build/dist/Utils/Dashboard/Components/Index.js +16 -0
  513. package/build/dist/Utils/Dashboard/Components/Index.js.map +1 -1
  514. package/build/dist/Utils/DataSource/DataSourceQueryText.js +64 -0
  515. package/build/dist/Utils/DataSource/DataSourceQueryText.js.map +1 -0
  516. package/build/dist/Utils/DataSource/DataSourceValueReducer.js +124 -0
  517. package/build/dist/Utils/DataSource/DataSourceValueReducer.js.map +1 -0
  518. package/build/dist/Utils/Metrics/MetricResourceAttributeUtil.js +281 -0
  519. package/build/dist/Utils/Metrics/MetricResourceAttributeUtil.js.map +1 -0
  520. package/build/dist/Utils/NetworkDiscovery/ScanTargetUtil.js +8 -6
  521. package/build/dist/Utils/NetworkDiscovery/ScanTargetUtil.js.map +1 -1
  522. package/build/dist/Utils/StatusPage/GroupHierarchyView.js +560 -0
  523. package/build/dist/Utils/StatusPage/GroupHierarchyView.js.map +1 -0
  524. package/build/dist/Utils/StatusPage/ResourceExplorer.js +519 -0
  525. package/build/dist/Utils/StatusPage/ResourceExplorer.js.map +1 -0
  526. package/jest.config.json +1 -0
  527. package/package.json +5 -1
  528. package/tsconfig.json +12 -10
@@ -0,0 +1,61 @@
1
+ import URL from "../../Types/API/URL";
2
+ import Dictionary from "../../Types/Dictionary";
3
+ import HTTPErrorResponse from "../../Types/API/HTTPErrorResponse";
4
+ import HTTPResponse from "../../Types/API/HTTPResponse";
5
+ import { JSONObject } from "../../Types/JSON";
6
+ import { APP_API_URL } from "../Config";
7
+ import API from "./API/API";
8
+
9
+ export interface DataSourceTestResult {
10
+ success: boolean;
11
+ message: string;
12
+ }
13
+
14
+ export default class TestDataSource {
15
+ /*
16
+ * Tests a data source's connectivity and credentials (by id) via the
17
+ * /data-source/test endpoint and returns a friendly success/failure
18
+ * result. The endpoint replies 200 with { ok, message } for both
19
+ * outcomes, so failures surface through `ok` rather than an HTTP error.
20
+ * Callers pass the project tenant headers.
21
+ */
22
+ public static async test(data: {
23
+ dataSourceId: string;
24
+ headers?: Dictionary<string> | undefined;
25
+ }): Promise<DataSourceTestResult> {
26
+ try {
27
+ const response: HTTPResponse<JSONObject> | HTTPErrorResponse =
28
+ await API.post({
29
+ url: URL.fromString(APP_API_URL.toString()).addRoute(
30
+ "/data-source/test",
31
+ ),
32
+ data: {
33
+ dataSourceId: data.dataSourceId,
34
+ },
35
+ ...(data.headers ? { headers: data.headers } : {}),
36
+ });
37
+
38
+ if (response.isFailure()) {
39
+ return {
40
+ success: false,
41
+ message: API.getFriendlyMessage(response),
42
+ };
43
+ }
44
+
45
+ const responseData: JSONObject = response.data as JSONObject;
46
+ const isOk: boolean = Boolean(responseData["ok"]);
47
+
48
+ return {
49
+ success: isOk,
50
+ message:
51
+ (responseData["message"] as string) ||
52
+ (isOk ? "Connection successful." : "Connection failed."),
53
+ };
54
+ } catch (err) {
55
+ return {
56
+ success: false,
57
+ message: API.getFriendlyMessage(err),
58
+ };
59
+ }
60
+ }
61
+ }
@@ -201,6 +201,42 @@ function copyMonacoAssets(outdir) {
201
201
  fs.cpSync(source, destination, { recursive: true });
202
202
  }
203
203
 
204
+ // Tailwind's Play CDN build, copied out of Common the same way.
205
+ //
206
+ // It used to be committed once per frontend - five byte-identical copies of a
207
+ // 684 KB minified file, each one its own set of code-scanning alerts to
208
+ // triage. The server-rendered pages (docs, the API reference, the on-call and
209
+ // SSO message views) needed a copy too, and adding a sixth is not a thing
210
+ // worth doing. Common/Server/Static/Vendor is now the only copy in the tree:
211
+ // the services mount it at /oneuptime-assets, and the frontends get it copied
212
+ // in here, at the path their index.ejs already asks for.
213
+ //
214
+ // The filename carries the version, so it stays in the URL - changing it would
215
+ // mean editing five index.ejs files to match, and getting one wrong is an
216
+ // unstyled page.
217
+ const TAILWIND_FILENAME = "tailwind-3.4.5.js";
218
+
219
+ function copyTailwindAsset(outdir) {
220
+ const source = path.resolve(
221
+ __dirname,
222
+ "..",
223
+ "Server",
224
+ "Static",
225
+ "Vendor",
226
+ "tailwind",
227
+ TAILWIND_FILENAME,
228
+ );
229
+
230
+ const destination = path.resolve(
231
+ path.dirname(outdir),
232
+ "assets/js",
233
+ TAILWIND_FILENAME,
234
+ );
235
+
236
+ fs.mkdirSync(path.dirname(destination), { recursive: true });
237
+ fs.copyFileSync(source, destination);
238
+ }
239
+
204
240
  // Read environment variables from .env file
205
241
  function readEnvFile(pathToFile) {
206
242
  if (!fs.existsSync(pathToFile)) {
@@ -346,6 +382,9 @@ async function build(config, serviceName) {
346
382
  copyMonacoAssets(config.outdir);
347
383
  console.log(`📦 Copied Monaco assets for ${serviceName}`);
348
384
 
385
+ copyTailwindAsset(config.outdir);
386
+ console.log(`📦 Copied Tailwind for ${serviceName}`);
387
+
349
388
  if (isAnalyze && result.metafile) {
350
389
  const analyzeText = await esbuild.analyzeMetafile(result.metafile);
351
390
  console.log(`\n📊 Bundle analysis for ${serviceName}:`);
@@ -379,6 +418,9 @@ async function watch(config, serviceName) {
379
418
  copyMonacoAssets(config.outdir);
380
419
  console.log(`📦 Copied Monaco assets for ${serviceName}`);
381
420
 
421
+ copyTailwindAsset(config.outdir);
422
+ console.log(`📦 Copied Tailwind for ${serviceName}`);
423
+
382
424
  await context.watch();
383
425
  console.log(`👀 Watching ${serviceName} for changes...`);
384
426
  } catch (error) {
@@ -394,4 +436,7 @@ module.exports = {
394
436
  createCSSPlugin,
395
437
  createFileLoaderPlugin,
396
438
  readEnvFile,
439
+ // Exported so Common/Tests can run it, rather than assert on its source.
440
+ copyTailwindAsset,
441
+ TAILWIND_FILENAME,
397
442
  };
@@ -1,6 +1,11 @@
1
1
  import Email from "../Types/Email";
2
2
  import { JSONObject } from "../Types/JSON";
3
3
  import posthog from "posthog-js";
4
+ import {
5
+ REVENUE_EVENT_SCHEMA_VERSION,
6
+ RevenueEventName,
7
+ RevenueEventProperties,
8
+ } from "../Types/Analytics/RevenueEvent";
4
9
 
5
10
  export default class Analytics {
6
11
  private _isInitialized: boolean = false;
@@ -32,6 +37,16 @@ export default class Analytics {
32
37
  posthog.reset();
33
38
  }
34
39
 
40
+ public captureRevenueEvent(
41
+ eventName: RevenueEventName,
42
+ data: RevenueEventProperties,
43
+ ): void {
44
+ this.capture(eventName, {
45
+ ...data,
46
+ event_schema_version: REVENUE_EVENT_SCHEMA_VERSION,
47
+ });
48
+ }
49
+
35
50
  public capture(eventName: string, data?: JSONObject): void {
36
51
  // PostHog tracking
37
52
  if (this.isInitialized) {
@@ -0,0 +1,88 @@
1
+ import DashboardDataSourceChartComponent from "../../../Types/Dashboard/DashboardComponents/DashboardDataSourceChartComponent";
2
+ import { ObjectType } from "../../../Types/JSON";
3
+ import ObjectID from "../../../Types/ObjectID";
4
+ import DashboardBaseComponentUtil from "./DashboardBaseComponent";
5
+ import {
6
+ ComponentArgument,
7
+ ComponentArgumentSection,
8
+ ComponentInputType,
9
+ } from "../../../Types/Dashboard/DashboardComponents/ComponentArgument";
10
+ import DashboardComponentType from "../../../Types/Dashboard/DashboardComponentType";
11
+ import DashboardChartType from "../../../Types/Dashboard/Chart/ChartType";
12
+
13
+ const DisplaySection: ComponentArgumentSection = {
14
+ name: "Display Options",
15
+ description: "Customize the chart appearance",
16
+ order: 1,
17
+ };
18
+
19
+ export default class DashboardDataSourceChartComponentUtil extends DashboardBaseComponentUtil {
20
+ public static override getDefaultComponent(): DashboardDataSourceChartComponent {
21
+ return {
22
+ _type: ObjectType.DashboardComponent,
23
+ componentType: DashboardComponentType.DataSourceChart,
24
+ widthInDashboardUnits: 6,
25
+ heightInDashboardUnits: 3,
26
+ topInDashboardUnits: 0,
27
+ leftInDashboardUnits: 0,
28
+ componentId: ObjectID.generate(),
29
+ minHeightInDashboardUnits: 3,
30
+ minWidthInDashboardUnits: 6,
31
+ arguments: {
32
+ /*
33
+ * Seeded with one blank query so the editor opens on a query card
34
+ * instead of an empty panel the user has to discover a button in.
35
+ */
36
+ queries: [
37
+ {
38
+ id: ObjectID.generate().toString(),
39
+ dataSourceId: "",
40
+ query: "",
41
+ },
42
+ ],
43
+ chartType: DashboardChartType.Line,
44
+ },
45
+ };
46
+ }
47
+
48
+ public static override getComponentConfigArguments(): Array<
49
+ ComponentArgument<DashboardDataSourceChartComponent>
50
+ > {
51
+ return [
52
+ {
53
+ name: "Chart Type",
54
+ description: "How the returned series will be visualized",
55
+ required: true,
56
+ type: ComponentInputType.Dropdown,
57
+ id: "chartType",
58
+ section: DisplaySection,
59
+ dropdownOptions: [
60
+ { label: "Line Chart", value: DashboardChartType.Line },
61
+ { label: "Bar Chart", value: DashboardChartType.Bar },
62
+ { label: "Area Chart", value: DashboardChartType.Area },
63
+ {
64
+ label: "Stacked Area Chart",
65
+ value: DashboardChartType.StackedArea,
66
+ },
67
+ { label: "Pie Chart", value: DashboardChartType.Pie },
68
+ ],
69
+ },
70
+ {
71
+ name: "Title",
72
+ description: "Displayed above the chart",
73
+ required: false,
74
+ type: ComponentInputType.Text,
75
+ id: "chartTitle",
76
+ section: DisplaySection,
77
+ },
78
+ {
79
+ name: "Description",
80
+ description: "Subtitle shown below the title",
81
+ required: false,
82
+ type: ComponentInputType.LongText,
83
+ id: "chartDescription",
84
+ section: DisplaySection,
85
+ },
86
+ ];
87
+ }
88
+ }
@@ -0,0 +1,123 @@
1
+ import DashboardDataSourceGaugeComponent from "../../../Types/Dashboard/DashboardComponents/DashboardDataSourceGaugeComponent";
2
+ import { DataSourceValueReduce } from "../../../Types/Dashboard/DashboardComponents/DashboardDataSourceValueComponent";
3
+ import { ObjectType } from "../../../Types/JSON";
4
+ import ObjectID from "../../../Types/ObjectID";
5
+ import DashboardBaseComponentUtil from "./DashboardBaseComponent";
6
+ import {
7
+ ComponentArgument,
8
+ ComponentArgumentSection,
9
+ ComponentInputType,
10
+ } from "../../../Types/Dashboard/DashboardComponents/ComponentArgument";
11
+ import DashboardComponentType from "../../../Types/Dashboard/DashboardComponentType";
12
+ import { DATA_SOURCE_REDUCE_DROPDOWN_OPTIONS } from "./DashboardDataSourceShared";
13
+
14
+ const DisplaySection: ComponentArgumentSection = {
15
+ name: "Display Options",
16
+ description: "Customize the gauge range and appearance",
17
+ order: 1,
18
+ };
19
+
20
+ const ThresholdsSection: ComponentArgumentSection = {
21
+ name: "Thresholds",
22
+ description: "Set warning and critical levels",
23
+ order: 2,
24
+ defaultCollapsed: true,
25
+ };
26
+
27
+ export default class DashboardDataSourceGaugeComponentUtil extends DashboardBaseComponentUtil {
28
+ public static override getDefaultComponent(): DashboardDataSourceGaugeComponent {
29
+ return {
30
+ _type: ObjectType.DashboardComponent,
31
+ componentType: DashboardComponentType.DataSourceGauge,
32
+ widthInDashboardUnits: 3,
33
+ heightInDashboardUnits: 3,
34
+ topInDashboardUnits: 0,
35
+ leftInDashboardUnits: 0,
36
+ componentId: ObjectID.generate(),
37
+ minHeightInDashboardUnits: 2,
38
+ minWidthInDashboardUnits: 2,
39
+ arguments: {
40
+ query: {
41
+ id: ObjectID.generate().toString(),
42
+ dataSourceId: "",
43
+ query: "",
44
+ },
45
+ reduce: DataSourceValueReduce.Last,
46
+ minValue: 0,
47
+ maxValue: 100,
48
+ },
49
+ };
50
+ }
51
+
52
+ public static override getComponentConfigArguments(): Array<
53
+ ComponentArgument<DashboardDataSourceGaugeComponent>
54
+ > {
55
+ return [
56
+ {
57
+ name: "Title",
58
+ description: "Label shown above the gauge",
59
+ required: false,
60
+ type: ComponentInputType.Text,
61
+ id: "gaugeTitle",
62
+ section: DisplaySection,
63
+ },
64
+ {
65
+ name: "Reduce",
66
+ description:
67
+ "How the points returned across the dashboard's time range collapse into the single number the needle points at",
68
+ required: false,
69
+ type: ComponentInputType.Dropdown,
70
+ id: "reduce",
71
+ placeholder: DataSourceValueReduce.Last,
72
+ section: DisplaySection,
73
+ dropdownOptions: DATA_SOURCE_REDUCE_DROPDOWN_OPTIONS,
74
+ },
75
+ {
76
+ name: "Unit",
77
+ description:
78
+ 'Suffix rendered after the centre value and on the min/max labels. Known units also scale it — "Bytes" reads as 1.5 MB, "ms" as 2.4 sec, "%" as 99.9%.',
79
+ required: false,
80
+ type: ComponentInputType.Text,
81
+ id: "unit",
82
+ placeholder: "e.g. %, ms, Bytes",
83
+ section: DisplaySection,
84
+ },
85
+ {
86
+ name: "Min Value",
87
+ description: "Left end of the gauge scale",
88
+ required: false,
89
+ type: ComponentInputType.Number,
90
+ id: "minValue",
91
+ placeholder: "0",
92
+ section: DisplaySection,
93
+ },
94
+ {
95
+ name: "Max Value",
96
+ description: "Right end of the gauge scale",
97
+ required: false,
98
+ type: ComponentInputType.Number,
99
+ id: "maxValue",
100
+ placeholder: "100",
101
+ section: DisplaySection,
102
+ },
103
+ {
104
+ name: "Warning Threshold",
105
+ description: "Yellow zone starts at this value",
106
+ required: false,
107
+ type: ComponentInputType.Number,
108
+ id: "warningThreshold",
109
+ isAdvanced: true,
110
+ section: ThresholdsSection,
111
+ },
112
+ {
113
+ name: "Critical Threshold",
114
+ description: "Red zone starts at this value",
115
+ required: false,
116
+ type: ComponentInputType.Number,
117
+ id: "criticalThreshold",
118
+ isAdvanced: true,
119
+ section: ThresholdsSection,
120
+ },
121
+ ];
122
+ }
123
+ }
@@ -0,0 +1,16 @@
1
+ import { DropdownOption } from "../../../UI/Components/Dropdown/Dropdown";
2
+ import { DataSourceValueReduce } from "../../../Types/Dashboard/DashboardComponents/DashboardDataSourceValueComponent";
3
+
4
+ /*
5
+ * Reduction picker shared by the Data Source Value and Gauge widgets — both
6
+ * collapse a series into one number the same way, so the option list (and
7
+ * its wording) lives in one place.
8
+ */
9
+ export const DATA_SOURCE_REDUCE_DROPDOWN_OPTIONS: Array<DropdownOption> = [
10
+ { label: "Last value", value: DataSourceValueReduce.Last },
11
+ { label: "First value", value: DataSourceValueReduce.First },
12
+ { label: "Average", value: DataSourceValueReduce.Avg },
13
+ { label: "Sum", value: DataSourceValueReduce.Sum },
14
+ { label: "Min", value: DataSourceValueReduce.Min },
15
+ { label: "Max", value: DataSourceValueReduce.Max },
16
+ ];
@@ -0,0 +1,72 @@
1
+ import DashboardDataSourceTableComponent from "../../../Types/Dashboard/DashboardComponents/DashboardDataSourceTableComponent";
2
+ import { ObjectType } from "../../../Types/JSON";
3
+ import ObjectID from "../../../Types/ObjectID";
4
+ import DashboardBaseComponentUtil from "./DashboardBaseComponent";
5
+ import {
6
+ ComponentArgument,
7
+ ComponentArgumentSection,
8
+ ComponentInputType,
9
+ } from "../../../Types/Dashboard/DashboardComponents/ComponentArgument";
10
+ import DashboardComponentType from "../../../Types/Dashboard/DashboardComponentType";
11
+
12
+ const DisplaySection: ComponentArgumentSection = {
13
+ name: "Display Options",
14
+ description: "Customize how the returned rows render",
15
+ order: 1,
16
+ };
17
+
18
+ export default class DashboardDataSourceTableComponentUtil extends DashboardBaseComponentUtil {
19
+ public static override getDefaultComponent(): DashboardDataSourceTableComponent {
20
+ return {
21
+ _type: ObjectType.DashboardComponent,
22
+ componentType: DashboardComponentType.DataSourceTable,
23
+ widthInDashboardUnits: 6,
24
+ heightInDashboardUnits: 4,
25
+ topInDashboardUnits: 0,
26
+ leftInDashboardUnits: 0,
27
+ componentId: ObjectID.generate(),
28
+ minHeightInDashboardUnits: 3,
29
+ minWidthInDashboardUnits: 4,
30
+ arguments: {
31
+ query: {
32
+ id: ObjectID.generate().toString(),
33
+ dataSourceId: "",
34
+ query: "",
35
+ },
36
+ },
37
+ };
38
+ }
39
+
40
+ public static override getComponentConfigArguments(): Array<
41
+ ComponentArgument<DashboardDataSourceTableComponent>
42
+ > {
43
+ return [
44
+ {
45
+ name: "Title",
46
+ description: "Header shown above the table",
47
+ required: false,
48
+ type: ComponentInputType.Text,
49
+ id: "tableTitle",
50
+ section: DisplaySection,
51
+ },
52
+ {
53
+ name: "Description",
54
+ description: "Subtitle shown below the title",
55
+ required: false,
56
+ type: ComponentInputType.LongText,
57
+ id: "tableDescription",
58
+ section: DisplaySection,
59
+ },
60
+ {
61
+ name: "Max Rows",
62
+ description:
63
+ "Only render this many rows, applied after sorting. Leave empty to render every row the query returns.",
64
+ required: false,
65
+ type: ComponentInputType.Number,
66
+ id: "maxRows",
67
+ placeholder: "All rows",
68
+ section: DisplaySection,
69
+ },
70
+ ];
71
+ }
72
+ }
@@ -0,0 +1,126 @@
1
+ import DashboardDataSourceValueComponent, {
2
+ DataSourceValueReduce,
3
+ } from "../../../Types/Dashboard/DashboardComponents/DashboardDataSourceValueComponent";
4
+ import { DashboardValueTrendDirection } from "../../../Types/Dashboard/DashboardComponents/DashboardValueComponent";
5
+ import { ObjectType } from "../../../Types/JSON";
6
+ import ObjectID from "../../../Types/ObjectID";
7
+ import DashboardBaseComponentUtil from "./DashboardBaseComponent";
8
+ import {
9
+ ComponentArgument,
10
+ ComponentArgumentSection,
11
+ ComponentInputType,
12
+ } from "../../../Types/Dashboard/DashboardComponents/ComponentArgument";
13
+ import DashboardComponentType from "../../../Types/Dashboard/DashboardComponentType";
14
+ import { DATA_SOURCE_REDUCE_DROPDOWN_OPTIONS } from "./DashboardDataSourceShared";
15
+
16
+ const DisplaySection: ComponentArgumentSection = {
17
+ name: "Display Options",
18
+ description: "Title, unit, and how the returned points reduce to one number",
19
+ order: 1,
20
+ };
21
+
22
+ const ThresholdsSection: ComponentArgumentSection = {
23
+ name: "Thresholds",
24
+ description: "Set warning and critical levels",
25
+ order: 2,
26
+ defaultCollapsed: true,
27
+ };
28
+
29
+ export default class DashboardDataSourceValueComponentUtil extends DashboardBaseComponentUtil {
30
+ public static override getDefaultComponent(): DashboardDataSourceValueComponent {
31
+ return {
32
+ _type: ObjectType.DashboardComponent,
33
+ componentType: DashboardComponentType.DataSourceValue,
34
+ widthInDashboardUnits: 3,
35
+ heightInDashboardUnits: 1,
36
+ topInDashboardUnits: 0,
37
+ leftInDashboardUnits: 0,
38
+ componentId: ObjectID.generate(),
39
+ minHeightInDashboardUnits: 1,
40
+ minWidthInDashboardUnits: 1,
41
+ arguments: {
42
+ title: "",
43
+ query: {
44
+ id: ObjectID.generate().toString(),
45
+ dataSourceId: "",
46
+ query: "",
47
+ },
48
+ reduce: DataSourceValueReduce.Last,
49
+ },
50
+ };
51
+ }
52
+
53
+ public static override getComponentConfigArguments(): Array<
54
+ ComponentArgument<DashboardDataSourceValueComponent>
55
+ > {
56
+ return [
57
+ {
58
+ name: "Title",
59
+ description: "Label shown above the value",
60
+ required: false,
61
+ type: ComponentInputType.Text,
62
+ id: "title",
63
+ section: DisplaySection,
64
+ },
65
+ {
66
+ name: "Reduce",
67
+ description:
68
+ "How the points returned across the dashboard's time range collapse into the single number shown",
69
+ required: false,
70
+ type: ComponentInputType.Dropdown,
71
+ id: "reduce",
72
+ placeholder: DataSourceValueReduce.Last,
73
+ section: DisplaySection,
74
+ dropdownOptions: DATA_SOURCE_REDUCE_DROPDOWN_OPTIONS,
75
+ },
76
+ {
77
+ name: "Unit",
78
+ description:
79
+ 'Suffix rendered after the number. Known units also scale it — "Bytes" reads as 1.5 MB, "ms" as 2.4 sec, "%" as 99.9%. Leave empty for a bare number.',
80
+ required: false,
81
+ type: ComponentInputType.Text,
82
+ id: "unit",
83
+ placeholder: "e.g. %, ms, Bytes, requests",
84
+ section: DisplaySection,
85
+ },
86
+ {
87
+ name: "Trend Direction",
88
+ description:
89
+ "How the trend arrow is coloured. Higher is better paints a rise green; higher is worse paints it red.",
90
+ required: false,
91
+ type: ComponentInputType.Dropdown,
92
+ id: "trendDirection",
93
+ isAdvanced: true,
94
+ section: DisplaySection,
95
+ dropdownOptions: [
96
+ {
97
+ label: "Higher is better (↑ green)",
98
+ value: DashboardValueTrendDirection.HigherIsBetter,
99
+ },
100
+ {
101
+ label: "Higher is worse (↑ red)",
102
+ value: DashboardValueTrendDirection.HigherIsWorse,
103
+ },
104
+ ],
105
+ },
106
+ {
107
+ name: "Warning Threshold",
108
+ description: "Yellow background when value exceeds this",
109
+ required: false,
110
+ type: ComponentInputType.Number,
111
+ id: "warningThreshold",
112
+ isAdvanced: true,
113
+ section: ThresholdsSection,
114
+ },
115
+ {
116
+ name: "Critical Threshold",
117
+ description: "Red background when value exceeds this",
118
+ required: false,
119
+ type: ComponentInputType.Number,
120
+ id: "criticalThreshold",
121
+ isAdvanced: true,
122
+ section: ThresholdsSection,
123
+ },
124
+ ];
125
+ }
126
+ }
@@ -7,6 +7,10 @@ import DashboardCephOsdListComponentUtil from "./DashboardCephOsdListComponent";
7
7
  import DashboardCephPoolListComponentUtil from "./DashboardCephPoolListComponent";
8
8
  import DashboardChartComponentUtil from "./DashboardChartComponent";
9
9
  import DashboardClockComponentUtil from "./DashboardClockComponent";
10
+ import DashboardDataSourceChartComponentUtil from "./DashboardDataSourceChartComponent";
11
+ import DashboardDataSourceGaugeComponentUtil from "./DashboardDataSourceGaugeComponent";
12
+ import DashboardDataSourceTableComponentUtil from "./DashboardDataSourceTableComponent";
13
+ import DashboardDataSourceValueComponentUtil from "./DashboardDataSourceValueComponent";
10
14
  import DashboardDockerContainerListComponentUtil from "./DashboardDockerContainerListComponent";
11
15
  import DashboardDockerHostListComponentUtil from "./DashboardDockerHostListComponent";
12
16
  import DashboardDockerImageListComponentUtil from "./DashboardDockerImageListComponent";
@@ -85,6 +89,30 @@ export default class DashboardComponentsUtil {
85
89
  >;
86
90
  }
87
91
 
92
+ if (dashboardComponentType === DashboardComponentType.DataSourceChart) {
93
+ return DashboardDataSourceChartComponentUtil.getComponentConfigArguments() as Array<
94
+ ComponentArgument<DashboardBaseComponent>
95
+ >;
96
+ }
97
+
98
+ if (dashboardComponentType === DashboardComponentType.DataSourceValue) {
99
+ return DashboardDataSourceValueComponentUtil.getComponentConfigArguments() as Array<
100
+ ComponentArgument<DashboardBaseComponent>
101
+ >;
102
+ }
103
+
104
+ if (dashboardComponentType === DashboardComponentType.DataSourceGauge) {
105
+ return DashboardDataSourceGaugeComponentUtil.getComponentConfigArguments() as Array<
106
+ ComponentArgument<DashboardBaseComponent>
107
+ >;
108
+ }
109
+
110
+ if (dashboardComponentType === DashboardComponentType.DataSourceTable) {
111
+ return DashboardDataSourceTableComponentUtil.getComponentConfigArguments() as Array<
112
+ ComponentArgument<DashboardBaseComponent>
113
+ >;
114
+ }
115
+
88
116
  if (dashboardComponentType === DashboardComponentType.LogStream) {
89
117
  return DashboardLogStreamComponentUtil.getComponentConfigArguments() as Array<
90
118
  ComponentArgument<DashboardBaseComponent>