@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
@@ -3,16 +3,32 @@ import AIRunType from "../../../../Types/AI/AIRunType";
3
3
  import AIRunStatus, {
4
4
  AIRunStatusHelper,
5
5
  } from "../../../../Types/AI/AIRunStatus";
6
+ import AIRunCodeFixRecommendation from "../../../../Types/AI/AIRunCodeFixRecommendation";
6
7
  import CodeFixTaskType from "../../../../Types/AI/CodeFixTaskType";
7
- import CodeFixTaskContext from "../../../../Types/AI/CodeFixTaskContext";
8
+ import CodeFixTaskContext, {
9
+ getInvestigationCodeFixTaskSnapshot,
10
+ InvestigationCodeFixTaskSnapshot,
11
+ } from "../../../../Types/AI/CodeFixTaskContext";
8
12
  import CodeRepositoryType from "../../../../Types/CodeRepository/CodeRepositoryType";
13
+ import BadDataException from "../../../../Types/Exception/BadDataException";
9
14
  import { LIMIT_PER_PROJECT } from "../../../../Types/Database/LimitMax";
15
+ import SortOrder from "../../../../Types/BaseDatabase/SortOrder";
10
16
  import AIRun from "../../../../Models/DatabaseModels/AIRun";
11
17
  import AIRunService from "../../../Services/AIRunService";
12
18
  import CodeRepositoryService from "../../../Services/CodeRepositoryService";
13
19
  import FixRunBudget from "../CodeFix/FixRunBudget";
14
20
  import QueryHelper from "../../../Types/Database/QueryHelper";
15
21
  import CaptureSpan from "../../Telemetry/CaptureSpan";
22
+ import InvestigationSubjectLock from "./InvestigationSubjectLock";
23
+
24
+ interface SubjectCodeFixRunInput {
25
+ projectId: ObjectID;
26
+ taskType: CodeFixTaskType;
27
+ incidentId?: ObjectID | undefined;
28
+ alertId?: ObjectID | undefined;
29
+ userId?: ObjectID | undefined;
30
+ taskContext?: CodeFixTaskContext | undefined;
31
+ }
16
32
 
17
33
  /*
18
34
  * Shared plumbing for the non-exception CodeFix recipes: the incident/alert
@@ -60,6 +76,12 @@ export default class SubjectCodeFixRun {
60
76
  incidentId?: ObjectID | undefined;
61
77
  alertId?: ObjectID | undefined;
62
78
  }): Promise<AIRun | null> {
79
+ if (Boolean(data.incidentId) === Boolean(data.alertId)) {
80
+ throw new BadDataException(
81
+ "Exactly one incident or alert subject is required to find an existing fix task.",
82
+ );
83
+ }
84
+
63
85
  return AIRunService.findOneBy({
64
86
  query: {
65
87
  runType: AIRunType.CodeFix,
@@ -160,15 +182,59 @@ export default class SubjectCodeFixRun {
160
182
  * its never-throws wrapper as the backstop.
161
183
  */
162
184
  @CaptureSpan()
163
- public static async enqueueSubjectCodeFixRun(data: {
164
- projectId: ObjectID;
165
- taskType: CodeFixTaskType;
166
- incidentId?: ObjectID | undefined;
167
- alertId?: ObjectID | undefined;
168
- userId?: ObjectID | undefined;
169
- taskContext?: CodeFixTaskContext | undefined;
170
- }): Promise<AIRun> {
171
- await FixRunBudget.assertWithinBudget(data.projectId);
185
+ public static async enqueueSubjectCodeFixRun(
186
+ data: SubjectCodeFixRunInput,
187
+ ): Promise<AIRun> {
188
+ if (data.incidentId && data.alertId) {
189
+ throw new BadDataException(
190
+ "A fix task cannot belong to both an incident and an alert.",
191
+ );
192
+ }
193
+
194
+ /*
195
+ * FixFromIncident has both human and automatic writers, and its source
196
+ * authorization depends on which Investigation is latest. Serialize the
197
+ * final dedupe + source revalidation + INSERT with Investigation enqueue
198
+ * for this subject. Redis is a correctness dependency: lock acquisition
199
+ * failure fails closed instead of falling back to a racy write.
200
+ */
201
+ if (data.taskType === CodeFixTaskType.FixFromIncident) {
202
+ return InvestigationSubjectLock.runExclusive(
203
+ {
204
+ projectId: data.projectId,
205
+ incidentId: data.incidentId,
206
+ alertId: data.alertId,
207
+ },
208
+ async (): Promise<AIRun> => {
209
+ const existingRun: AIRun | null =
210
+ await this.findNonTerminalRunForSubject({
211
+ taskType: data.taskType,
212
+ incidentId: data.incidentId,
213
+ alertId: data.alertId,
214
+ });
215
+
216
+ if (existingRun) {
217
+ throw new BadDataException(
218
+ "A fix pull request task is already queued or running for this subject.",
219
+ );
220
+ }
221
+
222
+ return this.createSubjectCodeFixRun(data, true);
223
+ },
224
+ );
225
+ }
226
+
227
+ return this.createSubjectCodeFixRun(data, false);
228
+ }
229
+
230
+ private static async createSubjectCodeFixRun(
231
+ data: SubjectCodeFixRunInput,
232
+ revalidateInvestigationSource: boolean,
233
+ ): Promise<AIRun> {
234
+ await FixRunBudget.assertWithinBudget(data.projectId, {
235
+ incidentId: data.incidentId,
236
+ alertId: data.alertId,
237
+ });
172
238
 
173
239
  const run: AIRun = new AIRun();
174
240
  run.projectId = data.projectId;
@@ -190,9 +256,65 @@ export default class SubjectCodeFixRun {
190
256
  run.taskContext = data.taskContext;
191
257
  }
192
258
 
259
+ if (revalidateInvestigationSource) {
260
+ /* No awaited work may be added between this gate and the INSERT. */
261
+ await this.assertLatestRecommendedInvestigationSource(data);
262
+ }
263
+
193
264
  return AIRunService.create({
194
265
  data: run,
195
266
  props: { isRoot: true },
196
267
  });
197
268
  }
269
+
270
+ private static async assertLatestRecommendedInvestigationSource(
271
+ data: SubjectCodeFixRunInput,
272
+ ): Promise<void> {
273
+ const requestedSnapshot: InvestigationCodeFixTaskSnapshot | null =
274
+ getInvestigationCodeFixTaskSnapshot(data.taskContext);
275
+
276
+ if (!requestedSnapshot) {
277
+ throw new BadDataException(
278
+ "A complete Recommended investigation snapshot is required to create a fix task.",
279
+ );
280
+ }
281
+
282
+ const latestInvestigation: AIRun | null = await AIRunService.findOneBy({
283
+ query: {
284
+ projectId: data.projectId,
285
+ runType: AIRunType.Investigation,
286
+ ...(data.incidentId
287
+ ? { triggeredByIncidentId: data.incidentId }
288
+ : { triggeredByAlertId: data.alertId! }),
289
+ },
290
+ select: {
291
+ _id: true,
292
+ status: true,
293
+ codeFixRecommendation: true,
294
+ taskContext: true,
295
+ },
296
+ sort: { createdAt: SortOrder.Descending },
297
+ props: { isRoot: true },
298
+ });
299
+ const persistedSnapshot: InvestigationCodeFixTaskSnapshot | null =
300
+ getInvestigationCodeFixTaskSnapshot(latestInvestigation?.taskContext);
301
+
302
+ if (
303
+ !latestInvestigation?.id ||
304
+ latestInvestigation.id.toString() !==
305
+ requestedSnapshot.investigationRunId ||
306
+ latestInvestigation.status !== AIRunStatus.Completed ||
307
+ latestInvestigation.codeFixRecommendation !==
308
+ AIRunCodeFixRecommendation.Recommended ||
309
+ !persistedSnapshot ||
310
+ persistedSnapshot.investigationRunId !==
311
+ requestedSnapshot.investigationRunId ||
312
+ persistedSnapshot.investigationAnalysisMarkdown !==
313
+ requestedSnapshot.investigationAnalysisMarkdown
314
+ ) {
315
+ throw new BadDataException(
316
+ "The source investigation is no longer the latest durably Recommended analysis. Refresh and try again.",
317
+ );
318
+ }
319
+ }
198
320
  }
@@ -27,6 +27,8 @@ import AnalyticsTableEngine from "../../../Types/AnalyticsDatabase/AnalyticsTabl
27
27
  export const DEFAULT_CLICKHOUSE_CLUSTER_NAME: string = "oneuptime";
28
28
  export const DEFAULT_CLICKHOUSE_SHARDING_KEY: string = "cityHash64(projectId)";
29
29
  export const DEFAULT_CLICKHOUSE_DATABASE: string = "oneuptime";
30
+ // Matches the ClickHouse server default for distributed_ddl_task_timeout.
31
+ export const DEFAULT_DISTRIBUTED_DDL_TASK_TIMEOUT_SECONDS: number = 180;
30
32
 
31
33
  // Suffix appended to a model's tableName to name its local (data) table.
32
34
  export const LOCAL_TABLE_SUFFIX: string = "Local";
@@ -49,6 +51,28 @@ export function getClickhouseDatabaseName(): string {
49
51
  return process.env["CLICKHOUSE_DATABASE"] || DEFAULT_CLICKHOUSE_DATABASE;
50
52
  }
51
53
 
54
+ /*
55
+ * How long the initiator of an ON CLUSTER DDL statement waits for every host
56
+ * to report completion (CLICKHOUSE_DISTRIBUTED_DDL_TASK_TIMEOUT_SECONDS,
57
+ * default 180 — the ClickHouse server default). ClickHouse semantics: 0
58
+ * enqueues the task and returns immediately; a negative value removes the
59
+ * server-side wait limit, but the confirmation wait streams zero bytes, so
60
+ * the client still gives up at the migration pool's socket-idle ceiling
61
+ * (30-minute floor, scaled up with this value — see ClickhouseConfig.ts).
62
+ * Prefer a finite value. Raising it helps on clusters whose DDL queue drains
63
+ * slowly (each host's DDLWorker processes the queue sequentially by default,
64
+ * so one slow task delays all later ones).
65
+ */
66
+ export function getDistributedDdlTaskTimeoutSeconds(): number {
67
+ const raw: string = (
68
+ process.env["CLICKHOUSE_DISTRIBUTED_DDL_TASK_TIMEOUT_SECONDS"] || ""
69
+ ).trim();
70
+ const parsed: number = parseInt(raw, 10);
71
+ return Number.isFinite(parsed)
72
+ ? parsed
73
+ : DEFAULT_DISTRIBUTED_DDL_TASK_TIMEOUT_SECONDS;
74
+ }
75
+
52
76
  /*
53
77
  * The `ON CLUSTER '<name>'` clause (with a leading space), emitted on every
54
78
  * object-lifecycle DDL statement (CREATE TABLE / CREATE MATERIALIZED VIEW /
@@ -88,6 +88,35 @@ export default class APIRequestCriteria {
88
88
  });
89
89
  }
90
90
 
91
+ if (
92
+ input.criteriaFilter.checkOn === CheckOn.PortDnsLookupTime ||
93
+ input.criteriaFilter.checkOn === CheckOn.PortTcpConnectTime
94
+ ) {
95
+ const portTimings: ProbeMonitorResponse["portTimings"] = (
96
+ input.dataToProcess as ProbeMonitorResponse
97
+ ).portTimings;
98
+
99
+ const currentValue: number | undefined =
100
+ input.criteriaFilter.checkOn === CheckOn.PortDnsLookupTime
101
+ ? portTimings?.dnsLookupInMs
102
+ : portTimings?.tcpConnectInMs;
103
+
104
+ const value: Array<number> | number | undefined =
105
+ (overTimeValue as Array<number> | number | undefined) ?? currentValue;
106
+
107
+ if (value === undefined) {
108
+ return null;
109
+ }
110
+
111
+ threshold = CompareCriteria.convertToNumber(threshold);
112
+
113
+ return CompareCriteria.compareCriteriaNumbers({
114
+ value: value,
115
+ threshold: threshold as number,
116
+ criteriaFilter: input.criteriaFilter,
117
+ });
118
+ }
119
+
91
120
  // check packet loss (Ping/IP monitors with multi-packet checks)
92
121
  if (input.criteriaFilter.checkOn === CheckOn.PacketLossPercent) {
93
122
  const packetLossPercent: number | undefined = (
@@ -8,6 +8,8 @@ import {
8
8
  import DomainMonitorResponse from "../../../../Types/Monitor/DomainMonitor/DomainMonitorResponse";
9
9
  import ProbeMonitorResponse from "../../../../Types/Probe/ProbeMonitorResponse";
10
10
  import CaptureSpan from "../../Telemetry/CaptureSpan";
11
+ import EvaluateOverTime from "./EvaluateOverTime";
12
+ import logger from "../../Logger";
11
13
 
12
14
  export default class DomainMonitorCriteria {
13
15
  @CaptureSpan()
@@ -24,6 +26,60 @@ export default class DomainMonitorCriteria {
24
26
  const domainResponse: DomainMonitorResponse | undefined =
25
27
  dataToProcess.domainResponse;
26
28
 
29
+ let overTimeValue: Array<number | boolean> | number | boolean | undefined =
30
+ undefined;
31
+
32
+ if (
33
+ input.criteriaFilter.evaluateOverTime &&
34
+ input.criteriaFilter.evaluateOverTimeOptions
35
+ ) {
36
+ try {
37
+ overTimeValue = await EvaluateOverTime.getValueOverTime({
38
+ projectId: dataToProcess.projectId,
39
+ monitorId: input.dataToProcess.monitorId!,
40
+ evaluateOverTimeOptions: input.criteriaFilter.evaluateOverTimeOptions,
41
+ metricType: input.criteriaFilter.checkOn,
42
+ });
43
+
44
+ if (Array.isArray(overTimeValue) && overTimeValue.length === 0) {
45
+ overTimeValue = undefined;
46
+ }
47
+ } catch (err) {
48
+ logger.error(
49
+ `Error in getting over time value for ${input.criteriaFilter.checkOn}`,
50
+ );
51
+ logger.error(err);
52
+ overTimeValue = undefined;
53
+ }
54
+ }
55
+
56
+ /*
57
+ * Whether the registration lookup itself succeeded. Without this, a
58
+ * domain whose TLD has no working WHOIS or RDAP service produces a
59
+ * response with no expiry date, every Domain* filter below returns null,
60
+ * and the monitor silently keeps its previous status - which is what
61
+ * made an unsupported TLD look healthy.
62
+ */
63
+ if (input.criteriaFilter.checkOn === CheckOn.IsOnline) {
64
+ const currentIsOnline: boolean | Array<boolean> =
65
+ (overTimeValue as Array<boolean>) || dataToProcess.isOnline;
66
+
67
+ return CompareCriteria.compareCriteriaBoolean({
68
+ value: currentIsOnline,
69
+ criteriaFilter: input.criteriaFilter,
70
+ });
71
+ }
72
+
73
+ if (input.criteriaFilter.checkOn === CheckOn.IsRequestTimeout) {
74
+ const currentIsTimeout: boolean | Array<boolean> =
75
+ (overTimeValue as Array<boolean>) || dataToProcess.isTimeout;
76
+
77
+ return CompareCriteria.compareCriteriaBoolean({
78
+ value: currentIsTimeout,
79
+ criteriaFilter: input.criteriaFilter,
80
+ });
81
+ }
82
+
27
83
  // Check domain expires in days
28
84
  if (input.criteriaFilter.checkOn === CheckOn.DomainExpiresDaysIn) {
29
85
  threshold = CompareCriteria.convertToNumber(threshold);
@@ -17,6 +17,7 @@ import CapturedMetric from "../../../Types/Monitor/CustomCodeMonitor/CapturedMet
17
17
  import HttpPhaseTimings from "../../../Types/Monitor/HttpPhaseTimings";
18
18
  import MonitorMetricType from "../../../Types/Monitor/MonitorMetricType";
19
19
  import PingMonitorResponse from "../../../Types/Monitor/PingMonitor/PingMonitorResponse";
20
+ import PortMonitorTimings from "../../../Types/Monitor/PortMonitor/PortMonitorTimings";
20
21
  import SnmpInterface from "../../../Types/Monitor/SnmpMonitor/SnmpInterface";
21
22
  import { SnmpOidResponse } from "../../../Types/Monitor/SnmpMonitor/SnmpMonitorResponse";
22
23
  import ProbeMonitorResponse from "../../../Types/Probe/ProbeMonitorResponse";
@@ -1093,6 +1094,51 @@ export default class MonitorMetricUtil {
1093
1094
  }
1094
1095
  }
1095
1096
 
1097
+ const portTimings: PortMonitorTimings | undefined = (
1098
+ data.dataToProcess as ProbeMonitorResponse
1099
+ ).portTimings;
1100
+
1101
+ if (portTimings) {
1102
+ const extraAttributes: JSONObject = {
1103
+ probeId: (
1104
+ data.dataToProcess as ProbeMonitorResponse
1105
+ ).probeId.toString(),
1106
+ };
1107
+
1108
+ const phaseMetrics: Array<{
1109
+ metricName: MonitorMetricType;
1110
+ value: number | undefined;
1111
+ description: string;
1112
+ }> = [
1113
+ {
1114
+ metricName: MonitorMetricType.PortDnsLookupTime,
1115
+ value: portTimings.dnsLookupInMs,
1116
+ description: "DNS lookup time for this Port monitor",
1117
+ },
1118
+ {
1119
+ metricName: MonitorMetricType.PortTcpConnectTime,
1120
+ value: portTimings.tcpConnectInMs,
1121
+ description: "TCP connect time for this Port monitor",
1122
+ },
1123
+ ];
1124
+
1125
+ for (const phaseMetric of phaseMetrics) {
1126
+ await this.pushMonitorMetric({
1127
+ projectId: data.projectId,
1128
+ monitorId: data.monitorId,
1129
+ monitorName: data.monitorName,
1130
+ probeName: data.probeName,
1131
+ metricName: phaseMetric.metricName,
1132
+ value: phaseMetric.value,
1133
+ description: phaseMetric.description,
1134
+ unit: "ms",
1135
+ extraAttributes: extraAttributes,
1136
+ metricRows: metricRows,
1137
+ metricNameServiceNameMap: metricNameServiceNameMap,
1138
+ });
1139
+ }
1140
+ }
1141
+
1096
1142
  if ((data.dataToProcess as ProbeMonitorResponse).pingResponse) {
1097
1143
  const pingResponse: PingMonitorResponse = (
1098
1144
  data.dataToProcess as ProbeMonitorResponse
@@ -424,6 +424,7 @@ export default class MonitorTemplateUtil {
424
424
  nameServers: domainResponse?.nameServers,
425
425
  domainStatus: domainResponse?.domainStatus,
426
426
  dnssec: domainResponse?.dnssec,
427
+ lookupMethod: domainResponse?.lookupMethod,
427
428
  } as JSONObject;
428
429
  }
429
430
 
@@ -241,9 +241,12 @@ export default class PasswordHash {
241
241
  * salted SHA `SHA256("v2:" + salt + ":" + secret + ":" + password)`.
242
242
  * bare SHA `SHA256(secret + password)`, from before salts existed.
243
243
  *
244
- * The last two are told apart by whether the row has a salt, which is the
245
- * same rule they were written under. Anything not carrying a recognised
246
- * scheme prefix is one of them.
244
+ * Normally the last two are told apart by whether the row has a salt,
245
+ * which is the rule they were written under. During a rolling deployment,
246
+ * however, an old pod can write a bare SHA digest while leaving a new pod's
247
+ * salt behind. Anything without a recognised scheme prefix therefore tries
248
+ * the selected legacy scheme first and the bare scheme as a compatibility
249
+ * fallback.
247
250
  */
248
251
  public static async verify(data: {
249
252
  plainValue: string;
@@ -259,11 +262,32 @@ export default class PasswordHash {
259
262
  );
260
263
 
261
264
  if (!parsed) {
265
+ const matchesSelectedLegacyScheme: boolean =
266
+ await HashedString.verifyValue({
267
+ plainValue: data.plainValue,
268
+ hashedValue: data.storedValue,
269
+ encryptionSecret: EncryptionSecret,
270
+ salt: data.salt || null,
271
+ });
272
+
273
+ if (matchesSelectedLegacyScheme || !data.salt) {
274
+ return matchesSelectedLegacyScheme;
275
+ }
276
+
277
+ /*
278
+ * Rolling-deploy compatibility. A pod running the pre-salt write path
279
+ * can replace a password with the original bare SHA-256 digest while a
280
+ * salt written by a newer pod remains on the row. A bare digest carries
281
+ * no scheme marker, so trying only the salted-SHA construction would
282
+ * lock that resource out permanently. Fall back to the original scheme
283
+ * when a supplied salt does not match; the successful caller upgrades
284
+ * the row to scrypt immediately afterwards.
285
+ */
262
286
  return await HashedString.verifyValue({
263
287
  plainValue: data.plainValue,
264
288
  hashedValue: data.storedValue,
265
289
  encryptionSecret: EncryptionSecret,
266
- salt: data.salt || null,
290
+ salt: null,
267
291
  });
268
292
  }
269
293