@oneuptime/common 12.0.4 → 12.0.5

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 (374) hide show
  1. package/Models/DatabaseModels/AIRun.ts +38 -1
  2. package/Models/DatabaseModels/AlertFeed.ts +30 -0
  3. package/Models/DatabaseModels/Dashboard.ts +28 -0
  4. package/Models/DatabaseModels/Incident.ts +2 -0
  5. package/Models/DatabaseModels/IncidentEpisode.ts +1 -0
  6. package/Models/DatabaseModels/IncidentEpisodePublicNote.ts +1 -0
  7. package/Models/DatabaseModels/IncidentEpisodeStateTimeline.ts +1 -0
  8. package/Models/DatabaseModels/IncidentFeed.ts +30 -0
  9. package/Models/DatabaseModels/IncidentPublicNote.ts +1 -0
  10. package/Models/DatabaseModels/IncidentStateTimeline.ts +1 -0
  11. package/Models/DatabaseModels/LogSavedView.ts +33 -0
  12. package/Models/DatabaseModels/Project.ts +231 -9
  13. package/Models/DatabaseModels/ScheduledMaintenance.ts +1 -0
  14. package/Models/DatabaseModels/ScheduledMaintenancePublicNote.ts +1 -0
  15. package/Models/DatabaseModels/ScheduledMaintenanceStateTimeline.ts +1 -0
  16. package/Models/DatabaseModels/ScheduledMaintenanceTemplateOwnerUser.ts +4 -4
  17. package/Models/DatabaseModels/StatusPage.ts +28 -0
  18. package/Models/DatabaseModels/StatusPageAnnouncement.ts +1 -0
  19. package/Server/API/AIAgentDataAPI.ts +44 -55
  20. package/Server/API/AIInvestigationAPI.ts +175 -17
  21. package/Server/API/DashboardAPI.ts +10 -10
  22. package/Server/API/StatusPageAPI.ts +38 -19
  23. package/Server/EnvironmentConfig.ts +16 -0
  24. package/Server/Infrastructure/ClickhouseConfig.ts +15 -1
  25. package/Server/Infrastructure/ClickhouseDatabase.ts +1 -1
  26. package/Server/Infrastructure/Postgres/SchemaMigrations/1786096660558-AddTimeRangeToLogSavedView.ts +27 -0
  27. package/Server/Infrastructure/Postgres/SchemaMigrations/1786101798351-MigrationName.ts +89 -0
  28. package/Server/Infrastructure/Postgres/SchemaMigrations/1786105470826-MigrationName.ts +27 -0
  29. package/Server/Infrastructure/Postgres/SchemaMigrations/1786400000000-AddMasterPasswordSalt.ts +40 -0
  30. package/Server/Infrastructure/Postgres/SchemaMigrations/1786500000000-AddInvestigationCodeFixRecommendation.ts +26 -0
  31. package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +10 -0
  32. package/Server/Services/AIRunService.ts +78 -10
  33. package/Server/Services/AIService.ts +94 -22
  34. package/Server/Services/AlertFeedService.ts +5 -0
  35. package/Server/Services/AnalyticsDatabaseService.ts +29 -0
  36. package/Server/Services/DatabaseService.ts +43 -2
  37. package/Server/Services/IncidentFeedService.ts +5 -0
  38. package/Server/Services/LlmLogService.ts +46 -2
  39. package/Server/Utils/AI/Chat/ObservabilityAssistant.ts +6 -0
  40. package/Server/Utils/AI/CodeFix/CodeFixAgentCompletion.ts +4 -0
  41. package/Server/Utils/AI/CodeFix/CodeFixReadiness.ts +8 -5
  42. package/Server/Utils/AI/CodeFix/FixRunBudget.ts +90 -16
  43. package/Server/Utils/AI/Remediation/RemediationExecutionRunner.ts +2 -0
  44. package/Server/Utils/AI/Remediation/RemediationPlanRunner.ts +2 -0
  45. package/Server/Utils/AI/SRE/AIInvestigationEngine.ts +223 -22
  46. package/Server/Utils/AI/SRE/AlertInvestigationRunner.ts +25 -24
  47. package/Server/Utils/AI/SRE/ConfidenceSignal.ts +182 -71
  48. package/Server/Utils/AI/SRE/FixFromIncidentTaskTrigger.ts +252 -43
  49. package/Server/Utils/AI/SRE/IncidentInvestigationRunner.ts +25 -24
  50. package/Server/Utils/AI/SRE/InstrumentationTaskTrigger.ts +47 -13
  51. package/Server/Utils/AI/SRE/InvestigationGrader.ts +9 -5
  52. package/Server/Utils/AI/SRE/InvestigationQueue.ts +141 -24
  53. package/Server/Utils/AI/SRE/InvestigationSubjectLock.ts +66 -0
  54. package/Server/Utils/AI/SRE/PostedRootCause.ts +94 -3
  55. package/Server/Utils/AI/SRE/README.md +1 -1
  56. package/Server/Utils/AI/SRE/SubjectCodeFixRun.ts +132 -10
  57. package/Server/Utils/AnalyticsDatabase/ClusterConfig.ts +24 -0
  58. package/Server/Utils/Monitor/Criteria/APIRequestCriteria.ts +29 -0
  59. package/Server/Utils/Monitor/Criteria/DomainMonitorCriteria.ts +56 -0
  60. package/Server/Utils/Monitor/MonitorMetricUtil.ts +46 -0
  61. package/Server/Utils/Monitor/MonitorTemplateUtil.ts +1 -0
  62. package/Server/Utils/PasswordHash.ts +28 -4
  63. package/Tests/App/Dashboard/AIInvestigationHeaderStatus.test.tsx +251 -0
  64. package/Tests/App/Dashboard/EventStatusPanel.test.tsx +747 -0
  65. package/Tests/App/Dashboard/InvestigationFeedRefresh.test.tsx +480 -0
  66. package/Tests/App/Dashboard/InvestigationPanel.test.tsx +1184 -0
  67. package/Tests/App/Dashboard/InvestigationPanelStatus.test.tsx +500 -0
  68. package/Tests/App/Dashboard/PortMonitorCriteriaFilter.test.ts +93 -0
  69. package/Tests/App/StatusPage/PublicStatusPageAPIErrorHandling.test.ts +117 -0
  70. package/Tests/App/StatusPage/StatusPageModelAPIPolymorphism.test.ts +223 -0
  71. package/Tests/Models/DatabaseModels/PermissionCatalogueCoverage.test.ts +243 -0
  72. package/Tests/Server/API/AIAgentDataFixFromIncidentContext.test.ts +266 -0
  73. package/Tests/Server/API/AIInvestigationAPI.test.ts +594 -0
  74. package/Tests/Server/API/AIInvestigationCreateFixTask.test.ts +80 -0
  75. package/Tests/Server/API/DashboardMasterPasswordAPI.test.ts +172 -1
  76. package/Tests/Server/API/StatusPageMasterPasswordAPI.test.ts +335 -0
  77. package/Tests/Server/Services/AIRunCodeFixClaim.test.ts +59 -5
  78. package/Tests/Server/Services/AIRunHumanVerdict.test.ts +127 -58
  79. package/Tests/Server/Services/AIServiceDailyBudget.test.ts +396 -20
  80. package/Tests/Server/Services/AddMasterPasswordSaltMigration.test.ts +283 -0
  81. package/Tests/Server/Services/AnalyticsDatabaseService.test.ts +25 -1
  82. package/Tests/Server/Services/DatabaseServicePerUserPasswordSalt.test.ts +45 -35
  83. package/Tests/Server/Services/DatabaseServiceUpdateColumnsWithoutHooks.test.ts +54 -0
  84. package/Tests/Server/Services/FeedAIRunAssociation.test.ts +125 -0
  85. package/Tests/Server/Services/FixFromIncidentTaskTrigger.test.ts +418 -57
  86. package/Tests/Server/Services/InstrumentationTaskTrigger.test.ts +173 -14
  87. package/Tests/Server/Services/MasterPasswordScrypt.test.ts +567 -0
  88. package/Tests/Server/Services/SeparateIncidentAlertAiSettingsMigration.test.ts +194 -0
  89. package/Tests/Server/Utils/AI/AIAlertGating.test.ts +37 -4
  90. package/Tests/Server/Utils/AI/AIConfidenceSignal.test.ts +330 -29
  91. package/Tests/Server/Utils/AI/AIIncidentGating.test.ts +25 -0
  92. package/Tests/Server/Utils/AI/AIInvestigationQueue.test.ts +293 -5
  93. package/Tests/Server/Utils/AI/CodeFixAgentCompletion.test.ts +59 -1
  94. package/Tests/Server/Utils/AI/FixFromIncidentAutoTrigger.test.ts +342 -19
  95. package/Tests/Server/Utils/AI/FixRunBudget.test.ts +214 -30
  96. package/Tests/Server/Utils/AI/Insights/InvestigationQueueInsightSubject.test.ts +2 -0
  97. package/Tests/Server/Utils/AI/InvestigationGrader.test.ts +65 -17
  98. package/Tests/Server/Utils/AI/InvestigationQueueRemediationExecution.test.ts +3 -0
  99. package/Tests/Server/Utils/AI/InvestigationSettlement.test.ts +313 -20
  100. package/Tests/Server/Utils/AI/PostedRootCause.test.ts +254 -0
  101. package/Tests/Server/Utils/AI/RemediationExecutionRunner.test.ts +4 -0
  102. package/Tests/Server/Utils/AI/RemediationPlanRunner.test.ts +2 -0
  103. package/Tests/Server/Utils/AI/SubjectCodeFixRunDedupe.test.ts +44 -0
  104. package/Tests/Server/Utils/AnalyticsDatabase/ClusterAwareSchema.test.ts +30 -0
  105. package/Tests/Server/Utils/Monitor/Criteria/APIRequestCriteriaPortTimings.test.ts +212 -0
  106. package/Tests/Server/Utils/Monitor/Criteria/DomainMonitorCriteria.test.ts +401 -0
  107. package/Tests/Server/Utils/Monitor/MonitorMetricUtilPortTimings.test.ts +243 -0
  108. package/Tests/Server/Utils/PasswordHash.test.ts +30 -0
  109. package/Tests/Types/Dashboard/DashboardTemplates.test.ts +111 -0
  110. package/Tests/Types/Monitor/CephMetricCatalog.test.ts +104 -0
  111. package/Tests/Types/Monitor/CriteriaFilter.test.ts +4 -0
  112. package/Tests/Types/Monitor/DockerMetricCatalog.test.ts +109 -0
  113. package/Tests/Types/Monitor/DockerSwarmMetricCatalog.test.ts +118 -0
  114. package/Tests/Types/Monitor/HostMetricCatalog.test.ts +104 -0
  115. package/Tests/Types/Monitor/IotMetricCatalog.test.ts +104 -0
  116. package/Tests/Types/Monitor/KubernetesMetricCatalog.test.ts +118 -0
  117. package/Tests/Types/Monitor/MonitorCriteriaInstance.test.ts +42 -0
  118. package/Tests/Types/Monitor/MonitorStep.test.ts +38 -0
  119. package/Tests/Types/Monitor/MonitorStepDomainMonitor.test.ts +75 -0
  120. package/Tests/Types/Monitor/PodmanMetricCatalog.test.ts +109 -0
  121. package/Tests/Types/Monitor/ProxmoxMetricCatalog.test.ts +107 -0
  122. package/Tests/Types/Monitor/SnmpMonitor/SnmpVendorTemplate.test.ts +151 -0
  123. package/Tests/Types/Permission.test.ts +137 -0
  124. package/Tests/Types/Rum/SessionReplayMaskingMode.test.ts +101 -0
  125. package/Tests/UI/Components/AiInvestigationSettingsCard.test.tsx +5 -5
  126. package/Tests/UI/Components/CardModelDetailEdit.test.tsx +3 -5
  127. package/Tests/UI/Components/ErrorBoundary.test.tsx +158 -0
  128. package/Tests/UI/Components/FeedItemSafeMode.test.tsx +74 -0
  129. package/Tests/UI/Components/MoreMenu.test.tsx +756 -0
  130. package/Tests/UI/Components/StatusPage/ResourceGroupSection.test.tsx +62 -0
  131. package/Tests/UI/Monitor/PortMonitorView.test.tsx +237 -0
  132. package/Tests/UI/Telemetry/TelemetrySnapshotWindowAlert.test.tsx +91 -0
  133. package/Tests/UI/Utils/DownloadFile.test.ts +103 -0
  134. package/Tests/UI/Utils/ErrorSupportBundle.test.ts +582 -0
  135. package/Tests/UI/Utils/Project.test.ts +31 -0
  136. package/Tests/UI/Utils/StatusPageModelAPIInjection.test.ts +245 -0
  137. package/Tests/UI/Utils/UseDashboardGridDnd.test.tsx +820 -0
  138. package/Tests/Utils/Dashboard/DashboardViewConfig.test.ts +329 -0
  139. package/Tests/Utils/Dashboard/GridLayout.test.ts +951 -0
  140. package/Tests/Utils/Monitor/MonitorMetricType.test.ts +117 -0
  141. package/Tests/Utils/RecordingRuleExpression.test.ts +327 -0
  142. package/Tests/Utils/StatusPage/GroupNestingLayout.test.ts +186 -0
  143. package/Tests/Utils/StatusPage/GroupTree.test.ts +456 -0
  144. package/Tests/Utils/StatusPage/OverviewGroupHierarchyVisibility.test.ts +588 -0
  145. package/Tests/Utils/Telemetry/SavedViewTimeRange.test.ts +244 -0
  146. package/Tests/Utils/Telemetry/TelemetryQueryTimeRange.test.ts +825 -0
  147. package/Types/AI/AIRunCodeFixRecommendation.ts +17 -0
  148. package/Types/AI/CodeFixTaskContext.ts +63 -3
  149. package/Types/AI/CodeFixTaskType.ts +3 -3
  150. package/Types/HashedString.ts +4 -3
  151. package/Types/Monitor/CriteriaFilter.ts +4 -0
  152. package/Types/Monitor/DomainMonitor/DomainLookupMethod.ts +23 -0
  153. package/Types/Monitor/DomainMonitor/DomainMonitorResponse.ts +7 -0
  154. package/Types/Monitor/MonitorCriteriaInstance.ts +24 -7
  155. package/Types/Monitor/MonitorMetricType.ts +8 -0
  156. package/Types/Monitor/MonitorStep.ts +10 -1
  157. package/Types/Monitor/MonitorStepDomainMonitor.ts +21 -0
  158. package/Types/Monitor/PortMonitor/PortMonitorTimings.ts +10 -0
  159. package/Types/Permission.ts +23 -175
  160. package/Types/Probe/ProbeMonitorResponse.ts +6 -0
  161. package/UI/Components/BulkUpdate/BulkUpdateForm.tsx +2 -3
  162. package/UI/Components/ErrorBoundary.tsx +138 -11
  163. package/UI/Components/Feed/FeedItem.tsx +9 -2
  164. package/UI/Components/ModelDetail/CardModelDetail.tsx +0 -12
  165. package/UI/Components/ModelTable/BaseModelTable.tsx +1 -1
  166. package/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.ts +12 -2
  167. package/UI/Components/MoreMenu/MoreMenu.tsx +285 -97
  168. package/UI/Components/MoreMenu/MoreMenuItem.tsx +8 -5
  169. package/UI/Utils/DownloadFile.ts +16 -8
  170. package/UI/Utils/ErrorSupportBundle.ts +805 -0
  171. package/UI/Utils/ModelAPI/ModelAPI.ts +19 -8
  172. package/UI/Utils/Project.ts +4 -0
  173. package/UI/Utils/StatusPage.ts +8 -2
  174. package/UI/Utils/UseDashboardGridDnd.ts +917 -0
  175. package/Utils/Dashboard/DashboardViewConfig.ts +80 -36
  176. package/Utils/Dashboard/GridLayout.ts +523 -0
  177. package/Utils/Metrics/RecordingRuleExpression.ts +19 -17
  178. package/Utils/Monitor/MonitorMetricType.ts +44 -2
  179. package/Utils/StatusPage/GroupNestingLayout.ts +69 -0
  180. package/Utils/StatusPage/GroupTree.ts +157 -66
  181. package/Utils/StatusPage/ResourceUptime.ts +37 -2
  182. package/Utils/Telemetry/SavedViewTimeRange.ts +114 -0
  183. package/Utils/Telemetry/TelemetryQueryTimeRange.ts +334 -0
  184. package/build/dist/Models/DatabaseModels/AIRun.js +39 -1
  185. package/build/dist/Models/DatabaseModels/AIRun.js.map +1 -1
  186. package/build/dist/Models/DatabaseModels/AlertFeed.js +32 -0
  187. package/build/dist/Models/DatabaseModels/AlertFeed.js.map +1 -1
  188. package/build/dist/Models/DatabaseModels/Dashboard.js +29 -0
  189. package/build/dist/Models/DatabaseModels/Dashboard.js.map +1 -1
  190. package/build/dist/Models/DatabaseModels/Incident.js +2 -0
  191. package/build/dist/Models/DatabaseModels/Incident.js.map +1 -1
  192. package/build/dist/Models/DatabaseModels/IncidentEpisode.js +1 -0
  193. package/build/dist/Models/DatabaseModels/IncidentEpisode.js.map +1 -1
  194. package/build/dist/Models/DatabaseModels/IncidentEpisodePublicNote.js +1 -0
  195. package/build/dist/Models/DatabaseModels/IncidentEpisodePublicNote.js.map +1 -1
  196. package/build/dist/Models/DatabaseModels/IncidentEpisodeStateTimeline.js +1 -0
  197. package/build/dist/Models/DatabaseModels/IncidentEpisodeStateTimeline.js.map +1 -1
  198. package/build/dist/Models/DatabaseModels/IncidentFeed.js +32 -0
  199. package/build/dist/Models/DatabaseModels/IncidentFeed.js.map +1 -1
  200. package/build/dist/Models/DatabaseModels/IncidentPublicNote.js +1 -0
  201. package/build/dist/Models/DatabaseModels/IncidentPublicNote.js.map +1 -1
  202. package/build/dist/Models/DatabaseModels/IncidentStateTimeline.js +1 -0
  203. package/build/dist/Models/DatabaseModels/IncidentStateTimeline.js.map +1 -1
  204. package/build/dist/Models/DatabaseModels/LogSavedView.js +33 -0
  205. package/build/dist/Models/DatabaseModels/LogSavedView.js.map +1 -1
  206. package/build/dist/Models/DatabaseModels/Project.js +241 -11
  207. package/build/dist/Models/DatabaseModels/Project.js.map +1 -1
  208. package/build/dist/Models/DatabaseModels/ScheduledMaintenance.js +1 -0
  209. package/build/dist/Models/DatabaseModels/ScheduledMaintenance.js.map +1 -1
  210. package/build/dist/Models/DatabaseModels/ScheduledMaintenancePublicNote.js +1 -0
  211. package/build/dist/Models/DatabaseModels/ScheduledMaintenancePublicNote.js.map +1 -1
  212. package/build/dist/Models/DatabaseModels/ScheduledMaintenanceStateTimeline.js +1 -0
  213. package/build/dist/Models/DatabaseModels/ScheduledMaintenanceStateTimeline.js.map +1 -1
  214. package/build/dist/Models/DatabaseModels/ScheduledMaintenanceTemplateOwnerUser.js +4 -4
  215. package/build/dist/Models/DatabaseModels/StatusPage.js +29 -0
  216. package/build/dist/Models/DatabaseModels/StatusPage.js.map +1 -1
  217. package/build/dist/Models/DatabaseModels/StatusPageAnnouncement.js +1 -0
  218. package/build/dist/Models/DatabaseModels/StatusPageAnnouncement.js.map +1 -1
  219. package/build/dist/Server/API/AIAgentDataAPI.js +28 -46
  220. package/build/dist/Server/API/AIAgentDataAPI.js.map +1 -1
  221. package/build/dist/Server/API/AIInvestigationAPI.js +111 -11
  222. package/build/dist/Server/API/AIInvestigationAPI.js.map +1 -1
  223. package/build/dist/Server/API/DashboardAPI.js +8 -5
  224. package/build/dist/Server/API/DashboardAPI.js.map +1 -1
  225. package/build/dist/Server/API/StatusPageAPI.js +29 -11
  226. package/build/dist/Server/API/StatusPageAPI.js.map +1 -1
  227. package/build/dist/Server/EnvironmentConfig.js +14 -0
  228. package/build/dist/Server/EnvironmentConfig.js.map +1 -1
  229. package/build/dist/Server/Infrastructure/ClickhouseConfig.js +12 -1
  230. package/build/dist/Server/Infrastructure/ClickhouseConfig.js.map +1 -1
  231. package/build/dist/Server/Infrastructure/ClickhouseDatabase.js +1 -1
  232. package/build/dist/Server/Infrastructure/ClickhouseDatabase.js.map +1 -1
  233. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786096660558-AddTimeRangeToLogSavedView.js +22 -0
  234. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786096660558-AddTimeRangeToLogSavedView.js.map +1 -0
  235. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786101798351-MigrationName.js +36 -0
  236. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786101798351-MigrationName.js.map +1 -0
  237. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786105470826-MigrationName.js +18 -0
  238. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786105470826-MigrationName.js.map +1 -0
  239. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786400000000-AddMasterPasswordSalt.js +19 -0
  240. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786400000000-AddMasterPasswordSalt.js.map +1 -0
  241. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786500000000-AddInvestigationCodeFixRecommendation.js +19 -0
  242. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786500000000-AddInvestigationCodeFixRecommendation.js.map +1 -0
  243. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +10 -0
  244. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
  245. package/build/dist/Server/Services/AIRunService.js +58 -12
  246. package/build/dist/Server/Services/AIRunService.js.map +1 -1
  247. package/build/dist/Server/Services/AIService.js +74 -21
  248. package/build/dist/Server/Services/AIService.js.map +1 -1
  249. package/build/dist/Server/Services/AlertFeedService.js +3 -0
  250. package/build/dist/Server/Services/AlertFeedService.js.map +1 -1
  251. package/build/dist/Server/Services/AnalyticsDatabaseService.js +29 -1
  252. package/build/dist/Server/Services/AnalyticsDatabaseService.js.map +1 -1
  253. package/build/dist/Server/Services/DatabaseService.js +21 -2
  254. package/build/dist/Server/Services/DatabaseService.js.map +1 -1
  255. package/build/dist/Server/Services/IncidentFeedService.js +3 -0
  256. package/build/dist/Server/Services/IncidentFeedService.js.map +1 -1
  257. package/build/dist/Server/Services/LlmLogService.js +22 -1
  258. package/build/dist/Server/Services/LlmLogService.js.map +1 -1
  259. package/build/dist/Server/Utils/AI/Chat/ObservabilityAssistant.js +3 -0
  260. package/build/dist/Server/Utils/AI/Chat/ObservabilityAssistant.js.map +1 -1
  261. package/build/dist/Server/Utils/AI/CodeFix/CodeFixAgentCompletion.js +4 -0
  262. package/build/dist/Server/Utils/AI/CodeFix/CodeFixAgentCompletion.js.map +1 -1
  263. package/build/dist/Server/Utils/AI/CodeFix/CodeFixReadiness.js +8 -5
  264. package/build/dist/Server/Utils/AI/CodeFix/CodeFixReadiness.js.map +1 -1
  265. package/build/dist/Server/Utils/AI/CodeFix/FixRunBudget.js +63 -24
  266. package/build/dist/Server/Utils/AI/CodeFix/FixRunBudget.js.map +1 -1
  267. package/build/dist/Server/Utils/AI/Remediation/RemediationExecutionRunner.js +2 -0
  268. package/build/dist/Server/Utils/AI/Remediation/RemediationExecutionRunner.js.map +1 -1
  269. package/build/dist/Server/Utils/AI/Remediation/RemediationPlanRunner.js +2 -0
  270. package/build/dist/Server/Utils/AI/Remediation/RemediationPlanRunner.js.map +1 -1
  271. package/build/dist/Server/Utils/AI/SRE/AIInvestigationEngine.js +156 -28
  272. package/build/dist/Server/Utils/AI/SRE/AIInvestigationEngine.js.map +1 -1
  273. package/build/dist/Server/Utils/AI/SRE/AlertInvestigationRunner.js +21 -19
  274. package/build/dist/Server/Utils/AI/SRE/AlertInvestigationRunner.js.map +1 -1
  275. package/build/dist/Server/Utils/AI/SRE/ConfidenceSignal.js +128 -49
  276. package/build/dist/Server/Utils/AI/SRE/ConfidenceSignal.js.map +1 -1
  277. package/build/dist/Server/Utils/AI/SRE/FixFromIncidentTaskTrigger.js +170 -31
  278. package/build/dist/Server/Utils/AI/SRE/FixFromIncidentTaskTrigger.js.map +1 -1
  279. package/build/dist/Server/Utils/AI/SRE/IncidentInvestigationRunner.js +21 -19
  280. package/build/dist/Server/Utils/AI/SRE/IncidentInvestigationRunner.js.map +1 -1
  281. package/build/dist/Server/Utils/AI/SRE/InstrumentationTaskTrigger.js +33 -9
  282. package/build/dist/Server/Utils/AI/SRE/InstrumentationTaskTrigger.js.map +1 -1
  283. package/build/dist/Server/Utils/AI/SRE/InvestigationGrader.js +9 -5
  284. package/build/dist/Server/Utils/AI/SRE/InvestigationGrader.js.map +1 -1
  285. package/build/dist/Server/Utils/AI/SRE/InvestigationQueue.js +121 -41
  286. package/build/dist/Server/Utils/AI/SRE/InvestigationQueue.js.map +1 -1
  287. package/build/dist/Server/Utils/AI/SRE/InvestigationSubjectLock.js +46 -0
  288. package/build/dist/Server/Utils/AI/SRE/InvestigationSubjectLock.js.map +1 -0
  289. package/build/dist/Server/Utils/AI/SRE/PostedRootCause.js +61 -14
  290. package/build/dist/Server/Utils/AI/SRE/PostedRootCause.js.map +1 -1
  291. package/build/dist/Server/Utils/AI/SRE/SubjectCodeFixRun.js +79 -1
  292. package/build/dist/Server/Utils/AI/SRE/SubjectCodeFixRun.js.map +1 -1
  293. package/build/dist/Server/Utils/AnalyticsDatabase/ClusterConfig.js +21 -0
  294. package/build/dist/Server/Utils/AnalyticsDatabase/ClusterConfig.js.map +1 -1
  295. package/build/dist/Server/Utils/Monitor/Criteria/APIRequestCriteria.js +20 -3
  296. package/build/dist/Server/Utils/Monitor/Criteria/APIRequestCriteria.js.map +1 -1
  297. package/build/dist/Server/Utils/Monitor/Criteria/DomainMonitorCriteria.js +43 -0
  298. package/build/dist/Server/Utils/Monitor/Criteria/DomainMonitorCriteria.js.map +1 -1
  299. package/build/dist/Server/Utils/Monitor/MonitorMetricUtil.js +33 -0
  300. package/build/dist/Server/Utils/Monitor/MonitorMetricUtil.js.map +1 -1
  301. package/build/dist/Server/Utils/Monitor/MonitorTemplateUtil.js +1 -0
  302. package/build/dist/Server/Utils/Monitor/MonitorTemplateUtil.js.map +1 -1
  303. package/build/dist/Server/Utils/PasswordHash.js +25 -4
  304. package/build/dist/Server/Utils/PasswordHash.js.map +1 -1
  305. package/build/dist/Types/AI/AIRunCodeFixRecommendation.js +18 -0
  306. package/build/dist/Types/AI/AIRunCodeFixRecommendation.js.map +1 -0
  307. package/build/dist/Types/AI/CodeFixTaskContext.js +23 -3
  308. package/build/dist/Types/AI/CodeFixTaskContext.js.map +1 -1
  309. package/build/dist/Types/AI/CodeFixTaskType.js +3 -3
  310. package/build/dist/Types/HashedString.js +4 -3
  311. package/build/dist/Types/HashedString.js.map +1 -1
  312. package/build/dist/Types/Monitor/CriteriaFilter.js +4 -0
  313. package/build/dist/Types/Monitor/CriteriaFilter.js.map +1 -1
  314. package/build/dist/Types/Monitor/DomainMonitor/DomainLookupMethod.js +24 -0
  315. package/build/dist/Types/Monitor/DomainMonitor/DomainLookupMethod.js.map +1 -0
  316. package/build/dist/Types/Monitor/MonitorCriteriaInstance.js +24 -7
  317. package/build/dist/Types/Monitor/MonitorCriteriaInstance.js.map +1 -1
  318. package/build/dist/Types/Monitor/MonitorMetricType.js +7 -0
  319. package/build/dist/Types/Monitor/MonitorMetricType.js.map +1 -1
  320. package/build/dist/Types/Monitor/MonitorStep.js +6 -1
  321. package/build/dist/Types/Monitor/MonitorStep.js.map +1 -1
  322. package/build/dist/Types/Monitor/MonitorStepDomainMonitor.js +15 -0
  323. package/build/dist/Types/Monitor/MonitorStepDomainMonitor.js.map +1 -1
  324. package/build/dist/Types/Monitor/PortMonitor/PortMonitorTimings.js +2 -0
  325. package/build/dist/Types/Monitor/PortMonitor/PortMonitorTimings.js.map +1 -0
  326. package/build/dist/Types/Permission.js +23 -155
  327. package/build/dist/Types/Permission.js.map +1 -1
  328. package/build/dist/UI/Components/BulkUpdate/BulkUpdateForm.js +2 -5
  329. package/build/dist/UI/Components/BulkUpdate/BulkUpdateForm.js.map +1 -1
  330. package/build/dist/UI/Components/ErrorBoundary.js +67 -8
  331. package/build/dist/UI/Components/ErrorBoundary.js.map +1 -1
  332. package/build/dist/UI/Components/Feed/FeedItem.js +2 -2
  333. package/build/dist/UI/Components/Feed/FeedItem.js.map +1 -1
  334. package/build/dist/UI/Components/ModelDetail/CardModelDetail.js +0 -12
  335. package/build/dist/UI/Components/ModelDetail/CardModelDetail.js.map +1 -1
  336. package/build/dist/UI/Components/ModelTable/BaseModelTable.js +1 -1
  337. package/build/dist/UI/Components/ModelTable/BaseModelTable.js.map +1 -1
  338. package/build/dist/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.js +12 -2
  339. package/build/dist/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.js.map +1 -1
  340. package/build/dist/UI/Components/MoreMenu/MoreMenu.js +193 -65
  341. package/build/dist/UI/Components/MoreMenu/MoreMenu.js.map +1 -1
  342. package/build/dist/UI/Components/MoreMenu/MoreMenuItem.js +1 -1
  343. package/build/dist/UI/Components/MoreMenu/MoreMenuItem.js.map +1 -1
  344. package/build/dist/UI/Utils/DownloadFile.js +15 -8
  345. package/build/dist/UI/Utils/DownloadFile.js.map +1 -1
  346. package/build/dist/UI/Utils/ErrorSupportBundle.js +476 -0
  347. package/build/dist/UI/Utils/ErrorSupportBundle.js.map +1 -0
  348. package/build/dist/UI/Utils/ModelAPI/ModelAPI.js +18 -8
  349. package/build/dist/UI/Utils/ModelAPI/ModelAPI.js.map +1 -1
  350. package/build/dist/UI/Utils/Project.js +3 -0
  351. package/build/dist/UI/Utils/Project.js.map +1 -1
  352. package/build/dist/UI/Utils/StatusPage.js +4 -4
  353. package/build/dist/UI/Utils/StatusPage.js.map +1 -1
  354. package/build/dist/UI/Utils/UseDashboardGridDnd.js +551 -0
  355. package/build/dist/UI/Utils/UseDashboardGridDnd.js.map +1 -0
  356. package/build/dist/Utils/Dashboard/DashboardViewConfig.js +42 -26
  357. package/build/dist/Utils/Dashboard/DashboardViewConfig.js.map +1 -1
  358. package/build/dist/Utils/Dashboard/GridLayout.js +338 -0
  359. package/build/dist/Utils/Dashboard/GridLayout.js.map +1 -0
  360. package/build/dist/Utils/Metrics/RecordingRuleExpression.js +19 -17
  361. package/build/dist/Utils/Metrics/RecordingRuleExpression.js.map +1 -1
  362. package/build/dist/Utils/Monitor/MonitorMetricType.js +38 -6
  363. package/build/dist/Utils/Monitor/MonitorMetricType.js.map +1 -1
  364. package/build/dist/Utils/StatusPage/GroupNestingLayout.js +46 -0
  365. package/build/dist/Utils/StatusPage/GroupNestingLayout.js.map +1 -1
  366. package/build/dist/Utils/StatusPage/GroupTree.js +79 -34
  367. package/build/dist/Utils/StatusPage/GroupTree.js.map +1 -1
  368. package/build/dist/Utils/StatusPage/ResourceUptime.js +22 -1
  369. package/build/dist/Utils/StatusPage/ResourceUptime.js.map +1 -1
  370. package/build/dist/Utils/Telemetry/SavedViewTimeRange.js +79 -0
  371. package/build/dist/Utils/Telemetry/SavedViewTimeRange.js.map +1 -0
  372. package/build/dist/Utils/Telemetry/TelemetryQueryTimeRange.js +236 -0
  373. package/build/dist/Utils/Telemetry/TelemetryQueryTimeRange.js.map +1 -0
  374. package/package.json +1 -1
@@ -0,0 +1,17 @@
1
+ /*
2
+ * The durable code-fix recommendation for an incident/alert investigation.
3
+ * Stored on AIRun so the dashboard and the manual fix-task endpoint consume
4
+ * the same server-authored decision instead of interpreting analysis prose.
5
+ *
6
+ * Every run starts NotRecommended. The investigation engine atomically moves
7
+ * a winning incident/alert run to Pending with its Completed transition, then
8
+ * settles the posted analysis to a terminal recommendation. This keeps all
9
+ * error, legacy and non-investigation paths fail closed.
10
+ */
11
+ enum AIRunCodeFixRecommendation {
12
+ Pending = "Pending",
13
+ Recommended = "Recommended",
14
+ NotRecommended = "NotRecommended",
15
+ }
16
+
17
+ export default AIRunCodeFixRecommendation;
@@ -1,7 +1,8 @@
1
1
  /*
2
- * The JSON persisted on AIRun.taskContext for CodeFix recipes whose entire
3
- * working context is captured at trigger time rather than referenced by a
4
- * subject id (incident/alert) or a telemetry exception.
2
+ * The JSON persisted on AIRun.taskContext for tasks whose exact working
3
+ * context must survive until a worker claims them. Some recipes have no
4
+ * durable subject record; others, such as FixFromIncident, deliberately pin
5
+ * a snapshot instead of re-reading mutable subject state at execution time.
5
6
  *
6
7
  * First user: the FixPerformance recipe. Its evidence is computed
7
8
  * DETERMINISTICALLY from a trace's span tree when the user clicks "Fix
@@ -74,7 +75,29 @@ export interface PerformanceCodeLocation {
74
75
  lineNumber?: number | undefined;
75
76
  }
76
77
 
78
+ /*
79
+ * The immutable investigation snapshot consumed by FixFromIncident. Both
80
+ * fields travel together: the run id proves which Recommended decision was
81
+ * gated, and the markdown is the exact posted analysis that decision covered.
82
+ */
83
+ export interface InvestigationCodeFixTaskSnapshot {
84
+ investigationRunId: string;
85
+ investigationAnalysisMarkdown: string;
86
+ }
87
+
77
88
  export interface CodeFixTaskContext {
89
+ /*
90
+ * FixFromIncident: the exact investigation whose published RootCause is
91
+ * the task's context. This prevents a later re-investigation from changing
92
+ * the report between the user's click and the worker claiming the task.
93
+ */
94
+ sourceInvestigationRunId?: string | undefined;
95
+ /*
96
+ * Snapshot of that run's published analysis. Fix tasks can wait in the
97
+ * queue, so reading the feed again when the worker claims the task would
98
+ * let a later re-investigation silently change the requested fix.
99
+ */
100
+ sourceInvestigationAnalysisMarkdown?: string | undefined;
78
101
  // FixPerformance: the analyzed trace.
79
102
  traceId?: string | undefined;
80
103
  // Best-effort service attribution resolved from the trace's spans.
@@ -91,4 +114,41 @@ export interface CodeFixTaskContext {
91
114
  telemetryServiceId?: string | undefined;
92
115
  }
93
116
 
117
+ /*
118
+ * Canonical JSON shape persisted for a Recommended investigation. Unlike the
119
+ * normalized snapshot returned below, these names are the established
120
+ * AIRun.taskContext wire contract.
121
+ */
122
+ export type InvestigationCodeFixTaskContext = CodeFixTaskContext & {
123
+ sourceInvestigationRunId: string;
124
+ sourceInvestigationAnalysisMarkdown: string;
125
+ };
126
+
127
+ /*
128
+ * Treat partial, empty and malformed JSON as no snapshot. The same validator
129
+ * is shared by the trigger, claim guard and task-details reader so none of
130
+ * those boundaries can silently fall back to a different investigation.
131
+ */
132
+ export function getInvestigationCodeFixTaskSnapshot(
133
+ taskContext: CodeFixTaskContext | null | undefined,
134
+ ): InvestigationCodeFixTaskSnapshot | null {
135
+ const investigationRunId: unknown = taskContext?.sourceInvestigationRunId;
136
+ const investigationAnalysisMarkdown: unknown =
137
+ taskContext?.sourceInvestigationAnalysisMarkdown;
138
+
139
+ if (
140
+ typeof investigationRunId !== "string" ||
141
+ investigationRunId.trim().length === 0 ||
142
+ typeof investigationAnalysisMarkdown !== "string" ||
143
+ investigationAnalysisMarkdown.trim().length === 0
144
+ ) {
145
+ return null;
146
+ }
147
+
148
+ return {
149
+ investigationRunId,
150
+ investigationAnalysisMarkdown,
151
+ };
152
+ }
153
+
94
154
  export default CodeFixTaskContext;
@@ -26,9 +26,9 @@ enum CodeFixTaskType {
26
26
  * Add the observability an INCONCLUSIVE AI investigation was missing
27
27
  * (structured logs, spans, metric counters on the implicated code paths).
28
28
  * NOT user-triggerable from the exception page — it has its own automatic
29
- * trigger: an inconclusive investigation on a project that opted in via
30
- * Project.enableInstrumentationFixTasks (see Common/Server/Utils/AI/
31
- * AI/InstrumentationTaskTrigger.ts). Its subject is the triggering
29
+ * trigger: an inconclusive investigation on a project that opted in through
30
+ * the incident/alert instrumentation fix setting (see Common/Server/Utils/
31
+ * AI/SRE/InstrumentationTaskTrigger.ts). Its subject is the triggering
32
32
  * incident/alert, NOT a telemetry exception.
33
33
  */
34
34
  ImproveInstrumentation = "ImproveInstrumentation",
@@ -24,9 +24,10 @@ import { FindOperator } from "typeorm";
24
24
  * salted `SHA256("v2:" + salt + ":" + secret + ":" + value)`.
25
25
  *
26
26
  * Neither records its scheme in the digest — it is a bare hex SHA-256 either
27
- * way — so they are told apart by whether the row carries a salt. The "v2"
28
- * prefix and the separators exist for domain separation: without them a
29
- * crafted salt could make a salted input collide with an unsalted one.
27
+ * way — so callers normally select the scheme by whether the row carries a
28
+ * salt. PasswordHash also has a bare-hash fallback for rolling deployments,
29
+ * where an old pod can write the original scheme while leaving a newer salt
30
+ * behind. The "v2" prefix and separators exist for domain separation.
30
31
  */
31
32
  const SALTED_HASH_SCHEME_VERSION: string = "v2";
32
33
 
@@ -5,6 +5,8 @@ export enum CheckOn {
5
5
  ResponseTime = "Response Time (in ms)",
6
6
  PacketLossPercent = "Packet Loss (in %)",
7
7
  Jitter = "Jitter (in ms)",
8
+ PortDnsLookupTime = "Port DNS Lookup Time (in ms)",
9
+ PortTcpConnectTime = "Port TCP Connect Time (in ms)",
8
10
  ResponseStatusCode = "Response Status Code",
9
11
  ResponseHeader = "Response Header",
10
12
  ResponseHeaderValue = "Response Header Value",
@@ -399,6 +401,8 @@ export class CriteriaFilterUtil {
399
401
  checkOn === CheckOn.ResponseTime ||
400
402
  checkOn === CheckOn.PacketLossPercent ||
401
403
  checkOn === CheckOn.Jitter ||
404
+ checkOn === CheckOn.PortDnsLookupTime ||
405
+ checkOn === CheckOn.PortTcpConnectTime ||
402
406
  checkOn === CheckOn.DiskUsagePercent ||
403
407
  checkOn === CheckOn.CPUUsagePercent ||
404
408
  checkOn === CheckOn.MemoryUsagePercent ||
@@ -0,0 +1,23 @@
1
+ /*
2
+ * Which protocol the probe uses to read a domain's registration record.
3
+ *
4
+ * WHOIS is the legacy protocol and its server list is not authoritative:
5
+ * clients ship a static map of TLD -> WHOIS host, and registries move. Every
6
+ * Identity Digital TLD (.digital, .email, .life, .today, .zone, ~290 more)
7
+ * still points at the retired whois.donuts.co in most of those maps, and that
8
+ * host now answers every query with the literal text "TLD is not supported."
9
+ * instead of a record. RDAP (RFC 9083) is the ICANN-mandated replacement and
10
+ * is discovered from the IANA bootstrap registry (RFC 9224), so it stays
11
+ * correct as registries move.
12
+ *
13
+ * Plenty of ccTLDs (.io, .co, .de, .ch, .jp, ...) publish no RDAP service at
14
+ * all, which is why Auto - RDAP when the TLD has one, WHOIS otherwise - is
15
+ * the default rather than RDAP.
16
+ */
17
+ enum DomainLookupMethod {
18
+ Auto = "Auto",
19
+ RDAP = "RDAP",
20
+ WHOIS = "WHOIS",
21
+ }
22
+
23
+ export default DomainLookupMethod;
@@ -1,4 +1,5 @@
1
1
  import ProbeAttempt from "../../Probe/ProbeAttempt";
2
+ import DomainLookupMethod from "./DomainLookupMethod";
2
3
 
3
4
  export default interface DomainMonitorResponse {
4
5
  isOnline: boolean;
@@ -16,4 +17,10 @@ export default interface DomainMonitorResponse {
16
17
  isTimeout?: boolean | undefined;
17
18
  probeAttempts?: Array<ProbeAttempt> | undefined;
18
19
  totalAttempts?: number | undefined;
20
+ /*
21
+ * Which protocol actually produced this record. With the Auto lookup
22
+ * method the answer varies by TLD, so it is worth surfacing rather than
23
+ * leaving the operator to guess.
24
+ */
25
+ lookupMethod?: DomainLookupMethod | undefined;
19
26
  }
@@ -505,6 +505,12 @@ export default class MonitorCriteriaInstance extends DatabaseProperty {
505
505
  monitorStatusId: arg.monitorStatusId,
506
506
  filterCondition: FilterCondition.All,
507
507
  filters: [
508
+ // The registration lookup itself has to have worked.
509
+ {
510
+ checkOn: CheckOn.IsOnline,
511
+ filterType: FilterType.True,
512
+ value: undefined,
513
+ },
508
514
  {
509
515
  checkOn: CheckOn.DomainIsExpired,
510
516
  filterType: FilterType.False,
@@ -517,7 +523,7 @@ export default class MonitorCriteriaInstance extends DatabaseProperty {
517
523
  changeMonitorStatus: true,
518
524
  createIncidents: false,
519
525
  name: `Check if ${arg.monitorName} is not expired`,
520
- description: `This criteria checks if the ${arg.monitorName} domain registration is not expired`,
526
+ description: `This criteria checks if the ${arg.monitorName} domain registration was read successfully and is not expired`,
521
527
  };
522
528
 
523
529
  return monitorCriteriaInstance;
@@ -774,11 +780,22 @@ export default class MonitorCriteriaInstance extends DatabaseProperty {
774
780
  filterType: FilterType.True,
775
781
  value: undefined,
776
782
  },
783
+ /*
784
+ * Without this, a lookup that returns no registration data at all
785
+ * leaves every Domain* filter unable to decide, and the monitor
786
+ * keeps whatever status it had - so a domain whose registration
787
+ * data cannot be read looks exactly like a healthy one.
788
+ */
789
+ {
790
+ checkOn: CheckOn.IsOnline,
791
+ filterType: FilterType.False,
792
+ value: undefined,
793
+ },
777
794
  ],
778
795
  incidents: [
779
796
  {
780
- title: `${arg.monitorName} domain is expired`,
781
- description: `${arg.monitorName} domain registration has expired.`,
797
+ title: `${arg.monitorName} domain check failed`,
798
+ description: `${arg.monitorName} domain registration has expired, or its registration data could not be retrieved.`,
782
799
  incidentSeverityId: arg.incidentSeverityId,
783
800
  autoResolveIncident: true,
784
801
  id: ObjectID.generate().toString(),
@@ -790,16 +807,16 @@ export default class MonitorCriteriaInstance extends DatabaseProperty {
790
807
  createAlerts: false,
791
808
  alerts: [
792
809
  {
793
- title: `${arg.monitorName} domain is expired`,
794
- description: `${arg.monitorName} domain registration has expired.`,
810
+ title: `${arg.monitorName} domain check failed`,
811
+ description: `${arg.monitorName} domain registration has expired, or its registration data could not be retrieved.`,
795
812
  alertSeverityId: arg.alertSeverityId,
796
813
  autoResolveAlert: true,
797
814
  id: ObjectID.generate().toString(),
798
815
  onCallPolicyIds: [],
799
816
  },
800
817
  ],
801
- name: `Check if ${arg.monitorName} domain is expired`,
802
- description: `This criteria checks if the ${arg.monitorName} domain registration has expired`,
818
+ name: `Check if ${arg.monitorName} domain check failed`,
819
+ description: `This criteria checks if the ${arg.monitorName} domain registration has expired or could not be read`,
803
820
  };
804
821
  }
805
822
 
@@ -24,6 +24,14 @@ enum MonitorMetricType {
24
24
  TimeToFirstByte = "oneuptime.monitor.http.time.to.first.byte",
25
25
  DownloadTime = "oneuptime.monitor.http.download.time",
26
26
 
27
+ /*
28
+ * Port-monitor connection phases. These intentionally use a Port-specific
29
+ * namespace instead of the HTTP phase metrics above: Port TCP timing can
30
+ * include automatic address-family fallback and has no HTTP request phase.
31
+ */
32
+ PortDnsLookupTime = "oneuptime.monitor.port.dns.lookup.time",
33
+ PortTcpConnectTime = "oneuptime.monitor.port.tcp.connect.time",
34
+
27
35
  /*
28
36
  * Per-interface SNMP metrics. Emitted when interface monitoring is enabled
29
37
  * on an SNMP monitor; one series per interface (interfaceName attribute).
@@ -1144,8 +1144,17 @@ export default class MonitorStep extends DatabaseProperty {
1144
1144
  dnsMonitor: json["dnsMonitor"]
1145
1145
  ? (json["dnsMonitor"] as JSONObject)
1146
1146
  : undefined,
1147
+ /*
1148
+ * Normalized rather than passed through raw: steps saved before the
1149
+ * lookupMethod option existed carry no such key, and the probe would
1150
+ * otherwise receive a config that does not satisfy its own type.
1151
+ */
1147
1152
  domainMonitor: json["domainMonitor"]
1148
- ? (json["domainMonitor"] as JSONObject)
1153
+ ? MonitorStepDomainMonitorUtil.toJSON(
1154
+ MonitorStepDomainMonitorUtil.fromJSON(
1155
+ json["domainMonitor"] as JSONObject,
1156
+ ),
1157
+ )
1149
1158
  : undefined,
1150
1159
  dnssecMonitor: json["dnssecMonitor"]
1151
1160
  ? (json["dnssecMonitor"] as JSONObject)
@@ -1,7 +1,9 @@
1
1
  import { JSONObject } from "../JSON";
2
+ import DomainLookupMethod from "./DomainMonitor/DomainLookupMethod";
2
3
 
3
4
  export default interface MonitorStepDomainMonitor {
4
5
  domainName: string;
6
+ lookupMethod: DomainLookupMethod;
5
7
  timeout: number;
6
8
  retries: number;
7
9
  }
@@ -10,6 +12,7 @@ export class MonitorStepDomainMonitorUtil {
10
12
  public static getDefault(): MonitorStepDomainMonitor {
11
13
  return {
12
14
  domainName: "",
15
+ lookupMethod: DomainLookupMethod.Auto,
13
16
  timeout: 10000,
14
17
  retries: 3,
15
18
  };
@@ -18,6 +21,13 @@ export class MonitorStepDomainMonitorUtil {
18
21
  public static fromJSON(json: JSONObject): MonitorStepDomainMonitor {
19
22
  return {
20
23
  domainName: (json["domainName"] as string) || "",
24
+ /*
25
+ * Monitors saved before RDAP support existed carry no lookupMethod at
26
+ * all, and Auto is the behaviour they should get.
27
+ */
28
+ lookupMethod: MonitorStepDomainMonitorUtil.parseLookupMethod(
29
+ json["lookupMethod"],
30
+ ),
21
31
  timeout: (json["timeout"] as number) || 10000,
22
32
  retries: (json["retries"] as number) || 3,
23
33
  };
@@ -26,8 +36,19 @@ export class MonitorStepDomainMonitorUtil {
26
36
  public static toJSON(monitor: MonitorStepDomainMonitor): JSONObject {
27
37
  return {
28
38
  domainName: monitor.domainName,
39
+ lookupMethod: monitor.lookupMethod,
29
40
  timeout: monitor.timeout,
30
41
  retries: monitor.retries,
31
42
  };
32
43
  }
44
+
45
+ public static parseLookupMethod(value: unknown): DomainLookupMethod {
46
+ const values: Array<string> = Object.values(DomainLookupMethod);
47
+
48
+ if (typeof value === "string" && values.includes(value)) {
49
+ return value as DomainLookupMethod;
50
+ }
51
+
52
+ return DomainLookupMethod.Auto;
53
+ }
33
54
  }
@@ -0,0 +1,10 @@
1
+ /*
2
+ * Per-phase breakdown of a Port monitor connection, in milliseconds. DNS is
3
+ * absent when the destination is already an IP address. Fields are optional
4
+ * so partial timing evidence can be represented when a connection fails.
5
+ */
6
+ export default interface PortMonitorTimings {
7
+ dnsLookupInMs?: number | undefined;
8
+ tcpConnectInMs?: number | undefined;
9
+ totalConnectionInMs?: number | undefined;
10
+ }
@@ -402,12 +402,24 @@ enum Permission {
402
402
  EditScheduledMaintenanceOwnerUser = "EditScheduledMaintenanceOwnerUser",
403
403
  ReadScheduledMaintenanceOwnerUser = "ReadScheduledMaintenanceOwnerUser",
404
404
 
405
- CreateScheduledMaintenanceTemplateOwnerUser = "CreateScheduledMaintenanceOwnerUser",
405
+ /*
406
+ * The two Create members below shipped with the value of their non-template
407
+ * counterparts (2024-09-09, "Add new migration for ScheduledMaintenanceTemplate"),
408
+ * so `CreateScheduledMaintenanceTemplateOwnerUser === CreateScheduledMaintenanceOwnerUser`
409
+ * at runtime and the two capabilities were one permission wearing two names.
410
+ * Granting either conferred create on BOTH the template owner table and the
411
+ * real scheduled-maintenance owner table — and since owner rows drive the
412
+ * Owned permission scope, that widened access to events the holder did not
413
+ * own. Their Delete/Edit/Read siblings were always correct; only Create was
414
+ * mis-keyed. AddScheduledMaintenanceTemplateOwnerPermissions backfills the
415
+ * stored grants so no install loses access when these values changed.
416
+ */
417
+ CreateScheduledMaintenanceTemplateOwnerUser = "CreateScheduledMaintenanceTemplateOwnerUser",
406
418
  DeleteScheduledMaintenanceTemplateOwnerUser = "DeleteScheduledMaintenanceTemplateOwnerUser",
407
419
  EditScheduledMaintenanceTemplateOwnerUser = "EditScheduledMaintenanceTemplateOwnerUser",
408
420
  ReadScheduledMaintenanceTemplateOwnerUser = "ReadScheduledMaintenanceTemplateOwnerUser",
409
421
 
410
- CreateScheduledMaintenanceTemplateOwnerTeam = "CreateScheduledMaintenanceOwnerTeam",
422
+ CreateScheduledMaintenanceTemplateOwnerTeam = "CreateScheduledMaintenanceTemplateOwnerTeam",
411
423
  DeleteScheduledMaintenanceTemplateOwnerTeam = "DeleteScheduledMaintenanceTemplateOwnerTeam",
412
424
  EditScheduledMaintenanceTemplateOwnerTeam = "EditScheduledMaintenanceTemplateOwnerTeam",
413
425
  ReadScheduledMaintenanceTemplateOwnerTeam = "ReadScheduledMaintenanceTemplateOwnerTeam",
@@ -3287,88 +3299,6 @@ export class PermissionHelper {
3287
3299
  group: PermissionGroup.Monitor,
3288
3300
  },
3289
3301
 
3290
- {
3291
- permission: Permission.CreateStatusPageAnnouncement,
3292
- title: "Create Status Page Announcement",
3293
- description:
3294
- "This permission can create Status Page Announcement this project.",
3295
- isAssignableToTenant: true,
3296
- isAccessControlPermission: false,
3297
- isRolePermission: false,
3298
- group: PermissionGroup.StatusPage,
3299
- },
3300
- {
3301
- permission: Permission.DeleteStatusPageAnnouncement,
3302
- title: "Delete Status Page Announcement",
3303
- description:
3304
- "This permission can delete Status Page Announcement of this project.",
3305
- isAssignableToTenant: true,
3306
- isAccessControlPermission: false,
3307
- isRolePermission: false,
3308
- group: PermissionGroup.StatusPage,
3309
- },
3310
- {
3311
- permission: Permission.EditStatusPageAnnouncement,
3312
- title: "Edit Status Page Announcement",
3313
- description:
3314
- "This permission can edit Status Page Announcement of this project.",
3315
- isAssignableToTenant: true,
3316
- isAccessControlPermission: false,
3317
- isRolePermission: false,
3318
- group: PermissionGroup.StatusPage,
3319
- },
3320
- {
3321
- permission: Permission.ReadStatusPageAnnouncement,
3322
- title: "Read Status Page Announcement",
3323
- description:
3324
- "This permission can read Status Page Announcement of this project.",
3325
- isAssignableToTenant: true,
3326
- isAccessControlPermission: false,
3327
- isRolePermission: false,
3328
- group: PermissionGroup.StatusPage,
3329
- },
3330
-
3331
- {
3332
- permission: Permission.CreateStatusPageAnnouncementTemplate,
3333
- title: "Create Status Page Announcement Template",
3334
- description:
3335
- "This permission can create Status Page Announcement Templates in this project.",
3336
- isAssignableToTenant: true,
3337
- isAccessControlPermission: false,
3338
- isRolePermission: false,
3339
- group: PermissionGroup.StatusPage,
3340
- },
3341
- {
3342
- permission: Permission.DeleteStatusPageAnnouncementTemplate,
3343
- title: "Delete Status Page Announcement Template",
3344
- description:
3345
- "This permission can delete Status Page Announcement Templates of this project.",
3346
- isAssignableToTenant: true,
3347
- isAccessControlPermission: false,
3348
- isRolePermission: false,
3349
- group: PermissionGroup.StatusPage,
3350
- },
3351
- {
3352
- permission: Permission.EditStatusPageAnnouncementTemplate,
3353
- title: "Edit Status Page Announcement Template",
3354
- description:
3355
- "This permission can edit Status Page Announcement Templates of this project.",
3356
- isAssignableToTenant: true,
3357
- isAccessControlPermission: false,
3358
- isRolePermission: false,
3359
- group: PermissionGroup.StatusPage,
3360
- },
3361
- {
3362
- permission: Permission.ReadStatusPageAnnouncementTemplate,
3363
- title: "Read Status Page Announcement Template",
3364
- description:
3365
- "This permission can read Status Page Announcement Templates of this project.",
3366
- isAssignableToTenant: true,
3367
- isAccessControlPermission: false,
3368
- isRolePermission: false,
3369
- group: PermissionGroup.StatusPage,
3370
- },
3371
-
3372
3302
  {
3373
3303
  permission: Permission.CreateStatusPageAnnouncement,
3374
3304
  title: "Create Status Page Announcement",
@@ -4841,47 +4771,6 @@ export class PermissionHelper {
4841
4771
  group: PermissionGroup.Settings,
4842
4772
  },
4843
4773
 
4844
- {
4845
- permission: Permission.CreateStatusPageDomain,
4846
- title: "Create Status Page Domain",
4847
- description:
4848
- "This permission can create Status Page Domain in this project.",
4849
- isAssignableToTenant: true,
4850
- isAccessControlPermission: false,
4851
- isRolePermission: false,
4852
- group: PermissionGroup.StatusPage,
4853
- },
4854
- {
4855
- permission: Permission.DeleteStatusPageDomain,
4856
- title: "Delete Status Page Domain",
4857
- description:
4858
- "This permission can delete Status Page Domain in this project.",
4859
- isAssignableToTenant: true,
4860
- isAccessControlPermission: false,
4861
- isRolePermission: false,
4862
- group: PermissionGroup.StatusPage,
4863
- },
4864
- {
4865
- permission: Permission.EditStatusPageDomain,
4866
- title: "Edit Status Page Domain",
4867
- description:
4868
- "This permission can edit Status Page Domain in this project.",
4869
- isAssignableToTenant: true,
4870
- isAccessControlPermission: false,
4871
- isRolePermission: false,
4872
- group: PermissionGroup.StatusPage,
4873
- },
4874
- {
4875
- permission: Permission.ReadStatusPageDomain,
4876
- title: "Read Status Page Domain",
4877
- description:
4878
- "This permission can read Status Page Domain in this project.",
4879
- isAssignableToTenant: true,
4880
- isAccessControlPermission: false,
4881
- isRolePermission: false,
4882
- group: PermissionGroup.StatusPage,
4883
- },
4884
-
4885
4774
  {
4886
4775
  permission: Permission.CreateIncidentSeverity,
4887
4776
  title: "Create Incident Severity",
@@ -10046,7 +9935,7 @@ export class PermissionHelper {
10046
9935
  permission: Permission.CreateScheduledMaintenanceTemplateOwnerUser,
10047
9936
  title: "Create Scheduled Maintenance Template User Owner",
10048
9937
  description:
10049
- "This permission can create Scheduled Maintenance Template User Owner this project.",
9938
+ "This permission can create Scheduled Maintenance Template User Owner in this project.",
10050
9939
  isAssignableToTenant: true,
10051
9940
  isAccessControlPermission: false,
10052
9941
  isRolePermission: false,
@@ -10085,9 +9974,9 @@ export class PermissionHelper {
10085
9974
 
10086
9975
  {
10087
9976
  permission: Permission.CreateScheduledMaintenanceTemplateOwnerTeam,
10088
- title: "Create Scheduled Maintenance Template User Team",
9977
+ title: "Create Scheduled Maintenance Template Team Owner",
10089
9978
  description:
10090
- "This permission can create Scheduled Maintenance Template User Owner this project.",
9979
+ "This permission can create Scheduled Maintenance Template Team Owner in this project.",
10091
9980
  isAssignableToTenant: true,
10092
9981
  isAccessControlPermission: false,
10093
9982
  isRolePermission: false,
@@ -10095,9 +9984,9 @@ export class PermissionHelper {
10095
9984
  },
10096
9985
  {
10097
9986
  permission: Permission.DeleteScheduledMaintenanceTemplateOwnerTeam,
10098
- title: "Delete Scheduled Maintenance Template User Team",
9987
+ title: "Delete Scheduled Maintenance Template Team Owner",
10099
9988
  description:
10100
- "This permission can delete Scheduled Maintenance Template User Owner of this project.",
9989
+ "This permission can delete Scheduled Maintenance Template Team Owner of this project.",
10101
9990
  isAssignableToTenant: true,
10102
9991
  isAccessControlPermission: false,
10103
9992
  isRolePermission: false,
@@ -10105,9 +9994,9 @@ export class PermissionHelper {
10105
9994
  },
10106
9995
  {
10107
9996
  permission: Permission.EditScheduledMaintenanceTemplateOwnerTeam,
10108
- title: "Edit Scheduled Maintenance Template User Team",
9997
+ title: "Edit Scheduled Maintenance Template Team Owner",
10109
9998
  description:
10110
- "This permission can edit Scheduled Maintenance Template User Owner of this project.",
9999
+ "This permission can edit Scheduled Maintenance Template Team Owner of this project.",
10111
10000
  isAssignableToTenant: true,
10112
10001
  isAccessControlPermission: false,
10113
10002
  isRolePermission: false,
@@ -10115,9 +10004,9 @@ export class PermissionHelper {
10115
10004
  },
10116
10005
  {
10117
10006
  permission: Permission.ReadScheduledMaintenanceTemplateOwnerTeam,
10118
- title: "Read Scheduled Maintenance Template User Team",
10007
+ title: "Read Scheduled Maintenance Template Team Owner",
10119
10008
  description:
10120
- "This permission can read Scheduled Maintenance Template User Owner of this project.",
10009
+ "This permission can read Scheduled Maintenance Template Team Owner of this project.",
10121
10010
  isAssignableToTenant: true,
10122
10011
  isAccessControlPermission: false,
10123
10012
  isRolePermission: false,
@@ -10778,47 +10667,6 @@ export class PermissionHelper {
10778
10667
  group: PermissionGroup.Incident,
10779
10668
  },
10780
10669
 
10781
- {
10782
- permission: Permission.CreateStatusPageOwnerTeam,
10783
- title: "Create Status Page Team Owner",
10784
- description:
10785
- "This permission can create Status Page Team Owner this project.",
10786
- isAssignableToTenant: true,
10787
- isAccessControlPermission: false,
10788
- isRolePermission: false,
10789
- group: PermissionGroup.StatusPage,
10790
- },
10791
- {
10792
- permission: Permission.DeleteStatusPageOwnerTeam,
10793
- title: "Delete Status Page Team Owner",
10794
- description:
10795
- "This permission can delete Status Page Team Owner of this project.",
10796
- isAssignableToTenant: true,
10797
- isAccessControlPermission: false,
10798
- isRolePermission: false,
10799
- group: PermissionGroup.StatusPage,
10800
- },
10801
- {
10802
- permission: Permission.EditStatusPageOwnerTeam,
10803
- title: "Edit Status Page Team Owner",
10804
- description:
10805
- "This permission can edit Status Page Team Owner of this project.",
10806
- isAssignableToTenant: true,
10807
- isAccessControlPermission: false,
10808
- isRolePermission: false,
10809
- group: PermissionGroup.StatusPage,
10810
- },
10811
- {
10812
- permission: Permission.ReadStatusPageOwnerTeam,
10813
- title: "Read Status Page Team Owner",
10814
- description:
10815
- "This permission can read Status Page Team Owner of this project.",
10816
- isAssignableToTenant: true,
10817
- isAccessControlPermission: false,
10818
- isRolePermission: false,
10819
- group: PermissionGroup.StatusPage,
10820
- },
10821
-
10822
10670
  {
10823
10671
  permission: Permission.CreateStatusPageOwnerUser,
10824
10672
  title: "Create Status Page User Owner",
@@ -17,6 +17,7 @@ import ExternalStatusPageMonitorResponse from "../Monitor/ExternalStatusPageMoni
17
17
  import HttpPhaseTimings from "../Monitor/HttpPhaseTimings";
18
18
  import MonitorEvaluationSummary from "../Monitor/MonitorEvaluationSummary";
19
19
  import NetworkPathTrace from "../Monitor/NetworkMonitor/NetworkPathTrace";
20
+ import PortMonitorTimings from "../Monitor/PortMonitor/PortMonitorTimings";
20
21
  import ObjectID from "../ObjectID";
21
22
  import Port from "../Port";
22
23
  import ProbeAttempt from "./ProbeAttempt";
@@ -58,6 +59,11 @@ export default interface ProbeMonitorResponse {
58
59
  * checks. Absent when the request went through a proxy.
59
60
  */
60
61
  httpTimings?: HttpPhaseTimings | undefined;
62
+ /*
63
+ * DNS / TCP / total connection timing for Port checks. DNS is absent for
64
+ * IP literals. Also present when Ping/IP checks use the Port fallback.
65
+ */
66
+ portTimings?: PortMonitorTimings | undefined;
61
67
  dnsResponse?: DnsMonitorResponse | undefined;
62
68
  domainResponse?: DomainMonitorResponse | undefined;
63
69
  dnssecResponse?: DnssecMonitorResponse | undefined;
@@ -201,9 +201,7 @@ const BulkUpdateForm: <T extends GenericObject>(
201
201
  let itemClassName: string = "";
202
202
  let iconClassName: string = "";
203
203
 
204
- if (isDisabled) {
205
- itemClassName = "opacity-50 cursor-not-allowed hover:bg-transparent";
206
- } else if (isDanger) {
204
+ if (!isDisabled && isDanger) {
207
205
  itemClassName = "text-red-700 hover:text-red-800 hover:bg-red-50";
208
206
  iconClassName = "text-red-400 group-hover:text-red-500";
209
207
  }
@@ -215,6 +213,7 @@ const BulkUpdateForm: <T extends GenericObject>(
215
213
  icon={button.icon}
216
214
  className={itemClassName}
217
215
  iconClassName={iconClassName}
216
+ isDisabled={isDisabled}
218
217
  onClick={() => {
219
218
  triggerButtonClick(button);
220
219
  }}