@oneuptime/common 14.0.1 → 14.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1241) hide show
  1. package/Models/DatabaseModels/AlertEpisodeMember.ts +8 -1
  2. package/Models/DatabaseModels/AlertFeed.ts +2 -0
  3. package/Models/DatabaseModels/AutoRemediationSuggestion.ts +63 -0
  4. package/Models/DatabaseModels/IncidentAlert.ts +540 -0
  5. package/Models/DatabaseModels/IncidentEpisodeMember.ts +8 -1
  6. package/Models/DatabaseModels/IncidentEpisodePublicNote.ts +9 -2
  7. package/Models/DatabaseModels/IncidentFeed.ts +2 -0
  8. package/Models/DatabaseModels/IncidentPublicNote.ts +9 -2
  9. package/Models/DatabaseModels/Index.ts +2 -0
  10. package/Models/DatabaseModels/KubernetesCluster.ts +429 -0
  11. package/Models/DatabaseModels/Monitor.ts +48 -0
  12. package/Models/DatabaseModels/Project.ts +60 -0
  13. package/Models/DatabaseModels/RumApplication.ts +52 -1
  14. package/Models/DatabaseModels/Runner.ts +5 -4
  15. package/Models/DatabaseModels/RunnerJob.ts +66 -0
  16. package/Models/DatabaseModels/ScheduledMaintenancePublicNote.ts +10 -2
  17. package/Models/DatabaseModels/WorkflowVariable.ts +479 -2
  18. package/Models/DatabaseModels/WorkspaceProjectAuthToken.ts +79 -25
  19. package/Server/API/AIInvestigationAPI.ts +341 -0
  20. package/Server/API/AutoRemediationAPI.ts +184 -2
  21. package/Server/API/CommonAPI.ts +70 -0
  22. package/Server/API/KubernetesClusterAiAccessAPI.ts +793 -0
  23. package/Server/API/MicrosoftTeamsAPI.ts +770 -315
  24. package/Server/API/MonitorAPI.ts +140 -0
  25. package/Server/API/OnCallScheduleTimelineAPI.ts +5 -21
  26. package/Server/API/SlackAPI.ts +447 -99
  27. package/Server/API/StatusPageAPI.ts +146 -26
  28. package/Server/API/TelemetryAPI.ts +216 -5
  29. package/Server/API/UserTwoFactorBackupCodeAPI.ts +1 -0
  30. package/Server/API/WorkflowVariableAPI.ts +156 -0
  31. package/Server/Infrastructure/GlobalCache.ts +35 -0
  32. package/Server/Infrastructure/Postgres/SchemaMigrations/1794300000000-AddOAuth2WorkflowVariables.ts +97 -0
  33. package/Server/Infrastructure/Postgres/SchemaMigrations/1794400000000-AddKubernetesClusterAiAccess.ts +129 -0
  34. package/Server/Infrastructure/Postgres/SchemaMigrations/1794500000000-AddIncomingEmailCustomAddressToMonitor.ts +25 -0
  35. package/Server/Infrastructure/Postgres/SchemaMigrations/1794600000000-AddAuthTokenExpiresAtToWorkspaceProjectAuthToken.ts +20 -0
  36. package/Server/Infrastructure/Postgres/SchemaMigrations/1794700000000-RemoveAppAccessTokenFromWorkspaceProjectAuthTokenMiscData.ts +38 -0
  37. package/Server/Infrastructure/Postgres/SchemaMigrations/1794800000000-AddSessionReplaySameOriginTracePropagation.ts +28 -0
  38. package/Server/Infrastructure/Postgres/SchemaMigrations/1794900000000-AddIncidentAlert.ts +89 -0
  39. package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +14 -0
  40. package/Server/Middleware/MasterAdminAuthorization.ts +28 -0
  41. package/Server/Middleware/TelemetryIngest.ts +47 -2
  42. package/Server/Middleware/UserAuthorization.ts +56 -2
  43. package/Server/Services/AIAgentService.ts +1 -0
  44. package/Server/Services/AccessTokenService.ts +121 -48
  45. package/Server/Services/AlertEpisodeMemberService.ts +9 -0
  46. package/Server/Services/AlertEpisodeService.ts +14 -1
  47. package/Server/Services/AlertService.ts +134 -22
  48. package/Server/Services/AutoRemediationRuleEngineService.ts +968 -39
  49. package/Server/Services/AutoRemediationRuleService.ts +118 -0
  50. package/Server/Services/BillingService.ts +1 -0
  51. package/Server/Services/InboundEmail/Providers/SendGridInboundProvider.ts +16 -22
  52. package/Server/Services/IncidentAlertService.ts +1811 -0
  53. package/Server/Services/IncidentEpisodeMemberService.ts +9 -0
  54. package/Server/Services/IncidentEpisodePublicNoteService.ts +66 -0
  55. package/Server/Services/IncidentEpisodeRoleMemberService.ts +27 -0
  56. package/Server/Services/IncidentEpisodeService.ts +14 -1
  57. package/Server/Services/IncidentGroupingEngineService.ts +11 -0
  58. package/Server/Services/IncidentMemberService.ts +21 -0
  59. package/Server/Services/IncidentPublicNoteService.ts +63 -0
  60. package/Server/Services/IncidentService.ts +330 -30
  61. package/Server/Services/IncidentStateTimelineService.ts +39 -0
  62. package/Server/Services/IncidentTemplateService.ts +83 -3
  63. package/Server/Services/Index.ts +2 -0
  64. package/Server/Services/KubernetesClusterAiAccessService.ts +1943 -0
  65. package/Server/Services/KubernetesClusterService.ts +1570 -1
  66. package/Server/Services/LogAggregationService.ts +14 -6
  67. package/Server/Services/MonitorService.ts +651 -52
  68. package/Server/Services/MonitorStatusTimelineService.ts +639 -2
  69. package/Server/Services/OnCallDutyPolicyEscalationRuleScheduleService.ts +2 -0
  70. package/Server/Services/OnCallDutyPolicyEscalationRuleTeamService.ts +2 -0
  71. package/Server/Services/OnCallDutyPolicyEscalationRuleUserService.ts +2 -0
  72. package/Server/Services/OnCallDutyPolicyScheduleService.ts +3 -0
  73. package/Server/Services/OnCallNotificationAlertingService.ts +36 -12
  74. package/Server/Services/OnCallSetupReminderService.ts +1 -0
  75. package/Server/Services/ProbeService.ts +7 -1
  76. package/Server/Services/ProjectService.ts +11 -1
  77. package/Server/Services/RunbookCredentialService.ts +26 -1
  78. package/Server/Services/RunbookSecretService.ts +36 -0
  79. package/Server/Services/RunnerJobService.ts +941 -23
  80. package/Server/Services/RunnerService.ts +439 -6
  81. package/Server/Services/ScheduledMaintenancePublicNoteService.ts +66 -0
  82. package/Server/Services/ScheduledMaintenanceService.ts +124 -19
  83. package/Server/Services/ScheduledMaintenanceTemplateService.ts +82 -3
  84. package/Server/Services/ServiceLevelObjectiveService.ts +14 -1
  85. package/Server/Services/StatusPagePrivateUserService.ts +1 -0
  86. package/Server/Services/StatusPageService.ts +301 -74
  87. package/Server/Services/StatusPageSubscriberService.ts +4 -0
  88. package/Server/Services/TeamMemberService.ts +309 -7
  89. package/Server/Services/TraceAggregationService.ts +10 -6
  90. package/Server/Services/UserEmailService.ts +1 -0
  91. package/Server/Services/UserNotificationMethodAdminService.ts +1 -0
  92. package/Server/Services/UserNotificationRuleAdminService.ts +1 -0
  93. package/Server/Services/UserNotificationRuleService.ts +4 -0
  94. package/Server/Services/UserService.ts +122 -1
  95. package/Server/Services/WorkflowVariableService.ts +593 -8
  96. package/Server/Services/WorkspaceNotificationRuleService.ts +588 -8
  97. package/Server/Services/WorkspaceProjectAuthTokenService.ts +170 -1
  98. package/Server/Types/Database/QueryHelper.ts +22 -0
  99. package/Server/Types/Markdown.ts +502 -27
  100. package/Server/Utils/AI/ClusterAccess/ClusterAccessContext.ts +182 -0
  101. package/Server/Utils/AI/ClusterAccess/KubectlInvestigationToolkit.ts +525 -0
  102. package/Server/Utils/AI/ClusterAccess/KubectlJobRunner.ts +854 -0
  103. package/Server/Utils/AI/CodeFix/CodeFixAgentAuth.ts +22 -2
  104. package/Server/Utils/AI/Remediation/RemediationCommandTools.ts +1916 -307
  105. package/Server/Utils/AI/Remediation/RemediationExecutionRunner.ts +1601 -74
  106. package/Server/Utils/AI/SRE/AIInvestigationEngine.ts +139 -7
  107. package/Server/Utils/AI/SRE/AlertInvestigationRunner.ts +58 -1
  108. package/Server/Utils/AI/SRE/IncidentInvestigationRunner.ts +54 -1
  109. package/Server/Utils/AI/Toolbox/AIActionTools.ts +14 -6
  110. package/Server/Utils/AI/Toolbox/ResourceTools.ts +4 -2
  111. package/Server/Utils/AutoRemediation/CommandPlanExecutor.ts +1341 -150
  112. package/Server/Utils/AutoRemediation/RemediationVerifier.ts +375 -4
  113. package/Server/Utils/Database/AffectedResourceRelations.ts +127 -0
  114. package/Server/Utils/Database/ProjectScopedReferenceValidator.ts +240 -1
  115. package/Server/Utils/EmailRollup/EmailRollupFlushRunner.ts +1 -0
  116. package/Server/Utils/Monitor/MonitorAlert.ts +83 -9
  117. package/Server/Utils/Monitor/MonitorCriteriaObservationBuilder.ts +5 -1
  118. package/Server/Utils/Monitor/MonitorIncident.ts +104 -9
  119. package/Server/Utils/Monitor/MonitorPayloadRedaction.ts +124 -7
  120. package/Server/Utils/Monitor/ProbeMonitorsNotification.ts +407 -0
  121. package/Server/Utils/OnCall/OnCallShiftReminderRunner.ts +1 -0
  122. package/Server/Utils/PushNotificationUtil.ts +45 -0
  123. package/Server/Utils/Rules/OwnerRuleAssignment.ts +40 -3
  124. package/Server/Utils/Runbook/RunbookExecutePermission.ts +56 -6
  125. package/Server/Utils/SessionReplay/SessionReplayGateCache.ts +24 -2
  126. package/Server/Utils/SessionReplay/SessionReplayReadService.ts +223 -33
  127. package/Server/Utils/SessionReplay/SessionReplayUserFlowReadService.ts +559 -0
  128. package/Server/Utils/StartServer.ts +4 -3
  129. package/Server/Utils/TeamMember/ProjectLeaveResourceCleanup.ts +528 -0
  130. package/Server/Utils/TwoFactorBackupCodeNotification.ts +1 -0
  131. package/Server/Utils/UserPermission/UserPermission.ts +16 -0
  132. package/Server/Utils/Workflow/OAuth2TokenClient.ts +704 -0
  133. package/Server/Utils/Workflow/WorkflowVariableOAuthToken.ts +318 -0
  134. package/Server/Utils/Workspace/MicrosoftTeams/Actions/Alert.ts +47 -7
  135. package/Server/Utils/Workspace/MicrosoftTeams/Actions/AlertEpisode.ts +57 -16
  136. package/Server/Utils/Workspace/MicrosoftTeams/Actions/Incident.ts +193 -214
  137. package/Server/Utils/Workspace/MicrosoftTeams/Actions/IncidentEpisode.ts +57 -13
  138. package/Server/Utils/Workspace/MicrosoftTeams/Actions/Monitor.ts +54 -17
  139. package/Server/Utils/Workspace/MicrosoftTeams/Actions/ScheduledMaintenance.ts +179 -161
  140. package/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.ts +281 -167
  141. package/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsServiceUrl.ts +114 -0
  142. package/Server/Utils/Workspace/MicrosoftTeams/ReactionNoteSync.ts +895 -0
  143. package/Server/Utils/Workspace/Slack/Actions/ActionTypes.ts +7 -9
  144. package/Server/Utils/Workspace/Slack/Actions/Alert.ts +96 -227
  145. package/Server/Utils/Workspace/Slack/Actions/AlertEpisode.ts +93 -214
  146. package/Server/Utils/Workspace/Slack/Actions/Auth.ts +30 -3
  147. package/Server/Utils/Workspace/Slack/Actions/Authorization.ts +99 -0
  148. package/Server/Utils/Workspace/Slack/Actions/Incident.ts +117 -283
  149. package/Server/Utils/Workspace/Slack/Actions/IncidentEpisode.ts +101 -196
  150. package/Server/Utils/Workspace/Slack/Actions/ReactionNote.ts +329 -0
  151. package/Server/Utils/Workspace/Slack/Actions/ScheduledMaintenance.ts +111 -287
  152. package/Server/Utils/Workspace/Slack/Slack.ts +86 -17
  153. package/Server/Utils/Workspace/Slack/app-manifest.json +2 -0
  154. package/Server/Utils/Workspace/Workspace.ts +171 -54
  155. package/Server/Utils/Workspace/WorkspaceActionAuthorization.ts +252 -0
  156. package/Server/Utils/Workspace/WorkspaceBase.ts +39 -0
  157. package/Server/Utils/Workspace/WorkspaceOAuthState.ts +280 -0
  158. package/Server/Utils/Workspace/WorkspaceProjectReferenceValidator.ts +96 -0
  159. package/Server/Utils/Workspace/WorkspaceReactionNote.ts +620 -0
  160. package/Tests/App/Dashboard/AttributesJSONDashboardSurfaces.test.tsx +496 -0
  161. package/Tests/App/Dashboard/AutoRemediationRulesTableCommandRunners.test.tsx +152 -0
  162. package/Tests/App/Dashboard/BreadcrumbCoverage.test.tsx +32 -0
  163. package/Tests/App/Dashboard/BulkIncidentLinkActions.test.tsx +869 -0
  164. package/Tests/App/Dashboard/CephMetricTooltips.test.tsx +1777 -0
  165. package/Tests/App/Dashboard/CloudFleetSummary.test.ts +8 -0
  166. package/Tests/App/Dashboard/CloudMetricTooltips.test.tsx +887 -0
  167. package/Tests/App/Dashboard/ClusterAccessNotice.test.tsx +794 -0
  168. package/Tests/App/Dashboard/ContainerHostMetricTooltips.test.tsx +1309 -0
  169. package/Tests/App/Dashboard/CreateOAuthWorkflowVariableModal.test.tsx +840 -0
  170. package/Tests/App/Dashboard/CreateWorkflowModal.test.tsx +653 -0
  171. package/Tests/App/Dashboard/DatabaseMonitorStepForm.test.tsx +197 -0
  172. package/Tests/App/Dashboard/DatabaseMonitorView.test.tsx +376 -0
  173. package/Tests/App/Dashboard/DisabledWarningRobustness.test.tsx +262 -0
  174. package/Tests/App/Dashboard/DiscoveryScanLivePage.test.tsx +39 -0
  175. package/Tests/App/Dashboard/DockerSwarmClustersListTooltips.test.tsx +414 -0
  176. package/Tests/App/Dashboard/DockerSwarmMetricTooltips.test.ts +796 -0
  177. package/Tests/App/Dashboard/DockerSwarmOverviewTooltips.test.tsx +747 -0
  178. package/Tests/App/Dashboard/EventNotes.test.tsx +2080 -0
  179. package/Tests/App/Dashboard/EventNotesPages.test.tsx +486 -0
  180. package/Tests/App/Dashboard/EventNotesUtil.test.ts +933 -0
  181. package/Tests/App/Dashboard/ExceptionMonitorEnvironmentFilter.test.tsx +238 -0
  182. package/Tests/App/Dashboard/HostDetailViewTooltips.test.tsx +725 -0
  183. package/Tests/App/Dashboard/HostListColumnTooltips.test.tsx +472 -0
  184. package/Tests/App/Dashboard/HostMetricTooltips.test.ts +709 -0
  185. package/Tests/App/Dashboard/HostOverviewTooltips.test.tsx +698 -0
  186. package/Tests/App/Dashboard/HostTooltipHarness.ts +124 -0
  187. package/Tests/App/Dashboard/HostsListTooltips.test.tsx +395 -0
  188. package/Tests/App/Dashboard/IncidentAlertLinkDialog.test.tsx +691 -0
  189. package/Tests/App/Dashboard/IncidentAlertLinkHelpers.test.ts +458 -0
  190. package/Tests/App/Dashboard/IncidentAlertLinkPages.test.tsx +828 -0
  191. package/Tests/App/Dashboard/IncidentAlertLinkSideMenus.test.tsx +231 -0
  192. package/Tests/App/Dashboard/IncidentChangeStateNotifyDefault.test.tsx +665 -0
  193. package/Tests/App/Dashboard/IncidentCreateFromAlerts.test.tsx +689 -0
  194. package/Tests/App/Dashboard/IncidentEpisodeFeedPublicNoteNotifyDefault.test.tsx +494 -0
  195. package/Tests/App/Dashboard/IncidentEpisodeOverviewNotifyDefault.test.tsx +706 -0
  196. package/Tests/App/Dashboard/IncidentFeedPublicNoteNotifyDefault.test.tsx +472 -0
  197. package/Tests/App/Dashboard/IncidentOverviewNotifyDefault.test.tsx +858 -0
  198. package/Tests/App/Dashboard/IncomingEmailAddressSettings.test.tsx +567 -0
  199. package/Tests/App/Dashboard/InvestigationClusterToolFormat.test.ts +241 -0
  200. package/Tests/App/Dashboard/InvestigationEvidenceKubectl.test.tsx +322 -0
  201. package/Tests/App/Dashboard/InvestigationPanel.test.tsx +12 -0
  202. package/Tests/App/Dashboard/InvestigationPanelClusterAccess.test.tsx +476 -0
  203. package/Tests/App/Dashboard/InvestigationRunDetailsKubectl.test.tsx +383 -0
  204. package/Tests/App/Dashboard/IoTMetricTooltips.test.tsx +1123 -0
  205. package/Tests/App/Dashboard/KubectlActivitySummary.test.tsx +366 -0
  206. package/Tests/App/Dashboard/KubernetesClusterAiAccessSettings.test.ts +2886 -0
  207. package/Tests/App/Dashboard/KubernetesClusterAiPage.test.tsx +2688 -0
  208. package/Tests/App/Dashboard/KubernetesClusterAiPageServerParity.test.ts +915 -0
  209. package/Tests/App/Dashboard/KubernetesClusterMetricTooltips.test.ts +837 -0
  210. package/Tests/App/Dashboard/KubernetesClusterOverviewTooltips.test.tsx +699 -0
  211. package/Tests/App/Dashboard/KubernetesContainersTabTooltips.test.tsx +320 -0
  212. package/Tests/App/Dashboard/KubernetesCostTooltips.test.tsx +502 -0
  213. package/Tests/App/Dashboard/KubernetesInsightsTooltips.test.tsx +222 -0
  214. package/Tests/App/Dashboard/KubernetesResourceMetricTooltips.test.ts +561 -0
  215. package/Tests/App/Dashboard/KubernetesResourcePagesTooltips.test.tsx +1168 -0
  216. package/Tests/App/Dashboard/LayerDateTimeFieldTimezoneName.test.tsx +66 -0
  217. package/Tests/App/Dashboard/LinkIncidentAlertModal.test.tsx +154 -0
  218. package/Tests/App/Dashboard/LogMonitorPreview.test.tsx +174 -0
  219. package/Tests/App/Dashboard/MetricDescriptionRules.ts +170 -0
  220. package/Tests/App/Dashboard/MetricDescriptionsCatalog.test.ts +206 -0
  221. package/Tests/App/Dashboard/MetricDescriptionsConsistency.test.ts +275 -0
  222. package/Tests/App/Dashboard/MonitorFeedRefresh.test.tsx +279 -0
  223. package/Tests/App/Dashboard/MonitorMetricQueryConfig.test.ts +244 -0
  224. package/Tests/App/Dashboard/MonitorOpenWorkCard.test.tsx +381 -0
  225. package/Tests/App/Dashboard/MonitorOpenWorkHook.test.tsx +784 -0
  226. package/Tests/App/Dashboard/MonitorOverviewData.test.tsx +2199 -0
  227. package/Tests/App/Dashboard/MonitorOverviewHero.test.tsx +1169 -0
  228. package/Tests/App/Dashboard/MonitorOverviewInput.test.ts +1127 -0
  229. package/Tests/App/Dashboard/MonitorOverviewPage.test.tsx +2136 -0
  230. package/Tests/App/Dashboard/MonitorOverviewSelectReadable.test.ts +368 -0
  231. package/Tests/App/Dashboard/MonitorOverviewStatBar.test.tsx +526 -0
  232. package/Tests/App/Dashboard/MonitorOverviewSupportingCards.test.tsx +542 -0
  233. package/Tests/App/Dashboard/MonitorOwnersCombine.test.ts +299 -0
  234. package/Tests/App/Dashboard/MonitorProbesCard.test.tsx +602 -0
  235. package/Tests/App/Dashboard/MonitorResponseTimeCard.test.tsx +386 -0
  236. package/Tests/App/Dashboard/MonitorSetupAndConnectionCards.test.tsx +612 -0
  237. package/Tests/App/Dashboard/MonitorStatusChangesCard.test.tsx +257 -0
  238. package/Tests/App/Dashboard/MonitorSummaryTestMonitorButton.test.tsx +360 -1
  239. package/Tests/App/Dashboard/MonitorUptimeHistoryCard.test.tsx +835 -0
  240. package/Tests/App/Dashboard/MonitorUptimeSummaryHook.test.tsx +971 -0
  241. package/Tests/App/Dashboard/MonitorViewLayout.test.tsx +580 -0
  242. package/Tests/App/Dashboard/NetworkDeviceTooltips.test.tsx +852 -0
  243. package/Tests/App/Dashboard/NetworkDiagnosticsTooltips.test.tsx +556 -0
  244. package/Tests/App/Dashboard/NetworkMetricTooltips.test.ts +1348 -0
  245. package/Tests/App/Dashboard/NetworkSiteTooltips.test.tsx +679 -0
  246. package/Tests/App/Dashboard/OnCallLayerRestrictionTimesPreserved.test.tsx +441 -0
  247. package/Tests/App/Dashboard/OnCallNavbar.test.tsx +214 -0
  248. package/Tests/App/Dashboard/OnCallSchedulePreviewCalendarDisplay.test.tsx +1389 -0
  249. package/Tests/App/Dashboard/OnCallSchedulePreviewOverrides.test.tsx +205 -1
  250. package/Tests/App/Dashboard/OnCallScheduleTimeInputsSettingsZone.test.tsx +198 -0
  251. package/Tests/App/Dashboard/ProxmoxMetricTooltips.test.ts +592 -0
  252. package/Tests/App/Dashboard/ProxmoxOverviewTooltips.test.tsx +1002 -0
  253. package/Tests/App/Dashboard/ProxmoxResourcePageTooltips.test.tsx +923 -0
  254. package/Tests/App/Dashboard/PublicNotePagesNotifyDefault.test.tsx +524 -0
  255. package/Tests/App/Dashboard/RemediationSuggestionCardApproval.test.tsx +702 -0
  256. package/Tests/App/Dashboard/RemoveUserFromProject.test.tsx +427 -0
  257. package/Tests/App/Dashboard/ResourceArchiveSettings.test.tsx +4 -0
  258. package/Tests/App/Dashboard/ResourceOverviewTileTooltips.test.tsx +1066 -0
  259. package/Tests/App/Dashboard/RumOverviewPage.test.tsx +1195 -0
  260. package/Tests/App/Dashboard/RumSessionReplaySideMenu.test.tsx +3 -1
  261. package/Tests/App/Dashboard/RunbookStepTypeMaps.test.ts +166 -0
  262. package/Tests/App/Dashboard/RunnerKubernetesAgentForm.test.tsx +622 -0
  263. package/Tests/App/Dashboard/ScheduledMaintenanceChangeStateNotifyDefault.test.tsx +1491 -0
  264. package/Tests/App/Dashboard/ScheduledMaintenanceFeedPublicNoteNotifyDefault.test.tsx +489 -0
  265. package/Tests/App/Dashboard/ScheduledMaintenanceOverviewNotifyDefault.test.tsx +909 -0
  266. package/Tests/App/Dashboard/ScheduledMaintenanceOverviewPage.test.tsx +14 -0
  267. package/Tests/App/Dashboard/ScheduledMaintenanceWindowStatsTranslation.test.tsx +307 -0
  268. package/Tests/App/Dashboard/SecurityEventAttributeColumnPicker.test.tsx +542 -0
  269. package/Tests/App/Dashboard/SecurityEventConnectionFormModal.test.tsx +174 -0
  270. package/Tests/App/Dashboard/SecurityEventConnectionsEmptyState.test.tsx +973 -212
  271. package/Tests/App/Dashboard/SecurityEventConnectionsTable.test.tsx +491 -52
  272. package/Tests/App/Dashboard/SecurityEventDetailPanel.test.tsx +301 -0
  273. package/Tests/App/Dashboard/SecurityEventListRow.test.tsx +158 -1
  274. package/Tests/App/Dashboard/SecurityEventProviderTile.test.tsx +869 -0
  275. package/Tests/App/Dashboard/SecurityEventsEmptyState.test.tsx +959 -94
  276. package/Tests/App/Dashboard/SecurityEventsNoResults.test.tsx +2 -0
  277. package/Tests/App/Dashboard/SecurityEventsViewer.test.tsx +274 -1
  278. package/Tests/App/Dashboard/ServerlessMetricTooltips.test.tsx +474 -0
  279. package/Tests/App/Dashboard/ServiceMetricTooltips.test.tsx +772 -0
  280. package/Tests/App/Dashboard/SessionReplayAuditTable.test.tsx +56 -1
  281. package/Tests/App/Dashboard/TeamMembershipRemoval.test.ts +900 -0
  282. package/Tests/App/Dashboard/TeamMembershipRemovalPages.test.tsx +460 -0
  283. package/Tests/App/Dashboard/TelemetryMetricsSignals.test.ts +1207 -0
  284. package/Tests/App/Dashboard/TelemetryResourceTabTooltips.test.tsx +437 -0
  285. package/Tests/App/Dashboard/TimezoneElements.test.tsx +321 -0
  286. package/Tests/App/Dashboard/TimezoneSelectButton.test.tsx +634 -0
  287. package/Tests/App/Dashboard/TraceExplorer.test.tsx +260 -0
  288. package/Tests/App/Dashboard/TraceMonitorPreview.test.tsx +182 -0
  289. package/Tests/App/Dashboard/UserTimezoneInit.test.tsx +544 -0
  290. package/Tests/App/Dashboard/VMwareMetricTooltips.test.ts +801 -0
  291. package/Tests/App/Dashboard/VMwareOverviewTooltips.test.tsx +601 -0
  292. package/Tests/App/Dashboard/VMwareResourcePagesTooltips.test.tsx +646 -0
  293. package/Tests/App/Dashboard/VMwareTooltipHarness.ts +145 -0
  294. package/Tests/App/Dashboard/WorkflowVariableModals.test.tsx +1630 -0
  295. package/Tests/App/Dashboard/WorkflowVariableRoutes.test.tsx +603 -0
  296. package/Tests/App/Dashboard/WorkflowVariableTokenStatus.test.tsx +589 -0
  297. package/Tests/App/Dashboard/WorkflowVariableUtil.test.ts +1543 -0
  298. package/Tests/App/Dashboard/WorkflowVariableView.test.tsx +3227 -0
  299. package/Tests/App/Dashboard/WorkflowVariablesTable.test.tsx +1277 -395
  300. package/Tests/App/StatusPage/StatusPageOverviewMonitorGroupUptime.test.tsx +714 -0
  301. package/Tests/App/StatusPage/StatusPageOverviewUptimeBars.NewYork.test.tsx +1009 -0
  302. package/Tests/App/StatusPage/StatusPageOverviewUptimeBars.test.tsx +1092 -0
  303. package/Tests/Models/DatabaseModels/DomainRoleTierCoverage.test.ts +5 -0
  304. package/Tests/Models/DatabaseModels/IncidentAlertModel.test.ts +554 -0
  305. package/Tests/Models/DatabaseModels/KubernetesClusterAiAccessColumns.test.ts +520 -0
  306. package/Tests/Models/DatabaseModels/MonitorSecretKeyColumnAccessControl.test.ts +66 -2
  307. package/Tests/Models/DatabaseModels/SessionReplayModels.test.ts +117 -0
  308. package/Tests/Models/DatabaseModels/WorkspaceProjectAuthTokenAccessControl.test.ts +236 -0
  309. package/Tests/Models/IncidentEpisodePublicNoteNotifyColumnContract.test.ts +103 -0
  310. package/Tests/Models/IncidentPublicNoteNotifyColumnContract.test.ts +96 -0
  311. package/Tests/Models/ScheduledMaintenancePublicNoteNotifyColumnContract.test.ts +111 -0
  312. package/Tests/Server/API/AIInvestigationAPI.test.ts +976 -0
  313. package/Tests/Server/API/AutoRemediationApproveKubectlRecheck.test.ts +836 -0
  314. package/Tests/Server/API/CommonAPIAssertCanCreateTable.test.ts +565 -0
  315. package/Tests/Server/API/CommonAPIAssertCanReadTable.test.ts +282 -0
  316. package/Tests/Server/API/KubernetesClusterAiAccessAPI.test.ts +1744 -0
  317. package/Tests/Server/API/LogHistogramAPI.test.ts +371 -0
  318. package/Tests/Server/API/MicrosoftTeamsLegacyWebhookRemoval.test.ts +125 -30
  319. package/Tests/Server/API/MicrosoftTeamsOAuthState.test.ts +1121 -0
  320. package/Tests/Server/API/MonitorUptimeSummaryAPI.test.ts +685 -0
  321. package/Tests/Server/API/SessionReplayAPI.test.ts +602 -1
  322. package/Tests/Server/API/SlackChannelCacheAPI.test.ts +358 -0
  323. package/Tests/Server/API/SlackOAuthState.test.ts +688 -0
  324. package/Tests/Server/API/StatusPageOverviewMonitorGroupUptime.test.ts +527 -0
  325. package/Tests/Server/API/StatusPageTestEmailReportAuth.test.ts +2 -0
  326. package/Tests/Server/API/StatusPageUptimeAPI.test.ts +427 -0
  327. package/Tests/Server/API/UserProjectsAPI.test.ts +4 -0
  328. package/Tests/Server/API/WorkflowVariableAPI.test.ts +404 -0
  329. package/Tests/Server/API/WorkspaceOAuthTestHelpers.ts +289 -0
  330. package/Tests/Server/API/WorkspaceSendTestNotificationRoutes.test.ts +2064 -0
  331. package/Tests/Server/Infrastructure/GlobalCache.test.ts +86 -0
  332. package/Tests/Server/Infrastructure/Postgres/AddIncidentAlertMigration.test.ts +341 -0
  333. package/Tests/Server/Infrastructure/Postgres/AddKubernetesClusterAiAccessMigration.test.ts +589 -0
  334. package/Tests/Server/Infrastructure/Postgres/AddOAuth2WorkflowVariablesMigration.test.ts +254 -0
  335. package/Tests/Server/Infrastructure/Postgres/AddSessionReplaySameOriginTracePropagationMigration.test.ts +247 -0
  336. package/Tests/Server/Middleware/BlockedUserMiddleware.test.ts +403 -0
  337. package/Tests/Server/Middleware/MasterAdminAuthorization.test.ts +13 -0
  338. package/Tests/Server/Middleware/PublicRouteUserMiddleware.test.ts +2 -0
  339. package/Tests/Server/Middleware/RemovedProjectMemberAuthorization.test.ts +469 -0
  340. package/Tests/Server/Middleware/TelemetryIngestBrowserKey.test.ts +77 -1
  341. package/Tests/Server/Middleware/TelemetryIngestKubernetesAgentRunnerPinnedKey.test.ts +211 -0
  342. package/Tests/Server/Middleware/TelemetryIngestKubernetesAgentRunnerRateLimit.test.ts +358 -0
  343. package/Tests/Server/Middleware/UserAuthorization.test.ts +97 -0
  344. package/Tests/Server/Middleware/UserAuthorizationEditionEnforcement.test.ts +2 -0
  345. package/Tests/Server/Services/AccessTokenProjectUserGrant.test.ts +14 -2
  346. package/Tests/Server/Services/AccessTokenRemovedMemberAccess.test.ts +1044 -0
  347. package/Tests/Server/Services/AddOwnersIdempotency.test.ts +5 -0
  348. package/Tests/Server/Services/AlertEpisodeMemberCreatePermission.test.ts +139 -0
  349. package/Tests/Server/Services/AutoRemediationClusterRuleEngine.test.ts +1361 -0
  350. package/Tests/Server/Services/AutoRemediationRuleCommandRunners.test.ts +375 -0
  351. package/Tests/Server/Services/CrossProjectRelationWriteGuard.test.ts +2384 -0
  352. package/Tests/Server/Services/FindOwnersProjectMembership.test.ts +267 -0
  353. package/Tests/Server/Services/InboundEmail/SendGridInboundProviderAddress.test.ts +90 -0
  354. package/Tests/Server/Services/IncidentAlertPostgres.test.ts +903 -0
  355. package/Tests/Server/Services/IncidentAlertRegistration.test.ts +96 -0
  356. package/Tests/Server/Services/IncidentAlertService.test.ts +2225 -0
  357. package/Tests/Server/Services/IncidentAlertStateCascade.test.ts +970 -0
  358. package/Tests/Server/Services/IncidentCreateFromAlerts.test.ts +1284 -0
  359. package/Tests/Server/Services/IncidentEpisodeMemberCreatePermission.test.ts +143 -0
  360. package/Tests/Server/Services/IncidentEpisodePublicNoteNotifyDefault.test.ts +805 -0
  361. package/Tests/Server/Services/IncidentPublicNoteNotifyDefault.test.ts +724 -0
  362. package/Tests/Server/Services/IncidentRoleProjectMembership.test.ts +233 -0
  363. package/Tests/Server/Services/KubernetesClusterAiAccessAgentRunnerAssignments.test.ts +372 -0
  364. package/Tests/Server/Services/KubernetesClusterAiAccessBindingGuard.test.ts +1876 -0
  365. package/Tests/Server/Services/KubernetesClusterAiAccessDeletedRunnerRemedy.test.ts +620 -0
  366. package/Tests/Server/Services/KubernetesClusterAiAccessGapNextSteps.test.ts +421 -0
  367. package/Tests/Server/Services/KubernetesClusterAiAccessService.test.ts +3662 -0
  368. package/Tests/Server/Services/KubernetesClusterAiAccessSubjectClusters.test.ts +405 -0
  369. package/Tests/Server/Services/KubernetesClusterAiSettingsPermission.test.ts +975 -0
  370. package/Tests/Server/Services/KubernetesClusterServiceAiAccessFeed.test.ts +497 -0
  371. package/Tests/Server/Services/KubernetesClusterServiceDeleteSettlesRemediation.test.ts +328 -0
  372. package/Tests/Server/Services/LogAggregationService.test.ts +99 -0
  373. package/Tests/Server/Services/MonitorServiceIncomingEmailCustomAddress.test.ts +447 -0
  374. package/Tests/Server/Services/MonitorServiceProbeFlagSync.test.ts +1334 -0
  375. package/Tests/Server/Services/MonitorServiceProbeStatusGrouping.test.ts +1640 -0
  376. package/Tests/Server/Services/MonitorServiceRefreshCurrentStatus.test.ts +225 -0
  377. package/Tests/Server/Services/MonitorStatusBridgeProbePath.test.ts +8 -8
  378. package/Tests/Server/Services/MonitorStatusTimelineDailyAggregates.test.ts +264 -1
  379. package/Tests/Server/Services/MonitorStatusTimelineMergedDowntime.test.ts +284 -0
  380. package/Tests/Server/Services/MonitorUptimeSummaryService.test.ts +1043 -0
  381. package/Tests/Server/Services/NetworkDeviceRuleEngines.test.ts +5 -0
  382. package/Tests/Server/Services/OnCallUndeliverablePageOwnerMembership.test.ts +359 -0
  383. package/Tests/Server/Services/ProbeServiceDashboardLink.test.ts +191 -0
  384. package/Tests/Server/Services/ProjectOwnersProjectMembership.test.ts +221 -0
  385. package/Tests/Server/Services/RuleRun/IncidentAlertMaintenanceRuleEnginesRun.test.ts +5 -0
  386. package/Tests/Server/Services/RuleRun/OwnerRuleEnginesGroupARun.test.ts +28 -0
  387. package/Tests/Server/Services/RuleRun/OwnerRuleEnginesGroupBRun.test.ts +9 -1
  388. package/Tests/Server/Services/RunnerJobEnqueueAiCommandAgentRunner.test.ts +230 -0
  389. package/Tests/Server/Services/RunnerJobEnqueueKubectl.test.ts +978 -0
  390. package/Tests/Server/Services/RunnerJobKubectlWriteScope.test.ts +866 -0
  391. package/Tests/Server/Services/RunnerJobSubmitResultRedaction.test.ts +322 -0
  392. package/Tests/Server/Services/RunnerJobSubmitResultUnstorableText.test.ts +357 -0
  393. package/Tests/Server/Services/RunnerJobTimeoutReason.test.ts +227 -0
  394. package/Tests/Server/Services/RunnerServiceAgentName.test.ts +581 -0
  395. package/Tests/Server/Services/ScheduledMaintenancePublicNoteNotifyDefault.test.ts +802 -0
  396. package/Tests/Server/Services/ScheduledMaintenanceSubscriberTemplateFormats.test.ts +53 -0
  397. package/Tests/Server/Services/ServiceLevelObjectiveLabelAndOwnerRuleEngines.test.ts +5 -0
  398. package/Tests/Server/Services/ServiceLevelObjectiveService.test.ts +12 -0
  399. package/Tests/Server/Services/StatusPageSubscriberReport.test.ts +1176 -1
  400. package/Tests/Server/Services/TeamMemberBillingSeatSync.test.ts +9 -0
  401. package/Tests/Server/Services/TeamMemberOnCallCleanup.test.ts +18 -0
  402. package/Tests/Server/Services/TeamMemberProjectMembership.test.ts +255 -0
  403. package/Tests/Server/Services/TeamMemberRemovalRevokesProjectAccess.test.ts +600 -0
  404. package/Tests/Server/Services/TeamMemberResourceCleanup.test.ts +731 -0
  405. package/Tests/Server/Services/TeamMemberWorkspaceAccountCleanup.test.ts +164 -0
  406. package/Tests/Server/Services/TraceAggregationService.test.ts +64 -0
  407. package/Tests/Server/Services/UserServiceBlockedUser.test.ts +293 -0
  408. package/Tests/Server/Services/WorkflowVariableOAuthHooks.test.ts +1016 -0
  409. package/Tests/Server/Services/WorkflowVariableOAuthPostgres.test.ts +543 -0
  410. package/Tests/Server/Services/WorkflowVariableRenameUniqueness.test.ts +16 -5
  411. package/Tests/Server/Services/WorkspaceNotificationRuleNoteDelivery.test.ts +473 -0
  412. package/Tests/Server/Services/WorkspaceNotificationRuleSendTestNotification.test.ts +3690 -0
  413. package/Tests/Server/Services/WorkspaceProjectAuthTokenMiscDataSecrets.test.ts +374 -0
  414. package/Tests/Server/Services/WorkspaceProjectAuthTokenSlackChannelCache.test.ts +143 -0
  415. package/Tests/Server/Types/Database/Permissions/WorkflowVariableOAuthColumnPermission.test.ts +250 -0
  416. package/Tests/Server/Types/Database/QueryHelperJsonContains.test.ts +96 -0
  417. package/Tests/Server/Types/Markdown.test.ts +1033 -0
  418. package/Tests/Server/Utils/AI/ClusterAccessContext.test.ts +285 -0
  419. package/Tests/Server/Utils/AI/CodeFix/CodeFixAgentAuth.test.ts +159 -1
  420. package/Tests/Server/Utils/AI/InvestigationClusterAccessWiring.test.ts +752 -0
  421. package/Tests/Server/Utils/AI/KubectlInvestigationToolkit.test.ts +1840 -0
  422. package/Tests/Server/Utils/AI/KubectlJobRunner.test.ts +1067 -0
  423. package/Tests/Server/Utils/AI/KubectlJobRunnerFinishedJob.test.ts +355 -0
  424. package/Tests/Server/Utils/AI/PostIncidentStatusUpdateTool.test.ts +496 -0
  425. package/Tests/Server/Utils/AI/RemediationCommandTools.test.ts +305 -0
  426. package/Tests/Server/Utils/AI/RemediationCommandToolsKubectl.test.ts +1365 -0
  427. package/Tests/Server/Utils/AI/RemediationCommandToolsKubectlOutcome.test.ts +639 -0
  428. package/Tests/Server/Utils/AI/RemediationCommandToolsLiveCluster.test.ts +1585 -0
  429. package/Tests/Server/Utils/AI/RemediationCommandToolsRunnerScope.test.ts +1065 -0
  430. package/Tests/Server/Utils/AI/RemediationExecutionRunner.test.ts +2138 -1
  431. package/Tests/Server/Utils/AI/RemediationExecutionRunnerClusterMode.test.ts +1035 -0
  432. package/Tests/Server/Utils/AI/RemediationKubectlCopyParity.test.ts +517 -0
  433. package/Tests/Server/Utils/AI/ResourceTools.test.ts +27 -1
  434. package/Tests/Server/Utils/AutoRemediation/CommandPlanExecutor.test.ts +1371 -24
  435. package/Tests/Server/Utils/AutoRemediation/CommandPlanExecutorRollbackRace.test.ts +962 -0
  436. package/Tests/Server/Utils/AutoRemediation/CommandPlanExecutorUnknownRun.test.ts +518 -0
  437. package/Tests/Server/Utils/AutoRemediation/CommandPlanVerification.test.ts +939 -2
  438. package/Tests/Server/Utils/Database/ProjectScopedRelationReferences.test.ts +371 -0
  439. package/Tests/Server/Utils/Monitor/AffectedResourceList.test.ts +64 -0
  440. package/Tests/Server/Utils/Monitor/DatabaseMetricObservationRemediation.test.ts +102 -0
  441. package/Tests/Server/Utils/Monitor/MonitorAlertCriteriaReferences.test.ts +362 -0
  442. package/Tests/Server/Utils/Monitor/MonitorCriteriaEvaluatorBreachingSamples.test.ts +55 -0
  443. package/Tests/Server/Utils/Monitor/MonitorEmailAddressRedaction.test.ts +255 -0
  444. package/Tests/Server/Utils/Monitor/MonitorIncidentCriteriaReferences.test.ts +347 -0
  445. package/Tests/Server/Utils/Monitor/MonitorIncidentMemberRoleMembership.test.ts +203 -0
  446. package/Tests/Server/Utils/Monitor/ProbeMonitorsNotification.test.ts +1147 -0
  447. package/Tests/Server/Utils/PushNotificationUtilCreators.test.ts +79 -0
  448. package/Tests/Server/Utils/ResourceFeed/ResourceFeedUtil.test.ts +21 -1
  449. package/Tests/Server/Utils/Rules/OwnerRuleAssignment.test.ts +155 -1
  450. package/Tests/Server/Utils/SessionReplay/SessionReplayGateCachePolicy.test.ts +103 -0
  451. package/Tests/Server/Utils/SessionReplay/SessionReplayReadServiceQueries.test.ts +288 -0
  452. package/Tests/Server/Utils/SessionReplay/SessionReplayUserFlowReadService.test.ts +304 -0
  453. package/Tests/Server/Utils/Telemetry/TelemetryIngestionKeyGuard.test.ts +40 -3
  454. package/Tests/Server/Utils/Workflow/OAuth2TokenClient.test.ts +702 -0
  455. package/Tests/Server/Utils/Workflow/OAuth2TokenClientHttpIntegration.test.ts +507 -0
  456. package/Tests/Server/Utils/Workflow/WorkflowVariableOAuthToken.test.ts +831 -0
  457. package/Tests/Server/Utils/Workspace/MicrosoftTeamsActionAuthorization.test.ts +63 -1
  458. package/Tests/Server/Utils/Workspace/MicrosoftTeamsAppAccessToken.test.ts +256 -0
  459. package/Tests/Server/Utils/Workspace/MicrosoftTeamsChannelSend.test.ts +60 -0
  460. package/Tests/Server/Utils/Workspace/MicrosoftTeamsChatActionAuthorization.test.ts +442 -0
  461. package/Tests/Server/Utils/Workspace/MicrosoftTeamsChats.test.ts +44 -2
  462. package/Tests/Server/Utils/Workspace/MicrosoftTeamsDirectMessage.test.ts +55 -0
  463. package/Tests/Server/Utils/Workspace/MicrosoftTeamsReactionNoteSync.test.ts +1522 -0
  464. package/Tests/Server/Utils/Workspace/MicrosoftTeamsServiceUrl.test.ts +130 -0
  465. package/Tests/Server/Utils/Workspace/MicrosoftTeamsTeamInstalls.test.ts +4 -4
  466. package/Tests/Server/Utils/Workspace/Slack/SlackActionAuthorization.test.ts +691 -0
  467. package/Tests/Server/Utils/Workspace/Slack/SlackMessageByTimestamp.test.ts +253 -0
  468. package/Tests/Server/Utils/Workspace/Slack/SlackReactionNote.test.ts +574 -0
  469. package/Tests/Server/Utils/Workspace/WorkspaceActionAuthorization.test.ts +488 -0
  470. package/Tests/Server/Utils/Workspace/WorkspaceCreateProjectReferences.test.ts +861 -0
  471. package/Tests/Server/Utils/Workspace/WorkspaceMessageAuthor.test.ts +635 -0
  472. package/Tests/Server/Utils/Workspace/WorkspaceOAuthState.test.ts +548 -0
  473. package/Tests/Server/Utils/Workspace/WorkspaceReactionNote.test.ts +839 -0
  474. package/Tests/Server/Utils/Workspace/WorkspaceSendErrorMessage.test.ts +725 -0
  475. package/Tests/Types/AutoRemediation/AiRemediationCommandPlan.test.ts +283 -9
  476. package/Tests/Types/DateBrowserLocalWallClock.test.ts +280 -0
  477. package/Tests/Types/DateLocalShortMonthNameFallback.test.ts +389 -0
  478. package/Tests/Types/DateUserTimezone.test.ts +177 -4
  479. package/Tests/Types/Kubernetes/KubernetesAgentChartAiAccess.test.ts +306 -0
  480. package/Tests/Types/Kubernetes/KubernetesClusterAiAccess.test.ts +283 -0
  481. package/Tests/Types/Kubernetes/KubernetesRunnerPostureWriteScope.test.ts +68 -0
  482. package/Tests/Types/Monitor/DatabaseMonitor/SqlServerPlatform.test.ts +144 -0
  483. package/Tests/Types/Monitor/MonitorStepExceptionMonitor.test.ts +160 -0
  484. package/Tests/Types/Monitor/Recommendation/MonitorRecommendationCoverage.test.ts +53 -0
  485. package/Tests/Types/Rum/WebVitals.test.ts +173 -0
  486. package/Tests/Types/Runbook/RunbookStepType.test.ts +91 -16
  487. package/Tests/Types/Runner/RunnerLiveStatus.test.ts +14 -3
  488. package/Tests/Types/SecurityEvent/Connectors/SecurityEventConnectorCatalog.test.ts +15 -0
  489. package/Tests/Types/StatusPage/PublicNoteSubscriberNotificationDefault.test.ts +1868 -0
  490. package/Tests/Types/Timezone.test.ts +5 -0
  491. package/Tests/Types/TimezoneAlias.test.ts +1034 -0
  492. package/Tests/Types/Workflow/JiraTemplateFixtures.ts +833 -0
  493. package/Tests/Types/Workflow/JiraTemplateScripts.test.ts +5414 -0
  494. package/Tests/Types/Workflow/JiraTemplateSimulation.test.ts +4803 -0
  495. package/Tests/Types/Workflow/JiraTemplates.test.ts +5429 -0
  496. package/Tests/Types/Workflow/Templates.test.ts +79 -4
  497. package/Tests/Types/Workflow/WorkflowVariableOAuth.test.ts +520 -0
  498. package/Tests/Types/Workspace/WorkspaceNoteReaction.test.ts +177 -0
  499. package/Tests/UI/Components/AttributesJSON/AttributesJSONView.test.tsx +390 -0
  500. package/Tests/UI/Components/AttributesJSON/CopyAttributesAsJSONButton.test.tsx +566 -0
  501. package/Tests/UI/Components/AttributesJSON/JSONHighlight.test.ts +131 -0
  502. package/Tests/UI/Components/BasicFormDropdownNormalization.test.tsx +276 -1
  503. package/Tests/UI/Components/Calendar/Calendar.test.tsx +1611 -0
  504. package/Tests/UI/Components/Calendar/CalendarDayLayout.test.ts +1486 -0
  505. package/Tests/UI/Components/Calendar/CalendarDayLayoutDst.test.ts +632 -0
  506. package/Tests/UI/Components/Calendar/CalendarDst.test.tsx +388 -0
  507. package/Tests/UI/Components/Charts/ChartGroupPlotFloor.test.tsx +170 -0
  508. package/Tests/UI/Components/Charts/HistogramSelection.test.ts +282 -0
  509. package/Tests/UI/Components/CustomTimeRangeModal.test.tsx +6 -0
  510. package/Tests/UI/Components/CustomTimeRangeModalTimezoneTranslation.test.tsx +285 -0
  511. package/Tests/UI/Components/Dropdown.test.tsx +999 -2
  512. package/Tests/UI/Components/FieldLabelInfoCardTooltip.test.tsx +413 -0
  513. package/Tests/UI/Components/Forms/FormFieldCheckboxTranslation.test.tsx +216 -0
  514. package/Tests/UI/Components/Forms/FormFieldTimezoneDescriptionTranslation.test.tsx +461 -0
  515. package/Tests/UI/Components/Forms/IncidentEpisodePublicNoteNotifyPayload.test.tsx +641 -0
  516. package/Tests/UI/Components/Forms/IncidentPublicNoteNotifyPayload.test.tsx +346 -0
  517. package/Tests/UI/Components/Forms/ScheduledMaintenancePublicNoteNotifyPayload.test.tsx +493 -0
  518. package/Tests/UI/Components/Graphs/DayUptimeGraph.test.tsx +911 -2
  519. package/Tests/UI/Components/Graphs/DayUptimeGraphTimezone.NewYork.test.tsx +730 -0
  520. package/Tests/UI/Components/Graphs/DayUptimeGraphTimezone.Tokyo.test.tsx +506 -0
  521. package/Tests/UI/Components/HistogramClickToZoom.test.tsx +619 -0
  522. package/Tests/UI/Components/InfoTooltip.test.tsx +242 -0
  523. package/Tests/UI/Components/LogDetailsPanelAttributesJSON.test.tsx +248 -0
  524. package/Tests/UI/Components/LogsViewerHistogramZoom.test.tsx +47 -1
  525. package/Tests/UI/Components/LogsViewerSmallScreens.test.tsx +620 -0
  526. package/Tests/UI/Components/ModelPageModelChange.test.tsx +242 -3
  527. package/Tests/UI/Components/ModelTable/BaseModelTableBulkDelete.test.tsx +207 -3
  528. package/Tests/UI/Components/ModelTable/BaseModelTableBulkDeleteVerb.test.tsx +367 -0
  529. package/Tests/UI/Components/ModelTable/BaseModelTableCreateButtonTitle.test.tsx +275 -0
  530. package/Tests/UI/Components/ModelTable/BaseModelTableDeleteConfirmation.test.tsx +521 -0
  531. package/Tests/UI/Components/MonitorGraphs/Uptime.test.tsx +406 -2
  532. package/Tests/UI/Components/MonitorGraphs/UptimeBarDayModal.test.tsx +169 -2
  533. package/Tests/UI/Components/TableHeaderTooltip.test.tsx +662 -0
  534. package/Tests/UI/Components/TelemetryViewer/TelemetryViewerHistogramClickZoom.test.tsx +266 -0
  535. package/Tests/UI/Components/TelemetryViewer/TelemetryViewerSmallScreens.test.tsx +439 -0
  536. package/Tests/UI/Components/TimezoneDropdownLegacyValues.test.tsx +704 -0
  537. package/Tests/UI/Components/UseHistogramZoom.test.tsx +89 -1
  538. package/Tests/UI/Components/UseLogsHistogram.test.tsx +175 -0
  539. package/Tests/UI/Monitor/MonitorSummarySnapshotRender.test.tsx +5 -5
  540. package/Tests/UI/Rum/PrivacySummaryCard.test.tsx +166 -9
  541. package/Tests/UI/Rum/RecordingHealthTooltips.test.tsx +447 -0
  542. package/Tests/UI/Rum/ReplayCorrelationPanel.test.tsx +164 -0
  543. package/Tests/UI/Rum/ReplayFrameCapture.test.ts +6750 -0
  544. package/Tests/UI/Rum/ReplayRail.test.tsx +723 -12
  545. package/Tests/UI/Rum/ReplayRailDetail.test.tsx +86 -0
  546. package/Tests/UI/Rum/ReplayScreenshot.test.ts +2124 -0
  547. package/Tests/UI/Rum/ReplayScreenshotActions.test.tsx +3288 -0
  548. package/Tests/UI/Rum/ReplayStage.test.tsx +62 -0
  549. package/Tests/UI/Rum/ReplayStageOverlays.test.tsx +983 -2
  550. package/Tests/UI/Rum/SessionReplaySettingsPolicyLoading.test.tsx +149 -0
  551. package/Tests/UI/Rum/SessionReplaySetupGuide.test.tsx +107 -6
  552. package/Tests/UI/Rum/SessionReplayUsersTableTooltips.test.tsx +330 -0
  553. package/Tests/UI/Rum/UserFlowTooltips.test.tsx +886 -0
  554. package/Tests/UI/Telemetry/TelemetryDetailPanel.test.tsx +28 -0
  555. package/Tests/UI/Utils/Breadcrumb/fixtures/RealBreadcrumbTrails.ts +10 -0
  556. package/Tests/UI/Utils/Breadcrumb/fixtures/RealRoutePatterns.ts +2 -0
  557. package/Tests/UI/Utils/PermissionGate.test.ts +76 -0
  558. package/Tests/UI/Utils/ProjectUsersModelAPI.test.ts +51 -0
  559. package/Tests/UI/Utils/Timezone.test.ts +747 -33
  560. package/Tests/UI/Workspace/SendTestNotificationButton.test.tsx +1854 -0
  561. package/Tests/UI/Workspace/WorkspaceCardsSendTestNotification.test.tsx +1864 -0
  562. package/Tests/Utils/AI/InvestigationReport.test.ts +435 -7
  563. package/Tests/Utils/AiRemediation/KubectlAllowlistValidatorParity.test.ts +1084 -0
  564. package/Tests/Utils/AiRemediation/KubectlOutputRedactor.test.ts +2531 -0
  565. package/Tests/Utils/AiRemediation/KubectlPolicy.test.ts +1895 -0
  566. package/Tests/Utils/AiRemediation/KubectlPolicyAllowlist.test.ts +428 -0
  567. package/Tests/Utils/AiRemediation/KubectlPolicyChartRbacParity.test.ts +828 -0
  568. package/Tests/Utils/AiRemediation/KubectlPolicyCustomResourceScope.test.ts +573 -0
  569. package/Tests/Utils/AiRemediation/KubectlPolicyDenials.test.ts +1525 -0
  570. package/Tests/Utils/AiRemediation/KubectlPolicyExposeOverrides.test.ts +275 -0
  571. package/Tests/Utils/AiRemediation/KubectlPolicyNodePatch.test.ts +428 -0
  572. package/Tests/Utils/AiRemediation/KubectlPolicyObjectWords.test.ts +195 -0
  573. package/Tests/Utils/AiRemediation/KubectlPolicyPatchParents.test.ts +637 -0
  574. package/Tests/Utils/AiRemediation/KubectlPolicyPodSecurityBaseline.test.ts +322 -0
  575. package/Tests/Utils/AiRemediation/KubectlPolicySafeWriteScope.test.ts +1026 -0
  576. package/Tests/Utils/AiRemediation/KubectlWaitBudget.test.ts +267 -0
  577. package/Tests/Utils/AiRemediation/KubectlWriteScope.test.ts +390 -0
  578. package/Tests/Utils/AiRemediation/KubectlWriteScopeCallerParity.test.ts +777 -0
  579. package/Tests/Utils/AiRemediation/KubectlWriteScopeClusterScoped.test.ts +613 -0
  580. package/Tests/Utils/AiRemediation/KubectlWriteScopeEntryPoint.test.ts +576 -0
  581. package/Tests/Utils/AiRemediation/KubectlWriteScopeKubectlSpellings.test.ts +752 -0
  582. package/Tests/Utils/AiRemediation/KubectlWriteScopeObjectWords.test.ts +358 -0
  583. package/Tests/Utils/AiRemediation/KubectlWriteScopeOverrides.test.ts +293 -0
  584. package/Tests/Utils/AiRemediation/KubectlWriteScopeParityCases.ts +598 -0
  585. package/Tests/Utils/AiRemediation/KubectlWriteScopePolicyParity.test.ts +403 -0
  586. package/Tests/Utils/Dashboard/DashboardClockComponent.test.ts +154 -5
  587. package/Tests/Utils/Incident/IncidentFromAlerts.test.ts +696 -0
  588. package/Tests/Utils/Monitor/IncomingEmailMonitorAddress.test.ts +478 -0
  589. package/Tests/Utils/Monitor/MonitorCheckScheduleUtil.test.ts +646 -0
  590. package/Tests/Utils/Monitor/MonitorOverviewCriteriaUtil.test.ts +292 -0
  591. package/Tests/Utils/Monitor/MonitorOverviewFamily.test.ts +274 -0
  592. package/Tests/Utils/Monitor/MonitorOverviewPresentationUtil.test.ts +3100 -0
  593. package/Tests/Utils/Monitor/MonitorOverviewProbeUtil.test.ts +1412 -0
  594. package/Tests/Utils/Monitor/MonitorOverviewTargetUtil.test.ts +374 -0
  595. package/Tests/Utils/Monitor/MonitorStatusHistoryUtil.test.ts +332 -0
  596. package/Tests/Utils/Monitor/MonitorUptimeSummaryUtil.test.ts +946 -0
  597. package/Tests/Utils/Rum/SessionIdentity.test.ts +94 -0
  598. package/Tests/Utils/Rum/SessionReplayWafCompatibility.test.ts +840 -0
  599. package/Tests/Utils/Rum/SessionReplayWireEncoding.test.ts +208 -0
  600. package/Tests/Utils/Rum/SessionTraceState.test.ts +239 -0
  601. package/Tests/Utils/Rum/UserFlow.test.ts +1010 -0
  602. package/Tests/Utils/StatusPage/MonitorGroupMergedDowntimeUtil.test.ts +217 -0
  603. package/Tests/Utils/StatusPage/ResourceUptime.test.ts +1272 -1
  604. package/Tests/Utils/StatusPage/UptimeDailyAggregateTotals.test.ts +298 -0
  605. package/Tests/Utils/StatusPage/UptimeDailyAggregateUtil.test.ts +649 -1
  606. package/Tests/Utils/StatusPage/UptimeDailyAggregateWindow.test.ts +314 -0
  607. package/Tests/Utils/Telemetry/AttributesJSON.test.ts +454 -0
  608. package/Tests/Utils/Uptime/DayUptimeGraphUtil.test.ts +418 -2
  609. package/Tests/Utils/Uptime/DayUptimeGraphUtilMidnightDst.test.ts +160 -0
  610. package/Tests/Utils/Uptime/DayUptimeGraphUtilTimezone.Auckland.test.ts +45 -0
  611. package/Tests/Utils/Uptime/DayUptimeGraphUtilTimezone.Kolkata.test.ts +40 -0
  612. package/Tests/Utils/Uptime/DayUptimeGraphUtilTimezone.London.test.ts +147 -0
  613. package/Tests/Utils/Uptime/DayUptimeGraphUtilTimezone.NewYork.test.ts +48 -0
  614. package/Tests/Utils/Uptime/DayUptimeGraphUtilTimezone.Tokyo.test.ts +39 -0
  615. package/Tests/Utils/Uptime/DayUptimeGraphUtilTimezoneCases.ts +1015 -0
  616. package/Tests/Utils/Uptime/UptimeUtil.test.ts +75 -0
  617. package/Tests/Utils/Uptime/UptimeUtilChronologicalOrder.test.ts +1279 -0
  618. package/Types/AutoRemediation/AiRemediationCommandPlan.ts +203 -5
  619. package/Types/Date.ts +121 -7
  620. package/Types/Email/EmailMessage.ts +8 -0
  621. package/Types/Email/EmailTemplateType.ts +1 -0
  622. package/Types/Exception/ExceptionMessages.ts +1 -0
  623. package/Types/Incident/IncidentAlertLink.ts +38 -0
  624. package/Types/Kubernetes/KubernetesClusterAiAccess.ts +488 -0
  625. package/Types/Kubernetes/KubernetesClusterAiAccessPermissions.ts +54 -0
  626. package/Types/Kubernetes/KubernetesClusterAiAccessToolNames.ts +17 -0
  627. package/Types/Monitor/DatabaseMonitor/DatabaseMonitorResponse.ts +9 -0
  628. package/Types/Monitor/DatabaseMonitor/SqlServerPlatform.ts +117 -0
  629. package/Types/Monitor/KubernetesAlertTemplates.ts +6 -5
  630. package/Types/Monitor/MonitorStepExceptionMonitor.ts +56 -0
  631. package/Types/Monitor/MonitorUptimeSummary.ts +113 -0
  632. package/Types/Monitor/Recommendation/MonitorRecommendationUtil.ts +11 -0
  633. package/Types/Permission.ts +48 -0
  634. package/Types/Rum/SessionReplay.ts +80 -8
  635. package/Types/Rum/SessionReplayApi.ts +44 -1
  636. package/Types/Rum/UserFlow.ts +187 -0
  637. package/Types/Rum/WebVitals.ts +52 -0
  638. package/Types/Runbook/RunbookStepType.ts +10 -0
  639. package/Types/Runbook/RunnerJobOrigin.ts +15 -0
  640. package/Types/SecurityEvent/Connectors/SecurityEventConnectorCatalog.ts +6 -2
  641. package/Types/StatusPage/MergedDowntimeTotals.ts +17 -0
  642. package/Types/StatusPage/PublicNoteSubscriberNotificationDefault.ts +148 -0
  643. package/Types/StatusPage/UptimeDailyAggregate.ts +15 -0
  644. package/Types/Telemetry/TelemetryIngestSurface.ts +9 -0
  645. package/Types/Timezone.ts +5 -0
  646. package/Types/TimezoneAlias.ts +385 -0
  647. package/Types/Workflow/Templates.ts +3041 -2
  648. package/Types/Workflow/WorkflowVariableOAuth.ts +476 -0
  649. package/Types/Workspace/WorkspaceNoteReaction.ts +132 -0
  650. package/Typings/Index.d.ts +24 -0
  651. package/UI/Components/AttributesJSON/AttributesJSONPreferences.ts +175 -0
  652. package/UI/Components/AttributesJSON/AttributesJSONView.tsx +138 -0
  653. package/UI/Components/AttributesJSON/AttributesViewToggle.tsx +79 -0
  654. package/UI/Components/AttributesJSON/BracesGlyph.tsx +30 -0
  655. package/UI/Components/AttributesJSON/CopyAttributesAsJSONButton.tsx +491 -0
  656. package/UI/Components/AttributesJSON/JSONHighlight.ts +77 -0
  657. package/UI/Components/Calendar/Calendar.css +83 -0
  658. package/UI/Components/Calendar/Calendar.tsx +136 -7
  659. package/UI/Components/Calendar/CalendarDayLayout.ts +236 -0
  660. package/UI/Components/Charts/ChartGroup/ChartGroup.tsx +23 -1
  661. package/UI/Components/Charts/Utils/HistogramSelection.ts +117 -0
  662. package/UI/Components/Charts/Utils/useHistogramRangeSelection.ts +269 -0
  663. package/UI/Components/Charts/Utils/useHistogramZoom.ts +26 -2
  664. package/UI/Components/Date/CustomTimeRangeModal.tsx +26 -3
  665. package/UI/Components/Detail/FieldLabel.tsx +8 -0
  666. package/UI/Components/Dropdown/Dropdown.tsx +58 -9
  667. package/UI/Components/Forms/Fields/FormField.tsx +49 -14
  668. package/UI/Components/Graphs/DayUptimeGraph.tsx +166 -25
  669. package/UI/Components/Graphs/UptimeBarTooltip.tsx +10 -2
  670. package/UI/Components/Graphs/UptimeDaySummary.tsx +8 -0
  671. package/UI/Components/InfoCard/InfoCard.tsx +47 -1
  672. package/UI/Components/LogsViewer/LogsViewer.tsx +52 -5
  673. package/UI/Components/LogsViewer/components/ColumnSelector.tsx +13 -2
  674. package/UI/Components/LogsViewer/components/KeyboardShortcutsHelp.tsx +13 -1
  675. package/UI/Components/LogsViewer/components/LogDetailsPanel.tsx +91 -76
  676. package/UI/Components/LogsViewer/components/LogsFacetSidebar.tsx +15 -1
  677. package/UI/Components/LogsViewer/components/LogsHistogram.tsx +28 -106
  678. package/UI/Components/LogsViewer/components/LogsViewerToolbar.tsx +54 -6
  679. package/UI/Components/LogsViewer/components/SavedViewsDropdown.tsx +8 -2
  680. package/UI/Components/LogsViewer/useLogsHistogram.ts +39 -6
  681. package/UI/Components/ModelTable/BaseModelTable.tsx +161 -31
  682. package/UI/Components/ModelTable/Column.ts +5 -0
  683. package/UI/Components/MonitorGraphs/Uptime.tsx +12 -0
  684. package/UI/Components/MonitorGraphs/UptimeBarDayModal.tsx +10 -2
  685. package/UI/Components/Page/ModelPage.tsx +59 -3
  686. package/UI/Components/Table/TableHeader.tsx +47 -2
  687. package/UI/Components/Table/Types/Column.ts +7 -0
  688. package/UI/Components/TelemetryViewer/TelemetryViewer.tsx +69 -5
  689. package/UI/Components/TelemetryViewer/components/TelemetryDetailPanel.tsx +12 -1
  690. package/UI/Components/TelemetryViewer/components/TelemetryFacetSidebar.tsx +15 -1
  691. package/UI/Components/TelemetryViewer/components/TelemetryHistogram.tsx +36 -104
  692. package/UI/Components/TelemetryViewer/components/TelemetrySearchBar.tsx +9 -1
  693. package/UI/Components/Tooltip/InfoTooltip.tsx +78 -0
  694. package/UI/Utils/ModelAPI/ProjectUsersModelAPI.ts +19 -1
  695. package/UI/Utils/PermissionGate.ts +11 -2
  696. package/UI/Utils/Timezone.ts +69 -28
  697. package/Utils/AI/InvestigationReport.ts +195 -25
  698. package/Utils/AiRemediation/KubectlOutputRedactor.ts +1724 -0
  699. package/Utils/AiRemediation/KubectlPolicy.ts +4136 -0
  700. package/Utils/AiRemediation/KubectlWaitBudget.ts +156 -0
  701. package/Utils/AiRemediation/KubectlWriteScope.ts +1964 -0
  702. package/Utils/Dashboard/Components/DashboardClockComponent.ts +7 -6
  703. package/Utils/Incident/IncidentFromAlerts.ts +516 -0
  704. package/Utils/Monitor/IncomingEmailMonitorAddress.ts +292 -0
  705. package/Utils/Monitor/MonitorCheckScheduleUtil.ts +654 -0
  706. package/Utils/Monitor/MonitorOverviewCriteriaUtil.ts +188 -0
  707. package/Utils/Monitor/MonitorOverviewFamily.ts +263 -0
  708. package/Utils/Monitor/MonitorOverviewPresentationUtil.ts +1958 -0
  709. package/Utils/Monitor/MonitorOverviewProbeUtil.ts +979 -0
  710. package/Utils/Monitor/MonitorOverviewTargetUtil.ts +299 -0
  711. package/Utils/Monitor/MonitorStatusHistoryUtil.ts +201 -0
  712. package/Utils/Monitor/MonitorUptimeSummaryUtil.ts +638 -0
  713. package/Utils/Rum/SessionIdentity.ts +44 -0
  714. package/Utils/Rum/SessionReplayWireEncoding.ts +137 -0
  715. package/Utils/Rum/SessionTraceState.ts +212 -0
  716. package/Utils/Rum/UserFlow.ts +1527 -0
  717. package/Utils/StatusPage/MonitorGroupMergedDowntimeUtil.ts +107 -0
  718. package/Utils/StatusPage/ResourceUptime.ts +99 -0
  719. package/Utils/StatusPage/UptimeDailyAggregateUtil.ts +197 -0
  720. package/Utils/Telemetry/AttributesJSON.ts +367 -0
  721. package/Utils/Uptime/DayUptimeGraphUtil.ts +165 -0
  722. package/Utils/Uptime/UptimeUtil.ts +122 -38
  723. package/build/dist/Models/DatabaseModels/AlertEpisodeMember.js +8 -1
  724. package/build/dist/Models/DatabaseModels/AlertEpisodeMember.js.map +1 -1
  725. package/build/dist/Models/DatabaseModels/AlertFeed.js +2 -0
  726. package/build/dist/Models/DatabaseModels/AlertFeed.js.map +1 -1
  727. package/build/dist/Models/DatabaseModels/AutoRemediationSuggestion.js +62 -0
  728. package/build/dist/Models/DatabaseModels/AutoRemediationSuggestion.js.map +1 -1
  729. package/build/dist/Models/DatabaseModels/IncidentAlert.js +553 -0
  730. package/build/dist/Models/DatabaseModels/IncidentAlert.js.map +1 -0
  731. package/build/dist/Models/DatabaseModels/IncidentEpisodeMember.js +8 -1
  732. package/build/dist/Models/DatabaseModels/IncidentEpisodeMember.js.map +1 -1
  733. package/build/dist/Models/DatabaseModels/IncidentEpisodePublicNote.js +10 -3
  734. package/build/dist/Models/DatabaseModels/IncidentEpisodePublicNote.js.map +1 -1
  735. package/build/dist/Models/DatabaseModels/IncidentFeed.js +2 -0
  736. package/build/dist/Models/DatabaseModels/IncidentFeed.js.map +1 -1
  737. package/build/dist/Models/DatabaseModels/IncidentPublicNote.js +10 -3
  738. package/build/dist/Models/DatabaseModels/IncidentPublicNote.js.map +1 -1
  739. package/build/dist/Models/DatabaseModels/Index.js +2 -0
  740. package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
  741. package/build/dist/Models/DatabaseModels/KubernetesCluster.js +434 -0
  742. package/build/dist/Models/DatabaseModels/KubernetesCluster.js.map +1 -1
  743. package/build/dist/Models/DatabaseModels/Monitor.js +49 -0
  744. package/build/dist/Models/DatabaseModels/Monitor.js.map +1 -1
  745. package/build/dist/Models/DatabaseModels/Project.js +62 -0
  746. package/build/dist/Models/DatabaseModels/Project.js.map +1 -1
  747. package/build/dist/Models/DatabaseModels/RumApplication.js +53 -1
  748. package/build/dist/Models/DatabaseModels/RumApplication.js.map +1 -1
  749. package/build/dist/Models/DatabaseModels/Runner.js +4 -4
  750. package/build/dist/Models/DatabaseModels/Runner.js.map +1 -1
  751. package/build/dist/Models/DatabaseModels/RunnerJob.js +66 -0
  752. package/build/dist/Models/DatabaseModels/RunnerJob.js.map +1 -1
  753. package/build/dist/Models/DatabaseModels/ScheduledMaintenancePublicNote.js +11 -3
  754. package/build/dist/Models/DatabaseModels/ScheduledMaintenancePublicNote.js.map +1 -1
  755. package/build/dist/Models/DatabaseModels/WorkflowVariable.js +487 -3
  756. package/build/dist/Models/DatabaseModels/WorkflowVariable.js.map +1 -1
  757. package/build/dist/Models/DatabaseModels/WorkspaceProjectAuthToken.js +64 -16
  758. package/build/dist/Models/DatabaseModels/WorkspaceProjectAuthToken.js.map +1 -1
  759. package/build/dist/Server/API/AIInvestigationAPI.js +205 -0
  760. package/build/dist/Server/API/AIInvestigationAPI.js.map +1 -1
  761. package/build/dist/Server/API/AutoRemediationAPI.js +115 -2
  762. package/build/dist/Server/API/AutoRemediationAPI.js.map +1 -1
  763. package/build/dist/Server/API/CommonAPI.js +49 -0
  764. package/build/dist/Server/API/CommonAPI.js.map +1 -1
  765. package/build/dist/Server/API/KubernetesClusterAiAccessAPI.js +564 -0
  766. package/build/dist/Server/API/KubernetesClusterAiAccessAPI.js.map +1 -0
  767. package/build/dist/Server/API/MicrosoftTeamsAPI.js +465 -176
  768. package/build/dist/Server/API/MicrosoftTeamsAPI.js.map +1 -1
  769. package/build/dist/Server/API/MonitorAPI.js +107 -1
  770. package/build/dist/Server/API/MonitorAPI.js.map +1 -1
  771. package/build/dist/Server/API/OnCallScheduleTimelineAPI.js +5 -16
  772. package/build/dist/Server/API/OnCallScheduleTimelineAPI.js.map +1 -1
  773. package/build/dist/Server/API/SlackAPI.js +322 -78
  774. package/build/dist/Server/API/SlackAPI.js.map +1 -1
  775. package/build/dist/Server/API/StatusPageAPI.js +123 -17
  776. package/build/dist/Server/API/StatusPageAPI.js.map +1 -1
  777. package/build/dist/Server/API/TelemetryAPI.js +144 -5
  778. package/build/dist/Server/API/TelemetryAPI.js.map +1 -1
  779. package/build/dist/Server/API/UserTwoFactorBackupCodeAPI.js +1 -0
  780. package/build/dist/Server/API/UserTwoFactorBackupCodeAPI.js.map +1 -1
  781. package/build/dist/Server/API/WorkflowVariableAPI.js +109 -0
  782. package/build/dist/Server/API/WorkflowVariableAPI.js.map +1 -0
  783. package/build/dist/Server/Infrastructure/GlobalCache.js +29 -0
  784. package/build/dist/Server/Infrastructure/GlobalCache.js.map +1 -1
  785. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1794300000000-AddOAuth2WorkflowVariables.js +38 -0
  786. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1794300000000-AddOAuth2WorkflowVariables.js.map +1 -0
  787. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1794400000000-AddKubernetesClusterAiAccess.js +54 -0
  788. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1794400000000-AddKubernetesClusterAiAccess.js.map +1 -0
  789. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1794500000000-AddIncomingEmailCustomAddressToMonitor.js +14 -0
  790. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1794500000000-AddIncomingEmailCustomAddressToMonitor.js.map +1 -0
  791. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1794600000000-AddAuthTokenExpiresAtToWorkspaceProjectAuthToken.js +12 -0
  792. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1794600000000-AddAuthTokenExpiresAtToWorkspaceProjectAuthToken.js.map +1 -0
  793. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1794700000000-RemoveAppAccessTokenFromWorkspaceProjectAuthTokenMiscData.js +32 -0
  794. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1794700000000-RemoveAppAccessTokenFromWorkspaceProjectAuthTokenMiscData.js.map +1 -0
  795. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1794800000000-AddSessionReplaySameOriginTracePropagation.js +20 -0
  796. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1794800000000-AddSessionReplaySameOriginTracePropagation.js.map +1 -0
  797. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1794900000000-AddIncidentAlert.js +42 -0
  798. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1794900000000-AddIncidentAlert.js.map +1 -0
  799. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +14 -0
  800. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
  801. package/build/dist/Server/Middleware/MasterAdminAuthorization.js +21 -0
  802. package/build/dist/Server/Middleware/MasterAdminAuthorization.js.map +1 -1
  803. package/build/dist/Server/Middleware/TelemetryIngest.js +32 -2
  804. package/build/dist/Server/Middleware/TelemetryIngest.js.map +1 -1
  805. package/build/dist/Server/Middleware/UserAuthorization.js +39 -6
  806. package/build/dist/Server/Middleware/UserAuthorization.js.map +1 -1
  807. package/build/dist/Server/Services/AIAgentService.js +1 -0
  808. package/build/dist/Server/Services/AIAgentService.js.map +1 -1
  809. package/build/dist/Server/Services/AccessTokenService.js +87 -42
  810. package/build/dist/Server/Services/AccessTokenService.js.map +1 -1
  811. package/build/dist/Server/Services/AlertEpisodeMemberService.js +4 -0
  812. package/build/dist/Server/Services/AlertEpisodeMemberService.js.map +1 -1
  813. package/build/dist/Server/Services/AlertEpisodeService.js +12 -1
  814. package/build/dist/Server/Services/AlertEpisodeService.js.map +1 -1
  815. package/build/dist/Server/Services/AlertService.js +110 -23
  816. package/build/dist/Server/Services/AlertService.js.map +1 -1
  817. package/build/dist/Server/Services/AutoRemediationRuleEngineService.js +716 -30
  818. package/build/dist/Server/Services/AutoRemediationRuleEngineService.js.map +1 -1
  819. package/build/dist/Server/Services/AutoRemediationRuleService.js +100 -0
  820. package/build/dist/Server/Services/AutoRemediationRuleService.js.map +1 -1
  821. package/build/dist/Server/Services/BillingService.js +1 -0
  822. package/build/dist/Server/Services/BillingService.js.map +1 -1
  823. package/build/dist/Server/Services/InboundEmail/Providers/SendGridInboundProvider.js +11 -16
  824. package/build/dist/Server/Services/InboundEmail/Providers/SendGridInboundProvider.js.map +1 -1
  825. package/build/dist/Server/Services/IncidentAlertService.js +1370 -0
  826. package/build/dist/Server/Services/IncidentAlertService.js.map +1 -0
  827. package/build/dist/Server/Services/IncidentEpisodeMemberService.js +4 -0
  828. package/build/dist/Server/Services/IncidentEpisodeMemberService.js.map +1 -1
  829. package/build/dist/Server/Services/IncidentEpisodePublicNoteService.js +48 -0
  830. package/build/dist/Server/Services/IncidentEpisodePublicNoteService.js.map +1 -1
  831. package/build/dist/Server/Services/IncidentEpisodeRoleMemberService.js +21 -0
  832. package/build/dist/Server/Services/IncidentEpisodeRoleMemberService.js.map +1 -1
  833. package/build/dist/Server/Services/IncidentEpisodeService.js +12 -1
  834. package/build/dist/Server/Services/IncidentEpisodeService.js.map +1 -1
  835. package/build/dist/Server/Services/IncidentGroupingEngineService.js +8 -0
  836. package/build/dist/Server/Services/IncidentGroupingEngineService.js.map +1 -1
  837. package/build/dist/Server/Services/IncidentMemberService.js +14 -0
  838. package/build/dist/Server/Services/IncidentMemberService.js.map +1 -1
  839. package/build/dist/Server/Services/IncidentPublicNoteService.js +48 -0
  840. package/build/dist/Server/Services/IncidentPublicNoteService.js.map +1 -1
  841. package/build/dist/Server/Services/IncidentService.js +263 -33
  842. package/build/dist/Server/Services/IncidentService.js.map +1 -1
  843. package/build/dist/Server/Services/IncidentStateTimelineService.js +33 -0
  844. package/build/dist/Server/Services/IncidentStateTimelineService.js.map +1 -1
  845. package/build/dist/Server/Services/IncidentTemplateService.js +68 -4
  846. package/build/dist/Server/Services/IncidentTemplateService.js.map +1 -1
  847. package/build/dist/Server/Services/Index.js +2 -0
  848. package/build/dist/Server/Services/Index.js.map +1 -1
  849. package/build/dist/Server/Services/KubernetesClusterAiAccessService.js +1470 -0
  850. package/build/dist/Server/Services/KubernetesClusterAiAccessService.js.map +1 -0
  851. package/build/dist/Server/Services/KubernetesClusterService.js +1097 -0
  852. package/build/dist/Server/Services/KubernetesClusterService.js.map +1 -1
  853. package/build/dist/Server/Services/LogAggregationService.js +14 -6
  854. package/build/dist/Server/Services/LogAggregationService.js.map +1 -1
  855. package/build/dist/Server/Services/MonitorService.js +487 -48
  856. package/build/dist/Server/Services/MonitorService.js.map +1 -1
  857. package/build/dist/Server/Services/MonitorStatusTimelineService.js +540 -3
  858. package/build/dist/Server/Services/MonitorStatusTimelineService.js.map +1 -1
  859. package/build/dist/Server/Services/OnCallDutyPolicyEscalationRuleScheduleService.js +2 -0
  860. package/build/dist/Server/Services/OnCallDutyPolicyEscalationRuleScheduleService.js.map +1 -1
  861. package/build/dist/Server/Services/OnCallDutyPolicyEscalationRuleTeamService.js +2 -0
  862. package/build/dist/Server/Services/OnCallDutyPolicyEscalationRuleTeamService.js.map +1 -1
  863. package/build/dist/Server/Services/OnCallDutyPolicyEscalationRuleUserService.js +2 -0
  864. package/build/dist/Server/Services/OnCallDutyPolicyEscalationRuleUserService.js.map +1 -1
  865. package/build/dist/Server/Services/OnCallDutyPolicyScheduleService.js +3 -0
  866. package/build/dist/Server/Services/OnCallDutyPolicyScheduleService.js.map +1 -1
  867. package/build/dist/Server/Services/OnCallNotificationAlertingService.js +29 -7
  868. package/build/dist/Server/Services/OnCallNotificationAlertingService.js.map +1 -1
  869. package/build/dist/Server/Services/OnCallSetupReminderService.js +1 -0
  870. package/build/dist/Server/Services/OnCallSetupReminderService.js.map +1 -1
  871. package/build/dist/Server/Services/ProbeService.js +7 -1
  872. package/build/dist/Server/Services/ProbeService.js.map +1 -1
  873. package/build/dist/Server/Services/ProjectService.js +11 -1
  874. package/build/dist/Server/Services/ProjectService.js.map +1 -1
  875. package/build/dist/Server/Services/RunbookCredentialService.js +24 -0
  876. package/build/dist/Server/Services/RunbookCredentialService.js.map +1 -1
  877. package/build/dist/Server/Services/RunbookSecretService.js +44 -0
  878. package/build/dist/Server/Services/RunbookSecretService.js.map +1 -1
  879. package/build/dist/Server/Services/RunnerJobService.js +641 -21
  880. package/build/dist/Server/Services/RunnerJobService.js.map +1 -1
  881. package/build/dist/Server/Services/RunnerService.js +344 -5
  882. package/build/dist/Server/Services/RunnerService.js.map +1 -1
  883. package/build/dist/Server/Services/ScheduledMaintenancePublicNoteService.js +48 -0
  884. package/build/dist/Server/Services/ScheduledMaintenancePublicNoteService.js.map +1 -1
  885. package/build/dist/Server/Services/ScheduledMaintenanceService.js +102 -20
  886. package/build/dist/Server/Services/ScheduledMaintenanceService.js.map +1 -1
  887. package/build/dist/Server/Services/ScheduledMaintenanceTemplateService.js +67 -4
  888. package/build/dist/Server/Services/ScheduledMaintenanceTemplateService.js.map +1 -1
  889. package/build/dist/Server/Services/ServiceLevelObjectiveService.js +12 -1
  890. package/build/dist/Server/Services/ServiceLevelObjectiveService.js.map +1 -1
  891. package/build/dist/Server/Services/StatusPagePrivateUserService.js +1 -0
  892. package/build/dist/Server/Services/StatusPagePrivateUserService.js.map +1 -1
  893. package/build/dist/Server/Services/StatusPageService.js +230 -32
  894. package/build/dist/Server/Services/StatusPageService.js.map +1 -1
  895. package/build/dist/Server/Services/StatusPageSubscriberService.js +4 -0
  896. package/build/dist/Server/Services/StatusPageSubscriberService.js.map +1 -1
  897. package/build/dist/Server/Services/TeamMemberService.js +270 -11
  898. package/build/dist/Server/Services/TeamMemberService.js.map +1 -1
  899. package/build/dist/Server/Services/TraceAggregationService.js +10 -6
  900. package/build/dist/Server/Services/TraceAggregationService.js.map +1 -1
  901. package/build/dist/Server/Services/UserEmailService.js +1 -0
  902. package/build/dist/Server/Services/UserEmailService.js.map +1 -1
  903. package/build/dist/Server/Services/UserNotificationMethodAdminService.js +1 -0
  904. package/build/dist/Server/Services/UserNotificationMethodAdminService.js.map +1 -1
  905. package/build/dist/Server/Services/UserNotificationRuleAdminService.js +1 -0
  906. package/build/dist/Server/Services/UserNotificationRuleAdminService.js.map +1 -1
  907. package/build/dist/Server/Services/UserNotificationRuleService.js +4 -0
  908. package/build/dist/Server/Services/UserNotificationRuleService.js.map +1 -1
  909. package/build/dist/Server/Services/UserService.js +107 -1
  910. package/build/dist/Server/Services/UserService.js.map +1 -1
  911. package/build/dist/Server/Services/WorkflowVariableService.js +396 -7
  912. package/build/dist/Server/Services/WorkflowVariableService.js.map +1 -1
  913. package/build/dist/Server/Services/WorkspaceNotificationRuleService.js +463 -7
  914. package/build/dist/Server/Services/WorkspaceNotificationRuleService.js.map +1 -1
  915. package/build/dist/Server/Services/WorkspaceProjectAuthTokenService.js +144 -2
  916. package/build/dist/Server/Services/WorkspaceProjectAuthTokenService.js.map +1 -1
  917. package/build/dist/Server/Types/Database/QueryHelper.js +20 -0
  918. package/build/dist/Server/Types/Database/QueryHelper.js.map +1 -1
  919. package/build/dist/Server/Types/Markdown.js +394 -27
  920. package/build/dist/Server/Types/Markdown.js.map +1 -1
  921. package/build/dist/Server/Utils/AI/ClusterAccess/ClusterAccessContext.js +123 -0
  922. package/build/dist/Server/Utils/AI/ClusterAccess/ClusterAccessContext.js.map +1 -0
  923. package/build/dist/Server/Utils/AI/ClusterAccess/KubectlInvestigationToolkit.js +344 -0
  924. package/build/dist/Server/Utils/AI/ClusterAccess/KubectlInvestigationToolkit.js.map +1 -0
  925. package/build/dist/Server/Utils/AI/ClusterAccess/KubectlJobRunner.js +587 -0
  926. package/build/dist/Server/Utils/AI/ClusterAccess/KubectlJobRunner.js.map +1 -0
  927. package/build/dist/Server/Utils/AI/CodeFix/CodeFixAgentAuth.js +18 -2
  928. package/build/dist/Server/Utils/AI/CodeFix/CodeFixAgentAuth.js.map +1 -1
  929. package/build/dist/Server/Utils/AI/Remediation/RemediationCommandTools.js +1380 -239
  930. package/build/dist/Server/Utils/AI/Remediation/RemediationCommandTools.js.map +1 -1
  931. package/build/dist/Server/Utils/AI/Remediation/RemediationExecutionRunner.js +1099 -68
  932. package/build/dist/Server/Utils/AI/Remediation/RemediationExecutionRunner.js.map +1 -1
  933. package/build/dist/Server/Utils/AI/SRE/AIInvestigationEngine.js +88 -6
  934. package/build/dist/Server/Utils/AI/SRE/AIInvestigationEngine.js.map +1 -1
  935. package/build/dist/Server/Utils/AI/SRE/AlertInvestigationRunner.js +45 -11
  936. package/build/dist/Server/Utils/AI/SRE/AlertInvestigationRunner.js.map +1 -1
  937. package/build/dist/Server/Utils/AI/SRE/IncidentInvestigationRunner.js +41 -11
  938. package/build/dist/Server/Utils/AI/SRE/IncidentInvestigationRunner.js.map +1 -1
  939. package/build/dist/Server/Utils/AI/Toolbox/AIActionTools.js +11 -4
  940. package/build/dist/Server/Utils/AI/Toolbox/AIActionTools.js.map +1 -1
  941. package/build/dist/Server/Utils/AI/Toolbox/ResourceTools.js +4 -2
  942. package/build/dist/Server/Utils/AI/Toolbox/ResourceTools.js.map +1 -1
  943. package/build/dist/Server/Utils/AutoRemediation/CommandPlanExecutor.js +997 -141
  944. package/build/dist/Server/Utils/AutoRemediation/CommandPlanExecutor.js.map +1 -1
  945. package/build/dist/Server/Utils/AutoRemediation/RemediationVerifier.js +299 -4
  946. package/build/dist/Server/Utils/AutoRemediation/RemediationVerifier.js.map +1 -1
  947. package/build/dist/Server/Utils/Database/AffectedResourceRelations.js +120 -0
  948. package/build/dist/Server/Utils/Database/AffectedResourceRelations.js.map +1 -0
  949. package/build/dist/Server/Utils/Database/ProjectScopedReferenceValidator.js +160 -1
  950. package/build/dist/Server/Utils/Database/ProjectScopedReferenceValidator.js.map +1 -1
  951. package/build/dist/Server/Utils/EmailRollup/EmailRollupFlushRunner.js +1 -0
  952. package/build/dist/Server/Utils/EmailRollup/EmailRollupFlushRunner.js.map +1 -1
  953. package/build/dist/Server/Utils/Monitor/MonitorAlert.js +59 -12
  954. package/build/dist/Server/Utils/Monitor/MonitorAlert.js.map +1 -1
  955. package/build/dist/Server/Utils/Monitor/MonitorCriteriaObservationBuilder.js +5 -1
  956. package/build/dist/Server/Utils/Monitor/MonitorCriteriaObservationBuilder.js.map +1 -1
  957. package/build/dist/Server/Utils/Monitor/MonitorIncident.js +84 -22
  958. package/build/dist/Server/Utils/Monitor/MonitorIncident.js.map +1 -1
  959. package/build/dist/Server/Utils/Monitor/MonitorPayloadRedaction.js +70 -5
  960. package/build/dist/Server/Utils/Monitor/MonitorPayloadRedaction.js.map +1 -1
  961. package/build/dist/Server/Utils/Monitor/ProbeMonitorsNotification.js +249 -0
  962. package/build/dist/Server/Utils/Monitor/ProbeMonitorsNotification.js.map +1 -0
  963. package/build/dist/Server/Utils/OnCall/OnCallShiftReminderRunner.js +1 -0
  964. package/build/dist/Server/Utils/OnCall/OnCallShiftReminderRunner.js.map +1 -1
  965. package/build/dist/Server/Utils/PushNotificationUtil.js +27 -0
  966. package/build/dist/Server/Utils/PushNotificationUtil.js.map +1 -1
  967. package/build/dist/Server/Utils/Rules/OwnerRuleAssignment.js +26 -3
  968. package/build/dist/Server/Utils/Rules/OwnerRuleAssignment.js.map +1 -1
  969. package/build/dist/Server/Utils/Runbook/RunbookExecutePermission.js +38 -3
  970. package/build/dist/Server/Utils/Runbook/RunbookExecutePermission.js.map +1 -1
  971. package/build/dist/Server/Utils/SessionReplay/SessionReplayGateCache.js +8 -0
  972. package/build/dist/Server/Utils/SessionReplay/SessionReplayGateCache.js.map +1 -1
  973. package/build/dist/Server/Utils/SessionReplay/SessionReplayReadService.js +143 -23
  974. package/build/dist/Server/Utils/SessionReplay/SessionReplayReadService.js.map +1 -1
  975. package/build/dist/Server/Utils/SessionReplay/SessionReplayUserFlowReadService.js +406 -0
  976. package/build/dist/Server/Utils/SessionReplay/SessionReplayUserFlowReadService.js.map +1 -0
  977. package/build/dist/Server/Utils/StartServer.js +4 -3
  978. package/build/dist/Server/Utils/StartServer.js.map +1 -1
  979. package/build/dist/Server/Utils/TeamMember/ProjectLeaveResourceCleanup.js +382 -0
  980. package/build/dist/Server/Utils/TeamMember/ProjectLeaveResourceCleanup.js.map +1 -0
  981. package/build/dist/Server/Utils/TwoFactorBackupCodeNotification.js +1 -0
  982. package/build/dist/Server/Utils/TwoFactorBackupCodeNotification.js.map +1 -1
  983. package/build/dist/Server/Utils/UserPermission/UserPermission.js +10 -0
  984. package/build/dist/Server/Utils/UserPermission/UserPermission.js.map +1 -1
  985. package/build/dist/Server/Utils/Workflow/OAuth2TokenClient.js +447 -0
  986. package/build/dist/Server/Utils/Workflow/OAuth2TokenClient.js.map +1 -0
  987. package/build/dist/Server/Utils/Workflow/WorkflowVariableOAuthToken.js +202 -0
  988. package/build/dist/Server/Utils/Workflow/WorkflowVariableOAuthToken.js.map +1 -0
  989. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/Alert.js +39 -1
  990. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/Alert.js.map +1 -1
  991. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/AlertEpisode.js +44 -4
  992. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/AlertEpisode.js.map +1 -1
  993. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/Incident.js +150 -191
  994. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/Incident.js.map +1 -1
  995. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/IncidentEpisode.js +44 -4
  996. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/IncidentEpisode.js.map +1 -1
  997. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/Monitor.js +39 -17
  998. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/Monitor.js.map +1 -1
  999. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/ScheduledMaintenance.js +151 -145
  1000. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/ScheduledMaintenance.js.map +1 -1
  1001. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.js +221 -127
  1002. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.js.map +1 -1
  1003. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsServiceUrl.js +91 -0
  1004. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsServiceUrl.js.map +1 -0
  1005. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/ReactionNoteSync.js +673 -0
  1006. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/ReactionNoteSync.js.map +1 -0
  1007. package/build/dist/Server/Utils/Workspace/Slack/Actions/ActionTypes.js +3 -9
  1008. package/build/dist/Server/Utils/Workspace/Slack/Actions/ActionTypes.js.map +1 -1
  1009. package/build/dist/Server/Utils/Workspace/Slack/Actions/Alert.js +65 -166
  1010. package/build/dist/Server/Utils/Workspace/Slack/Actions/Alert.js.map +1 -1
  1011. package/build/dist/Server/Utils/Workspace/Slack/Actions/AlertEpisode.js +63 -157
  1012. package/build/dist/Server/Utils/Workspace/Slack/Actions/AlertEpisode.js.map +1 -1
  1013. package/build/dist/Server/Utils/Workspace/Slack/Actions/Auth.js +23 -3
  1014. package/build/dist/Server/Utils/Workspace/Slack/Actions/Auth.js.map +1 -1
  1015. package/build/dist/Server/Utils/Workspace/Slack/Actions/Authorization.js +92 -0
  1016. package/build/dist/Server/Utils/Workspace/Slack/Actions/Authorization.js.map +1 -0
  1017. package/build/dist/Server/Utils/Workspace/Slack/Actions/Incident.js +81 -210
  1018. package/build/dist/Server/Utils/Workspace/Slack/Actions/Incident.js.map +1 -1
  1019. package/build/dist/Server/Utils/Workspace/Slack/Actions/IncidentEpisode.js +68 -138
  1020. package/build/dist/Server/Utils/Workspace/Slack/Actions/IncidentEpisode.js.map +1 -1
  1021. package/build/dist/Server/Utils/Workspace/Slack/Actions/ReactionNote.js +240 -0
  1022. package/build/dist/Server/Utils/Workspace/Slack/Actions/ReactionNote.js.map +1 -0
  1023. package/build/dist/Server/Utils/Workspace/Slack/Actions/ScheduledMaintenance.js +85 -212
  1024. package/build/dist/Server/Utils/Workspace/Slack/Actions/ScheduledMaintenance.js.map +1 -1
  1025. package/build/dist/Server/Utils/Workspace/Slack/Slack.js +60 -17
  1026. package/build/dist/Server/Utils/Workspace/Slack/Slack.js.map +1 -1
  1027. package/build/dist/Server/Utils/Workspace/Slack/app-manifest.json +2 -0
  1028. package/build/dist/Server/Utils/Workspace/Workspace.js +134 -41
  1029. package/build/dist/Server/Utils/Workspace/Workspace.js.map +1 -1
  1030. package/build/dist/Server/Utils/Workspace/WorkspaceActionAuthorization.js +197 -0
  1031. package/build/dist/Server/Utils/Workspace/WorkspaceActionAuthorization.js.map +1 -0
  1032. package/build/dist/Server/Utils/Workspace/WorkspaceBase.js +32 -0
  1033. package/build/dist/Server/Utils/Workspace/WorkspaceBase.js.map +1 -1
  1034. package/build/dist/Server/Utils/Workspace/WorkspaceOAuthState.js +199 -0
  1035. package/build/dist/Server/Utils/Workspace/WorkspaceOAuthState.js.map +1 -0
  1036. package/build/dist/Server/Utils/Workspace/WorkspaceProjectReferenceValidator.js +91 -0
  1037. package/build/dist/Server/Utils/Workspace/WorkspaceProjectReferenceValidator.js.map +1 -0
  1038. package/build/dist/Server/Utils/Workspace/WorkspaceReactionNote.js +450 -0
  1039. package/build/dist/Server/Utils/Workspace/WorkspaceReactionNote.js.map +1 -0
  1040. package/build/dist/Types/AutoRemediation/AiRemediationCommandPlan.js +103 -5
  1041. package/build/dist/Types/AutoRemediation/AiRemediationCommandPlan.js.map +1 -1
  1042. package/build/dist/Types/Date.js +97 -7
  1043. package/build/dist/Types/Date.js.map +1 -1
  1044. package/build/dist/Types/Email/EmailTemplateType.js +1 -0
  1045. package/build/dist/Types/Email/EmailTemplateType.js.map +1 -1
  1046. package/build/dist/Types/Exception/ExceptionMessages.js +1 -0
  1047. package/build/dist/Types/Exception/ExceptionMessages.js.map +1 -1
  1048. package/build/dist/Types/Incident/IncidentAlertLink.js +34 -0
  1049. package/build/dist/Types/Incident/IncidentAlertLink.js.map +1 -0
  1050. package/build/dist/Types/Kubernetes/KubernetesClusterAiAccess.js +245 -0
  1051. package/build/dist/Types/Kubernetes/KubernetesClusterAiAccess.js.map +1 -0
  1052. package/build/dist/Types/Kubernetes/KubernetesClusterAiAccessPermissions.js +49 -0
  1053. package/build/dist/Types/Kubernetes/KubernetesClusterAiAccessPermissions.js.map +1 -0
  1054. package/build/dist/Types/Kubernetes/KubernetesClusterAiAccessToolNames.js +16 -0
  1055. package/build/dist/Types/Kubernetes/KubernetesClusterAiAccessToolNames.js.map +1 -0
  1056. package/build/dist/Types/Monitor/DatabaseMonitor/SqlServerPlatform.js +104 -0
  1057. package/build/dist/Types/Monitor/DatabaseMonitor/SqlServerPlatform.js.map +1 -0
  1058. package/build/dist/Types/Monitor/KubernetesAlertTemplates.js +6 -5
  1059. package/build/dist/Types/Monitor/KubernetesAlertTemplates.js.map +1 -1
  1060. package/build/dist/Types/Monitor/MonitorStepExceptionMonitor.js +32 -0
  1061. package/build/dist/Types/Monitor/MonitorStepExceptionMonitor.js.map +1 -1
  1062. package/build/dist/Types/Monitor/MonitorUptimeSummary.js +52 -0
  1063. package/build/dist/Types/Monitor/MonitorUptimeSummary.js.map +1 -0
  1064. package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationUtil.js +9 -1
  1065. package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationUtil.js.map +1 -1
  1066. package/build/dist/Types/Permission.js +42 -0
  1067. package/build/dist/Types/Permission.js.map +1 -1
  1068. package/build/dist/Types/Rum/SessionReplay.js +52 -2
  1069. package/build/dist/Types/Rum/SessionReplay.js.map +1 -1
  1070. package/build/dist/Types/Rum/SessionReplayApi.js +11 -0
  1071. package/build/dist/Types/Rum/SessionReplayApi.js.map +1 -1
  1072. package/build/dist/Types/Rum/UserFlow.js +115 -0
  1073. package/build/dist/Types/Rum/UserFlow.js.map +1 -0
  1074. package/build/dist/Types/Rum/WebVitals.js +25 -0
  1075. package/build/dist/Types/Rum/WebVitals.js.map +1 -1
  1076. package/build/dist/Types/Runbook/RunbookStepType.js +10 -0
  1077. package/build/dist/Types/Runbook/RunbookStepType.js.map +1 -1
  1078. package/build/dist/Types/Runbook/RunnerJobOrigin.js +14 -0
  1079. package/build/dist/Types/Runbook/RunnerJobOrigin.js.map +1 -1
  1080. package/build/dist/Types/SecurityEvent/Connectors/SecurityEventConnectorCatalog.js +2 -2
  1081. package/build/dist/Types/SecurityEvent/Connectors/SecurityEventConnectorCatalog.js.map +1 -1
  1082. package/build/dist/Types/StatusPage/MergedDowntimeTotals.js +2 -0
  1083. package/build/dist/Types/StatusPage/MergedDowntimeTotals.js.map +1 -0
  1084. package/build/dist/Types/StatusPage/PublicNoteSubscriberNotificationDefault.js +65 -0
  1085. package/build/dist/Types/StatusPage/PublicNoteSubscriberNotificationDefault.js.map +1 -0
  1086. package/build/dist/Types/Telemetry/TelemetryIngestSurface.js +8 -0
  1087. package/build/dist/Types/Telemetry/TelemetryIngestSurface.js.map +1 -1
  1088. package/build/dist/Types/Timezone.js +5 -0
  1089. package/build/dist/Types/Timezone.js.map +1 -1
  1090. package/build/dist/Types/TimezoneAlias.js +340 -0
  1091. package/build/dist/Types/TimezoneAlias.js.map +1 -0
  1092. package/build/dist/Types/Workflow/Templates.js +2694 -2
  1093. package/build/dist/Types/Workflow/Templates.js.map +1 -1
  1094. package/build/dist/Types/Workflow/WorkflowVariableOAuth.js +314 -0
  1095. package/build/dist/Types/Workflow/WorkflowVariableOAuth.js.map +1 -0
  1096. package/build/dist/Types/Workspace/WorkspaceNoteReaction.js +98 -0
  1097. package/build/dist/Types/Workspace/WorkspaceNoteReaction.js.map +1 -0
  1098. package/build/dist/UI/Components/AttributesJSON/AttributesJSONPreferences.js +95 -0
  1099. package/build/dist/UI/Components/AttributesJSON/AttributesJSONPreferences.js.map +1 -0
  1100. package/build/dist/UI/Components/AttributesJSON/AttributesJSONView.js +44 -0
  1101. package/build/dist/UI/Components/AttributesJSON/AttributesJSONView.js.map +1 -0
  1102. package/build/dist/UI/Components/AttributesJSON/AttributesViewToggle.js +27 -0
  1103. package/build/dist/UI/Components/AttributesJSON/AttributesViewToggle.js.map +1 -0
  1104. package/build/dist/UI/Components/AttributesJSON/BracesGlyph.js +9 -0
  1105. package/build/dist/UI/Components/AttributesJSON/BracesGlyph.js.map +1 -0
  1106. package/build/dist/UI/Components/AttributesJSON/CopyAttributesAsJSONButton.js +260 -0
  1107. package/build/dist/UI/Components/AttributesJSON/CopyAttributesAsJSONButton.js.map +1 -0
  1108. package/build/dist/UI/Components/AttributesJSON/JSONHighlight.js +56 -0
  1109. package/build/dist/UI/Components/AttributesJSON/JSONHighlight.js.map +1 -0
  1110. package/build/dist/UI/Components/Calendar/Calendar.js +94 -7
  1111. package/build/dist/UI/Components/Calendar/Calendar.js.map +1 -1
  1112. package/build/dist/UI/Components/Calendar/CalendarDayLayout.js +136 -0
  1113. package/build/dist/UI/Components/Calendar/CalendarDayLayout.js.map +1 -0
  1114. package/build/dist/UI/Components/Charts/ChartGroup/ChartGroup.js +1 -1
  1115. package/build/dist/UI/Components/Charts/ChartGroup/ChartGroup.js.map +1 -1
  1116. package/build/dist/UI/Components/Charts/Utils/HistogramSelection.js +72 -0
  1117. package/build/dist/UI/Components/Charts/Utils/HistogramSelection.js.map +1 -0
  1118. package/build/dist/UI/Components/Charts/Utils/useHistogramRangeSelection.js +178 -0
  1119. package/build/dist/UI/Components/Charts/Utils/useHistogramRangeSelection.js.map +1 -0
  1120. package/build/dist/UI/Components/Charts/Utils/useHistogramZoom.js +13 -1
  1121. package/build/dist/UI/Components/Charts/Utils/useHistogramZoom.js.map +1 -1
  1122. package/build/dist/UI/Components/Date/CustomTimeRangeModal.js +20 -4
  1123. package/build/dist/UI/Components/Date/CustomTimeRangeModal.js.map +1 -1
  1124. package/build/dist/UI/Components/Detail/FieldLabel.js +2 -0
  1125. package/build/dist/UI/Components/Detail/FieldLabel.js.map +1 -1
  1126. package/build/dist/UI/Components/Dropdown/Dropdown.js +33 -9
  1127. package/build/dist/UI/Components/Dropdown/Dropdown.js.map +1 -1
  1128. package/build/dist/UI/Components/Forms/Fields/FormField.js +36 -13
  1129. package/build/dist/UI/Components/Forms/Fields/FormField.js.map +1 -1
  1130. package/build/dist/UI/Components/Graphs/DayUptimeGraph.js +117 -11
  1131. package/build/dist/UI/Components/Graphs/DayUptimeGraph.js.map +1 -1
  1132. package/build/dist/UI/Components/Graphs/UptimeBarTooltip.js +5 -1
  1133. package/build/dist/UI/Components/Graphs/UptimeBarTooltip.js.map +1 -1
  1134. package/build/dist/UI/Components/Graphs/UptimeDaySummary.js.map +1 -1
  1135. package/build/dist/UI/Components/InfoCard/InfoCard.js +22 -1
  1136. package/build/dist/UI/Components/InfoCard/InfoCard.js.map +1 -1
  1137. package/build/dist/UI/Components/LogsViewer/LogsViewer.js +36 -8
  1138. package/build/dist/UI/Components/LogsViewer/LogsViewer.js.map +1 -1
  1139. package/build/dist/UI/Components/LogsViewer/components/ColumnSelector.js +10 -2
  1140. package/build/dist/UI/Components/LogsViewer/components/ColumnSelector.js.map +1 -1
  1141. package/build/dist/UI/Components/LogsViewer/components/KeyboardShortcutsHelp.js +9 -1
  1142. package/build/dist/UI/Components/LogsViewer/components/KeyboardShortcutsHelp.js.map +1 -1
  1143. package/build/dist/UI/Components/LogsViewer/components/LogDetailsPanel.js +16 -15
  1144. package/build/dist/UI/Components/LogsViewer/components/LogDetailsPanel.js.map +1 -1
  1145. package/build/dist/UI/Components/LogsViewer/components/LogsFacetSidebar.js +1 -1
  1146. package/build/dist/UI/Components/LogsViewer/components/LogsFacetSidebar.js.map +1 -1
  1147. package/build/dist/UI/Components/LogsViewer/components/LogsHistogram.js +14 -74
  1148. package/build/dist/UI/Components/LogsViewer/components/LogsHistogram.js.map +1 -1
  1149. package/build/dist/UI/Components/LogsViewer/components/LogsViewerToolbar.js +22 -5
  1150. package/build/dist/UI/Components/LogsViewer/components/LogsViewerToolbar.js.map +1 -1
  1151. package/build/dist/UI/Components/LogsViewer/components/SavedViewsDropdown.js +9 -2
  1152. package/build/dist/UI/Components/LogsViewer/components/SavedViewsDropdown.js.map +1 -1
  1153. package/build/dist/UI/Components/LogsViewer/useLogsHistogram.js +16 -5
  1154. package/build/dist/UI/Components/LogsViewer/useLogsHistogram.js.map +1 -1
  1155. package/build/dist/UI/Components/ModelTable/BaseModelTable.js +89 -22
  1156. package/build/dist/UI/Components/ModelTable/BaseModelTable.js.map +1 -1
  1157. package/build/dist/UI/Components/MonitorGraphs/Uptime.js +7 -1
  1158. package/build/dist/UI/Components/MonitorGraphs/Uptime.js.map +1 -1
  1159. package/build/dist/UI/Components/MonitorGraphs/UptimeBarDayModal.js +5 -1
  1160. package/build/dist/UI/Components/MonitorGraphs/UptimeBarDayModal.js.map +1 -1
  1161. package/build/dist/UI/Components/Page/ModelPage.js +37 -3
  1162. package/build/dist/UI/Components/Page/ModelPage.js.map +1 -1
  1163. package/build/dist/UI/Components/Table/TableHeader.js +18 -2
  1164. package/build/dist/UI/Components/Table/TableHeader.js.map +1 -1
  1165. package/build/dist/UI/Components/TelemetryViewer/TelemetryViewer.js +27 -6
  1166. package/build/dist/UI/Components/TelemetryViewer/TelemetryViewer.js.map +1 -1
  1167. package/build/dist/UI/Components/TelemetryViewer/components/TelemetryDetailPanel.js +7 -1
  1168. package/build/dist/UI/Components/TelemetryViewer/components/TelemetryDetailPanel.js.map +1 -1
  1169. package/build/dist/UI/Components/TelemetryViewer/components/TelemetryFacetSidebar.js +1 -1
  1170. package/build/dist/UI/Components/TelemetryViewer/components/TelemetryFacetSidebar.js.map +1 -1
  1171. package/build/dist/UI/Components/TelemetryViewer/components/TelemetryHistogram.js +17 -77
  1172. package/build/dist/UI/Components/TelemetryViewer/components/TelemetryHistogram.js.map +1 -1
  1173. package/build/dist/UI/Components/TelemetryViewer/components/TelemetrySearchBar.js +10 -1
  1174. package/build/dist/UI/Components/TelemetryViewer/components/TelemetrySearchBar.js.map +1 -1
  1175. package/build/dist/UI/Components/Tooltip/InfoTooltip.js +28 -0
  1176. package/build/dist/UI/Components/Tooltip/InfoTooltip.js.map +1 -0
  1177. package/build/dist/UI/Utils/ModelAPI/ProjectUsersModelAPI.js +15 -1
  1178. package/build/dist/UI/Utils/ModelAPI/ProjectUsersModelAPI.js.map +1 -1
  1179. package/build/dist/UI/Utils/PermissionGate.js +4 -2
  1180. package/build/dist/UI/Utils/PermissionGate.js.map +1 -1
  1181. package/build/dist/UI/Utils/Timezone.js +52 -17
  1182. package/build/dist/UI/Utils/Timezone.js.map +1 -1
  1183. package/build/dist/Utils/AI/InvestigationReport.js +116 -21
  1184. package/build/dist/Utils/AI/InvestigationReport.js.map +1 -1
  1185. package/build/dist/Utils/AiRemediation/KubectlOutputRedactor.js +1209 -0
  1186. package/build/dist/Utils/AiRemediation/KubectlOutputRedactor.js.map +1 -0
  1187. package/build/dist/Utils/AiRemediation/KubectlPolicy.js +2973 -0
  1188. package/build/dist/Utils/AiRemediation/KubectlPolicy.js.map +1 -0
  1189. package/build/dist/Utils/AiRemediation/KubectlWaitBudget.js +99 -0
  1190. package/build/dist/Utils/AiRemediation/KubectlWaitBudget.js.map +1 -0
  1191. package/build/dist/Utils/AiRemediation/KubectlWriteScope.js +1429 -0
  1192. package/build/dist/Utils/AiRemediation/KubectlWriteScope.js.map +1 -0
  1193. package/build/dist/Utils/Dashboard/Components/DashboardClockComponent.js +7 -6
  1194. package/build/dist/Utils/Dashboard/Components/DashboardClockComponent.js.map +1 -1
  1195. package/build/dist/Utils/Incident/IncidentFromAlerts.js +306 -0
  1196. package/build/dist/Utils/Incident/IncidentFromAlerts.js.map +1 -0
  1197. package/build/dist/Utils/Monitor/IncomingEmailMonitorAddress.js +214 -0
  1198. package/build/dist/Utils/Monitor/IncomingEmailMonitorAddress.js.map +1 -0
  1199. package/build/dist/Utils/Monitor/MonitorCheckScheduleUtil.js +471 -0
  1200. package/build/dist/Utils/Monitor/MonitorCheckScheduleUtil.js.map +1 -0
  1201. package/build/dist/Utils/Monitor/MonitorOverviewCriteriaUtil.js +107 -0
  1202. package/build/dist/Utils/Monitor/MonitorOverviewCriteriaUtil.js.map +1 -0
  1203. package/build/dist/Utils/Monitor/MonitorOverviewFamily.js +191 -0
  1204. package/build/dist/Utils/Monitor/MonitorOverviewFamily.js.map +1 -0
  1205. package/build/dist/Utils/Monitor/MonitorOverviewPresentationUtil.js +1259 -0
  1206. package/build/dist/Utils/Monitor/MonitorOverviewPresentationUtil.js.map +1 -0
  1207. package/build/dist/Utils/Monitor/MonitorOverviewProbeUtil.js +593 -0
  1208. package/build/dist/Utils/Monitor/MonitorOverviewProbeUtil.js.map +1 -0
  1209. package/build/dist/Utils/Monitor/MonitorOverviewTargetUtil.js +195 -0
  1210. package/build/dist/Utils/Monitor/MonitorOverviewTargetUtil.js.map +1 -0
  1211. package/build/dist/Utils/Monitor/MonitorStatusHistoryUtil.js +127 -0
  1212. package/build/dist/Utils/Monitor/MonitorStatusHistoryUtil.js.map +1 -0
  1213. package/build/dist/Utils/Monitor/MonitorUptimeSummaryUtil.js +464 -0
  1214. package/build/dist/Utils/Monitor/MonitorUptimeSummaryUtil.js.map +1 -0
  1215. package/build/dist/Utils/Rum/SessionIdentity.js +31 -1
  1216. package/build/dist/Utils/Rum/SessionIdentity.js.map +1 -1
  1217. package/build/dist/Utils/Rum/SessionReplayWireEncoding.js +128 -0
  1218. package/build/dist/Utils/Rum/SessionReplayWireEncoding.js.map +1 -0
  1219. package/build/dist/Utils/Rum/SessionTraceState.js +154 -0
  1220. package/build/dist/Utils/Rum/SessionTraceState.js.map +1 -0
  1221. package/build/dist/Utils/Rum/UserFlow.js +941 -0
  1222. package/build/dist/Utils/Rum/UserFlow.js.map +1 -0
  1223. package/build/dist/Utils/StatusPage/MonitorGroupMergedDowntimeUtil.js +82 -0
  1224. package/build/dist/Utils/StatusPage/MonitorGroupMergedDowntimeUtil.js.map +1 -0
  1225. package/build/dist/Utils/StatusPage/ResourceUptime.js +46 -0
  1226. package/build/dist/Utils/StatusPage/ResourceUptime.js.map +1 -1
  1227. package/build/dist/Utils/StatusPage/UptimeDailyAggregateUtil.js +148 -0
  1228. package/build/dist/Utils/StatusPage/UptimeDailyAggregateUtil.js.map +1 -1
  1229. package/build/dist/Utils/Telemetry/AttributesJSON.js +245 -0
  1230. package/build/dist/Utils/Telemetry/AttributesJSON.js.map +1 -0
  1231. package/build/dist/Utils/Uptime/DayUptimeGraphUtil.js +103 -0
  1232. package/build/dist/Utils/Uptime/DayUptimeGraphUtil.js.map +1 -1
  1233. package/build/dist/Utils/Uptime/UptimeUtil.js +91 -27
  1234. package/build/dist/Utils/Uptime/UptimeUtil.js.map +1 -1
  1235. package/jest.config.json +2 -1
  1236. package/package.json +2 -1
  1237. package/tsconfig.tests.json +36 -0
  1238. package/Tests/UI/Components/EmptyState/EmptyStateGuideLinks.test.tsx +0 -337
  1239. package/UI/Components/EmptyState/EmptyStateGuideLinks.tsx +0 -124
  1240. package/build/dist/UI/Components/EmptyState/EmptyStateGuideLinks.js +0 -47
  1241. package/build/dist/UI/Components/EmptyState/EmptyStateGuideLinks.js.map +0 -1
@@ -0,0 +1,1259 @@
1
+ import OneUptimeDate from "../../Types/Date";
2
+ import { CheckOn } from "../../Types/Monitor/CriteriaFilter";
3
+ import MonitorType from "../../Types/Monitor/MonitorType";
4
+ import { formatDurationCompact } from "../Slo/SloDuration";
5
+ import MonitorCheckScheduleUtil, { MonitorCheckFreshness, } from "./MonitorCheckScheduleUtil";
6
+ import MonitorOverviewCriteriaUtil from "./MonitorOverviewCriteriaUtil";
7
+ import MonitorOverviewFamilyUtil, { MonitorOverviewFamily, } from "./MonitorOverviewFamily";
8
+ import MonitorStatusHistoryUtil from "./MonitorStatusHistoryUtil";
9
+ import MonitorOverviewTargetUtil from "./MonitorOverviewTargetUtil";
10
+ /*
11
+ * The monitor overview's hero, facts, pulse and section switches, decided in
12
+ * one pure function so every per-type and per-state rule is unit-tested
13
+ * without React.
14
+ *
15
+ * The rule it is built around: never claim health that was not measured. A
16
+ * paused monitor, one nobody is checking, one with no criteria and one still
17
+ * waiting for its first result are never shown as Good, and never lead with
18
+ * the stored status name (which only describes the last thing that was
19
+ * recorded). Unknown is never rendered as zero.
20
+ */
21
+ export var MonitorOverviewRunState;
22
+ (function (MonitorOverviewRunState) {
23
+ MonitorOverviewRunState["Manual"] = "Manual";
24
+ MonitorOverviewRunState["Paused"] = "Paused";
25
+ MonitorOverviewRunState["NotChecking"] = "NotChecking";
26
+ MonitorOverviewRunState["NotConfigured"] = "NotConfigured";
27
+ MonitorOverviewRunState["AwaitingFirstData"] = "AwaitingFirstData";
28
+ MonitorOverviewRunState["Overdue"] = "Overdue";
29
+ MonitorOverviewRunState["Running"] = "Running";
30
+ })(MonitorOverviewRunState || (MonitorOverviewRunState = {}));
31
+ const MAX_FACTS = 4;
32
+ /*
33
+ * ServerMonitor/CheckOnlineStatus judges an agent that has not reported for
34
+ * three minutes, counting from creation when it never has.
35
+ */
36
+ const AGENT_MISSING_MINUTES = 3;
37
+ const PAUSED_EXPLANATION = {
38
+ disabled: "No checks run while monitoring is off, so the status stays at the last one recorded.",
39
+ incident: "Checks resume when the incident that paused this monitor is resolved.",
40
+ maintenance: "Checks resume automatically when the maintenance event ends.",
41
+ };
42
+ const MANUAL_EXPLANATION = "Manual monitor: OneUptime runs no checks. The status changes when someone sets it, or when an incident or scheduled maintenance event changes it.";
43
+ /*
44
+ * What an empty evaluation log says once the monitor is older than the
45
+ * log keeps rows (MONITOR_LOG_MINIMUM_RETENTION_SECONDS): not "never".
46
+ */
47
+ const NOT_EVALUATED_IN_LOG_TEXT = "Not evaluated in the last day";
48
+ const pluralize = (count, singular, plural) => {
49
+ return `${count} ${count === 1 ? singular : plural}`;
50
+ };
51
+ const lowerFirst = (text) => {
52
+ return text ? text.charAt(0).toLowerCase() + text.slice(1) : text;
53
+ };
54
+ const secondsSince = (now, then) => {
55
+ return Math.max(0, Math.floor((now.getTime() - then.getTime()) / 1000));
56
+ };
57
+ const HOUR_MS = 3600 * 1000;
58
+ const DAY_MS = 24 * HOUR_MS;
59
+ const DAY_SECONDS = 24 * 3600;
60
+ /*
61
+ * The evaluation log (MonitorLog) keeps each row for at least
62
+ * MonitorLogUtil.DEFAULT_RETENTION_DAYS, one day, unless an admin has
63
+ * raised GlobalConfig.monitorLogRetentionInDays. So an empty log proves
64
+ * only that nothing was evaluated in the last day and, for a monitor
65
+ * younger than that, that nothing ever was. The copy that says "in the
66
+ * last day" follows this.
67
+ */
68
+ export const MONITOR_LOG_MINIMUM_RETENTION_SECONDS = DAY_SECONDS;
69
+ /*
70
+ * A row can also outlive that by up to about a day: the TTL ("retentionDate
71
+ * DELETE", ttl_only_drop_parts) drops a whole daily partition
72
+ * (toYYYYMMDD(time)) only once its newest row has expired too. So a run
73
+ * between two days and one day ago may or may not still be in the log, and
74
+ * its absence proves nothing. An empty log is therefore judged from one day
75
+ * ago, the guaranteed retention: a schedule that was due after that point
76
+ * would still have its row, so Stale from there really means a missed run.
77
+ * Judging from the two-day maximum instead flagged gapped schedules
78
+ * (weekday business hours) as overdue every weekend.
79
+ */
80
+ // "3 hours", or "20 minutes" under an hour. Never "0 minutes".
81
+ const describeUnderADay = (ms) => {
82
+ const hours = Math.floor(ms / HOUR_MS);
83
+ if (hours >= 1) {
84
+ return pluralize(hours, "hour", "hours");
85
+ }
86
+ return pluralize(Math.max(1, Math.floor(ms / 60000)), "minute", "minutes");
87
+ };
88
+ /*
89
+ * Calendar days from `earlier` to `later` in the zone dates are printed in.
90
+ * Only called for times at least a day apart, so it is at least 1 (a
91
+ * 25-hour daylight-saving day could otherwise make it 0).
92
+ */
93
+ const getCalendarDaysBetween = (earlier, later) => {
94
+ const timezone = OneUptimeDate.getCurrentTimezone();
95
+ const days = Math.round((OneUptimeDate.getStartOfDay(later, timezone).getTime() -
96
+ OneUptimeDate.getStartOfDay(earlier, timezone).getTime()) /
97
+ DAY_MS);
98
+ return Math.max(1, days);
99
+ };
100
+ const isFutureOf = (date, now) => {
101
+ return Boolean(date && date.getTime() > now.getTime());
102
+ };
103
+ export default class MonitorOverviewPresentationUtil {
104
+ static build(input) {
105
+ const context = MonitorOverviewPresentationUtil.getContext(input);
106
+ const hero = MonitorOverviewPresentationUtil.getHero(input, context);
107
+ return Object.assign(Object.assign({ family: context.family, runState: context.runState }, hero), { pulse: MonitorOverviewPresentationUtil.getPulse(input, context), freshness: context.freshness.freshness, isNeverReported: MonitorOverviewPresentationUtil.isNeverReported(context), facts: MonitorOverviewPresentationUtil.getFacts(input, context), target: MonitorOverviewTargetUtil.getTarget({
108
+ monitorType: input.monitorType,
109
+ monitorSteps: input.monitorSteps,
110
+ serverHostname: input.agent.hostname,
111
+ }), sections: MonitorOverviewPresentationUtil.getSections(context) });
112
+ }
113
+ /*
114
+ * First match wins: Manual, Paused, NotChecking (probe checks only),
115
+ * NotConfigured, AwaitingFirstData, Overdue, Running.
116
+ */
117
+ static getRunState(input) {
118
+ return MonitorOverviewPresentationUtil.getContext(input).runState;
119
+ }
120
+ /*
121
+ * What the uptime tiles must add about time the status timeline counts
122
+ * but nothing measured: its open row keeps the last status while
123
+ * monitoring is paused, while nothing checks, and before the first check
124
+ * completes. A manual monitor has no checks to pause, so it never gets
125
+ * one.
126
+ */
127
+ static getUptimeCaveat(presentation) {
128
+ if (presentation.family === MonitorOverviewFamily.Manual) {
129
+ return null;
130
+ }
131
+ switch (presentation.runState) {
132
+ case MonitorOverviewRunState.Paused:
133
+ return "paused";
134
+ case MonitorOverviewRunState.NotChecking:
135
+ case MonitorOverviewRunState.NotConfigured:
136
+ return "not-checking";
137
+ case MonitorOverviewRunState.Overdue:
138
+ return presentation.isNeverReported ? "no-results" : null;
139
+ default:
140
+ return null;
141
+ }
142
+ }
143
+ static getStatusTone(status) {
144
+ if (!status) {
145
+ return "neutral";
146
+ }
147
+ // Offline first: a status flagged both ways must never read as good.
148
+ if (status.isOfflineState) {
149
+ return "danger";
150
+ }
151
+ if (status.isOperationalState) {
152
+ return "good";
153
+ }
154
+ return "warning";
155
+ }
156
+ static getExpiryFact(data) {
157
+ const label = data.key === "certificate-expiry"
158
+ ? "Certificate expires"
159
+ : "Domain expires";
160
+ const secondary = data.expiresAt
161
+ ? OneUptimeDate.getDateAsUserFriendlyLocalFormattedString(data.expiresAt, true)
162
+ : undefined;
163
+ if (data.isValidCertificate === false) {
164
+ return {
165
+ key: data.key,
166
+ label: label,
167
+ value: "Not valid",
168
+ secondary: secondary,
169
+ tone: "danger",
170
+ };
171
+ }
172
+ if (!data.expiresAt) {
173
+ return { key: data.key, label: label, value: "—", isMuted: true };
174
+ }
175
+ const msLeft = data.expiresAt.getTime() - data.now.getTime();
176
+ /*
177
+ * Within a day either way, hours say it exactly. Beyond that, days are
178
+ * counted on the calendar of the zone the date below is printed in, so
179
+ * "in 2 days" and the printed date agree: 36 hours from noon is two
180
+ * calendar days away, not the one day a floor would give.
181
+ */
182
+ if (msLeft < 0) {
183
+ return {
184
+ key: data.key,
185
+ label: label,
186
+ value: -msLeft < DAY_MS
187
+ ? `Expired ${describeUnderADay(-msLeft)} ago`
188
+ : `Expired ${pluralize(getCalendarDaysBetween(data.expiresAt, data.now), "day", "days")} ago`,
189
+ secondary: secondary,
190
+ tone: "danger",
191
+ };
192
+ }
193
+ if (msLeft < DAY_MS) {
194
+ return {
195
+ key: data.key,
196
+ label: label,
197
+ value: `Expires in ${describeUnderADay(msLeft)}`,
198
+ secondary: secondary,
199
+ tone: "danger",
200
+ };
201
+ }
202
+ // The tone keeps counting whole days left, as it always has.
203
+ const wholeDays = Math.floor(msLeft / DAY_MS);
204
+ let tone = "neutral";
205
+ if (wholeDays <= 7) {
206
+ tone = "danger";
207
+ }
208
+ else if (wholeDays <= 30) {
209
+ tone = "warning";
210
+ }
211
+ return {
212
+ key: data.key,
213
+ label: label,
214
+ value: `in ${pluralize(getCalendarDaysBetween(data.now, data.expiresAt), "day", "days")}`,
215
+ secondary: secondary,
216
+ tone: tone,
217
+ };
218
+ }
219
+ static getContext(input) {
220
+ const layout = MonitorOverviewFamilyUtil.getLayout(input.monitorType);
221
+ const family = layout.family;
222
+ const cadenceSeconds = MonitorCheckScheduleUtil.resolveCadenceSeconds({
223
+ monitoringInterval: input.monitoringInterval,
224
+ from: input.now,
225
+ });
226
+ const intervalText = MonitorCheckScheduleUtil.describeInterval(input.monitoringInterval);
227
+ const stepCount = MonitorOverviewCriteriaUtil.getStepCount(input.monitorSteps);
228
+ const networkDeviceId = MonitorOverviewCriteriaUtil.getNetworkDeviceId(input.monitorSteps);
229
+ const isPaused = input.pause.isDisabled ||
230
+ input.pause.byManualIncident ||
231
+ input.pause.byScheduledMaintenance;
232
+ const isProbeCheck = family === MonitorOverviewFamily.ProbeCheck;
233
+ /*
234
+ * The server keeps these flags on the Monitor row; the probe rows, when
235
+ * they could be read, say the same thing sooner.
236
+ */
237
+ const isNoProbeEnabled = isProbeCheck &&
238
+ (input.probeFlags.isNoProbeEnabled ||
239
+ (input.probes !== null && input.probes.enabledCount === 0));
240
+ const isAllProbesDisconnected = isProbeCheck &&
241
+ (input.probeFlags.isAllProbesDisconnected ||
242
+ (input.probes !== null &&
243
+ input.probes.enabledCount > 0 &&
244
+ input.probes.disconnectedCount === input.probes.enabledCount));
245
+ const isNotChecking = isNoProbeEnabled || isAllProbesDisconnected;
246
+ const evaluationStatus = MonitorOverviewPresentationUtil.getEvaluationStatus(input);
247
+ const evaluationLog = MonitorOverviewPresentationUtil.readEvaluationLog({
248
+ input: input,
249
+ family: family,
250
+ evaluationStatus: evaluationStatus,
251
+ });
252
+ const isScheduled = !isPaused && !isNotChecking;
253
+ const telemetry = MonitorOverviewPresentationUtil.isTelemetryFamily(family)
254
+ ? MonitorOverviewPresentationUtil.getTelemetryTiming({
255
+ input: input,
256
+ evaluationLog: evaluationLog,
257
+ cadenceSeconds: cadenceSeconds,
258
+ isScheduled: isScheduled,
259
+ })
260
+ : null;
261
+ const freshness = telemetry
262
+ ? telemetry.freshness
263
+ : MonitorOverviewPresentationUtil.getFreshness({
264
+ input: input,
265
+ family: family,
266
+ cadenceSeconds: cadenceSeconds,
267
+ isScheduled: isScheduled,
268
+ });
269
+ let runState = MonitorOverviewRunState.Running;
270
+ if (family === MonitorOverviewFamily.Manual) {
271
+ runState = MonitorOverviewRunState.Manual;
272
+ }
273
+ else if (isPaused) {
274
+ runState = MonitorOverviewRunState.Paused;
275
+ }
276
+ else if (isNotChecking) {
277
+ runState = MonitorOverviewRunState.NotChecking;
278
+ }
279
+ else if (stepCount === 0 ||
280
+ (family === MonitorOverviewFamily.NetworkDevice && !networkDeviceId)) {
281
+ runState = MonitorOverviewRunState.NotConfigured;
282
+ }
283
+ else if (MonitorOverviewPresentationUtil.isAwaitingFirstData({
284
+ input: input,
285
+ family: family,
286
+ freshness: freshness.freshness,
287
+ evaluationLog: evaluationLog,
288
+ telemetry: telemetry,
289
+ })) {
290
+ runState = MonitorOverviewRunState.AwaitingFirstData;
291
+ }
292
+ else if (freshness.freshness === MonitorCheckFreshness.Stale) {
293
+ runState = MonitorOverviewRunState.Overdue;
294
+ }
295
+ return {
296
+ family: family,
297
+ layout: layout,
298
+ cadenceSeconds: cadenceSeconds,
299
+ intervalText: intervalText,
300
+ intervalPhrase: lowerFirst(intervalText),
301
+ stepCount: stepCount,
302
+ networkDeviceId: networkDeviceId,
303
+ isPaused: isPaused,
304
+ isNoProbeEnabled: isNoProbeEnabled,
305
+ isAllProbesDisconnected: isAllProbesDisconnected,
306
+ isNotChecking: isNotChecking,
307
+ evaluationStatus: evaluationStatus,
308
+ evaluationLog: evaluationLog,
309
+ telemetry: telemetry,
310
+ freshness: freshness,
311
+ runState: runState,
312
+ hasPushVerdict: runState === MonitorOverviewRunState.AwaitingFirstData &&
313
+ MonitorOverviewPresentationUtil.hasPushVerdict({
314
+ input: input,
315
+ family: family,
316
+ }),
317
+ };
318
+ }
319
+ /*
320
+ * Without an explicit status (callers from before evaluationStatus), a
321
+ * time means the log was read; its absence says nothing.
322
+ */
323
+ static getEvaluationStatus(input) {
324
+ if (input.evaluationStatus) {
325
+ return input.evaluationStatus;
326
+ }
327
+ return input.latestEvaluationAt ? "loaded" : null;
328
+ }
329
+ static isTelemetryFamily(family) {
330
+ return (family === MonitorOverviewFamily.TelemetrySignal ||
331
+ family === MonitorOverviewFamily.Infrastructure);
332
+ }
333
+ /*
334
+ * An empty log means "never evaluated" only while it would still hold
335
+ * every evaluation the monitor could have had. Past that, its rows may
336
+ * simply have expired.
337
+ */
338
+ static readEvaluationLog(data) {
339
+ const input = data.input;
340
+ if (data.evaluationStatus !== "loaded") {
341
+ return "unread";
342
+ }
343
+ if (input.latestEvaluationAt) {
344
+ return "evaluated";
345
+ }
346
+ const isYoungerThanLog = !input.createdAt ||
347
+ input.now.getTime() - input.createdAt.getTime() <
348
+ MONITOR_LOG_MINIMUM_RETENTION_SECONDS * 1000;
349
+ /*
350
+ * The telemetry worker stamps a monitor each time it queues an
351
+ * evaluation, so one it has never stamped has never been evaluated,
352
+ * however old it is.
353
+ */
354
+ const isNeverQueued = MonitorOverviewPresentationUtil.isTelemetryFamily(data.family) &&
355
+ !input.telemetry.lastScheduledAt &&
356
+ !input.telemetry.lastEvaluatedAt;
357
+ return isYoungerThanLog || isNeverQueued ? "never" : "expired";
358
+ }
359
+ /*
360
+ * With a row in the evaluation log, its time. Without the log, the
361
+ * scheduler's stamp, named for what it is. With a log that is empty only
362
+ * because its rows expired, the log still says nothing was evaluated in
363
+ * the last day: that is overdue when the schedule should have left a row
364
+ * there, and otherwise (a weekly schedule, say) expected, so the stamp is
365
+ * all there is, as without the log.
366
+ */
367
+ static getTelemetryTiming(data) {
368
+ const input = data.input;
369
+ const scheduledAt = input.telemetry.lastScheduledAt || input.telemetry.lastEvaluatedAt;
370
+ const judge = (lastResultAt, createdAt) => {
371
+ return MonitorCheckScheduleUtil.getCheckFreshness({
372
+ isScheduled: data.isScheduled,
373
+ isKnown: true,
374
+ lastResultAt: lastResultAt,
375
+ nextCheckAt: input.telemetry.nextEvaluationAt,
376
+ cadenceSeconds: data.cadenceSeconds,
377
+ createdAt: createdAt,
378
+ now: input.now,
379
+ monitoringInterval: input.monitoringInterval,
380
+ });
381
+ };
382
+ const fromScheduler = () => {
383
+ return {
384
+ lastAt: scheduledAt,
385
+ isScheduledTime: true,
386
+ isMissingFromLog: false,
387
+ freshness: judge(scheduledAt, input.createdAt),
388
+ };
389
+ };
390
+ switch (data.evaluationLog) {
391
+ case "evaluated":
392
+ return {
393
+ lastAt: input.latestEvaluationAt,
394
+ isScheduledTime: false,
395
+ isMissingFromLog: false,
396
+ freshness: judge(input.latestEvaluationAt, input.createdAt),
397
+ };
398
+ case "never":
399
+ return {
400
+ lastAt: undefined,
401
+ isScheduledTime: false,
402
+ isMissingFromLog: false,
403
+ freshness: judge(undefined, input.createdAt),
404
+ };
405
+ case "expired": {
406
+ // The log only reads as expired for a monitor with a creation time.
407
+ const createdAt = input.createdAt || input.now;
408
+ const horizonStart = new Date(Math.max(createdAt.getTime(), input.now.getTime() - MONITOR_LOG_MINIMUM_RETENTION_SECONDS * 1000));
409
+ if (judge(undefined, horizonStart).freshness !==
410
+ MonitorCheckFreshness.Stale) {
411
+ return fromScheduler();
412
+ }
413
+ /*
414
+ * How long ago the last evaluation ran, and so how late the next
415
+ * one is, is unknown: the log only says it was before the last day.
416
+ */
417
+ return {
418
+ lastAt: undefined,
419
+ isScheduledTime: false,
420
+ isMissingFromLog: true,
421
+ freshness: {
422
+ freshness: MonitorCheckFreshness.Stale,
423
+ overdueSeconds: null,
424
+ resultAgeSeconds: null,
425
+ },
426
+ };
427
+ }
428
+ default:
429
+ return fromScheduler();
430
+ }
431
+ }
432
+ /*
433
+ * A push monitor's missing-signal check counts from creation when nothing
434
+ * has arrived yet, so the server judges it once this window has passed.
435
+ * Null when its criteria have no such check.
436
+ */
437
+ static getPushMissingMinutes(data) {
438
+ const monitorSteps = data.input.monitorSteps;
439
+ if (data.family === MonitorOverviewFamily.Agent) {
440
+ return MonitorOverviewCriteriaUtil.hasFilterOn({
441
+ monitorSteps: monitorSteps,
442
+ checkOn: CheckOn.IsOnline,
443
+ })
444
+ ? AGENT_MISSING_MINUTES
445
+ : null;
446
+ }
447
+ if (data.family !== MonitorOverviewFamily.Heartbeat) {
448
+ return null;
449
+ }
450
+ return MonitorOverviewCriteriaUtil.getMissingSignalMinutes({
451
+ monitorSteps: monitorSteps,
452
+ checkOn: data.input.monitorType === MonitorType.IncomingEmail
453
+ ? CheckOn.EmailReceivedAt
454
+ : CheckOn.IncomingRequest,
455
+ });
456
+ }
457
+ static hasPushVerdict(data) {
458
+ if (data.family !== MonitorOverviewFamily.Heartbeat &&
459
+ data.family !== MonitorOverviewFamily.Agent) {
460
+ return false;
461
+ }
462
+ if (MonitorOverviewPresentationUtil.isJudgedStatus(data.input)) {
463
+ return true;
464
+ }
465
+ const minutes = MonitorOverviewPresentationUtil.getPushMissingMinutes(data);
466
+ const createdAt = data.input.createdAt;
467
+ return (minutes !== null &&
468
+ createdAt !== undefined &&
469
+ data.input.now.getTime() - createdAt.getTime() > minutes * 60 * 1000);
470
+ }
471
+ /*
472
+ * A status that is not operational was set by something: for a push
473
+ * monitor that never reported, the server's missing-signal check.
474
+ */
475
+ static isJudgedStatus(input) {
476
+ const tone = MonitorOverviewPresentationUtil.getStatusTone(input.currentStatus);
477
+ return tone === "danger" || tone === "warning";
478
+ }
479
+ /*
480
+ * Freshness is only judged for the families that run on a schedule we can
481
+ * see: probe checks here, and the worker-evaluated telemetry and
482
+ * infrastructure monitors in getTelemetryTiming. Push-based monitors
483
+ * decide "missing" in their own criteria.
484
+ */
485
+ static getFreshness(data) {
486
+ var _a, _b, _c;
487
+ const input = data.input;
488
+ if (data.family === MonitorOverviewFamily.ProbeCheck) {
489
+ return MonitorCheckScheduleUtil.getCheckFreshness({
490
+ isScheduled: data.isScheduled,
491
+ isKnown: input.probes !== null,
492
+ lastResultAt: (_a = input.probes) === null || _a === void 0 ? void 0 : _a.lastResultAt,
493
+ /*
494
+ * Behind schedule only when every probe that is checking is: a
495
+ * summary from before latestNextCheckAt existed has only the
496
+ * earliest.
497
+ */
498
+ nextCheckAt: ((_b = input.probes) === null || _b === void 0 ? void 0 : _b.latestNextCheckAt) || ((_c = input.probes) === null || _c === void 0 ? void 0 : _c.nextCheckAt),
499
+ cadenceSeconds: data.cadenceSeconds,
500
+ createdAt: input.createdAt,
501
+ now: input.now,
502
+ monitoringInterval: input.monitoringInterval,
503
+ });
504
+ }
505
+ return MonitorCheckScheduleUtil.getCheckFreshness({
506
+ isScheduled: false,
507
+ isKnown: true,
508
+ lastResultAt: undefined,
509
+ nextCheckAt: undefined,
510
+ cadenceSeconds: data.cadenceSeconds,
511
+ createdAt: input.createdAt,
512
+ now: input.now,
513
+ });
514
+ }
515
+ static isAwaitingFirstData(data) {
516
+ var _a;
517
+ const input = data.input;
518
+ switch (data.family) {
519
+ case MonitorOverviewFamily.ProbeCheck:
520
+ return (input.probes !== null &&
521
+ input.probes.enabledCount > 0 &&
522
+ data.freshness === MonitorCheckFreshness.AwaitingFirstResult);
523
+ case MonitorOverviewFamily.Heartbeat:
524
+ return input.monitorType === MonitorType.IncomingEmail
525
+ ? !input.email.lastReceivedAt
526
+ : !input.heartbeat.lastReceivedAt;
527
+ case MonitorOverviewFamily.Agent:
528
+ return !input.agent.lastReportAt;
529
+ case MonitorOverviewFamily.TelemetrySignal:
530
+ case MonitorOverviewFamily.Infrastructure:
531
+ /*
532
+ * Without the evaluation log, the scheduler's stamp is all there
533
+ * is. With it, "waiting" needs a log that says nothing was ever
534
+ * evaluated, and, like a probe check, lasts only while the monitor
535
+ * is young: past that, no evaluation is overdue (6b).
536
+ */
537
+ if (data.evaluationLog === "unread") {
538
+ return !((_a = data.telemetry) === null || _a === void 0 ? void 0 : _a.lastAt);
539
+ }
540
+ return (data.evaluationLog === "never" &&
541
+ data.freshness === MonitorCheckFreshness.AwaitingFirstResult);
542
+ case MonitorOverviewFamily.NetworkDevice:
543
+ /*
544
+ * A device is evaluated on its polls and traps, which leave no
545
+ * trace on the monitor row: only an empty log that would still hold
546
+ * every evaluation says none has happened yet. For an older
547
+ * monitor, it says only that none happened in the last day.
548
+ */
549
+ return data.evaluationLog === "never";
550
+ default:
551
+ // Manual monitors are never evaluated.
552
+ return false;
553
+ }
554
+ }
555
+ static getHero(input, context) {
556
+ const status = input.currentStatus;
557
+ const statusTone = MonitorOverviewPresentationUtil.getStatusTone(status);
558
+ const lastKnownStatus = status
559
+ ? `Last recorded status: ${status.name}`
560
+ : undefined;
561
+ // The badge and headline for the states that lead with the status.
562
+ const statusBadge = status
563
+ ? {
564
+ text: status.name,
565
+ tone: statusTone,
566
+ statusColor: MonitorStatusHistoryUtil.normalizeColor(status.color),
567
+ }
568
+ : { text: "Unknown status", tone: "neutral" };
569
+ const statusHeadline = status
570
+ ? { text: status.name, since: input.statusSince }
571
+ : { text: "No status recorded yet" };
572
+ switch (context.runState) {
573
+ case MonitorOverviewRunState.Manual:
574
+ return {
575
+ tone: statusTone,
576
+ badge: statusBadge,
577
+ secondaryBadges: [{ text: "Manual", tone: "neutral" }],
578
+ headline: statusHeadline,
579
+ explanation: MANUAL_EXPLANATION,
580
+ callToAction: { text: "Change status", linkKey: "statusTimeline" },
581
+ };
582
+ case MonitorOverviewRunState.Paused: {
583
+ const secondaryBadges = [];
584
+ /*
585
+ * Pausing does not fix a probe problem, and the problem is still
586
+ * there when monitoring resumes, so it stays visible.
587
+ */
588
+ if (context.isNoProbeEnabled) {
589
+ secondaryBadges.push({ text: "Probes Not Enabled", tone: "danger" });
590
+ }
591
+ else if (context.isAllProbesDisconnected) {
592
+ secondaryBadges.push({
593
+ text: "Probes Disconnected",
594
+ tone: "danger",
595
+ });
596
+ }
597
+ if (input.pause.isDisabled) {
598
+ return {
599
+ tone: "neutral",
600
+ badge: { text: "Disabled", tone: "neutral" },
601
+ secondaryBadges: secondaryBadges,
602
+ headline: { text: "Monitoring is turned off" },
603
+ explanation: PAUSED_EXPLANATION.disabled,
604
+ lastKnownStatus: lastKnownStatus,
605
+ callToAction: { text: "Open settings", linkKey: "settings" },
606
+ };
607
+ }
608
+ if (input.pause.byManualIncident) {
609
+ return {
610
+ tone: "neutral",
611
+ badge: { text: "Paused", tone: "neutral" },
612
+ secondaryBadges: secondaryBadges,
613
+ headline: { text: "Monitoring is paused by an incident" },
614
+ explanation: PAUSED_EXPLANATION.incident,
615
+ lastKnownStatus: lastKnownStatus,
616
+ callToAction: { text: "View incidents", linkKey: "incidents" },
617
+ };
618
+ }
619
+ return {
620
+ tone: "neutral",
621
+ badge: { text: "Paused", tone: "neutral" },
622
+ secondaryBadges: secondaryBadges,
623
+ headline: { text: "Monitoring is paused for scheduled maintenance" },
624
+ explanation: PAUSED_EXPLANATION.maintenance,
625
+ lastKnownStatus: lastKnownStatus,
626
+ };
627
+ }
628
+ case MonitorOverviewRunState.NotChecking:
629
+ return MonitorOverviewPresentationUtil.getNotCheckingHero({
630
+ input: input,
631
+ context: context,
632
+ lastKnownStatus: lastKnownStatus,
633
+ });
634
+ case MonitorOverviewRunState.NotConfigured: {
635
+ const isMissingDevice = context.family === MonitorOverviewFamily.NetworkDevice &&
636
+ context.stepCount > 0;
637
+ return {
638
+ tone: "neutral",
639
+ badge: { text: "Not set up", tone: "neutral" },
640
+ secondaryBadges: [],
641
+ headline: {
642
+ text: isMissingDevice
643
+ ? "No network device is selected"
644
+ : "This monitor has no criteria yet",
645
+ },
646
+ explanation: isMissingDevice
647
+ ? "Choose the device this monitor alerts on."
648
+ : "Add criteria to tell this monitor what to check.",
649
+ callToAction: {
650
+ text: isMissingDevice ? "Choose a device" : "Set up criteria",
651
+ linkKey: "criteria",
652
+ },
653
+ };
654
+ }
655
+ case MonitorOverviewRunState.AwaitingFirstData:
656
+ return MonitorOverviewPresentationUtil.getAwaitingHero({
657
+ input: input,
658
+ context: context,
659
+ lastKnownStatus: lastKnownStatus,
660
+ });
661
+ case MonitorOverviewRunState.Overdue: {
662
+ const isProbeCheck = context.family === MonitorOverviewFamily.ProbeCheck;
663
+ /*
664
+ * Nothing has ever been measured (6b), so the stored status is only
665
+ * the default the monitor was created with: it is not the headline,
666
+ * and it has not "held" for any length of time.
667
+ */
668
+ const isNeverReported = MonitorOverviewPresentationUtil.isNeverReported(context);
669
+ return {
670
+ // A late check cannot vouch for "good"; danger stays danger.
671
+ tone: statusTone === "danger" ? "danger" : "warning",
672
+ badge: isNeverReported
673
+ ? { text: "No results yet", tone: "warning" }
674
+ : statusBadge,
675
+ secondaryBadges: [{ text: "Checks overdue", tone: "warning" }],
676
+ headline: isNeverReported
677
+ ? {
678
+ text: isProbeCheck
679
+ ? "No check has completed yet"
680
+ : "No evaluation has completed yet",
681
+ }
682
+ : statusHeadline,
683
+ explanation: MonitorOverviewPresentationUtil.getOverdueExplanation({
684
+ input: input,
685
+ context: context,
686
+ }),
687
+ lastKnownStatus: isNeverReported ? lastKnownStatus : undefined,
688
+ callToAction: isProbeCheck
689
+ ? { text: "Check probes", linkKey: "probes" }
690
+ : undefined,
691
+ };
692
+ }
693
+ default: {
694
+ const running = {
695
+ tone: statusTone,
696
+ badge: statusBadge,
697
+ secondaryBadges: [],
698
+ headline: statusHeadline,
699
+ };
700
+ /*
701
+ * A device's polling interval is not known here, so a quiet log is
702
+ * not called overdue, but the status is not presented as fresh
703
+ * either.
704
+ */
705
+ if (context.family === MonitorOverviewFamily.NetworkDevice &&
706
+ context.evaluationLog === "expired") {
707
+ running.explanation =
708
+ "No poll or trap from this device has been evaluated in the last day, so the status shown is the last one recorded.";
709
+ }
710
+ return running;
711
+ }
712
+ }
713
+ }
714
+ static getNotCheckingHero(data) {
715
+ const probes = data.input.probes;
716
+ if (!data.context.isNoProbeEnabled) {
717
+ return {
718
+ tone: "danger",
719
+ badge: { text: "Probes Disconnected", tone: "danger" },
720
+ secondaryBadges: [],
721
+ headline: { text: "Every probe checking this monitor is disconnected" },
722
+ explanation: "Checks stopped when the probes lost their connection. The status shown is the last one recorded.",
723
+ lastKnownStatus: data.lastKnownStatus,
724
+ callToAction: { text: "Check probes", linkKey: "probes" },
725
+ };
726
+ }
727
+ const badge = {
728
+ text: "Probes Not Enabled",
729
+ tone: "danger",
730
+ };
731
+ // Unknown probes must never be described as "no probes attached".
732
+ if (probes === null) {
733
+ return {
734
+ tone: "danger",
735
+ badge: badge,
736
+ secondaryBadges: [],
737
+ headline: { text: "Nothing is checking this monitor" },
738
+ explanation: "No probe is enabled for this monitor, so no checks run.",
739
+ lastKnownStatus: data.lastKnownStatus,
740
+ callToAction: { text: "Manage probes", linkKey: "probes" },
741
+ };
742
+ }
743
+ if (probes.attachedCount === 0) {
744
+ return {
745
+ tone: "danger",
746
+ badge: badge,
747
+ secondaryBadges: [],
748
+ headline: { text: "No probes are attached to this monitor" },
749
+ explanation: "Add a probe to start checking this resource.",
750
+ lastKnownStatus: data.lastKnownStatus,
751
+ callToAction: { text: "Add a probe", linkKey: "probes" },
752
+ };
753
+ }
754
+ return {
755
+ tone: "danger",
756
+ badge: badge,
757
+ secondaryBadges: [],
758
+ headline: { text: "Every probe is turned off for this monitor" },
759
+ explanation: `${probes.attachedCount === 1
760
+ ? "1 probe is"
761
+ : `${probes.attachedCount} probes are`} attached but switched off, so nothing is checking this resource.`,
762
+ lastKnownStatus: data.lastKnownStatus,
763
+ callToAction: { text: "Manage probes", linkKey: "probes" },
764
+ };
765
+ }
766
+ static getAwaitingHero(data) {
767
+ var _a;
768
+ const input = data.input;
769
+ const context = data.context;
770
+ let headline = "Waiting for the first evaluation";
771
+ let explanation = `This monitor is evaluated ${context.intervalPhrase} once saved.`;
772
+ let hasSetup = false;
773
+ // What has never arrived, for a push monitor the server has judged.
774
+ let missingSince = null;
775
+ if (context.family === MonitorOverviewFamily.ProbeCheck) {
776
+ const enabledCount = ((_a = input.probes) === null || _a === void 0 ? void 0 : _a.enabledCount) || 0;
777
+ headline = "Waiting for the first check";
778
+ explanation = `${enabledCount === 1 ? "1 probe checks" : `${enabledCount} probes check`} this ${context.intervalPhrase}. The first result usually arrives within a few minutes.`;
779
+ }
780
+ else if (context.family === MonitorOverviewFamily.NetworkDevice) {
781
+ headline = "Waiting for the first poll";
782
+ explanation =
783
+ "No poll or trap from this device has been evaluated yet. Check that a probe is assigned to poll it.";
784
+ }
785
+ else if (input.monitorType === MonitorType.IncomingRequest) {
786
+ headline = "Waiting for the first heartbeat";
787
+ explanation =
788
+ "Send a GET or POST request to this monitor's heartbeat URL to start tracking it.";
789
+ hasSetup = true;
790
+ missingSince = "No heartbeat has arrived";
791
+ }
792
+ else if (input.monitorType === MonitorType.IncomingEmail) {
793
+ headline = "Waiting for the first email";
794
+ explanation =
795
+ "Send an email to this monitor's address to start tracking it.";
796
+ hasSetup = true;
797
+ missingSince = "No email has arrived";
798
+ }
799
+ else if (context.family === MonitorOverviewFamily.Agent) {
800
+ headline = "Waiting for the agent to report";
801
+ explanation = "Install the server agent to start sending reports.";
802
+ hasSetup = true;
803
+ missingSince = "The agent has not reported";
804
+ }
805
+ const callToAction = hasSetup
806
+ ? { text: "Setup instructions", linkKey: "documentation" }
807
+ : undefined;
808
+ const status = input.currentStatus;
809
+ /*
810
+ * The server judges a push monitor that never reported as if its last
811
+ * signal arrived at creation, so it can be Offline, with an incident
812
+ * open, while the page is still "waiting". Lead with that verdict's
813
+ * tone and keep the setup steps: sending the first signal is still the
814
+ * fix.
815
+ */
816
+ if (missingSince !== null &&
817
+ status &&
818
+ MonitorOverviewPresentationUtil.isJudgedStatus(input)) {
819
+ const statusTone = MonitorOverviewPresentationUtil.getStatusTone(status);
820
+ return {
821
+ tone: statusTone,
822
+ badge: { text: "Waiting for data", tone: "info" },
823
+ secondaryBadges: [{ text: status.name, tone: statusTone }],
824
+ headline: {
825
+ text: input.createdAt
826
+ ? `${missingSince} since this monitor was created ${formatDurationCompact(secondsSince(input.now, input.createdAt))} ago`
827
+ : headline,
828
+ },
829
+ explanation: explanation,
830
+ callToAction: callToAction,
831
+ };
832
+ }
833
+ return {
834
+ tone: "info",
835
+ badge: { text: "Waiting for data", tone: "info" },
836
+ secondaryBadges: [],
837
+ headline: { text: headline },
838
+ explanation: explanation,
839
+ lastKnownStatus: data.lastKnownStatus,
840
+ callToAction: callToAction,
841
+ };
842
+ }
843
+ static isNeverReported(context) {
844
+ var _a;
845
+ return (context.runState === MonitorOverviewRunState.Overdue &&
846
+ context.freshness.resultAgeSeconds === null &&
847
+ !((_a = context.telemetry) === null || _a === void 0 ? void 0 : _a.isMissingFromLog));
848
+ }
849
+ /*
850
+ * "No result for 12m" states how long it has been since the last result -
851
+ * the same age the pulse's "Last checked" shows - so the two never
852
+ * disagree. The pulse's "Overdue by" line carries how late that is.
853
+ */
854
+ static getOverdueExplanation(data) {
855
+ var _a;
856
+ const input = data.input;
857
+ const context = data.context;
858
+ const isProbeCheck = context.family === MonitorOverviewFamily.ProbeCheck;
859
+ const resultAgeSeconds = context.freshness.resultAgeSeconds;
860
+ if ((_a = context.telemetry) === null || _a === void 0 ? void 0 : _a.isMissingFromLog) {
861
+ return `No evaluation recorded in the last day, but this monitor is evaluated ${context.intervalPhrase}.`;
862
+ }
863
+ if (resultAgeSeconds === null) {
864
+ const createdAgo = input.createdAt
865
+ ? formatDurationCompact(secondsSince(input.now, input.createdAt))
866
+ : formatDurationCompact(context.freshness.overdueSeconds || 0);
867
+ return isProbeCheck
868
+ ? `No check result has arrived since this monitor was created ${createdAgo} ago.`
869
+ : `No evaluation has run since this monitor was created ${createdAgo} ago.`;
870
+ }
871
+ const age = formatDurationCompact(resultAgeSeconds);
872
+ return isProbeCheck
873
+ ? `No result for ${age}, but this monitor checks ${context.intervalPhrase}. A probe may be overloaded or offline.`
874
+ : `No evaluation for ${age}, but this monitor is evaluated ${context.intervalPhrase}.`;
875
+ }
876
+ static getPulse(input, context) {
877
+ var _a, _b, _c, _d;
878
+ const isScheduled = context.runState !== MonitorOverviewRunState.Paused &&
879
+ context.runState !== MonitorOverviewRunState.NotChecking &&
880
+ context.runState !== MonitorOverviewRunState.NotConfigured;
881
+ const overdueSeconds = context.runState === MonitorOverviewRunState.Overdue &&
882
+ context.freshness.overdueSeconds !== null
883
+ ? context.freshness.overdueSeconds
884
+ : undefined;
885
+ switch (context.family) {
886
+ case MonitorOverviewFamily.ProbeCheck: {
887
+ const nextAt = (_a = input.probes) === null || _a === void 0 ? void 0 : _a.nextCheckAt;
888
+ return {
889
+ label: "Last checked",
890
+ at: (_b = input.probes) === null || _b === void 0 ? void 0 : _b.lastResultAt,
891
+ emptyText: "Not checked yet",
892
+ // A paused or unchecked monitor has no cadence to promise.
893
+ cadenceText: isScheduled ? context.intervalText : undefined,
894
+ nextAt: isScheduled && isFutureOf(nextAt, input.now) ? nextAt : undefined,
895
+ overdueSeconds: overdueSeconds,
896
+ isUnavailable: input.probes === null,
897
+ };
898
+ }
899
+ case MonitorOverviewFamily.Heartbeat: {
900
+ const isEmail = input.monitorType === MonitorType.IncomingEmail;
901
+ /*
902
+ * No cadence line: the missing-request check time is already the
903
+ * "Last missing-request check" fact, and a push-based monitor has no
904
+ * schedule of its own to promise.
905
+ */
906
+ return {
907
+ label: isEmail ? "Last email" : "Last request",
908
+ at: isEmail
909
+ ? input.email.lastReceivedAt
910
+ : input.heartbeat.lastReceivedAt,
911
+ emptyText: isEmail ? "No email yet" : "No request yet",
912
+ isUnavailable: false,
913
+ };
914
+ }
915
+ case MonitorOverviewFamily.Agent:
916
+ return {
917
+ label: "Last report",
918
+ at: input.agent.lastReportAt,
919
+ emptyText: "No report yet",
920
+ isUnavailable: false,
921
+ };
922
+ case MonitorOverviewFamily.TelemetrySignal:
923
+ case MonitorOverviewFamily.Infrastructure: {
924
+ const nextAt = input.telemetry.nextEvaluationAt;
925
+ /*
926
+ * Without a time from the evaluation log, the only time is the
927
+ * worker's stamp, which it writes when it queues an evaluation: it
928
+ * is named for what it is.
929
+ */
930
+ const isScheduledTime = Boolean((_c = context.telemetry) === null || _c === void 0 ? void 0 : _c.isScheduledTime);
931
+ let emptyText = "Not evaluated yet";
932
+ if (isScheduledTime) {
933
+ emptyText = "Not scheduled yet";
934
+ }
935
+ else if (context.evaluationLog === "expired") {
936
+ emptyText = NOT_EVALUATED_IN_LOG_TEXT;
937
+ }
938
+ return {
939
+ label: isScheduledTime ? "Last scheduled" : "Last evaluated",
940
+ at: (_d = context.telemetry) === null || _d === void 0 ? void 0 : _d.lastAt,
941
+ emptyText: emptyText,
942
+ cadenceText: isScheduled ? context.intervalText : undefined,
943
+ nextAt: isScheduled && isFutureOf(nextAt, input.now) ? nextAt : undefined,
944
+ overdueSeconds: overdueSeconds,
945
+ isUnavailable: false,
946
+ };
947
+ }
948
+ case MonitorOverviewFamily.NetworkDevice: {
949
+ let emptyText = "Not evaluated yet";
950
+ if (context.evaluationStatus === "loading") {
951
+ emptyText = "Loading…";
952
+ }
953
+ else if (context.evaluationLog === "expired") {
954
+ emptyText = NOT_EVALUATED_IN_LOG_TEXT;
955
+ }
956
+ // The time only comes from the evaluation log, so it follows its read.
957
+ return {
958
+ label: "Last evaluated",
959
+ at: context.evaluationStatus === "loaded"
960
+ ? input.latestEvaluationAt
961
+ : undefined,
962
+ emptyText: emptyText,
963
+ isUnavailable: context.evaluationStatus === "error" ||
964
+ context.evaluationStatus === "forbidden",
965
+ };
966
+ }
967
+ default:
968
+ return {
969
+ label: null,
970
+ emptyText: "No automated checks",
971
+ isUnavailable: false,
972
+ };
973
+ }
974
+ }
975
+ static getFacts(input, context) {
976
+ var _a, _b, _c;
977
+ const facts = [];
978
+ switch (context.family) {
979
+ case MonitorOverviewFamily.ProbeCheck:
980
+ facts.push(MonitorOverviewPresentationUtil.getLatestResultFact(input));
981
+ if (input.monitorType === MonitorType.SSLCertificate) {
982
+ facts.push(input.probes === null
983
+ ? {
984
+ key: "certificate-expiry",
985
+ label: "Certificate expires",
986
+ value: "Unavailable",
987
+ isMuted: true,
988
+ }
989
+ : MonitorOverviewPresentationUtil.getExpiryFact({
990
+ key: "certificate-expiry",
991
+ expiresAt: (_a = input.probes.latestResult) === null || _a === void 0 ? void 0 : _a.sslExpiresAt,
992
+ isValidCertificate: (_b = input.probes.latestResult) === null || _b === void 0 ? void 0 : _b.isValidCertificate,
993
+ now: input.now,
994
+ }));
995
+ }
996
+ if (input.monitorType === MonitorType.Domain) {
997
+ facts.push(input.probes === null
998
+ ? {
999
+ key: "domain-expiry",
1000
+ label: "Domain expires",
1001
+ value: "Unavailable",
1002
+ isMuted: true,
1003
+ }
1004
+ : MonitorOverviewPresentationUtil.getExpiryFact({
1005
+ key: "domain-expiry",
1006
+ expiresAt: (_c = input.probes.latestResult) === null || _c === void 0 ? void 0 : _c.domainExpiresAt,
1007
+ now: input.now,
1008
+ }));
1009
+ }
1010
+ facts.push(MonitorOverviewPresentationUtil.getProbesFact(input, context));
1011
+ break;
1012
+ case MonitorOverviewFamily.Heartbeat: {
1013
+ const isEmail = input.monitorType === MonitorType.IncomingEmail;
1014
+ const minutes = MonitorOverviewCriteriaUtil.getMissingSignalMinutes({
1015
+ monitorSteps: input.monitorSteps,
1016
+ checkOn: isEmail
1017
+ ? CheckOn.EmailReceivedAt
1018
+ : CheckOn.IncomingRequest,
1019
+ });
1020
+ const lastCheckedAt = isEmail
1021
+ ? input.email.lastCheckedAt
1022
+ : input.heartbeat.lastCheckedAt;
1023
+ facts.push(minutes === null
1024
+ ? {
1025
+ key: "missing-window",
1026
+ label: isEmail
1027
+ ? "Missing-email window"
1028
+ : "Missing-request window",
1029
+ value: "Set in Criteria",
1030
+ linkKey: "criteria",
1031
+ }
1032
+ : {
1033
+ key: "missing-window",
1034
+ label: isEmail
1035
+ ? "Missing-email window"
1036
+ : "Missing-request window",
1037
+ value: pluralize(minutes, "minute", "minutes"),
1038
+ secondary: "From this monitor's criteria",
1039
+ });
1040
+ facts.push(lastCheckedAt
1041
+ ? {
1042
+ key: "heartbeat-check",
1043
+ label: isEmail
1044
+ ? "Last missing-email check"
1045
+ : "Last missing-request check",
1046
+ value: "",
1047
+ valueDate: lastCheckedAt,
1048
+ }
1049
+ : {
1050
+ key: "heartbeat-check",
1051
+ label: isEmail
1052
+ ? "Last missing-email check"
1053
+ : "Last missing-request check",
1054
+ value: "Not run yet",
1055
+ isMuted: true,
1056
+ });
1057
+ break;
1058
+ }
1059
+ case MonitorOverviewFamily.Agent: {
1060
+ const hostname = (input.agent.hostname || "").trim();
1061
+ facts.push(hostname
1062
+ ? { key: "host", label: "Host", value: hostname, isMono: true }
1063
+ : {
1064
+ key: "host",
1065
+ label: "Host",
1066
+ value: "Not reported yet",
1067
+ isMuted: true,
1068
+ });
1069
+ facts.push(MonitorOverviewPresentationUtil.getPercentFact({
1070
+ key: "cpu",
1071
+ label: "CPU",
1072
+ percent: input.agent.cpuPercent,
1073
+ }));
1074
+ facts.push(MonitorOverviewPresentationUtil.getPercentFact({
1075
+ key: "memory",
1076
+ label: "Memory",
1077
+ percent: input.agent.memoryPercent,
1078
+ }));
1079
+ break;
1080
+ }
1081
+ case MonitorOverviewFamily.TelemetrySignal:
1082
+ case MonitorOverviewFamily.Infrastructure:
1083
+ facts.push({
1084
+ key: "evaluates",
1085
+ label: "Evaluates",
1086
+ value: context.intervalText,
1087
+ });
1088
+ facts.push({
1089
+ key: "criteria",
1090
+ label: "Criteria",
1091
+ value: pluralize(context.stepCount, "step", "steps"),
1092
+ linkKey: "criteria",
1093
+ });
1094
+ break;
1095
+ case MonitorOverviewFamily.NetworkDevice:
1096
+ facts.push(context.networkDeviceId
1097
+ ? {
1098
+ key: "device",
1099
+ label: "Device",
1100
+ value: "View device",
1101
+ linkKey: "networkDevice",
1102
+ linkId: context.networkDeviceId,
1103
+ }
1104
+ : {
1105
+ key: "device",
1106
+ label: "Device",
1107
+ value: "Not selected",
1108
+ isMuted: true,
1109
+ });
1110
+ facts.push({
1111
+ key: "evaluated",
1112
+ label: "Evaluated",
1113
+ value: "On every poll and matching trap",
1114
+ });
1115
+ break;
1116
+ default:
1117
+ facts.push({
1118
+ key: "checks",
1119
+ label: "Checks",
1120
+ value: "None",
1121
+ secondary: "Status is set by hand or by incidents",
1122
+ });
1123
+ break;
1124
+ }
1125
+ /*
1126
+ * Owners always close the band; the component renders them from the
1127
+ * owners section, so the value here is empty.
1128
+ */
1129
+ return [
1130
+ ...facts.slice(0, MAX_FACTS - 1),
1131
+ { key: "owners", label: "Owners", value: "" },
1132
+ ];
1133
+ }
1134
+ static getLatestResultFact(input) {
1135
+ const base = {
1136
+ key: "latest-result",
1137
+ label: "Latest result",
1138
+ };
1139
+ if (input.probes === null) {
1140
+ return Object.assign(Object.assign({}, base), { value: "Unavailable", isMuted: true });
1141
+ }
1142
+ const result = input.probes.latestResult;
1143
+ if (!result) {
1144
+ return Object.assign(Object.assign({}, base), { value: "—", secondary: "No results yet", isMuted: true });
1145
+ }
1146
+ const isScripted = input.monitorType === MonitorType.SyntheticMonitor ||
1147
+ input.monitorType === MonitorType.CustomJavaScriptCode;
1148
+ const upCount = input.probes.upCount || 0;
1149
+ const downCount = input.probes.downCount || 0;
1150
+ /*
1151
+ * When the probes disagree, the newest single result is just whichever
1152
+ * probe reported last, and would flip between Up and Down from one poll
1153
+ * to the next. Say they disagree instead.
1154
+ */
1155
+ if (upCount > 0 && downCount > 0) {
1156
+ return Object.assign(Object.assign({}, base), { value: isScripted
1157
+ ? `Mixed · ${upCount} passed, ${downCount} failed`
1158
+ : `Mixed · ${upCount} up, ${downCount} down`, tone: "warning" });
1159
+ }
1160
+ let value = "Reported";
1161
+ let tone = "neutral";
1162
+ if (result.isOnline === true) {
1163
+ value = isScripted ? "Passed" : "Up";
1164
+ tone = "good";
1165
+ }
1166
+ else if (result.isOnline === false) {
1167
+ value = isScripted ? "Failed" : "Down";
1168
+ tone = "danger";
1169
+ }
1170
+ if (result.responseTimeInMs !== undefined) {
1171
+ value += ` · ${Math.round(result.responseTimeInMs)} ms`;
1172
+ }
1173
+ if (result.responseCode !== undefined &&
1174
+ (input.monitorType === MonitorType.API ||
1175
+ input.monitorType === MonitorType.Website)) {
1176
+ value += ` · HTTP ${result.responseCode}`;
1177
+ }
1178
+ return Object.assign(Object.assign({}, base), { value: value, secondary: result.isOnline === false && result.failureCause
1179
+ ? result.failureCause
1180
+ : `from ${result.probeName}`, tone: tone });
1181
+ }
1182
+ static getProbesFact(input, context) {
1183
+ const base = { key: "probes", label: "Probes", linkKey: "probes" };
1184
+ if (input.probes === null) {
1185
+ return Object.assign(Object.assign({}, base), { value: "Unavailable", isMuted: true });
1186
+ }
1187
+ const probes = input.probes;
1188
+ const downCount = probes.downCount || 0;
1189
+ const connectionParts = [];
1190
+ if (probes.disabledCount > 0) {
1191
+ connectionParts.push(`${probes.disabledCount} disabled`);
1192
+ }
1193
+ if (probes.disconnectedCount > 0) {
1194
+ connectionParts.push(`${probes.disconnectedCount} disconnected`);
1195
+ }
1196
+ const joinParts = (parts) => {
1197
+ return parts.length > 0 ? parts.join(" · ") : undefined;
1198
+ };
1199
+ if (probes.enabledCount === 0) {
1200
+ return Object.assign(Object.assign({}, base), { value: "None enabled", secondary: joinParts(connectionParts), tone: "danger" });
1201
+ }
1202
+ /*
1203
+ * No probe is meant to report while monitoring is paused, so a
1204
+ * reporting ratio would read as a probe fault that does not exist.
1205
+ */
1206
+ if (context.isPaused) {
1207
+ return Object.assign(Object.assign({}, base), { value: `${probes.enabledCount} enabled`, secondary: joinParts(["Checks paused", ...connectionParts]), tone: "neutral" });
1208
+ }
1209
+ let tone = "neutral";
1210
+ if (probes.reportingCount === 0 || downCount >= probes.reportingCount) {
1211
+ // Nothing reporting, or every probe that reports sees it down.
1212
+ tone = "danger";
1213
+ }
1214
+ else if (downCount > 0 || probes.reportingCount < probes.enabledCount) {
1215
+ tone = "warning";
1216
+ }
1217
+ const isScripted = input.monitorType === MonitorType.SyntheticMonitor ||
1218
+ input.monitorType === MonitorType.CustomJavaScriptCode;
1219
+ // A probe that reports Down is reporting, but it is not fine.
1220
+ const downPart = `${downCount} ${isScripted ? "failing" : "down"}`;
1221
+ return Object.assign(Object.assign({}, base), { value: `${probes.reportingCount} of ${probes.enabledCount} reporting`, secondary: joinParts(downCount > 0 ? [downPart, ...connectionParts] : connectionParts), tone: tone });
1222
+ }
1223
+ static getPercentFact(data) {
1224
+ if (data.percent === undefined || !Number.isFinite(data.percent)) {
1225
+ return { key: data.key, label: data.label, value: "—", isMuted: true };
1226
+ }
1227
+ return {
1228
+ key: data.key,
1229
+ label: data.label,
1230
+ value: `${Math.round(data.percent)}%`,
1231
+ };
1232
+ }
1233
+ static getSections(context) {
1234
+ const isAwaiting = context.runState === MonitorOverviewRunState.AwaitingFirstData;
1235
+ const layout = context.layout;
1236
+ const isPushFamily = context.family === MonitorOverviewFamily.Heartbeat ||
1237
+ context.family === MonitorOverviewFamily.Agent;
1238
+ return {
1239
+ /*
1240
+ * Bars for a monitor that has never reported would all be "No data",
1241
+ * unless the server has already judged it: then its history (and what
1242
+ * is open now) is the point.
1243
+ */
1244
+ showUptime: !isAwaiting || context.hasPushVerdict,
1245
+ setup: isAwaiting ? layout.setupKind : null,
1246
+ connection: isAwaiting ? null : layout.setupKind,
1247
+ summary: {
1248
+ isShown: layout.summaryDescription !== null && !(isAwaiting && isPushFamily),
1249
+ description: layout.summaryDescription || "",
1250
+ },
1251
+ // The connection card only makes sense once something has connected.
1252
+ sideCard: layout.sideCard === "connection" && isAwaiting ? null : layout.sideCard,
1253
+ responseTimeMetric: isAwaiting ? null : layout.responseTimeMetric,
1254
+ telemetryPreview: context.stepCount > 0 ? layout.telemetryPreview : null,
1255
+ stepCount: context.stepCount,
1256
+ };
1257
+ }
1258
+ }
1259
+ //# sourceMappingURL=MonitorOverviewPresentationUtil.js.map