@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,62 @@
1
+ /*
2
+ * Hard resource bounds applied to every external Data Source query,
3
+ * regardless of connector. These protect the OneUptime API server (memory,
4
+ * event loop) and the customer's target system from runaway dashboard
5
+ * queries — a dashboard with 20 widgets refreshing every minute multiplies
6
+ * whatever a single query costs.
7
+ */
8
+
9
+ // Upper bound on wall-clock time for one connection attempt.
10
+ export const DATA_SOURCE_CONNECT_TIMEOUT_IN_MS: number = 10 * 1000;
11
+
12
+ // Upper bound on wall-clock time for one query execution.
13
+ export const DATA_SOURCE_QUERY_TIMEOUT_IN_MS: number = 30 * 1000;
14
+
15
+ /*
16
+ * Row cap for time-series results. 11k points ≈ 7.5 days at 1-minute
17
+ * resolution for a single series — beyond that the chart cannot render the
18
+ * detail anyway. Connectors fetch cap+1 to detect truncation.
19
+ */
20
+ export const DATA_SOURCE_MAX_TIME_SERIES_ROWS: number = 11000;
21
+
22
+ // Row cap for tabular results — dashboards render tables, not exports.
23
+ export const DATA_SOURCE_MAX_TABLE_ROWS: number = 1000;
24
+
25
+ // Cap on distinct series one query may return before truncation.
26
+ export const DATA_SOURCE_MAX_SERIES: number = 100;
27
+
28
+ /*
29
+ * Cap on the raw HTTP response body accepted from HTTP-based sources
30
+ * (Prometheus/Loki/Elasticsearch/REST), before parsing. Prevents a
31
+ * misconfigured endpoint from ballooning API-server memory.
32
+ */
33
+ export const DATA_SOURCE_MAX_RESPONSE_SIZE_IN_BYTES: number = 20 * 1024 * 1024;
34
+
35
+ /*
36
+ * Default step for range queries when the client does not send one:
37
+ * aim for ~250 buckets across the selected window, clamped to sane bounds.
38
+ */
39
+ export const DATA_SOURCE_TARGET_BUCKETS: number = 250;
40
+ export const DATA_SOURCE_MIN_STEP_IN_SECONDS: number = 10;
41
+ export const DATA_SOURCE_MAX_STEP_IN_SECONDS: number = 24 * 60 * 60;
42
+
43
+ export class DataSourceLimitsUtil {
44
+ /*
45
+ * Derive a range-query step (seconds) from a time window: ~TARGET_BUCKETS
46
+ * buckets, clamped. Used server-side when the widget doesn't specify one
47
+ * so Prometheus/Loki range queries stay bounded no matter the window.
48
+ */
49
+ public static getStepInSeconds(startDate: Date, endDate: Date): number {
50
+ const rangeSeconds: number = Math.max(
51
+ Math.floor((endDate.getTime() - startDate.getTime()) / 1000),
52
+ 1,
53
+ );
54
+ const rawStep: number = Math.ceil(
55
+ rangeSeconds / DATA_SOURCE_TARGET_BUCKETS,
56
+ );
57
+ return Math.min(
58
+ Math.max(rawStep, DATA_SOURCE_MIN_STEP_IN_SECONDS),
59
+ DATA_SOURCE_MAX_STEP_IN_SECONDS,
60
+ );
61
+ }
62
+ }
@@ -0,0 +1,41 @@
1
+ /*
2
+ * A widget-stored binding to an external Data Source. Persisted inside
3
+ * `Dashboard.dashboardViewConfig` on chart/value/gauge/table components, so
4
+ * every field must survive JSON round-trips (plain strings/numbers only —
5
+ * dataSourceId is a string, not an ObjectID instance).
6
+ */
7
+ export default interface DataSourceQueryConfig {
8
+ /*
9
+ * Stable identity for this query within the widget (mirrors
10
+ * MetricQueryConfigData.id) so editor UI state survives reorders.
11
+ */
12
+ id?: string | undefined;
13
+
14
+ // _id of the project's DataSource record this query runs against.
15
+ dataSourceId: string;
16
+
17
+ /*
18
+ * Query text in the source's native language: PromQL, SQL, LogQL,
19
+ * Elasticsearch Query DSL JSON, or the REST request descriptor JSON.
20
+ * SQL queries may use the $__startTime / $__endTime / $__startTimeMs /
21
+ * $__endTimeMs / $__rangeSeconds macros, replaced server-side with the
22
+ * dashboard's current time window.
23
+ */
24
+ query: string;
25
+
26
+ /*
27
+ * Optional legend template for chart series. Supports {{label}}
28
+ * placeholders resolved against each series' group keys (e.g. Prometheus
29
+ * label values). Absent ⇒ series are named from their group keys.
30
+ */
31
+ legend?: string | undefined;
32
+ }
33
+
34
+ /*
35
+ * What shape of result the widget wants back from the query endpoint.
36
+ * Charts/values/gauges consume time series; the table widget consumes rows.
37
+ */
38
+ export enum DataSourceResultKind {
39
+ TimeSeries = "TimeSeries",
40
+ Table = "Table",
41
+ }
@@ -0,0 +1,38 @@
1
+ import { JSONValue } from "../JSON";
2
+
3
+ /*
4
+ * Column type hints let table widgets right-align numbers and format dates
5
+ * without sniffing every row. Connectors set these from driver metadata when
6
+ * available and fall back to inspecting the first row.
7
+ */
8
+ export enum DataSourceTableColumnType {
9
+ Text = "Text",
10
+ Number = "Number",
11
+ Date = "Date",
12
+ Boolean = "Boolean",
13
+ Json = "Json",
14
+ }
15
+
16
+ export interface DataSourceTableColumn {
17
+ // Row-object key this column reads from.
18
+ key: string;
19
+ // Human-facing header; defaults to the key.
20
+ title: string;
21
+ type: DataSourceTableColumnType;
22
+ }
23
+
24
+ /*
25
+ * Normalized tabular result every connector's queryTable returns. Rows are
26
+ * plain JSON objects keyed by column key so the payload serializes straight
27
+ * through the API to the table widget.
28
+ */
29
+ export default interface DataSourceTableResult {
30
+ columns: Array<DataSourceTableColumn>;
31
+ rows: Array<{ [key: string]: JSONValue }>;
32
+ /*
33
+ * True when the connector clamped the result at the row cap — the widget
34
+ * shows a truncation banner so users don't mistake a clamp for the full
35
+ * result set.
36
+ */
37
+ truncated?: boolean | undefined;
38
+ }
@@ -0,0 +1,213 @@
1
+ /*
2
+ * External systems a project-level Data Source can connect to. Dashboards
3
+ * bind widgets to a Data Source + a query written in that source's native
4
+ * query language (PromQL, SQL, LogQL, ES Query DSL, or a REST request
5
+ * descriptor), and the server-side connector for the type normalizes the
6
+ * response into the same shapes OneUptime's own widgets already consume.
7
+ */
8
+ enum DataSourceType {
9
+ Prometheus = "Prometheus",
10
+ PostgreSQL = "PostgreSQL",
11
+ MySQL = "MySQL",
12
+ MicrosoftSqlServer = "Microsoft SQL Server",
13
+ ClickHouse = "ClickHouse",
14
+ Loki = "Loki",
15
+ Elasticsearch = "Elasticsearch",
16
+ RestApi = "REST API",
17
+ }
18
+
19
+ export default DataSourceType;
20
+
21
+ /*
22
+ * What a type is used for, so the type picker can group hundreds of
23
+ * connectors into a handful of sections. Enum values are the section
24
+ * headings; DataSourceTypeCategories below fixes the display order.
25
+ */
26
+ export enum DataSourceTypeCategory {
27
+ Metrics = "Metrics",
28
+ Logs = "Logs",
29
+ Databases = "Databases",
30
+ Search = "Search",
31
+ Api = "APIs",
32
+ }
33
+
34
+ export const DataSourceTypeCategories: Array<DataSourceTypeCategory> = [
35
+ DataSourceTypeCategory.Metrics,
36
+ DataSourceTypeCategory.Logs,
37
+ DataSourceTypeCategory.Databases,
38
+ DataSourceTypeCategory.Search,
39
+ DataSourceTypeCategory.Api,
40
+ ];
41
+
42
+ export interface DataSourceTypeProps {
43
+ dataSourceType: DataSourceType;
44
+ title: string;
45
+ description: string;
46
+ category: DataSourceTypeCategory;
47
+ queryLanguageTitle: string;
48
+ queryPlaceholder: string;
49
+ }
50
+
51
+ export class DataSourceTypeUtil {
52
+ public static getAllDataSourceTypes(): Array<DataSourceType> {
53
+ return [
54
+ DataSourceType.Prometheus,
55
+ DataSourceType.PostgreSQL,
56
+ DataSourceType.MySQL,
57
+ DataSourceType.MicrosoftSqlServer,
58
+ DataSourceType.ClickHouse,
59
+ DataSourceType.Loki,
60
+ DataSourceType.Elasticsearch,
61
+ DataSourceType.RestApi,
62
+ ];
63
+ }
64
+
65
+ /*
66
+ * Sources reached over HTTP(S) at a base URL (Prometheus-compatible APIs,
67
+ * Loki, Elasticsearch, arbitrary REST endpoints). These require `url` on
68
+ * the Data Source and are queried through the SSRF-guarded HTTP client.
69
+ */
70
+ public static isHttpBasedType(dataSourceType: DataSourceType): boolean {
71
+ return [
72
+ DataSourceType.Prometheus,
73
+ DataSourceType.Loki,
74
+ DataSourceType.Elasticsearch,
75
+ DataSourceType.RestApi,
76
+ ].includes(dataSourceType);
77
+ }
78
+
79
+ /*
80
+ * Sources reached with a database driver over host/port. These require
81
+ * `databaseHost` (+ optionally port/databaseName/username/password) and
82
+ * run read-only guarded SQL.
83
+ */
84
+ public static isDatabaseType(dataSourceType: DataSourceType): boolean {
85
+ return [
86
+ DataSourceType.PostgreSQL,
87
+ DataSourceType.MySQL,
88
+ DataSourceType.MicrosoftSqlServer,
89
+ DataSourceType.ClickHouse,
90
+ ].includes(dataSourceType);
91
+ }
92
+
93
+ public static getCategory(
94
+ dataSourceType: DataSourceType,
95
+ ): DataSourceTypeCategory {
96
+ return DataSourceTypeUtil.getProps(dataSourceType).category;
97
+ }
98
+
99
+ /** Default port used to seed the settings form for database sources. */
100
+ public static getDefaultPort(dataSourceType: DataSourceType): number | null {
101
+ switch (dataSourceType) {
102
+ case DataSourceType.PostgreSQL:
103
+ return 5432;
104
+ case DataSourceType.MySQL:
105
+ return 3306;
106
+ case DataSourceType.MicrosoftSqlServer:
107
+ return 1433;
108
+ case DataSourceType.ClickHouse:
109
+ return 8123; // HTTP interface — the @clickhouse/client transport.
110
+ default:
111
+ return null;
112
+ }
113
+ }
114
+
115
+ public static getProps(dataSourceType: DataSourceType): DataSourceTypeProps {
116
+ switch (dataSourceType) {
117
+ case DataSourceType.Prometheus:
118
+ return {
119
+ dataSourceType,
120
+ title: "Prometheus",
121
+ description:
122
+ "Query a Prometheus-compatible API (Prometheus, Thanos, Cortex, Mimir, VictoriaMetrics) with PromQL.",
123
+ category: DataSourceTypeCategory.Metrics,
124
+ queryLanguageTitle: "PromQL",
125
+ queryPlaceholder: 'rate(http_requests_total{job="api"}[5m])',
126
+ };
127
+ case DataSourceType.PostgreSQL:
128
+ return {
129
+ dataSourceType,
130
+ title: "PostgreSQL",
131
+ description:
132
+ "Run read-only SQL against a PostgreSQL-compatible database (PostgreSQL, TimescaleDB, CockroachDB).",
133
+ category: DataSourceTypeCategory.Databases,
134
+ queryLanguageTitle: "SQL",
135
+ queryPlaceholder:
136
+ "SELECT created_at AS time, COUNT(*) AS value FROM orders WHERE created_at BETWEEN $__startTime AND $__endTime GROUP BY 1 ORDER BY 1",
137
+ };
138
+ case DataSourceType.MySQL:
139
+ return {
140
+ dataSourceType,
141
+ title: "MySQL",
142
+ description: "Run read-only SQL against a MySQL or MariaDB database.",
143
+ category: DataSourceTypeCategory.Databases,
144
+ queryLanguageTitle: "SQL",
145
+ queryPlaceholder:
146
+ "SELECT created_at AS time, COUNT(*) AS value FROM orders WHERE created_at BETWEEN $__startTime AND $__endTime GROUP BY 1 ORDER BY 1",
147
+ };
148
+ case DataSourceType.MicrosoftSqlServer:
149
+ return {
150
+ dataSourceType,
151
+ title: "Microsoft SQL Server",
152
+ description:
153
+ "Run read-only SQL against a Microsoft SQL Server or Azure SQL database.",
154
+ category: DataSourceTypeCategory.Databases,
155
+ queryLanguageTitle: "T-SQL",
156
+ queryPlaceholder:
157
+ "SELECT created_at AS time, COUNT(*) AS value FROM orders WHERE created_at BETWEEN $__startTime AND $__endTime GROUP BY created_at ORDER BY created_at",
158
+ };
159
+ case DataSourceType.ClickHouse:
160
+ return {
161
+ dataSourceType,
162
+ title: "ClickHouse",
163
+ description:
164
+ "Run read-only SQL against a ClickHouse database over its HTTP interface.",
165
+ category: DataSourceTypeCategory.Databases,
166
+ queryLanguageTitle: "SQL",
167
+ queryPlaceholder:
168
+ "SELECT toStartOfMinute(timestamp) AS time, count() AS value FROM events WHERE timestamp BETWEEN $__startTime AND $__endTime GROUP BY time ORDER BY time",
169
+ };
170
+ case DataSourceType.Loki:
171
+ return {
172
+ dataSourceType,
173
+ title: "Grafana Loki",
174
+ description:
175
+ "Query a Grafana Loki log aggregation endpoint with LogQL metric queries.",
176
+ category: DataSourceTypeCategory.Logs,
177
+ queryLanguageTitle: "LogQL",
178
+ queryPlaceholder: 'sum(rate({app="api"} |= "error" [5m]))',
179
+ };
180
+ case DataSourceType.Elasticsearch:
181
+ return {
182
+ dataSourceType,
183
+ title: "Elasticsearch",
184
+ description:
185
+ "Query an Elasticsearch or OpenSearch cluster with Query DSL (date-histogram aggregations for charts).",
186
+ category: DataSourceTypeCategory.Search,
187
+ queryLanguageTitle: "Query DSL (JSON)",
188
+ queryPlaceholder:
189
+ '{ "query": { "match_all": {} }, "aggs": { "over_time": { "date_histogram": { "field": "@timestamp", "fixed_interval": "1m" }, "aggs": { "value": { "value_count": { "field": "_id" } } } } } }',
190
+ };
191
+ case DataSourceType.RestApi:
192
+ return {
193
+ dataSourceType,
194
+ title: "REST API",
195
+ description:
196
+ "Fetch JSON from any HTTP(S) API and map fields into time series or tables.",
197
+ category: DataSourceTypeCategory.Api,
198
+ queryLanguageTitle: "Request (JSON)",
199
+ queryPlaceholder:
200
+ '{ "path": "/api/stats", "method": "GET", "rowsPath": "data.items", "timestampField": "time", "valueField": "count" }',
201
+ };
202
+ default:
203
+ return {
204
+ dataSourceType,
205
+ title: dataSourceType,
206
+ description: "",
207
+ category: DataSourceTypeCategory.Api,
208
+ queryLanguageTitle: "Query",
209
+ queryPlaceholder: "",
210
+ };
211
+ }
212
+ }
213
+ }
package/Types/Date.ts CHANGED
@@ -476,7 +476,12 @@ export default class OneUptimeDate {
476
476
  }
477
477
 
478
478
  public static getCurrentDate(): Date {
479
- return moment().toDate();
479
+ /*
480
+ * Not moment().toDate(): this is called on per-record telemetry ingest
481
+ * paths, and a moment wrapper allocation per call is pure overhead for
482
+ * what is exactly `new Date()`.
483
+ */
484
+ return new Date();
480
485
  }
481
486
 
482
487
  public static fromNow(date: Date): string {
@@ -934,6 +939,17 @@ export default class OneUptimeDate {
934
939
  return this.getSecondsInDays(days) * 1000;
935
940
  }
936
941
 
942
+ public static getSecondsInHours(hours: PositiveNumber | number): number {
943
+ if (!(hours instanceof PositiveNumber)) {
944
+ hours = new PositiveNumber(hours);
945
+ }
946
+ return hours.positiveNumber * 60 * 60;
947
+ }
948
+
949
+ public static getMillisecondsInHours(hours: PositiveNumber | number): number {
950
+ return this.getSecondsInHours(hours) * 1000;
951
+ }
952
+
937
953
  public static getSomeHoursAgo(hours: PositiveNumber | number): Date {
938
954
  if (!(hours instanceof PositiveNumber)) {
939
955
  hours = new PositiveNumber(hours);
@@ -2067,9 +2083,33 @@ export default class OneUptimeDate {
2067
2083
  return date;
2068
2084
  }
2069
2085
 
2086
+ /*
2087
+ * Hand-rolled UTC "YYYY-MM-DD HH:mm:ss" formatter. The two Clickhouse
2088
+ * formatters below run several times per ingested log / span / metric
2089
+ * datapoint — millions of calls per minute on a busy worker — and a
2090
+ * moment() wrapper plus format-token parsing per call is roughly an order
2091
+ * of magnitude more expensive than reading the UTC fields directly.
2092
+ * Output is byte-identical to moment's, including the "Invalid date"
2093
+ * sentinel for NaN dates.
2094
+ */
2095
+ private static formatUtcClickhouseDateTime(date: Date): string {
2096
+ if (Number.isNaN(date.getTime())) {
2097
+ return "Invalid date";
2098
+ }
2099
+
2100
+ const year: string = String(date.getUTCFullYear()).padStart(4, "0");
2101
+ const month: string = String(date.getUTCMonth() + 1).padStart(2, "0");
2102
+ const day: string = String(date.getUTCDate()).padStart(2, "0");
2103
+ const hours: string = String(date.getUTCHours()).padStart(2, "0");
2104
+ const minutes: string = String(date.getUTCMinutes()).padStart(2, "0");
2105
+ const seconds: string = String(date.getUTCSeconds()).padStart(2, "0");
2106
+
2107
+ return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
2108
+ }
2109
+
2070
2110
  public static toClickhouseDateTime(date: Date | string): string {
2071
2111
  const parsedDate: Date = this.fromString(date);
2072
- return moment(parsedDate).utc().format("YYYY-MM-DD HH:mm:ss");
2112
+ return this.formatUtcClickhouseDateTime(parsedDate);
2073
2113
  }
2074
2114
 
2075
2115
  public static toClickhouseDateTime64(
@@ -2077,7 +2117,7 @@ export default class OneUptimeDate {
2077
2117
  nanoTimestamp?: number,
2078
2118
  ): string {
2079
2119
  const parsedDate: Date = this.fromString(date);
2080
- const base: string = moment(parsedDate).utc().format("YYYY-MM-DD HH:mm:ss");
2120
+ const base: string = this.formatUtcClickhouseDateTime(parsedDate);
2081
2121
 
2082
2122
  let nanoFraction: string;
2083
2123
 
@@ -0,0 +1,64 @@
1
+ /*
2
+ * The password rules, in one place, so the form that collects a password and
3
+ * the endpoint that stores it cannot disagree about what is acceptable.
4
+ *
5
+ * Every password form in OneUptime has historically carried its own inline
6
+ * `minLength: 6`, and no server-side check existed at all -- the browser was
7
+ * the only thing enforcing it. That is fine right up until a password arrives
8
+ * from somewhere that is not the browser, which is exactly what an admin API
9
+ * is. These constants and `getPasswordValidationError` live in Common/Types
10
+ * (not Common/Server) precisely so the browser can import them too.
11
+ */
12
+
13
+ /*
14
+ * Six is the number every existing OneUptime password form already enforces
15
+ * (Accounts sign-up, Accounts reset-password, the user profile, the status
16
+ * page). It is stated here rather than raised so that adopting this module
17
+ * cannot lock out anyone whose current password was accepted under the old
18
+ * inline rule.
19
+ */
20
+ export const MINIMUM_PASSWORD_LENGTH: number = 6;
21
+
22
+ /*
23
+ * An upper bound, so a caller cannot hand the hasher an arbitrarily large
24
+ * string. It is not a security property -- scrypt's cost is set by N/r/p, not
25
+ * by input length -- it just keeps a pathological request from becoming work.
26
+ * 100 is far above any password a person types and far below anything that
27
+ * matters.
28
+ */
29
+ export const MAXIMUM_PASSWORD_LENGTH: number = 100;
30
+
31
+ /**
32
+ * Why this password is unacceptable, or null if it is fine.
33
+ *
34
+ * Returns a message rather than throwing so the same function can back a
35
+ * browser-side form validator and a server-side guard -- the server wraps the
36
+ * message in the exception type it wants to return.
37
+ *
38
+ * Length is measured on the raw value, NOT a trimmed one: a password is a
39
+ * secret the user typed, and silently trimming it would store something other
40
+ * than what they entered and then fail to match it at login. A value that is
41
+ * *only* whitespace is rejected outright, though -- that is a mistake, not a
42
+ * password.
43
+ */
44
+ export function getPasswordValidationError(
45
+ password: string | undefined | null,
46
+ ): string | null {
47
+ if (password === undefined || password === null || password === "") {
48
+ return "Password is required.";
49
+ }
50
+
51
+ if (password.trim().length === 0) {
52
+ return "Password cannot be blank.";
53
+ }
54
+
55
+ if (password.length < MINIMUM_PASSWORD_LENGTH) {
56
+ return `Password cannot be less than ${MINIMUM_PASSWORD_LENGTH} characters.`;
57
+ }
58
+
59
+ if (password.length > MAXIMUM_PASSWORD_LENGTH) {
60
+ return `Password cannot be more than ${MAXIMUM_PASSWORD_LENGTH} characters.`;
61
+ }
62
+
63
+ return null;
64
+ }
@@ -130,6 +130,13 @@ enum Permission {
130
130
  ReadDashboard = "ReadDashboard",
131
131
  EditDashboard = "EditDashboard",
132
132
 
133
+ // Data Sources (external systems dashboards can query)
134
+
135
+ CreateDataSource = "CreateDataSource",
136
+ DeleteDataSource = "DeleteDataSource",
137
+ ReadDataSource = "ReadDataSource",
138
+ EditDataSource = "EditDataSource",
139
+
133
140
  // Dashboard Domains
134
141
  CreateDashboardDomain = "CreateDashboardDomain",
135
142
  DeleteDashboardDomain = "DeleteDashboardDomain",
@@ -2498,6 +2505,45 @@ export class PermissionHelper {
2498
2505
  group: PermissionGroup.Settings,
2499
2506
  },
2500
2507
 
2508
+ // Data Sources.
2509
+
2510
+ {
2511
+ permission: Permission.CreateDataSource,
2512
+ title: "Create Data Source",
2513
+ description: "This permission can create Data Sources of this project",
2514
+ isAssignableToTenant: true,
2515
+ isAccessControlPermission: false,
2516
+ isRolePermission: false,
2517
+ group: PermissionGroup.Settings,
2518
+ },
2519
+ {
2520
+ permission: Permission.DeleteDataSource,
2521
+ title: "Delete Data Source",
2522
+ description: "This permission can delete Data Sources of this project.",
2523
+ isAssignableToTenant: true,
2524
+ isAccessControlPermission: false,
2525
+ isRolePermission: false,
2526
+ group: PermissionGroup.Settings,
2527
+ },
2528
+ {
2529
+ permission: Permission.EditDataSource,
2530
+ title: "Edit Data Source",
2531
+ description: "This permission can edit Data Sources of this project.",
2532
+ isAssignableToTenant: true,
2533
+ isAccessControlPermission: false,
2534
+ isRolePermission: false,
2535
+ group: PermissionGroup.Settings,
2536
+ },
2537
+ {
2538
+ permission: Permission.ReadDataSource,
2539
+ title: "Read Data Source",
2540
+ description: "This permission can read Data Sources of this project.",
2541
+ isAssignableToTenant: true,
2542
+ isAccessControlPermission: false,
2543
+ isRolePermission: false,
2544
+ group: PermissionGroup.Settings,
2545
+ },
2546
+
2501
2547
  // Dashboard Owner Team Permissions
2502
2548
  {
2503
2549
  permission: Permission.CreateDashboardOwnerTeam,
@@ -0,0 +1,34 @@
1
+ /**
2
+ * What an operator needs to know about how one user can sign in, with nothing
3
+ * secret in it.
4
+ *
5
+ * `hasPassword` is a boolean rather than the column itself for a specific
6
+ * reason: the password column holds a scrypt digest, and a master admin
7
+ * bypasses column read permissions, so "just select it in the UI" would put
8
+ * every user's password hash in a browser's network tab. The only fact the
9
+ * Admin Dashboard needs is whether one is set at all.
10
+ *
11
+ * This lives in Common/Types rather than beside the service that builds it so
12
+ * that the page rendering it and the endpoint producing it are typed against
13
+ * the same declaration -- a renamed field then fails to compile instead of
14
+ * quietly rendering `undefined`.
15
+ */
16
+ export default interface UserAuthenticationStatus {
17
+ // Can this user sign in with a password at all, or are they SSO-only?
18
+ hasPassword: boolean;
19
+
20
+ isEmailVerified: boolean;
21
+
22
+ /*
23
+ * Read from User.enableTwoFactorAuth, NOT the similarly named
24
+ * User.twoFactorAuthEnabled. Both columns exist; only `enableTwoFactorAuth`
25
+ * is the one login consults and the one the rest of the product writes.
26
+ * `twoFactorAuthEnabled` is a vestige of the initial migration that nothing
27
+ * reads -- reporting it here would tell an operator "2FA off" about a user
28
+ * who very much has it on.
29
+ */
30
+ isTwoFactorAuthEnabled: boolean;
31
+
32
+ // Is there an unexpired password-reset link outstanding for this user?
33
+ hasPendingPasswordResetLink: boolean;
34
+ }
@@ -49,7 +49,7 @@ export interface ComponentProps {
49
49
  iconSize?: undefined | SizeProp;
50
50
  buttonStyle?: undefined | ButtonStyleType;
51
51
  buttonSize?: ButtonSize | undefined;
52
- dataTestId?: string;
52
+ dataTestId?: string | undefined;
53
53
  className?: string | undefined;
54
54
  tooltip?: string | undefined;
55
55
  ariaLabel?: string | undefined;