@oneuptime/common 14.0.8 → 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/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/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/KubernetesClusterAiAccessAPI.ts +623 -21
- package/Server/API/MicrosoftTeamsAPI.ts +93 -14
- package/Server/API/ProxmoxResourceAPI.ts +244 -14
- package/Server/Infrastructure/GlobalCache.ts +32 -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 +6 -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/IncidentService.ts +280 -104
- package/Server/Services/IncidentSeverityService.ts +66 -15
- 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/ScheduledMaintenanceService.ts +737 -1
- package/Server/Services/ScheduledMaintenanceStateTimelineService.ts +414 -56
- package/Server/Services/TeamComplianceSettingService.ts +1125 -9
- 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/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/Workspace/MicrosoftTeams/MicrosoftTeams.ts +684 -47
- 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/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 +2 -2
- package/Tests/App/Dashboard/EventOverviewPages.test.tsx +587 -13
- 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/IncidentRootCauseTimeRangeZoom.test.tsx +358 -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/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/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/StatusPage/StatusPageResourceExplorer.test.tsx +98 -0
- package/Tests/Models/DatabaseModels/KubernetesAiAgentModel.test.ts +295 -0
- package/Tests/Models/DatabaseModels/TeamComplianceSettingModel.test.ts +347 -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/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/Infrastructure/GlobalCache.test.ts +195 -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/AddTeamComplianceRuleScopeMigration.test.ts +622 -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/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/IncidentAffectedMonitorsEdit.test.ts +1360 -0
- package/Tests/Server/Services/IncidentAlertSloLinkSurvivesEdit.test.ts +3 -1
- package/Tests/Server/Services/IncidentSeverityDeletePausesComplianceRules.test.ts +488 -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/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/TeamComplianceSettingPostgres.test.ts +2237 -0
- package/Tests/Server/Services/TeamComplianceSettingService.test.ts +3988 -138
- 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/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/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/Kubernetes/KubernetesAgentChartAiAccess.test.ts +581 -113
- package/Tests/Types/Kubernetes/KubernetesAiAgentAccessContract.test.ts +510 -0
- 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/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/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/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/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/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/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/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/EntityDropdown/EntityDropdown.tsx +107 -11
- package/UI/Components/Forms/Fields/FormField.tsx +10 -0
- 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/ModelTable/BaseModelTable.tsx +12 -1
- 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/Utils/AiRemediation/CommandPolicy.ts +1 -1
- package/Utils/AiRemediation/KubectlPolicy.ts +1 -1
- package/Utils/Dashboard/DashboardTimeRangeZoom.ts +46 -2
- 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/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/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/Infrastructure/GlobalCache.js +27 -0
- package/build/dist/Server/Infrastructure/GlobalCache.js.map +1 -1
- 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 +6 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
- 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/IncidentService.js +199 -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/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/ScheduledMaintenanceService.js +535 -3
- 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/TeamComplianceSettingService.js +833 -7
- package/build/dist/Server/Services/TeamComplianceSettingService.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/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/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/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/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/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/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/ModelTable/BaseModelTable.js +10 -0
- package/build/dist/UI/Components/ModelTable/BaseModelTable.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/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/package.json +1 -1
|
@@ -0,0 +1,434 @@
|
|
|
1
|
+
import ComplianceNotificationChannel from "./ComplianceNotificationChannel";
|
|
2
|
+
import ComplianceRuleType from "./ComplianceRuleType";
|
|
3
|
+
import NotificationRuleType from "../NotificationRule/NotificationRuleType";
|
|
4
|
+
|
|
5
|
+
/*
|
|
6
|
+
* The catalog of team compliance rules: what each ComplianceRuleType means,
|
|
7
|
+
* which options it takes, and how to say it in a sentence. The server (which
|
|
8
|
+
* evaluates rules), the settings service (which validates them) and the
|
|
9
|
+
* Dashboard (which builds and describes them) all read this one table, so the
|
|
10
|
+
* three can never disagree about whether, say, an alert rule takes incident
|
|
11
|
+
* severities.
|
|
12
|
+
*
|
|
13
|
+
* Pure data and pure functions only - this file is bundled into the Dashboard.
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
export enum ComplianceRuleCategory {
|
|
17
|
+
// The member has a verified notification method on one channel.
|
|
18
|
+
NotificationMethod = "NotificationMethod",
|
|
19
|
+
/*
|
|
20
|
+
* The member has on-call notification rules for a set of severities,
|
|
21
|
+
* optionally on one specific channel.
|
|
22
|
+
*/
|
|
23
|
+
OnCallRule = "OnCallRule",
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export enum ComplianceSeverityKind {
|
|
27
|
+
Incident = "Incident",
|
|
28
|
+
Alert = "Alert",
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export interface ComplianceChannelDefinition {
|
|
32
|
+
channel: ComplianceNotificationChannel;
|
|
33
|
+
// "Call", "Push notification", ...
|
|
34
|
+
label: string;
|
|
35
|
+
// What a member has to add: "phone number for calls", "push device", ...
|
|
36
|
+
methodNoun: string;
|
|
37
|
+
/*
|
|
38
|
+
* False only for webhooks, which have no verification step: a configured
|
|
39
|
+
* webhook is usable as it stands, and the runtime treats it that way.
|
|
40
|
+
*/
|
|
41
|
+
hasVerification: boolean;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
export interface ComplianceRuleDefinition {
|
|
45
|
+
ruleType: ComplianceRuleType;
|
|
46
|
+
category: ComplianceRuleCategory;
|
|
47
|
+
// Short name for the rule kind, used on builder cards.
|
|
48
|
+
title: string;
|
|
49
|
+
// One sentence on what the rule checks.
|
|
50
|
+
description: string;
|
|
51
|
+
// NotificationMethod rules: the channel whose verified method is required.
|
|
52
|
+
methodChannel?: ComplianceNotificationChannel | undefined;
|
|
53
|
+
// OnCallRule rules: the notification rule type the member must have.
|
|
54
|
+
notificationRuleType?: NotificationRuleType | undefined;
|
|
55
|
+
// OnCallRule rules: which severity list scopes the rule.
|
|
56
|
+
severityKind?: ComplianceSeverityKind | undefined;
|
|
57
|
+
// OnCallRule rules: "incident", "alert", "incident episode", "alert episode".
|
|
58
|
+
subject?: string | undefined;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
export const COMPLIANCE_CHANNEL_DEFINITIONS: ReadonlyArray<ComplianceChannelDefinition> =
|
|
62
|
+
[
|
|
63
|
+
{
|
|
64
|
+
channel: ComplianceNotificationChannel.Call,
|
|
65
|
+
label: "Call",
|
|
66
|
+
methodNoun: "phone number for calls",
|
|
67
|
+
hasVerification: true,
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
channel: ComplianceNotificationChannel.SMS,
|
|
71
|
+
label: "SMS",
|
|
72
|
+
methodNoun: "phone number for SMS",
|
|
73
|
+
hasVerification: true,
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
channel: ComplianceNotificationChannel.Push,
|
|
77
|
+
label: "Push notification",
|
|
78
|
+
methodNoun: "push notification device",
|
|
79
|
+
hasVerification: true,
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
channel: ComplianceNotificationChannel.Email,
|
|
83
|
+
label: "Email",
|
|
84
|
+
methodNoun: "email address",
|
|
85
|
+
hasVerification: true,
|
|
86
|
+
},
|
|
87
|
+
{
|
|
88
|
+
channel: ComplianceNotificationChannel.WhatsApp,
|
|
89
|
+
label: "WhatsApp",
|
|
90
|
+
methodNoun: "WhatsApp number",
|
|
91
|
+
hasVerification: true,
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
channel: ComplianceNotificationChannel.Telegram,
|
|
95
|
+
label: "Telegram",
|
|
96
|
+
methodNoun: "Telegram account",
|
|
97
|
+
hasVerification: true,
|
|
98
|
+
},
|
|
99
|
+
{
|
|
100
|
+
channel: ComplianceNotificationChannel.Slack,
|
|
101
|
+
label: "Slack",
|
|
102
|
+
methodNoun: "Slack account",
|
|
103
|
+
hasVerification: true,
|
|
104
|
+
},
|
|
105
|
+
{
|
|
106
|
+
channel: ComplianceNotificationChannel.MicrosoftTeams,
|
|
107
|
+
label: "Microsoft Teams",
|
|
108
|
+
methodNoun: "Microsoft Teams account",
|
|
109
|
+
hasVerification: true,
|
|
110
|
+
},
|
|
111
|
+
{
|
|
112
|
+
channel: ComplianceNotificationChannel.Webhook,
|
|
113
|
+
label: "Webhook",
|
|
114
|
+
methodNoun: "webhook",
|
|
115
|
+
hasVerification: false,
|
|
116
|
+
},
|
|
117
|
+
];
|
|
118
|
+
|
|
119
|
+
const methodRule: (data: {
|
|
120
|
+
ruleType: ComplianceRuleType;
|
|
121
|
+
channel: ComplianceNotificationChannel;
|
|
122
|
+
title: string;
|
|
123
|
+
description: string;
|
|
124
|
+
}) => ComplianceRuleDefinition = (data: {
|
|
125
|
+
ruleType: ComplianceRuleType;
|
|
126
|
+
channel: ComplianceNotificationChannel;
|
|
127
|
+
title: string;
|
|
128
|
+
description: string;
|
|
129
|
+
}): ComplianceRuleDefinition => {
|
|
130
|
+
return {
|
|
131
|
+
ruleType: data.ruleType,
|
|
132
|
+
category: ComplianceRuleCategory.NotificationMethod,
|
|
133
|
+
title: data.title,
|
|
134
|
+
description: data.description,
|
|
135
|
+
methodChannel: data.channel,
|
|
136
|
+
};
|
|
137
|
+
};
|
|
138
|
+
|
|
139
|
+
const onCallRule: (data: {
|
|
140
|
+
ruleType: ComplianceRuleType;
|
|
141
|
+
notificationRuleType: NotificationRuleType;
|
|
142
|
+
severityKind: ComplianceSeverityKind;
|
|
143
|
+
subject: string;
|
|
144
|
+
title: string;
|
|
145
|
+
description: string;
|
|
146
|
+
}) => ComplianceRuleDefinition = (data: {
|
|
147
|
+
ruleType: ComplianceRuleType;
|
|
148
|
+
notificationRuleType: NotificationRuleType;
|
|
149
|
+
severityKind: ComplianceSeverityKind;
|
|
150
|
+
subject: string;
|
|
151
|
+
title: string;
|
|
152
|
+
description: string;
|
|
153
|
+
}): ComplianceRuleDefinition => {
|
|
154
|
+
return {
|
|
155
|
+
ruleType: data.ruleType,
|
|
156
|
+
category: ComplianceRuleCategory.OnCallRule,
|
|
157
|
+
title: data.title,
|
|
158
|
+
description: data.description,
|
|
159
|
+
notificationRuleType: data.notificationRuleType,
|
|
160
|
+
severityKind: data.severityKind,
|
|
161
|
+
subject: data.subject,
|
|
162
|
+
};
|
|
163
|
+
};
|
|
164
|
+
|
|
165
|
+
/*
|
|
166
|
+
* In the order the Dashboard offers them: the on-call rules first, because
|
|
167
|
+
* "will this person actually be paged for a critical incident" is the question
|
|
168
|
+
* this page exists to answer, then the method rules.
|
|
169
|
+
*/
|
|
170
|
+
export const COMPLIANCE_RULE_DEFINITIONS: ReadonlyArray<ComplianceRuleDefinition> =
|
|
171
|
+
[
|
|
172
|
+
onCallRule({
|
|
173
|
+
ruleType: ComplianceRuleType.HasIncidentOnCallRules,
|
|
174
|
+
notificationRuleType: NotificationRuleType.ON_CALL_EXECUTED_INCIDENT,
|
|
175
|
+
severityKind: ComplianceSeverityKind.Incident,
|
|
176
|
+
subject: "incident",
|
|
177
|
+
title: "Incident on-call rules",
|
|
178
|
+
description:
|
|
179
|
+
"Members are notified when an incident on-call policy pages them - for the severities and channel you choose.",
|
|
180
|
+
}),
|
|
181
|
+
onCallRule({
|
|
182
|
+
ruleType: ComplianceRuleType.HasAlertOnCallRules,
|
|
183
|
+
notificationRuleType: NotificationRuleType.ON_CALL_EXECUTED_ALERT,
|
|
184
|
+
severityKind: ComplianceSeverityKind.Alert,
|
|
185
|
+
subject: "alert",
|
|
186
|
+
title: "Alert on-call rules",
|
|
187
|
+
description:
|
|
188
|
+
"Members are notified when an alert on-call policy pages them - for the severities and channel you choose.",
|
|
189
|
+
}),
|
|
190
|
+
onCallRule({
|
|
191
|
+
ruleType: ComplianceRuleType.HasIncidentEpisodeOnCallRules,
|
|
192
|
+
notificationRuleType:
|
|
193
|
+
NotificationRuleType.ON_CALL_EXECUTED_INCIDENT_EPISODE,
|
|
194
|
+
severityKind: ComplianceSeverityKind.Incident,
|
|
195
|
+
subject: "incident episode",
|
|
196
|
+
title: "Incident episode on-call rules",
|
|
197
|
+
description:
|
|
198
|
+
"Members are notified when an incident episode on-call policy pages them - for the severities and channel you choose.",
|
|
199
|
+
}),
|
|
200
|
+
onCallRule({
|
|
201
|
+
ruleType: ComplianceRuleType.HasAlertEpisodeOnCallRules,
|
|
202
|
+
notificationRuleType: NotificationRuleType.ON_CALL_EXECUTED_ALERT_EPISODE,
|
|
203
|
+
severityKind: ComplianceSeverityKind.Alert,
|
|
204
|
+
subject: "alert episode",
|
|
205
|
+
title: "Alert episode on-call rules",
|
|
206
|
+
description:
|
|
207
|
+
"Members are notified when an alert episode on-call policy pages them - for the severities and channel you choose.",
|
|
208
|
+
}),
|
|
209
|
+
methodRule({
|
|
210
|
+
ruleType: ComplianceRuleType.HasNotificationCallMethod,
|
|
211
|
+
channel: ComplianceNotificationChannel.Call,
|
|
212
|
+
title: "Verified phone for calls",
|
|
213
|
+
description: "Members have a verified phone number that can be called.",
|
|
214
|
+
}),
|
|
215
|
+
methodRule({
|
|
216
|
+
ruleType: ComplianceRuleType.HasNotificationSMSMethod,
|
|
217
|
+
channel: ComplianceNotificationChannel.SMS,
|
|
218
|
+
title: "Verified phone for SMS",
|
|
219
|
+
description: "Members have a verified phone number that can receive SMS.",
|
|
220
|
+
}),
|
|
221
|
+
methodRule({
|
|
222
|
+
ruleType: ComplianceRuleType.HasNotificationPushMethod,
|
|
223
|
+
channel: ComplianceNotificationChannel.Push,
|
|
224
|
+
title: "Verified push device",
|
|
225
|
+
description:
|
|
226
|
+
"Members have the mobile app or a browser registered for push notifications.",
|
|
227
|
+
}),
|
|
228
|
+
methodRule({
|
|
229
|
+
ruleType: ComplianceRuleType.HasNotificationEmailMethod,
|
|
230
|
+
channel: ComplianceNotificationChannel.Email,
|
|
231
|
+
title: "Verified email",
|
|
232
|
+
description: "Members have a verified email address for notifications.",
|
|
233
|
+
}),
|
|
234
|
+
methodRule({
|
|
235
|
+
ruleType: ComplianceRuleType.HasNotificationWhatsAppMethod,
|
|
236
|
+
channel: ComplianceNotificationChannel.WhatsApp,
|
|
237
|
+
title: "Verified WhatsApp",
|
|
238
|
+
description: "Members have a verified WhatsApp number.",
|
|
239
|
+
}),
|
|
240
|
+
methodRule({
|
|
241
|
+
ruleType: ComplianceRuleType.HasNotificationTelegramMethod,
|
|
242
|
+
channel: ComplianceNotificationChannel.Telegram,
|
|
243
|
+
title: "Verified Telegram",
|
|
244
|
+
description: "Members have a verified Telegram account.",
|
|
245
|
+
}),
|
|
246
|
+
methodRule({
|
|
247
|
+
ruleType: ComplianceRuleType.HasNotificationSlackMethod,
|
|
248
|
+
channel: ComplianceNotificationChannel.Slack,
|
|
249
|
+
title: "Verified Slack",
|
|
250
|
+
description: "Members have a verified Slack account for direct messages.",
|
|
251
|
+
}),
|
|
252
|
+
methodRule({
|
|
253
|
+
ruleType: ComplianceRuleType.HasNotificationMicrosoftTeamsMethod,
|
|
254
|
+
channel: ComplianceNotificationChannel.MicrosoftTeams,
|
|
255
|
+
title: "Verified Microsoft Teams",
|
|
256
|
+
description: "Members have a verified Microsoft Teams account.",
|
|
257
|
+
}),
|
|
258
|
+
methodRule({
|
|
259
|
+
ruleType: ComplianceRuleType.HasNotificationWebhookMethod,
|
|
260
|
+
channel: ComplianceNotificationChannel.Webhook,
|
|
261
|
+
title: "Webhook configured",
|
|
262
|
+
description: "Members have a webhook notification method.",
|
|
263
|
+
}),
|
|
264
|
+
];
|
|
265
|
+
|
|
266
|
+
/*
|
|
267
|
+
* "A, B and C" - the severity lists in sentences read as prose, not as a
|
|
268
|
+
* comma-separated dump.
|
|
269
|
+
*/
|
|
270
|
+
export const joinAsProse: (items: Array<string>) => string = (
|
|
271
|
+
items: Array<string>,
|
|
272
|
+
): string => {
|
|
273
|
+
if (items.length <= 1) {
|
|
274
|
+
return items[0] || "";
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
return `${items.slice(0, -1).join(", ")} and ${items[items.length - 1]}`;
|
|
278
|
+
};
|
|
279
|
+
|
|
280
|
+
export default class ComplianceRule {
|
|
281
|
+
public static getDefinition(
|
|
282
|
+
ruleType: string | undefined | null,
|
|
283
|
+
): ComplianceRuleDefinition | undefined {
|
|
284
|
+
return COMPLIANCE_RULE_DEFINITIONS.find(
|
|
285
|
+
(definition: ComplianceRuleDefinition): boolean => {
|
|
286
|
+
return definition.ruleType === ruleType;
|
|
287
|
+
},
|
|
288
|
+
);
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
public static getChannelDefinition(
|
|
292
|
+
channel: string | undefined | null,
|
|
293
|
+
): ComplianceChannelDefinition | undefined {
|
|
294
|
+
return COMPLIANCE_CHANNEL_DEFINITIONS.find(
|
|
295
|
+
(definition: ComplianceChannelDefinition): boolean => {
|
|
296
|
+
return definition.channel === channel;
|
|
297
|
+
},
|
|
298
|
+
);
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
public static isKnownRuleType(value: unknown): value is ComplianceRuleType {
|
|
302
|
+
return (
|
|
303
|
+
typeof value === "string" && Boolean(ComplianceRule.getDefinition(value))
|
|
304
|
+
);
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
public static isKnownChannel(
|
|
308
|
+
value: unknown,
|
|
309
|
+
): value is ComplianceNotificationChannel {
|
|
310
|
+
return (
|
|
311
|
+
typeof value === "string" &&
|
|
312
|
+
Boolean(ComplianceRule.getChannelDefinition(value))
|
|
313
|
+
);
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
public static isOnCallRule(ruleType: string | undefined | null): boolean {
|
|
317
|
+
return (
|
|
318
|
+
ComplianceRule.getDefinition(ruleType)?.category ===
|
|
319
|
+
ComplianceRuleCategory.OnCallRule
|
|
320
|
+
);
|
|
321
|
+
}
|
|
322
|
+
|
|
323
|
+
/*
|
|
324
|
+
* Only on-call rules take a severity scope and a channel. A method rule
|
|
325
|
+
* ("has a verified email") has neither, and any that arrive with one are
|
|
326
|
+
* ignored rather than half-applied.
|
|
327
|
+
*/
|
|
328
|
+
public static supportsSeverityScope(
|
|
329
|
+
ruleType: string | undefined | null,
|
|
330
|
+
): boolean {
|
|
331
|
+
return ComplianceRule.isOnCallRule(ruleType);
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
public static supportsChannel(ruleType: string | undefined | null): boolean {
|
|
335
|
+
return ComplianceRule.isOnCallRule(ruleType);
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
public static getSeverityKind(
|
|
339
|
+
ruleType: string | undefined | null,
|
|
340
|
+
): ComplianceSeverityKind | undefined {
|
|
341
|
+
return ComplianceRule.getDefinition(ruleType)?.severityKind;
|
|
342
|
+
}
|
|
343
|
+
|
|
344
|
+
public static getMethodRuleTypeForChannel(
|
|
345
|
+
channel: ComplianceNotificationChannel,
|
|
346
|
+
): ComplianceRuleType | undefined {
|
|
347
|
+
return COMPLIANCE_RULE_DEFINITIONS.find(
|
|
348
|
+
(definition: ComplianceRuleDefinition): boolean => {
|
|
349
|
+
return (
|
|
350
|
+
definition.category === ComplianceRuleCategory.NotificationMethod &&
|
|
351
|
+
definition.methodChannel === channel
|
|
352
|
+
);
|
|
353
|
+
},
|
|
354
|
+
)?.ruleType;
|
|
355
|
+
}
|
|
356
|
+
|
|
357
|
+
/*
|
|
358
|
+
* The rule's name as a list row shows it: "Call for incidents",
|
|
359
|
+
* "Incident on-call rules", "Verified push device".
|
|
360
|
+
*/
|
|
361
|
+
public static getTitle(data: {
|
|
362
|
+
ruleType: string | undefined | null;
|
|
363
|
+
notificationChannel?: string | undefined | null;
|
|
364
|
+
}): string {
|
|
365
|
+
const definition: ComplianceRuleDefinition | undefined =
|
|
366
|
+
ComplianceRule.getDefinition(data.ruleType);
|
|
367
|
+
|
|
368
|
+
if (!definition) {
|
|
369
|
+
return data.ruleType || "Unknown rule";
|
|
370
|
+
}
|
|
371
|
+
|
|
372
|
+
const channel: ComplianceChannelDefinition | undefined =
|
|
373
|
+
ComplianceRule.getChannelDefinition(data.notificationChannel);
|
|
374
|
+
|
|
375
|
+
if (definition.category === ComplianceRuleCategory.OnCallRule && channel) {
|
|
376
|
+
return `${channel.label} for ${definition.subject}s`;
|
|
377
|
+
}
|
|
378
|
+
|
|
379
|
+
return definition.title;
|
|
380
|
+
}
|
|
381
|
+
|
|
382
|
+
/*
|
|
383
|
+
* The rule as one sentence about what every member must have, e.g.
|
|
384
|
+
* "Every member has an incident on-call rule that notifies them by Call for
|
|
385
|
+
* Critical Incident and Major Incident."
|
|
386
|
+
*
|
|
387
|
+
* `severityNames` is the rule's scope. Empty means every severity, which is
|
|
388
|
+
* what a rule with no severities selected enforces.
|
|
389
|
+
*/
|
|
390
|
+
public static describe(data: {
|
|
391
|
+
ruleType: string | undefined | null;
|
|
392
|
+
notificationChannel?: string | undefined | null;
|
|
393
|
+
severityNames?: Array<string> | undefined;
|
|
394
|
+
}): string {
|
|
395
|
+
const definition: ComplianceRuleDefinition | undefined =
|
|
396
|
+
ComplianceRule.getDefinition(data.ruleType);
|
|
397
|
+
|
|
398
|
+
if (!definition) {
|
|
399
|
+
return `Unknown compliance rule "${data.ruleType || ""}".`;
|
|
400
|
+
}
|
|
401
|
+
|
|
402
|
+
if (definition.category === ComplianceRuleCategory.NotificationMethod) {
|
|
403
|
+
const channel: ComplianceChannelDefinition | undefined =
|
|
404
|
+
ComplianceRule.getChannelDefinition(definition.methodChannel);
|
|
405
|
+
|
|
406
|
+
if (channel && !channel.hasVerification) {
|
|
407
|
+
return `Every member has a ${channel.methodNoun} notification method.`;
|
|
408
|
+
}
|
|
409
|
+
|
|
410
|
+
return `Every member has a verified ${channel?.methodNoun || "notification method"}.`;
|
|
411
|
+
}
|
|
412
|
+
|
|
413
|
+
const severityNames: Array<string> = data.severityNames || [];
|
|
414
|
+
const scope: string =
|
|
415
|
+
severityNames.length === 0
|
|
416
|
+
? `every ${definition.subject} severity`
|
|
417
|
+
: joinAsProse(severityNames);
|
|
418
|
+
|
|
419
|
+
const channel: ComplianceChannelDefinition | undefined =
|
|
420
|
+
ComplianceRule.getChannelDefinition(data.notificationChannel);
|
|
421
|
+
|
|
422
|
+
if (channel) {
|
|
423
|
+
return `Every member has ${ComplianceRule.withArticle(definition.subject || "")} on-call rule that notifies them by ${channel.label} for ${scope}.`;
|
|
424
|
+
}
|
|
425
|
+
|
|
426
|
+
return `Every member has ${ComplianceRule.withArticle(definition.subject || "")} on-call rule for ${scope}.`;
|
|
427
|
+
}
|
|
428
|
+
|
|
429
|
+
private static withArticle(noun: string): string {
|
|
430
|
+
return "aeiou".includes(noun.charAt(0).toLowerCase())
|
|
431
|
+
? `an ${noun}`
|
|
432
|
+
: `a ${noun}`;
|
|
433
|
+
}
|
|
434
|
+
}
|
|
@@ -1,10 +1,31 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* The kinds of rule a team's compliance settings can enforce. The string
|
|
3
|
+
* values are stored in TeamComplianceSetting.ruleType, so existing values must
|
|
4
|
+
* never be renamed - add new ones instead.
|
|
5
|
+
*
|
|
6
|
+
* Two families (see ComplianceRule.ts for the catalog that describes each):
|
|
7
|
+
*
|
|
8
|
+
* - HasNotification<Channel>Method: the member has a verified notification
|
|
9
|
+
* method on that channel.
|
|
10
|
+
* - Has<Incident|Alert>[Episode]OnCallRules: the member has an on-call
|
|
11
|
+
* notification rule for the chosen severities (all of them when none are
|
|
12
|
+
* chosen), optionally on one specific channel - "call me for Critical
|
|
13
|
+
* incidents" is HasIncidentOnCallRules + Call + [Critical].
|
|
14
|
+
*/
|
|
1
15
|
enum ComplianceRuleType {
|
|
2
16
|
HasNotificationEmailMethod = "HasNotificationEmailMethod",
|
|
3
17
|
HasNotificationSMSMethod = "HasNotificationSMSMethod",
|
|
4
18
|
HasNotificationCallMethod = "HasNotificationCallMethod",
|
|
5
19
|
HasNotificationPushMethod = "HasNotificationPushMethod",
|
|
20
|
+
HasNotificationWhatsAppMethod = "HasNotificationWhatsAppMethod",
|
|
21
|
+
HasNotificationTelegramMethod = "HasNotificationTelegramMethod",
|
|
22
|
+
HasNotificationSlackMethod = "HasNotificationSlackMethod",
|
|
23
|
+
HasNotificationMicrosoftTeamsMethod = "HasNotificationMicrosoftTeamsMethod",
|
|
24
|
+
HasNotificationWebhookMethod = "HasNotificationWebhookMethod",
|
|
6
25
|
HasIncidentOnCallRules = "HasIncidentOnCallRules",
|
|
7
26
|
HasAlertOnCallRules = "HasAlertOnCallRules",
|
|
27
|
+
HasIncidentEpisodeOnCallRules = "HasIncidentEpisodeOnCallRules",
|
|
28
|
+
HasAlertEpisodeOnCallRules = "HasAlertEpisodeOnCallRules",
|
|
8
29
|
}
|
|
9
30
|
|
|
10
31
|
export default ComplianceRuleType;
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import ComplianceNotificationChannel from "./ComplianceNotificationChannel";
|
|
2
|
+
import { ComplianceSeverityKind } from "./ComplianceRule";
|
|
3
|
+
import ComplianceRuleType from "./ComplianceRuleType";
|
|
4
|
+
|
|
5
|
+
/*
|
|
6
|
+
* The JSON body of GET /team/compliance-status/:teamId (OneUptime Enterprise).
|
|
7
|
+
*
|
|
8
|
+
* The server (ee/Server/TeamCompliance) builds exactly this shape and the
|
|
9
|
+
* Dashboard page (ee/Dashboard/TeamCompliance) renders exactly this shape, so
|
|
10
|
+
* it is declared once, here, as plain JSON types - ids are strings, never
|
|
11
|
+
* ObjectIDs, because this is what crosses the wire.
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
export interface TeamComplianceSeverityJSON {
|
|
15
|
+
id: string;
|
|
16
|
+
name: string;
|
|
17
|
+
// Hex colour of the severity, when it has one.
|
|
18
|
+
color?: string | undefined;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export interface TeamComplianceRuleJSON {
|
|
22
|
+
// TeamComplianceSetting._id. A team may hold several rules of one type.
|
|
23
|
+
settingId: string;
|
|
24
|
+
ruleType: ComplianceRuleType;
|
|
25
|
+
enabled: boolean;
|
|
26
|
+
// Null means "any channel" (and is always null for method rules).
|
|
27
|
+
notificationChannel: ComplianceNotificationChannel | null;
|
|
28
|
+
// Which severity list scopes the rule; null for method rules.
|
|
29
|
+
severityKind: ComplianceSeverityKind | null;
|
|
30
|
+
/*
|
|
31
|
+
* True when the rule applies to every severity of its kind - an on-call
|
|
32
|
+
* rule with no severities selected. Always false for method rules.
|
|
33
|
+
*/
|
|
34
|
+
appliesToAllSeverities: boolean;
|
|
35
|
+
/*
|
|
36
|
+
* The severities the rule is scoped to, in severity order (most severe
|
|
37
|
+
* first). Empty when appliesToAllSeverities, and for method rules.
|
|
38
|
+
*/
|
|
39
|
+
severities: Array<TeamComplianceSeverityJSON>;
|
|
40
|
+
/*
|
|
41
|
+
* Members who pass / fail this rule. Both are 0 for a disabled rule, which
|
|
42
|
+
* is not evaluated at all.
|
|
43
|
+
*/
|
|
44
|
+
compliantCount: number;
|
|
45
|
+
nonCompliantCount: number;
|
|
46
|
+
/*
|
|
47
|
+
* Problems with the rule itself rather than with any member - e.g. the
|
|
48
|
+
* project has the rule's channel switched off, so nobody can pass it.
|
|
49
|
+
*/
|
|
50
|
+
warnings: Array<string>;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
export interface TeamComplianceIssueJSON {
|
|
54
|
+
// The rule this member fails.
|
|
55
|
+
settingId: string;
|
|
56
|
+
ruleType: ComplianceRuleType;
|
|
57
|
+
// What is wrong, as a sentence an admin can act on.
|
|
58
|
+
reason: string;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
export interface TeamMemberComplianceJSON {
|
|
62
|
+
userId: string;
|
|
63
|
+
userName: string;
|
|
64
|
+
userEmail: string;
|
|
65
|
+
userProfilePictureId?: string | undefined;
|
|
66
|
+
// False when the member fails at least one enabled rule.
|
|
67
|
+
isCompliant: boolean;
|
|
68
|
+
nonCompliantRules: Array<TeamComplianceIssueJSON>;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
export interface TeamComplianceStatusJSON {
|
|
72
|
+
teamId: string;
|
|
73
|
+
teamName: string;
|
|
74
|
+
// ISO-8601 time the status was computed.
|
|
75
|
+
evaluatedAt: string;
|
|
76
|
+
/*
|
|
77
|
+
* Every rule on the team, enabled or not, in the order they were created.
|
|
78
|
+
*/
|
|
79
|
+
complianceSettings: Array<TeamComplianceRuleJSON>;
|
|
80
|
+
userComplianceStatuses: Array<TeamMemberComplianceJSON>;
|
|
81
|
+
}
|
|
@@ -34,8 +34,34 @@ enum TelemetryIngestSurface {
|
|
|
34
34
|
* mint a Runner credential.
|
|
35
35
|
*/
|
|
36
36
|
KubernetesAgentRunner = "kubernetes-agent-runner",
|
|
37
|
+
/*
|
|
38
|
+
* The Kubernetes AI agent the kubernetes-agent chart installs registers
|
|
39
|
+
* itself with the same project ingestion key the collector uses, and
|
|
40
|
+
* receives an agent key that every kubectl job for its cluster is claimed
|
|
41
|
+
* with. Server keys only, for the same reason as the Runner above.
|
|
42
|
+
*/
|
|
43
|
+
KubernetesAiAgent = "kubernetes-ai-agent",
|
|
37
44
|
}
|
|
38
45
|
|
|
46
|
+
/*
|
|
47
|
+
* Surfaces that mint an IDENTITY (a key that kubectl jobs for a cluster are
|
|
48
|
+
* targeted at) rather than accept telemetry. The ingest middleware holds
|
|
49
|
+
* every one of them to the same two extra rules, keyed on this set so a new
|
|
50
|
+
* identity surface cannot quietly miss one:
|
|
51
|
+
*
|
|
52
|
+
* - a server key with no configured limit gets a conservative default
|
|
53
|
+
* requests-per-minute ceiling instead of "unlimited";
|
|
54
|
+
* - a key pinned to a single service is refused: its owner scoped it to
|
|
55
|
+
* one service's telemetry, not to standing up cluster access.
|
|
56
|
+
*
|
|
57
|
+
* None of them is browser-allowed (see the allowlist below).
|
|
58
|
+
*/
|
|
59
|
+
export const IDENTITY_REGISTRATION_SURFACES: ReadonlySet<TelemetryIngestSurface> =
|
|
60
|
+
new Set<TelemetryIngestSurface>([
|
|
61
|
+
TelemetryIngestSurface.KubernetesAgentRunner,
|
|
62
|
+
TelemetryIngestSurface.KubernetesAiAgent,
|
|
63
|
+
]);
|
|
64
|
+
|
|
39
65
|
/*
|
|
40
66
|
* The only surfaces a Browser key may write to. This is an ALLOWLIST, not a
|
|
41
67
|
* denylist, on purpose: a surface added later is refused to browser keys until
|
|
@@ -81,6 +107,8 @@ const INGEST_SURFACE_READABLE_NAMES: Record<TelemetryIngestSurface, string> = {
|
|
|
81
107
|
[TelemetryIngestSurface.Mqtt]: "MQTT ingest",
|
|
82
108
|
[TelemetryIngestSurface.KubernetesAgentRunner]:
|
|
83
109
|
"Kubernetes agent Runner registration",
|
|
110
|
+
[TelemetryIngestSurface.KubernetesAiAgent]:
|
|
111
|
+
"Kubernetes AI agent registration",
|
|
84
112
|
};
|
|
85
113
|
|
|
86
114
|
type GetIngestSurfaceReadableNameFunction = (
|
|
@@ -3,6 +3,26 @@ import { ErrorFunction, VoidFunction } from "../../../Types/FunctionTypes";
|
|
|
3
3
|
import GenericObject from "../../../Types/GenericObject";
|
|
4
4
|
import IconProp from "../../../Types/Icon/IconProp";
|
|
5
5
|
|
|
6
|
+
/*
|
|
7
|
+
* A row shows one action as a button and puts every other action in a ⋯ menu
|
|
8
|
+
* beside it (see SplitActionButtons). Most actions never need to say where they
|
|
9
|
+
* go - the split reads it off their style - so this is only for the ones whose
|
|
10
|
+
* style tells the wrong story.
|
|
11
|
+
*/
|
|
12
|
+
export enum ActionButtonPlacement {
|
|
13
|
+
/*
|
|
14
|
+
* The row's button, ahead of anything the style would have picked. The first
|
|
15
|
+
* visible Primary action wins; any other Primary action goes in the menu.
|
|
16
|
+
*/
|
|
17
|
+
Primary = "Primary",
|
|
18
|
+
/*
|
|
19
|
+
* Always in the ⋯ menu, never the row's button - even when it is the only
|
|
20
|
+
* action the row has. For utilities like "Show ID" that every row carries
|
|
21
|
+
* but nobody reaches for first.
|
|
22
|
+
*/
|
|
23
|
+
MoreMenu = "MoreMenu",
|
|
24
|
+
}
|
|
25
|
+
|
|
6
26
|
interface ActionButtonSchema<T extends GenericObject> {
|
|
7
27
|
title: string;
|
|
8
28
|
icon?: undefined | IconProp;
|
|
@@ -17,6 +37,7 @@ interface ActionButtonSchema<T extends GenericObject> {
|
|
|
17
37
|
*/
|
|
18
38
|
disabled?: boolean | undefined;
|
|
19
39
|
tooltip?: string | undefined;
|
|
40
|
+
placement?: ActionButtonPlacement | undefined;
|
|
20
41
|
onClick: (
|
|
21
42
|
item: T,
|
|
22
43
|
onCompleteAction: VoidFunction,
|