@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.
- package/Models/DatabaseModels/AlertEpisodeMember.ts +8 -1
- package/Models/DatabaseModels/AlertFeed.ts +2 -0
- package/Models/DatabaseModels/AutoRemediationSuggestion.ts +63 -0
- package/Models/DatabaseModels/IncidentAlert.ts +540 -0
- package/Models/DatabaseModels/IncidentEpisodeMember.ts +8 -1
- package/Models/DatabaseModels/IncidentEpisodePublicNote.ts +9 -2
- package/Models/DatabaseModels/IncidentFeed.ts +2 -0
- package/Models/DatabaseModels/IncidentPublicNote.ts +9 -2
- package/Models/DatabaseModels/Index.ts +2 -0
- package/Models/DatabaseModels/KubernetesCluster.ts +429 -0
- package/Models/DatabaseModels/Monitor.ts +48 -0
- package/Models/DatabaseModels/Project.ts +60 -0
- package/Models/DatabaseModels/RumApplication.ts +52 -1
- package/Models/DatabaseModels/Runner.ts +5 -4
- package/Models/DatabaseModels/RunnerJob.ts +66 -0
- package/Models/DatabaseModels/ScheduledMaintenancePublicNote.ts +10 -2
- package/Models/DatabaseModels/WorkflowVariable.ts +479 -2
- package/Models/DatabaseModels/WorkspaceProjectAuthToken.ts +79 -25
- package/Server/API/AIInvestigationAPI.ts +341 -0
- package/Server/API/AutoRemediationAPI.ts +184 -2
- package/Server/API/CommonAPI.ts +70 -0
- package/Server/API/KubernetesClusterAiAccessAPI.ts +793 -0
- package/Server/API/MicrosoftTeamsAPI.ts +770 -315
- package/Server/API/MonitorAPI.ts +140 -0
- package/Server/API/OnCallScheduleTimelineAPI.ts +5 -21
- package/Server/API/SlackAPI.ts +447 -99
- package/Server/API/StatusPageAPI.ts +146 -26
- package/Server/API/TelemetryAPI.ts +216 -5
- package/Server/API/UserTwoFactorBackupCodeAPI.ts +1 -0
- package/Server/API/WorkflowVariableAPI.ts +156 -0
- package/Server/Infrastructure/GlobalCache.ts +35 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1794300000000-AddOAuth2WorkflowVariables.ts +97 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1794400000000-AddKubernetesClusterAiAccess.ts +129 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1794500000000-AddIncomingEmailCustomAddressToMonitor.ts +25 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1794600000000-AddAuthTokenExpiresAtToWorkspaceProjectAuthToken.ts +20 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1794700000000-RemoveAppAccessTokenFromWorkspaceProjectAuthTokenMiscData.ts +38 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1794800000000-AddSessionReplaySameOriginTracePropagation.ts +28 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1794900000000-AddIncidentAlert.ts +89 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +14 -0
- package/Server/Middleware/MasterAdminAuthorization.ts +28 -0
- package/Server/Middleware/TelemetryIngest.ts +47 -2
- package/Server/Middleware/UserAuthorization.ts +56 -2
- package/Server/Services/AIAgentService.ts +1 -0
- package/Server/Services/AccessTokenService.ts +121 -48
- package/Server/Services/AlertEpisodeMemberService.ts +9 -0
- package/Server/Services/AlertEpisodeService.ts +14 -1
- package/Server/Services/AlertService.ts +134 -22
- package/Server/Services/AutoRemediationRuleEngineService.ts +968 -39
- package/Server/Services/AutoRemediationRuleService.ts +118 -0
- package/Server/Services/BillingService.ts +1 -0
- package/Server/Services/InboundEmail/Providers/SendGridInboundProvider.ts +16 -22
- package/Server/Services/IncidentAlertService.ts +1811 -0
- package/Server/Services/IncidentEpisodeMemberService.ts +9 -0
- package/Server/Services/IncidentEpisodePublicNoteService.ts +66 -0
- package/Server/Services/IncidentEpisodeRoleMemberService.ts +27 -0
- package/Server/Services/IncidentEpisodeService.ts +14 -1
- package/Server/Services/IncidentGroupingEngineService.ts +11 -0
- package/Server/Services/IncidentMemberService.ts +21 -0
- package/Server/Services/IncidentPublicNoteService.ts +63 -0
- package/Server/Services/IncidentService.ts +330 -30
- package/Server/Services/IncidentStateTimelineService.ts +39 -0
- package/Server/Services/IncidentTemplateService.ts +83 -3
- package/Server/Services/Index.ts +2 -0
- package/Server/Services/KubernetesClusterAiAccessService.ts +1943 -0
- package/Server/Services/KubernetesClusterService.ts +1570 -1
- package/Server/Services/LogAggregationService.ts +14 -6
- package/Server/Services/MonitorService.ts +651 -52
- package/Server/Services/MonitorStatusTimelineService.ts +639 -2
- package/Server/Services/OnCallDutyPolicyEscalationRuleScheduleService.ts +2 -0
- package/Server/Services/OnCallDutyPolicyEscalationRuleTeamService.ts +2 -0
- package/Server/Services/OnCallDutyPolicyEscalationRuleUserService.ts +2 -0
- package/Server/Services/OnCallDutyPolicyScheduleService.ts +3 -0
- package/Server/Services/OnCallNotificationAlertingService.ts +36 -12
- package/Server/Services/OnCallSetupReminderService.ts +1 -0
- package/Server/Services/ProbeService.ts +7 -1
- package/Server/Services/ProjectService.ts +11 -1
- package/Server/Services/RunbookCredentialService.ts +26 -1
- package/Server/Services/RunbookSecretService.ts +36 -0
- package/Server/Services/RunnerJobService.ts +941 -23
- package/Server/Services/RunnerService.ts +439 -6
- package/Server/Services/ScheduledMaintenancePublicNoteService.ts +66 -0
- package/Server/Services/ScheduledMaintenanceService.ts +124 -19
- package/Server/Services/ScheduledMaintenanceTemplateService.ts +82 -3
- package/Server/Services/ServiceLevelObjectiveService.ts +14 -1
- package/Server/Services/StatusPagePrivateUserService.ts +1 -0
- package/Server/Services/StatusPageService.ts +301 -74
- package/Server/Services/StatusPageSubscriberService.ts +4 -0
- package/Server/Services/TeamMemberService.ts +309 -7
- package/Server/Services/TraceAggregationService.ts +10 -6
- package/Server/Services/UserEmailService.ts +1 -0
- package/Server/Services/UserNotificationMethodAdminService.ts +1 -0
- package/Server/Services/UserNotificationRuleAdminService.ts +1 -0
- package/Server/Services/UserNotificationRuleService.ts +4 -0
- package/Server/Services/UserService.ts +122 -1
- package/Server/Services/WorkflowVariableService.ts +593 -8
- package/Server/Services/WorkspaceNotificationRuleService.ts +588 -8
- package/Server/Services/WorkspaceProjectAuthTokenService.ts +170 -1
- package/Server/Types/Database/QueryHelper.ts +22 -0
- package/Server/Types/Markdown.ts +502 -27
- package/Server/Utils/AI/ClusterAccess/ClusterAccessContext.ts +182 -0
- package/Server/Utils/AI/ClusterAccess/KubectlInvestigationToolkit.ts +525 -0
- package/Server/Utils/AI/ClusterAccess/KubectlJobRunner.ts +854 -0
- package/Server/Utils/AI/CodeFix/CodeFixAgentAuth.ts +22 -2
- package/Server/Utils/AI/Remediation/RemediationCommandTools.ts +1916 -307
- package/Server/Utils/AI/Remediation/RemediationExecutionRunner.ts +1601 -74
- package/Server/Utils/AI/SRE/AIInvestigationEngine.ts +139 -7
- package/Server/Utils/AI/SRE/AlertInvestigationRunner.ts +58 -1
- package/Server/Utils/AI/SRE/IncidentInvestigationRunner.ts +54 -1
- package/Server/Utils/AI/Toolbox/AIActionTools.ts +14 -6
- package/Server/Utils/AI/Toolbox/ResourceTools.ts +4 -2
- package/Server/Utils/AutoRemediation/CommandPlanExecutor.ts +1341 -150
- package/Server/Utils/AutoRemediation/RemediationVerifier.ts +375 -4
- package/Server/Utils/Database/AffectedResourceRelations.ts +127 -0
- package/Server/Utils/Database/ProjectScopedReferenceValidator.ts +240 -1
- package/Server/Utils/EmailRollup/EmailRollupFlushRunner.ts +1 -0
- package/Server/Utils/Monitor/MonitorAlert.ts +83 -9
- package/Server/Utils/Monitor/MonitorCriteriaObservationBuilder.ts +5 -1
- package/Server/Utils/Monitor/MonitorIncident.ts +104 -9
- package/Server/Utils/Monitor/MonitorPayloadRedaction.ts +124 -7
- package/Server/Utils/Monitor/ProbeMonitorsNotification.ts +407 -0
- package/Server/Utils/OnCall/OnCallShiftReminderRunner.ts +1 -0
- package/Server/Utils/PushNotificationUtil.ts +45 -0
- package/Server/Utils/Rules/OwnerRuleAssignment.ts +40 -3
- package/Server/Utils/Runbook/RunbookExecutePermission.ts +56 -6
- package/Server/Utils/SessionReplay/SessionReplayGateCache.ts +24 -2
- package/Server/Utils/SessionReplay/SessionReplayReadService.ts +223 -33
- package/Server/Utils/SessionReplay/SessionReplayUserFlowReadService.ts +559 -0
- package/Server/Utils/StartServer.ts +4 -3
- package/Server/Utils/TeamMember/ProjectLeaveResourceCleanup.ts +528 -0
- package/Server/Utils/TwoFactorBackupCodeNotification.ts +1 -0
- package/Server/Utils/UserPermission/UserPermission.ts +16 -0
- package/Server/Utils/Workflow/OAuth2TokenClient.ts +704 -0
- package/Server/Utils/Workflow/WorkflowVariableOAuthToken.ts +318 -0
- package/Server/Utils/Workspace/MicrosoftTeams/Actions/Alert.ts +47 -7
- package/Server/Utils/Workspace/MicrosoftTeams/Actions/AlertEpisode.ts +57 -16
- package/Server/Utils/Workspace/MicrosoftTeams/Actions/Incident.ts +193 -214
- package/Server/Utils/Workspace/MicrosoftTeams/Actions/IncidentEpisode.ts +57 -13
- package/Server/Utils/Workspace/MicrosoftTeams/Actions/Monitor.ts +54 -17
- package/Server/Utils/Workspace/MicrosoftTeams/Actions/ScheduledMaintenance.ts +179 -161
- package/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.ts +281 -167
- package/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsServiceUrl.ts +114 -0
- package/Server/Utils/Workspace/MicrosoftTeams/ReactionNoteSync.ts +895 -0
- package/Server/Utils/Workspace/Slack/Actions/ActionTypes.ts +7 -9
- package/Server/Utils/Workspace/Slack/Actions/Alert.ts +96 -227
- package/Server/Utils/Workspace/Slack/Actions/AlertEpisode.ts +93 -214
- package/Server/Utils/Workspace/Slack/Actions/Auth.ts +30 -3
- package/Server/Utils/Workspace/Slack/Actions/Authorization.ts +99 -0
- package/Server/Utils/Workspace/Slack/Actions/Incident.ts +117 -283
- package/Server/Utils/Workspace/Slack/Actions/IncidentEpisode.ts +101 -196
- package/Server/Utils/Workspace/Slack/Actions/ReactionNote.ts +329 -0
- package/Server/Utils/Workspace/Slack/Actions/ScheduledMaintenance.ts +111 -287
- package/Server/Utils/Workspace/Slack/Slack.ts +86 -17
- package/Server/Utils/Workspace/Slack/app-manifest.json +2 -0
- package/Server/Utils/Workspace/Workspace.ts +171 -54
- package/Server/Utils/Workspace/WorkspaceActionAuthorization.ts +252 -0
- package/Server/Utils/Workspace/WorkspaceBase.ts +39 -0
- package/Server/Utils/Workspace/WorkspaceOAuthState.ts +280 -0
- package/Server/Utils/Workspace/WorkspaceProjectReferenceValidator.ts +96 -0
- package/Server/Utils/Workspace/WorkspaceReactionNote.ts +620 -0
- package/Tests/App/Dashboard/AttributesJSONDashboardSurfaces.test.tsx +496 -0
- package/Tests/App/Dashboard/AutoRemediationRulesTableCommandRunners.test.tsx +152 -0
- package/Tests/App/Dashboard/BreadcrumbCoverage.test.tsx +32 -0
- package/Tests/App/Dashboard/BulkIncidentLinkActions.test.tsx +869 -0
- package/Tests/App/Dashboard/CephMetricTooltips.test.tsx +1777 -0
- package/Tests/App/Dashboard/CloudFleetSummary.test.ts +8 -0
- package/Tests/App/Dashboard/CloudMetricTooltips.test.tsx +887 -0
- package/Tests/App/Dashboard/ClusterAccessNotice.test.tsx +794 -0
- package/Tests/App/Dashboard/ContainerHostMetricTooltips.test.tsx +1309 -0
- package/Tests/App/Dashboard/CreateOAuthWorkflowVariableModal.test.tsx +840 -0
- package/Tests/App/Dashboard/CreateWorkflowModal.test.tsx +653 -0
- package/Tests/App/Dashboard/DatabaseMonitorStepForm.test.tsx +197 -0
- package/Tests/App/Dashboard/DatabaseMonitorView.test.tsx +376 -0
- package/Tests/App/Dashboard/DisabledWarningRobustness.test.tsx +262 -0
- package/Tests/App/Dashboard/DiscoveryScanLivePage.test.tsx +39 -0
- package/Tests/App/Dashboard/DockerSwarmClustersListTooltips.test.tsx +414 -0
- package/Tests/App/Dashboard/DockerSwarmMetricTooltips.test.ts +796 -0
- package/Tests/App/Dashboard/DockerSwarmOverviewTooltips.test.tsx +747 -0
- package/Tests/App/Dashboard/EventNotes.test.tsx +2080 -0
- package/Tests/App/Dashboard/EventNotesPages.test.tsx +486 -0
- package/Tests/App/Dashboard/EventNotesUtil.test.ts +933 -0
- package/Tests/App/Dashboard/ExceptionMonitorEnvironmentFilter.test.tsx +238 -0
- package/Tests/App/Dashboard/HostDetailViewTooltips.test.tsx +725 -0
- package/Tests/App/Dashboard/HostListColumnTooltips.test.tsx +472 -0
- package/Tests/App/Dashboard/HostMetricTooltips.test.ts +709 -0
- package/Tests/App/Dashboard/HostOverviewTooltips.test.tsx +698 -0
- package/Tests/App/Dashboard/HostTooltipHarness.ts +124 -0
- package/Tests/App/Dashboard/HostsListTooltips.test.tsx +395 -0
- package/Tests/App/Dashboard/IncidentAlertLinkDialog.test.tsx +691 -0
- package/Tests/App/Dashboard/IncidentAlertLinkHelpers.test.ts +458 -0
- package/Tests/App/Dashboard/IncidentAlertLinkPages.test.tsx +828 -0
- package/Tests/App/Dashboard/IncidentAlertLinkSideMenus.test.tsx +231 -0
- package/Tests/App/Dashboard/IncidentChangeStateNotifyDefault.test.tsx +665 -0
- package/Tests/App/Dashboard/IncidentCreateFromAlerts.test.tsx +689 -0
- package/Tests/App/Dashboard/IncidentEpisodeFeedPublicNoteNotifyDefault.test.tsx +494 -0
- package/Tests/App/Dashboard/IncidentEpisodeOverviewNotifyDefault.test.tsx +706 -0
- package/Tests/App/Dashboard/IncidentFeedPublicNoteNotifyDefault.test.tsx +472 -0
- package/Tests/App/Dashboard/IncidentOverviewNotifyDefault.test.tsx +858 -0
- package/Tests/App/Dashboard/IncomingEmailAddressSettings.test.tsx +567 -0
- package/Tests/App/Dashboard/InvestigationClusterToolFormat.test.ts +241 -0
- package/Tests/App/Dashboard/InvestigationEvidenceKubectl.test.tsx +322 -0
- package/Tests/App/Dashboard/InvestigationPanel.test.tsx +12 -0
- package/Tests/App/Dashboard/InvestigationPanelClusterAccess.test.tsx +476 -0
- package/Tests/App/Dashboard/InvestigationRunDetailsKubectl.test.tsx +383 -0
- package/Tests/App/Dashboard/IoTMetricTooltips.test.tsx +1123 -0
- package/Tests/App/Dashboard/KubectlActivitySummary.test.tsx +366 -0
- package/Tests/App/Dashboard/KubernetesClusterAiAccessSettings.test.ts +2886 -0
- package/Tests/App/Dashboard/KubernetesClusterAiPage.test.tsx +2688 -0
- package/Tests/App/Dashboard/KubernetesClusterAiPageServerParity.test.ts +915 -0
- package/Tests/App/Dashboard/KubernetesClusterMetricTooltips.test.ts +837 -0
- package/Tests/App/Dashboard/KubernetesClusterOverviewTooltips.test.tsx +699 -0
- package/Tests/App/Dashboard/KubernetesContainersTabTooltips.test.tsx +320 -0
- package/Tests/App/Dashboard/KubernetesCostTooltips.test.tsx +502 -0
- package/Tests/App/Dashboard/KubernetesInsightsTooltips.test.tsx +222 -0
- package/Tests/App/Dashboard/KubernetesResourceMetricTooltips.test.ts +561 -0
- package/Tests/App/Dashboard/KubernetesResourcePagesTooltips.test.tsx +1168 -0
- package/Tests/App/Dashboard/LayerDateTimeFieldTimezoneName.test.tsx +66 -0
- package/Tests/App/Dashboard/LinkIncidentAlertModal.test.tsx +154 -0
- package/Tests/App/Dashboard/LogMonitorPreview.test.tsx +174 -0
- package/Tests/App/Dashboard/MetricDescriptionRules.ts +170 -0
- package/Tests/App/Dashboard/MetricDescriptionsCatalog.test.ts +206 -0
- package/Tests/App/Dashboard/MetricDescriptionsConsistency.test.ts +275 -0
- package/Tests/App/Dashboard/MonitorFeedRefresh.test.tsx +279 -0
- package/Tests/App/Dashboard/MonitorMetricQueryConfig.test.ts +244 -0
- package/Tests/App/Dashboard/MonitorOpenWorkCard.test.tsx +381 -0
- package/Tests/App/Dashboard/MonitorOpenWorkHook.test.tsx +784 -0
- package/Tests/App/Dashboard/MonitorOverviewData.test.tsx +2199 -0
- package/Tests/App/Dashboard/MonitorOverviewHero.test.tsx +1169 -0
- package/Tests/App/Dashboard/MonitorOverviewInput.test.ts +1127 -0
- package/Tests/App/Dashboard/MonitorOverviewPage.test.tsx +2136 -0
- package/Tests/App/Dashboard/MonitorOverviewSelectReadable.test.ts +368 -0
- package/Tests/App/Dashboard/MonitorOverviewStatBar.test.tsx +526 -0
- package/Tests/App/Dashboard/MonitorOverviewSupportingCards.test.tsx +542 -0
- package/Tests/App/Dashboard/MonitorOwnersCombine.test.ts +299 -0
- package/Tests/App/Dashboard/MonitorProbesCard.test.tsx +602 -0
- package/Tests/App/Dashboard/MonitorResponseTimeCard.test.tsx +386 -0
- package/Tests/App/Dashboard/MonitorSetupAndConnectionCards.test.tsx +612 -0
- package/Tests/App/Dashboard/MonitorStatusChangesCard.test.tsx +257 -0
- package/Tests/App/Dashboard/MonitorSummaryTestMonitorButton.test.tsx +360 -1
- package/Tests/App/Dashboard/MonitorUptimeHistoryCard.test.tsx +835 -0
- package/Tests/App/Dashboard/MonitorUptimeSummaryHook.test.tsx +971 -0
- package/Tests/App/Dashboard/MonitorViewLayout.test.tsx +580 -0
- package/Tests/App/Dashboard/NetworkDeviceTooltips.test.tsx +852 -0
- package/Tests/App/Dashboard/NetworkDiagnosticsTooltips.test.tsx +556 -0
- package/Tests/App/Dashboard/NetworkMetricTooltips.test.ts +1348 -0
- package/Tests/App/Dashboard/NetworkSiteTooltips.test.tsx +679 -0
- package/Tests/App/Dashboard/OnCallLayerRestrictionTimesPreserved.test.tsx +441 -0
- package/Tests/App/Dashboard/OnCallNavbar.test.tsx +214 -0
- package/Tests/App/Dashboard/OnCallSchedulePreviewCalendarDisplay.test.tsx +1389 -0
- package/Tests/App/Dashboard/OnCallSchedulePreviewOverrides.test.tsx +205 -1
- package/Tests/App/Dashboard/OnCallScheduleTimeInputsSettingsZone.test.tsx +198 -0
- package/Tests/App/Dashboard/ProxmoxMetricTooltips.test.ts +592 -0
- package/Tests/App/Dashboard/ProxmoxOverviewTooltips.test.tsx +1002 -0
- package/Tests/App/Dashboard/ProxmoxResourcePageTooltips.test.tsx +923 -0
- package/Tests/App/Dashboard/PublicNotePagesNotifyDefault.test.tsx +524 -0
- package/Tests/App/Dashboard/RemediationSuggestionCardApproval.test.tsx +702 -0
- package/Tests/App/Dashboard/RemoveUserFromProject.test.tsx +427 -0
- package/Tests/App/Dashboard/ResourceArchiveSettings.test.tsx +4 -0
- package/Tests/App/Dashboard/ResourceOverviewTileTooltips.test.tsx +1066 -0
- package/Tests/App/Dashboard/RumOverviewPage.test.tsx +1195 -0
- package/Tests/App/Dashboard/RumSessionReplaySideMenu.test.tsx +3 -1
- package/Tests/App/Dashboard/RunbookStepTypeMaps.test.ts +166 -0
- package/Tests/App/Dashboard/RunnerKubernetesAgentForm.test.tsx +622 -0
- package/Tests/App/Dashboard/ScheduledMaintenanceChangeStateNotifyDefault.test.tsx +1491 -0
- package/Tests/App/Dashboard/ScheduledMaintenanceFeedPublicNoteNotifyDefault.test.tsx +489 -0
- package/Tests/App/Dashboard/ScheduledMaintenanceOverviewNotifyDefault.test.tsx +909 -0
- package/Tests/App/Dashboard/ScheduledMaintenanceOverviewPage.test.tsx +14 -0
- package/Tests/App/Dashboard/ScheduledMaintenanceWindowStatsTranslation.test.tsx +307 -0
- package/Tests/App/Dashboard/SecurityEventAttributeColumnPicker.test.tsx +542 -0
- package/Tests/App/Dashboard/SecurityEventConnectionFormModal.test.tsx +174 -0
- package/Tests/App/Dashboard/SecurityEventConnectionsEmptyState.test.tsx +973 -212
- package/Tests/App/Dashboard/SecurityEventConnectionsTable.test.tsx +491 -52
- package/Tests/App/Dashboard/SecurityEventDetailPanel.test.tsx +301 -0
- package/Tests/App/Dashboard/SecurityEventListRow.test.tsx +158 -1
- package/Tests/App/Dashboard/SecurityEventProviderTile.test.tsx +869 -0
- package/Tests/App/Dashboard/SecurityEventsEmptyState.test.tsx +959 -94
- package/Tests/App/Dashboard/SecurityEventsNoResults.test.tsx +2 -0
- package/Tests/App/Dashboard/SecurityEventsViewer.test.tsx +274 -1
- package/Tests/App/Dashboard/ServerlessMetricTooltips.test.tsx +474 -0
- package/Tests/App/Dashboard/ServiceMetricTooltips.test.tsx +772 -0
- package/Tests/App/Dashboard/SessionReplayAuditTable.test.tsx +56 -1
- package/Tests/App/Dashboard/TeamMembershipRemoval.test.ts +900 -0
- package/Tests/App/Dashboard/TeamMembershipRemovalPages.test.tsx +460 -0
- package/Tests/App/Dashboard/TelemetryMetricsSignals.test.ts +1207 -0
- package/Tests/App/Dashboard/TelemetryResourceTabTooltips.test.tsx +437 -0
- package/Tests/App/Dashboard/TimezoneElements.test.tsx +321 -0
- package/Tests/App/Dashboard/TimezoneSelectButton.test.tsx +634 -0
- package/Tests/App/Dashboard/TraceExplorer.test.tsx +260 -0
- package/Tests/App/Dashboard/TraceMonitorPreview.test.tsx +182 -0
- package/Tests/App/Dashboard/UserTimezoneInit.test.tsx +544 -0
- package/Tests/App/Dashboard/VMwareMetricTooltips.test.ts +801 -0
- package/Tests/App/Dashboard/VMwareOverviewTooltips.test.tsx +601 -0
- package/Tests/App/Dashboard/VMwareResourcePagesTooltips.test.tsx +646 -0
- package/Tests/App/Dashboard/VMwareTooltipHarness.ts +145 -0
- package/Tests/App/Dashboard/WorkflowVariableModals.test.tsx +1630 -0
- package/Tests/App/Dashboard/WorkflowVariableRoutes.test.tsx +603 -0
- package/Tests/App/Dashboard/WorkflowVariableTokenStatus.test.tsx +589 -0
- package/Tests/App/Dashboard/WorkflowVariableUtil.test.ts +1543 -0
- package/Tests/App/Dashboard/WorkflowVariableView.test.tsx +3227 -0
- package/Tests/App/Dashboard/WorkflowVariablesTable.test.tsx +1277 -395
- package/Tests/App/StatusPage/StatusPageOverviewMonitorGroupUptime.test.tsx +714 -0
- package/Tests/App/StatusPage/StatusPageOverviewUptimeBars.NewYork.test.tsx +1009 -0
- package/Tests/App/StatusPage/StatusPageOverviewUptimeBars.test.tsx +1092 -0
- package/Tests/Models/DatabaseModels/DomainRoleTierCoverage.test.ts +5 -0
- package/Tests/Models/DatabaseModels/IncidentAlertModel.test.ts +554 -0
- package/Tests/Models/DatabaseModels/KubernetesClusterAiAccessColumns.test.ts +520 -0
- package/Tests/Models/DatabaseModels/MonitorSecretKeyColumnAccessControl.test.ts +66 -2
- package/Tests/Models/DatabaseModels/SessionReplayModels.test.ts +117 -0
- package/Tests/Models/DatabaseModels/WorkspaceProjectAuthTokenAccessControl.test.ts +236 -0
- package/Tests/Models/IncidentEpisodePublicNoteNotifyColumnContract.test.ts +103 -0
- package/Tests/Models/IncidentPublicNoteNotifyColumnContract.test.ts +96 -0
- package/Tests/Models/ScheduledMaintenancePublicNoteNotifyColumnContract.test.ts +111 -0
- package/Tests/Server/API/AIInvestigationAPI.test.ts +976 -0
- package/Tests/Server/API/AutoRemediationApproveKubectlRecheck.test.ts +836 -0
- package/Tests/Server/API/CommonAPIAssertCanCreateTable.test.ts +565 -0
- package/Tests/Server/API/CommonAPIAssertCanReadTable.test.ts +282 -0
- package/Tests/Server/API/KubernetesClusterAiAccessAPI.test.ts +1744 -0
- package/Tests/Server/API/LogHistogramAPI.test.ts +371 -0
- package/Tests/Server/API/MicrosoftTeamsLegacyWebhookRemoval.test.ts +125 -30
- package/Tests/Server/API/MicrosoftTeamsOAuthState.test.ts +1121 -0
- package/Tests/Server/API/MonitorUptimeSummaryAPI.test.ts +685 -0
- package/Tests/Server/API/SessionReplayAPI.test.ts +602 -1
- package/Tests/Server/API/SlackChannelCacheAPI.test.ts +358 -0
- package/Tests/Server/API/SlackOAuthState.test.ts +688 -0
- package/Tests/Server/API/StatusPageOverviewMonitorGroupUptime.test.ts +527 -0
- package/Tests/Server/API/StatusPageTestEmailReportAuth.test.ts +2 -0
- package/Tests/Server/API/StatusPageUptimeAPI.test.ts +427 -0
- package/Tests/Server/API/UserProjectsAPI.test.ts +4 -0
- package/Tests/Server/API/WorkflowVariableAPI.test.ts +404 -0
- package/Tests/Server/API/WorkspaceOAuthTestHelpers.ts +289 -0
- package/Tests/Server/API/WorkspaceSendTestNotificationRoutes.test.ts +2064 -0
- package/Tests/Server/Infrastructure/GlobalCache.test.ts +86 -0
- package/Tests/Server/Infrastructure/Postgres/AddIncidentAlertMigration.test.ts +341 -0
- package/Tests/Server/Infrastructure/Postgres/AddKubernetesClusterAiAccessMigration.test.ts +589 -0
- package/Tests/Server/Infrastructure/Postgres/AddOAuth2WorkflowVariablesMigration.test.ts +254 -0
- package/Tests/Server/Infrastructure/Postgres/AddSessionReplaySameOriginTracePropagationMigration.test.ts +247 -0
- package/Tests/Server/Middleware/BlockedUserMiddleware.test.ts +403 -0
- package/Tests/Server/Middleware/MasterAdminAuthorization.test.ts +13 -0
- package/Tests/Server/Middleware/PublicRouteUserMiddleware.test.ts +2 -0
- package/Tests/Server/Middleware/RemovedProjectMemberAuthorization.test.ts +469 -0
- package/Tests/Server/Middleware/TelemetryIngestBrowserKey.test.ts +77 -1
- package/Tests/Server/Middleware/TelemetryIngestKubernetesAgentRunnerPinnedKey.test.ts +211 -0
- package/Tests/Server/Middleware/TelemetryIngestKubernetesAgentRunnerRateLimit.test.ts +358 -0
- package/Tests/Server/Middleware/UserAuthorization.test.ts +97 -0
- package/Tests/Server/Middleware/UserAuthorizationEditionEnforcement.test.ts +2 -0
- package/Tests/Server/Services/AccessTokenProjectUserGrant.test.ts +14 -2
- package/Tests/Server/Services/AccessTokenRemovedMemberAccess.test.ts +1044 -0
- package/Tests/Server/Services/AddOwnersIdempotency.test.ts +5 -0
- package/Tests/Server/Services/AlertEpisodeMemberCreatePermission.test.ts +139 -0
- package/Tests/Server/Services/AutoRemediationClusterRuleEngine.test.ts +1361 -0
- package/Tests/Server/Services/AutoRemediationRuleCommandRunners.test.ts +375 -0
- package/Tests/Server/Services/CrossProjectRelationWriteGuard.test.ts +2384 -0
- package/Tests/Server/Services/FindOwnersProjectMembership.test.ts +267 -0
- package/Tests/Server/Services/InboundEmail/SendGridInboundProviderAddress.test.ts +90 -0
- package/Tests/Server/Services/IncidentAlertPostgres.test.ts +903 -0
- package/Tests/Server/Services/IncidentAlertRegistration.test.ts +96 -0
- package/Tests/Server/Services/IncidentAlertService.test.ts +2225 -0
- package/Tests/Server/Services/IncidentAlertStateCascade.test.ts +970 -0
- package/Tests/Server/Services/IncidentCreateFromAlerts.test.ts +1284 -0
- package/Tests/Server/Services/IncidentEpisodeMemberCreatePermission.test.ts +143 -0
- package/Tests/Server/Services/IncidentEpisodePublicNoteNotifyDefault.test.ts +805 -0
- package/Tests/Server/Services/IncidentPublicNoteNotifyDefault.test.ts +724 -0
- package/Tests/Server/Services/IncidentRoleProjectMembership.test.ts +233 -0
- package/Tests/Server/Services/KubernetesClusterAiAccessAgentRunnerAssignments.test.ts +372 -0
- package/Tests/Server/Services/KubernetesClusterAiAccessBindingGuard.test.ts +1876 -0
- package/Tests/Server/Services/KubernetesClusterAiAccessDeletedRunnerRemedy.test.ts +620 -0
- package/Tests/Server/Services/KubernetesClusterAiAccessGapNextSteps.test.ts +421 -0
- package/Tests/Server/Services/KubernetesClusterAiAccessService.test.ts +3662 -0
- package/Tests/Server/Services/KubernetesClusterAiAccessSubjectClusters.test.ts +405 -0
- package/Tests/Server/Services/KubernetesClusterAiSettingsPermission.test.ts +975 -0
- package/Tests/Server/Services/KubernetesClusterServiceAiAccessFeed.test.ts +497 -0
- package/Tests/Server/Services/KubernetesClusterServiceDeleteSettlesRemediation.test.ts +328 -0
- package/Tests/Server/Services/LogAggregationService.test.ts +99 -0
- package/Tests/Server/Services/MonitorServiceIncomingEmailCustomAddress.test.ts +447 -0
- package/Tests/Server/Services/MonitorServiceProbeFlagSync.test.ts +1334 -0
- package/Tests/Server/Services/MonitorServiceProbeStatusGrouping.test.ts +1640 -0
- package/Tests/Server/Services/MonitorServiceRefreshCurrentStatus.test.ts +225 -0
- package/Tests/Server/Services/MonitorStatusBridgeProbePath.test.ts +8 -8
- package/Tests/Server/Services/MonitorStatusTimelineDailyAggregates.test.ts +264 -1
- package/Tests/Server/Services/MonitorStatusTimelineMergedDowntime.test.ts +284 -0
- package/Tests/Server/Services/MonitorUptimeSummaryService.test.ts +1043 -0
- package/Tests/Server/Services/NetworkDeviceRuleEngines.test.ts +5 -0
- package/Tests/Server/Services/OnCallUndeliverablePageOwnerMembership.test.ts +359 -0
- package/Tests/Server/Services/ProbeServiceDashboardLink.test.ts +191 -0
- package/Tests/Server/Services/ProjectOwnersProjectMembership.test.ts +221 -0
- package/Tests/Server/Services/RuleRun/IncidentAlertMaintenanceRuleEnginesRun.test.ts +5 -0
- package/Tests/Server/Services/RuleRun/OwnerRuleEnginesGroupARun.test.ts +28 -0
- package/Tests/Server/Services/RuleRun/OwnerRuleEnginesGroupBRun.test.ts +9 -1
- package/Tests/Server/Services/RunnerJobEnqueueAiCommandAgentRunner.test.ts +230 -0
- package/Tests/Server/Services/RunnerJobEnqueueKubectl.test.ts +978 -0
- package/Tests/Server/Services/RunnerJobKubectlWriteScope.test.ts +866 -0
- package/Tests/Server/Services/RunnerJobSubmitResultRedaction.test.ts +322 -0
- package/Tests/Server/Services/RunnerJobSubmitResultUnstorableText.test.ts +357 -0
- package/Tests/Server/Services/RunnerJobTimeoutReason.test.ts +227 -0
- package/Tests/Server/Services/RunnerServiceAgentName.test.ts +581 -0
- package/Tests/Server/Services/ScheduledMaintenancePublicNoteNotifyDefault.test.ts +802 -0
- package/Tests/Server/Services/ScheduledMaintenanceSubscriberTemplateFormats.test.ts +53 -0
- package/Tests/Server/Services/ServiceLevelObjectiveLabelAndOwnerRuleEngines.test.ts +5 -0
- package/Tests/Server/Services/ServiceLevelObjectiveService.test.ts +12 -0
- package/Tests/Server/Services/StatusPageSubscriberReport.test.ts +1176 -1
- package/Tests/Server/Services/TeamMemberBillingSeatSync.test.ts +9 -0
- package/Tests/Server/Services/TeamMemberOnCallCleanup.test.ts +18 -0
- package/Tests/Server/Services/TeamMemberProjectMembership.test.ts +255 -0
- package/Tests/Server/Services/TeamMemberRemovalRevokesProjectAccess.test.ts +600 -0
- package/Tests/Server/Services/TeamMemberResourceCleanup.test.ts +731 -0
- package/Tests/Server/Services/TeamMemberWorkspaceAccountCleanup.test.ts +164 -0
- package/Tests/Server/Services/TraceAggregationService.test.ts +64 -0
- package/Tests/Server/Services/UserServiceBlockedUser.test.ts +293 -0
- package/Tests/Server/Services/WorkflowVariableOAuthHooks.test.ts +1016 -0
- package/Tests/Server/Services/WorkflowVariableOAuthPostgres.test.ts +543 -0
- package/Tests/Server/Services/WorkflowVariableRenameUniqueness.test.ts +16 -5
- package/Tests/Server/Services/WorkspaceNotificationRuleNoteDelivery.test.ts +473 -0
- package/Tests/Server/Services/WorkspaceNotificationRuleSendTestNotification.test.ts +3690 -0
- package/Tests/Server/Services/WorkspaceProjectAuthTokenMiscDataSecrets.test.ts +374 -0
- package/Tests/Server/Services/WorkspaceProjectAuthTokenSlackChannelCache.test.ts +143 -0
- package/Tests/Server/Types/Database/Permissions/WorkflowVariableOAuthColumnPermission.test.ts +250 -0
- package/Tests/Server/Types/Database/QueryHelperJsonContains.test.ts +96 -0
- package/Tests/Server/Types/Markdown.test.ts +1033 -0
- package/Tests/Server/Utils/AI/ClusterAccessContext.test.ts +285 -0
- package/Tests/Server/Utils/AI/CodeFix/CodeFixAgentAuth.test.ts +159 -1
- package/Tests/Server/Utils/AI/InvestigationClusterAccessWiring.test.ts +752 -0
- package/Tests/Server/Utils/AI/KubectlInvestigationToolkit.test.ts +1840 -0
- package/Tests/Server/Utils/AI/KubectlJobRunner.test.ts +1067 -0
- package/Tests/Server/Utils/AI/KubectlJobRunnerFinishedJob.test.ts +355 -0
- package/Tests/Server/Utils/AI/PostIncidentStatusUpdateTool.test.ts +496 -0
- package/Tests/Server/Utils/AI/RemediationCommandTools.test.ts +305 -0
- package/Tests/Server/Utils/AI/RemediationCommandToolsKubectl.test.ts +1365 -0
- package/Tests/Server/Utils/AI/RemediationCommandToolsKubectlOutcome.test.ts +639 -0
- package/Tests/Server/Utils/AI/RemediationCommandToolsLiveCluster.test.ts +1585 -0
- package/Tests/Server/Utils/AI/RemediationCommandToolsRunnerScope.test.ts +1065 -0
- package/Tests/Server/Utils/AI/RemediationExecutionRunner.test.ts +2138 -1
- package/Tests/Server/Utils/AI/RemediationExecutionRunnerClusterMode.test.ts +1035 -0
- package/Tests/Server/Utils/AI/RemediationKubectlCopyParity.test.ts +517 -0
- package/Tests/Server/Utils/AI/ResourceTools.test.ts +27 -1
- package/Tests/Server/Utils/AutoRemediation/CommandPlanExecutor.test.ts +1371 -24
- package/Tests/Server/Utils/AutoRemediation/CommandPlanExecutorRollbackRace.test.ts +962 -0
- package/Tests/Server/Utils/AutoRemediation/CommandPlanExecutorUnknownRun.test.ts +518 -0
- package/Tests/Server/Utils/AutoRemediation/CommandPlanVerification.test.ts +939 -2
- package/Tests/Server/Utils/Database/ProjectScopedRelationReferences.test.ts +371 -0
- package/Tests/Server/Utils/Monitor/AffectedResourceList.test.ts +64 -0
- package/Tests/Server/Utils/Monitor/DatabaseMetricObservationRemediation.test.ts +102 -0
- package/Tests/Server/Utils/Monitor/MonitorAlertCriteriaReferences.test.ts +362 -0
- package/Tests/Server/Utils/Monitor/MonitorCriteriaEvaluatorBreachingSamples.test.ts +55 -0
- package/Tests/Server/Utils/Monitor/MonitorEmailAddressRedaction.test.ts +255 -0
- package/Tests/Server/Utils/Monitor/MonitorIncidentCriteriaReferences.test.ts +347 -0
- package/Tests/Server/Utils/Monitor/MonitorIncidentMemberRoleMembership.test.ts +203 -0
- package/Tests/Server/Utils/Monitor/ProbeMonitorsNotification.test.ts +1147 -0
- package/Tests/Server/Utils/PushNotificationUtilCreators.test.ts +79 -0
- package/Tests/Server/Utils/ResourceFeed/ResourceFeedUtil.test.ts +21 -1
- package/Tests/Server/Utils/Rules/OwnerRuleAssignment.test.ts +155 -1
- package/Tests/Server/Utils/SessionReplay/SessionReplayGateCachePolicy.test.ts +103 -0
- package/Tests/Server/Utils/SessionReplay/SessionReplayReadServiceQueries.test.ts +288 -0
- package/Tests/Server/Utils/SessionReplay/SessionReplayUserFlowReadService.test.ts +304 -0
- package/Tests/Server/Utils/Telemetry/TelemetryIngestionKeyGuard.test.ts +40 -3
- package/Tests/Server/Utils/Workflow/OAuth2TokenClient.test.ts +702 -0
- package/Tests/Server/Utils/Workflow/OAuth2TokenClientHttpIntegration.test.ts +507 -0
- package/Tests/Server/Utils/Workflow/WorkflowVariableOAuthToken.test.ts +831 -0
- package/Tests/Server/Utils/Workspace/MicrosoftTeamsActionAuthorization.test.ts +63 -1
- package/Tests/Server/Utils/Workspace/MicrosoftTeamsAppAccessToken.test.ts +256 -0
- package/Tests/Server/Utils/Workspace/MicrosoftTeamsChannelSend.test.ts +60 -0
- package/Tests/Server/Utils/Workspace/MicrosoftTeamsChatActionAuthorization.test.ts +442 -0
- package/Tests/Server/Utils/Workspace/MicrosoftTeamsChats.test.ts +44 -2
- package/Tests/Server/Utils/Workspace/MicrosoftTeamsDirectMessage.test.ts +55 -0
- package/Tests/Server/Utils/Workspace/MicrosoftTeamsReactionNoteSync.test.ts +1522 -0
- package/Tests/Server/Utils/Workspace/MicrosoftTeamsServiceUrl.test.ts +130 -0
- package/Tests/Server/Utils/Workspace/MicrosoftTeamsTeamInstalls.test.ts +4 -4
- package/Tests/Server/Utils/Workspace/Slack/SlackActionAuthorization.test.ts +691 -0
- package/Tests/Server/Utils/Workspace/Slack/SlackMessageByTimestamp.test.ts +253 -0
- package/Tests/Server/Utils/Workspace/Slack/SlackReactionNote.test.ts +574 -0
- package/Tests/Server/Utils/Workspace/WorkspaceActionAuthorization.test.ts +488 -0
- package/Tests/Server/Utils/Workspace/WorkspaceCreateProjectReferences.test.ts +861 -0
- package/Tests/Server/Utils/Workspace/WorkspaceMessageAuthor.test.ts +635 -0
- package/Tests/Server/Utils/Workspace/WorkspaceOAuthState.test.ts +548 -0
- package/Tests/Server/Utils/Workspace/WorkspaceReactionNote.test.ts +839 -0
- package/Tests/Server/Utils/Workspace/WorkspaceSendErrorMessage.test.ts +725 -0
- package/Tests/Types/AutoRemediation/AiRemediationCommandPlan.test.ts +283 -9
- package/Tests/Types/DateBrowserLocalWallClock.test.ts +280 -0
- package/Tests/Types/DateLocalShortMonthNameFallback.test.ts +389 -0
- package/Tests/Types/DateUserTimezone.test.ts +177 -4
- package/Tests/Types/Kubernetes/KubernetesAgentChartAiAccess.test.ts +306 -0
- package/Tests/Types/Kubernetes/KubernetesClusterAiAccess.test.ts +283 -0
- package/Tests/Types/Kubernetes/KubernetesRunnerPostureWriteScope.test.ts +68 -0
- package/Tests/Types/Monitor/DatabaseMonitor/SqlServerPlatform.test.ts +144 -0
- package/Tests/Types/Monitor/MonitorStepExceptionMonitor.test.ts +160 -0
- package/Tests/Types/Monitor/Recommendation/MonitorRecommendationCoverage.test.ts +53 -0
- package/Tests/Types/Rum/WebVitals.test.ts +173 -0
- package/Tests/Types/Runbook/RunbookStepType.test.ts +91 -16
- package/Tests/Types/Runner/RunnerLiveStatus.test.ts +14 -3
- package/Tests/Types/SecurityEvent/Connectors/SecurityEventConnectorCatalog.test.ts +15 -0
- package/Tests/Types/StatusPage/PublicNoteSubscriberNotificationDefault.test.ts +1868 -0
- package/Tests/Types/Timezone.test.ts +5 -0
- package/Tests/Types/TimezoneAlias.test.ts +1034 -0
- package/Tests/Types/Workflow/JiraTemplateFixtures.ts +833 -0
- package/Tests/Types/Workflow/JiraTemplateScripts.test.ts +5414 -0
- package/Tests/Types/Workflow/JiraTemplateSimulation.test.ts +4803 -0
- package/Tests/Types/Workflow/JiraTemplates.test.ts +5429 -0
- package/Tests/Types/Workflow/Templates.test.ts +79 -4
- package/Tests/Types/Workflow/WorkflowVariableOAuth.test.ts +520 -0
- package/Tests/Types/Workspace/WorkspaceNoteReaction.test.ts +177 -0
- package/Tests/UI/Components/AttributesJSON/AttributesJSONView.test.tsx +390 -0
- package/Tests/UI/Components/AttributesJSON/CopyAttributesAsJSONButton.test.tsx +566 -0
- package/Tests/UI/Components/AttributesJSON/JSONHighlight.test.ts +131 -0
- package/Tests/UI/Components/BasicFormDropdownNormalization.test.tsx +276 -1
- package/Tests/UI/Components/Calendar/Calendar.test.tsx +1611 -0
- package/Tests/UI/Components/Calendar/CalendarDayLayout.test.ts +1486 -0
- package/Tests/UI/Components/Calendar/CalendarDayLayoutDst.test.ts +632 -0
- package/Tests/UI/Components/Calendar/CalendarDst.test.tsx +388 -0
- package/Tests/UI/Components/Charts/ChartGroupPlotFloor.test.tsx +170 -0
- package/Tests/UI/Components/Charts/HistogramSelection.test.ts +282 -0
- package/Tests/UI/Components/CustomTimeRangeModal.test.tsx +6 -0
- package/Tests/UI/Components/CustomTimeRangeModalTimezoneTranslation.test.tsx +285 -0
- package/Tests/UI/Components/Dropdown.test.tsx +999 -2
- package/Tests/UI/Components/FieldLabelInfoCardTooltip.test.tsx +413 -0
- package/Tests/UI/Components/Forms/FormFieldCheckboxTranslation.test.tsx +216 -0
- package/Tests/UI/Components/Forms/FormFieldTimezoneDescriptionTranslation.test.tsx +461 -0
- package/Tests/UI/Components/Forms/IncidentEpisodePublicNoteNotifyPayload.test.tsx +641 -0
- package/Tests/UI/Components/Forms/IncidentPublicNoteNotifyPayload.test.tsx +346 -0
- package/Tests/UI/Components/Forms/ScheduledMaintenancePublicNoteNotifyPayload.test.tsx +493 -0
- package/Tests/UI/Components/Graphs/DayUptimeGraph.test.tsx +911 -2
- package/Tests/UI/Components/Graphs/DayUptimeGraphTimezone.NewYork.test.tsx +730 -0
- package/Tests/UI/Components/Graphs/DayUptimeGraphTimezone.Tokyo.test.tsx +506 -0
- package/Tests/UI/Components/HistogramClickToZoom.test.tsx +619 -0
- package/Tests/UI/Components/InfoTooltip.test.tsx +242 -0
- package/Tests/UI/Components/LogDetailsPanelAttributesJSON.test.tsx +248 -0
- package/Tests/UI/Components/LogsViewerHistogramZoom.test.tsx +47 -1
- package/Tests/UI/Components/LogsViewerSmallScreens.test.tsx +620 -0
- package/Tests/UI/Components/ModelPageModelChange.test.tsx +242 -3
- package/Tests/UI/Components/ModelTable/BaseModelTableBulkDelete.test.tsx +207 -3
- package/Tests/UI/Components/ModelTable/BaseModelTableBulkDeleteVerb.test.tsx +367 -0
- package/Tests/UI/Components/ModelTable/BaseModelTableCreateButtonTitle.test.tsx +275 -0
- package/Tests/UI/Components/ModelTable/BaseModelTableDeleteConfirmation.test.tsx +521 -0
- package/Tests/UI/Components/MonitorGraphs/Uptime.test.tsx +406 -2
- package/Tests/UI/Components/MonitorGraphs/UptimeBarDayModal.test.tsx +169 -2
- package/Tests/UI/Components/TableHeaderTooltip.test.tsx +662 -0
- package/Tests/UI/Components/TelemetryViewer/TelemetryViewerHistogramClickZoom.test.tsx +266 -0
- package/Tests/UI/Components/TelemetryViewer/TelemetryViewerSmallScreens.test.tsx +439 -0
- package/Tests/UI/Components/TimezoneDropdownLegacyValues.test.tsx +704 -0
- package/Tests/UI/Components/UseHistogramZoom.test.tsx +89 -1
- package/Tests/UI/Components/UseLogsHistogram.test.tsx +175 -0
- package/Tests/UI/Monitor/MonitorSummarySnapshotRender.test.tsx +5 -5
- package/Tests/UI/Rum/PrivacySummaryCard.test.tsx +166 -9
- package/Tests/UI/Rum/RecordingHealthTooltips.test.tsx +447 -0
- package/Tests/UI/Rum/ReplayCorrelationPanel.test.tsx +164 -0
- package/Tests/UI/Rum/ReplayFrameCapture.test.ts +6750 -0
- package/Tests/UI/Rum/ReplayRail.test.tsx +723 -12
- package/Tests/UI/Rum/ReplayRailDetail.test.tsx +86 -0
- package/Tests/UI/Rum/ReplayScreenshot.test.ts +2124 -0
- package/Tests/UI/Rum/ReplayScreenshotActions.test.tsx +3288 -0
- package/Tests/UI/Rum/ReplayStage.test.tsx +62 -0
- package/Tests/UI/Rum/ReplayStageOverlays.test.tsx +983 -2
- package/Tests/UI/Rum/SessionReplaySettingsPolicyLoading.test.tsx +149 -0
- package/Tests/UI/Rum/SessionReplaySetupGuide.test.tsx +107 -6
- package/Tests/UI/Rum/SessionReplayUsersTableTooltips.test.tsx +330 -0
- package/Tests/UI/Rum/UserFlowTooltips.test.tsx +886 -0
- package/Tests/UI/Telemetry/TelemetryDetailPanel.test.tsx +28 -0
- package/Tests/UI/Utils/Breadcrumb/fixtures/RealBreadcrumbTrails.ts +10 -0
- package/Tests/UI/Utils/Breadcrumb/fixtures/RealRoutePatterns.ts +2 -0
- package/Tests/UI/Utils/PermissionGate.test.ts +76 -0
- package/Tests/UI/Utils/ProjectUsersModelAPI.test.ts +51 -0
- package/Tests/UI/Utils/Timezone.test.ts +747 -33
- package/Tests/UI/Workspace/SendTestNotificationButton.test.tsx +1854 -0
- package/Tests/UI/Workspace/WorkspaceCardsSendTestNotification.test.tsx +1864 -0
- package/Tests/Utils/AI/InvestigationReport.test.ts +435 -7
- package/Tests/Utils/AiRemediation/KubectlAllowlistValidatorParity.test.ts +1084 -0
- package/Tests/Utils/AiRemediation/KubectlOutputRedactor.test.ts +2531 -0
- package/Tests/Utils/AiRemediation/KubectlPolicy.test.ts +1895 -0
- package/Tests/Utils/AiRemediation/KubectlPolicyAllowlist.test.ts +428 -0
- package/Tests/Utils/AiRemediation/KubectlPolicyChartRbacParity.test.ts +828 -0
- package/Tests/Utils/AiRemediation/KubectlPolicyCustomResourceScope.test.ts +573 -0
- package/Tests/Utils/AiRemediation/KubectlPolicyDenials.test.ts +1525 -0
- package/Tests/Utils/AiRemediation/KubectlPolicyExposeOverrides.test.ts +275 -0
- package/Tests/Utils/AiRemediation/KubectlPolicyNodePatch.test.ts +428 -0
- package/Tests/Utils/AiRemediation/KubectlPolicyObjectWords.test.ts +195 -0
- package/Tests/Utils/AiRemediation/KubectlPolicyPatchParents.test.ts +637 -0
- package/Tests/Utils/AiRemediation/KubectlPolicyPodSecurityBaseline.test.ts +322 -0
- package/Tests/Utils/AiRemediation/KubectlPolicySafeWriteScope.test.ts +1026 -0
- package/Tests/Utils/AiRemediation/KubectlWaitBudget.test.ts +267 -0
- package/Tests/Utils/AiRemediation/KubectlWriteScope.test.ts +390 -0
- package/Tests/Utils/AiRemediation/KubectlWriteScopeCallerParity.test.ts +777 -0
- package/Tests/Utils/AiRemediation/KubectlWriteScopeClusterScoped.test.ts +613 -0
- package/Tests/Utils/AiRemediation/KubectlWriteScopeEntryPoint.test.ts +576 -0
- package/Tests/Utils/AiRemediation/KubectlWriteScopeKubectlSpellings.test.ts +752 -0
- package/Tests/Utils/AiRemediation/KubectlWriteScopeObjectWords.test.ts +358 -0
- package/Tests/Utils/AiRemediation/KubectlWriteScopeOverrides.test.ts +293 -0
- package/Tests/Utils/AiRemediation/KubectlWriteScopeParityCases.ts +598 -0
- package/Tests/Utils/AiRemediation/KubectlWriteScopePolicyParity.test.ts +403 -0
- package/Tests/Utils/Dashboard/DashboardClockComponent.test.ts +154 -5
- package/Tests/Utils/Incident/IncidentFromAlerts.test.ts +696 -0
- package/Tests/Utils/Monitor/IncomingEmailMonitorAddress.test.ts +478 -0
- package/Tests/Utils/Monitor/MonitorCheckScheduleUtil.test.ts +646 -0
- package/Tests/Utils/Monitor/MonitorOverviewCriteriaUtil.test.ts +292 -0
- package/Tests/Utils/Monitor/MonitorOverviewFamily.test.ts +274 -0
- package/Tests/Utils/Monitor/MonitorOverviewPresentationUtil.test.ts +3100 -0
- package/Tests/Utils/Monitor/MonitorOverviewProbeUtil.test.ts +1412 -0
- package/Tests/Utils/Monitor/MonitorOverviewTargetUtil.test.ts +374 -0
- package/Tests/Utils/Monitor/MonitorStatusHistoryUtil.test.ts +332 -0
- package/Tests/Utils/Monitor/MonitorUptimeSummaryUtil.test.ts +946 -0
- package/Tests/Utils/Rum/SessionIdentity.test.ts +94 -0
- package/Tests/Utils/Rum/SessionReplayWafCompatibility.test.ts +840 -0
- package/Tests/Utils/Rum/SessionReplayWireEncoding.test.ts +208 -0
- package/Tests/Utils/Rum/SessionTraceState.test.ts +239 -0
- package/Tests/Utils/Rum/UserFlow.test.ts +1010 -0
- package/Tests/Utils/StatusPage/MonitorGroupMergedDowntimeUtil.test.ts +217 -0
- package/Tests/Utils/StatusPage/ResourceUptime.test.ts +1272 -1
- package/Tests/Utils/StatusPage/UptimeDailyAggregateTotals.test.ts +298 -0
- package/Tests/Utils/StatusPage/UptimeDailyAggregateUtil.test.ts +649 -1
- package/Tests/Utils/StatusPage/UptimeDailyAggregateWindow.test.ts +314 -0
- package/Tests/Utils/Telemetry/AttributesJSON.test.ts +454 -0
- package/Tests/Utils/Uptime/DayUptimeGraphUtil.test.ts +418 -2
- package/Tests/Utils/Uptime/DayUptimeGraphUtilMidnightDst.test.ts +160 -0
- package/Tests/Utils/Uptime/DayUptimeGraphUtilTimezone.Auckland.test.ts +45 -0
- package/Tests/Utils/Uptime/DayUptimeGraphUtilTimezone.Kolkata.test.ts +40 -0
- package/Tests/Utils/Uptime/DayUptimeGraphUtilTimezone.London.test.ts +147 -0
- package/Tests/Utils/Uptime/DayUptimeGraphUtilTimezone.NewYork.test.ts +48 -0
- package/Tests/Utils/Uptime/DayUptimeGraphUtilTimezone.Tokyo.test.ts +39 -0
- package/Tests/Utils/Uptime/DayUptimeGraphUtilTimezoneCases.ts +1015 -0
- package/Tests/Utils/Uptime/UptimeUtil.test.ts +75 -0
- package/Tests/Utils/Uptime/UptimeUtilChronologicalOrder.test.ts +1279 -0
- package/Types/AutoRemediation/AiRemediationCommandPlan.ts +203 -5
- package/Types/Date.ts +121 -7
- package/Types/Email/EmailMessage.ts +8 -0
- package/Types/Email/EmailTemplateType.ts +1 -0
- package/Types/Exception/ExceptionMessages.ts +1 -0
- package/Types/Incident/IncidentAlertLink.ts +38 -0
- package/Types/Kubernetes/KubernetesClusterAiAccess.ts +488 -0
- package/Types/Kubernetes/KubernetesClusterAiAccessPermissions.ts +54 -0
- package/Types/Kubernetes/KubernetesClusterAiAccessToolNames.ts +17 -0
- package/Types/Monitor/DatabaseMonitor/DatabaseMonitorResponse.ts +9 -0
- package/Types/Monitor/DatabaseMonitor/SqlServerPlatform.ts +117 -0
- package/Types/Monitor/KubernetesAlertTemplates.ts +6 -5
- package/Types/Monitor/MonitorStepExceptionMonitor.ts +56 -0
- package/Types/Monitor/MonitorUptimeSummary.ts +113 -0
- package/Types/Monitor/Recommendation/MonitorRecommendationUtil.ts +11 -0
- package/Types/Permission.ts +48 -0
- package/Types/Rum/SessionReplay.ts +80 -8
- package/Types/Rum/SessionReplayApi.ts +44 -1
- package/Types/Rum/UserFlow.ts +187 -0
- package/Types/Rum/WebVitals.ts +52 -0
- package/Types/Runbook/RunbookStepType.ts +10 -0
- package/Types/Runbook/RunnerJobOrigin.ts +15 -0
- package/Types/SecurityEvent/Connectors/SecurityEventConnectorCatalog.ts +6 -2
- package/Types/StatusPage/MergedDowntimeTotals.ts +17 -0
- package/Types/StatusPage/PublicNoteSubscriberNotificationDefault.ts +148 -0
- package/Types/StatusPage/UptimeDailyAggregate.ts +15 -0
- package/Types/Telemetry/TelemetryIngestSurface.ts +9 -0
- package/Types/Timezone.ts +5 -0
- package/Types/TimezoneAlias.ts +385 -0
- package/Types/Workflow/Templates.ts +3041 -2
- package/Types/Workflow/WorkflowVariableOAuth.ts +476 -0
- package/Types/Workspace/WorkspaceNoteReaction.ts +132 -0
- package/Typings/Index.d.ts +24 -0
- package/UI/Components/AttributesJSON/AttributesJSONPreferences.ts +175 -0
- package/UI/Components/AttributesJSON/AttributesJSONView.tsx +138 -0
- package/UI/Components/AttributesJSON/AttributesViewToggle.tsx +79 -0
- package/UI/Components/AttributesJSON/BracesGlyph.tsx +30 -0
- package/UI/Components/AttributesJSON/CopyAttributesAsJSONButton.tsx +491 -0
- package/UI/Components/AttributesJSON/JSONHighlight.ts +77 -0
- package/UI/Components/Calendar/Calendar.css +83 -0
- package/UI/Components/Calendar/Calendar.tsx +136 -7
- package/UI/Components/Calendar/CalendarDayLayout.ts +236 -0
- package/UI/Components/Charts/ChartGroup/ChartGroup.tsx +23 -1
- package/UI/Components/Charts/Utils/HistogramSelection.ts +117 -0
- package/UI/Components/Charts/Utils/useHistogramRangeSelection.ts +269 -0
- package/UI/Components/Charts/Utils/useHistogramZoom.ts +26 -2
- package/UI/Components/Date/CustomTimeRangeModal.tsx +26 -3
- package/UI/Components/Detail/FieldLabel.tsx +8 -0
- package/UI/Components/Dropdown/Dropdown.tsx +58 -9
- package/UI/Components/Forms/Fields/FormField.tsx +49 -14
- package/UI/Components/Graphs/DayUptimeGraph.tsx +166 -25
- package/UI/Components/Graphs/UptimeBarTooltip.tsx +10 -2
- package/UI/Components/Graphs/UptimeDaySummary.tsx +8 -0
- package/UI/Components/InfoCard/InfoCard.tsx +47 -1
- package/UI/Components/LogsViewer/LogsViewer.tsx +52 -5
- package/UI/Components/LogsViewer/components/ColumnSelector.tsx +13 -2
- package/UI/Components/LogsViewer/components/KeyboardShortcutsHelp.tsx +13 -1
- package/UI/Components/LogsViewer/components/LogDetailsPanel.tsx +91 -76
- package/UI/Components/LogsViewer/components/LogsFacetSidebar.tsx +15 -1
- package/UI/Components/LogsViewer/components/LogsHistogram.tsx +28 -106
- package/UI/Components/LogsViewer/components/LogsViewerToolbar.tsx +54 -6
- package/UI/Components/LogsViewer/components/SavedViewsDropdown.tsx +8 -2
- package/UI/Components/LogsViewer/useLogsHistogram.ts +39 -6
- package/UI/Components/ModelTable/BaseModelTable.tsx +161 -31
- package/UI/Components/ModelTable/Column.ts +5 -0
- package/UI/Components/MonitorGraphs/Uptime.tsx +12 -0
- package/UI/Components/MonitorGraphs/UptimeBarDayModal.tsx +10 -2
- package/UI/Components/Page/ModelPage.tsx +59 -3
- package/UI/Components/Table/TableHeader.tsx +47 -2
- package/UI/Components/Table/Types/Column.ts +7 -0
- package/UI/Components/TelemetryViewer/TelemetryViewer.tsx +69 -5
- package/UI/Components/TelemetryViewer/components/TelemetryDetailPanel.tsx +12 -1
- package/UI/Components/TelemetryViewer/components/TelemetryFacetSidebar.tsx +15 -1
- package/UI/Components/TelemetryViewer/components/TelemetryHistogram.tsx +36 -104
- package/UI/Components/TelemetryViewer/components/TelemetrySearchBar.tsx +9 -1
- package/UI/Components/Tooltip/InfoTooltip.tsx +78 -0
- package/UI/Utils/ModelAPI/ProjectUsersModelAPI.ts +19 -1
- package/UI/Utils/PermissionGate.ts +11 -2
- package/UI/Utils/Timezone.ts +69 -28
- package/Utils/AI/InvestigationReport.ts +195 -25
- package/Utils/AiRemediation/KubectlOutputRedactor.ts +1724 -0
- package/Utils/AiRemediation/KubectlPolicy.ts +4136 -0
- package/Utils/AiRemediation/KubectlWaitBudget.ts +156 -0
- package/Utils/AiRemediation/KubectlWriteScope.ts +1964 -0
- package/Utils/Dashboard/Components/DashboardClockComponent.ts +7 -6
- package/Utils/Incident/IncidentFromAlerts.ts +516 -0
- package/Utils/Monitor/IncomingEmailMonitorAddress.ts +292 -0
- package/Utils/Monitor/MonitorCheckScheduleUtil.ts +654 -0
- package/Utils/Monitor/MonitorOverviewCriteriaUtil.ts +188 -0
- package/Utils/Monitor/MonitorOverviewFamily.ts +263 -0
- package/Utils/Monitor/MonitorOverviewPresentationUtil.ts +1958 -0
- package/Utils/Monitor/MonitorOverviewProbeUtil.ts +979 -0
- package/Utils/Monitor/MonitorOverviewTargetUtil.ts +299 -0
- package/Utils/Monitor/MonitorStatusHistoryUtil.ts +201 -0
- package/Utils/Monitor/MonitorUptimeSummaryUtil.ts +638 -0
- package/Utils/Rum/SessionIdentity.ts +44 -0
- package/Utils/Rum/SessionReplayWireEncoding.ts +137 -0
- package/Utils/Rum/SessionTraceState.ts +212 -0
- package/Utils/Rum/UserFlow.ts +1527 -0
- package/Utils/StatusPage/MonitorGroupMergedDowntimeUtil.ts +107 -0
- package/Utils/StatusPage/ResourceUptime.ts +99 -0
- package/Utils/StatusPage/UptimeDailyAggregateUtil.ts +197 -0
- package/Utils/Telemetry/AttributesJSON.ts +367 -0
- package/Utils/Uptime/DayUptimeGraphUtil.ts +165 -0
- package/Utils/Uptime/UptimeUtil.ts +122 -38
- package/build/dist/Models/DatabaseModels/AlertEpisodeMember.js +8 -1
- package/build/dist/Models/DatabaseModels/AlertEpisodeMember.js.map +1 -1
- package/build/dist/Models/DatabaseModels/AlertFeed.js +2 -0
- package/build/dist/Models/DatabaseModels/AlertFeed.js.map +1 -1
- package/build/dist/Models/DatabaseModels/AutoRemediationSuggestion.js +62 -0
- package/build/dist/Models/DatabaseModels/AutoRemediationSuggestion.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncidentAlert.js +553 -0
- package/build/dist/Models/DatabaseModels/IncidentAlert.js.map +1 -0
- package/build/dist/Models/DatabaseModels/IncidentEpisodeMember.js +8 -1
- package/build/dist/Models/DatabaseModels/IncidentEpisodeMember.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncidentEpisodePublicNote.js +10 -3
- package/build/dist/Models/DatabaseModels/IncidentEpisodePublicNote.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncidentFeed.js +2 -0
- package/build/dist/Models/DatabaseModels/IncidentFeed.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncidentPublicNote.js +10 -3
- package/build/dist/Models/DatabaseModels/IncidentPublicNote.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Index.js +2 -0
- package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
- package/build/dist/Models/DatabaseModels/KubernetesCluster.js +434 -0
- package/build/dist/Models/DatabaseModels/KubernetesCluster.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Monitor.js +49 -0
- package/build/dist/Models/DatabaseModels/Monitor.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Project.js +62 -0
- package/build/dist/Models/DatabaseModels/Project.js.map +1 -1
- package/build/dist/Models/DatabaseModels/RumApplication.js +53 -1
- package/build/dist/Models/DatabaseModels/RumApplication.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Runner.js +4 -4
- package/build/dist/Models/DatabaseModels/Runner.js.map +1 -1
- package/build/dist/Models/DatabaseModels/RunnerJob.js +66 -0
- package/build/dist/Models/DatabaseModels/RunnerJob.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ScheduledMaintenancePublicNote.js +11 -3
- package/build/dist/Models/DatabaseModels/ScheduledMaintenancePublicNote.js.map +1 -1
- package/build/dist/Models/DatabaseModels/WorkflowVariable.js +487 -3
- package/build/dist/Models/DatabaseModels/WorkflowVariable.js.map +1 -1
- package/build/dist/Models/DatabaseModels/WorkspaceProjectAuthToken.js +64 -16
- package/build/dist/Models/DatabaseModels/WorkspaceProjectAuthToken.js.map +1 -1
- package/build/dist/Server/API/AIInvestigationAPI.js +205 -0
- package/build/dist/Server/API/AIInvestigationAPI.js.map +1 -1
- package/build/dist/Server/API/AutoRemediationAPI.js +115 -2
- package/build/dist/Server/API/AutoRemediationAPI.js.map +1 -1
- package/build/dist/Server/API/CommonAPI.js +49 -0
- package/build/dist/Server/API/CommonAPI.js.map +1 -1
- package/build/dist/Server/API/KubernetesClusterAiAccessAPI.js +564 -0
- package/build/dist/Server/API/KubernetesClusterAiAccessAPI.js.map +1 -0
- package/build/dist/Server/API/MicrosoftTeamsAPI.js +465 -176
- package/build/dist/Server/API/MicrosoftTeamsAPI.js.map +1 -1
- package/build/dist/Server/API/MonitorAPI.js +107 -1
- package/build/dist/Server/API/MonitorAPI.js.map +1 -1
- package/build/dist/Server/API/OnCallScheduleTimelineAPI.js +5 -16
- package/build/dist/Server/API/OnCallScheduleTimelineAPI.js.map +1 -1
- package/build/dist/Server/API/SlackAPI.js +322 -78
- package/build/dist/Server/API/SlackAPI.js.map +1 -1
- package/build/dist/Server/API/StatusPageAPI.js +123 -17
- package/build/dist/Server/API/StatusPageAPI.js.map +1 -1
- package/build/dist/Server/API/TelemetryAPI.js +144 -5
- package/build/dist/Server/API/TelemetryAPI.js.map +1 -1
- package/build/dist/Server/API/UserTwoFactorBackupCodeAPI.js +1 -0
- package/build/dist/Server/API/UserTwoFactorBackupCodeAPI.js.map +1 -1
- package/build/dist/Server/API/WorkflowVariableAPI.js +109 -0
- package/build/dist/Server/API/WorkflowVariableAPI.js.map +1 -0
- package/build/dist/Server/Infrastructure/GlobalCache.js +29 -0
- package/build/dist/Server/Infrastructure/GlobalCache.js.map +1 -1
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1794300000000-AddOAuth2WorkflowVariables.js +38 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1794300000000-AddOAuth2WorkflowVariables.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1794400000000-AddKubernetesClusterAiAccess.js +54 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1794400000000-AddKubernetesClusterAiAccess.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1794500000000-AddIncomingEmailCustomAddressToMonitor.js +14 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1794500000000-AddIncomingEmailCustomAddressToMonitor.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1794600000000-AddAuthTokenExpiresAtToWorkspaceProjectAuthToken.js +12 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1794600000000-AddAuthTokenExpiresAtToWorkspaceProjectAuthToken.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1794700000000-RemoveAppAccessTokenFromWorkspaceProjectAuthTokenMiscData.js +32 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1794700000000-RemoveAppAccessTokenFromWorkspaceProjectAuthTokenMiscData.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1794800000000-AddSessionReplaySameOriginTracePropagation.js +20 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1794800000000-AddSessionReplaySameOriginTracePropagation.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1794900000000-AddIncidentAlert.js +42 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1794900000000-AddIncidentAlert.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +14 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
- package/build/dist/Server/Middleware/MasterAdminAuthorization.js +21 -0
- package/build/dist/Server/Middleware/MasterAdminAuthorization.js.map +1 -1
- package/build/dist/Server/Middleware/TelemetryIngest.js +32 -2
- package/build/dist/Server/Middleware/TelemetryIngest.js.map +1 -1
- package/build/dist/Server/Middleware/UserAuthorization.js +39 -6
- package/build/dist/Server/Middleware/UserAuthorization.js.map +1 -1
- package/build/dist/Server/Services/AIAgentService.js +1 -0
- package/build/dist/Server/Services/AIAgentService.js.map +1 -1
- package/build/dist/Server/Services/AccessTokenService.js +87 -42
- package/build/dist/Server/Services/AccessTokenService.js.map +1 -1
- package/build/dist/Server/Services/AlertEpisodeMemberService.js +4 -0
- package/build/dist/Server/Services/AlertEpisodeMemberService.js.map +1 -1
- package/build/dist/Server/Services/AlertEpisodeService.js +12 -1
- package/build/dist/Server/Services/AlertEpisodeService.js.map +1 -1
- package/build/dist/Server/Services/AlertService.js +110 -23
- package/build/dist/Server/Services/AlertService.js.map +1 -1
- package/build/dist/Server/Services/AutoRemediationRuleEngineService.js +716 -30
- package/build/dist/Server/Services/AutoRemediationRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/AutoRemediationRuleService.js +100 -0
- package/build/dist/Server/Services/AutoRemediationRuleService.js.map +1 -1
- package/build/dist/Server/Services/BillingService.js +1 -0
- package/build/dist/Server/Services/BillingService.js.map +1 -1
- package/build/dist/Server/Services/InboundEmail/Providers/SendGridInboundProvider.js +11 -16
- package/build/dist/Server/Services/InboundEmail/Providers/SendGridInboundProvider.js.map +1 -1
- package/build/dist/Server/Services/IncidentAlertService.js +1370 -0
- package/build/dist/Server/Services/IncidentAlertService.js.map +1 -0
- package/build/dist/Server/Services/IncidentEpisodeMemberService.js +4 -0
- package/build/dist/Server/Services/IncidentEpisodeMemberService.js.map +1 -1
- package/build/dist/Server/Services/IncidentEpisodePublicNoteService.js +48 -0
- package/build/dist/Server/Services/IncidentEpisodePublicNoteService.js.map +1 -1
- package/build/dist/Server/Services/IncidentEpisodeRoleMemberService.js +21 -0
- package/build/dist/Server/Services/IncidentEpisodeRoleMemberService.js.map +1 -1
- package/build/dist/Server/Services/IncidentEpisodeService.js +12 -1
- package/build/dist/Server/Services/IncidentEpisodeService.js.map +1 -1
- package/build/dist/Server/Services/IncidentGroupingEngineService.js +8 -0
- package/build/dist/Server/Services/IncidentGroupingEngineService.js.map +1 -1
- package/build/dist/Server/Services/IncidentMemberService.js +14 -0
- package/build/dist/Server/Services/IncidentMemberService.js.map +1 -1
- package/build/dist/Server/Services/IncidentPublicNoteService.js +48 -0
- package/build/dist/Server/Services/IncidentPublicNoteService.js.map +1 -1
- package/build/dist/Server/Services/IncidentService.js +263 -33
- package/build/dist/Server/Services/IncidentService.js.map +1 -1
- package/build/dist/Server/Services/IncidentStateTimelineService.js +33 -0
- package/build/dist/Server/Services/IncidentStateTimelineService.js.map +1 -1
- package/build/dist/Server/Services/IncidentTemplateService.js +68 -4
- package/build/dist/Server/Services/IncidentTemplateService.js.map +1 -1
- package/build/dist/Server/Services/Index.js +2 -0
- package/build/dist/Server/Services/Index.js.map +1 -1
- package/build/dist/Server/Services/KubernetesClusterAiAccessService.js +1470 -0
- package/build/dist/Server/Services/KubernetesClusterAiAccessService.js.map +1 -0
- package/build/dist/Server/Services/KubernetesClusterService.js +1097 -0
- package/build/dist/Server/Services/KubernetesClusterService.js.map +1 -1
- package/build/dist/Server/Services/LogAggregationService.js +14 -6
- package/build/dist/Server/Services/LogAggregationService.js.map +1 -1
- package/build/dist/Server/Services/MonitorService.js +487 -48
- package/build/dist/Server/Services/MonitorService.js.map +1 -1
- package/build/dist/Server/Services/MonitorStatusTimelineService.js +540 -3
- package/build/dist/Server/Services/MonitorStatusTimelineService.js.map +1 -1
- package/build/dist/Server/Services/OnCallDutyPolicyEscalationRuleScheduleService.js +2 -0
- package/build/dist/Server/Services/OnCallDutyPolicyEscalationRuleScheduleService.js.map +1 -1
- package/build/dist/Server/Services/OnCallDutyPolicyEscalationRuleTeamService.js +2 -0
- package/build/dist/Server/Services/OnCallDutyPolicyEscalationRuleTeamService.js.map +1 -1
- package/build/dist/Server/Services/OnCallDutyPolicyEscalationRuleUserService.js +2 -0
- package/build/dist/Server/Services/OnCallDutyPolicyEscalationRuleUserService.js.map +1 -1
- package/build/dist/Server/Services/OnCallDutyPolicyScheduleService.js +3 -0
- package/build/dist/Server/Services/OnCallDutyPolicyScheduleService.js.map +1 -1
- package/build/dist/Server/Services/OnCallNotificationAlertingService.js +29 -7
- package/build/dist/Server/Services/OnCallNotificationAlertingService.js.map +1 -1
- package/build/dist/Server/Services/OnCallSetupReminderService.js +1 -0
- package/build/dist/Server/Services/OnCallSetupReminderService.js.map +1 -1
- package/build/dist/Server/Services/ProbeService.js +7 -1
- package/build/dist/Server/Services/ProbeService.js.map +1 -1
- package/build/dist/Server/Services/ProjectService.js +11 -1
- package/build/dist/Server/Services/ProjectService.js.map +1 -1
- package/build/dist/Server/Services/RunbookCredentialService.js +24 -0
- package/build/dist/Server/Services/RunbookCredentialService.js.map +1 -1
- package/build/dist/Server/Services/RunbookSecretService.js +44 -0
- package/build/dist/Server/Services/RunbookSecretService.js.map +1 -1
- package/build/dist/Server/Services/RunnerJobService.js +641 -21
- package/build/dist/Server/Services/RunnerJobService.js.map +1 -1
- package/build/dist/Server/Services/RunnerService.js +344 -5
- package/build/dist/Server/Services/RunnerService.js.map +1 -1
- package/build/dist/Server/Services/ScheduledMaintenancePublicNoteService.js +48 -0
- package/build/dist/Server/Services/ScheduledMaintenancePublicNoteService.js.map +1 -1
- package/build/dist/Server/Services/ScheduledMaintenanceService.js +102 -20
- package/build/dist/Server/Services/ScheduledMaintenanceService.js.map +1 -1
- package/build/dist/Server/Services/ScheduledMaintenanceTemplateService.js +67 -4
- package/build/dist/Server/Services/ScheduledMaintenanceTemplateService.js.map +1 -1
- package/build/dist/Server/Services/ServiceLevelObjectiveService.js +12 -1
- package/build/dist/Server/Services/ServiceLevelObjectiveService.js.map +1 -1
- package/build/dist/Server/Services/StatusPagePrivateUserService.js +1 -0
- package/build/dist/Server/Services/StatusPagePrivateUserService.js.map +1 -1
- package/build/dist/Server/Services/StatusPageService.js +230 -32
- package/build/dist/Server/Services/StatusPageService.js.map +1 -1
- package/build/dist/Server/Services/StatusPageSubscriberService.js +4 -0
- package/build/dist/Server/Services/StatusPageSubscriberService.js.map +1 -1
- package/build/dist/Server/Services/TeamMemberService.js +270 -11
- package/build/dist/Server/Services/TeamMemberService.js.map +1 -1
- package/build/dist/Server/Services/TraceAggregationService.js +10 -6
- package/build/dist/Server/Services/TraceAggregationService.js.map +1 -1
- package/build/dist/Server/Services/UserEmailService.js +1 -0
- package/build/dist/Server/Services/UserEmailService.js.map +1 -1
- package/build/dist/Server/Services/UserNotificationMethodAdminService.js +1 -0
- package/build/dist/Server/Services/UserNotificationMethodAdminService.js.map +1 -1
- package/build/dist/Server/Services/UserNotificationRuleAdminService.js +1 -0
- package/build/dist/Server/Services/UserNotificationRuleAdminService.js.map +1 -1
- package/build/dist/Server/Services/UserNotificationRuleService.js +4 -0
- package/build/dist/Server/Services/UserNotificationRuleService.js.map +1 -1
- package/build/dist/Server/Services/UserService.js +107 -1
- package/build/dist/Server/Services/UserService.js.map +1 -1
- package/build/dist/Server/Services/WorkflowVariableService.js +396 -7
- package/build/dist/Server/Services/WorkflowVariableService.js.map +1 -1
- package/build/dist/Server/Services/WorkspaceNotificationRuleService.js +463 -7
- package/build/dist/Server/Services/WorkspaceNotificationRuleService.js.map +1 -1
- package/build/dist/Server/Services/WorkspaceProjectAuthTokenService.js +144 -2
- package/build/dist/Server/Services/WorkspaceProjectAuthTokenService.js.map +1 -1
- package/build/dist/Server/Types/Database/QueryHelper.js +20 -0
- package/build/dist/Server/Types/Database/QueryHelper.js.map +1 -1
- package/build/dist/Server/Types/Markdown.js +394 -27
- package/build/dist/Server/Types/Markdown.js.map +1 -1
- package/build/dist/Server/Utils/AI/ClusterAccess/ClusterAccessContext.js +123 -0
- package/build/dist/Server/Utils/AI/ClusterAccess/ClusterAccessContext.js.map +1 -0
- package/build/dist/Server/Utils/AI/ClusterAccess/KubectlInvestigationToolkit.js +344 -0
- package/build/dist/Server/Utils/AI/ClusterAccess/KubectlInvestigationToolkit.js.map +1 -0
- package/build/dist/Server/Utils/AI/ClusterAccess/KubectlJobRunner.js +587 -0
- package/build/dist/Server/Utils/AI/ClusterAccess/KubectlJobRunner.js.map +1 -0
- package/build/dist/Server/Utils/AI/CodeFix/CodeFixAgentAuth.js +18 -2
- package/build/dist/Server/Utils/AI/CodeFix/CodeFixAgentAuth.js.map +1 -1
- package/build/dist/Server/Utils/AI/Remediation/RemediationCommandTools.js +1380 -239
- package/build/dist/Server/Utils/AI/Remediation/RemediationCommandTools.js.map +1 -1
- package/build/dist/Server/Utils/AI/Remediation/RemediationExecutionRunner.js +1099 -68
- package/build/dist/Server/Utils/AI/Remediation/RemediationExecutionRunner.js.map +1 -1
- package/build/dist/Server/Utils/AI/SRE/AIInvestigationEngine.js +88 -6
- package/build/dist/Server/Utils/AI/SRE/AIInvestigationEngine.js.map +1 -1
- package/build/dist/Server/Utils/AI/SRE/AlertInvestigationRunner.js +45 -11
- package/build/dist/Server/Utils/AI/SRE/AlertInvestigationRunner.js.map +1 -1
- package/build/dist/Server/Utils/AI/SRE/IncidentInvestigationRunner.js +41 -11
- package/build/dist/Server/Utils/AI/SRE/IncidentInvestigationRunner.js.map +1 -1
- package/build/dist/Server/Utils/AI/Toolbox/AIActionTools.js +11 -4
- package/build/dist/Server/Utils/AI/Toolbox/AIActionTools.js.map +1 -1
- package/build/dist/Server/Utils/AI/Toolbox/ResourceTools.js +4 -2
- package/build/dist/Server/Utils/AI/Toolbox/ResourceTools.js.map +1 -1
- package/build/dist/Server/Utils/AutoRemediation/CommandPlanExecutor.js +997 -141
- package/build/dist/Server/Utils/AutoRemediation/CommandPlanExecutor.js.map +1 -1
- package/build/dist/Server/Utils/AutoRemediation/RemediationVerifier.js +299 -4
- package/build/dist/Server/Utils/AutoRemediation/RemediationVerifier.js.map +1 -1
- package/build/dist/Server/Utils/Database/AffectedResourceRelations.js +120 -0
- package/build/dist/Server/Utils/Database/AffectedResourceRelations.js.map +1 -0
- package/build/dist/Server/Utils/Database/ProjectScopedReferenceValidator.js +160 -1
- package/build/dist/Server/Utils/Database/ProjectScopedReferenceValidator.js.map +1 -1
- package/build/dist/Server/Utils/EmailRollup/EmailRollupFlushRunner.js +1 -0
- package/build/dist/Server/Utils/EmailRollup/EmailRollupFlushRunner.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorAlert.js +59 -12
- package/build/dist/Server/Utils/Monitor/MonitorAlert.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaObservationBuilder.js +5 -1
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaObservationBuilder.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorIncident.js +84 -22
- package/build/dist/Server/Utils/Monitor/MonitorIncident.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorPayloadRedaction.js +70 -5
- package/build/dist/Server/Utils/Monitor/MonitorPayloadRedaction.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/ProbeMonitorsNotification.js +249 -0
- package/build/dist/Server/Utils/Monitor/ProbeMonitorsNotification.js.map +1 -0
- package/build/dist/Server/Utils/OnCall/OnCallShiftReminderRunner.js +1 -0
- package/build/dist/Server/Utils/OnCall/OnCallShiftReminderRunner.js.map +1 -1
- package/build/dist/Server/Utils/PushNotificationUtil.js +27 -0
- package/build/dist/Server/Utils/PushNotificationUtil.js.map +1 -1
- package/build/dist/Server/Utils/Rules/OwnerRuleAssignment.js +26 -3
- package/build/dist/Server/Utils/Rules/OwnerRuleAssignment.js.map +1 -1
- package/build/dist/Server/Utils/Runbook/RunbookExecutePermission.js +38 -3
- package/build/dist/Server/Utils/Runbook/RunbookExecutePermission.js.map +1 -1
- package/build/dist/Server/Utils/SessionReplay/SessionReplayGateCache.js +8 -0
- package/build/dist/Server/Utils/SessionReplay/SessionReplayGateCache.js.map +1 -1
- package/build/dist/Server/Utils/SessionReplay/SessionReplayReadService.js +143 -23
- package/build/dist/Server/Utils/SessionReplay/SessionReplayReadService.js.map +1 -1
- package/build/dist/Server/Utils/SessionReplay/SessionReplayUserFlowReadService.js +406 -0
- package/build/dist/Server/Utils/SessionReplay/SessionReplayUserFlowReadService.js.map +1 -0
- package/build/dist/Server/Utils/StartServer.js +4 -3
- package/build/dist/Server/Utils/StartServer.js.map +1 -1
- package/build/dist/Server/Utils/TeamMember/ProjectLeaveResourceCleanup.js +382 -0
- package/build/dist/Server/Utils/TeamMember/ProjectLeaveResourceCleanup.js.map +1 -0
- package/build/dist/Server/Utils/TwoFactorBackupCodeNotification.js +1 -0
- package/build/dist/Server/Utils/TwoFactorBackupCodeNotification.js.map +1 -1
- package/build/dist/Server/Utils/UserPermission/UserPermission.js +10 -0
- package/build/dist/Server/Utils/UserPermission/UserPermission.js.map +1 -1
- package/build/dist/Server/Utils/Workflow/OAuth2TokenClient.js +447 -0
- package/build/dist/Server/Utils/Workflow/OAuth2TokenClient.js.map +1 -0
- package/build/dist/Server/Utils/Workflow/WorkflowVariableOAuthToken.js +202 -0
- package/build/dist/Server/Utils/Workflow/WorkflowVariableOAuthToken.js.map +1 -0
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/Alert.js +39 -1
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/Alert.js.map +1 -1
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/AlertEpisode.js +44 -4
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/AlertEpisode.js.map +1 -1
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/Incident.js +150 -191
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/Incident.js.map +1 -1
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/IncidentEpisode.js +44 -4
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/IncidentEpisode.js.map +1 -1
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/Monitor.js +39 -17
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/Monitor.js.map +1 -1
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/ScheduledMaintenance.js +151 -145
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/ScheduledMaintenance.js.map +1 -1
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.js +221 -127
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.js.map +1 -1
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsServiceUrl.js +91 -0
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsServiceUrl.js.map +1 -0
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/ReactionNoteSync.js +673 -0
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/ReactionNoteSync.js.map +1 -0
- package/build/dist/Server/Utils/Workspace/Slack/Actions/ActionTypes.js +3 -9
- package/build/dist/Server/Utils/Workspace/Slack/Actions/ActionTypes.js.map +1 -1
- package/build/dist/Server/Utils/Workspace/Slack/Actions/Alert.js +65 -166
- package/build/dist/Server/Utils/Workspace/Slack/Actions/Alert.js.map +1 -1
- package/build/dist/Server/Utils/Workspace/Slack/Actions/AlertEpisode.js +63 -157
- package/build/dist/Server/Utils/Workspace/Slack/Actions/AlertEpisode.js.map +1 -1
- package/build/dist/Server/Utils/Workspace/Slack/Actions/Auth.js +23 -3
- package/build/dist/Server/Utils/Workspace/Slack/Actions/Auth.js.map +1 -1
- package/build/dist/Server/Utils/Workspace/Slack/Actions/Authorization.js +92 -0
- package/build/dist/Server/Utils/Workspace/Slack/Actions/Authorization.js.map +1 -0
- package/build/dist/Server/Utils/Workspace/Slack/Actions/Incident.js +81 -210
- package/build/dist/Server/Utils/Workspace/Slack/Actions/Incident.js.map +1 -1
- package/build/dist/Server/Utils/Workspace/Slack/Actions/IncidentEpisode.js +68 -138
- package/build/dist/Server/Utils/Workspace/Slack/Actions/IncidentEpisode.js.map +1 -1
- package/build/dist/Server/Utils/Workspace/Slack/Actions/ReactionNote.js +240 -0
- package/build/dist/Server/Utils/Workspace/Slack/Actions/ReactionNote.js.map +1 -0
- package/build/dist/Server/Utils/Workspace/Slack/Actions/ScheduledMaintenance.js +85 -212
- package/build/dist/Server/Utils/Workspace/Slack/Actions/ScheduledMaintenance.js.map +1 -1
- package/build/dist/Server/Utils/Workspace/Slack/Slack.js +60 -17
- package/build/dist/Server/Utils/Workspace/Slack/Slack.js.map +1 -1
- package/build/dist/Server/Utils/Workspace/Slack/app-manifest.json +2 -0
- package/build/dist/Server/Utils/Workspace/Workspace.js +134 -41
- package/build/dist/Server/Utils/Workspace/Workspace.js.map +1 -1
- package/build/dist/Server/Utils/Workspace/WorkspaceActionAuthorization.js +197 -0
- package/build/dist/Server/Utils/Workspace/WorkspaceActionAuthorization.js.map +1 -0
- package/build/dist/Server/Utils/Workspace/WorkspaceBase.js +32 -0
- package/build/dist/Server/Utils/Workspace/WorkspaceBase.js.map +1 -1
- package/build/dist/Server/Utils/Workspace/WorkspaceOAuthState.js +199 -0
- package/build/dist/Server/Utils/Workspace/WorkspaceOAuthState.js.map +1 -0
- package/build/dist/Server/Utils/Workspace/WorkspaceProjectReferenceValidator.js +91 -0
- package/build/dist/Server/Utils/Workspace/WorkspaceProjectReferenceValidator.js.map +1 -0
- package/build/dist/Server/Utils/Workspace/WorkspaceReactionNote.js +450 -0
- package/build/dist/Server/Utils/Workspace/WorkspaceReactionNote.js.map +1 -0
- package/build/dist/Types/AutoRemediation/AiRemediationCommandPlan.js +103 -5
- package/build/dist/Types/AutoRemediation/AiRemediationCommandPlan.js.map +1 -1
- package/build/dist/Types/Date.js +97 -7
- package/build/dist/Types/Date.js.map +1 -1
- package/build/dist/Types/Email/EmailTemplateType.js +1 -0
- package/build/dist/Types/Email/EmailTemplateType.js.map +1 -1
- package/build/dist/Types/Exception/ExceptionMessages.js +1 -0
- package/build/dist/Types/Exception/ExceptionMessages.js.map +1 -1
- package/build/dist/Types/Incident/IncidentAlertLink.js +34 -0
- package/build/dist/Types/Incident/IncidentAlertLink.js.map +1 -0
- package/build/dist/Types/Kubernetes/KubernetesClusterAiAccess.js +245 -0
- package/build/dist/Types/Kubernetes/KubernetesClusterAiAccess.js.map +1 -0
- package/build/dist/Types/Kubernetes/KubernetesClusterAiAccessPermissions.js +49 -0
- package/build/dist/Types/Kubernetes/KubernetesClusterAiAccessPermissions.js.map +1 -0
- package/build/dist/Types/Kubernetes/KubernetesClusterAiAccessToolNames.js +16 -0
- package/build/dist/Types/Kubernetes/KubernetesClusterAiAccessToolNames.js.map +1 -0
- package/build/dist/Types/Monitor/DatabaseMonitor/SqlServerPlatform.js +104 -0
- package/build/dist/Types/Monitor/DatabaseMonitor/SqlServerPlatform.js.map +1 -0
- package/build/dist/Types/Monitor/KubernetesAlertTemplates.js +6 -5
- package/build/dist/Types/Monitor/KubernetesAlertTemplates.js.map +1 -1
- package/build/dist/Types/Monitor/MonitorStepExceptionMonitor.js +32 -0
- package/build/dist/Types/Monitor/MonitorStepExceptionMonitor.js.map +1 -1
- package/build/dist/Types/Monitor/MonitorUptimeSummary.js +52 -0
- package/build/dist/Types/Monitor/MonitorUptimeSummary.js.map +1 -0
- package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationUtil.js +9 -1
- package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationUtil.js.map +1 -1
- package/build/dist/Types/Permission.js +42 -0
- package/build/dist/Types/Permission.js.map +1 -1
- package/build/dist/Types/Rum/SessionReplay.js +52 -2
- package/build/dist/Types/Rum/SessionReplay.js.map +1 -1
- package/build/dist/Types/Rum/SessionReplayApi.js +11 -0
- package/build/dist/Types/Rum/SessionReplayApi.js.map +1 -1
- package/build/dist/Types/Rum/UserFlow.js +115 -0
- package/build/dist/Types/Rum/UserFlow.js.map +1 -0
- package/build/dist/Types/Rum/WebVitals.js +25 -0
- package/build/dist/Types/Rum/WebVitals.js.map +1 -1
- package/build/dist/Types/Runbook/RunbookStepType.js +10 -0
- package/build/dist/Types/Runbook/RunbookStepType.js.map +1 -1
- package/build/dist/Types/Runbook/RunnerJobOrigin.js +14 -0
- package/build/dist/Types/Runbook/RunnerJobOrigin.js.map +1 -1
- package/build/dist/Types/SecurityEvent/Connectors/SecurityEventConnectorCatalog.js +2 -2
- package/build/dist/Types/SecurityEvent/Connectors/SecurityEventConnectorCatalog.js.map +1 -1
- package/build/dist/Types/StatusPage/MergedDowntimeTotals.js +2 -0
- package/build/dist/Types/StatusPage/MergedDowntimeTotals.js.map +1 -0
- package/build/dist/Types/StatusPage/PublicNoteSubscriberNotificationDefault.js +65 -0
- package/build/dist/Types/StatusPage/PublicNoteSubscriberNotificationDefault.js.map +1 -0
- package/build/dist/Types/Telemetry/TelemetryIngestSurface.js +8 -0
- package/build/dist/Types/Telemetry/TelemetryIngestSurface.js.map +1 -1
- package/build/dist/Types/Timezone.js +5 -0
- package/build/dist/Types/Timezone.js.map +1 -1
- package/build/dist/Types/TimezoneAlias.js +340 -0
- package/build/dist/Types/TimezoneAlias.js.map +1 -0
- package/build/dist/Types/Workflow/Templates.js +2694 -2
- package/build/dist/Types/Workflow/Templates.js.map +1 -1
- package/build/dist/Types/Workflow/WorkflowVariableOAuth.js +314 -0
- package/build/dist/Types/Workflow/WorkflowVariableOAuth.js.map +1 -0
- package/build/dist/Types/Workspace/WorkspaceNoteReaction.js +98 -0
- package/build/dist/Types/Workspace/WorkspaceNoteReaction.js.map +1 -0
- package/build/dist/UI/Components/AttributesJSON/AttributesJSONPreferences.js +95 -0
- package/build/dist/UI/Components/AttributesJSON/AttributesJSONPreferences.js.map +1 -0
- package/build/dist/UI/Components/AttributesJSON/AttributesJSONView.js +44 -0
- package/build/dist/UI/Components/AttributesJSON/AttributesJSONView.js.map +1 -0
- package/build/dist/UI/Components/AttributesJSON/AttributesViewToggle.js +27 -0
- package/build/dist/UI/Components/AttributesJSON/AttributesViewToggle.js.map +1 -0
- package/build/dist/UI/Components/AttributesJSON/BracesGlyph.js +9 -0
- package/build/dist/UI/Components/AttributesJSON/BracesGlyph.js.map +1 -0
- package/build/dist/UI/Components/AttributesJSON/CopyAttributesAsJSONButton.js +260 -0
- package/build/dist/UI/Components/AttributesJSON/CopyAttributesAsJSONButton.js.map +1 -0
- package/build/dist/UI/Components/AttributesJSON/JSONHighlight.js +56 -0
- package/build/dist/UI/Components/AttributesJSON/JSONHighlight.js.map +1 -0
- package/build/dist/UI/Components/Calendar/Calendar.js +94 -7
- package/build/dist/UI/Components/Calendar/Calendar.js.map +1 -1
- package/build/dist/UI/Components/Calendar/CalendarDayLayout.js +136 -0
- package/build/dist/UI/Components/Calendar/CalendarDayLayout.js.map +1 -0
- package/build/dist/UI/Components/Charts/ChartGroup/ChartGroup.js +1 -1
- package/build/dist/UI/Components/Charts/ChartGroup/ChartGroup.js.map +1 -1
- package/build/dist/UI/Components/Charts/Utils/HistogramSelection.js +72 -0
- package/build/dist/UI/Components/Charts/Utils/HistogramSelection.js.map +1 -0
- package/build/dist/UI/Components/Charts/Utils/useHistogramRangeSelection.js +178 -0
- package/build/dist/UI/Components/Charts/Utils/useHistogramRangeSelection.js.map +1 -0
- package/build/dist/UI/Components/Charts/Utils/useHistogramZoom.js +13 -1
- package/build/dist/UI/Components/Charts/Utils/useHistogramZoom.js.map +1 -1
- package/build/dist/UI/Components/Date/CustomTimeRangeModal.js +20 -4
- package/build/dist/UI/Components/Date/CustomTimeRangeModal.js.map +1 -1
- package/build/dist/UI/Components/Detail/FieldLabel.js +2 -0
- package/build/dist/UI/Components/Detail/FieldLabel.js.map +1 -1
- package/build/dist/UI/Components/Dropdown/Dropdown.js +33 -9
- package/build/dist/UI/Components/Dropdown/Dropdown.js.map +1 -1
- package/build/dist/UI/Components/Forms/Fields/FormField.js +36 -13
- package/build/dist/UI/Components/Forms/Fields/FormField.js.map +1 -1
- package/build/dist/UI/Components/Graphs/DayUptimeGraph.js +117 -11
- package/build/dist/UI/Components/Graphs/DayUptimeGraph.js.map +1 -1
- package/build/dist/UI/Components/Graphs/UptimeBarTooltip.js +5 -1
- package/build/dist/UI/Components/Graphs/UptimeBarTooltip.js.map +1 -1
- package/build/dist/UI/Components/Graphs/UptimeDaySummary.js.map +1 -1
- package/build/dist/UI/Components/InfoCard/InfoCard.js +22 -1
- package/build/dist/UI/Components/InfoCard/InfoCard.js.map +1 -1
- package/build/dist/UI/Components/LogsViewer/LogsViewer.js +36 -8
- package/build/dist/UI/Components/LogsViewer/LogsViewer.js.map +1 -1
- package/build/dist/UI/Components/LogsViewer/components/ColumnSelector.js +10 -2
- package/build/dist/UI/Components/LogsViewer/components/ColumnSelector.js.map +1 -1
- package/build/dist/UI/Components/LogsViewer/components/KeyboardShortcutsHelp.js +9 -1
- package/build/dist/UI/Components/LogsViewer/components/KeyboardShortcutsHelp.js.map +1 -1
- package/build/dist/UI/Components/LogsViewer/components/LogDetailsPanel.js +16 -15
- package/build/dist/UI/Components/LogsViewer/components/LogDetailsPanel.js.map +1 -1
- package/build/dist/UI/Components/LogsViewer/components/LogsFacetSidebar.js +1 -1
- package/build/dist/UI/Components/LogsViewer/components/LogsFacetSidebar.js.map +1 -1
- package/build/dist/UI/Components/LogsViewer/components/LogsHistogram.js +14 -74
- package/build/dist/UI/Components/LogsViewer/components/LogsHistogram.js.map +1 -1
- package/build/dist/UI/Components/LogsViewer/components/LogsViewerToolbar.js +22 -5
- package/build/dist/UI/Components/LogsViewer/components/LogsViewerToolbar.js.map +1 -1
- package/build/dist/UI/Components/LogsViewer/components/SavedViewsDropdown.js +9 -2
- package/build/dist/UI/Components/LogsViewer/components/SavedViewsDropdown.js.map +1 -1
- package/build/dist/UI/Components/LogsViewer/useLogsHistogram.js +16 -5
- package/build/dist/UI/Components/LogsViewer/useLogsHistogram.js.map +1 -1
- package/build/dist/UI/Components/ModelTable/BaseModelTable.js +89 -22
- package/build/dist/UI/Components/ModelTable/BaseModelTable.js.map +1 -1
- package/build/dist/UI/Components/MonitorGraphs/Uptime.js +7 -1
- package/build/dist/UI/Components/MonitorGraphs/Uptime.js.map +1 -1
- package/build/dist/UI/Components/MonitorGraphs/UptimeBarDayModal.js +5 -1
- package/build/dist/UI/Components/MonitorGraphs/UptimeBarDayModal.js.map +1 -1
- package/build/dist/UI/Components/Page/ModelPage.js +37 -3
- package/build/dist/UI/Components/Page/ModelPage.js.map +1 -1
- package/build/dist/UI/Components/Table/TableHeader.js +18 -2
- package/build/dist/UI/Components/Table/TableHeader.js.map +1 -1
- package/build/dist/UI/Components/TelemetryViewer/TelemetryViewer.js +27 -6
- package/build/dist/UI/Components/TelemetryViewer/TelemetryViewer.js.map +1 -1
- package/build/dist/UI/Components/TelemetryViewer/components/TelemetryDetailPanel.js +7 -1
- package/build/dist/UI/Components/TelemetryViewer/components/TelemetryDetailPanel.js.map +1 -1
- package/build/dist/UI/Components/TelemetryViewer/components/TelemetryFacetSidebar.js +1 -1
- package/build/dist/UI/Components/TelemetryViewer/components/TelemetryFacetSidebar.js.map +1 -1
- package/build/dist/UI/Components/TelemetryViewer/components/TelemetryHistogram.js +17 -77
- package/build/dist/UI/Components/TelemetryViewer/components/TelemetryHistogram.js.map +1 -1
- package/build/dist/UI/Components/TelemetryViewer/components/TelemetrySearchBar.js +10 -1
- package/build/dist/UI/Components/TelemetryViewer/components/TelemetrySearchBar.js.map +1 -1
- package/build/dist/UI/Components/Tooltip/InfoTooltip.js +28 -0
- package/build/dist/UI/Components/Tooltip/InfoTooltip.js.map +1 -0
- package/build/dist/UI/Utils/ModelAPI/ProjectUsersModelAPI.js +15 -1
- package/build/dist/UI/Utils/ModelAPI/ProjectUsersModelAPI.js.map +1 -1
- package/build/dist/UI/Utils/PermissionGate.js +4 -2
- package/build/dist/UI/Utils/PermissionGate.js.map +1 -1
- package/build/dist/UI/Utils/Timezone.js +52 -17
- package/build/dist/UI/Utils/Timezone.js.map +1 -1
- package/build/dist/Utils/AI/InvestigationReport.js +116 -21
- package/build/dist/Utils/AI/InvestigationReport.js.map +1 -1
- package/build/dist/Utils/AiRemediation/KubectlOutputRedactor.js +1209 -0
- package/build/dist/Utils/AiRemediation/KubectlOutputRedactor.js.map +1 -0
- package/build/dist/Utils/AiRemediation/KubectlPolicy.js +2973 -0
- package/build/dist/Utils/AiRemediation/KubectlPolicy.js.map +1 -0
- package/build/dist/Utils/AiRemediation/KubectlWaitBudget.js +99 -0
- package/build/dist/Utils/AiRemediation/KubectlWaitBudget.js.map +1 -0
- package/build/dist/Utils/AiRemediation/KubectlWriteScope.js +1429 -0
- package/build/dist/Utils/AiRemediation/KubectlWriteScope.js.map +1 -0
- package/build/dist/Utils/Dashboard/Components/DashboardClockComponent.js +7 -6
- package/build/dist/Utils/Dashboard/Components/DashboardClockComponent.js.map +1 -1
- package/build/dist/Utils/Incident/IncidentFromAlerts.js +306 -0
- package/build/dist/Utils/Incident/IncidentFromAlerts.js.map +1 -0
- package/build/dist/Utils/Monitor/IncomingEmailMonitorAddress.js +214 -0
- package/build/dist/Utils/Monitor/IncomingEmailMonitorAddress.js.map +1 -0
- package/build/dist/Utils/Monitor/MonitorCheckScheduleUtil.js +471 -0
- package/build/dist/Utils/Monitor/MonitorCheckScheduleUtil.js.map +1 -0
- package/build/dist/Utils/Monitor/MonitorOverviewCriteriaUtil.js +107 -0
- package/build/dist/Utils/Monitor/MonitorOverviewCriteriaUtil.js.map +1 -0
- package/build/dist/Utils/Monitor/MonitorOverviewFamily.js +191 -0
- package/build/dist/Utils/Monitor/MonitorOverviewFamily.js.map +1 -0
- package/build/dist/Utils/Monitor/MonitorOverviewPresentationUtil.js +1259 -0
- package/build/dist/Utils/Monitor/MonitorOverviewPresentationUtil.js.map +1 -0
- package/build/dist/Utils/Monitor/MonitorOverviewProbeUtil.js +593 -0
- package/build/dist/Utils/Monitor/MonitorOverviewProbeUtil.js.map +1 -0
- package/build/dist/Utils/Monitor/MonitorOverviewTargetUtil.js +195 -0
- package/build/dist/Utils/Monitor/MonitorOverviewTargetUtil.js.map +1 -0
- package/build/dist/Utils/Monitor/MonitorStatusHistoryUtil.js +127 -0
- package/build/dist/Utils/Monitor/MonitorStatusHistoryUtil.js.map +1 -0
- package/build/dist/Utils/Monitor/MonitorUptimeSummaryUtil.js +464 -0
- package/build/dist/Utils/Monitor/MonitorUptimeSummaryUtil.js.map +1 -0
- package/build/dist/Utils/Rum/SessionIdentity.js +31 -1
- package/build/dist/Utils/Rum/SessionIdentity.js.map +1 -1
- package/build/dist/Utils/Rum/SessionReplayWireEncoding.js +128 -0
- package/build/dist/Utils/Rum/SessionReplayWireEncoding.js.map +1 -0
- package/build/dist/Utils/Rum/SessionTraceState.js +154 -0
- package/build/dist/Utils/Rum/SessionTraceState.js.map +1 -0
- package/build/dist/Utils/Rum/UserFlow.js +941 -0
- package/build/dist/Utils/Rum/UserFlow.js.map +1 -0
- package/build/dist/Utils/StatusPage/MonitorGroupMergedDowntimeUtil.js +82 -0
- package/build/dist/Utils/StatusPage/MonitorGroupMergedDowntimeUtil.js.map +1 -0
- package/build/dist/Utils/StatusPage/ResourceUptime.js +46 -0
- package/build/dist/Utils/StatusPage/ResourceUptime.js.map +1 -1
- package/build/dist/Utils/StatusPage/UptimeDailyAggregateUtil.js +148 -0
- package/build/dist/Utils/StatusPage/UptimeDailyAggregateUtil.js.map +1 -1
- package/build/dist/Utils/Telemetry/AttributesJSON.js +245 -0
- package/build/dist/Utils/Telemetry/AttributesJSON.js.map +1 -0
- package/build/dist/Utils/Uptime/DayUptimeGraphUtil.js +103 -0
- package/build/dist/Utils/Uptime/DayUptimeGraphUtil.js.map +1 -1
- package/build/dist/Utils/Uptime/UptimeUtil.js +91 -27
- package/build/dist/Utils/Uptime/UptimeUtil.js.map +1 -1
- package/jest.config.json +2 -1
- package/package.json +2 -1
- package/tsconfig.tests.json +36 -0
- package/Tests/UI/Components/EmptyState/EmptyStateGuideLinks.test.tsx +0 -337
- package/UI/Components/EmptyState/EmptyStateGuideLinks.tsx +0 -124
- package/build/dist/UI/Components/EmptyState/EmptyStateGuideLinks.js +0 -47
- package/build/dist/UI/Components/EmptyState/EmptyStateGuideLinks.js.map +0 -1
|
@@ -12,17 +12,50 @@ import ObjectID from "../../Types/ObjectID";
|
|
|
12
12
|
import BadDataException from "../../Types/Exception/BadDataException";
|
|
13
13
|
import Model from "../../Models/DatabaseModels/RunnerJob";
|
|
14
14
|
import RunnerJobStatus from "../../Types/Runbook/RunnerJobStatus";
|
|
15
|
-
import RunnerJobOrigin from "../../Types/Runbook/RunnerJobOrigin";
|
|
15
|
+
import RunnerJobOrigin, { AI_COMMAND_JOB_ORIGINS, } from "../../Types/Runbook/RunnerJobOrigin";
|
|
16
16
|
import RunbookStepType, { isPayloadCarryingStepType, isRunnerExecutedStepType, } from "../../Types/Runbook/RunbookStepType";
|
|
17
17
|
import { AI_COMMAND_STEP_TYPES } from "../../Types/AutoRemediation/AiRemediationCommandPlan";
|
|
18
18
|
import CommandPolicy from "../../Utils/AiRemediation/CommandPolicy";
|
|
19
|
+
import KubectlPolicy from "../../Utils/AiRemediation/KubectlPolicy";
|
|
20
|
+
import KubectlOutputRedactor from "../../Utils/AiRemediation/KubectlOutputRedactor";
|
|
21
|
+
import KubectlWriteScope from "../../Utils/AiRemediation/KubectlWriteScope";
|
|
22
|
+
import ToolResultSerializer from "../Utils/AI/Toolbox/Serializer";
|
|
23
|
+
import { KUBECTL_ALLOW_NODE_OPERATIONS_ENV, KUBECTL_ALLOW_WRITES_ENV, KUBECTL_WRITE_NAMESPACES_ENV, KubectlCommandTier, KubernetesAiRemediationMode, isInClusterPostureForCluster, parseKubernetesRunnerPosture, } from "../../Types/Kubernetes/KubernetesClusterAiAccess";
|
|
24
|
+
import RunbookCredentialType from "../../Types/Runbook/RunbookCredentialType";
|
|
25
|
+
import AIRunType from "../../Types/AI/AIRunType";
|
|
26
|
+
import AIRunService from "./AIRunService";
|
|
27
|
+
import KubernetesClusterService from "./KubernetesClusterService";
|
|
28
|
+
import RunbookCredentialService from "./RunbookCredentialService";
|
|
29
|
+
import RunnerService, { Service as RunnerServiceClass } from "./RunnerService";
|
|
19
30
|
import QueryHelper from "../Types/Database/QueryHelper";
|
|
31
|
+
/*
|
|
32
|
+
* The cluster remediation modes in which a kubectl job for remediation may
|
|
33
|
+
* be enqueued at all. Anything else — Disabled, or a value the dashboard
|
|
34
|
+
* does not know — reads as "remediation is off".
|
|
35
|
+
*/
|
|
36
|
+
const ENABLED_REMEDIATION_MODES = [
|
|
37
|
+
KubernetesAiRemediationMode.RequireApproval,
|
|
38
|
+
KubernetesAiRemediationMode.Automatic,
|
|
39
|
+
KubernetesAiRemediationMode.BypassApproval,
|
|
40
|
+
];
|
|
41
|
+
// AI runs whose cluster reads are governed by the remediation switch.
|
|
42
|
+
const REMEDIATION_RUN_TYPES = [
|
|
43
|
+
AIRunType.RemediationExecution,
|
|
44
|
+
AIRunType.RemediationPlan,
|
|
45
|
+
];
|
|
20
46
|
/*
|
|
21
47
|
* Project-wide hourly ceiling on AI-composed command jobs, counted on the
|
|
22
48
|
* RunnerJob rows themselves so every path (FullAuto inline execution,
|
|
23
49
|
* approved plans, rollbacks) shares one brake.
|
|
24
50
|
*/
|
|
25
51
|
export const MAX_AI_COMMAND_JOBS_PER_PROJECT_PER_HOUR = 30;
|
|
52
|
+
/*
|
|
53
|
+
* Separate, looser brake for READ-ONLY kubectl during investigations: a
|
|
54
|
+
* busy hour of alerts on a large cluster legitimately runs many describe /
|
|
55
|
+
* logs / events calls, and none of them can change anything. Still a
|
|
56
|
+
* ceiling, because every call spends Runner time and LLM budget.
|
|
57
|
+
*/
|
|
58
|
+
export const MAX_AI_INVESTIGATION_COMMAND_JOBS_PER_PROJECT_PER_HOUR = 240;
|
|
26
59
|
import SortOrder from "../../Types/BaseDatabase/SortOrder";
|
|
27
60
|
import OneUptimeDate from "../../Types/Date";
|
|
28
61
|
import PostgresAppInstance from "../Infrastructure/PostgresDatabase";
|
|
@@ -72,10 +105,193 @@ function unwrapRows(result) {
|
|
|
72
105
|
}
|
|
73
106
|
return [];
|
|
74
107
|
}
|
|
108
|
+
/*
|
|
109
|
+
* What stands in for a character a Postgres text column cannot hold: the
|
|
110
|
+
* Unicode replacement character, so a reader of the stored output can see
|
|
111
|
+
* that something was there instead of the bytes silently closing up.
|
|
112
|
+
*/
|
|
113
|
+
export const RUNNER_JOB_UNSTORABLE_CHARACTER_REPLACEMENT = "\uFFFD";
|
|
114
|
+
/*
|
|
115
|
+
* U+0000. Postgres rejects it anywhere in a text value (22021 "invalid byte
|
|
116
|
+
* sequence for encoding UTF8: 0x00") — at bind time, so even a parameter
|
|
117
|
+
* the statement's CASE would not pick fails the whole UPDATE.
|
|
118
|
+
*/
|
|
119
|
+
// eslint-disable-next-line no-control-regex
|
|
120
|
+
const NUL_CHARACTER_PATTERN = /\u0000/g;
|
|
121
|
+
/*
|
|
122
|
+
* A UTF-16 surrogate pair, or a surrogate half on its own. A lone half has
|
|
123
|
+
* no UTF-8 encoding at all (a Runner that cut a string between the two
|
|
124
|
+
* halves sends one); the driver would quietly turn it into U+FFFD on the
|
|
125
|
+
* wire, so it is replaced here explicitly, before redaction, and the text
|
|
126
|
+
* the redaction passes read is exactly the text that is stored. A whole
|
|
127
|
+
* pair is matched first and kept.
|
|
128
|
+
*/
|
|
129
|
+
const SURROGATE_PATTERN = /[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDFFF]/g;
|
|
130
|
+
function keepSurrogatePairOnly(match) {
|
|
131
|
+
return match.length === 2
|
|
132
|
+
? match
|
|
133
|
+
: RUNNER_JOB_UNSTORABLE_CHARACTER_REPLACEMENT;
|
|
134
|
+
}
|
|
135
|
+
export function describeRunnerJobTimeout(data) {
|
|
136
|
+
const isAiKubectl = data.stepType === RunbookStepType.Kubectl &&
|
|
137
|
+
AI_COMMAND_JOB_ORIGINS.includes(data.origin || RunnerJobOrigin.Runbook);
|
|
138
|
+
if (!isAiKubectl) {
|
|
139
|
+
switch (data.kind) {
|
|
140
|
+
case "unclaimed":
|
|
141
|
+
return "No runbook agent picked up this step before the wait window expired. The agent may be offline — check that it is running and reachable, then try again.";
|
|
142
|
+
case "lease_expired":
|
|
143
|
+
return "The runbook agent stopped responding while this step was running. The agent may have crashed or lost its network connection — check that it is still online, then try running the runbook again.";
|
|
144
|
+
default:
|
|
145
|
+
return "This step ran longer than the allowed execution window. Increase the timeout on the step or make the script complete faster.";
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
/*
|
|
149
|
+
* A change that may have been applied must not read as "try again": for
|
|
150
|
+
* a remediation command, say to look first.
|
|
151
|
+
*/
|
|
152
|
+
const checkFirst = data.origin === RunnerJobOrigin.AiRemediation
|
|
153
|
+
? " Check the cluster before running a change again."
|
|
154
|
+
: "";
|
|
155
|
+
const kind = data.kind === "overall" && data.wasClaimed === false
|
|
156
|
+
? "unclaimed"
|
|
157
|
+
: data.kind;
|
|
158
|
+
switch (kind) {
|
|
159
|
+
case "unclaimed":
|
|
160
|
+
return `The cluster's Runner did not pick up this kubectl command within ${describeSeconds(data.claimTimeoutInMs)} — it may be offline, restarting or busy with other work. Nothing was run on the cluster.`;
|
|
161
|
+
case "lease_expired":
|
|
162
|
+
return `The cluster's Runner stopped responding while this kubectl command was running — it may have restarted or lost its connection. What the command did is unknown.${checkFirst}`;
|
|
163
|
+
default:
|
|
164
|
+
return `The cluster's Runner did not report a result for this kubectl command in time — kubectl may have outlived its ${describeSeconds(data.executionTimeoutInMs)} timeout. What the command did is unknown.${checkFirst}`;
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
function describeSeconds(milliseconds) {
|
|
168
|
+
return `${Math.max(1, Math.round(milliseconds / 1000))}s`;
|
|
169
|
+
}
|
|
75
170
|
export class Service extends DatabaseService {
|
|
76
171
|
constructor() {
|
|
77
172
|
super(Model);
|
|
78
173
|
}
|
|
174
|
+
/*
|
|
175
|
+
* Why the target Runner, by its own reported posture, will refuse this
|
|
176
|
+
* kubectl WRITE — or null when nothing it reported rules the write out.
|
|
177
|
+
* The rule is the Runner's own (KubectlWriteScope.getRefusal, the one the
|
|
178
|
+
* Runner asks before it spawns kubectl), asked here with what the Runner
|
|
179
|
+
* reported instead of what it was started with. Refusing here means
|
|
180
|
+
* nothing is approved, enqueued or counted by the cluster's circuit
|
|
181
|
+
* breaker only to be refused on the Runner (or answered Forbidden by the
|
|
182
|
+
* API server). Each refusal names the setting to change where that
|
|
183
|
+
* Runner is configured (getRunnerWriteScopeSettings): the Kubernetes
|
|
184
|
+
* agent chart's values for the in-cluster Runner, the Runner's own
|
|
185
|
+
* environment on its host for a Runner that reaches the cluster through
|
|
186
|
+
* a credential.
|
|
187
|
+
*
|
|
188
|
+
* - writeNamespaces (aiAccess.remediation.namespaces, or a credential
|
|
189
|
+
* Runner's ONEUPTIME_KUBECTL_WRITE_NAMESPACES) and podNamespace are the
|
|
190
|
+
* Runner's scope; a Runner that did not report one has none.
|
|
191
|
+
* - allowNodeOperations === false (aiAccess.remediation.nodeOperations,
|
|
192
|
+
* or a credential Runner's ONEUPTIME_KUBECTL_ALLOW_NODE_OPERATIONS): no
|
|
193
|
+
* node operation. A Runner that never said (absent) is not
|
|
194
|
+
* second-guessed.
|
|
195
|
+
* - usesCredential: a write that names no namespace lands in "default"
|
|
196
|
+
* through a credential's kubeconfig, and in the pod's own namespace
|
|
197
|
+
* in-cluster.
|
|
198
|
+
*
|
|
199
|
+
* Reads, and commands the policy denies outright, are never refused for
|
|
200
|
+
* scope.
|
|
201
|
+
*/
|
|
202
|
+
static getRunnerWriteScopeRefusal(data) {
|
|
203
|
+
const { policy, posture } = data;
|
|
204
|
+
if (!posture ||
|
|
205
|
+
policy.tier === KubectlCommandTier.Read ||
|
|
206
|
+
policy.tier === KubectlCommandTier.Denied) {
|
|
207
|
+
return null;
|
|
208
|
+
}
|
|
209
|
+
const refusal = KubectlWriteScope.getRefusal({
|
|
210
|
+
command: policy,
|
|
211
|
+
writeNamespaces: posture.writeNamespaces || [],
|
|
212
|
+
podNamespace: posture.podNamespace || null,
|
|
213
|
+
allowNodeOperations: posture.allowNodeOperations !== false,
|
|
214
|
+
usesCredential: data.usesCredential,
|
|
215
|
+
});
|
|
216
|
+
return refusal
|
|
217
|
+
? Service.describeRunnerWriteScopeRefusal(refusal, Service.getRunnerWriteScopeSettings(data.usesCredential))
|
|
218
|
+
: null;
|
|
219
|
+
}
|
|
220
|
+
/*
|
|
221
|
+
* Where the target Runner's write scope is set, in the words a refusal
|
|
222
|
+
* uses. The in-cluster Runner is the Kubernetes agent's: its chart sets
|
|
223
|
+
* the scope (and the environment variables behind it), and an upgrade
|
|
224
|
+
* changes it. A Runner that reaches the cluster through a Kubernetes
|
|
225
|
+
* credential is an ordinary Runner no chart configures: it reports what
|
|
226
|
+
* it was started with — ONEUPTIME_KUBECTL_WRITE_NAMESPACES and
|
|
227
|
+
* ONEUPTIME_KUBECTL_ALLOW_NODE_OPERATIONS on its own host — and a
|
|
228
|
+
* restart picks up a change.
|
|
229
|
+
*/
|
|
230
|
+
static getRunnerWriteScopeSettings(usesCredential) {
|
|
231
|
+
if (usesCredential) {
|
|
232
|
+
return {
|
|
233
|
+
nodeOperationsOff: `it was started with ${KUBECTL_ALLOW_NODE_OPERATIONS_ENV} (or ${KUBECTL_ALLOW_WRITES_ENV}) set to something other than true on its host`,
|
|
234
|
+
allowNodeOperations: `set ${KUBECTL_ALLOW_NODE_OPERATIONS_ENV}=true on that Runner's host and restart it`,
|
|
235
|
+
namespaces: `${KUBECTL_WRITE_NAMESPACES_ENV} on that Runner's host`,
|
|
236
|
+
addNamespace: `add it to ${KUBECTL_WRITE_NAMESPACES_ENV} on that Runner's host and restart it`,
|
|
237
|
+
};
|
|
238
|
+
}
|
|
239
|
+
return {
|
|
240
|
+
nodeOperationsOff: `its Kubernetes agent was installed with aiAccess.remediation.nodeOperations=false (${KUBECTL_ALLOW_NODE_OPERATIONS_ENV})`,
|
|
241
|
+
allowNodeOperations: "upgrade the agent with --set aiAccess.remediation.nodeOperations=true",
|
|
242
|
+
namespaces: `aiAccess.remediation.namespaces on the Kubernetes agent chart, ${KUBECTL_WRITE_NAMESPACES_ENV}`,
|
|
243
|
+
addNamespace: "add it to aiAccess.remediation.namespaces and upgrade the agent",
|
|
244
|
+
};
|
|
245
|
+
}
|
|
246
|
+
// A write-scope refusal, worded for whoever enqueued the command.
|
|
247
|
+
static describeRunnerWriteScopeRefusal(refusal, settings) {
|
|
248
|
+
const command = `"${refusal.displayCommand}"`;
|
|
249
|
+
const wouldRefuse = "so the Runner would refuse it. It was not enqueued.";
|
|
250
|
+
const scopeList = `${refusal.writeNamespaces
|
|
251
|
+
.map((allowed) => {
|
|
252
|
+
return `"${allowed}"`;
|
|
253
|
+
})
|
|
254
|
+
.join(", ")}: ${settings.namespaces}`;
|
|
255
|
+
const namespace = refusal.namespace || "";
|
|
256
|
+
const fix = refusal.fix ? ` ${refusal.fix}` : "";
|
|
257
|
+
switch (refusal.code) {
|
|
258
|
+
case "node_operations":
|
|
259
|
+
return `${refusal.uncertainty === null
|
|
260
|
+
? `${command} changes a node`
|
|
261
|
+
: `The cluster's Runner cannot tell for certain whether ${command} changes a node (${refusal.uncertainty})`}, and the cluster's Runner does not allow node operations (cordon, uncordon, drain, taint, or labelling, annotating or patching a Node): ${settings.nodeOperationsOff}, ${wouldRefuse}${fix} To let OneUptime AI change nodes, ${settings.allowNodeOperations}.`;
|
|
262
|
+
case "objects_uncertain":
|
|
263
|
+
case "namespace_uncertain":
|
|
264
|
+
return `The cluster's Runner cannot tell for certain which ${refusal.code === "namespace_uncertain" ? "namespace" : "objects"} ${command} changes (${refusal.uncertainty}), ${wouldRefuse}${fix}`;
|
|
265
|
+
case "verb_mismatch":
|
|
266
|
+
return `The cluster's Runner reads the verb of ${command} as "${refusal.readVerb}", but the kubectl policy read "${refusal.policyVerb}", so it cannot tell for certain what the command changes, ${wouldRefuse}`;
|
|
267
|
+
case "unnamed_namespace_objects":
|
|
268
|
+
return `${command} would change Namespace objects without naming them (a selector, --all or no name at all), so the cluster's Runner cannot tell whether one of them is ${refusal.podNamespace
|
|
269
|
+
? `"${refusal.podNamespace}", the namespace it runs in`
|
|
270
|
+
: "outside the namespaces it lets OneUptime AI change"}, ${wouldRefuse}${fix}`;
|
|
271
|
+
case "cluster_scoped":
|
|
272
|
+
return `${command} changes ${refusal.clusterScopedKinds.join(", ")} objects, which are cluster-scoped: they live outside every namespace, so outside the namespaces the cluster's Runner lets OneUptime AI change (${scopeList}) whatever -n says, ${wouldRefuse}`;
|
|
273
|
+
case "all_namespaces":
|
|
274
|
+
return `${command} would change every namespace, including ones the cluster's Runner may not change, ${wouldRefuse}${fix}`;
|
|
275
|
+
case "no_namespace":
|
|
276
|
+
return `${command} names no namespace, and the cluster's Runner reported no namespace of its own for kubectl to use there, ${wouldRefuse}${fix}`;
|
|
277
|
+
case "own_namespace":
|
|
278
|
+
return refusal.namespaceSource === "namespace_object"
|
|
279
|
+
? `${command} would change the Namespace object "${namespace}", the namespace the cluster's in-cluster Runner itself runs in. OneUptime AI never changes it — a change there could reconfigure the Kubernetes agent or the Runner — ${wouldRefuse}`
|
|
280
|
+
: `${command} would change namespace "${namespace}"${refusal.namespaceSource === "default_namespace"
|
|
281
|
+
? " (the command names none, so kubectl would use that one)"
|
|
282
|
+
: ""}, the namespace the cluster's in-cluster Runner itself runs in. OneUptime AI never changes it — a change there could scale away the Kubernetes agent or the Runner — ${wouldRefuse} Name the namespace of the workload to fix with -n <namespace>.`;
|
|
283
|
+
case "outside_scope":
|
|
284
|
+
return `${command} would change ${refusal.namespaceSource === "namespace_object"
|
|
285
|
+
? `the Namespace object "${namespace}" (a Namespace object is judged by its name; -n does not apply to it)`
|
|
286
|
+
: `namespace "${namespace}"${refusal.namespaceSource === "default_namespace"
|
|
287
|
+
? " (the command names none, so kubectl would use that one)"
|
|
288
|
+
: ""}`}, which is outside the namespaces the cluster's Runner lets OneUptime AI change (${scopeList}), ${wouldRefuse} To let OneUptime AI change "${namespace}", ${settings.addNamespace}.`;
|
|
289
|
+
default: {
|
|
290
|
+
const unhandled = refusal.code;
|
|
291
|
+
return unhandled;
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
}
|
|
79
295
|
async enqueue(data) {
|
|
80
296
|
var _a;
|
|
81
297
|
if (!data.targetAgentId) {
|
|
@@ -134,6 +350,13 @@ export class Service extends DatabaseService {
|
|
|
134
350
|
if (!AI_COMMAND_STEP_TYPES.includes(data.stepType)) {
|
|
135
351
|
throw new BadDataException(`AI remediation does not execute step type "${data.stepType}".`);
|
|
136
352
|
}
|
|
353
|
+
/*
|
|
354
|
+
* kubectl has its own policy and its own payload shape (an argv, a
|
|
355
|
+
* cluster, an optional credential) — enqueueAiKubectlCommand owns it.
|
|
356
|
+
*/
|
|
357
|
+
if (data.stepType === RunbookStepType.Kubectl) {
|
|
358
|
+
throw new BadDataException("Kubectl commands are enqueued through enqueueAiKubectlCommand.");
|
|
359
|
+
}
|
|
137
360
|
const command = (data.command || "").trim();
|
|
138
361
|
if (!command) {
|
|
139
362
|
throw new BadDataException("An AI command job needs a command.");
|
|
@@ -145,6 +368,31 @@ export class Service extends DatabaseService {
|
|
|
145
368
|
if (data.stepType === RunbookStepType.SSH && !data.credentialId) {
|
|
146
369
|
throw new BadDataException("An SSH command job needs a credentialId.");
|
|
147
370
|
}
|
|
371
|
+
/*
|
|
372
|
+
* The target must be one of this project's Runners, and never a
|
|
373
|
+
* kubernetes-agent Runner. That Runner exists to run policy-tiered
|
|
374
|
+
* kubectl with its own ServiceAccount: the claim path serves it kubectl
|
|
375
|
+
* only, so a Bash or SSH job aimed at it would sit unclaimed until its
|
|
376
|
+
* deadline after a human approved it — and its identity is minted with
|
|
377
|
+
* the project's telemetry ingestion key, so it must never be handed
|
|
378
|
+
* AI-composed shell work or an SSH credential. Checked here, at the
|
|
379
|
+
* enqueue chokepoint, so an already-stored plan is refused too.
|
|
380
|
+
*/
|
|
381
|
+
const targetRunner = await RunnerService.findOneBy({
|
|
382
|
+
query: {
|
|
383
|
+
_id: data.targetAgentId.toString(),
|
|
384
|
+
projectId: data.projectId,
|
|
385
|
+
},
|
|
386
|
+
select: { _id: true, name: true, hostInfo: true },
|
|
387
|
+
props: { isRoot: true },
|
|
388
|
+
});
|
|
389
|
+
if (!targetRunner) {
|
|
390
|
+
throw new BadDataException("The target Runner was not found or it does not belong to this project.");
|
|
391
|
+
}
|
|
392
|
+
// The one "is an agent row" rule: the name marker or an agent posture.
|
|
393
|
+
if (RunnerServiceClass.isKubernetesAgentRunnerRow(targetRunner)) {
|
|
394
|
+
throw new BadDataException(`Runner "${targetRunner.name}" is a cluster's in-cluster Runner: it runs kubectl through its cluster only, never ${data.stepType} commands. Target the Kubernetes cluster instead, or pick a Runner you created under Project Settings → Runners.`);
|
|
395
|
+
}
|
|
148
396
|
/*
|
|
149
397
|
* Project-wide hourly storm brake for the whole AI-command lane. It
|
|
150
398
|
* lives HERE, at the single enqueue chokepoint, so it also bounds the
|
|
@@ -193,6 +441,288 @@ export class Service extends DatabaseService {
|
|
|
193
441
|
row.claimDeadlineAt = claimDeadlineAt;
|
|
194
442
|
return this.create({ data: row, props: { isRoot: true } });
|
|
195
443
|
}
|
|
444
|
+
/*
|
|
445
|
+
* Enqueue ONE kubectl command OneUptime AI composed against a cluster.
|
|
446
|
+
*
|
|
447
|
+
* This is the server-side chokepoint between an LLM's output and a
|
|
448
|
+
* cluster's API server, so it re-runs the kubectl policy regardless of
|
|
449
|
+
* what the tool layer checked: Denied never enqueues, and an
|
|
450
|
+
* investigation-origin job must be Read tier — an investigation can never
|
|
451
|
+
* write, no matter which prompt produced the call. The Runner re-checks
|
|
452
|
+
* the same policy on the argv it receives.
|
|
453
|
+
*
|
|
454
|
+
* The command travels as an argv in the payload (never a shell line) plus
|
|
455
|
+
* the cluster and, for Runners outside the cluster, the credential id the
|
|
456
|
+
* ingress resolves at claim time. In-cluster Runners carry no credential:
|
|
457
|
+
* kubectl uses the pod's own ServiceAccount — which reaches whatever
|
|
458
|
+
* cluster that pod lives in. So a credential-less job is only ever
|
|
459
|
+
* enqueued for the in-cluster Runner OF THIS CLUSTER (its posture names
|
|
460
|
+
* the cluster), and the payload carries the cluster's identifier so the
|
|
461
|
+
* claim path and the Runner can refuse a job that reaches the wrong pod.
|
|
462
|
+
* A credential is never sent to a kubernetes-agent Runner (its identity
|
|
463
|
+
* is minted with the project's telemetry ingestion key).
|
|
464
|
+
*
|
|
465
|
+
* It also re-reads the cluster's CURRENT AI access configuration, because
|
|
466
|
+
* every caller acts on a snapshot (an investigation reads the cluster's
|
|
467
|
+
* status once when it starts, a remediation run when it composes): the
|
|
468
|
+
* target must still be the cluster's bound Runner, a credential must still
|
|
469
|
+
* be its bound Kubernetes credential, an investigation's reads need "Let
|
|
470
|
+
* AI investigate with kubectl" still on, and a remediation run's commands
|
|
471
|
+
* (its reads included) need the cluster's remediation still enabled. An
|
|
472
|
+
* operator who revokes or re-points access therefore stops an in-flight
|
|
473
|
+
* run at its next command.
|
|
474
|
+
*/
|
|
475
|
+
async enqueueAiKubectlCommand(data) {
|
|
476
|
+
var _a, _b, _c;
|
|
477
|
+
if (!data.targetAgentId) {
|
|
478
|
+
throw new BadDataException("targetAgentId is required to dispatch a kubectl command to a Runner.");
|
|
479
|
+
}
|
|
480
|
+
if (!data.kubernetesClusterId) {
|
|
481
|
+
throw new BadDataException("kubernetesClusterId is required for a kubectl command.");
|
|
482
|
+
}
|
|
483
|
+
if (data.origin !== RunnerJobOrigin.AiInvestigation &&
|
|
484
|
+
data.origin !== RunnerJobOrigin.AiRemediation) {
|
|
485
|
+
throw new BadDataException(`A kubectl command job cannot have origin "${String(data.origin)}".`);
|
|
486
|
+
}
|
|
487
|
+
if (data.origin === RunnerJobOrigin.AiRemediation &&
|
|
488
|
+
!data.autoRemediationSuggestionId) {
|
|
489
|
+
throw new BadDataException("A kubectl remediation job needs its auto-remediation suggestion.");
|
|
490
|
+
}
|
|
491
|
+
const isAccessTest = data.isAccessTest === true;
|
|
492
|
+
/*
|
|
493
|
+
* The access test is the only kubectl job without an AI run, and it is
|
|
494
|
+
* a read: that is what lets the investigation brake below count real
|
|
495
|
+
* investigations only (rows with an AI run) without the test slipping
|
|
496
|
+
* work past it under another name.
|
|
497
|
+
*/
|
|
498
|
+
if (isAccessTest &&
|
|
499
|
+
(data.origin !== RunnerJobOrigin.AiInvestigation || data.aiRunId)) {
|
|
500
|
+
throw new BadDataException("An access test is a read-only check with no AI run behind it.");
|
|
501
|
+
}
|
|
502
|
+
if (data.origin === RunnerJobOrigin.AiInvestigation &&
|
|
503
|
+
!isAccessTest &&
|
|
504
|
+
!data.aiRunId) {
|
|
505
|
+
throw new BadDataException("An investigation kubectl job needs the AI run it belongs to.");
|
|
506
|
+
}
|
|
507
|
+
const policy = KubectlPolicy.evaluateCommand(data.command);
|
|
508
|
+
if (policy.tier === KubectlCommandTier.Denied) {
|
|
509
|
+
throw new BadDataException(`Denied by the kubectl command policy: ${policy.reason}.`);
|
|
510
|
+
}
|
|
511
|
+
if (data.origin === RunnerJobOrigin.AiInvestigation &&
|
|
512
|
+
policy.tier !== KubectlCommandTier.Read) {
|
|
513
|
+
throw new BadDataException(`An investigation may only run read-only kubectl commands; "${policy.displayCommand}" would change the cluster (${policy.tier}).`);
|
|
514
|
+
}
|
|
515
|
+
/*
|
|
516
|
+
* The access test is bounded by its own route limits instead, and an
|
|
517
|
+
* investigation's brake counts only rows with an AI run, so tests never
|
|
518
|
+
* spend the budget real investigations share.
|
|
519
|
+
*/
|
|
520
|
+
if (!isAccessTest) {
|
|
521
|
+
const hourlyCap = data.origin === RunnerJobOrigin.AiInvestigation
|
|
522
|
+
? MAX_AI_INVESTIGATION_COMMAND_JOBS_PER_PROJECT_PER_HOUR
|
|
523
|
+
: MAX_AI_COMMAND_JOBS_PER_PROJECT_PER_HOUR;
|
|
524
|
+
const jobsInLastHour = (await this.countBy({
|
|
525
|
+
query: Object.assign({ projectId: data.projectId, origin: data.origin, createdAt: QueryHelper.greaterThan(OneUptimeDate.getSomeHoursAgo(1)) }, (data.origin === RunnerJobOrigin.AiInvestigation
|
|
526
|
+
? { aiRunId: QueryHelper.notNull() }
|
|
527
|
+
: {})),
|
|
528
|
+
props: { isRoot: true },
|
|
529
|
+
})).toNumber();
|
|
530
|
+
if (jobsInLastHour >= hourlyCap) {
|
|
531
|
+
throw new BadDataException(data.origin === RunnerJobOrigin.AiInvestigation
|
|
532
|
+
? `This project has run ${jobsInLastHour} AI investigation commands in the last hour, which is its limit (${hourlyCap}). No further cluster commands can run this hour.`
|
|
533
|
+
: `This project has run ${jobsInLastHour} AI remediation commands in the last hour, which is its limit (${hourlyCap}). No further AI commands can run this hour.`);
|
|
534
|
+
}
|
|
535
|
+
}
|
|
536
|
+
/*
|
|
537
|
+
* The cluster and the target Runner must both be THIS project's. The
|
|
538
|
+
* cluster's identifier travels in the payload; without a credential the
|
|
539
|
+
* Runner must be that cluster's own in-cluster agent, because its
|
|
540
|
+
* ServiceAccount reaches only the cluster its pod lives in.
|
|
541
|
+
*/
|
|
542
|
+
const cluster = await KubernetesClusterService.findOneBy({
|
|
543
|
+
query: {
|
|
544
|
+
_id: data.kubernetesClusterId.toString(),
|
|
545
|
+
projectId: data.projectId,
|
|
546
|
+
},
|
|
547
|
+
select: {
|
|
548
|
+
_id: true,
|
|
549
|
+
name: true,
|
|
550
|
+
clusterIdentifier: true,
|
|
551
|
+
aiAccessRunnerId: true,
|
|
552
|
+
aiAccessCredentialId: true,
|
|
553
|
+
isAiInvestigationEnabled: true,
|
|
554
|
+
aiRemediationMode: true,
|
|
555
|
+
},
|
|
556
|
+
props: { isRoot: true },
|
|
557
|
+
});
|
|
558
|
+
if (!cluster) {
|
|
559
|
+
throw new BadDataException("Kubernetes cluster not found or it does not belong to this project.");
|
|
560
|
+
}
|
|
561
|
+
const clusterIdentifier = (cluster.clusterIdentifier || "").trim();
|
|
562
|
+
const clusterLabel = cluster.name || clusterIdentifier || data.kubernetesClusterId.toString();
|
|
563
|
+
const bindingRefusal = Service.getClusterBindingRefusal({
|
|
564
|
+
cluster,
|
|
565
|
+
clusterLabel,
|
|
566
|
+
targetAgentId: data.targetAgentId,
|
|
567
|
+
credentialId: data.credentialId,
|
|
568
|
+
requiredSwitch: await this.getRequiredClusterSwitch({
|
|
569
|
+
projectId: data.projectId,
|
|
570
|
+
origin: data.origin,
|
|
571
|
+
aiRunId: data.aiRunId,
|
|
572
|
+
isAccessTest,
|
|
573
|
+
}),
|
|
574
|
+
});
|
|
575
|
+
if (bindingRefusal) {
|
|
576
|
+
throw new BadDataException(bindingRefusal);
|
|
577
|
+
}
|
|
578
|
+
const targetRunner = await RunnerService.findOneBy({
|
|
579
|
+
query: {
|
|
580
|
+
_id: data.targetAgentId.toString(),
|
|
581
|
+
projectId: data.projectId,
|
|
582
|
+
},
|
|
583
|
+
select: { _id: true, name: true, hostInfo: true },
|
|
584
|
+
props: { isRoot: true },
|
|
585
|
+
});
|
|
586
|
+
if (!targetRunner) {
|
|
587
|
+
throw new BadDataException("The target Runner was not found or it does not belong to this project.");
|
|
588
|
+
}
|
|
589
|
+
if (data.credentialId) {
|
|
590
|
+
/*
|
|
591
|
+
* A kubernetes-agent Runner is never handed credential material: its
|
|
592
|
+
* identity is issued with the project's telemetry ingestion key, so
|
|
593
|
+
* anyone holding that key could come to hold the credential too. The
|
|
594
|
+
* claim path refuses it as well (by the same name-or-posture rule);
|
|
595
|
+
* refusing here keeps the job from ever existing.
|
|
596
|
+
*/
|
|
597
|
+
if (RunnerServiceClass.isKubernetesAgentRunnerRow(targetRunner)) {
|
|
598
|
+
throw new BadDataException(`Runner "${targetRunner.name}" is a cluster's in-cluster Runner and is never given a credential, so a kubectl command for cluster "${clusterLabel}" that needs one cannot run on it. Create a Runner under Project Settings → Runners, assign the Kubernetes credential to it and select both on the cluster's AI page.`);
|
|
599
|
+
}
|
|
600
|
+
const credential = ObjectID.isValidUUID(data.credentialId)
|
|
601
|
+
? await RunbookCredentialService.findOneBy({
|
|
602
|
+
query: {
|
|
603
|
+
_id: data.credentialId,
|
|
604
|
+
projectId: data.projectId,
|
|
605
|
+
},
|
|
606
|
+
select: { _id: true, name: true, credentialType: true },
|
|
607
|
+
props: { isRoot: true },
|
|
608
|
+
})
|
|
609
|
+
: null;
|
|
610
|
+
if (!credential ||
|
|
611
|
+
credential.credentialType !== RunbookCredentialType.Kubernetes) {
|
|
612
|
+
throw new BadDataException(`The credential this kubectl command names is not a Kubernetes credential of this project, so it was not enqueued for cluster "${clusterLabel}".`);
|
|
613
|
+
}
|
|
614
|
+
}
|
|
615
|
+
const posture = parseKubernetesRunnerPosture(targetRunner.hostInfo);
|
|
616
|
+
if (!data.credentialId) {
|
|
617
|
+
if (!isInClusterPostureForCluster(posture, clusterIdentifier)) {
|
|
618
|
+
throw new BadDataException(`A kubectl command without a Kubernetes credential can only run on the in-cluster Runner of cluster "${clusterIdentifier || cluster.name || ((_a = cluster.id) === null || _a === void 0 ? void 0 : _a.toString())}", and Runner "${targetRunner.name}" ${(posture === null || posture === void 0 ? void 0 : posture.inCluster)
|
|
619
|
+
? `is the in-cluster Runner of ${((_b = posture.clusterIdentifier) === null || _b === void 0 ? void 0 : _b.trim())
|
|
620
|
+
? `cluster "${posture.clusterIdentifier.trim()}"`
|
|
621
|
+
: "an unnamed cluster"}`
|
|
622
|
+
: "runs outside the cluster"}. Select a Kubernetes credential for this Runner on the cluster's AI page, or install the in-cluster Runner on this cluster.`);
|
|
623
|
+
}
|
|
624
|
+
}
|
|
625
|
+
/*
|
|
626
|
+
* A remediation write the Runner's own posture says it will refuse — a
|
|
627
|
+
* namespace outside its write scope, its own namespace, or a node
|
|
628
|
+
* operation its chart did not grant — is refused here, before it can be
|
|
629
|
+
* approved, enqueued or counted by the cluster's circuit breaker, with
|
|
630
|
+
* the chart value that would allow it. Reads are never refused for
|
|
631
|
+
* scope.
|
|
632
|
+
*/
|
|
633
|
+
if (data.origin === RunnerJobOrigin.AiRemediation) {
|
|
634
|
+
const scopeRefusal = Service.getRunnerWriteScopeRefusal({
|
|
635
|
+
policy,
|
|
636
|
+
posture,
|
|
637
|
+
usesCredential: Boolean(data.credentialId),
|
|
638
|
+
});
|
|
639
|
+
if (scopeRefusal) {
|
|
640
|
+
throw new BadDataException(scopeRefusal);
|
|
641
|
+
}
|
|
642
|
+
}
|
|
643
|
+
const claimDeadlineAt = OneUptimeDate.addRemoveSeconds(OneUptimeDate.getCurrentDate(), Math.ceil(((_c = data.claimTimeoutInMs) !== null && _c !== void 0 ? _c : DEFAULT_CLAIM_TIMEOUT_MS) / 1000));
|
|
644
|
+
const row = new Model();
|
|
645
|
+
row.projectId = data.projectId;
|
|
646
|
+
row.origin = data.origin;
|
|
647
|
+
if (data.aiRunId) {
|
|
648
|
+
row.aiRunId = data.aiRunId;
|
|
649
|
+
}
|
|
650
|
+
if (data.autoRemediationSuggestionId) {
|
|
651
|
+
row.autoRemediationSuggestionId = data.autoRemediationSuggestionId;
|
|
652
|
+
}
|
|
653
|
+
row.kubernetesClusterId = data.kubernetesClusterId;
|
|
654
|
+
row.stepId = data.stepId;
|
|
655
|
+
row.stepType = RunbookStepType.Kubectl;
|
|
656
|
+
row.targetAgentId = data.targetAgentId;
|
|
657
|
+
row.script = "";
|
|
658
|
+
row.payload = Object.assign(Object.assign({ args: policy.args, displayCommand: policy.displayCommand, tier: policy.tier, kubernetesClusterId: data.kubernetesClusterId.toString() }, (clusterIdentifier ? { clusterIdentifier } : {})), (data.credentialId ? { credentialId: data.credentialId } : {}));
|
|
659
|
+
row.timeoutInMs = data.timeoutInMs;
|
|
660
|
+
row.status = RunnerJobStatus.Pending;
|
|
661
|
+
row.claimDeadlineAt = claimDeadlineAt;
|
|
662
|
+
return this.create({ data: row, props: { isRoot: true } });
|
|
663
|
+
}
|
|
664
|
+
/*
|
|
665
|
+
* Which of the cluster's AI switches must still be on for this kubectl
|
|
666
|
+
* job, or null for none (the access test, which is how an operator checks
|
|
667
|
+
* access before turning AI on).
|
|
668
|
+
*
|
|
669
|
+
* A remediation job needs remediation. A read-only (investigation-origin)
|
|
670
|
+
* job follows the run it belongs to: a remediation run reads the cluster
|
|
671
|
+
* it may fix through the same read-only lane — even when the operator
|
|
672
|
+
* left investigation off — so its reads need remediation, and every
|
|
673
|
+
* other run's reads need the investigation switch.
|
|
674
|
+
*/
|
|
675
|
+
async getRequiredClusterSwitch(data) {
|
|
676
|
+
if (data.origin === RunnerJobOrigin.AiRemediation) {
|
|
677
|
+
return "remediation";
|
|
678
|
+
}
|
|
679
|
+
if (data.isAccessTest || !data.aiRunId) {
|
|
680
|
+
return null;
|
|
681
|
+
}
|
|
682
|
+
const run = await AIRunService.findOneBy({
|
|
683
|
+
query: {
|
|
684
|
+
_id: data.aiRunId.toString(),
|
|
685
|
+
projectId: data.projectId,
|
|
686
|
+
},
|
|
687
|
+
select: { _id: true, runType: true },
|
|
688
|
+
props: { isRoot: true },
|
|
689
|
+
});
|
|
690
|
+
return (run === null || run === void 0 ? void 0 : run.runType) && REMEDIATION_RUN_TYPES.includes(run.runType)
|
|
691
|
+
? "remediation"
|
|
692
|
+
: "investigation";
|
|
693
|
+
}
|
|
694
|
+
/*
|
|
695
|
+
* Why a kubectl job may NOT be enqueued for this cluster as it is
|
|
696
|
+
* configured right now, or null when it may. Pure, so the rule reads in
|
|
697
|
+
* one place: the job must go through the cluster's CURRENT binding, and
|
|
698
|
+
* the capability it is for must still be switched on.
|
|
699
|
+
*
|
|
700
|
+
* A credential-less job does not require the credential binding to be
|
|
701
|
+
* empty: the in-cluster Runner of the cluster wins over a bound
|
|
702
|
+
* credential (the readiness status prefers it), so such a job is
|
|
703
|
+
* legitimate with a credential still selected.
|
|
704
|
+
*/
|
|
705
|
+
static getClusterBindingRefusal(data) {
|
|
706
|
+
const { cluster, clusterLabel } = data;
|
|
707
|
+
if (!cluster.aiAccessRunnerId ||
|
|
708
|
+
cluster.aiAccessRunnerId.toString() !== data.targetAgentId.toString()) {
|
|
709
|
+
return `Cluster "${clusterLabel}" is no longer reached through this Runner (its AI access binding changed or was cleared on the cluster's AI page), so this kubectl command was not enqueued.`;
|
|
710
|
+
}
|
|
711
|
+
if (data.credentialId &&
|
|
712
|
+
(!cluster.aiAccessCredentialId ||
|
|
713
|
+
cluster.aiAccessCredentialId.toString() !== data.credentialId)) {
|
|
714
|
+
return `Cluster "${clusterLabel}" is no longer reached with this Kubernetes credential (its AI access binding changed or was cleared on the cluster's AI page), so this kubectl command was not enqueued.`;
|
|
715
|
+
}
|
|
716
|
+
if (data.requiredSwitch === "investigation" &&
|
|
717
|
+
cluster.isAiInvestigationEnabled !== true) {
|
|
718
|
+
return `"Let AI investigate with kubectl" is turned off for cluster "${clusterLabel}", so this investigation command was not enqueued.`;
|
|
719
|
+
}
|
|
720
|
+
if (data.requiredSwitch === "remediation" &&
|
|
721
|
+
!ENABLED_REMEDIATION_MODES.includes(cluster.aiRemediationMode)) {
|
|
722
|
+
return `AI remediation is turned off for cluster "${clusterLabel}", so this kubectl command was not enqueued.`;
|
|
723
|
+
}
|
|
724
|
+
return null;
|
|
725
|
+
}
|
|
196
726
|
/*
|
|
197
727
|
* The job this (execution, step) pair already produced, if any.
|
|
198
728
|
*
|
|
@@ -234,7 +764,10 @@ export class Service extends DatabaseService {
|
|
|
234
764
|
* don't fight over the same row.
|
|
235
765
|
*/
|
|
236
766
|
async claimNextJob(data) {
|
|
237
|
-
var _a;
|
|
767
|
+
var _a, _b;
|
|
768
|
+
if (data.allowedStepTypes && data.allowedStepTypes.length === 0) {
|
|
769
|
+
return null;
|
|
770
|
+
}
|
|
238
771
|
const dataSource = PostgresAppInstance.getDataSource();
|
|
239
772
|
if (!dataSource) {
|
|
240
773
|
throw new BadDataException("Database is not connected");
|
|
@@ -243,6 +776,7 @@ export class Service extends DatabaseService {
|
|
|
243
776
|
const allowedOrigins = data.allowedOrigins && data.allowedOrigins.length > 0
|
|
244
777
|
? data.allowedOrigins
|
|
245
778
|
: [RunnerJobOrigin.Runbook];
|
|
779
|
+
const allowedStepTypes = (_b = data.allowedStepTypes) !== null && _b !== void 0 ? _b : null;
|
|
246
780
|
const sql = `
|
|
247
781
|
WITH claimed AS (
|
|
248
782
|
SELECT "_id" FROM "RunnerJob"
|
|
@@ -250,6 +784,7 @@ export class Service extends DatabaseService {
|
|
|
250
784
|
AND "status" = $2
|
|
251
785
|
AND "targetAgentId" = $3::uuid
|
|
252
786
|
AND "origin" = ANY($6::text[])
|
|
787
|
+
AND ($7::text[] IS NULL OR "stepType" = ANY($7::text[]))
|
|
253
788
|
AND "claimDeadlineAt" > NOW()
|
|
254
789
|
AND "deletedAt" IS NULL
|
|
255
790
|
ORDER BY "createdAt" ASC
|
|
@@ -278,6 +813,7 @@ export class Service extends DatabaseService {
|
|
|
278
813
|
RunnerJobStatus.Claimed,
|
|
279
814
|
leaseMs.toString(),
|
|
280
815
|
allowedOrigins,
|
|
816
|
+
allowedStepTypes,
|
|
281
817
|
]));
|
|
282
818
|
if (!rows || rows.length === 0) {
|
|
283
819
|
return null;
|
|
@@ -347,8 +883,39 @@ export class Service extends DatabaseService {
|
|
|
347
883
|
]));
|
|
348
884
|
return rows.length > 0;
|
|
349
885
|
}
|
|
886
|
+
/*
|
|
887
|
+
* What an AI-origin job's output looks like on the row. The dashboard
|
|
888
|
+
* renders RunnerJob.output verbatim on the cluster's AI page and the
|
|
889
|
+
* remediation card, so a `kubectl get secret -o yaml` an investigation
|
|
890
|
+
* ran must never land there with its data values intact: the same two
|
|
891
|
+
* passes KubectlJobRunner applies before the model sees the output are
|
|
892
|
+
* applied here before the row does. Both are pure text transforms (the
|
|
893
|
+
* redactor is dependency-free by design; importing KubectlJobRunner into
|
|
894
|
+
* this service would be an import cycle). A runbook step's output is the
|
|
895
|
+
* operator's own script and is stored as it was.
|
|
896
|
+
*/
|
|
897
|
+
static redactAiJobText(text) {
|
|
898
|
+
return ToolResultSerializer.redact(KubectlOutputRedactor.redact(text).text)
|
|
899
|
+
.text;
|
|
900
|
+
}
|
|
901
|
+
/*
|
|
902
|
+
* A Runner's text as a Postgres text column can hold it. A NUL byte is
|
|
903
|
+
* ordinary in what a Runner reports — `kubectl logs` of a log that was
|
|
904
|
+
* rotated with copytruncate, a ConfigMap value `describe` prints
|
|
905
|
+
* verbatim, a script that writes binary — and Postgres refuses the whole
|
|
906
|
+
* UPDATE over one, so the result could never be stored: every submission
|
|
907
|
+
* failed the same way, the Runner retried it as if the server were down,
|
|
908
|
+
* and the job ended "result unknown" although the command had run. Each
|
|
909
|
+
* such character becomes U+FFFD instead, for every origin, and before
|
|
910
|
+
* anything else reads the text.
|
|
911
|
+
*/
|
|
912
|
+
static toStorableText(text) {
|
|
913
|
+
return text
|
|
914
|
+
.replace(NUL_CHARACTER_PATTERN, RUNNER_JOB_UNSTORABLE_CHARACTER_REPLACEMENT)
|
|
915
|
+
.replace(SURROGATE_PATTERN, keepSurrogatePairOnly);
|
|
916
|
+
}
|
|
350
917
|
async submitResult(data) {
|
|
351
|
-
var _a
|
|
918
|
+
var _a;
|
|
352
919
|
const dataSource = PostgresAppInstance.getDataSource();
|
|
353
920
|
if (!dataSource) {
|
|
354
921
|
throw new BadDataException("Database is not connected");
|
|
@@ -356,6 +923,27 @@ export class Service extends DatabaseService {
|
|
|
356
923
|
const status = data.success
|
|
357
924
|
? RunnerJobStatus.Succeeded
|
|
358
925
|
: RunnerJobStatus.Failed;
|
|
926
|
+
/*
|
|
927
|
+
* Made storable first: every text parameter below is bound whichever
|
|
928
|
+
* branch of the CASE the row takes, so one unstorable character in any
|
|
929
|
+
* of them would fail the write for every origin.
|
|
930
|
+
*/
|
|
931
|
+
const rawOutput = typeof data.output === "string"
|
|
932
|
+
? Service.toStorableText(data.output)
|
|
933
|
+
: null;
|
|
934
|
+
const rawErrorMessage = typeof data.errorMessage === "string"
|
|
935
|
+
? Service.toStorableText(data.errorMessage)
|
|
936
|
+
: null;
|
|
937
|
+
/*
|
|
938
|
+
* The origin decides which text is stored, and it is read in the same
|
|
939
|
+
* statement rather than looked up first so the lease check and the
|
|
940
|
+
* write stay one atomic step (and one round trip): the CASE picks the
|
|
941
|
+
* redacted text for an AI-origin row and the verbatim text otherwise.
|
|
942
|
+
*/
|
|
943
|
+
const redactedOutput = rawOutput === null ? null : Service.redactAiJobText(rawOutput);
|
|
944
|
+
const redactedErrorMessage = rawErrorMessage === null
|
|
945
|
+
? null
|
|
946
|
+
: Service.redactAiJobText(rawErrorMessage);
|
|
359
947
|
/*
|
|
360
948
|
* Only the agent that holds the lease is allowed to write the terminal
|
|
361
949
|
* result. If the lease has already moved on (Worker timed out and
|
|
@@ -364,9 +952,15 @@ export class Service extends DatabaseService {
|
|
|
364
952
|
const sql = `
|
|
365
953
|
UPDATE "RunnerJob"
|
|
366
954
|
SET "status" = $1,
|
|
367
|
-
"output" =
|
|
955
|
+
"output" = CASE
|
|
956
|
+
WHEN "origin" = ANY($9::text[]) THEN $10::text
|
|
957
|
+
ELSE $2::text
|
|
958
|
+
END,
|
|
368
959
|
"exitCode" = $3,
|
|
369
|
-
"errorMessage" =
|
|
960
|
+
"errorMessage" = CASE
|
|
961
|
+
WHEN "origin" = ANY($9::text[]) THEN $11::text
|
|
962
|
+
ELSE $4::text
|
|
963
|
+
END,
|
|
370
964
|
"completedAt" = NOW(),
|
|
371
965
|
"updatedAt" = NOW(),
|
|
372
966
|
"version" = "version" + 1
|
|
@@ -377,13 +971,16 @@ export class Service extends DatabaseService {
|
|
|
377
971
|
`;
|
|
378
972
|
const rows = unwrapRows(await dataSource.query(sql, [
|
|
379
973
|
status,
|
|
380
|
-
|
|
381
|
-
(
|
|
382
|
-
|
|
974
|
+
rawOutput,
|
|
975
|
+
(_a = data.exitCode) !== null && _a !== void 0 ? _a : null,
|
|
976
|
+
rawErrorMessage,
|
|
383
977
|
data.jobId.toString(),
|
|
384
978
|
data.agentId.toString(),
|
|
385
979
|
RunnerJobStatus.Claimed,
|
|
386
980
|
RunnerJobStatus.Running,
|
|
981
|
+
AI_COMMAND_JOB_ORIGINS,
|
|
982
|
+
redactedOutput,
|
|
983
|
+
redactedErrorMessage,
|
|
387
984
|
]));
|
|
388
985
|
return rows.length > 0;
|
|
389
986
|
}
|
|
@@ -415,6 +1012,9 @@ export class Service extends DatabaseService {
|
|
|
415
1012
|
startedAt: true,
|
|
416
1013
|
completedAt: true,
|
|
417
1014
|
assignedAgentId: true,
|
|
1015
|
+
// The timeout reason is worded for what the job is.
|
|
1016
|
+
origin: true,
|
|
1017
|
+
stepType: true,
|
|
418
1018
|
},
|
|
419
1019
|
props: { isRoot: true },
|
|
420
1020
|
});
|
|
@@ -425,29 +1025,34 @@ export class Service extends DatabaseService {
|
|
|
425
1025
|
return job;
|
|
426
1026
|
}
|
|
427
1027
|
const now = OneUptimeDate.getCurrentDate();
|
|
428
|
-
|
|
1028
|
+
let timeoutKind = null;
|
|
429
1029
|
if (job.status === RunnerJobStatus.Pending &&
|
|
430
1030
|
job.claimDeadlineAt &&
|
|
431
1031
|
now > job.claimDeadlineAt) {
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
reason: "No runbook agent picked up this step before the wait window expired. The agent may be offline — check that it is running and reachable, then try again.",
|
|
435
|
-
});
|
|
1032
|
+
// Pending with claim deadline elapsed -> no agent picked it up.
|
|
1033
|
+
timeoutKind = "unclaimed";
|
|
436
1034
|
}
|
|
437
|
-
|
|
438
|
-
if ((job.status === RunnerJobStatus.Claimed ||
|
|
1035
|
+
else if ((job.status === RunnerJobStatus.Claimed ||
|
|
439
1036
|
job.status === RunnerJobStatus.Running) &&
|
|
440
1037
|
job.leaseExpiresAt &&
|
|
441
1038
|
now > job.leaseExpiresAt) {
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
1039
|
+
// Claimed/Running with lease elapsed -> agent went silent.
|
|
1040
|
+
timeoutKind = "lease_expired";
|
|
1041
|
+
}
|
|
1042
|
+
else if (now > overallDeadline) {
|
|
1043
|
+
timeoutKind = "overall";
|
|
446
1044
|
}
|
|
447
|
-
if (
|
|
1045
|
+
if (timeoutKind) {
|
|
448
1046
|
return this.timeoutJob({
|
|
449
1047
|
jobId: data.jobId,
|
|
450
|
-
reason:
|
|
1048
|
+
reason: describeRunnerJobTimeout({
|
|
1049
|
+
kind: timeoutKind,
|
|
1050
|
+
wasClaimed: job.status !== RunnerJobStatus.Pending,
|
|
1051
|
+
origin: job.origin,
|
|
1052
|
+
stepType: job.stepType,
|
|
1053
|
+
claimTimeoutInMs: data.claimTimeoutInMs,
|
|
1054
|
+
executionTimeoutInMs: data.executionTimeoutInMs,
|
|
1055
|
+
}),
|
|
451
1056
|
});
|
|
452
1057
|
}
|
|
453
1058
|
await Sleep.sleep(POLL_INTERVAL_MS);
|
|
@@ -482,6 +1087,12 @@ export class Service extends DatabaseService {
|
|
|
482
1087
|
RunnerJobStatus.TimedOut,
|
|
483
1088
|
RunnerJobStatus.Cancelled,
|
|
484
1089
|
]);
|
|
1090
|
+
/*
|
|
1091
|
+
* The claim facts come back with the row, so a caller can tell whether
|
|
1092
|
+
* any Runner ever picked the job up (claimedAt / assignedAgentId) or
|
|
1093
|
+
* started it (startedAt) — "nothing ran" versus "unknown" — without a
|
|
1094
|
+
* second read.
|
|
1095
|
+
*/
|
|
485
1096
|
const updated = await this.findOneById({
|
|
486
1097
|
id: data.jobId,
|
|
487
1098
|
select: {
|
|
@@ -491,6 +1102,9 @@ export class Service extends DatabaseService {
|
|
|
491
1102
|
exitCode: true,
|
|
492
1103
|
errorMessage: true,
|
|
493
1104
|
completedAt: true,
|
|
1105
|
+
claimedAt: true,
|
|
1106
|
+
startedAt: true,
|
|
1107
|
+
assignedAgentId: true,
|
|
494
1108
|
},
|
|
495
1109
|
props: { isRoot: true },
|
|
496
1110
|
});
|
|
@@ -535,6 +1149,12 @@ __decorate([
|
|
|
535
1149
|
__metadata("design:paramtypes", [Object]),
|
|
536
1150
|
__metadata("design:returntype", Promise)
|
|
537
1151
|
], Service.prototype, "enqueueAiCommand", null);
|
|
1152
|
+
__decorate([
|
|
1153
|
+
CaptureSpan(),
|
|
1154
|
+
__metadata("design:type", Function),
|
|
1155
|
+
__metadata("design:paramtypes", [Object]),
|
|
1156
|
+
__metadata("design:returntype", Promise)
|
|
1157
|
+
], Service.prototype, "enqueueAiKubectlCommand", null);
|
|
538
1158
|
__decorate([
|
|
539
1159
|
CaptureSpan(),
|
|
540
1160
|
__metadata("design:type", Function),
|