@oneuptime/common 11.4.1 → 11.5.1
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/AIRun.ts +50 -0
- package/Models/DatabaseModels/AlertSeverity.ts +6 -0
- package/Models/DatabaseModels/IncidentSeverity.ts +6 -0
- package/Models/DatabaseModels/Index.ts +16 -0
- package/Models/DatabaseModels/IoTDeviceCredential.ts +471 -0
- package/Models/DatabaseModels/LlmLog.ts +56 -0
- package/Models/DatabaseModels/LlmProvider.ts +33 -0
- package/Models/DatabaseModels/NetworkDevice.ts +1385 -0
- package/Models/DatabaseModels/NetworkDeviceDiscoveryScan.ts +717 -0
- package/Models/DatabaseModels/NetworkDeviceLabelRule.ts +514 -0
- package/Models/DatabaseModels/NetworkDeviceOwnerRule.ts +596 -0
- package/Models/DatabaseModels/NetworkDeviceOwnerTeam.ts +487 -0
- package/Models/DatabaseModels/NetworkDeviceOwnerUser.ts +486 -0
- package/Models/DatabaseModels/NetworkInterface.ts +563 -0
- package/Models/DatabaseModels/Project.ts +145 -0
- package/Models/DatabaseModels/TelemetryEntityRelationship.ts +54 -0
- package/Server/API/AIInvestigationAPI.ts +131 -63
- package/Server/API/AlertAPI.ts +5 -0
- package/Server/API/IncidentAPI.ts +10 -0
- package/Server/API/IncidentEpisodeAPI.ts +5 -0
- package/Server/API/LlmProviderAPI.ts +4 -0
- package/Server/API/ScheduledMaintenanceAPI.ts +5 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1783650000000-AddAdditionalParamsToLlmProvider.ts +19 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1783695782697-AddCacheTokenColumnsToLlmLog.ts +25 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1783701585317-AddAlertInvestigationGating.ts +31 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1783702431535-AddAiDailyAutonomousTokenLimitToProject.ts +19 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1783720000000-AddNetworkDeviceTables.ts +105 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1783721121260-AddAttemptCountToAIRun.ts +15 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1783730000000-AddNetworkDeviceOwnersAndRules.ts +192 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1783740000000-AddNetworkDeviceDiscoveryScan.ts +37 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1783750000000-AddLldpNeighborsToNetworkDevice.ts +19 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1783760576655-AddInvestigationTuningToProject.ts +25 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1783762505482-AddTelemetryEntityRelationshipMetrics.ts +31 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1783780000000-AddIoTDeviceCredentialTable.ts +79 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1783790000000-AddSnmpV3AuthColumnsToNetworkDevice.ts +49 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +26 -0
- package/Server/Services/AIRunService.ts +58 -0
- package/Server/Services/AIService.ts +101 -0
- package/Server/Services/IncidentService.ts +14 -41
- package/Server/Services/Index.ts +14 -0
- package/Server/Services/IoTDeviceCredentialService.ts +351 -0
- package/Server/Services/IoTDeviceService.ts +64 -21
- package/Server/Services/LlmLogService.ts +26 -0
- package/Server/Services/LlmProviderService.ts +3 -0
- package/Server/Services/MonitorService.ts +4 -1
- package/Server/Services/NetworkDeviceDiscoveryScanService.ts +10 -0
- package/Server/Services/NetworkDeviceLabelRuleEngineService.ts +204 -0
- package/Server/Services/NetworkDeviceLabelRuleService.ts +14 -0
- package/Server/Services/NetworkDeviceOwnerRuleEngineService.ts +222 -0
- package/Server/Services/NetworkDeviceOwnerRuleService.ts +14 -0
- package/Server/Services/NetworkDeviceOwnerTeamService.ts +10 -0
- package/Server/Services/NetworkDeviceOwnerUserService.ts +10 -0
- package/Server/Services/NetworkDeviceService.ts +50 -0
- package/Server/Services/NetworkInterfaceService.ts +10 -0
- package/Server/Services/TelemetryEntityRelationshipService.ts +23 -0
- package/Server/Services/TelemetryEntityService.ts +72 -2
- package/Server/Utils/AI/Sentinel/AlertInvestigationRunner.ts +244 -12
- package/Server/Utils/AI/Sentinel/IncidentInvestigationRunner.ts +92 -19
- package/Server/Utils/AI/Sentinel/InvestigationQueue.ts +493 -0
- package/Server/Utils/AI/Sentinel/SentinelInvestigationEngine.ts +88 -68
- package/Server/Utils/AI/Toolbox/Index.ts +2 -1
- package/Server/Utils/AI/Toolbox/MetricTools.ts +391 -0
- package/Server/Utils/LLM/LLMService.ts +21 -0
- package/Server/Utils/Monitor/Criteria/SnmpMonitorCriteria.ts +170 -2
- package/Server/Utils/Monitor/IoTDeviceAbsenceSeries.ts +101 -0
- package/Server/Utils/Monitor/MonitorAlert.ts +15 -3
- package/Server/Utils/Monitor/MonitorCriteriaEvaluator.ts +1 -1
- package/Server/Utils/Monitor/MonitorIncident.ts +19 -3
- package/Server/Utils/Monitor/MonitorMetricUtil.ts +87 -0
- package/Server/Utils/Monitor/MonitorResource.ts +77 -21
- package/Server/Utils/Monitor/MonitorTemplateUtil.ts +1 -1
- package/Server/Utils/Monitor/NetworkDeviceHydrationUtil.ts +201 -0
- package/Server/Utils/Monitor/NetworkInventoryUtil.ts +215 -0
- package/Server/Utils/Monitor/SnmpInterfaceRateUtil.ts +169 -0
- package/Tests/Server/Services/AIServiceDailyBudget.test.ts +173 -0
- package/Tests/Server/Services/IncidentInternalNoteAnnouncement.test.ts +97 -0
- package/Tests/Server/Services/IoTDeviceService.test.ts +54 -0
- package/Tests/Server/Utils/AI/BaselineAnomalyTool.test.ts +253 -0
- package/Tests/Server/Utils/AI/LLMServiceToolCalling.test.ts +44 -0
- package/Tests/Server/Utils/AI/SentinelAlertGating.test.ts +360 -0
- package/Tests/Server/Utils/AI/SentinelInvestigationQueue.test.ts +295 -0
- package/Tests/Server/Utils/Monitor/Criteria/SnmpMonitorCriteria.test.ts +59 -0
- package/Tests/Server/Utils/Monitor/IoTDeviceAbsenceSeries.test.ts +113 -0
- package/Tests/Server/Utils/Monitor/PerSeriesRecoveryResolution.test.ts +198 -0
- package/Tests/Types/Monitor/MonitorType.test.ts +1 -1
- package/Tests/Utils/Monitor/LatencyMatrixUtil.test.ts +111 -0
- package/Types/AI/AIRunStatus.ts +9 -0
- package/Types/Dashboard/DashboardComponents/ComponentArgument.ts +0 -1
- package/Types/Dashboard/DashboardComponents/DashboardLogChartComponent.ts +8 -3
- package/Types/LlmLogStatus.ts +1 -0
- package/Types/Monitor/CriteriaFilter.ts +5 -0
- package/Types/Monitor/IotAlertTemplates.ts +22 -3
- package/Types/Monitor/LatencyMatrix.ts +27 -0
- package/Types/Monitor/MonitorCriteriaInstance.ts +2 -2
- package/Types/Monitor/MonitorMetricType.ts +10 -0
- package/Types/Monitor/MonitorStep.ts +36 -11
- package/Types/Monitor/MonitorStepNetworkDeviceMonitor.ts +55 -0
- package/Types/Monitor/MonitorStepSnmpMonitor.ts +8 -0
- package/Types/Monitor/MonitorType.ts +14 -9
- package/Types/Monitor/SnmpMonitor/LldpNeighbor.ts +12 -0
- package/Types/Monitor/SnmpMonitor/NetworkDeviceAlertPack.ts +116 -0
- package/Types/Monitor/SnmpMonitor/NetworkTopology.ts +29 -0
- package/Types/Monitor/SnmpMonitor/SnmpInterface.ts +31 -0
- package/Types/Monitor/SnmpMonitor/SnmpMonitorResponse.ts +24 -0
- package/Types/Monitor/SnmpMonitor/SnmpTrap.ts +20 -0
- package/Types/Monitor/SnmpMonitor/SnmpVendorTemplate.ts +173 -0
- package/Types/Permission.ts +314 -0
- package/Types/Probe/ProbeMonitorResponse.ts +8 -0
- package/UI/Components/Icon/Icon.tsx +8 -6
- package/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.ts +2 -2
- package/UI/Components/MoreMenu/MoreMenu.tsx +61 -2
- package/UI/Components/Tabs/Tabs.tsx +10 -1
- package/UI/Utils/Navigation.ts +10 -1
- package/Utils/Dashboard/Components/DashboardLogChartComponent.ts +16 -21
- package/Utils/Monitor/LatencyMatrixUtil.ts +162 -0
- package/Utils/Monitor/MonitorMetricType.ts +71 -1
- package/Utils/Monitor/NetworkTopologyUtil.ts +159 -0
- package/Utils/Telemetry/EntityRelationship.ts +11 -0
- package/build/dist/Models/DatabaseModels/AIRun.js +52 -0
- package/build/dist/Models/DatabaseModels/AIRun.js.map +1 -1
- package/build/dist/Models/DatabaseModels/AlertSeverity.js +6 -0
- package/build/dist/Models/DatabaseModels/AlertSeverity.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncidentSeverity.js +6 -0
- package/build/dist/Models/DatabaseModels/IncidentSeverity.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Index.js +16 -0
- package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IoTDeviceCredential.js +493 -0
- package/build/dist/Models/DatabaseModels/IoTDeviceCredential.js.map +1 -0
- package/build/dist/Models/DatabaseModels/LlmLog.js +58 -0
- package/build/dist/Models/DatabaseModels/LlmLog.js.map +1 -1
- package/build/dist/Models/DatabaseModels/LlmProvider.js +33 -0
- package/build/dist/Models/DatabaseModels/LlmProvider.js.map +1 -1
- package/build/dist/Models/DatabaseModels/NetworkDevice.js +1426 -0
- package/build/dist/Models/DatabaseModels/NetworkDevice.js.map +1 -0
- package/build/dist/Models/DatabaseModels/NetworkDeviceDiscoveryScan.js +738 -0
- package/build/dist/Models/DatabaseModels/NetworkDeviceDiscoveryScan.js.map +1 -0
- package/build/dist/Models/DatabaseModels/NetworkDeviceLabelRule.js +522 -0
- package/build/dist/Models/DatabaseModels/NetworkDeviceLabelRule.js.map +1 -0
- package/build/dist/Models/DatabaseModels/NetworkDeviceOwnerRule.js +603 -0
- package/build/dist/Models/DatabaseModels/NetworkDeviceOwnerRule.js.map +1 -0
- package/build/dist/Models/DatabaseModels/NetworkDeviceOwnerTeam.js +503 -0
- package/build/dist/Models/DatabaseModels/NetworkDeviceOwnerTeam.js.map +1 -0
- package/build/dist/Models/DatabaseModels/NetworkDeviceOwnerUser.js +502 -0
- package/build/dist/Models/DatabaseModels/NetworkDeviceOwnerUser.js.map +1 -0
- package/build/dist/Models/DatabaseModels/NetworkInterface.js +589 -0
- package/build/dist/Models/DatabaseModels/NetworkInterface.js.map +1 -0
- package/build/dist/Models/DatabaseModels/Project.js +147 -0
- package/build/dist/Models/DatabaseModels/Project.js.map +1 -1
- package/build/dist/Models/DatabaseModels/TelemetryEntityRelationship.js +57 -0
- package/build/dist/Models/DatabaseModels/TelemetryEntityRelationship.js.map +1 -1
- package/build/dist/Server/API/AIInvestigationAPI.js +95 -55
- package/build/dist/Server/API/AIInvestigationAPI.js.map +1 -1
- package/build/dist/Server/API/AlertAPI.js +5 -0
- package/build/dist/Server/API/AlertAPI.js.map +1 -1
- package/build/dist/Server/API/IncidentAPI.js +10 -0
- package/build/dist/Server/API/IncidentAPI.js.map +1 -1
- package/build/dist/Server/API/IncidentEpisodeAPI.js +5 -0
- package/build/dist/Server/API/IncidentEpisodeAPI.js.map +1 -1
- package/build/dist/Server/API/LlmProviderAPI.js +5 -7
- package/build/dist/Server/API/LlmProviderAPI.js.map +1 -1
- package/build/dist/Server/API/ScheduledMaintenanceAPI.js +5 -0
- package/build/dist/Server/API/ScheduledMaintenanceAPI.js.map +1 -1
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783650000000-AddAdditionalParamsToLlmProvider.js +12 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783650000000-AddAdditionalParamsToLlmProvider.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783695782697-AddCacheTokenColumnsToLlmLog.js +14 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783695782697-AddCacheTokenColumnsToLlmLog.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783701585317-AddAlertInvestigationGating.js +18 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783701585317-AddAlertInvestigationGating.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783702431535-AddAiDailyAutonomousTokenLimitToProject.js +12 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783702431535-AddAiDailyAutonomousTokenLimitToProject.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783720000000-AddNetworkDeviceTables.js +51 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783720000000-AddNetworkDeviceTables.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783721121260-AddAttemptCountToAIRun.js +12 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783721121260-AddAttemptCountToAIRun.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783730000000-AddNetworkDeviceOwnersAndRules.js +101 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783730000000-AddNetworkDeviceOwnersAndRules.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783740000000-AddNetworkDeviceDiscoveryScan.js +18 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783740000000-AddNetworkDeviceDiscoveryScan.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783750000000-AddLldpNeighborsToNetworkDevice.js +12 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783750000000-AddLldpNeighborsToNetworkDevice.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783760576655-AddInvestigationTuningToProject.js +14 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783760576655-AddInvestigationTuningToProject.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783762505482-AddTelemetryEntityRelationshipMetrics.js +16 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783762505482-AddTelemetryEntityRelationshipMetrics.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783780000000-AddIoTDeviceCredentialTable.js +38 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783780000000-AddIoTDeviceCredentialTable.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783790000000-AddSnmpV3AuthColumnsToNetworkDevice.js +22 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783790000000-AddSnmpV3AuthColumnsToNetworkDevice.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +26 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
- package/build/dist/Server/Services/AIRunService.js +33 -0
- package/build/dist/Server/Services/AIRunService.js.map +1 -1
- package/build/dist/Server/Services/AIService.js +82 -9
- package/build/dist/Server/Services/AIService.js.map +1 -1
- package/build/dist/Server/Services/IncidentService.js +14 -25
- package/build/dist/Server/Services/IncidentService.js.map +1 -1
- package/build/dist/Server/Services/Index.js +14 -0
- package/build/dist/Server/Services/Index.js.map +1 -1
- package/build/dist/Server/Services/IoTDeviceCredentialService.js +321 -0
- package/build/dist/Server/Services/IoTDeviceCredentialService.js.map +1 -0
- package/build/dist/Server/Services/IoTDeviceService.js +49 -15
- package/build/dist/Server/Services/IoTDeviceService.js.map +1 -1
- package/build/dist/Server/Services/LlmLogService.js +29 -0
- package/build/dist/Server/Services/LlmLogService.js.map +1 -1
- package/build/dist/Server/Services/LlmProviderService.js +3 -0
- package/build/dist/Server/Services/LlmProviderService.js.map +1 -1
- package/build/dist/Server/Services/MonitorService.js +2 -1
- package/build/dist/Server/Services/MonitorService.js.map +1 -1
- package/build/dist/Server/Services/NetworkDeviceDiscoveryScanService.js +9 -0
- package/build/dist/Server/Services/NetworkDeviceDiscoveryScanService.js.map +1 -0
- package/build/dist/Server/Services/NetworkDeviceLabelRuleEngineService.js +166 -0
- package/build/dist/Server/Services/NetworkDeviceLabelRuleEngineService.js.map +1 -0
- package/build/dist/Server/Services/NetworkDeviceLabelRuleService.js +13 -0
- package/build/dist/Server/Services/NetworkDeviceLabelRuleService.js.map +1 -0
- package/build/dist/Server/Services/NetworkDeviceOwnerRuleEngineService.js +186 -0
- package/build/dist/Server/Services/NetworkDeviceOwnerRuleEngineService.js.map +1 -0
- package/build/dist/Server/Services/NetworkDeviceOwnerRuleService.js +13 -0
- package/build/dist/Server/Services/NetworkDeviceOwnerRuleService.js.map +1 -0
- package/build/dist/Server/Services/NetworkDeviceOwnerTeamService.js +9 -0
- package/build/dist/Server/Services/NetworkDeviceOwnerTeamService.js.map +1 -0
- package/build/dist/Server/Services/NetworkDeviceOwnerUserService.js +9 -0
- package/build/dist/Server/Services/NetworkDeviceOwnerUserService.js.map +1 -0
- package/build/dist/Server/Services/NetworkDeviceService.js +52 -0
- package/build/dist/Server/Services/NetworkDeviceService.js.map +1 -0
- package/build/dist/Server/Services/NetworkInterfaceService.js +9 -0
- package/build/dist/Server/Services/NetworkInterfaceService.js.map +1 -0
- package/build/dist/Server/Services/TelemetryEntityRelationshipService.js +22 -0
- package/build/dist/Server/Services/TelemetryEntityRelationshipService.js.map +1 -1
- package/build/dist/Server/Services/TelemetryEntityService.js +64 -2
- package/build/dist/Server/Services/TelemetryEntityService.js.map +1 -1
- package/build/dist/Server/Utils/AI/Sentinel/AlertInvestigationRunner.js +189 -9
- package/build/dist/Server/Utils/AI/Sentinel/AlertInvestigationRunner.js.map +1 -1
- package/build/dist/Server/Utils/AI/Sentinel/IncidentInvestigationRunner.js +84 -17
- package/build/dist/Server/Utils/AI/Sentinel/IncidentInvestigationRunner.js.map +1 -1
- package/build/dist/Server/Utils/AI/Sentinel/InvestigationQueue.js +428 -0
- package/build/dist/Server/Utils/AI/Sentinel/InvestigationQueue.js.map +1 -0
- package/build/dist/Server/Utils/AI/Sentinel/SentinelInvestigationEngine.js +63 -47
- package/build/dist/Server/Utils/AI/Sentinel/SentinelInvestigationEngine.js.map +1 -1
- package/build/dist/Server/Utils/AI/Toolbox/Index.js +2 -1
- package/build/dist/Server/Utils/AI/Toolbox/Index.js.map +1 -1
- package/build/dist/Server/Utils/AI/Toolbox/MetricTools.js +300 -0
- package/build/dist/Server/Utils/AI/Toolbox/MetricTools.js.map +1 -1
- package/build/dist/Server/Utils/LLM/LLMService.js +16 -0
- package/build/dist/Server/Utils/LLM/LLMService.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/Criteria/SnmpMonitorCriteria.js +130 -2
- package/build/dist/Server/Utils/Monitor/Criteria/SnmpMonitorCriteria.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/IoTDeviceAbsenceSeries.js +81 -0
- package/build/dist/Server/Utils/Monitor/IoTDeviceAbsenceSeries.js.map +1 -0
- package/build/dist/Server/Utils/Monitor/MonitorAlert.js +18 -7
- package/build/dist/Server/Utils/Monitor/MonitorAlert.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorIncident.js +25 -10
- package/build/dist/Server/Utils/Monitor/MonitorIncident.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorMetricUtil.js +69 -3
- package/build/dist/Server/Utils/Monitor/MonitorMetricUtil.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorResource.js +76 -30
- package/build/dist/Server/Utils/Monitor/MonitorResource.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorTemplateUtil.js +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorTemplateUtil.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/NetworkDeviceHydrationUtil.js +147 -0
- package/build/dist/Server/Utils/Monitor/NetworkDeviceHydrationUtil.js.map +1 -0
- package/build/dist/Server/Utils/Monitor/NetworkInventoryUtil.js +167 -0
- package/build/dist/Server/Utils/Monitor/NetworkInventoryUtil.js.map +1 -0
- package/build/dist/Server/Utils/Monitor/SnmpInterfaceRateUtil.js +93 -0
- package/build/dist/Server/Utils/Monitor/SnmpInterfaceRateUtil.js.map +1 -0
- package/build/dist/Types/AI/AIRunStatus.js +9 -0
- package/build/dist/Types/AI/AIRunStatus.js.map +1 -1
- package/build/dist/Types/Dashboard/DashboardComponents/ComponentArgument.js +0 -1
- package/build/dist/Types/Dashboard/DashboardComponents/ComponentArgument.js.map +1 -1
- package/build/dist/Types/LlmLogStatus.js +1 -0
- package/build/dist/Types/LlmLogStatus.js.map +1 -1
- package/build/dist/Types/Monitor/CriteriaFilter.js +5 -0
- package/build/dist/Types/Monitor/CriteriaFilter.js.map +1 -1
- package/build/dist/Types/Monitor/IotAlertTemplates.js +7 -7
- package/build/dist/Types/Monitor/IotAlertTemplates.js.map +1 -1
- package/build/dist/Types/Monitor/LatencyMatrix.js +2 -0
- package/build/dist/Types/Monitor/LatencyMatrix.js.map +1 -0
- package/build/dist/Types/Monitor/MonitorCriteriaInstance.js +2 -2
- package/build/dist/Types/Monitor/MonitorCriteriaInstance.js.map +1 -1
- package/build/dist/Types/Monitor/MonitorMetricType.js +9 -0
- package/build/dist/Types/Monitor/MonitorMetricType.js.map +1 -1
- package/build/dist/Types/Monitor/MonitorStep.js +22 -9
- package/build/dist/Types/Monitor/MonitorStep.js.map +1 -1
- package/build/dist/Types/Monitor/MonitorStepNetworkDeviceMonitor.js +36 -0
- package/build/dist/Types/Monitor/MonitorStepNetworkDeviceMonitor.js.map +1 -0
- package/build/dist/Types/Monitor/MonitorStepSnmpMonitor.js +3 -0
- package/build/dist/Types/Monitor/MonitorStepSnmpMonitor.js.map +1 -1
- package/build/dist/Types/Monitor/MonitorType.js +14 -9
- package/build/dist/Types/Monitor/MonitorType.js.map +1 -1
- package/build/dist/Types/Monitor/SnmpMonitor/LldpNeighbor.js +2 -0
- package/build/dist/Types/Monitor/SnmpMonitor/LldpNeighbor.js.map +1 -0
- package/build/dist/Types/Monitor/SnmpMonitor/NetworkDeviceAlertPack.js +89 -0
- package/build/dist/Types/Monitor/SnmpMonitor/NetworkDeviceAlertPack.js.map +1 -0
- package/build/dist/Types/Monitor/SnmpMonitor/NetworkTopology.js +2 -0
- package/build/dist/Types/Monitor/SnmpMonitor/NetworkTopology.js.map +1 -0
- package/build/dist/Types/Monitor/SnmpMonitor/SnmpInterface.js +2 -0
- package/build/dist/Types/Monitor/SnmpMonitor/SnmpInterface.js.map +1 -0
- package/build/dist/Types/Monitor/SnmpMonitor/SnmpTrap.js +2 -0
- package/build/dist/Types/Monitor/SnmpMonitor/SnmpTrap.js.map +1 -0
- package/build/dist/Types/Monitor/SnmpMonitor/SnmpVendorTemplate.js +137 -0
- package/build/dist/Types/Monitor/SnmpMonitor/SnmpVendorTemplate.js.map +1 -0
- package/build/dist/Types/Permission.js +280 -0
- package/build/dist/Types/Permission.js.map +1 -1
- package/build/dist/UI/Components/Icon/Icon.js +8 -6
- package/build/dist/UI/Components/Icon/Icon.js.map +1 -1
- package/build/dist/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.js +2 -2
- package/build/dist/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.js.map +1 -1
- package/build/dist/UI/Components/MoreMenu/MoreMenu.js +44 -4
- package/build/dist/UI/Components/MoreMenu/MoreMenu.js.map +1 -1
- package/build/dist/UI/Components/Tabs/Tabs.js +3 -1
- package/build/dist/UI/Components/Tabs/Tabs.js.map +1 -1
- package/build/dist/UI/Utils/Navigation.js +11 -1
- package/build/dist/UI/Utils/Navigation.js.map +1 -1
- package/build/dist/Utils/Dashboard/Components/DashboardLogChartComponent.js +17 -20
- package/build/dist/Utils/Dashboard/Components/DashboardLogChartComponent.js.map +1 -1
- package/build/dist/Utils/Monitor/LatencyMatrixUtil.js +89 -0
- package/build/dist/Utils/Monitor/LatencyMatrixUtil.js.map +1 -0
- package/build/dist/Utils/Monitor/MonitorMetricType.js +68 -1
- package/build/dist/Utils/Monitor/MonitorMetricType.js.map +1 -1
- package/build/dist/Utils/Monitor/NetworkTopologyUtil.js +112 -0
- package/build/dist/Utils/Monitor/NetworkTopologyUtil.js.map +1 -0
- package/build/dist/Utils/Telemetry/EntityRelationship.js.map +1 -1
- package/package.json +1 -1
|
@@ -10,9 +10,12 @@ var __metadata = (this && this.__metadata) || function (k, v) {
|
|
|
10
10
|
import OneUptimeDate from "../../../../Types/Date";
|
|
11
11
|
import { Blue500 } from "../../../../Types/BrandColors";
|
|
12
12
|
import { IncidentFeedEventType } from "../../../../Models/DatabaseModels/IncidentFeed";
|
|
13
|
+
import IncidentInternalNote from "../../../../Models/DatabaseModels/IncidentInternalNote";
|
|
13
14
|
import IncidentFeedService from "../../../Services/IncidentFeedService";
|
|
15
|
+
import IncidentInternalNoteService from "../../../Services/IncidentInternalNoteService";
|
|
14
16
|
import IncidentAIContextBuilder from "../IncidentAIContextBuilder";
|
|
15
17
|
import SentinelInvestigationEngine from "./SentinelInvestigationEngine";
|
|
18
|
+
import SentinelInvestigationQueue from "./InvestigationQueue";
|
|
16
19
|
import SentinelMemory from "./SentinelMemory";
|
|
17
20
|
import logger from "../../Logger";
|
|
18
21
|
import CaptureSpan from "../../Telemetry/CaptureSpan";
|
|
@@ -21,18 +24,17 @@ import CaptureSpan from "../../Telemetry/CaptureSpan";
|
|
|
21
24
|
*
|
|
22
25
|
* When a new incident is declared, wakes Sentinel to investigate it (read-only)
|
|
23
26
|
* and post a cited root-cause analysis into the incident timeline + Slack/Teams
|
|
24
|
-
* — before the on-call engineer has finished reading the page. The
|
|
25
|
-
*
|
|
26
|
-
*
|
|
27
|
-
*
|
|
28
|
-
*
|
|
29
|
-
* Built on the fire-and-forget async pattern already used throughout
|
|
30
|
-
* IncidentService.onCreateSuccess. See Internal/Roadmap/AISentinelExecution.md.
|
|
27
|
+
* — before the on-call engineer has finished reading the page. The trigger only
|
|
28
|
+
* records durable intent (a Queued AIRun via SentinelInvestigationQueue), so a
|
|
29
|
+
* pod restart can no longer orphan an investigation; the heavy lifting (run
|
|
30
|
+
* lifecycle, the agent loop, confidence gating) lives in the shared
|
|
31
|
+
* SentinelInvestigationEngine. See Internal/Roadmap/AISentinelExecution.md.
|
|
31
32
|
*/
|
|
32
33
|
export default class SentinelIncidentInvestigationRunner {
|
|
33
34
|
/*
|
|
34
35
|
* Entry point called (fire-and-forget) from IncidentService.onCreateSuccess.
|
|
35
|
-
*
|
|
36
|
+
* Cheap: gates + a Queued AIRun row; execution happens via the queue.
|
|
37
|
+
* Never throws — all failures are logged.
|
|
36
38
|
*/
|
|
37
39
|
static async investigateNewIncident(data) {
|
|
38
40
|
const { incidentId, projectId } = data;
|
|
@@ -40,6 +42,25 @@ export default class SentinelIncidentInvestigationRunner {
|
|
|
40
42
|
if (!(await SentinelInvestigationEngine.isEnabledForProject(projectId, "Incident"))) {
|
|
41
43
|
return;
|
|
42
44
|
}
|
|
45
|
+
await SentinelInvestigationQueue.enqueue({
|
|
46
|
+
projectId,
|
|
47
|
+
subjectIncidentId: incidentId,
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
catch (error) {
|
|
51
|
+
logger.error(`Sentinel: unexpected error enqueueing investigation for incident ${incidentId.toString()}: ${error}`);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
/*
|
|
55
|
+
* Execute a claimed run: assemble incident context and hand it to the
|
|
56
|
+
* engine. Called by SentinelInvestigationQueue after a successful claim.
|
|
57
|
+
* Never throws — failures are handed to the queue's retry policy so a
|
|
58
|
+
* claimed run is always finalized or requeued.
|
|
59
|
+
*/
|
|
60
|
+
static async executeInvestigation(data) {
|
|
61
|
+
const { aiRunId, projectId, incidentId, attemptCount } = data;
|
|
62
|
+
let contextSummary;
|
|
63
|
+
try {
|
|
43
64
|
const contextData = await IncidentAIContextBuilder.buildIncidentContext({
|
|
44
65
|
incidentId,
|
|
45
66
|
includeWorkspaceMessages: false,
|
|
@@ -63,11 +84,29 @@ export default class SentinelIncidentInvestigationRunner {
|
|
|
63
84
|
})
|
|
64
85
|
.filter(Boolean),
|
|
65
86
|
});
|
|
66
|
-
|
|
67
|
-
|
|
87
|
+
contextSummary =
|
|
88
|
+
this.buildIncidentSummary(contextData) + priorCasesContext;
|
|
89
|
+
}
|
|
90
|
+
catch (error) {
|
|
91
|
+
/*
|
|
92
|
+
* Context assembly failed — the run is claimed, so hand it to the
|
|
93
|
+
* retry policy rather than leaving it Running until the sweeper.
|
|
94
|
+
*/
|
|
95
|
+
await SentinelInvestigationQueue.failOrRequeue({
|
|
96
|
+
aiRunId,
|
|
97
|
+
attemptCount,
|
|
98
|
+
errorMessage: `Failed to build incident context: ${error instanceof Error ? error.message : String(error)}`,
|
|
99
|
+
isPermanent: false,
|
|
100
|
+
});
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
await SentinelInvestigationEngine.executeRun({
|
|
104
|
+
aiRunId,
|
|
105
|
+
projectId,
|
|
106
|
+
attemptCount,
|
|
107
|
+
request: {
|
|
68
108
|
feature: "Sentinel Incident Investigation",
|
|
69
|
-
|
|
70
|
-
contextSummary: this.buildIncidentSummary(contextData) + priorCasesContext,
|
|
109
|
+
contextSummary,
|
|
71
110
|
postAnalysis: async (postData) => {
|
|
72
111
|
await IncidentFeedService.createIncidentFeedItem({
|
|
73
112
|
incidentId,
|
|
@@ -83,12 +122,34 @@ export default class SentinelIncidentInvestigationRunner {
|
|
|
83
122
|
sendWorkspaceNotification: postData.isConfident,
|
|
84
123
|
},
|
|
85
124
|
});
|
|
125
|
+
/*
|
|
126
|
+
* Also file the RCA as an incident internal note, where responders
|
|
127
|
+
* collaborate. The RootCause feed item above, with its quiet-mode
|
|
128
|
+
* gating, must stay the single notification source, so:
|
|
129
|
+
* ignoreHooks skips the note service's "posted private note" feed
|
|
130
|
+
* item + unconditional workspace ping (workflow triggers and
|
|
131
|
+
* realtime updates still fire), and isOwnerNotified stops the
|
|
132
|
+
* note-posted owner-notification cron from paging owners about it.
|
|
133
|
+
* Best-effort: a note failure must not fail the run after the feed
|
|
134
|
+
* item already posted.
|
|
135
|
+
*/
|
|
136
|
+
try {
|
|
137
|
+
const note = new IncidentInternalNote();
|
|
138
|
+
note.incidentId = incidentId;
|
|
139
|
+
note.projectId = projectId;
|
|
140
|
+
note.note = postData.analysisMarkdown;
|
|
141
|
+
note.isOwnerNotified = true;
|
|
142
|
+
await IncidentInternalNoteService.create({
|
|
143
|
+
data: note,
|
|
144
|
+
props: { isRoot: true, ignoreHooks: true },
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
catch (error) {
|
|
148
|
+
logger.error(`Sentinel: failed to post RCA internal note for incident ${incidentId.toString()}: ${error}`);
|
|
149
|
+
}
|
|
86
150
|
},
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
catch (error) {
|
|
90
|
-
logger.error(`Sentinel: unexpected error investigating incident ${incidentId.toString()}: ${error}`);
|
|
91
|
-
}
|
|
151
|
+
},
|
|
152
|
+
});
|
|
92
153
|
}
|
|
93
154
|
// Build a compact incident record to seed the investigation.
|
|
94
155
|
static buildIncidentSummary(contextData) {
|
|
@@ -144,4 +205,10 @@ __decorate([
|
|
|
144
205
|
__metadata("design:paramtypes", [Object]),
|
|
145
206
|
__metadata("design:returntype", Promise)
|
|
146
207
|
], SentinelIncidentInvestigationRunner, "investigateNewIncident", null);
|
|
208
|
+
__decorate([
|
|
209
|
+
CaptureSpan(),
|
|
210
|
+
__metadata("design:type", Function),
|
|
211
|
+
__metadata("design:paramtypes", [Object]),
|
|
212
|
+
__metadata("design:returntype", Promise)
|
|
213
|
+
], SentinelIncidentInvestigationRunner, "executeInvestigation", null);
|
|
147
214
|
//# sourceMappingURL=IncidentInvestigationRunner.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IncidentInvestigationRunner.js","sourceRoot":"","sources":["../../../../../../Server/Utils/AI/Sentinel/IncidentInvestigationRunner.ts"],"names":[],"mappings":";;;;;;;;;AACA,OAAO,aAAa,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,+BAA+B,CAAC;AACxD,OAAO,EAAE,qBAAqB,EAAE,MAAM,gDAAgD,CAAC;AACvF,OAAO,mBAAmB,MAAM,uCAAuC,CAAC;AACxE,OAAO,wBAEN,MAAM,6BAA6B,CAAC;AACrC,OAAO,2BAA2B,MAAM,+BAA+B,CAAC;AACxE,OAAO,cAAc,MAAM,kBAAkB,CAAC;AAE9C,OAAO,MAAM,MAAM,cAAc,CAAC;AAClC,OAAO,WAAW,MAAM,6BAA6B,CAAC;AAEtD
|
|
1
|
+
{"version":3,"file":"IncidentInvestigationRunner.js","sourceRoot":"","sources":["../../../../../../Server/Utils/AI/Sentinel/IncidentInvestigationRunner.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,428 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
8
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
9
|
+
};
|
|
10
|
+
import OneUptimeDate from "../../../../Types/Date";
|
|
11
|
+
import AIRunType from "../../../../Types/AI/AIRunType";
|
|
12
|
+
import AIRunStatus from "../../../../Types/AI/AIRunStatus";
|
|
13
|
+
import AIRun from "../../../../Models/DatabaseModels/AIRun";
|
|
14
|
+
import AIRunService from "../../../Services/AIRunService";
|
|
15
|
+
import ProjectService from "../../../Services/ProjectService";
|
|
16
|
+
import AIService from "../../../Services/AIService";
|
|
17
|
+
import SortOrder from "../../../../Types/BaseDatabase/SortOrder";
|
|
18
|
+
import QueryHelper from "../../../Types/Database/QueryHelper";
|
|
19
|
+
import logger from "../../Logger";
|
|
20
|
+
import CaptureSpan from "../../Telemetry/CaptureSpan";
|
|
21
|
+
/*
|
|
22
|
+
* Sentinel — the durable investigation queue (Phase 2's first item; Q1
|
|
23
|
+
* decided as the DB-claim pattern on AIRun rows, no new infrastructure).
|
|
24
|
+
*
|
|
25
|
+
* The problem it replaces: investigations ran as detached in-process
|
|
26
|
+
* promises, so a pod restart orphaned them silently (Deviations log D2).
|
|
27
|
+
*
|
|
28
|
+
* The shape:
|
|
29
|
+
* 1. enqueue() records the durable intent as an AIRun in status Queued
|
|
30
|
+
* BEFORE any expensive work, then immediately tries to process it
|
|
31
|
+
* in-process — same latency as before when the pod stays alive.
|
|
32
|
+
* 2. Claims go through AIRunService.attemptStatusTransition — one
|
|
33
|
+
* conditional UPDATE guarded on BOTH status=Queued and the expected
|
|
34
|
+
* attemptCount — so the enqueueing pod and the poller can race and
|
|
35
|
+
* exactly one wins, and a stale queue snapshot can never claim (or
|
|
36
|
+
* re-number) a run that moved on. attemptCount can therefore never
|
|
37
|
+
* exceed MAX_INVESTIGATION_ATTEMPTS.
|
|
38
|
+
* 3. A Workers poller claims whatever the inline path left behind
|
|
39
|
+
* (pod died, cap was full, budget was exhausted) and expires runs
|
|
40
|
+
* that sat queued past their usefulness window. The poller claims
|
|
41
|
+
* sequentially (so the concurrency cap sees each claim) but executes
|
|
42
|
+
* detached, keeping the every-minute tick fast.
|
|
43
|
+
* 4. Failed attempts requeue (transient errors and stale heartbeats)
|
|
44
|
+
* until MAX_ATTEMPTS, then finalize as Error/Stale — G9's retry
|
|
45
|
+
* policy. Permanent errors (bad configuration) never retry.
|
|
46
|
+
*
|
|
47
|
+
* Mid-run message-level checkpointing is deliberately NOT here: a retried
|
|
48
|
+
* investigation re-runs from the top, which is safe because investigations
|
|
49
|
+
* are read-only until the single postAnalysis at the end.
|
|
50
|
+
*/
|
|
51
|
+
// Initial attempt + one retry.
|
|
52
|
+
export const MAX_INVESTIGATION_ATTEMPTS = 2;
|
|
53
|
+
/*
|
|
54
|
+
* G4 cost guardrail: at most this many investigations may be Running per
|
|
55
|
+
* project at once (per-project override in
|
|
56
|
+
* Project.aiMaxConcurrentInvestigations). Enforced at CLAIM time, so a storm
|
|
57
|
+
* queues (bounded by dedupe + severity gates + this TTL) and drains at cap
|
|
58
|
+
* rate instead of being dropped.
|
|
59
|
+
*/
|
|
60
|
+
export const DEFAULT_MAX_CONCURRENT_INVESTIGATIONS = 3;
|
|
61
|
+
/*
|
|
62
|
+
* Clamp bounds for the per-project override. Pausing has its own switches
|
|
63
|
+
* (the opt-in toggles, daily limit 0), so the floor is 1, not 0.
|
|
64
|
+
*/
|
|
65
|
+
const MIN_CONCURRENT_INVESTIGATIONS = 1;
|
|
66
|
+
const MAX_CONCURRENT_INVESTIGATIONS = 25;
|
|
67
|
+
/*
|
|
68
|
+
* A first-pass RCA is only useful while the incident is fresh. Queued runs
|
|
69
|
+
* older than this are expired rather than run late — this also caps queue
|
|
70
|
+
* growth when the daily budget blocks claiming for hours.
|
|
71
|
+
*/
|
|
72
|
+
export const QUEUE_TTL_MINUTES = 30;
|
|
73
|
+
// How many queued runs one poller tick will try to claim.
|
|
74
|
+
const POLLER_BATCH_SIZE = 10;
|
|
75
|
+
export default class SentinelInvestigationQueue {
|
|
76
|
+
/*
|
|
77
|
+
* Record the durable intent to investigate, then try to process it
|
|
78
|
+
* immediately (detached — the poller is the safety net if this pod dies).
|
|
79
|
+
* Callers have already passed the subject-specific gates (opt-in,
|
|
80
|
+
* severity floor, dedupe window).
|
|
81
|
+
*/
|
|
82
|
+
static async enqueue(data) {
|
|
83
|
+
const { projectId } = data;
|
|
84
|
+
/*
|
|
85
|
+
* Budget quiet-skip at enqueue: when the daily budget is already
|
|
86
|
+
* exhausted there is no point recording intent that the TTL would
|
|
87
|
+
* expire anyway. Fails cheap (skip) like all the cost gates.
|
|
88
|
+
*/
|
|
89
|
+
try {
|
|
90
|
+
const budget = await AIService.getAutonomousDailyBudgetStatus(projectId);
|
|
91
|
+
if (budget.exhausted) {
|
|
92
|
+
logger.debug(`Sentinel: not enqueueing investigation for project ${projectId.toString()} — daily autonomous token budget exhausted (${budget.usedTokensToday} of ${budget.limitInTokens} tokens used today).`);
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
catch (error) {
|
|
97
|
+
logger.error(`Sentinel: budget check failed, not enqueueing investigation: ${error}`);
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
const run = new AIRun();
|
|
101
|
+
run.projectId = projectId;
|
|
102
|
+
run.runType = AIRunType.Investigation;
|
|
103
|
+
run.status = AIRunStatus.Queued;
|
|
104
|
+
if (data.subjectIncidentId) {
|
|
105
|
+
run.triggeredByIncidentId = data.subjectIncidentId;
|
|
106
|
+
}
|
|
107
|
+
if (data.subjectAlertId) {
|
|
108
|
+
run.triggeredByAlertId = data.subjectAlertId;
|
|
109
|
+
}
|
|
110
|
+
if (data.subjectMonitorId) {
|
|
111
|
+
run.monitorId = data.subjectMonitorId;
|
|
112
|
+
}
|
|
113
|
+
let createdRun;
|
|
114
|
+
try {
|
|
115
|
+
createdRun = await AIRunService.create({
|
|
116
|
+
data: run,
|
|
117
|
+
props: { isRoot: true },
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
catch (error) {
|
|
121
|
+
logger.error(`Sentinel: failed to enqueue investigation run: ${error}`);
|
|
122
|
+
return;
|
|
123
|
+
}
|
|
124
|
+
// Inline kick — preserves the 1-3 minute RCA latency on the happy path.
|
|
125
|
+
this.processRun({
|
|
126
|
+
id: createdRun.id,
|
|
127
|
+
projectId,
|
|
128
|
+
attemptCount: 0,
|
|
129
|
+
triggeredByIncidentId: data.subjectIncidentId,
|
|
130
|
+
triggeredByAlertId: data.subjectAlertId,
|
|
131
|
+
}).catch((error) => {
|
|
132
|
+
var _a;
|
|
133
|
+
logger.error(`Sentinel: inline processing of queued run ${(_a = createdRun.id) === null || _a === void 0 ? void 0 : _a.toString()} failed: ${error}`);
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
/*
|
|
137
|
+
* Claim a queued run and execute it to completion. Safe to call from
|
|
138
|
+
* multiple places concurrently — the claim is one conditional UPDATE, so
|
|
139
|
+
* exactly one caller wins. Leaves the run Queued (for the poller / TTL)
|
|
140
|
+
* when the concurrency cap is full or the budget is exhausted.
|
|
141
|
+
*/
|
|
142
|
+
static async processRun(run) {
|
|
143
|
+
try {
|
|
144
|
+
if (!(await this.passesClaimGates(run))) {
|
|
145
|
+
return;
|
|
146
|
+
}
|
|
147
|
+
const attempt = await this.claim(run);
|
|
148
|
+
if (attempt === null) {
|
|
149
|
+
return;
|
|
150
|
+
}
|
|
151
|
+
await this.dispatch(run, attempt);
|
|
152
|
+
}
|
|
153
|
+
catch (error) {
|
|
154
|
+
logger.error(`Sentinel: failed to process queued run ${run.id.toString()}: ${error}`);
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
/*
|
|
158
|
+
* One poller tick: expire runs that queued past their usefulness window,
|
|
159
|
+
* then claim a batch of the rest. Claims happen sequentially — each claim
|
|
160
|
+
* sets Running immediately, so the next iteration's concurrency-cap count
|
|
161
|
+
* sees it — but execution is detached so the tick finishes in seconds
|
|
162
|
+
* instead of holding the job open for the length of the investigations.
|
|
163
|
+
* Called every minute from Workers; also the recovery path for runs
|
|
164
|
+
* orphaned by pod restarts.
|
|
165
|
+
*/
|
|
166
|
+
static async processQueuedRuns() {
|
|
167
|
+
const expiryThreshold = OneUptimeDate.getSomeMinutesAgo(QUEUE_TTL_MINUTES);
|
|
168
|
+
const expiredRuns = await AIRunService.findBy({
|
|
169
|
+
query: {
|
|
170
|
+
runType: AIRunType.Investigation,
|
|
171
|
+
status: AIRunStatus.Queued,
|
|
172
|
+
createdAt: QueryHelper.lessThan(expiryThreshold),
|
|
173
|
+
},
|
|
174
|
+
select: { _id: true },
|
|
175
|
+
limit: 100,
|
|
176
|
+
skip: 0,
|
|
177
|
+
props: { isRoot: true },
|
|
178
|
+
});
|
|
179
|
+
for (const expired of expiredRuns) {
|
|
180
|
+
await AIRunService.attemptStatusTransition({
|
|
181
|
+
aiRunId: expired.id,
|
|
182
|
+
fromStatus: AIRunStatus.Queued,
|
|
183
|
+
set: {
|
|
184
|
+
status: AIRunStatus.Cancelled,
|
|
185
|
+
completedAt: OneUptimeDate.getCurrentDate(),
|
|
186
|
+
errorMessage: `Expired in the investigation queue after ${QUEUE_TTL_MINUTES} minutes — a first-pass analysis this late would no longer be useful. The project may have been at its concurrency cap or daily token budget.`,
|
|
187
|
+
},
|
|
188
|
+
});
|
|
189
|
+
}
|
|
190
|
+
const queuedRuns = await AIRunService.findBy({
|
|
191
|
+
query: {
|
|
192
|
+
runType: AIRunType.Investigation,
|
|
193
|
+
status: AIRunStatus.Queued,
|
|
194
|
+
},
|
|
195
|
+
select: {
|
|
196
|
+
_id: true,
|
|
197
|
+
projectId: true,
|
|
198
|
+
attemptCount: true,
|
|
199
|
+
triggeredByIncidentId: true,
|
|
200
|
+
triggeredByAlertId: true,
|
|
201
|
+
},
|
|
202
|
+
sort: { createdAt: SortOrder.Ascending },
|
|
203
|
+
limit: POLLER_BATCH_SIZE,
|
|
204
|
+
skip: 0,
|
|
205
|
+
props: { isRoot: true },
|
|
206
|
+
});
|
|
207
|
+
for (const queued of queuedRuns) {
|
|
208
|
+
const ref = {
|
|
209
|
+
id: queued.id,
|
|
210
|
+
projectId: queued.projectId,
|
|
211
|
+
attemptCount: queued.attemptCount || 0,
|
|
212
|
+
triggeredByIncidentId: queued.triggeredByIncidentId,
|
|
213
|
+
triggeredByAlertId: queued.triggeredByAlertId,
|
|
214
|
+
};
|
|
215
|
+
try {
|
|
216
|
+
if (!(await this.passesClaimGates(ref))) {
|
|
217
|
+
continue;
|
|
218
|
+
}
|
|
219
|
+
const attempt = await this.claim(ref);
|
|
220
|
+
if (attempt === null) {
|
|
221
|
+
continue;
|
|
222
|
+
}
|
|
223
|
+
/*
|
|
224
|
+
* Execute detached — the run is claimed (Running + heartbeat), so
|
|
225
|
+
* the sweeper owns recovery if this pod dies mid-flight.
|
|
226
|
+
*/
|
|
227
|
+
this.dispatch(ref, attempt).catch((error) => {
|
|
228
|
+
logger.error(`Sentinel: detached execution of run ${ref.id.toString()} failed: ${error}`);
|
|
229
|
+
});
|
|
230
|
+
}
|
|
231
|
+
catch (error) {
|
|
232
|
+
logger.error(`Sentinel: poller failed on queued run ${ref.id.toString()}: ${error}`);
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
/*
|
|
237
|
+
* Finalize a failed attempt: requeue transient failures while attempts
|
|
238
|
+
* remain, otherwise mark the run Error. The transition guards on Running
|
|
239
|
+
* so a run that already completed (e.g. only postAnalysis failed) is
|
|
240
|
+
* never clobbered or re-run.
|
|
241
|
+
*/
|
|
242
|
+
static async failOrRequeue(data) {
|
|
243
|
+
const truncatedMessage = data.errorMessage.substring(0, 400);
|
|
244
|
+
if (!data.isPermanent && data.attemptCount < MAX_INVESTIGATION_ATTEMPTS) {
|
|
245
|
+
const requeued = await AIRunService.attemptStatusTransition({
|
|
246
|
+
aiRunId: data.aiRunId,
|
|
247
|
+
fromStatus: AIRunStatus.Running,
|
|
248
|
+
set: {
|
|
249
|
+
status: AIRunStatus.Queued,
|
|
250
|
+
errorMessage: `Attempt ${data.attemptCount} failed and the run was requeued: ${truncatedMessage}`,
|
|
251
|
+
},
|
|
252
|
+
});
|
|
253
|
+
if (requeued > 0) {
|
|
254
|
+
logger.debug(`Sentinel: requeued run ${data.aiRunId.toString()} after attempt ${data.attemptCount} failed.`);
|
|
255
|
+
}
|
|
256
|
+
return;
|
|
257
|
+
}
|
|
258
|
+
await AIRunService.attemptStatusTransition({
|
|
259
|
+
aiRunId: data.aiRunId,
|
|
260
|
+
fromStatus: AIRunStatus.Running,
|
|
261
|
+
set: {
|
|
262
|
+
status: AIRunStatus.Error,
|
|
263
|
+
completedAt: OneUptimeDate.getCurrentDate(),
|
|
264
|
+
errorMessage: truncatedMessage,
|
|
265
|
+
},
|
|
266
|
+
});
|
|
267
|
+
}
|
|
268
|
+
/*
|
|
269
|
+
* Called by the stale-run sweeper for an Investigation run whose
|
|
270
|
+
* heartbeat went silent (the pod running it died). Requeues while
|
|
271
|
+
* attempts remain; otherwise marks it Stale as before.
|
|
272
|
+
*/
|
|
273
|
+
static async requeueOrMarkStale(run) {
|
|
274
|
+
if ((run.attemptCount || 0) < MAX_INVESTIGATION_ATTEMPTS) {
|
|
275
|
+
const requeued = await AIRunService.attemptStatusTransition({
|
|
276
|
+
aiRunId: run.id,
|
|
277
|
+
fromStatus: AIRunStatus.Running,
|
|
278
|
+
set: {
|
|
279
|
+
status: AIRunStatus.Queued,
|
|
280
|
+
errorMessage: `Attempt ${run.attemptCount} stopped reporting progress (the server processing it may have restarted) and the run was requeued.`,
|
|
281
|
+
},
|
|
282
|
+
});
|
|
283
|
+
if (requeued > 0) {
|
|
284
|
+
return "requeued";
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
await AIRunService.attemptStatusTransition({
|
|
288
|
+
aiRunId: run.id,
|
|
289
|
+
fromStatus: AIRunStatus.Running,
|
|
290
|
+
set: {
|
|
291
|
+
status: AIRunStatus.Stale,
|
|
292
|
+
completedAt: OneUptimeDate.getCurrentDate(),
|
|
293
|
+
errorMessage: "The run stopped reporting progress and was marked as stale after exhausting its retry attempts. The server processing it may have restarted.",
|
|
294
|
+
},
|
|
295
|
+
});
|
|
296
|
+
return "stale";
|
|
297
|
+
}
|
|
298
|
+
/*
|
|
299
|
+
* The claim-time cost gates: concurrency cap and daily budget. A run
|
|
300
|
+
* failing these stays Queued — the poller retries and the TTL expires
|
|
301
|
+
* what never fits. Fails cheap (skip) on gate errors.
|
|
302
|
+
*/
|
|
303
|
+
static async passesClaimGates(run) {
|
|
304
|
+
var _a;
|
|
305
|
+
// Per-project cap override, defaulting to 3 and clamped to [1, 25].
|
|
306
|
+
const project = await ProjectService.findOneById({
|
|
307
|
+
id: run.projectId,
|
|
308
|
+
select: { aiMaxConcurrentInvestigations: true },
|
|
309
|
+
props: { isRoot: true },
|
|
310
|
+
});
|
|
311
|
+
const concurrencyCap = Math.min(MAX_CONCURRENT_INVESTIGATIONS, Math.max(MIN_CONCURRENT_INVESTIGATIONS, (_a = project === null || project === void 0 ? void 0 : project.aiMaxConcurrentInvestigations) !== null && _a !== void 0 ? _a : DEFAULT_MAX_CONCURRENT_INVESTIGATIONS));
|
|
312
|
+
const runningCount = (await AIRunService.countBy({
|
|
313
|
+
query: {
|
|
314
|
+
projectId: run.projectId,
|
|
315
|
+
runType: AIRunType.Investigation,
|
|
316
|
+
status: AIRunStatus.Running,
|
|
317
|
+
},
|
|
318
|
+
props: { isRoot: true },
|
|
319
|
+
})).toNumber();
|
|
320
|
+
if (runningCount >= concurrencyCap) {
|
|
321
|
+
logger.debug(`Sentinel: leaving run ${run.id.toString()} queued — ${runningCount} investigations already running (cap: ${concurrencyCap}).`);
|
|
322
|
+
return false;
|
|
323
|
+
}
|
|
324
|
+
const budget = await AIService.getAutonomousDailyBudgetStatus(run.projectId);
|
|
325
|
+
if (budget.exhausted) {
|
|
326
|
+
logger.debug(`Sentinel: leaving run ${run.id.toString()} queued — daily autonomous token budget exhausted.`);
|
|
327
|
+
return false;
|
|
328
|
+
}
|
|
329
|
+
return true;
|
|
330
|
+
}
|
|
331
|
+
/*
|
|
332
|
+
* The atomic claim: Queued -> Running, guarded on the attemptCount the
|
|
333
|
+
* caller observed, so a stale queue snapshot can neither double-claim
|
|
334
|
+
* nor reset the attempt numbering. Returns the claimed attempt number,
|
|
335
|
+
* or null when another actor won.
|
|
336
|
+
*/
|
|
337
|
+
static async claim(run) {
|
|
338
|
+
const attempt = (run.attemptCount || 0) + 1;
|
|
339
|
+
const claimedCount = await AIRunService.attemptStatusTransition({
|
|
340
|
+
aiRunId: run.id,
|
|
341
|
+
fromStatus: AIRunStatus.Queued,
|
|
342
|
+
expectedAttemptCount: run.attemptCount || 0,
|
|
343
|
+
set: {
|
|
344
|
+
status: AIRunStatus.Running,
|
|
345
|
+
startedAt: OneUptimeDate.getCurrentDate(),
|
|
346
|
+
lastHeartbeatAt: OneUptimeDate.getCurrentDate(),
|
|
347
|
+
attemptCount: attempt,
|
|
348
|
+
},
|
|
349
|
+
});
|
|
350
|
+
if (claimedCount === 0) {
|
|
351
|
+
return null;
|
|
352
|
+
}
|
|
353
|
+
return attempt;
|
|
354
|
+
}
|
|
355
|
+
// Route a claimed run to its subject's executor.
|
|
356
|
+
static async dispatch(run, attempt) {
|
|
357
|
+
if (run.triggeredByIncidentId) {
|
|
358
|
+
/*
|
|
359
|
+
* Lazy require: the runners import this queue to enqueue, so a
|
|
360
|
+
* top-level import here would be circular at module-init time
|
|
361
|
+
* (same pattern as DatabaseService -> AuditLogService).
|
|
362
|
+
*/
|
|
363
|
+
const incidentRunner =
|
|
364
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports, @typescript-eslint/no-var-requires
|
|
365
|
+
require("./IncidentInvestigationRunner").default;
|
|
366
|
+
await incidentRunner.executeInvestigation({
|
|
367
|
+
aiRunId: run.id,
|
|
368
|
+
projectId: run.projectId,
|
|
369
|
+
incidentId: run.triggeredByIncidentId,
|
|
370
|
+
attemptCount: attempt,
|
|
371
|
+
});
|
|
372
|
+
return;
|
|
373
|
+
}
|
|
374
|
+
if (run.triggeredByAlertId) {
|
|
375
|
+
const alertRunner =
|
|
376
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports, @typescript-eslint/no-var-requires
|
|
377
|
+
require("./AlertInvestigationRunner").default;
|
|
378
|
+
await alertRunner.executeInvestigation({
|
|
379
|
+
aiRunId: run.id,
|
|
380
|
+
projectId: run.projectId,
|
|
381
|
+
alertId: run.triggeredByAlertId,
|
|
382
|
+
attemptCount: attempt,
|
|
383
|
+
});
|
|
384
|
+
return;
|
|
385
|
+
}
|
|
386
|
+
// A queued investigation without a subject cannot be executed.
|
|
387
|
+
await AIRunService.attemptStatusTransition({
|
|
388
|
+
aiRunId: run.id,
|
|
389
|
+
fromStatus: AIRunStatus.Running,
|
|
390
|
+
set: {
|
|
391
|
+
status: AIRunStatus.Error,
|
|
392
|
+
completedAt: OneUptimeDate.getCurrentDate(),
|
|
393
|
+
errorMessage: "Queued investigation has no subject to investigate.",
|
|
394
|
+
},
|
|
395
|
+
});
|
|
396
|
+
}
|
|
397
|
+
}
|
|
398
|
+
__decorate([
|
|
399
|
+
CaptureSpan(),
|
|
400
|
+
__metadata("design:type", Function),
|
|
401
|
+
__metadata("design:paramtypes", [Object]),
|
|
402
|
+
__metadata("design:returntype", Promise)
|
|
403
|
+
], SentinelInvestigationQueue, "enqueue", null);
|
|
404
|
+
__decorate([
|
|
405
|
+
CaptureSpan(),
|
|
406
|
+
__metadata("design:type", Function),
|
|
407
|
+
__metadata("design:paramtypes", [Object]),
|
|
408
|
+
__metadata("design:returntype", Promise)
|
|
409
|
+
], SentinelInvestigationQueue, "processRun", null);
|
|
410
|
+
__decorate([
|
|
411
|
+
CaptureSpan(),
|
|
412
|
+
__metadata("design:type", Function),
|
|
413
|
+
__metadata("design:paramtypes", []),
|
|
414
|
+
__metadata("design:returntype", Promise)
|
|
415
|
+
], SentinelInvestigationQueue, "processQueuedRuns", null);
|
|
416
|
+
__decorate([
|
|
417
|
+
CaptureSpan(),
|
|
418
|
+
__metadata("design:type", Function),
|
|
419
|
+
__metadata("design:paramtypes", [Object]),
|
|
420
|
+
__metadata("design:returntype", Promise)
|
|
421
|
+
], SentinelInvestigationQueue, "failOrRequeue", null);
|
|
422
|
+
__decorate([
|
|
423
|
+
CaptureSpan(),
|
|
424
|
+
__metadata("design:type", Function),
|
|
425
|
+
__metadata("design:paramtypes", [Object]),
|
|
426
|
+
__metadata("design:returntype", Promise)
|
|
427
|
+
], SentinelInvestigationQueue, "requeueOrMarkStale", null);
|
|
428
|
+
//# sourceMappingURL=InvestigationQueue.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InvestigationQueue.js","sourceRoot":"","sources":["../../../../../../Server/Utils/AI/Sentinel/InvestigationQueue.ts"],"names":[],"mappings":"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"}
|