@oneuptime/common 14.0.7 → 14.0.9
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/Incident.ts +267 -1
- package/Models/DatabaseModels/IncidentCustomField.ts +202 -0
- package/Models/DatabaseModels/IncidentEpisode.ts +30 -0
- package/Models/DatabaseModels/IncidentTemplate.ts +126 -1
- package/Models/DatabaseModels/Index.ts +2 -0
- package/Models/DatabaseModels/KubernetesAiAgent.ts +364 -0
- package/Models/DatabaseModels/KubernetesCluster.ts +3 -3
- package/Models/DatabaseModels/Project.ts +55 -5
- package/Models/DatabaseModels/ProxmoxResource.ts +49 -1
- package/Models/DatabaseModels/RunnerJob.ts +75 -0
- package/Models/DatabaseModels/StatusPage.ts +55 -0
- package/Models/DatabaseModels/StatusPageSubscriber.ts +128 -0
- package/Models/DatabaseModels/TeamComplianceSetting.ts +143 -2
- package/Models/DatabaseModels/WorkspaceProjectAuthToken.ts +17 -0
- package/Server/API/AIChatAPI.ts +6 -3
- package/Server/API/AIInvestigationAPI.ts +17 -10
- package/Server/API/AutoRemediationAPI.ts +207 -25
- package/Server/API/IncidentAPI.ts +162 -0
- package/Server/API/KubernetesClusterAiAccessAPI.ts +623 -21
- package/Server/API/MicrosoftTeamsAPI.ts +93 -14
- package/Server/API/ProxmoxResourceAPI.ts +244 -14
- package/Server/API/StatusPageAPI.ts +487 -171
- package/Server/API/StatusPageSubscriberAPI.ts +63 -15
- package/Server/Infrastructure/GlobalCache.ts +32 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1795300000000-SkipHiddenIncidentCreatedNotifications.ts +49 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1795400000000-AddIncidentStatusPageScope.ts +108 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1795500000000-AddIncidentTemplateStatusPageScopeFlag.ts +33 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1795600000000-AddStatusPageSubscriberUnsubscribeToken.ts +51 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1795700000000-AddStatusPageSubscriberIsAddedByTeam.ts +33 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1795800000000-AddIncidentCustomFieldCreateAndNotificationSettings.ts +168 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1795900000000-AddSubscriberNotificationClaimedAt.ts +44 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1796000000000-AddTeamComplianceRuleScope.ts +99 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1796100000000-AddKubernetesAiAgentAndAiDefaults.ts +137 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1796200000000-AddProxmoxResourceNativePushColumns.ts +42 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +20 -0
- package/Server/Infrastructure/Semaphore.ts +10 -0
- package/Server/Middleware/IdentityRateLimit.ts +108 -3
- package/Server/Middleware/SubscriberNotificationPreviewRateLimit.ts +237 -0
- package/Server/Middleware/SubscriberNotificationTestSendRateLimit.ts +304 -0
- package/Server/Middleware/TelemetryIngest.ts +41 -18
- package/Server/Services/AIService.ts +70 -1
- package/Server/Services/AlertService.ts +352 -11
- package/Server/Services/AlertSeverityService.ts +65 -15
- package/Server/Services/AutoRemediationRuleService.ts +1 -1
- package/Server/Services/DatabaseService.ts +93 -10
- package/Server/Services/IncidentCustomFieldService.ts +276 -1
- package/Server/Services/IncidentEpisodePublicNoteService.ts +28 -0
- package/Server/Services/IncidentEpisodeService.ts +15 -0
- package/Server/Services/IncidentEpisodeStateTimelineService.ts +27 -1
- package/Server/Services/IncidentPublicNoteService.ts +30 -1
- package/Server/Services/IncidentService.ts +1788 -142
- package/Server/Services/IncidentSeverityService.ts +66 -15
- package/Server/Services/IncidentStateTimelineService.ts +13 -0
- package/Server/Services/IncidentTemplateService.ts +109 -0
- package/Server/Services/KubernetesAiAgentJobService.ts +185 -0
- package/Server/Services/KubernetesAiAgentService.ts +1634 -0
- package/Server/Services/KubernetesClusterAiAccessService.ts +1118 -451
- package/Server/Services/KubernetesClusterService.ts +129 -21
- package/Server/Services/ProjectService.ts +32 -0
- package/Server/Services/ProxmoxResourceService.ts +322 -5
- package/Server/Services/RunnerJobService.ts +241 -104
- package/Server/Services/RunnerService.ts +1 -1
- package/Server/Services/ScheduledMaintenancePublicNoteService.ts +30 -1
- package/Server/Services/ScheduledMaintenanceService.ts +805 -19
- package/Server/Services/ScheduledMaintenanceStateTimelineService.ts +414 -56
- package/Server/Services/SmsService.ts +10 -0
- package/Server/Services/StatusPageService.ts +65 -8
- package/Server/Services/StatusPageSubscriberNotificationTemplateService.ts +299 -37
- package/Server/Services/StatusPageSubscriberNotificationTemplateStatusPageService.ts +129 -0
- package/Server/Services/StatusPageSubscriberService.ts +1161 -64
- package/Server/Services/TeamComplianceSettingService.ts +1125 -9
- package/Server/Types/Markdown.ts +153 -6
- package/Server/Types/Workflow/Components/Email.ts +61 -2
- package/Server/Utils/AI/ClusterAccess/ClusterAccessContext.ts +67 -9
- package/Server/Utils/AI/ClusterAccess/KubectlInvestigationToolkit.ts +39 -10
- package/Server/Utils/AI/ClusterAccess/KubectlJobRunner.ts +14 -3
- package/Server/Utils/AI/Remediation/RemediationCommandTools.ts +37 -15
- package/Server/Utils/AI/Remediation/RemediationExecutionRunner.ts +67 -24
- package/Server/Utils/AI/SRE/AIInvestigationEngine.ts +48 -5
- package/Server/Utils/AI/SRE/IncidentPostmortemRunner.ts +40 -8
- package/Server/Utils/AI/SRE/InvestigationEligibility.ts +13 -2
- package/Server/Utils/AI/SRE/InvestigationGrader.ts +1 -1
- package/Server/Utils/AutoRemediation/CommandPlanExecutor.ts +6 -1
- package/Server/Utils/CustomField/CustomFieldRename.ts +378 -0
- package/Server/Utils/DataSource/EgressGuard.ts +66 -21
- package/Server/Utils/Mail/PinnedSmtpSocket.ts +130 -0
- package/Server/Utils/Monitor/MonitorCriteriaObservationBuilder.ts +10 -0
- package/Server/Utils/SSRFProtection.ts +76 -16
- package/Server/Utils/StatusPage/IncidentStatusPageScope.ts +948 -0
- package/Server/Utils/StatusPage/IncidentSubscriberAudienceBuilder.ts +656 -0
- package/Server/Utils/StatusPage/IncidentTemplateVariableBuilder.ts +805 -0
- package/Server/Utils/StatusPage/StatusPageExclusion.ts +18 -0
- package/Server/Utils/StatusPage/StatusPageReadAccess.ts +125 -0
- package/Server/Utils/StatusPage/StatusPageSubscriberUnsubscribeNotice.ts +151 -0
- package/Server/Utils/StatusPage/StatusPageSubscriberUnsubscribeToken.ts +70 -0
- package/Server/Utils/StatusPage/SubscriberIncidentEmailBuilder.ts +421 -0
- package/Server/Utils/StatusPage/SubscriberNotificationClaim.ts +107 -0
- package/Server/Utils/StatusPage/SubscriberNotificationDeliveryRecord.ts +1049 -0
- package/Server/Utils/StatusPage/SubscriberNotificationFanOut.ts +180 -0
- package/Server/Utils/StatusPage/SubscriberNotificationPreviewBuilder.ts +839 -0
- package/Server/Utils/StatusPage/SubscriberNotificationResendAccess.ts +393 -0
- package/Server/Utils/StatusPage/SubscriberNotificationRunLimit.ts +246 -0
- package/Server/Utils/StatusPage/SubscriberNotificationTiming.ts +133 -0
- package/Server/Utils/StatusPage/SubscriberTemplateIncidentRecordAccess.ts +215 -0
- package/Server/Utils/StatusPageResource.ts +51 -20
- package/Server/Utils/Telemetry/InventoryEntityRegistry.ts +133 -7
- package/Server/Utils/Telemetry/ProxmoxCephSnapshotScan.ts +58 -4
- package/Server/Utils/Telemetry/ProxmoxNativeNodeLiveness.ts +447 -0
- package/Server/Utils/Telemetry/ProxmoxNativePush.ts +903 -0
- package/Server/Utils/Telemetry/TelemetryEntity.ts +87 -27
- package/Server/Utils/VM/VMAPI.ts +1 -0
- package/Server/Utils/VM/VMRunner.ts +10 -0
- package/Server/Utils/Workflow/OAuth2TokenClient.ts +10 -0
- package/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.ts +684 -47
- package/Server/Views/Partials/SensitiveUrlToken.ejs +8 -5
- package/Tests/App/Accounts/RegisterVerifyEmail.test.tsx +748 -0
- package/Tests/App/Accounts/ResendVerificationEmail.test.tsx +1222 -0
- package/Tests/App/Accounts/VerificationEmailResendUtils.test.ts +797 -0
- package/Tests/App/Accounts/VerifyEmailPending.test.tsx +538 -0
- package/Tests/App/Accounts/VerifyEmailResend.test.tsx +779 -0
- package/Tests/App/AdminDashboard/RowActionPlacementOverrides.test.tsx +278 -0
- package/Tests/App/Dashboard/AIChatChartWidgetZoom.test.tsx +738 -0
- package/Tests/App/Dashboard/AIFeaturesSettingsPointers.test.tsx +147 -0
- package/Tests/App/Dashboard/AIInsightsKubernetesClusterPage.test.tsx +1523 -0
- package/Tests/App/Dashboard/AdminUserNotificationMethodsPage.test.tsx +463 -3
- package/Tests/App/Dashboard/AffectedResourcesPickerDropdownPlacement.test.tsx +958 -0
- package/Tests/App/Dashboard/AffectedResourcesPickerFocusLeave.test.tsx +595 -0
- package/Tests/App/Dashboard/AskAiAvailability.test.ts +20 -3
- package/Tests/App/Dashboard/AskAiDisabled.test.tsx +8 -3
- package/Tests/App/Dashboard/CephRateChartReload.test.tsx +1456 -0
- package/Tests/App/Dashboard/CephTimeRangeZoom.test.tsx +1229 -0
- package/Tests/App/Dashboard/ChartCardTimeRangeZoom.test.tsx +151 -0
- package/Tests/App/Dashboard/ChartCardZoomAffordances.test.tsx +257 -0
- package/Tests/App/Dashboard/ChartRefetchFrame.test.tsx +141 -0
- package/Tests/App/Dashboard/ChartZoomHarness.tsx +249 -0
- package/Tests/App/Dashboard/ChartZoomStandIn.tsx +131 -0
- package/Tests/App/Dashboard/CloudServerlessSlowLoads.test.tsx +628 -0
- package/Tests/App/Dashboard/CloudServerlessTimeRangeZoom.test.tsx +607 -0
- package/Tests/App/Dashboard/ClusterAccessNotice.test.tsx +91 -19
- package/Tests/App/Dashboard/CompanionMetricsTabZoom.test.tsx +632 -0
- package/Tests/App/Dashboard/ContainerChartZoomStandIn.tsx +195 -0
- package/Tests/App/Dashboard/ContainerHostOverviewSlowLoads.test.tsx +542 -0
- package/Tests/App/Dashboard/ContainerHostOverviewTimeRangeZoom.test.tsx +848 -0
- package/Tests/App/Dashboard/ContainerMetricsTimeRangeZoom.test.tsx +561 -0
- package/Tests/App/Dashboard/CustomFieldsSettingsIncidentOptions.test.tsx +357 -0
- package/Tests/App/Dashboard/DashboardBoardWideZoomShell.test.tsx +1147 -0
- package/Tests/App/Dashboard/DashboardEditPermissions.test.tsx +3 -2
- package/Tests/App/Dashboard/DashboardHistogramWidgetDragCursor.test.tsx +399 -0
- package/Tests/App/Dashboard/DashboardHistogramWidgetZoom.test.tsx +985 -0
- package/Tests/App/Dashboard/DashboardHistogramWidgetZoomHint.test.tsx +803 -0
- package/Tests/App/Dashboard/DashboardLazyPages.test.tsx +1 -0
- package/Tests/App/Dashboard/DashboardSettingsPreviewZoom.test.tsx +679 -0
- package/Tests/App/Dashboard/DashboardSloAndDataSourceChartZoom.test.tsx +881 -0
- package/Tests/App/Dashboard/DashboardTraceStatusWidgets.test.tsx +878 -0
- package/Tests/App/Dashboard/DatabaseMetricChartModalTimeRangeZoom.test.tsx +442 -0
- package/Tests/App/Dashboard/DatabaseOverviewTimeRangeZoom.test.tsx +831 -0
- package/Tests/App/Dashboard/DatabaseServerComponents.test.tsx +43 -0
- package/Tests/App/Dashboard/DockerSwarmInsightsTimeRangeZoom.test.tsx +524 -0
- package/Tests/App/Dashboard/DockerSwarmRateChartRefresh.test.tsx +259 -0
- package/Tests/App/Dashboard/EdgeDetailPanelHistory.test.tsx +763 -0
- package/Tests/App/Dashboard/EdgeDetailPanelTimeRangeZoom.test.tsx +547 -0
- package/Tests/App/Dashboard/EdgeHistoryBucketsCases.tsx +565 -0
- package/Tests/App/Dashboard/EdgeHistoryBucketsKathmandu.test.tsx +73 -0
- package/Tests/App/Dashboard/EdgeHistoryBucketsKolkata.test.tsx +74 -0
- package/Tests/App/Dashboard/EdgeHistoryBucketsNewYork.test.tsx +72 -0
- package/Tests/App/Dashboard/EdgeHistoryBucketsUtc.test.tsx +72 -0
- package/Tests/App/Dashboard/EmbeddedMetricCardRefresh.test.tsx +310 -0
- package/Tests/App/Dashboard/EmbeddedMetricCardTimeRangeZoom.test.tsx +536 -0
- package/Tests/App/Dashboard/EscalationRuleReadiness.test.tsx +3 -1
- package/Tests/App/Dashboard/EscalationRuleRowActions.test.tsx +660 -0
- package/Tests/App/Dashboard/EventNotes.test.tsx +778 -2
- package/Tests/App/Dashboard/EventNotesPages.test.tsx +119 -0
- package/Tests/App/Dashboard/EventNotesUtil.test.ts +116 -17
- package/Tests/App/Dashboard/EventOverviewPages.test.tsx +828 -17
- package/Tests/App/Dashboard/EventOverviewSnapshotExplorerZoom.test.tsx +1139 -0
- package/Tests/App/Dashboard/EventOverviewSnapshotZoomAcrossTabs.test.tsx +1057 -0
- package/Tests/App/Dashboard/EventOverviewTelemetrySnapshotZoom.test.tsx +757 -0
- package/Tests/App/Dashboard/ExceptionOccurrenceTrendZoom.test.tsx +675 -0
- package/Tests/App/Dashboard/ExceptionOccurrencesZoomSurvivesViewSwitch.test.tsx +405 -0
- package/Tests/App/Dashboard/ExceptionSignalPages.test.tsx +67 -3
- package/Tests/App/Dashboard/ExceptionTablesSpanStatus.test.tsx +515 -0
- package/Tests/App/Dashboard/ExplorerOwnZoomRegression.test.tsx +739 -0
- package/Tests/App/Dashboard/FlowBandwidthAxisCases.tsx +461 -0
- package/Tests/App/Dashboard/FlowBandwidthAxisKathmandu.test.tsx +25 -0
- package/Tests/App/Dashboard/FlowBandwidthAxisKolkata.test.tsx +25 -0
- package/Tests/App/Dashboard/FlowBandwidthAxisNewYork.test.tsx +25 -0
- package/Tests/App/Dashboard/FlowBandwidthAxisUtc.test.tsx +24 -0
- package/Tests/App/Dashboard/FlowTopTalkersZoomRefetch.test.tsx +722 -0
- package/Tests/App/Dashboard/FlowViewportGuard.test.tsx +2526 -0
- package/Tests/App/Dashboard/HostPagesSlowLoads.test.tsx +872 -0
- package/Tests/App/Dashboard/HostPagesTimeRangeZoom.test.tsx +1208 -0
- package/Tests/App/Dashboard/IncidentChangeStateNotifyDefault.test.tsx +91 -1
- package/Tests/App/Dashboard/IncidentCreateDetailsStep.test.tsx +643 -0
- package/Tests/App/Dashboard/IncidentCreateFromAlerts.test.tsx +8 -1
- package/Tests/App/Dashboard/IncidentCreateStatusPageScope.test.tsx +601 -0
- package/Tests/App/Dashboard/IncidentCustomFieldTemplateVariables.test.tsx +386 -0
- package/Tests/App/Dashboard/IncidentNoteTemplatePlaceholders.test.tsx +124 -0
- package/Tests/App/Dashboard/IncidentNoteTemplateVariablesLoader.test.ts +305 -0
- package/Tests/App/Dashboard/IncidentOverviewNotifyDefault.test.tsx +112 -0
- package/Tests/App/Dashboard/IncidentRootCauseTimeRangeZoom.test.tsx +358 -0
- package/Tests/App/Dashboard/IncidentSettingsRenotifyOnPublish.test.tsx +674 -0
- package/Tests/App/Dashboard/IncidentSettingsStatusPageScope.test.tsx +1051 -0
- package/Tests/App/Dashboard/IncidentTemplateCustomFields.test.tsx +384 -0
- package/Tests/App/Dashboard/IncidentTemplateStatusPageScopeCard.test.tsx +215 -0
- package/Tests/App/Dashboard/InfrastructureGraph.test.tsx +100 -9
- package/Tests/App/Dashboard/InfrastructureMetricsTabTimeRangeZoom.test.tsx +485 -0
- package/Tests/App/Dashboard/InvestigationDrawerCompanionZoom.test.tsx +655 -0
- package/Tests/App/Dashboard/InvestigationDrawerZoom.test.tsx +830 -0
- package/Tests/App/Dashboard/InvestigationNotStarted.test.tsx +338 -2
- package/Tests/App/Dashboard/InvoicesPayInvoice.test.tsx +454 -16
- package/Tests/App/Dashboard/KubernetesClusterAiAccessSettings.test.ts +799 -819
- package/Tests/App/Dashboard/KubernetesClusterAiAgentOverviewCard.test.tsx +367 -0
- package/Tests/App/Dashboard/KubernetesClusterAiAgentStatus.test.ts +1202 -0
- package/Tests/App/Dashboard/KubernetesClusterAiDocumentationMarkdown.test.ts +106 -0
- package/Tests/App/Dashboard/KubernetesClusterAiNavigation.test.tsx +354 -0
- package/Tests/App/Dashboard/KubernetesClusterAiPage.test.tsx +1884 -2054
- package/Tests/App/Dashboard/KubernetesClusterAiPageServerParity.test.ts +478 -179
- package/Tests/App/Dashboard/KubernetesClusterMetricTooltips.test.ts +50 -0
- package/Tests/App/Dashboard/KubernetesClusterOverviewTooltips.test.tsx +2 -1
- package/Tests/App/Dashboard/KubernetesClusterOverviewZoom.test.tsx +1217 -0
- package/Tests/App/Dashboard/KubernetesClusterPagesZoom.test.tsx +731 -0
- package/Tests/App/Dashboard/KubernetesCostsLoadRecovery.test.tsx +869 -0
- package/Tests/App/Dashboard/KubernetesCostsZoom.test.tsx +1214 -0
- package/Tests/App/Dashboard/KubernetesCostsZoomExactHours.test.tsx +692 -0
- package/Tests/App/Dashboard/KubernetesNetworkThroughputReload.test.tsx +902 -0
- package/Tests/App/Dashboard/KubernetesNetworkZoomBucketEdges.test.tsx +571 -0
- package/Tests/App/Dashboard/KubernetesOverviewZoomBucketEdges.test.tsx +697 -0
- package/Tests/App/Dashboard/KubernetesResourceMetricsTabZoom.test.tsx +633 -0
- package/Tests/App/Dashboard/LogsExplorerTimeRangeZoom.test.tsx +470 -0
- package/Tests/App/Dashboard/LogsInsightsTimeRangeZoom.test.tsx +948 -0
- package/Tests/App/Dashboard/LogsViewerPinnedWindowZoom.test.tsx +486 -0
- package/Tests/App/Dashboard/MetricChartsBucketInspectorDoubleClick.test.tsx +1001 -0
- package/Tests/App/Dashboard/MetricExplorerInvestigationAutoRefresh.test.tsx +514 -0
- package/Tests/App/Dashboard/MetricExplorerSavedViewZoomRoundTrip.test.tsx +581 -0
- package/Tests/App/Dashboard/MetricExplorerTimeRangeZoom.test.tsx +1162 -0
- package/Tests/App/Dashboard/MetricMonitorPreviewZoomLabel.test.ts +72 -0
- package/Tests/App/Dashboard/MetricRowSparklineTimeRangeZoom.test.tsx +204 -0
- package/Tests/App/Dashboard/MetricViewFirstResultLands.test.tsx +408 -0
- package/Tests/App/Dashboard/MetricViewOwnZoomResetPlacement.test.tsx +952 -0
- package/Tests/App/Dashboard/MetricViewTimeRange.test.ts +139 -0
- package/Tests/App/Dashboard/MetricViewTimeRangeZoom.test.tsx +556 -0
- package/Tests/App/Dashboard/MonitorMetricsChartWrappersZoom.test.tsx +552 -0
- package/Tests/App/Dashboard/MonitorMetricsTabsTimeRangeZoom.test.tsx +740 -0
- package/Tests/App/Dashboard/MonitorOverviewChartsTimeRangeZoom.test.tsx +735 -0
- package/Tests/App/Dashboard/MonitorStepPreviewsTimeRangeZoom.test.tsx +835 -0
- package/Tests/App/Dashboard/NetworkDeviceTimeRangeZoom.test.tsx +1115 -0
- package/Tests/App/Dashboard/OnCallPreventionGuards.test.tsx +186 -17
- package/Tests/App/Dashboard/OnCallRulesDeleteGuard.test.tsx +155 -46
- package/Tests/App/Dashboard/PasskeySettings.test.tsx +87 -2
- package/Tests/App/Dashboard/ProjectAISettingsPages.test.tsx +884 -0
- package/Tests/App/Dashboard/ProxmoxNodeRemove.test.tsx +621 -0
- package/Tests/App/Dashboard/ProxmoxOverviewSlowLoads.test.tsx +584 -0
- package/Tests/App/Dashboard/ProxmoxPagesTimeRangeZoom.test.tsx +823 -0
- package/Tests/App/Dashboard/ProxmoxRateChartReload.test.tsx +1253 -0
- package/Tests/App/Dashboard/PublicDashboardBoardWideZoom.test.tsx +605 -0
- package/Tests/App/Dashboard/PublicNotePagesNotifyDefault.test.tsx +113 -1
- package/Tests/App/Dashboard/RealRowsLineChart.tsx +250 -0
- package/Tests/App/Dashboard/RechartsHostsPlotCursor.test.tsx +513 -0
- package/Tests/App/Dashboard/RowActionPlacementOverrides.test.tsx +865 -0
- package/Tests/App/Dashboard/RumOverviewTimeRangeZoom.test.tsx +877 -0
- package/Tests/App/Dashboard/RunnerKubernetesAgentForm.test.tsx +20 -4
- package/Tests/App/Dashboard/RunnerSupersededByAiAgentNote.test.tsx +296 -0
- package/Tests/App/Dashboard/SecurityEventConnectionsTable.test.tsx +146 -36
- package/Tests/App/Dashboard/ServiceDatabaseSlowLoads.test.tsx +1166 -0
- package/Tests/App/Dashboard/ServiceMapGraph.test.tsx +1243 -104
- package/Tests/App/Dashboard/ServiceOverviewTimeRangeZoom.test.tsx +792 -0
- package/Tests/App/Dashboard/SloBudgetBurnDownZoom.test.tsx +771 -0
- package/Tests/App/Dashboard/SloBudgetBurnDownZoomAffordances.test.tsx +380 -0
- package/Tests/App/Dashboard/SloEventMetricsBarChartZoom.test.tsx +369 -0
- package/Tests/App/Dashboard/SloHistoryChartsTimeRangeZoom.test.tsx +694 -0
- package/Tests/App/Dashboard/SloHistoryChartsZoomAffordances.test.tsx +497 -0
- package/Tests/App/Dashboard/SloMetricsTimeRangeZoom.test.tsx +541 -0
- package/Tests/App/Dashboard/SlowLoadHarness.ts +123 -0
- package/Tests/App/Dashboard/SnapshotExplorerPrimaryZoom.test.tsx +1194 -0
- package/Tests/App/Dashboard/SnapshotViewerPinnedWindow.test.tsx +620 -0
- package/Tests/App/Dashboard/SubscriberAudienceSummary.test.tsx +512 -0
- package/Tests/App/Dashboard/SubscriberNotificationPreviewModal.test.tsx +837 -0
- package/Tests/App/Dashboard/SubscriberNotificationStatusLabel.test.tsx +88 -0
- package/Tests/App/Dashboard/SubscriberNotificationStatusResend.test.tsx +473 -0
- package/Tests/App/Dashboard/SubscriberTemplateLivePreview.test.tsx +196 -0
- package/Tests/App/Dashboard/TeamAddedSubscribersUnsubscribedNotice.test.tsx +248 -0
- package/Tests/App/Dashboard/TelemetrySnapshotPanelTimeRangeZoom.test.tsx +765 -0
- package/Tests/App/Dashboard/TelemetrySnapshotZoom.test.tsx +516 -0
- package/Tests/App/Dashboard/TelemetrySnapshotZoomAcrossTabs.test.tsx +827 -0
- package/Tests/App/Dashboard/TimeRangeZoomPageHarness.tsx +463 -0
- package/Tests/App/Dashboard/TraceChartEditorStatusSplit.test.tsx +543 -0
- package/Tests/App/Dashboard/TraceStatusPresentation.test.tsx +967 -0
- package/Tests/App/Dashboard/TraceTimelineMinimapZoom.test.tsx +315 -0
- package/Tests/App/Dashboard/TracesAnalyticsStatusSplit.test.tsx +778 -0
- package/Tests/App/Dashboard/TracesAnalyticsViewZoom.test.tsx +349 -0
- package/Tests/App/Dashboard/TracesExplorerTimeRangeZoom.test.tsx +551 -0
- package/Tests/App/Dashboard/TracesStatusChartAndFacet.test.tsx +687 -0
- package/Tests/App/Dashboard/TracesViewerStaleResponses.test.tsx +458 -0
- package/Tests/App/Dashboard/UptimeStripsExcludedFromZoom.test.tsx +406 -0
- package/Tests/App/Dashboard/VMwareOverviewSlowLoads.test.tsx +535 -0
- package/Tests/App/Dashboard/VMwarePagesTimeRangeZoom.test.tsx +606 -0
- package/Tests/App/Dashboard/ValueWidgetSparklineStaleHover.test.tsx +1292 -0
- package/Tests/App/Dashboard/ValueWidgetSparklineZoom.test.tsx +765 -0
- package/Tests/App/SensitiveUrlTokenBootstrap.test.ts +64 -3
- package/Tests/App/StatusPage/StatusPageResourceExplorer.test.tsx +98 -0
- package/Tests/App/StatusPage/StatusPageUnsubscribePage.test.tsx +412 -0
- package/Tests/Models/DatabaseModels/KubernetesAiAgentModel.test.ts +295 -0
- package/Tests/Models/DatabaseModels/TeamComplianceSettingModel.test.ts +347 -0
- package/Tests/Models/IncidentCustomFieldApiSchemaContract.test.ts +217 -0
- package/Tests/Models/IncidentCustomFieldCreateSettingsColumns.test.ts +252 -0
- package/Tests/Models/StatusPageSubscriberUnsubscribeColumns.test.ts +218 -0
- package/Tests/Server/API/AIChatRouteAuthorization.test.ts +58 -0
- package/Tests/Server/API/AIGenerationProjectAIToggle.test.ts +1 -1
- package/Tests/Server/API/AIInvestigationAPI.test.ts +123 -45
- package/Tests/Server/API/AutoRemediationApproveClusterRound.test.ts +1329 -0
- package/Tests/Server/API/AutoRemediationApproveKubectlRecheck.test.ts +25 -2
- package/Tests/Server/API/ExpiredSessionRouteGuards.test.ts +7 -0
- package/Tests/Server/API/IncidentSubscriberAudienceAPI.test.ts +1408 -0
- package/Tests/Server/API/KubernetesClusterAiAccessAPI.test.ts +2 -0
- package/Tests/Server/API/KubernetesClusterAiAccessAPIAgent.test.ts +903 -0
- package/Tests/Server/API/MicrosoftTeamsChatsRefreshRoute.test.ts +667 -0
- package/Tests/Server/API/MicrosoftTeamsManifest.test.ts +294 -6
- package/Tests/Server/API/ProxmoxResourceAPIRemoveNode.test.ts +1932 -0
- package/Tests/Server/API/StatusPageIncidentScope.test.ts +1868 -0
- package/Tests/Server/API/StatusPageIncidentScopePostgres.test.ts +790 -0
- package/Tests/Server/API/StatusPageManageSubscriptionRecipient.test.ts +10 -1
- package/Tests/Server/API/StatusPageManageSubscriptionTemplateVariables.test.ts +206 -18
- package/Tests/Server/API/StatusPagePostmortemVisibility.test.ts +14 -2
- package/Tests/Server/API/StatusPageSubscriberCreateResponse.test.ts +217 -0
- package/Tests/Server/API/StatusPageSubscriberOwnership.test.ts +103 -2
- package/Tests/Server/API/StatusPageUnsubscribeAPI.test.ts +396 -0
- package/Tests/Server/Infrastructure/GlobalCache.test.ts +195 -0
- package/Tests/Server/Infrastructure/Postgres/AddIncidentStatusPageScopeMigration.test.ts +395 -0
- package/Tests/Server/Infrastructure/Postgres/AddIncidentTemplateStatusPageScopeFlagMigration.test.ts +150 -0
- package/Tests/Server/Infrastructure/Postgres/AddKubernetesAiAgentAndAiDefaultsMigration.test.ts +623 -0
- package/Tests/Server/Infrastructure/Postgres/AddKubernetesClusterAiAccessMigration.test.ts +87 -10
- package/Tests/Server/Infrastructure/Postgres/AddSubscriberNotificationClaimedAtMigration.test.ts +156 -0
- package/Tests/Server/Infrastructure/Postgres/AddTeamComplianceRuleScopeMigration.test.ts +622 -0
- package/Tests/Server/Infrastructure/Postgres/SkipHiddenIncidentCreatedNotificationsMigration.test.ts +410 -0
- package/Tests/Server/Middleware/IdentityRateLimit.test.ts +551 -1
- package/Tests/Server/Middleware/SubscriberNotificationPreviewRateLimit.test.ts +238 -0
- package/Tests/Server/Middleware/SubscriberNotificationTestSendRateLimit.test.ts +245 -0
- package/Tests/Server/Middleware/TelemetryIngestBrowserKey.test.ts +61 -4
- package/Tests/Server/Middleware/TelemetryIngestKubernetesAgentRunnerPinnedKey.test.ts +98 -2
- package/Tests/Server/Middleware/TelemetryIngestKubernetesAgentRunnerRateLimit.test.ts +105 -2
- package/Tests/Server/Services/AIServiceBalanceBlocker.test.ts +282 -0
- package/Tests/Server/Services/AddStatusPageSubscriberUnsubscribeTokenMigration.test.ts +152 -0
- package/Tests/Server/Services/AlertMonitorClearWritesNull.test.ts +409 -0
- package/Tests/Server/Services/AlertMonitorEditFeed.test.ts +474 -0
- package/Tests/Server/Services/AlertMonitorEditGuard.test.ts +610 -0
- package/Tests/Server/Services/AutoRemediationClusterRuleEngine.test.ts +2 -0
- package/Tests/Server/Services/AutoRemediationRuleCommandRunners.test.ts +2 -1
- package/Tests/Server/Services/CrossProjectRelationWriteGuard.test.ts +221 -36
- package/Tests/Server/Services/DatabaseServiceCompareAndSetColumns.test.ts +191 -0
- package/Tests/Server/Services/IncidentAffectedMonitorsEdit.test.ts +1360 -0
- package/Tests/Server/Services/IncidentAlertSloLinkSurvivesEdit.test.ts +3 -1
- package/Tests/Server/Services/IncidentCreatedRenotifyOnPublish.test.ts +681 -0
- package/Tests/Server/Services/IncidentCreatedResend.test.ts +775 -0
- package/Tests/Server/Services/IncidentCustomFieldRenamePostgres.test.ts +713 -0
- package/Tests/Server/Services/IncidentCustomFieldService.test.ts +751 -0
- package/Tests/Server/Services/IncidentCustomFieldValueValidation.test.ts +556 -0
- package/Tests/Server/Services/IncidentSeverityDeletePausesComplianceRules.test.ts +488 -0
- package/Tests/Server/Services/IncidentStatusPageScope.test.ts +2971 -0
- package/Tests/Server/Services/IncidentStatusPageScopeFeed.test.ts +131 -0
- package/Tests/Server/Services/IncidentStatusPageScopePostgres.test.ts +625 -0
- package/Tests/Server/Services/IncidentTemplateCustomFieldsCopy.test.ts +311 -0
- package/Tests/Server/Services/IncidentTemplateStatusPageScope.test.ts +363 -0
- package/Tests/Server/Services/KubernetesAiAgentJobService.test.ts +329 -0
- package/Tests/Server/Services/KubernetesAiAgentServiceHelpers.test.ts +618 -0
- package/Tests/Server/Services/KubernetesAiAgentServiceLifecycle.test.ts +1444 -0
- package/Tests/Server/Services/KubernetesAiAgentServiceRegister.test.ts +1666 -0
- package/Tests/Server/Services/KubernetesClusterAiAccessDeletedRunnerRemedy.test.ts +140 -111
- package/Tests/Server/Services/KubernetesClusterAiAccessGapNextSteps.test.ts +267 -105
- package/Tests/Server/Services/KubernetesClusterAiAccessLegacySuperseded.test.ts +440 -0
- package/Tests/Server/Services/KubernetesClusterAiAccessService.test.ts +567 -411
- package/Tests/Server/Services/KubernetesClusterAiAccessTarget.test.ts +1168 -0
- package/Tests/Server/Services/KubernetesClusterAiSettingsPermission.test.ts +410 -12
- package/Tests/Server/Services/KubernetesClusterServiceAiAccessFeed.test.ts +55 -0
- package/Tests/Server/Services/ProjectServiceNewProjectAiDefaults.test.ts +288 -0
- package/Tests/Server/Services/ProxmoxResourcePostgres.test.ts +5633 -0
- package/Tests/Server/Services/ProxmoxResourceService.test.ts +6458 -5
- package/Tests/Server/Services/PublicNoteEditFeedEventType.test.ts +213 -0
- package/Tests/Server/Services/PublicNoteResendAccess.test.ts +994 -0
- package/Tests/Server/Services/RunnerJobEnqueueKubectl.test.ts +48 -15
- package/Tests/Server/Services/RunnerJobEnqueueKubectlAiAgent.test.ts +620 -0
- package/Tests/Server/Services/RunnerJobKubectlWriteScope.test.ts +170 -3
- package/Tests/Server/Services/RunnerJobTimeoutReason.test.ts +72 -0
- package/Tests/Server/Services/RunnerServiceAgentName.test.ts +6 -4
- package/Tests/Server/Services/ScheduledMaintenanceAttachmentEdit.test.ts +2113 -0
- package/Tests/Server/Services/ScheduledMaintenanceMonitorRelease.test.ts +972 -0
- package/Tests/Server/Services/ScheduledMaintenanceSubscriberTemplateFormats.test.ts +289 -9
- package/Tests/Server/Services/SmsServiceFailIfNotSent.test.ts +67 -0
- package/Tests/Server/Services/StatusPageReportIncidentCounts.test.ts +610 -0
- package/Tests/Server/Services/StatusPageSubscriberAudienceCounts.test.ts +201 -0
- package/Tests/Server/Services/StatusPageSubscriberAudienceCountsPostgres.test.ts +271 -0
- package/Tests/Server/Services/StatusPageSubscriberConfirmationTemplateEscaping.test.ts +200 -0
- package/Tests/Server/Services/StatusPageSubscriberNotificationLogRedaction.test.ts +54 -0
- package/Tests/Server/Services/StatusPageSubscriberNotificationTemplateCompile.test.ts +37 -0
- package/Tests/Server/Services/StatusPageSubscriberNotificationTemplateIncidentRecordAccess.test.ts +772 -0
- package/Tests/Server/Services/StatusPageSubscriberNotificationTemplateLookup.test.ts +506 -0
- package/Tests/Server/Services/StatusPageSubscriberNotificationTemplateLookupPostgres.test.ts +261 -0
- package/Tests/Server/Services/StatusPageSubscriberReport.test.ts +21 -5
- package/Tests/Server/Services/StatusPageSubscriberUnsubscribe.test.ts +1618 -0
- package/Tests/Server/Services/StatusPageSubscriberUnsubscribeLinkSenders.test.ts +373 -0
- package/Tests/Server/Services/StatusPageSubscriberUnsubscribePostgres.test.ts +388 -0
- package/Tests/Server/Services/SubscriberNotificationInFlightRequeue.test.ts +500 -0
- package/Tests/Server/Services/TeamComplianceSettingPostgres.test.ts +2237 -0
- package/Tests/Server/Services/TeamComplianceSettingService.test.ts +3988 -138
- package/Tests/Server/Types/MarkdownEmailLinks.test.ts +320 -0
- package/Tests/Server/Types/Workflow/Components/Email.test.ts +491 -1
- package/Tests/Server/Types/Workflow/Components/EmailSmtpPinning.test.ts +398 -0
- package/Tests/Server/Utils/AI/ClusterAccessContext.test.ts +107 -1
- package/Tests/Server/Utils/AI/IncidentPostmortemRunner.test.ts +351 -0
- package/Tests/Server/Utils/AI/InvestigationClusterAccessWiring.test.ts +2 -0
- package/Tests/Server/Utils/AI/InvestigationEligibility.test.ts +310 -0
- package/Tests/Server/Utils/AI/KubectlInvestigationToolkit.test.ts +70 -0
- package/Tests/Server/Utils/AI/KubectlJobRunnerFinishedJob.test.ts +58 -0
- package/Tests/Server/Utils/AI/RemediationCommandToolsKubectl.test.ts +2 -0
- package/Tests/Server/Utils/AI/RemediationCommandToolsKubectlOutcome.test.ts +2 -0
- package/Tests/Server/Utils/AI/RemediationCommandToolsLiveCluster.test.ts +2 -0
- package/Tests/Server/Utils/AI/RemediationCommandToolsRunnerScope.test.ts +125 -1
- package/Tests/Server/Utils/AI/RemediationExecutionRunner.test.ts +252 -3
- package/Tests/Server/Utils/AI/RemediationExecutionRunnerClusterMode.test.ts +2 -0
- package/Tests/Server/Utils/AI/RemediationExecutionRunnerProjectGates.test.ts +240 -0
- package/Tests/Server/Utils/AI/RemediationKubectlCopyParity.test.ts +2 -0
- package/Tests/Server/Utils/AutoRemediation/CommandPlanExecutor.test.ts +2 -0
- package/Tests/Server/Utils/AutoRemediation/CommandPlanExecutorUnknownRun.test.ts +2 -0
- package/Tests/Server/Utils/AutoRemediation/CommandPlanVerification.test.ts +2 -0
- package/Tests/Server/Utils/CustomField/CustomFieldRename.test.ts +586 -0
- package/Tests/Server/Utils/DataSource/EgressGuard.test.ts +246 -10
- package/Tests/Server/Utils/DataSource/EgressGuardDeploymentConfig.test.ts +226 -0
- package/Tests/Server/Utils/DataSource/EgressGuardPinning.test.ts +131 -0
- package/Tests/Server/Utils/DataSource/HttpFetch.test.ts +4 -0
- package/Tests/Server/Utils/EgressPolicyEnvironment.ts +45 -0
- package/Tests/Server/Utils/Mail/PinnedSmtpSocket.test.ts +409 -0
- package/Tests/Server/Utils/Monitor/MonitorCriteriaObservationBuilderUnits.test.ts +23 -0
- package/Tests/Server/Utils/SSRFProtection.test.ts +4 -0
- package/Tests/Server/Utils/SSRFProtectionCloudServiceAddresses.test.ts +4 -0
- package/Tests/Server/Utils/SSRFProtectionPrivateNetwork.test.ts +4 -0
- package/Tests/Server/Utils/SSRFProtectionResolutionDetail.test.ts +314 -0
- package/Tests/Server/Utils/StatusPage/IncidentStatusPageScope.test.ts +1699 -0
- package/Tests/Server/Utils/StatusPage/IncidentStatusPageScopeQueriesPostgres.test.ts +508 -0
- package/Tests/Server/Utils/StatusPage/IncidentSubscriberAudienceCallerPermission.test.ts +246 -0
- package/Tests/Server/Utils/StatusPage/IncidentTemplateVariableBuilder.test.ts +1348 -0
- package/Tests/Server/Utils/StatusPage/StatusPageReadAccess.test.ts +221 -0
- package/Tests/Server/Utils/StatusPage/StatusPageSubscriberUnsubscribeNotice.test.ts +132 -0
- package/Tests/Server/Utils/StatusPage/StatusPageSubscriberUnsubscribeToken.test.ts +155 -0
- package/Tests/Server/Utils/StatusPage/SubscriberIncidentEmailBuilder.test.ts +708 -0
- package/Tests/Server/Utils/StatusPage/SubscriberNotificationClaim.test.ts +255 -0
- package/Tests/Server/Utils/StatusPage/SubscriberNotificationClaimPostgres.test.ts +528 -0
- package/Tests/Server/Utils/StatusPage/SubscriberNotificationDeliveryRecord.test.ts +1238 -0
- package/Tests/Server/Utils/StatusPage/SubscriberNotificationFanOut.test.ts +472 -0
- package/Tests/Server/Utils/StatusPage/SubscriberNotificationPreviewBuilder.test.ts +1168 -0
- package/Tests/Server/Utils/StatusPage/SubscriberNotificationRunLimit.test.ts +275 -0
- package/Tests/Server/Utils/StatusPage/SubscriberNotificationTiming.test.ts +131 -0
- package/Tests/Server/Utils/StatusPageResource.test.ts +98 -0
- package/Tests/Server/Utils/Telemetry/HostAssetAttributesFromOtlp.test.ts +68 -0
- package/Tests/Server/Utils/Telemetry/InventoryMirrorPostgres.test.ts +370 -0
- package/Tests/Server/Utils/Telemetry/NetworkDeviceInventoryAttributes.test.ts +522 -0
- package/Tests/Server/Utils/Telemetry/ProxmoxCephSnapshotScan.test.ts +155 -0
- package/Tests/Server/Utils/Telemetry/ProxmoxNativeNodeLiveness.test.ts +8631 -0
- package/Tests/Server/Utils/Telemetry/ProxmoxNativePush.test.ts +2852 -0
- package/Tests/Server/Utils/Telemetry/TelemetryEntity.test.ts +367 -1
- package/Tests/Server/Utils/Telemetry/TelemetryIngestionKeyGuard.test.ts +45 -3
- package/Tests/Server/Utils/VM/VMRunnerPrivateNetworkWiring.test.ts +17 -0
- package/Tests/Server/Utils/VM/VMRunnerSsrf.test.ts +75 -0
- package/Tests/Server/Utils/Workspace/MicrosoftTeamsChats.test.ts +25 -0
- package/Tests/Server/Utils/Workspace/MicrosoftTeamsGroupChatNames.test.ts +3119 -0
- package/Tests/Server/Utils/Workspace/MicrosoftTeamsGroupChatNamesPostgres.test.ts +1721 -0
- package/Tests/Types/CustomField/CustomFieldSavedViews.test.ts +247 -0
- package/Tests/Types/CustomField/CustomFieldTemplateValues.test.ts +186 -0
- package/Tests/Types/CustomField/CustomFieldTypeCorrespondence.test.ts +48 -0
- package/Tests/Types/CustomField/CustomFieldValueFormat.test.ts +215 -0
- package/Tests/Types/CustomField/CustomFieldValueValidator.test.ts +343 -0
- package/Tests/Types/CustomField/CustomFieldVariableKey.test.ts +364 -0
- package/Tests/Types/Kubernetes/KubernetesAgentChartAiAccess.test.ts +581 -113
- package/Tests/Types/Kubernetes/KubernetesAiAgentAccessContract.test.ts +510 -0
- package/Tests/Types/SafeHtml.test.ts +102 -0
- package/Tests/Types/StatusPage/IncidentCreatedRenotify.test.ts +419 -0
- package/Tests/Types/StatusPage/IncidentCreatedResend.test.ts +118 -0
- package/Tests/Types/StatusPage/IncidentScopeAddedPagesNotification.test.ts +558 -0
- package/Tests/Types/StatusPage/IncidentSubscriberAudience.test.ts +284 -0
- package/Tests/Types/StatusPage/StatusPageSubscriberUnsubscribe.test.ts +341 -0
- package/Tests/Types/StatusPage/SubscriberNotificationPreview.test.ts +196 -0
- package/Tests/Types/StatusPage/SubscriberNotificationResend.test.ts +201 -0
- package/Tests/Types/StatusPage/SubscriberNotificationTemplateCompiler.test.ts +277 -0
- package/Tests/Types/StatusPage/SubscriberNotificationTemplatePreview.test.ts +179 -0
- package/Tests/Types/StatusPage/SubscriberNotificationTemplateVariables.test.ts +324 -0
- package/Tests/Types/StatusPage/SubscriberUpdateNotification.test.ts +60 -13
- package/Tests/Types/Team/ComplianceRule.test.ts +1029 -0
- package/Tests/Types/Team/TeamComplianceStatus.test.ts +176 -0
- package/Tests/UI/Components/ActionButton/RowActions.test.tsx +641 -0
- package/Tests/UI/Components/ActionButton/RowActionsAccessibility.test.tsx +414 -0
- package/Tests/UI/Components/ActionButton/SplitActionButtons.test.ts +565 -0
- package/Tests/UI/Components/Charts/BarChartDragToSelect.test.tsx +386 -0
- package/Tests/UI/Components/Charts/ChartDoubleClickResetWithoutDblclick.test.tsx +1025 -0
- package/Tests/UI/Components/Charts/ChartGroupPageZoomHint.test.tsx +196 -0
- package/Tests/UI/Components/Charts/ChartPlaceholdersTakeDoubleClick.test.tsx +1861 -0
- package/Tests/UI/Components/Charts/ChartPlotClicksWhileResetArmed.test.tsx +382 -0
- package/Tests/UI/Components/Charts/ChartRangeSelection.test.tsx +704 -0
- package/Tests/UI/Components/Charts/ChartRangeSelectionDoubleClickReset.test.tsx +1481 -0
- package/Tests/UI/Components/Charts/ChartRangeSelectionRealRecharts.test.tsx +918 -0
- package/Tests/UI/Components/Charts/ChartRowBucketStart.test.ts +350 -0
- package/Tests/UI/Components/Charts/DoubleClickReset.test.tsx +996 -0
- package/Tests/UI/Components/Charts/HistogramDoubleClickResetRealRecharts.test.tsx +965 -0
- package/Tests/UI/Components/Charts/HistogramDriftThenRefetch.test.tsx +277 -0
- package/Tests/UI/Components/Charts/HistogramRangeSelectionDataChange.test.tsx +1757 -0
- package/Tests/UI/Components/Charts/HistogramRangeSelectionRealRecharts.test.tsx +560 -0
- package/Tests/UI/Components/Charts/TimeRangeZoom/ChartPageTimeRangeZoom.test.tsx +513 -0
- package/Tests/UI/Components/Charts/TimeRangeZoom/TimeRangeZoomContext.test.tsx +845 -0
- package/Tests/UI/Components/Charts/TimeRangeZoom/TimeRangeZoomHint.test.tsx +119 -0
- package/Tests/UI/Components/Charts/TimeRangeZoom/TimeRangeZoomHintTailwind.test.tsx +274 -0
- package/Tests/UI/Components/Charts/TimeRangeZoom/TimeRangeZoomUtil.test.ts +433 -0
- package/Tests/UI/Components/Charts/TimeRangeZoom/UseTimeRangeZoom.test.tsx +863 -0
- package/Tests/UI/Components/Charts/TimeRangeZoom/ZoomDocsPromises.test.tsx +1147 -0
- package/Tests/UI/Components/CustomFields/CustomFieldFormFields.test.ts +432 -0
- package/Tests/UI/Components/CustomFields/CustomFieldModelFormFields.test.tsx +685 -0
- package/Tests/UI/Components/CustomFields/CustomFieldsDetailOrder.test.tsx +469 -0
- package/Tests/UI/Components/DisabledButtonTooltip.test.tsx +14 -3
- package/Tests/UI/Components/EntityDropdownEscape.test.tsx +454 -0
- package/Tests/UI/Components/EntityDropdownFocusLeave.test.tsx +420 -0
- package/Tests/UI/Components/Forms/FormFieldDropdownDisabled.test.tsx +233 -0
- package/Tests/UI/Components/Forms/ModelFormCustomFieldInputs.test.tsx +325 -0
- package/Tests/UI/Components/Forms/ModelFormDropdownOptionsRefused.test.tsx +358 -0
- package/Tests/UI/Components/Input.test.tsx +80 -1
- package/Tests/UI/Components/LogsAnalyticsViewZoom.test.tsx +947 -0
- package/Tests/UI/Components/LogsHistogramDragTooltip.test.tsx +17 -5
- package/Tests/UI/Components/LogsViewerAnalyticsZoom.test.tsx +501 -0
- package/Tests/UI/Components/LogsViewerHistogramZoom.test.tsx +1 -1
- package/Tests/UI/Components/ModelTable/BaseModelTableBulkDelete.test.tsx +6 -4
- package/Tests/UI/Components/ModelTable/BaseModelTablePermissionGating.test.tsx +60 -8
- package/Tests/UI/Components/ModelTable/BaseModelTableRowActions.test.tsx +476 -0
- package/Tests/UI/Components/ModelTable/CustomFieldColumns.test.tsx +22 -0
- package/Tests/UI/Components/ModelTable/ModelTableWrapContent.test.tsx +7 -5
- package/Tests/UI/Components/MoreMenuPortal.test.tsx +623 -0
- package/Tests/UI/Components/StatusPage/ResourceGridActions.test.tsx +538 -0
- package/Tests/UI/Components/StatusPage/ResourceGridSelection.test.tsx +14 -4
- package/Tests/UI/Components/TableCellWrapping.test.tsx +3 -3
- package/Tests/UI/Components/TableRowActions.test.tsx +472 -0
- package/Tests/UI/Components/TelemetryHistogramDragTooltip.test.tsx +1 -1
- package/Tests/UI/Components/TelemetryViewer/TelemetryViewerHistogramClickZoom.test.tsx +1 -1
- package/Tests/UI/Components/TelemetryViewer/TelemetryViewerZoomScope.test.tsx +470 -0
- package/Tests/UI/Components/TelemetryViewer/UseViewerTimeRangeZoom.test.tsx +571 -0
- package/Tests/UI/Components/TelemetryViewer/ViewerDoubleClickResetUnderDataChange.test.tsx +928 -0
- package/Tests/UI/Components/TelemetryViewer/ViewerFollowsEnclosingZoom.test.tsx +1569 -0
- package/Tests/UI/Components/Toggle.test.tsx +66 -0
- package/Tests/UI/MicrosoftTeams/MicrosoftTeamsChatsCardRefreshNames.test.tsx +1023 -0
- package/Tests/UI/Monitor/NetworkPathView.test.tsx +289 -0
- package/Tests/UI/Rum/ChunkLoader.test.ts +201 -0
- package/Tests/UI/Rum/FidelityNotices.test.ts +54 -0
- package/Tests/UI/Rum/ReplayCorrelationPanel.test.tsx +72 -0
- package/Tests/UI/Rum/ReplayFrameCapture.test.ts +1009 -9
- package/Tests/UI/Rum/ReplayRecordedAssets.test.ts +1069 -0
- package/Tests/UI/Rum/ReplayStage.test.tsx +913 -2
- package/Tests/UI/Rum/SessionReplayTable.test.tsx +443 -8
- package/Tests/UI/Rum/SessionReplayUsersTable.test.tsx +439 -9
- package/Tests/UI/Rum/UserFlowTablesRowActions.test.tsx +501 -0
- package/Tests/Utils/AiRemediation/KubectlPolicyChartRbacParity.test.ts +47 -19
- package/Tests/Utils/AiRemediation/KubectlWriteScopeCallerParity.test.ts +2 -0
- package/Tests/Utils/AiRemediation/KubernetesAiAgentPolicyCopyParity.test.ts +396 -0
- package/Tests/Utils/Dashboard/DashboardTimeRangeZoom.test.ts +104 -1
- package/Tests/Utils/Incident/IncidentNoteTemplateVariables.test.ts +623 -0
- package/Tests/Utils/Markdown/MarkdownEscape.test.ts +89 -0
- package/Tests/Utils/ProbeNetworkFailureUtil.test.ts +992 -0
- package/Tests/Utils/RequestFailedDetails.test.ts +575 -0
- package/Types/AI/AIRunType.ts +9 -4
- package/Types/AI/InvestigationNotStartedReason.ts +6 -0
- package/Types/AutoRemediation/AiRemediationCommandPlan.ts +14 -16
- package/Types/AutoRemediation/AiRemediationCommandPolicyVerdict.ts +28 -0
- package/Types/CustomField/CustomFieldOrder.ts +55 -0
- package/Types/CustomField/CustomFieldSavedViews.ts +225 -0
- package/Types/CustomField/CustomFieldTemplateMerge.ts +71 -0
- package/Types/CustomField/CustomFieldType.ts +14 -0
- package/Types/CustomField/CustomFieldValueFormat.ts +161 -0
- package/Types/CustomField/CustomFieldValueValidator.ts +488 -0
- package/Types/CustomField/CustomFieldVariableKey.ts +211 -0
- package/Types/Dashboard/DashboardComponents/DashboardTraceChartComponent.ts +4 -2
- package/Types/Kubernetes/KubernetesClusterAiAccess.ts +263 -32
- package/Types/Kubernetes/KubernetesClusterAiAccessPermissions.ts +20 -16
- package/Types/Kubernetes/KubernetesClusterAiInsights.ts +81 -0
- package/Types/Monitor/ProxmoxAlertTemplates.ts +4 -4
- package/Types/SafeHtml.ts +93 -0
- package/Types/StatusPage/IncidentCreatedRenotify.ts +224 -0
- package/Types/StatusPage/IncidentCreatedResend.ts +108 -0
- package/Types/StatusPage/IncidentScopeAddedPagesNotification.ts +343 -0
- package/Types/StatusPage/IncidentSubscriberAudience.ts +332 -0
- package/Types/StatusPage/StatusPageSubscriberUnsubscribe.ts +405 -0
- package/Types/StatusPage/SubscriberNotificationInterruption.ts +32 -0
- package/Types/StatusPage/SubscriberNotificationPreview.ts +322 -0
- package/Types/StatusPage/SubscriberNotificationResend.ts +132 -0
- package/Types/StatusPage/SubscriberNotificationTemplateCompiler.ts +180 -0
- package/Types/StatusPage/SubscriberNotificationTemplatePreview.ts +301 -0
- package/Types/StatusPage/SubscriberNotificationTemplateVariables.ts +217 -4
- package/Types/StatusPage/SubscriberUpdateNotification.ts +32 -11
- package/Types/Team/ComplianceNotificationChannel.ts +22 -0
- package/Types/Team/ComplianceRule.ts +434 -0
- package/Types/Team/ComplianceRuleType.ts +21 -0
- package/Types/Team/TeamComplianceStatus.ts +81 -0
- package/Types/Telemetry/TelemetryIngestSurface.ts +28 -0
- package/UI/Components/ActionButton/ActionButtonSchema.ts +21 -0
- package/UI/Components/ActionButton/RowActions.tsx +238 -0
- package/UI/Components/ActionButton/SplitActionButtons.ts +173 -0
- package/UI/Components/Charts/Area/AreaChart.tsx +32 -2
- package/UI/Components/Charts/Bar/BarChart.tsx +40 -3
- package/UI/Components/Charts/ChartGroup/ChartGroup.tsx +37 -11
- package/UI/Components/Charts/ChartLibrary/AreaChart/AreaChart.tsx +80 -243
- package/UI/Components/Charts/ChartLibrary/BarChart/BarChart.tsx +122 -31
- package/UI/Components/Charts/ChartLibrary/LineChart/LineChart.tsx +95 -244
- package/UI/Components/Charts/ChartLibrary/Utils/DoubleClick.ts +214 -0
- package/UI/Components/Charts/ChartLibrary/Utils/UseChartBucketsChange.ts +32 -0
- package/UI/Components/Charts/ChartLibrary/Utils/UseChartRangeSelection.ts +599 -0
- package/UI/Components/Charts/Line/LineChart.tsx +32 -2
- package/UI/Components/Charts/TimeRangeZoom/ResetTimeRangeZoomButton.tsx +70 -0
- package/UI/Components/Charts/TimeRangeZoom/TimeRangeZoomContext.tsx +226 -0
- package/UI/Components/Charts/TimeRangeZoom/TimeRangeZoomHint.tsx +73 -0
- package/UI/Components/Charts/TimeRangeZoom/TimeRangeZoomUtil.ts +163 -0
- package/UI/Components/Charts/TimeRangeZoom/UseTimeRangeZoom.ts +215 -0
- package/UI/Components/Charts/Utils/DataPoint.ts +20 -8
- package/UI/Components/Charts/Utils/XAxis.ts +75 -0
- package/UI/Components/Charts/Utils/useHistogramRangeSelection.ts +493 -59
- package/UI/Components/CustomFields/CustomFieldFormFields.ts +317 -0
- package/UI/Components/CustomFields/CustomFieldModelFormFields.tsx +395 -0
- package/UI/Components/CustomFields/CustomFieldsDetail.tsx +95 -55
- package/UI/Components/EntityDropdown/EntityDropdown.tsx +107 -11
- package/UI/Components/Forms/Fields/FormField.tsx +10 -0
- package/UI/Components/Forms/ModelForm.tsx +70 -8
- package/UI/Components/Forms/Validation.ts +1 -1
- package/UI/Components/Input/Input.tsx +90 -57
- package/UI/Components/List/ListRow.tsx +8 -74
- package/UI/Components/LogsViewer/LogsViewer.tsx +40 -11
- package/UI/Components/LogsViewer/components/LogTimeRangePicker.tsx +22 -6
- package/UI/Components/LogsViewer/components/LogsAnalyticsView.tsx +209 -6
- package/UI/Components/LogsViewer/components/LogsHistogram.tsx +127 -84
- package/UI/Components/LogsViewer/components/LogsViewerToolbar.tsx +3 -0
- package/UI/Components/ModelFormModal/ModelFormModal.tsx +2 -4
- package/UI/Components/ModelTable/AnalyticsModelTable.tsx +2 -6
- package/UI/Components/ModelTable/BaseModelTable.tsx +21 -9
- package/UI/Components/ModelTable/CustomFieldColumns.tsx +14 -1
- package/UI/Components/ModelTable/ModelTable.tsx +6 -7
- package/UI/Components/MoreMenu/MoreMenu.tsx +365 -30
- package/UI/Components/MoreMenu/MoreMenuItem.tsx +70 -17
- package/UI/Components/OrderedStatesList/Item.tsx +7 -72
- package/UI/Components/StatusPage/ResourceGrid.tsx +126 -77
- package/UI/Components/Table/TableBody.tsx +8 -2
- package/UI/Components/Table/TableRow.tsx +20 -140
- package/UI/Components/TelemetryViewer/TelemetryViewer.tsx +41 -10
- package/UI/Components/TelemetryViewer/components/TelemetryHistogram.tsx +47 -9
- package/UI/Components/TelemetryViewer/components/TelemetryTimeRangePicker.tsx +25 -6
- package/UI/Components/TelemetryViewer/types.ts +2 -0
- package/UI/Components/TelemetryViewer/useViewerTimeRangeZoom.ts +448 -0
- package/UI/Components/Toggle/Toggle.tsx +26 -0
- package/UI/Components/Tooltip/Tooltip.tsx +8 -1
- package/UI/Styles/Theme.css +14 -2
- package/UI/Utils/SensitiveUrlToken.ts +10 -5
- package/Utils/API.ts +247 -2
- package/Utils/AiRemediation/CommandPolicy.ts +1 -1
- package/Utils/AiRemediation/KubectlPolicy.ts +1 -1
- package/Utils/Dashboard/DashboardTimeRangeZoom.ts +46 -2
- package/Utils/Incident/IncidentNoteTemplateVariables.ts +304 -0
- package/Utils/Markdown/MarkdownEscape.ts +65 -0
- package/Utils/ProbeNetworkFailureUtil.ts +673 -0
- package/build/dist/Models/DatabaseModels/Incident.js +267 -1
- package/build/dist/Models/DatabaseModels/Incident.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncidentCustomField.js +207 -1
- package/build/dist/Models/DatabaseModels/IncidentCustomField.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncidentEpisode.js +31 -0
- package/build/dist/Models/DatabaseModels/IncidentEpisode.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncidentTemplate.js +124 -1
- package/build/dist/Models/DatabaseModels/IncidentTemplate.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/KubernetesAiAgent.js +385 -0
- package/build/dist/Models/DatabaseModels/KubernetesAiAgent.js.map +1 -0
- package/build/dist/Models/DatabaseModels/KubernetesCluster.js +3 -3
- package/build/dist/Models/DatabaseModels/KubernetesCluster.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Project.js +56 -5
- package/build/dist/Models/DatabaseModels/Project.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ProxmoxResource.js +51 -1
- package/build/dist/Models/DatabaseModels/ProxmoxResource.js.map +1 -1
- package/build/dist/Models/DatabaseModels/RunnerJob.js +74 -0
- package/build/dist/Models/DatabaseModels/RunnerJob.js.map +1 -1
- package/build/dist/Models/DatabaseModels/StatusPage.js +56 -0
- package/build/dist/Models/DatabaseModels/StatusPage.js.map +1 -1
- package/build/dist/Models/DatabaseModels/StatusPageSubscriber.js +131 -0
- package/build/dist/Models/DatabaseModels/StatusPageSubscriber.js.map +1 -1
- package/build/dist/Models/DatabaseModels/TeamComplianceSetting.js +134 -3
- package/build/dist/Models/DatabaseModels/TeamComplianceSetting.js.map +1 -1
- package/build/dist/Models/DatabaseModels/WorkspaceProjectAuthToken.js.map +1 -1
- package/build/dist/Server/API/AIChatAPI.js +6 -1
- package/build/dist/Server/API/AIChatAPI.js.map +1 -1
- package/build/dist/Server/API/AIInvestigationAPI.js +17 -10
- package/build/dist/Server/API/AIInvestigationAPI.js.map +1 -1
- package/build/dist/Server/API/AutoRemediationAPI.js +144 -24
- package/build/dist/Server/API/AutoRemediationAPI.js.map +1 -1
- package/build/dist/Server/API/IncidentAPI.js +100 -1
- package/build/dist/Server/API/IncidentAPI.js.map +1 -1
- package/build/dist/Server/API/KubernetesClusterAiAccessAPI.js +436 -22
- package/build/dist/Server/API/KubernetesClusterAiAccessAPI.js.map +1 -1
- package/build/dist/Server/API/MicrosoftTeamsAPI.js +69 -13
- package/build/dist/Server/API/MicrosoftTeamsAPI.js.map +1 -1
- package/build/dist/Server/API/ProxmoxResourceAPI.js +187 -14
- package/build/dist/Server/API/ProxmoxResourceAPI.js.map +1 -1
- package/build/dist/Server/API/StatusPageAPI.js +417 -176
- package/build/dist/Server/API/StatusPageAPI.js.map +1 -1
- package/build/dist/Server/API/StatusPageSubscriberAPI.js +52 -13
- package/build/dist/Server/API/StatusPageSubscriberAPI.js.map +1 -1
- package/build/dist/Server/Infrastructure/GlobalCache.js +27 -0
- package/build/dist/Server/Infrastructure/GlobalCache.js.map +1 -1
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1795300000000-SkipHiddenIncidentCreatedNotifications.js +41 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1795300000000-SkipHiddenIncidentCreatedNotifications.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1795400000000-AddIncidentStatusPageScope.js +57 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1795400000000-AddIncidentStatusPageScope.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1795500000000-AddIncidentTemplateStatusPageScopeFlag.js +23 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1795500000000-AddIncidentTemplateStatusPageScopeFlag.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1795600000000-AddStatusPageSubscriberUnsubscribeToken.js +40 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1795600000000-AddStatusPageSubscriberUnsubscribeToken.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1795700000000-AddStatusPageSubscriberIsAddedByTeam.js +26 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1795700000000-AddStatusPageSubscriberIsAddedByTeam.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1795800000000-AddIncidentCustomFieldCreateAndNotificationSettings.js +89 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1795800000000-AddIncidentCustomFieldCreateAndNotificationSettings.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1795900000000-AddSubscriberNotificationClaimedAt.js +29 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1795900000000-AddSubscriberNotificationClaimedAt.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1796000000000-AddTeamComplianceRuleScope.js +50 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1796000000000-AddTeamComplianceRuleScope.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1796100000000-AddKubernetesAiAgentAndAiDefaults.js +84 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1796100000000-AddKubernetesAiAgentAndAiDefaults.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1796200000000-AddProxmoxResourceNativePushColumns.js +31 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1796200000000-AddProxmoxResourceNativePushColumns.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +20 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
- package/build/dist/Server/Infrastructure/Semaphore.js +3 -0
- package/build/dist/Server/Infrastructure/Semaphore.js.map +1 -1
- package/build/dist/Server/Middleware/IdentityRateLimit.js +89 -3
- package/build/dist/Server/Middleware/IdentityRateLimit.js.map +1 -1
- package/build/dist/Server/Middleware/SubscriberNotificationPreviewRateLimit.js +149 -0
- package/build/dist/Server/Middleware/SubscriberNotificationPreviewRateLimit.js.map +1 -0
- package/build/dist/Server/Middleware/SubscriberNotificationTestSendRateLimit.js +190 -0
- package/build/dist/Server/Middleware/SubscriberNotificationTestSendRateLimit.js.map +1 -0
- package/build/dist/Server/Middleware/TelemetryIngest.js +34 -19
- package/build/dist/Server/Middleware/TelemetryIngest.js.map +1 -1
- package/build/dist/Server/Services/AIService.js +59 -1
- package/build/dist/Server/Services/AIService.js.map +1 -1
- package/build/dist/Server/Services/AlertService.js +248 -13
- package/build/dist/Server/Services/AlertService.js.map +1 -1
- package/build/dist/Server/Services/AlertSeverityService.js +51 -15
- package/build/dist/Server/Services/AlertSeverityService.js.map +1 -1
- package/build/dist/Server/Services/AutoRemediationRuleService.js +1 -1
- package/build/dist/Server/Services/AutoRemediationRuleService.js.map +1 -1
- package/build/dist/Server/Services/DatabaseService.js +56 -7
- package/build/dist/Server/Services/DatabaseService.js.map +1 -1
- package/build/dist/Server/Services/IncidentCustomFieldService.js +204 -8
- package/build/dist/Server/Services/IncidentCustomFieldService.js.map +1 -1
- package/build/dist/Server/Services/IncidentEpisodePublicNoteService.js +24 -0
- package/build/dist/Server/Services/IncidentEpisodePublicNoteService.js.map +1 -1
- package/build/dist/Server/Services/IncidentEpisodeService.js +14 -0
- package/build/dist/Server/Services/IncidentEpisodeService.js.map +1 -1
- package/build/dist/Server/Services/IncidentEpisodeStateTimelineService.js +26 -0
- package/build/dist/Server/Services/IncidentEpisodeStateTimelineService.js.map +1 -1
- package/build/dist/Server/Services/IncidentPublicNoteService.js +26 -1
- package/build/dist/Server/Services/IncidentPublicNoteService.js.map +1 -1
- package/build/dist/Server/Services/IncidentService.js +1251 -72
- package/build/dist/Server/Services/IncidentService.js.map +1 -1
- package/build/dist/Server/Services/IncidentSeverityService.js +51 -15
- package/build/dist/Server/Services/IncidentSeverityService.js.map +1 -1
- package/build/dist/Server/Services/IncidentStateTimelineService.js +12 -0
- package/build/dist/Server/Services/IncidentStateTimelineService.js.map +1 -1
- package/build/dist/Server/Services/IncidentTemplateService.js +83 -0
- package/build/dist/Server/Services/IncidentTemplateService.js.map +1 -1
- package/build/dist/Server/Services/KubernetesAiAgentJobService.js +158 -0
- package/build/dist/Server/Services/KubernetesAiAgentJobService.js.map +1 -0
- package/build/dist/Server/Services/KubernetesAiAgentService.js +1145 -0
- package/build/dist/Server/Services/KubernetesAiAgentService.js.map +1 -0
- package/build/dist/Server/Services/KubernetesClusterAiAccessService.js +842 -371
- package/build/dist/Server/Services/KubernetesClusterAiAccessService.js.map +1 -1
- package/build/dist/Server/Services/KubernetesClusterService.js +86 -17
- package/build/dist/Server/Services/KubernetesClusterService.js.map +1 -1
- package/build/dist/Server/Services/ProjectService.js +22 -0
- package/build/dist/Server/Services/ProjectService.js.map +1 -1
- package/build/dist/Server/Services/ProxmoxResourceService.js +258 -3
- package/build/dist/Server/Services/ProxmoxResourceService.js.map +1 -1
- package/build/dist/Server/Services/RunnerJobService.js +178 -92
- package/build/dist/Server/Services/RunnerJobService.js.map +1 -1
- package/build/dist/Server/Services/RunnerService.js +1 -1
- package/build/dist/Server/Services/RunnerService.js.map +1 -1
- package/build/dist/Server/Services/ScheduledMaintenancePublicNoteService.js +26 -1
- package/build/dist/Server/Services/ScheduledMaintenancePublicNoteService.js.map +1 -1
- package/build/dist/Server/Services/ScheduledMaintenanceService.js +582 -20
- package/build/dist/Server/Services/ScheduledMaintenanceService.js.map +1 -1
- package/build/dist/Server/Services/ScheduledMaintenanceStateTimelineService.js +316 -46
- package/build/dist/Server/Services/ScheduledMaintenanceStateTimelineService.js.map +1 -1
- package/build/dist/Server/Services/SmsService.js +2 -22
- package/build/dist/Server/Services/SmsService.js.map +1 -1
- package/build/dist/Server/Services/StatusPageService.js +47 -9
- package/build/dist/Server/Services/StatusPageService.js.map +1 -1
- package/build/dist/Server/Services/StatusPageSubscriberNotificationTemplateService.js +237 -32
- package/build/dist/Server/Services/StatusPageSubscriberNotificationTemplateService.js.map +1 -1
- package/build/dist/Server/Services/StatusPageSubscriberNotificationTemplateStatusPageService.js +109 -0
- package/build/dist/Server/Services/StatusPageSubscriberNotificationTemplateStatusPageService.js.map +1 -1
- package/build/dist/Server/Services/StatusPageSubscriberService.js +925 -99
- package/build/dist/Server/Services/StatusPageSubscriberService.js.map +1 -1
- package/build/dist/Server/Services/TeamComplianceSettingService.js +833 -7
- package/build/dist/Server/Services/TeamComplianceSettingService.js.map +1 -1
- package/build/dist/Server/Types/Markdown.js +110 -6
- package/build/dist/Server/Types/Markdown.js.map +1 -1
- package/build/dist/Server/Types/Workflow/Components/Email.js +55 -6
- package/build/dist/Server/Types/Workflow/Components/Email.js.map +1 -1
- package/build/dist/Server/Utils/AI/ClusterAccess/ClusterAccessContext.js +52 -9
- package/build/dist/Server/Utils/AI/ClusterAccess/ClusterAccessContext.js.map +1 -1
- package/build/dist/Server/Utils/AI/ClusterAccess/KubectlInvestigationToolkit.js +13 -9
- package/build/dist/Server/Utils/AI/ClusterAccess/KubectlInvestigationToolkit.js.map +1 -1
- package/build/dist/Server/Utils/AI/ClusterAccess/KubectlJobRunner.js +7 -3
- package/build/dist/Server/Utils/AI/ClusterAccess/KubectlJobRunner.js.map +1 -1
- package/build/dist/Server/Utils/AI/Remediation/RemediationCommandTools.js +29 -15
- package/build/dist/Server/Utils/AI/Remediation/RemediationCommandTools.js.map +1 -1
- package/build/dist/Server/Utils/AI/Remediation/RemediationExecutionRunner.js +56 -20
- package/build/dist/Server/Utils/AI/Remediation/RemediationExecutionRunner.js.map +1 -1
- package/build/dist/Server/Utils/AI/SRE/AIInvestigationEngine.js +39 -5
- package/build/dist/Server/Utils/AI/SRE/AIInvestigationEngine.js.map +1 -1
- package/build/dist/Server/Utils/AI/SRE/IncidentPostmortemRunner.js +30 -3
- package/build/dist/Server/Utils/AI/SRE/IncidentPostmortemRunner.js.map +1 -1
- package/build/dist/Server/Utils/AI/SRE/InvestigationEligibility.js +13 -2
- package/build/dist/Server/Utils/AI/SRE/InvestigationEligibility.js.map +1 -1
- package/build/dist/Server/Utils/AI/SRE/InvestigationGrader.js +1 -1
- package/build/dist/Server/Utils/AutoRemediation/CommandPlanExecutor.js +4 -2
- package/build/dist/Server/Utils/AutoRemediation/CommandPlanExecutor.js.map +1 -1
- package/build/dist/Server/Utils/CustomField/CustomFieldRename.js +211 -0
- package/build/dist/Server/Utils/CustomField/CustomFieldRename.js.map +1 -0
- package/build/dist/Server/Utils/DataSource/EgressGuard.js +41 -12
- package/build/dist/Server/Utils/DataSource/EgressGuard.js.map +1 -1
- package/build/dist/Server/Utils/Mail/PinnedSmtpSocket.js +101 -0
- package/build/dist/Server/Utils/Mail/PinnedSmtpSocket.js.map +1 -0
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaObservationBuilder.js +9 -0
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaObservationBuilder.js.map +1 -1
- package/build/dist/Server/Utils/SSRFProtection.js +48 -6
- package/build/dist/Server/Utils/SSRFProtection.js.map +1 -1
- package/build/dist/Server/Utils/StatusPage/IncidentStatusPageScope.js +631 -0
- package/build/dist/Server/Utils/StatusPage/IncidentStatusPageScope.js.map +1 -0
- package/build/dist/Server/Utils/StatusPage/IncidentSubscriberAudienceBuilder.js +403 -0
- package/build/dist/Server/Utils/StatusPage/IncidentSubscriberAudienceBuilder.js.map +1 -0
- package/build/dist/Server/Utils/StatusPage/IncidentTemplateVariableBuilder.js +451 -0
- package/build/dist/Server/Utils/StatusPage/IncidentTemplateVariableBuilder.js.map +1 -0
- package/build/dist/Server/Utils/StatusPage/StatusPageExclusion.js +13 -0
- package/build/dist/Server/Utils/StatusPage/StatusPageExclusion.js.map +1 -0
- package/build/dist/Server/Utils/StatusPage/StatusPageReadAccess.js +91 -0
- package/build/dist/Server/Utils/StatusPage/StatusPageReadAccess.js.map +1 -0
- package/build/dist/Server/Utils/StatusPage/StatusPageSubscriberUnsubscribeNotice.js +101 -0
- package/build/dist/Server/Utils/StatusPage/StatusPageSubscriberUnsubscribeNotice.js.map +1 -0
- package/build/dist/Server/Utils/StatusPage/StatusPageSubscriberUnsubscribeToken.js +47 -0
- package/build/dist/Server/Utils/StatusPage/StatusPageSubscriberUnsubscribeToken.js.map +1 -0
- package/build/dist/Server/Utils/StatusPage/SubscriberIncidentEmailBuilder.js +273 -0
- package/build/dist/Server/Utils/StatusPage/SubscriberIncidentEmailBuilder.js.map +1 -0
- package/build/dist/Server/Utils/StatusPage/SubscriberNotificationClaim.js +73 -0
- package/build/dist/Server/Utils/StatusPage/SubscriberNotificationClaim.js.map +1 -0
- package/build/dist/Server/Utils/StatusPage/SubscriberNotificationDeliveryRecord.js +722 -0
- package/build/dist/Server/Utils/StatusPage/SubscriberNotificationDeliveryRecord.js.map +1 -0
- package/build/dist/Server/Utils/StatusPage/SubscriberNotificationFanOut.js +102 -0
- package/build/dist/Server/Utils/StatusPage/SubscriberNotificationFanOut.js.map +1 -0
- package/build/dist/Server/Utils/StatusPage/SubscriberNotificationPreviewBuilder.js +527 -0
- package/build/dist/Server/Utils/StatusPage/SubscriberNotificationPreviewBuilder.js.map +1 -0
- package/build/dist/Server/Utils/StatusPage/SubscriberNotificationResendAccess.js +278 -0
- package/build/dist/Server/Utils/StatusPage/SubscriberNotificationResendAccess.js.map +1 -0
- package/build/dist/Server/Utils/StatusPage/SubscriberNotificationRunLimit.js +137 -0
- package/build/dist/Server/Utils/StatusPage/SubscriberNotificationRunLimit.js.map +1 -0
- package/build/dist/Server/Utils/StatusPage/SubscriberNotificationTiming.js +103 -0
- package/build/dist/Server/Utils/StatusPage/SubscriberNotificationTiming.js.map +1 -0
- package/build/dist/Server/Utils/StatusPage/SubscriberTemplateIncidentRecordAccess.js +114 -0
- package/build/dist/Server/Utils/StatusPage/SubscriberTemplateIncidentRecordAccess.js.map +1 -0
- package/build/dist/Server/Utils/StatusPageResource.js +39 -7
- package/build/dist/Server/Utils/StatusPageResource.js.map +1 -1
- package/build/dist/Server/Utils/Telemetry/InventoryEntityRegistry.js +111 -6
- package/build/dist/Server/Utils/Telemetry/InventoryEntityRegistry.js.map +1 -1
- package/build/dist/Server/Utils/Telemetry/ProxmoxCephSnapshotScan.js +40 -4
- package/build/dist/Server/Utils/Telemetry/ProxmoxCephSnapshotScan.js.map +1 -1
- package/build/dist/Server/Utils/Telemetry/ProxmoxNativeNodeLiveness.js +296 -0
- package/build/dist/Server/Utils/Telemetry/ProxmoxNativeNodeLiveness.js.map +1 -0
- package/build/dist/Server/Utils/Telemetry/ProxmoxNativePush.js +699 -0
- package/build/dist/Server/Utils/Telemetry/ProxmoxNativePush.js.map +1 -0
- package/build/dist/Server/Utils/Telemetry/TelemetryEntity.js +77 -19
- package/build/dist/Server/Utils/Telemetry/TelemetryEntity.js.map +1 -1
- package/build/dist/Server/Utils/VM/VMAPI.js.map +1 -1
- package/build/dist/Server/Utils/VM/VMRunner.js +1 -0
- package/build/dist/Server/Utils/VM/VMRunner.js.map +1 -1
- package/build/dist/Server/Utils/Workflow/OAuth2TokenClient.js +3 -0
- package/build/dist/Server/Utils/Workflow/OAuth2TokenClient.js.map +1 -1
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.js +505 -42
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.js.map +1 -1
- package/build/dist/Types/AI/AIRunType.js +9 -4
- package/build/dist/Types/AI/AIRunType.js.map +1 -1
- package/build/dist/Types/AutoRemediation/AiRemediationCommandPlan.js +10 -16
- package/build/dist/Types/AutoRemediation/AiRemediationCommandPlan.js.map +1 -1
- package/build/dist/Types/AutoRemediation/AiRemediationCommandPolicyVerdict.js +28 -0
- package/build/dist/Types/AutoRemediation/AiRemediationCommandPolicyVerdict.js.map +1 -0
- package/build/dist/Types/CustomField/CustomFieldOrder.js +36 -0
- package/build/dist/Types/CustomField/CustomFieldOrder.js.map +1 -0
- package/build/dist/Types/CustomField/CustomFieldSavedViews.js +135 -0
- package/build/dist/Types/CustomField/CustomFieldSavedViews.js.map +1 -0
- package/build/dist/Types/CustomField/CustomFieldTemplateMerge.js +27 -0
- package/build/dist/Types/CustomField/CustomFieldTemplateMerge.js.map +1 -0
- package/build/dist/Types/CustomField/CustomFieldType.js +12 -0
- package/build/dist/Types/CustomField/CustomFieldType.js.map +1 -1
- package/build/dist/Types/CustomField/CustomFieldValueFormat.js +126 -0
- package/build/dist/Types/CustomField/CustomFieldValueFormat.js.map +1 -0
- package/build/dist/Types/CustomField/CustomFieldValueValidator.js +280 -0
- package/build/dist/Types/CustomField/CustomFieldValueValidator.js.map +1 -0
- package/build/dist/Types/CustomField/CustomFieldVariableKey.js +150 -0
- package/build/dist/Types/CustomField/CustomFieldVariableKey.js.map +1 -0
- package/build/dist/Types/Kubernetes/KubernetesClusterAiAccess.js +72 -16
- package/build/dist/Types/Kubernetes/KubernetesClusterAiAccess.js.map +1 -1
- package/build/dist/Types/Kubernetes/KubernetesClusterAiAccessPermissions.js +20 -16
- package/build/dist/Types/Kubernetes/KubernetesClusterAiAccessPermissions.js.map +1 -1
- package/build/dist/Types/Kubernetes/KubernetesClusterAiInsights.js +17 -0
- package/build/dist/Types/Kubernetes/KubernetesClusterAiInsights.js.map +1 -0
- package/build/dist/Types/Monitor/ProxmoxAlertTemplates.js +4 -4
- package/build/dist/Types/Monitor/ProxmoxAlertTemplates.js.map +1 -1
- package/build/dist/Types/SafeHtml.js +84 -0
- package/build/dist/Types/SafeHtml.js.map +1 -0
- package/build/dist/Types/StatusPage/IncidentCreatedRenotify.js +117 -0
- package/build/dist/Types/StatusPage/IncidentCreatedRenotify.js.map +1 -0
- package/build/dist/Types/StatusPage/IncidentCreatedResend.js +86 -0
- package/build/dist/Types/StatusPage/IncidentCreatedResend.js.map +1 -0
- package/build/dist/Types/StatusPage/IncidentScopeAddedPagesNotification.js +246 -0
- package/build/dist/Types/StatusPage/IncidentScopeAddedPagesNotification.js.map +1 -0
- package/build/dist/Types/StatusPage/IncidentSubscriberAudience.js +183 -0
- package/build/dist/Types/StatusPage/IncidentSubscriberAudience.js.map +1 -0
- package/build/dist/Types/StatusPage/StatusPageSubscriberUnsubscribe.js +277 -0
- package/build/dist/Types/StatusPage/StatusPageSubscriberUnsubscribe.js.map +1 -0
- package/build/dist/Types/StatusPage/SubscriberNotificationInterruption.js +27 -0
- package/build/dist/Types/StatusPage/SubscriberNotificationInterruption.js.map +1 -0
- package/build/dist/Types/StatusPage/SubscriberNotificationPreview.js +190 -0
- package/build/dist/Types/StatusPage/SubscriberNotificationPreview.js.map +1 -0
- package/build/dist/Types/StatusPage/SubscriberNotificationResend.js +102 -0
- package/build/dist/Types/StatusPage/SubscriberNotificationResend.js.map +1 -0
- package/build/dist/Types/StatusPage/SubscriberNotificationTemplateCompiler.js +97 -0
- package/build/dist/Types/StatusPage/SubscriberNotificationTemplateCompiler.js.map +1 -0
- package/build/dist/Types/StatusPage/SubscriberNotificationTemplatePreview.js +175 -0
- package/build/dist/Types/StatusPage/SubscriberNotificationTemplatePreview.js.map +1 -0
- package/build/dist/Types/StatusPage/SubscriberNotificationTemplateVariables.js +144 -4
- package/build/dist/Types/StatusPage/SubscriberNotificationTemplateVariables.js.map +1 -1
- package/build/dist/Types/StatusPage/SubscriberUpdateNotification.js +29 -9
- package/build/dist/Types/StatusPage/SubscriberUpdateNotification.js.map +1 -1
- package/build/dist/Types/Team/ComplianceNotificationChannel.js +23 -0
- package/build/dist/Types/Team/ComplianceNotificationChannel.js.map +1 -0
- package/build/dist/Types/Team/ComplianceRule.js +304 -0
- package/build/dist/Types/Team/ComplianceRule.js.map +1 -0
- package/build/dist/Types/Team/ComplianceRuleType.js +21 -0
- package/build/dist/Types/Team/ComplianceRuleType.js.map +1 -1
- package/build/dist/Types/Team/TeamComplianceStatus.js +2 -0
- package/build/dist/Types/Team/TeamComplianceStatus.js.map +1 -0
- package/build/dist/Types/Telemetry/TelemetryIngestSurface.js +25 -0
- package/build/dist/Types/Telemetry/TelemetryIngestSurface.js.map +1 -1
- package/build/dist/UI/Components/ActionButton/ActionButtonSchema.js +20 -1
- package/build/dist/UI/Components/ActionButton/ActionButtonSchema.js.map +1 -1
- package/build/dist/UI/Components/ActionButton/RowActions.js +113 -0
- package/build/dist/UI/Components/ActionButton/RowActions.js.map +1 -0
- package/build/dist/UI/Components/ActionButton/SplitActionButtons.js +71 -0
- package/build/dist/UI/Components/ActionButton/SplitActionButtons.js.map +1 -0
- package/build/dist/UI/Components/Charts/Area/AreaChart.js +16 -1
- package/build/dist/UI/Components/Charts/Area/AreaChart.js.map +1 -1
- package/build/dist/UI/Components/Charts/Bar/BarChart.js +16 -1
- package/build/dist/UI/Components/Charts/Bar/BarChart.js.map +1 -1
- package/build/dist/UI/Components/Charts/ChartGroup/ChartGroup.js +27 -5
- package/build/dist/UI/Components/Charts/ChartGroup/ChartGroup.js.map +1 -1
- package/build/dist/UI/Components/Charts/ChartLibrary/AreaChart/AreaChart.js +61 -194
- package/build/dist/UI/Components/Charts/ChartLibrary/AreaChart/AreaChart.js.map +1 -1
- package/build/dist/UI/Components/Charts/ChartLibrary/BarChart/BarChart.js +84 -26
- package/build/dist/UI/Components/Charts/ChartLibrary/BarChart/BarChart.js.map +1 -1
- package/build/dist/UI/Components/Charts/ChartLibrary/LineChart/LineChart.js +75 -196
- package/build/dist/UI/Components/Charts/ChartLibrary/LineChart/LineChart.js.map +1 -1
- package/build/dist/UI/Components/Charts/ChartLibrary/Utils/DoubleClick.js +133 -0
- package/build/dist/UI/Components/Charts/ChartLibrary/Utils/DoubleClick.js.map +1 -1
- package/build/dist/UI/Components/Charts/ChartLibrary/Utils/UseChartBucketsChange.js +26 -0
- package/build/dist/UI/Components/Charts/ChartLibrary/Utils/UseChartBucketsChange.js.map +1 -0
- package/build/dist/UI/Components/Charts/ChartLibrary/Utils/UseChartRangeSelection.js +371 -0
- package/build/dist/UI/Components/Charts/ChartLibrary/Utils/UseChartRangeSelection.js.map +1 -0
- package/build/dist/UI/Components/Charts/Line/LineChart.js +16 -1
- package/build/dist/UI/Components/Charts/Line/LineChart.js.map +1 -1
- package/build/dist/UI/Components/Charts/TimeRangeZoom/ResetTimeRangeZoomButton.js +35 -0
- package/build/dist/UI/Components/Charts/TimeRangeZoom/ResetTimeRangeZoomButton.js.map +1 -0
- package/build/dist/UI/Components/Charts/TimeRangeZoom/TimeRangeZoomContext.js +107 -0
- package/build/dist/UI/Components/Charts/TimeRangeZoom/TimeRangeZoomContext.js.map +1 -0
- package/build/dist/UI/Components/Charts/TimeRangeZoom/TimeRangeZoomHint.js +41 -0
- package/build/dist/UI/Components/Charts/TimeRangeZoom/TimeRangeZoomHint.js.map +1 -0
- package/build/dist/UI/Components/Charts/TimeRangeZoom/TimeRangeZoomUtil.js +117 -0
- package/build/dist/UI/Components/Charts/TimeRangeZoom/TimeRangeZoomUtil.js.map +1 -0
- package/build/dist/UI/Components/Charts/TimeRangeZoom/UseTimeRangeZoom.js +121 -0
- package/build/dist/UI/Components/Charts/TimeRangeZoom/UseTimeRangeZoom.js.map +1 -0
- package/build/dist/UI/Components/Charts/Utils/DataPoint.js +15 -7
- package/build/dist/UI/Components/Charts/Utils/DataPoint.js.map +1 -1
- package/build/dist/UI/Components/Charts/Utils/XAxis.js +70 -0
- package/build/dist/UI/Components/Charts/Utils/XAxis.js.map +1 -1
- package/build/dist/UI/Components/Charts/Utils/useHistogramRangeSelection.js +305 -38
- package/build/dist/UI/Components/Charts/Utils/useHistogramRangeSelection.js.map +1 -1
- package/build/dist/UI/Components/CustomFields/CustomFieldFormFields.js +169 -0
- package/build/dist/UI/Components/CustomFields/CustomFieldFormFields.js.map +1 -0
- package/build/dist/UI/Components/CustomFields/CustomFieldModelFormFields.js +212 -0
- package/build/dist/UI/Components/CustomFields/CustomFieldModelFormFields.js.map +1 -0
- package/build/dist/UI/Components/CustomFields/CustomFieldsDetail.js +64 -49
- package/build/dist/UI/Components/CustomFields/CustomFieldsDetail.js.map +1 -1
- package/build/dist/UI/Components/EntityDropdown/EntityDropdown.js +89 -14
- package/build/dist/UI/Components/EntityDropdown/EntityDropdown.js.map +1 -1
- package/build/dist/UI/Components/Forms/Fields/FormField.js +11 -2
- package/build/dist/UI/Components/Forms/Fields/FormField.js.map +1 -1
- package/build/dist/UI/Components/Forms/ModelForm.js +39 -5
- package/build/dist/UI/Components/Forms/ModelForm.js.map +1 -1
- package/build/dist/UI/Components/Forms/Validation.js +1 -1
- package/build/dist/UI/Components/Forms/Validation.js.map +1 -1
- package/build/dist/UI/Components/Input/Input.js +69 -54
- package/build/dist/UI/Components/Input/Input.js.map +1 -1
- package/build/dist/UI/Components/List/ListRow.js +4 -39
- package/build/dist/UI/Components/List/ListRow.js.map +1 -1
- package/build/dist/UI/Components/LogsViewer/LogsViewer.js +31 -8
- package/build/dist/UI/Components/LogsViewer/LogsViewer.js.map +1 -1
- package/build/dist/UI/Components/LogsViewer/components/LogTimeRangePicker.js +10 -1
- package/build/dist/UI/Components/LogsViewer/components/LogTimeRangePicker.js.map +1 -1
- package/build/dist/UI/Components/LogsViewer/components/LogsAnalyticsView.js +139 -21
- package/build/dist/UI/Components/LogsViewer/components/LogsAnalyticsView.js.map +1 -1
- package/build/dist/UI/Components/LogsViewer/components/LogsHistogram.js +30 -8
- package/build/dist/UI/Components/LogsViewer/components/LogsHistogram.js.map +1 -1
- package/build/dist/UI/Components/LogsViewer/components/LogsViewerToolbar.js +1 -1
- package/build/dist/UI/Components/LogsViewer/components/LogsViewerToolbar.js.map +1 -1
- package/build/dist/UI/Components/ModelFormModal/ModelFormModal.js.map +1 -1
- package/build/dist/UI/Components/ModelTable/AnalyticsModelTable.js.map +1 -1
- package/build/dist/UI/Components/ModelTable/BaseModelTable.js +12 -2
- package/build/dist/UI/Components/ModelTable/BaseModelTable.js.map +1 -1
- package/build/dist/UI/Components/ModelTable/CustomFieldColumns.js +13 -1
- package/build/dist/UI/Components/ModelTable/CustomFieldColumns.js.map +1 -1
- package/build/dist/UI/Components/ModelTable/ModelTable.js +1 -1
- package/build/dist/UI/Components/ModelTable/ModelTable.js.map +1 -1
- package/build/dist/UI/Components/MoreMenu/MoreMenu.js +253 -14
- package/build/dist/UI/Components/MoreMenu/MoreMenu.js.map +1 -1
- package/build/dist/UI/Components/MoreMenu/MoreMenuItem.js +43 -13
- package/build/dist/UI/Components/MoreMenu/MoreMenuItem.js.map +1 -1
- package/build/dist/UI/Components/OrderedStatesList/Item.js +2 -38
- package/build/dist/UI/Components/OrderedStatesList/Item.js.map +1 -1
- package/build/dist/UI/Components/StatusPage/ResourceGrid.js +53 -15
- package/build/dist/UI/Components/StatusPage/ResourceGrid.js.map +1 -1
- package/build/dist/UI/Components/Table/TableBody.js +6 -2
- package/build/dist/UI/Components/Table/TableBody.js.map +1 -1
- package/build/dist/UI/Components/Table/TableRow.js +12 -75
- package/build/dist/UI/Components/Table/TableRow.js.map +1 -1
- package/build/dist/UI/Components/TelemetryViewer/TelemetryViewer.js +32 -7
- package/build/dist/UI/Components/TelemetryViewer/TelemetryViewer.js.map +1 -1
- package/build/dist/UI/Components/TelemetryViewer/components/TelemetryHistogram.js +27 -9
- package/build/dist/UI/Components/TelemetryViewer/components/TelemetryHistogram.js.map +1 -1
- package/build/dist/UI/Components/TelemetryViewer/components/TelemetryTimeRangePicker.js +11 -1
- package/build/dist/UI/Components/TelemetryViewer/components/TelemetryTimeRangePicker.js.map +1 -1
- package/build/dist/UI/Components/TelemetryViewer/useViewerTimeRangeZoom.js +272 -0
- package/build/dist/UI/Components/TelemetryViewer/useViewerTimeRangeZoom.js.map +1 -0
- package/build/dist/UI/Components/Toggle/Toggle.js +14 -1
- package/build/dist/UI/Components/Toggle/Toggle.js.map +1 -1
- package/build/dist/UI/Components/Tooltip/Tooltip.js +1 -1
- package/build/dist/UI/Components/Tooltip/Tooltip.js.map +1 -1
- package/build/dist/UI/Utils/SensitiveUrlToken.js +10 -5
- package/build/dist/UI/Utils/SensitiveUrlToken.js.map +1 -1
- package/build/dist/Utils/API.js +177 -1
- package/build/dist/Utils/API.js.map +1 -1
- package/build/dist/Utils/AiRemediation/CommandPolicy.js +1 -1
- package/build/dist/Utils/AiRemediation/CommandPolicy.js.map +1 -1
- package/build/dist/Utils/AiRemediation/KubectlPolicy.js +1 -1
- package/build/dist/Utils/AiRemediation/KubectlPolicy.js.map +1 -1
- package/build/dist/Utils/Dashboard/DashboardTimeRangeZoom.js +27 -1
- package/build/dist/Utils/Dashboard/DashboardTimeRangeZoom.js.map +1 -1
- package/build/dist/Utils/Incident/IncidentNoteTemplateVariables.js +155 -0
- package/build/dist/Utils/Incident/IncidentNoteTemplateVariables.js.map +1 -0
- package/build/dist/Utils/Markdown/MarkdownEscape.js +48 -0
- package/build/dist/Utils/Markdown/MarkdownEscape.js.map +1 -1
- package/build/dist/Utils/ProbeNetworkFailureUtil.js +460 -0
- package/build/dist/Utils/ProbeNetworkFailureUtil.js.map +1 -0
- package/package.json +1 -1
|
@@ -29,6 +29,7 @@ import LIMIT_MAX, { LIMIT_PER_PROJECT } from "../../Types/Database/LimitMax";
|
|
|
29
29
|
import BadDataException from "../../Types/Exception/BadDataException";
|
|
30
30
|
import ObjectID from "../../Types/ObjectID";
|
|
31
31
|
import StatusPageSubscriberNotificationStatus from "../../Types/StatusPage/StatusPageSubscriberNotificationStatus";
|
|
32
|
+
import Monitor from "../../Models/DatabaseModels/Monitor";
|
|
32
33
|
import Model from "../../Models/DatabaseModels/ScheduledMaintenance";
|
|
33
34
|
import MonitorStatusService from "./MonitorStatusService";
|
|
34
35
|
import ProjectScopedReferenceValidator, { resolveReferenceId, resolveReferenceIds, } from "../Utils/Database/ProjectScopedReferenceValidator";
|
|
@@ -45,6 +46,7 @@ import SmsService from "../../Server/Services/SmsService";
|
|
|
45
46
|
import StatusPageResourceService from "../../Server/Services/StatusPageResourceService";
|
|
46
47
|
import StatusPageService from "../../Server/Services/StatusPageService";
|
|
47
48
|
import StatusPageSubscriberService from "../../Server/Services/StatusPageSubscriberService";
|
|
49
|
+
import StatusPageSubscriberUnsubscribe from "../../Types/StatusPage/StatusPageSubscriberUnsubscribe";
|
|
48
50
|
import QueryHelper from "../../Server/Types/Database/QueryHelper";
|
|
49
51
|
import Markdown, { MarkdownContentType } from "../../Server/Types/Markdown";
|
|
50
52
|
import logger from "../../Server/Utils/Logger";
|
|
@@ -64,8 +66,26 @@ import CaptureSpan from "../Utils/Telemetry/CaptureSpan";
|
|
|
64
66
|
import OwnerRuleAssignment from "../Utils/Rules/OwnerRuleAssignment";
|
|
65
67
|
import ProjectService from "./ProjectService";
|
|
66
68
|
import StatusPageSubscriberNotificationTemplateService, { Service as StatusPageSubscriberNotificationTemplateServiceClass, } from "./StatusPageSubscriberNotificationTemplateService";
|
|
69
|
+
import StatusPageResourceUtil from "../Utils/StatusPageResource";
|
|
70
|
+
import SafeHtml from "../../Types/SafeHtml";
|
|
67
71
|
import StatusPageSubscriberNotificationEventType from "../../Types/StatusPage/StatusPageSubscriberNotificationEventType";
|
|
68
72
|
import StatusPageSubscriberNotificationMethod from "../../Types/StatusPage/StatusPageSubscriberNotificationMethod";
|
|
73
|
+
import NetworkSite from "../../Models/DatabaseModels/NetworkSite";
|
|
74
|
+
const ATTACHMENT_COLUMNS = [
|
|
75
|
+
"monitors",
|
|
76
|
+
"networkSites",
|
|
77
|
+
];
|
|
78
|
+
/*
|
|
79
|
+
* Enough of a state to tell which kind it is. A project can add its own
|
|
80
|
+
* states between the built-in ones, and those are none of the four kinds.
|
|
81
|
+
*/
|
|
82
|
+
const STATE_KIND_SELECT = {
|
|
83
|
+
_id: true,
|
|
84
|
+
isScheduledState: true,
|
|
85
|
+
isOngoingState: true,
|
|
86
|
+
isEndedState: true,
|
|
87
|
+
isResolvedState: true,
|
|
88
|
+
};
|
|
69
89
|
export class Service extends DatabaseService {
|
|
70
90
|
constructor() {
|
|
71
91
|
super(Model);
|
|
@@ -74,7 +94,7 @@ export class Service extends DatabaseService {
|
|
|
74
94
|
}
|
|
75
95
|
}
|
|
76
96
|
async notififySubscribersOnEventScheduled(scheduledEvents) {
|
|
77
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k
|
|
97
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
|
|
78
98
|
logger.debug("ScheduledMaintenance:SendSubscriberRemindersOnEventScheduled: Running");
|
|
79
99
|
const host = await DatabaseConfig.getHost();
|
|
80
100
|
const httpProtocol = await DatabaseConfig.getHttpProtocol();
|
|
@@ -135,9 +155,14 @@ export class Service extends DatabaseService {
|
|
|
135
155
|
.toString()
|
|
136
156
|
: statusPageURL;
|
|
137
157
|
// Send email to Email subscribers.
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
158
|
+
/*
|
|
159
|
+
* The resources are read without their groups, so both forms are the
|
|
160
|
+
* names joined by commas. The HTML one, for email bodies, has every
|
|
161
|
+
* name escaped; SMS, Slack, subjects and webhooks get the names as
|
|
162
|
+
* written.
|
|
163
|
+
*/
|
|
164
|
+
const resourcesAffected = StatusPageResourceUtil.getResourcesGroupedByGroupNameAsPlainText(statusPageToResources[statuspage._id] || []);
|
|
165
|
+
const resourcesAffectedHtml = StatusPageResourceUtil.getResourcesGroupedByGroupName(statusPageToResources[statuspage._id] || []);
|
|
141
166
|
// Fetch custom templates for each notification method
|
|
142
167
|
const [emailTemplate, smsTemplate, slackTemplate,] = await Promise.all([
|
|
143
168
|
StatusPageSubscriberNotificationTemplateService.getTemplateForStatusPage({
|
|
@@ -169,7 +194,7 @@ export class Service extends DatabaseService {
|
|
|
169
194
|
if (!shouldNotifySubscriber) {
|
|
170
195
|
continue;
|
|
171
196
|
}
|
|
172
|
-
const unsubscribeUrl = StatusPageSubscriberService.getUnsubscribeLink(URL.fromString(statusPageURL), subscriber
|
|
197
|
+
const unsubscribeUrl = StatusPageSubscriberService.getUnsubscribeLink(URL.fromString(statusPageURL), subscriber).toString();
|
|
173
198
|
// Template variables for custom templates, as Markdown (Slack)
|
|
174
199
|
const templateVariables = {
|
|
175
200
|
statusPageName: statusPageName,
|
|
@@ -187,17 +212,28 @@ export class Service extends DatabaseService {
|
|
|
187
212
|
// Template variables for SMS and email subjects, as plain text
|
|
188
213
|
const plainTextTemplateVariables = Object.assign(Object.assign({}, templateVariables), { scheduledMaintenanceDescription: eventDescriptionPlainText });
|
|
189
214
|
if (subscriber.subscriberPhone) {
|
|
215
|
+
/*
|
|
216
|
+
* On a public status page the SMS keeps the shorter manage link,
|
|
217
|
+
* which works there without signing in: an SMS is billed by the
|
|
218
|
+
* segment (see StatusPageSubscriberUnsubscribe.buildSmsLink).
|
|
219
|
+
*/
|
|
220
|
+
const smsUnsubscribeUrl = StatusPageSubscriberUnsubscribe.buildSmsLink({
|
|
221
|
+
isPublicStatusPage: statuspage.isPublicStatusPage,
|
|
222
|
+
statusPageUrl: statusPageURL,
|
|
223
|
+
subscriberId: subscriber.id,
|
|
224
|
+
unsubscribeUrl: unsubscribeUrl,
|
|
225
|
+
});
|
|
190
226
|
let smsMessage;
|
|
191
227
|
if (smsTemplate &&
|
|
192
228
|
smsTemplate.templateBody &&
|
|
193
229
|
statuspage.callSmsConfig) {
|
|
194
230
|
// Use custom template only when custom Twilio is configured
|
|
195
231
|
smsMessage =
|
|
196
|
-
StatusPageSubscriberNotificationTemplateServiceClass.compileTemplate(smsTemplate.templateBody, plainTextTemplateVariables);
|
|
232
|
+
StatusPageSubscriberNotificationTemplateServiceClass.compileTemplate(smsTemplate.templateBody, Object.assign(Object.assign({}, plainTextTemplateVariables), { unsubscribeUrl: smsUnsubscribeUrl }));
|
|
197
233
|
}
|
|
198
234
|
else {
|
|
199
235
|
// Use default template
|
|
200
|
-
smsMessage = `Scheduled Maintenance: ${event.title || ""} on ${statusPageName}.${resourcesAffected ? ` Impact: ${resourcesAffected}.` : ""} Details: ${scheduledEventDetailsUrl}. Unsub: ${
|
|
236
|
+
smsMessage = `Scheduled Maintenance: ${event.title || ""} on ${statusPageName}.${resourcesAffected ? ` Impact: ${resourcesAffected}.` : ""} Details: ${scheduledEventDetailsUrl}. Unsub: ${smsUnsubscribeUrl}`;
|
|
201
237
|
}
|
|
202
238
|
const sms = {
|
|
203
239
|
message: smsMessage,
|
|
@@ -256,7 +292,7 @@ ${resourcesAffected ? `**Resources Affected:** ${resourcesAffected}` : ""}
|
|
|
256
292
|
statusPageUrl: statusPageURL,
|
|
257
293
|
unsubscribeUrl: unsubscribeUrl,
|
|
258
294
|
data: {
|
|
259
|
-
scheduledMaintenanceId: ((
|
|
295
|
+
scheduledMaintenanceId: ((_h = event.id) === null || _h === void 0 ? void 0 : _h.toString()) || "",
|
|
260
296
|
scheduledMaintenanceTitle: event.title || "",
|
|
261
297
|
scheduledMaintenanceDescription: event.description || "",
|
|
262
298
|
scheduledStartTime: OneUptimeDate.getDateAsUserFriendlyFormattedString(event.startsAt),
|
|
@@ -276,8 +312,19 @@ ${resourcesAffected ? `**Resources Affected:** ${resourcesAffected}` : ""}
|
|
|
276
312
|
}
|
|
277
313
|
if (subscriber.subscriberEmail) {
|
|
278
314
|
// send email here.
|
|
279
|
-
const statusPageIdString = ((
|
|
280
|
-
|
|
315
|
+
const statusPageIdString = ((_j = statuspage.id) === null || _j === void 0 ? void 0 : _j.toString()) || ((_k = statuspage._id) === null || _k === void 0 ? void 0 : _k.toString()) || null;
|
|
316
|
+
const scheduledAtHtml = OneUptimeDate.getDateAsFormattedHTMLInMultipleTimezones({
|
|
317
|
+
date: event.startsAt,
|
|
318
|
+
timezones: statuspage.subscriberTimezones || [],
|
|
319
|
+
use12HourFormat: true,
|
|
320
|
+
});
|
|
321
|
+
/*
|
|
322
|
+
* The default template's variables. resourcesAffected,
|
|
323
|
+
* scheduledAt and eventDescription are HTML (the template puts
|
|
324
|
+
* them in its raw-HTML slot); the footer is HTML the status
|
|
325
|
+
* page's admins wrote, as they write the template. Everything
|
|
326
|
+
* else is plain text, which the template escapes.
|
|
327
|
+
*/
|
|
281
328
|
const emailVars = {
|
|
282
329
|
statusPageName: statusPageName,
|
|
283
330
|
statusPageUrl: statusPageURL,
|
|
@@ -292,12 +339,8 @@ ${resourcesAffected ? `**Resources Affected:** ${resourcesAffected}` : ""}
|
|
|
292
339
|
? "true"
|
|
293
340
|
: "false",
|
|
294
341
|
subscriberEmailNotificationFooterText: statuspage.subscriberEmailNotificationFooterText || "",
|
|
295
|
-
resourcesAffected:
|
|
296
|
-
scheduledAt:
|
|
297
|
-
date: event.startsAt,
|
|
298
|
-
timezones: statuspage.subscriberTimezones || [],
|
|
299
|
-
use12HourFormat: true,
|
|
300
|
-
}),
|
|
342
|
+
resourcesAffected: resourcesAffectedHtml,
|
|
343
|
+
scheduledAt: scheduledAtHtml,
|
|
301
344
|
eventTitle: event.title || "",
|
|
302
345
|
eventDescription: eventDescriptionHtml,
|
|
303
346
|
unsubscribeUrl: unsubscribeUrl,
|
|
@@ -311,8 +354,12 @@ ${resourcesAffected ? `**Resources Affected:** ${resourcesAffected}` : ""}
|
|
|
311
354
|
* is configured. The body is HTML, so the description is too.
|
|
312
355
|
* The subject is plain text, including the email-only
|
|
313
356
|
* variables that are HTML in the body.
|
|
357
|
+
*
|
|
358
|
+
* In the body, the plain values are escaped
|
|
359
|
+
* (compileEmailBodyTemplate) and only the ones wrapped in
|
|
360
|
+
* SafeHtml below go in as HTML.
|
|
314
361
|
*/
|
|
315
|
-
const customEmailBody = StatusPageSubscriberNotificationTemplateServiceClass.
|
|
362
|
+
const customEmailBody = StatusPageSubscriberNotificationTemplateServiceClass.compileEmailBodyTemplate(emailTemplate.templateBody, Object.assign(Object.assign(Object.assign({}, templateVariables), emailVars), { resourcesAffected: SafeHtml.fromTrustedHtml(resourcesAffectedHtml), scheduledAt: SafeHtml.fromTrustedHtml(scheduledAtHtml), eventDescription: SafeHtml.fromTrustedHtml(eventDescriptionHtml), scheduledMaintenanceDescription: SafeHtml.fromTrustedHtml(eventDescriptionHtml), subscriberEmailNotificationFooterText: SafeHtml.fromTrustedHtml(emailVars["subscriberEmailNotificationFooterText"]) }));
|
|
316
363
|
const customEmailSubject = emailTemplate.emailSubject
|
|
317
364
|
? StatusPageSubscriberNotificationTemplateServiceClass.compileTemplate(emailTemplate.emailSubject, Object.assign(Object.assign(Object.assign({}, emailVars), plainTextTemplateVariables), { eventDescription: eventDescriptionPlainText, scheduledAt: OneUptimeDate.getDateAsFormattedArrayInMultipleTimezones({
|
|
318
365
|
date: event.startsAt,
|
|
@@ -433,6 +480,11 @@ ${resourcesAffected ? `**Resources Affected:** ${resourcesAffected}` : ""}
|
|
|
433
480
|
}
|
|
434
481
|
}
|
|
435
482
|
await this.validateProjectScopedReferences(updateBy);
|
|
483
|
+
/*
|
|
484
|
+
* Read before the write, because afterwards the detached monitors are no
|
|
485
|
+
* longer on the event and nothing else remembers them.
|
|
486
|
+
*/
|
|
487
|
+
const carryForward = await this.getAttachmentsBeforeUpdate(updateBy);
|
|
436
488
|
/*
|
|
437
489
|
* Re-apply mapped custom field values. Covers the Custom Fields modal
|
|
438
490
|
* saving the whole bag back over a mapped value, and the event's monitors
|
|
@@ -445,9 +497,123 @@ ${resourcesAffected ? `**Resources Affected:** ${resourcesAffected}` : ""}
|
|
|
445
497
|
});
|
|
446
498
|
return {
|
|
447
499
|
updateBy,
|
|
448
|
-
carryForward:
|
|
500
|
+
carryForward: carryForward,
|
|
449
501
|
};
|
|
450
502
|
}
|
|
503
|
+
/*
|
|
504
|
+
* The monitors and network sites each event the update matches holds just
|
|
505
|
+
* before the write, for onUpdateSuccess to compare with what it holds
|
|
506
|
+
* after. Null, with nothing read, unless the payload writes one of those
|
|
507
|
+
* lists.
|
|
508
|
+
*
|
|
509
|
+
* Read as root but held to the tenant's project, like the other update
|
|
510
|
+
* reads here; the permission checks that narrow the write run after this
|
|
511
|
+
* hook, so an event read here that the write then skips is simply never
|
|
512
|
+
* looked up again (onUpdateSuccess only visits the rows actually written).
|
|
513
|
+
*/
|
|
514
|
+
async getAttachmentsBeforeUpdate(updateBy) {
|
|
515
|
+
var _a;
|
|
516
|
+
const columns = ATTACHMENT_COLUMNS.filter((column) => {
|
|
517
|
+
/*
|
|
518
|
+
* Only a list that is left out is left alone. Null or an empty list
|
|
519
|
+
* can clear it, and whatever the write makes of any payload is read
|
|
520
|
+
* back afterwards, so every written list is remembered here.
|
|
521
|
+
*/
|
|
522
|
+
return updateBy.data[column] !== undefined;
|
|
523
|
+
});
|
|
524
|
+
if (columns.length === 0) {
|
|
525
|
+
return null;
|
|
526
|
+
}
|
|
527
|
+
const carryForward = {};
|
|
528
|
+
/*
|
|
529
|
+
* One read per list. A find that selects two many-to-many relations
|
|
530
|
+
* returns a row for every combination of their ids. See
|
|
531
|
+
* ProjectScopedReferenceValidator.getHeldRelationIds.
|
|
532
|
+
*/
|
|
533
|
+
for (const column of columns) {
|
|
534
|
+
const select = {
|
|
535
|
+
_id: true,
|
|
536
|
+
projectId: true,
|
|
537
|
+
currentScheduledMaintenanceState: STATE_KIND_SELECT,
|
|
538
|
+
};
|
|
539
|
+
if (column === "monitors") {
|
|
540
|
+
select.monitors = {
|
|
541
|
+
_id: true,
|
|
542
|
+
};
|
|
543
|
+
}
|
|
544
|
+
else {
|
|
545
|
+
select.networkSites = {
|
|
546
|
+
_id: true,
|
|
547
|
+
};
|
|
548
|
+
}
|
|
549
|
+
const scheduledMaintenanceEvents = await this.findBy({
|
|
550
|
+
query: updateBy.props.tenantId
|
|
551
|
+
? Object.assign(Object.assign({}, updateBy.query), { projectId: updateBy.props.tenantId }) : updateBy.query,
|
|
552
|
+
select: select,
|
|
553
|
+
limit: LIMIT_MAX,
|
|
554
|
+
skip: 0,
|
|
555
|
+
props: {
|
|
556
|
+
isRoot: true,
|
|
557
|
+
},
|
|
558
|
+
});
|
|
559
|
+
for (const scheduledMaintenanceEvent of scheduledMaintenanceEvents) {
|
|
560
|
+
if (!scheduledMaintenanceEvent.id) {
|
|
561
|
+
continue;
|
|
562
|
+
}
|
|
563
|
+
const eventKey = scheduledMaintenanceEvent.id.toString();
|
|
564
|
+
const attachmentsBeforeUpdate = carryForward[eventKey] || {
|
|
565
|
+
projectId: undefined,
|
|
566
|
+
wasOngoingBeforeUpdate: false,
|
|
567
|
+
wasHoldingMonitorsBeforeUpdate: false,
|
|
568
|
+
monitorIdsBeforeUpdate: undefined,
|
|
569
|
+
networkSiteIdsBeforeUpdate: undefined,
|
|
570
|
+
};
|
|
571
|
+
attachmentsBeforeUpdate.projectId = scheduledMaintenanceEvent.projectId;
|
|
572
|
+
attachmentsBeforeUpdate.wasOngoingBeforeUpdate = Boolean((_a = scheduledMaintenanceEvent.currentScheduledMaintenanceState) === null || _a === void 0 ? void 0 : _a.isOngoingState);
|
|
573
|
+
if (column === "monitors") {
|
|
574
|
+
attachmentsBeforeUpdate.monitorIdsBeforeUpdate = this.getIdsNotIn({
|
|
575
|
+
ids: resolveReferenceIds(scheduledMaintenanceEvent.monitors),
|
|
576
|
+
exclude: [],
|
|
577
|
+
});
|
|
578
|
+
// Only monitors are held; sites follow the live state.
|
|
579
|
+
attachmentsBeforeUpdate.wasHoldingMonitorsBeforeUpdate =
|
|
580
|
+
await ScheduledMaintenanceStateTimelineService.isScheduledMaintenanceHoldingMonitors({
|
|
581
|
+
scheduledMaintenanceId: scheduledMaintenanceEvent.id,
|
|
582
|
+
projectId: scheduledMaintenanceEvent.projectId,
|
|
583
|
+
currentState: scheduledMaintenanceEvent.currentScheduledMaintenanceState,
|
|
584
|
+
});
|
|
585
|
+
}
|
|
586
|
+
else {
|
|
587
|
+
attachmentsBeforeUpdate.networkSiteIdsBeforeUpdate = this.getIdsNotIn({
|
|
588
|
+
ids: resolveReferenceIds(scheduledMaintenanceEvent.networkSites),
|
|
589
|
+
exclude: [],
|
|
590
|
+
});
|
|
591
|
+
}
|
|
592
|
+
carryForward[eventKey] = attachmentsBeforeUpdate;
|
|
593
|
+
}
|
|
594
|
+
}
|
|
595
|
+
return carryForward;
|
|
596
|
+
}
|
|
597
|
+
/*
|
|
598
|
+
* The ids in `ids` that `exclude` does not hold, each once and lower-cased
|
|
599
|
+
* (with nothing to exclude, a list read the same way). Compared case-blind,
|
|
600
|
+
* so an id that reached one side in another case is never reported as
|
|
601
|
+
* both removed and added.
|
|
602
|
+
*/
|
|
603
|
+
getIdsNotIn(data) {
|
|
604
|
+
const excludedKeys = new Set(data.exclude.map((id) => {
|
|
605
|
+
return id.toString().trim().toLowerCase();
|
|
606
|
+
}));
|
|
607
|
+
const result = new Map();
|
|
608
|
+
for (const id of data.ids) {
|
|
609
|
+
const key = id.toString().trim().toLowerCase();
|
|
610
|
+
if (!key || excludedKeys.has(key) || result.has(key)) {
|
|
611
|
+
continue;
|
|
612
|
+
}
|
|
613
|
+
result.set(key, new ObjectID(key));
|
|
614
|
+
}
|
|
615
|
+
return Array.from(result.values());
|
|
616
|
+
}
|
|
451
617
|
/*
|
|
452
618
|
* An update can repoint a scheduled maintenance event at another project's
|
|
453
619
|
* state or monitor status just as easily as a create can, and the result is
|
|
@@ -1207,8 +1373,349 @@ ${scheduledMaintenance.description || "No description provided."}
|
|
|
1207
1373
|
"Changed because of scheduled maintenance event: " + item.id.toString(), undefined, props);
|
|
1208
1374
|
}
|
|
1209
1375
|
}
|
|
1376
|
+
/*
|
|
1377
|
+
* What the write actually changed on one event: its lists as read back
|
|
1378
|
+
* now, against the ones onBeforeUpdate read before the write. Comparing
|
|
1379
|
+
* with the payload instead would trust entries the write may have dropped
|
|
1380
|
+
* (see AttachmentsBeforeUpdate) - a monitor put into maintenance without
|
|
1381
|
+
* being attached could never be restored, since ending or deleting the
|
|
1382
|
+
* event only reaches the monitors it holds.
|
|
1383
|
+
*
|
|
1384
|
+
* The monitors are read back whenever they were written, because the feed
|
|
1385
|
+
* names the change on any event. The sites are only needed by an event
|
|
1386
|
+
* that was suppressing them.
|
|
1387
|
+
*/
|
|
1388
|
+
async getAttachmentChange(data) {
|
|
1389
|
+
const attachmentsBeforeUpdate = data.attachmentsBeforeUpdate;
|
|
1390
|
+
const change = {
|
|
1391
|
+
monitorsAdded: [],
|
|
1392
|
+
monitorsRemoved: [],
|
|
1393
|
+
networkSitesChanged: [],
|
|
1394
|
+
eventAfterUpdate: null,
|
|
1395
|
+
};
|
|
1396
|
+
const monitorIdsBeforeUpdate = attachmentsBeforeUpdate.monitorIdsBeforeUpdate;
|
|
1397
|
+
if (monitorIdsBeforeUpdate) {
|
|
1398
|
+
const eventAfterUpdate = await this.findOneById({
|
|
1399
|
+
id: data.scheduledMaintenanceId,
|
|
1400
|
+
select: {
|
|
1401
|
+
_id: true,
|
|
1402
|
+
changeMonitorStatusToId: true,
|
|
1403
|
+
currentScheduledMaintenanceState: STATE_KIND_SELECT,
|
|
1404
|
+
monitors: {
|
|
1405
|
+
_id: true,
|
|
1406
|
+
},
|
|
1407
|
+
},
|
|
1408
|
+
props: {
|
|
1409
|
+
isRoot: true,
|
|
1410
|
+
},
|
|
1411
|
+
});
|
|
1412
|
+
/*
|
|
1413
|
+
* An event that cannot be read back was deleted since the write, and
|
|
1414
|
+
* its delete hook deals with whatever it held.
|
|
1415
|
+
*/
|
|
1416
|
+
if (eventAfterUpdate) {
|
|
1417
|
+
const monitorIdsAfterUpdate = resolveReferenceIds(eventAfterUpdate.monitors);
|
|
1418
|
+
change.monitorsAdded = this.getIdsNotIn({
|
|
1419
|
+
ids: monitorIdsAfterUpdate,
|
|
1420
|
+
exclude: monitorIdsBeforeUpdate,
|
|
1421
|
+
});
|
|
1422
|
+
change.monitorsRemoved = this.getIdsNotIn({
|
|
1423
|
+
ids: monitorIdsBeforeUpdate,
|
|
1424
|
+
exclude: monitorIdsAfterUpdate,
|
|
1425
|
+
});
|
|
1426
|
+
change.eventAfterUpdate = eventAfterUpdate;
|
|
1427
|
+
}
|
|
1428
|
+
}
|
|
1429
|
+
const networkSiteIdsBeforeUpdate = attachmentsBeforeUpdate.networkSiteIdsBeforeUpdate;
|
|
1430
|
+
if (networkSiteIdsBeforeUpdate &&
|
|
1431
|
+
attachmentsBeforeUpdate.wasOngoingBeforeUpdate) {
|
|
1432
|
+
// A read of its own, for the same reason as in onBeforeUpdate.
|
|
1433
|
+
const eventAfterUpdate = await this.findOneById({
|
|
1434
|
+
id: data.scheduledMaintenanceId,
|
|
1435
|
+
select: {
|
|
1436
|
+
_id: true,
|
|
1437
|
+
networkSites: {
|
|
1438
|
+
_id: true,
|
|
1439
|
+
},
|
|
1440
|
+
},
|
|
1441
|
+
props: {
|
|
1442
|
+
isRoot: true,
|
|
1443
|
+
},
|
|
1444
|
+
});
|
|
1445
|
+
if (eventAfterUpdate) {
|
|
1446
|
+
const networkSiteIdsAfterUpdate = resolveReferenceIds(eventAfterUpdate.networkSites);
|
|
1447
|
+
change.networkSitesChanged = [
|
|
1448
|
+
...this.getIdsNotIn({
|
|
1449
|
+
ids: networkSiteIdsAfterUpdate,
|
|
1450
|
+
exclude: networkSiteIdsBeforeUpdate,
|
|
1451
|
+
}),
|
|
1452
|
+
...this.getIdsNotIn({
|
|
1453
|
+
ids: networkSiteIdsBeforeUpdate,
|
|
1454
|
+
exclude: networkSiteIdsAfterUpdate,
|
|
1455
|
+
}),
|
|
1456
|
+
];
|
|
1457
|
+
}
|
|
1458
|
+
}
|
|
1459
|
+
return change;
|
|
1460
|
+
}
|
|
1461
|
+
/*
|
|
1462
|
+
* Moving to ongoing puts the attached monitors into maintenance (the flag
|
|
1463
|
+
* that stops probing, and the configured status) and ending restores the
|
|
1464
|
+
* ones attached at that moment. Both read the list only at the transition,
|
|
1465
|
+
* so a monitor detached mid-window would stay disabled for good - ending
|
|
1466
|
+
* or deleting the event no longer reaches it, and the flag is not
|
|
1467
|
+
* user-editable - and one attached mid-window would keep being probed and
|
|
1468
|
+
* alerting. This does for the edited part of the list what the
|
|
1469
|
+
* transitions did for the rest.
|
|
1470
|
+
*
|
|
1471
|
+
* Monitors are acted on while the event holds them (see
|
|
1472
|
+
* ScheduledMaintenanceStateTimelineService.isScheduledMaintenanceHoldingMonitors):
|
|
1473
|
+
* a scheduled event picks up its list when it starts, and an ended one
|
|
1474
|
+
* has nothing held. Network sites are suppressed only while the event is
|
|
1475
|
+
* live in an ongoing state.
|
|
1476
|
+
*
|
|
1477
|
+
* The write has already committed, so nothing here may undo it or turn it
|
|
1478
|
+
* into an error. Each step fails on its own, and each monitor within a
|
|
1479
|
+
* step, logged; the steps after it still run.
|
|
1480
|
+
*/
|
|
1481
|
+
async applyAttachmentChangeToEvent(data) {
|
|
1482
|
+
const attachmentsBeforeUpdate = data.attachmentsBeforeUpdate;
|
|
1483
|
+
const change = data.change;
|
|
1484
|
+
const projectId = attachmentsBeforeUpdate.projectId;
|
|
1485
|
+
if (!projectId) {
|
|
1486
|
+
return;
|
|
1487
|
+
}
|
|
1488
|
+
const logAttributes = {
|
|
1489
|
+
projectId: projectId.toString(),
|
|
1490
|
+
scheduledMaintenanceId: data.scheduledMaintenanceId.toString(),
|
|
1491
|
+
};
|
|
1492
|
+
const wasHoldingMonitorsBeforeUpdate = attachmentsBeforeUpdate.wasHoldingMonitorsBeforeUpdate;
|
|
1493
|
+
/*
|
|
1494
|
+
* Whether the event holds its monitors now, as read back after the write
|
|
1495
|
+
* and after any state change the same update made. The state can also
|
|
1496
|
+
* move between onBeforeUpdate's read and the write - the
|
|
1497
|
+
* ChangeStateToOngoing job starting the event, or another request
|
|
1498
|
+
* changing its state - so the state before the write cannot decide
|
|
1499
|
+
* either list alone. Read only when it can change what happens.
|
|
1500
|
+
*
|
|
1501
|
+
* If it cannot be read, nothing new is held: a monitor probed through
|
|
1502
|
+
* the window is better than one disabled with nothing to restore it.
|
|
1503
|
+
*/
|
|
1504
|
+
let isHoldingMonitorsAfterUpdate = false;
|
|
1505
|
+
if (change.eventAfterUpdate &&
|
|
1506
|
+
(change.monitorsAdded.length > 0 ||
|
|
1507
|
+
(change.monitorsRemoved.length > 0 && !wasHoldingMonitorsBeforeUpdate))) {
|
|
1508
|
+
try {
|
|
1509
|
+
isHoldingMonitorsAfterUpdate =
|
|
1510
|
+
await ScheduledMaintenanceStateTimelineService.isScheduledMaintenanceHoldingMonitors({
|
|
1511
|
+
scheduledMaintenanceId: data.scheduledMaintenanceId,
|
|
1512
|
+
projectId: projectId,
|
|
1513
|
+
currentState: change.eventAfterUpdate.currentScheduledMaintenanceState,
|
|
1514
|
+
});
|
|
1515
|
+
}
|
|
1516
|
+
catch (err) {
|
|
1517
|
+
logger.error(`ScheduledMaintenanceService.applyAttachmentChangeToEvent: could not read whether scheduled maintenance ${data.scheduledMaintenanceId.toString()} holds its monitors after the update; holding none of the monitors it attached.`, logAttributes);
|
|
1518
|
+
logger.error(err, logAttributes);
|
|
1519
|
+
}
|
|
1520
|
+
}
|
|
1521
|
+
/*
|
|
1522
|
+
* A detached monitor is released if the event held its monitors on
|
|
1523
|
+
* either side of the write: before it, or after it when the event
|
|
1524
|
+
* started in between and the transition flagged the list it read then,
|
|
1525
|
+
* which may still have had this monitor on it. Only the monitors
|
|
1526
|
+
* actually flagged are released (see restoreMonitorsDetachedFromEvent).
|
|
1527
|
+
*/
|
|
1528
|
+
if (change.monitorsRemoved.length > 0 &&
|
|
1529
|
+
(wasHoldingMonitorsBeforeUpdate || isHoldingMonitorsAfterUpdate)) {
|
|
1530
|
+
try {
|
|
1531
|
+
await this.restoreMonitorsDetachedFromEvent({
|
|
1532
|
+
scheduledMaintenanceId: data.scheduledMaintenanceId,
|
|
1533
|
+
projectId: projectId,
|
|
1534
|
+
monitorIds: change.monitorsRemoved,
|
|
1535
|
+
});
|
|
1536
|
+
}
|
|
1537
|
+
catch (err) {
|
|
1538
|
+
logger.error(`ScheduledMaintenanceService.applyAttachmentChangeToEvent: could not restore the monitors detached from scheduled maintenance ${data.scheduledMaintenanceId.toString()}.`, logAttributes);
|
|
1539
|
+
logger.error(err, logAttributes);
|
|
1540
|
+
}
|
|
1541
|
+
}
|
|
1542
|
+
/*
|
|
1543
|
+
* An attached monitor is held when the event holds its monitors after
|
|
1544
|
+
* the write, whatever it was doing before: the job (or another request)
|
|
1545
|
+
* can have started it between onBeforeUpdate's read and the write,
|
|
1546
|
+
* flagging the list without this monitor. A transition that ran after
|
|
1547
|
+
* the write - the same update started the event, or the job did just
|
|
1548
|
+
* after - has reached this monitor already, and holding it again
|
|
1549
|
+
* changes nothing. An event the same update ended has had its whole list
|
|
1550
|
+
* restored by the transition, and holds nothing.
|
|
1551
|
+
*/
|
|
1552
|
+
if (change.monitorsAdded.length > 0 &&
|
|
1553
|
+
isHoldingMonitorsAfterUpdate &&
|
|
1554
|
+
change.eventAfterUpdate) {
|
|
1555
|
+
await this.holdMonitorsAttachedToEvent({
|
|
1556
|
+
scheduledMaintenanceId: data.scheduledMaintenanceId,
|
|
1557
|
+
projectId: projectId,
|
|
1558
|
+
monitorIds: change.monitorsAdded,
|
|
1559
|
+
changeMonitorStatusToId: change.eventAfterUpdate.changeMonitorStatusToId,
|
|
1560
|
+
});
|
|
1561
|
+
}
|
|
1562
|
+
/*
|
|
1563
|
+
* Sites are suppressed by the live attachment, so the edit itself has
|
|
1564
|
+
* already taken effect; this only re-rolls the chains now rather than at
|
|
1565
|
+
* the next stale sweep, as the state transition does. Detached sites
|
|
1566
|
+
* need it as much as attached ones: they were suppressed until now.
|
|
1567
|
+
* recomputeNetworkSiteRollups logs its own failures.
|
|
1568
|
+
*/
|
|
1569
|
+
if (attachmentsBeforeUpdate.wasOngoingBeforeUpdate &&
|
|
1570
|
+
change.networkSitesChanged.length > 0) {
|
|
1571
|
+
const eventWithChangedSites = new Model(data.scheduledMaintenanceId);
|
|
1572
|
+
eventWithChangedSites.projectId = projectId;
|
|
1573
|
+
eventWithChangedSites.networkSites = change.networkSitesChanged.map((siteId) => {
|
|
1574
|
+
return new NetworkSite(siteId);
|
|
1575
|
+
});
|
|
1576
|
+
await ScheduledMaintenanceStateTimelineService.recomputeNetworkSiteRollups(eventWithChangedSites);
|
|
1577
|
+
}
|
|
1578
|
+
}
|
|
1579
|
+
/*
|
|
1580
|
+
* Releases the monitors an edit detached from an event that was holding
|
|
1581
|
+
* them, exactly as ending the event releases its list:
|
|
1582
|
+
* enableActiveMonitoringForMonitors clears the flag and puts each back in
|
|
1583
|
+
* the operational status, skipping a monitor another event still holds
|
|
1584
|
+
* and carrying on past one that fails. This event no longer counts as
|
|
1585
|
+
* holding them: the write has already removed them from it.
|
|
1586
|
+
*
|
|
1587
|
+
* Only a monitor whose flag is set is released. That the event held its
|
|
1588
|
+
* monitors says it held the list it read when it started, not that it
|
|
1589
|
+
* held this monitor: an event the same update (or the job, just after the
|
|
1590
|
+
* write) started never flagged a monitor the write had already detached,
|
|
1591
|
+
* and one ended by another request just before the write has released it
|
|
1592
|
+
* already. Released anyway, that monitor would be forced into the
|
|
1593
|
+
* operational status over the one it is really in.
|
|
1594
|
+
*/
|
|
1595
|
+
async restoreMonitorsDetachedFromEvent(data) {
|
|
1596
|
+
const heldMonitors = await MonitorService.findBy({
|
|
1597
|
+
query: {
|
|
1598
|
+
_id: QueryHelper.any(data.monitorIds),
|
|
1599
|
+
projectId: data.projectId,
|
|
1600
|
+
disableActiveMonitoringBecauseOfScheduledMaintenanceEvent: true,
|
|
1601
|
+
},
|
|
1602
|
+
select: {
|
|
1603
|
+
_id: true,
|
|
1604
|
+
},
|
|
1605
|
+
limit: LIMIT_MAX,
|
|
1606
|
+
skip: 0,
|
|
1607
|
+
props: {
|
|
1608
|
+
isRoot: true,
|
|
1609
|
+
},
|
|
1610
|
+
});
|
|
1611
|
+
if (heldMonitors.length === 0) {
|
|
1612
|
+
return;
|
|
1613
|
+
}
|
|
1614
|
+
const eventWithRemovedMonitors = new Model(data.scheduledMaintenanceId);
|
|
1615
|
+
eventWithRemovedMonitors.projectId = data.projectId;
|
|
1616
|
+
eventWithRemovedMonitors.monitors = this.getIdsNotIn({
|
|
1617
|
+
ids: resolveReferenceIds(heldMonitors),
|
|
1618
|
+
exclude: [],
|
|
1619
|
+
}).map((monitorId) => {
|
|
1620
|
+
return new Monitor(monitorId);
|
|
1621
|
+
});
|
|
1622
|
+
await ScheduledMaintenanceStateTimelineService.enableActiveMonitoringForMonitors(eventWithRemovedMonitors);
|
|
1623
|
+
}
|
|
1624
|
+
/*
|
|
1625
|
+
* Puts the monitors an edit attached into maintenance, as entering ongoing
|
|
1626
|
+
* does for the list (ScheduledMaintenanceStateTimelineService): the flag
|
|
1627
|
+
* that stops probing, then the status the event applies, if any. Both are
|
|
1628
|
+
* idempotent, so a monitor the transition has reached as well - the event
|
|
1629
|
+
* started just after the write - is left as it is.
|
|
1630
|
+
*
|
|
1631
|
+
* One monitor at a time, as the release is: one that fails must not leave
|
|
1632
|
+
* the rest of what the edit attached probed and alerting through the
|
|
1633
|
+
* window.
|
|
1634
|
+
*/
|
|
1635
|
+
async holdMonitorsAttachedToEvent(data) {
|
|
1636
|
+
for (const monitorId of data.monitorIds) {
|
|
1637
|
+
try {
|
|
1638
|
+
await MonitorService.updateOneById({
|
|
1639
|
+
id: monitorId,
|
|
1640
|
+
data: {
|
|
1641
|
+
disableActiveMonitoringBecauseOfScheduledMaintenanceEvent: true, /// This will stop active monitoring.
|
|
1642
|
+
},
|
|
1643
|
+
props: {
|
|
1644
|
+
isRoot: true,
|
|
1645
|
+
},
|
|
1646
|
+
});
|
|
1647
|
+
const eventWithAddedMonitor = new Model(data.scheduledMaintenanceId);
|
|
1648
|
+
eventWithAddedMonitor.projectId = data.projectId;
|
|
1649
|
+
eventWithAddedMonitor.monitors = [new Monitor(monitorId)];
|
|
1650
|
+
if (data.changeMonitorStatusToId) {
|
|
1651
|
+
eventWithAddedMonitor.changeMonitorStatusToId =
|
|
1652
|
+
data.changeMonitorStatusToId;
|
|
1653
|
+
}
|
|
1654
|
+
// A no-op when the event does not change monitor status.
|
|
1655
|
+
await this.changeAttachedMonitorStates(eventWithAddedMonitor, {
|
|
1656
|
+
isRoot: true,
|
|
1657
|
+
});
|
|
1658
|
+
}
|
|
1659
|
+
catch (err) {
|
|
1660
|
+
const logAttributes = {
|
|
1661
|
+
projectId: data.projectId.toString(),
|
|
1662
|
+
scheduledMaintenanceId: data.scheduledMaintenanceId.toString(),
|
|
1663
|
+
monitorId: monitorId.toString(),
|
|
1664
|
+
};
|
|
1665
|
+
logger.error(`ScheduledMaintenanceService.holdMonitorsAttachedToEvent: could not put monitor ${monitorId.toString()} into maintenance; continuing with the remaining monitors.`, logAttributes);
|
|
1666
|
+
logger.error(err, logAttributes);
|
|
1667
|
+
continue;
|
|
1668
|
+
}
|
|
1669
|
+
}
|
|
1670
|
+
}
|
|
1671
|
+
/*
|
|
1672
|
+
* "Monitors Removed" / "Monitors Added" for the updated feed item, worded
|
|
1673
|
+
* as the incident feed words them. The names are read back held to the
|
|
1674
|
+
* project, so an id that is not this project's monitor is never named.
|
|
1675
|
+
*/
|
|
1676
|
+
async getMonitorChangesFeedMarkdown(data) {
|
|
1677
|
+
const sections = [
|
|
1678
|
+
{
|
|
1679
|
+
title: "🗑️ Monitors Removed",
|
|
1680
|
+
monitorIds: data.change.monitorsRemoved,
|
|
1681
|
+
},
|
|
1682
|
+
{
|
|
1683
|
+
title: "🌎 Monitors Added",
|
|
1684
|
+
monitorIds: data.change.monitorsAdded,
|
|
1685
|
+
},
|
|
1686
|
+
];
|
|
1687
|
+
let markdown = "";
|
|
1688
|
+
for (const section of sections) {
|
|
1689
|
+
if (section.monitorIds.length === 0) {
|
|
1690
|
+
continue;
|
|
1691
|
+
}
|
|
1692
|
+
const monitors = await MonitorService.findBy({
|
|
1693
|
+
query: {
|
|
1694
|
+
_id: QueryHelper.any(section.monitorIds),
|
|
1695
|
+
projectId: data.projectId,
|
|
1696
|
+
},
|
|
1697
|
+
select: {
|
|
1698
|
+
_id: true,
|
|
1699
|
+
name: true,
|
|
1700
|
+
},
|
|
1701
|
+
limit: LIMIT_PER_PROJECT,
|
|
1702
|
+
skip: 0,
|
|
1703
|
+
props: {
|
|
1704
|
+
isRoot: true,
|
|
1705
|
+
},
|
|
1706
|
+
});
|
|
1707
|
+
if (monitors.length === 0) {
|
|
1708
|
+
continue;
|
|
1709
|
+
}
|
|
1710
|
+
markdown += `\n\n**${section.title}**:\n`;
|
|
1711
|
+
for (const monitor of monitors) {
|
|
1712
|
+
markdown += `- [${monitor.name}](${(await MonitorService.getMonitorLinkInDashboard(data.projectId, monitor.id)).toString()})\n`;
|
|
1713
|
+
}
|
|
1714
|
+
}
|
|
1715
|
+
return markdown;
|
|
1716
|
+
}
|
|
1210
1717
|
async onUpdateSuccess(onUpdate, updatedItemIds) {
|
|
1211
|
-
var _a;
|
|
1718
|
+
var _a, _b, _c, _d;
|
|
1212
1719
|
CustomFieldMappingService.restampAfterMultiRowUpdate({
|
|
1213
1720
|
definitionModelType: ScheduledMaintenanceCustomField,
|
|
1214
1721
|
updateBy: onUpdate.updateBy,
|
|
@@ -1254,6 +1761,35 @@ ${scheduledMaintenance.description || "No description provided."}
|
|
|
1254
1761
|
let shouldAddScheduledMaintenanceFeed = false;
|
|
1255
1762
|
let feedInfoInMarkdown = "**Scheduled Maintenance was updated.**";
|
|
1256
1763
|
const createdByUserId = onUpdate.updateBy.props.userId;
|
|
1764
|
+
const attachmentsBeforeUpdate = (_a = onUpdate.carryForward) === null || _a === void 0 ? void 0 : _a[scheduledMaintenanceId.toString()];
|
|
1765
|
+
let attachmentChange = null;
|
|
1766
|
+
if (attachmentsBeforeUpdate) {
|
|
1767
|
+
/*
|
|
1768
|
+
* The update is saved by now. Whatever fails here is logged, and
|
|
1769
|
+
* the feed item and the other events of a bulk update still
|
|
1770
|
+
* follow - with the change named in the feed, when it was read
|
|
1771
|
+
* back before the failure.
|
|
1772
|
+
*/
|
|
1773
|
+
try {
|
|
1774
|
+
attachmentChange = await this.getAttachmentChange({
|
|
1775
|
+
scheduledMaintenanceId: scheduledMaintenanceId,
|
|
1776
|
+
attachmentsBeforeUpdate: attachmentsBeforeUpdate,
|
|
1777
|
+
});
|
|
1778
|
+
await this.applyAttachmentChangeToEvent({
|
|
1779
|
+
scheduledMaintenanceId: scheduledMaintenanceId,
|
|
1780
|
+
attachmentsBeforeUpdate: attachmentsBeforeUpdate,
|
|
1781
|
+
change: attachmentChange,
|
|
1782
|
+
});
|
|
1783
|
+
}
|
|
1784
|
+
catch (err) {
|
|
1785
|
+
const logAttributes = {
|
|
1786
|
+
projectId: (_b = attachmentsBeforeUpdate.projectId) === null || _b === void 0 ? void 0 : _b.toString(),
|
|
1787
|
+
scheduledMaintenanceId: scheduledMaintenanceId.toString(),
|
|
1788
|
+
};
|
|
1789
|
+
logger.error(`ScheduledMaintenanceService.onUpdateSuccess: could not apply the edit of the monitors or network sites of scheduled maintenance ${scheduledMaintenanceId.toString()}; the update itself is saved.`, logAttributes);
|
|
1790
|
+
logger.error(err, logAttributes);
|
|
1791
|
+
}
|
|
1792
|
+
}
|
|
1257
1793
|
if (onUpdate.updateBy.data.title) {
|
|
1258
1794
|
// add scheduledMaintenance feed.
|
|
1259
1795
|
feedInfoInMarkdown += `\n\n**Title**:
|
|
@@ -1326,6 +1862,32 @@ ${LinkedAffectedResources.getMarkdownLines({
|
|
|
1326
1862
|
shouldAddScheduledMaintenanceFeed = true;
|
|
1327
1863
|
}
|
|
1328
1864
|
}
|
|
1865
|
+
/*
|
|
1866
|
+
* The list above is what the event affects now; these say what the
|
|
1867
|
+
* edit changed. Removing every monitor leaves no list to show, and
|
|
1868
|
+
* without this the feed would not record the edit at all.
|
|
1869
|
+
*/
|
|
1870
|
+
if (attachmentChange && onUpdate.updateBy.props.tenantId) {
|
|
1871
|
+
// A line the names could not be read for is left out, not the item.
|
|
1872
|
+
try {
|
|
1873
|
+
const monitorChangesMarkdown = await this.getMonitorChangesFeedMarkdown({
|
|
1874
|
+
projectId: onUpdate.updateBy.props.tenantId,
|
|
1875
|
+
change: attachmentChange,
|
|
1876
|
+
});
|
|
1877
|
+
if (monitorChangesMarkdown) {
|
|
1878
|
+
feedInfoInMarkdown += monitorChangesMarkdown;
|
|
1879
|
+
shouldAddScheduledMaintenanceFeed = true;
|
|
1880
|
+
}
|
|
1881
|
+
}
|
|
1882
|
+
catch (err) {
|
|
1883
|
+
const logAttributes = {
|
|
1884
|
+
projectId: (_c = onUpdate.updateBy.props.tenantId) === null || _c === void 0 ? void 0 : _c.toString(),
|
|
1885
|
+
scheduledMaintenanceId: scheduledMaintenanceId.toString(),
|
|
1886
|
+
};
|
|
1887
|
+
logger.error(`ScheduledMaintenanceService.onUpdateSuccess: could not name the monitors added to or removed from scheduled maintenance ${scheduledMaintenanceId.toString()} in its feed.`, logAttributes);
|
|
1888
|
+
logger.error(err, logAttributes);
|
|
1889
|
+
}
|
|
1890
|
+
}
|
|
1329
1891
|
if (onUpdate.updateBy.data.statusPages &&
|
|
1330
1892
|
onUpdate.updateBy.data.statusPages.length > 0 &&
|
|
1331
1893
|
Array.isArray(onUpdate.updateBy.data.statusPages)) {
|
|
@@ -1429,7 +1991,7 @@ ${labels
|
|
|
1429
1991
|
}
|
|
1430
1992
|
catch (reminderError) {
|
|
1431
1993
|
logger.error(`Reminder rescheduling failed in ScheduledMaintenanceService.onUpdateSuccess: ${reminderError}`, {
|
|
1432
|
-
projectId: (
|
|
1994
|
+
projectId: (_d = onUpdate.updateBy.props.tenantId) === null || _d === void 0 ? void 0 : _d.toString(),
|
|
1433
1995
|
scheduledMaintenanceId: scheduledMaintenanceId === null || scheduledMaintenanceId === void 0 ? void 0 : scheduledMaintenanceId.toString(),
|
|
1434
1996
|
});
|
|
1435
1997
|
}
|