@oneuptime/common 11.4.1 → 11.5.0
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 +24 -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/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 +24 -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/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
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import DatabaseService from "./DatabaseService";
|
|
2
|
+
import Model from "../../Models/DatabaseModels/NetworkDeviceOwnerUser";
|
|
3
|
+
export class Service extends DatabaseService {
|
|
4
|
+
constructor() {
|
|
5
|
+
super(Model);
|
|
6
|
+
}
|
|
7
|
+
}
|
|
8
|
+
export default new Service();
|
|
9
|
+
//# sourceMappingURL=NetworkDeviceOwnerUserService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NetworkDeviceOwnerUserService.js","sourceRoot":"","sources":["../../../../Server/Services/NetworkDeviceOwnerUserService.ts"],"names":[],"mappings":"AAAA,OAAO,eAAe,MAAM,mBAAmB,CAAC;AAChD,OAAO,KAAK,MAAM,oDAAoD,CAAC;AAEvE,MAAM,OAAO,OAAQ,SAAQ,eAAsB;IACjD;QACE,KAAK,CAAC,KAAK,CAAC,CAAC;IACf,CAAC;CACF;AAED,eAAe,IAAI,OAAO,EAAE,CAAC"}
|
|
@@ -0,0 +1,52 @@
|
|
|
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 DatabaseService from "./DatabaseService";
|
|
11
|
+
import NetworkDeviceLabelRuleEngineService from "./NetworkDeviceLabelRuleEngineService";
|
|
12
|
+
import NetworkDeviceOwnerRuleEngineService from "./NetworkDeviceOwnerRuleEngineService";
|
|
13
|
+
import Model from "../../Models/DatabaseModels/NetworkDevice";
|
|
14
|
+
import CaptureSpan from "../Utils/Telemetry/CaptureSpan";
|
|
15
|
+
import logger from "../Utils/Logger";
|
|
16
|
+
export class Service extends DatabaseService {
|
|
17
|
+
constructor() {
|
|
18
|
+
super(Model);
|
|
19
|
+
}
|
|
20
|
+
/*
|
|
21
|
+
* Owner/label rules fire whenever a device is created — manually or via
|
|
22
|
+
* subnet discovery import. Applied out-of-band: rule failures must never
|
|
23
|
+
* fail device creation.
|
|
24
|
+
*/
|
|
25
|
+
async onCreateSuccess(_onCreate, createdItem) {
|
|
26
|
+
if (createdItem.projectId && createdItem.id) {
|
|
27
|
+
Promise.resolve()
|
|
28
|
+
.then(async () => {
|
|
29
|
+
await NetworkDeviceLabelRuleEngineService.applyRulesToNetworkDevice(createdItem);
|
|
30
|
+
})
|
|
31
|
+
.then(async () => {
|
|
32
|
+
await NetworkDeviceOwnerRuleEngineService.applyRulesToNetworkDevice(createdItem);
|
|
33
|
+
})
|
|
34
|
+
.catch((error) => {
|
|
35
|
+
var _a, _b;
|
|
36
|
+
logger.error(`Error applying network device rules in NetworkDeviceService.onCreateSuccess: ${error}`, {
|
|
37
|
+
projectId: (_a = createdItem.projectId) === null || _a === void 0 ? void 0 : _a.toString(),
|
|
38
|
+
networkDeviceId: (_b = createdItem.id) === null || _b === void 0 ? void 0 : _b.toString(),
|
|
39
|
+
});
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
return createdItem;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
__decorate([
|
|
46
|
+
CaptureSpan(),
|
|
47
|
+
__metadata("design:type", Function),
|
|
48
|
+
__metadata("design:paramtypes", [Object, Model]),
|
|
49
|
+
__metadata("design:returntype", Promise)
|
|
50
|
+
], Service.prototype, "onCreateSuccess", null);
|
|
51
|
+
export default new Service();
|
|
52
|
+
//# sourceMappingURL=NetworkDeviceService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NetworkDeviceService.js","sourceRoot":"","sources":["../../../../Server/Services/NetworkDeviceService.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,eAAe,MAAM,mBAAmB,CAAC;AAChD,OAAO,mCAAmC,MAAM,uCAAuC,CAAC;AACxF,OAAO,mCAAmC,MAAM,uCAAuC,CAAC;AACxF,OAAO,KAAK,MAAM,2CAA2C,CAAC;AAE9D,OAAO,WAAW,MAAM,gCAAgC,CAAC;AACzD,OAAO,MAAyB,MAAM,iBAAiB,CAAC;AAExD,MAAM,OAAO,OAAQ,SAAQ,eAAsB;IACjD;QACE,KAAK,CAAC,KAAK,CAAC,CAAC;IACf,CAAC;IAED;;;;OAIG;IAEsB,AAAN,KAAK,CAAC,eAAe,CACtC,SAA0B,EAC1B,WAAkB;QAElB,IAAI,WAAW,CAAC,SAAS,IAAI,WAAW,CAAC,EAAE,EAAE,CAAC;YAC5C,OAAO,CAAC,OAAO,EAAE;iBACd,IAAI,CAAC,KAAK,IAAI,EAAE;gBACf,MAAM,mCAAmC,CAAC,yBAAyB,CACjE,WAAW,CACZ,CAAC;YACJ,CAAC,CAAC;iBACD,IAAI,CAAC,KAAK,IAAI,EAAE;gBACf,MAAM,mCAAmC,CAAC,yBAAyB,CACjE,WAAW,CACZ,CAAC;YACJ,CAAC,CAAC;iBACD,KAAK,CAAC,CAAC,KAAY,EAAE,EAAE;;gBACtB,MAAM,CAAC,KAAK,CACV,gFAAgF,KAAK,EAAE,EACvF;oBACE,SAAS,EAAE,MAAA,WAAW,CAAC,SAAS,0CAAE,QAAQ,EAAE;oBAC5C,eAAe,EAAE,MAAA,WAAW,CAAC,EAAE,0CAAE,QAAQ,EAAE;iBAC3B,CACnB,CAAC;YACJ,CAAC,CAAC,CAAC;QACP,CAAC;QACD,OAAO,WAAW,CAAC;IACrB,CAAC;CACF;AA5B0B;IADxB,WAAW,EAAE;;6CAGC,KAAK;;8CAyBnB;AAGH,eAAe,IAAI,OAAO,EAAE,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import DatabaseService from "./DatabaseService";
|
|
2
|
+
import Model from "../../Models/DatabaseModels/NetworkInterface";
|
|
3
|
+
export class Service extends DatabaseService {
|
|
4
|
+
constructor() {
|
|
5
|
+
super(Model);
|
|
6
|
+
}
|
|
7
|
+
}
|
|
8
|
+
export default new Service();
|
|
9
|
+
//# sourceMappingURL=NetworkInterfaceService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NetworkInterfaceService.js","sourceRoot":"","sources":["../../../../Server/Services/NetworkInterfaceService.ts"],"names":[],"mappings":"AAAA,OAAO,eAAe,MAAM,mBAAmB,CAAC;AAChD,OAAO,KAAK,MAAM,8CAA8C,CAAC;AAEjE,MAAM,OAAO,OAAQ,SAAQ,eAAsB;IACjD;QACE,KAAK,CAAC,KAAK,CAAC,CAAC;IACf,CAAC;CACF;AAED,eAAe,IAAI,OAAO,EAAE,CAAC"}
|
|
@@ -57,8 +57,30 @@ export class TelemetryEntityRelationshipService extends DatabaseService {
|
|
|
57
57
|
model.relationshipType = edge.relationshipType;
|
|
58
58
|
model.firstSeenAt = now;
|
|
59
59
|
model.lastSeenAt = now;
|
|
60
|
+
if (edge.metrics) {
|
|
61
|
+
model.callCount = edge.metrics.callCount;
|
|
62
|
+
model.errorCount = edge.metrics.errorCount;
|
|
63
|
+
model.avgDurationMs = edge.metrics.avgDurationMs;
|
|
64
|
+
}
|
|
60
65
|
return model;
|
|
61
66
|
},
|
|
67
|
+
/*
|
|
68
|
+
* Metrics describe the latest window only, so each bump replaces
|
|
69
|
+
* them wholesale. Metric-less edges (co-occurrence) keep whatever
|
|
70
|
+
* is stored — always null for them. Cast like the scaffold's own
|
|
71
|
+
* buildBump: checking the literal against the unresolved mapped
|
|
72
|
+
* type trips TS2589 on this model.
|
|
73
|
+
*/
|
|
74
|
+
buildUpdate: () => {
|
|
75
|
+
if (!edge.metrics) {
|
|
76
|
+
return {};
|
|
77
|
+
}
|
|
78
|
+
return {
|
|
79
|
+
callCount: edge.metrics.callCount,
|
|
80
|
+
errorCount: edge.metrics.errorCount,
|
|
81
|
+
avgDurationMs: edge.metrics.avgDurationMs,
|
|
82
|
+
};
|
|
83
|
+
},
|
|
62
84
|
});
|
|
63
85
|
}
|
|
64
86
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TelemetryEntityRelationshipService.js","sourceRoot":"","sources":["../../../../Server/Services/TelemetryEntityRelationshipService.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,eAAe,MAAM,mBAAmB,CAAC;AAChD,OAAO,KAAK,MAAM,yDAAyD,CAAC;AAE5E,OAAO,aAAa,MAAM,kBAAkB,CAAC;AAC7C,OAAO,MAAM,MAAM,iBAAiB,CAAC;AACrC,OAAO,WAAW,MAAM,gCAAgC,CAAC;AAEzD,OAAO,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;
|
|
1
|
+
{"version":3,"file":"TelemetryEntityRelationshipService.js","sourceRoot":"","sources":["../../../../Server/Services/TelemetryEntityRelationshipService.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,8 +9,13 @@ var __metadata = (this && this.__metadata) || function (k, v) {
|
|
|
9
9
|
};
|
|
10
10
|
import DatabaseService from "./DatabaseService";
|
|
11
11
|
import Model from "../../Models/DatabaseModels/TelemetryEntity";
|
|
12
|
+
import ServiceService from "./ServiceService";
|
|
13
|
+
import QueryHelper from "../Types/Database/QueryHelper";
|
|
14
|
+
import SortOrder from "../../Types/BaseDatabase/SortOrder";
|
|
15
|
+
import ObjectID from "../../Types/ObjectID";
|
|
12
16
|
import OneUptimeDate from "../../Types/Date";
|
|
13
17
|
import ColumnLength from "../../Types/Database/ColumnLength";
|
|
18
|
+
import EntityType from "../../Types/Telemetry/EntityType";
|
|
14
19
|
import logger from "../Utils/Logger";
|
|
15
20
|
import CaptureSpan from "../Utils/Telemetry/CaptureSpan";
|
|
16
21
|
import { getEntityBudget, reconcileByNaturalKey, REGISTRY_PROMOTED_TYPES, shouldWarnEntityBudgetOnce, } from "../Utils/Telemetry/EntityRegistry";
|
|
@@ -58,9 +63,50 @@ export class TelemetryEntityService extends DatabaseService {
|
|
|
58
63
|
}
|
|
59
64
|
}
|
|
60
65
|
}
|
|
66
|
+
/**
|
|
67
|
+
* The polymorphic (resourceType, resourceId) pointer for Service
|
|
68
|
+
* entities: resolve the backing Service row by name (case-insensitive —
|
|
69
|
+
* entity display names are canonicalized to lowercase while Service
|
|
70
|
+
* rows keep their original casing, the same matching ingest itself
|
|
71
|
+
* uses). This is the single place the name join happens; everything
|
|
72
|
+
* downstream (traces links, overlays) reads the pointer instead of
|
|
73
|
+
* re-matching names. Best-effort: no Service row means no pointer.
|
|
74
|
+
*/
|
|
75
|
+
async resolveServiceResourceId(data) {
|
|
76
|
+
if (data.entity.entityType !== EntityType.Service) {
|
|
77
|
+
return null;
|
|
78
|
+
}
|
|
79
|
+
const name = TelemetryEntityService.deriveDisplayName(data.entity);
|
|
80
|
+
if (!name) {
|
|
81
|
+
return null;
|
|
82
|
+
}
|
|
83
|
+
try {
|
|
84
|
+
/*
|
|
85
|
+
* createdAt ASC mirrors ingest's findOrCreateTelemetryService: if
|
|
86
|
+
* case-variant duplicate Service rows exist, telemetry keys to the
|
|
87
|
+
* OLDEST row, so the pointer must resolve to the same one.
|
|
88
|
+
*/
|
|
89
|
+
const service = await ServiceService.findOneBy({
|
|
90
|
+
query: {
|
|
91
|
+
projectId: data.projectId,
|
|
92
|
+
name: QueryHelper.findWithSameText(name),
|
|
93
|
+
},
|
|
94
|
+
select: { _id: true },
|
|
95
|
+
sort: { createdAt: SortOrder.Ascending },
|
|
96
|
+
props: { isRoot: true },
|
|
97
|
+
});
|
|
98
|
+
return (service === null || service === void 0 ? void 0 : service._id) ? new ObjectID(service._id.toString()) : null;
|
|
99
|
+
}
|
|
100
|
+
catch (err) {
|
|
101
|
+
logger.error(`TelemetryEntityService: failed to resolve Service row for entity name "${name}":`);
|
|
102
|
+
logger.error(err);
|
|
103
|
+
return null;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
61
106
|
async upsertEntity(data) {
|
|
62
107
|
const { projectId, entity, countByType } = data;
|
|
63
108
|
const now = OneUptimeDate.getCurrentDate();
|
|
109
|
+
const serviceResourceId = await this.resolveServiceResourceId({ projectId, entity });
|
|
64
110
|
await reconcileByNaturalKey({
|
|
65
111
|
service: this,
|
|
66
112
|
query: {
|
|
@@ -70,9 +116,21 @@ export class TelemetryEntityService extends DatabaseService {
|
|
|
70
116
|
},
|
|
71
117
|
lastSeenAt: now,
|
|
72
118
|
describe: `entity ${entity.entityType}/${entity.entityKey}`,
|
|
73
|
-
select: { descriptiveAttributes: true, labels: true },
|
|
119
|
+
select: { descriptiveAttributes: true, labels: true, resourceId: true },
|
|
74
120
|
buildUpdate: (existing) => {
|
|
75
|
-
|
|
121
|
+
var _a;
|
|
122
|
+
const update = TelemetryEntityService.buildDescriptiveUpdate(entity, existing);
|
|
123
|
+
/*
|
|
124
|
+
* Stamp / refresh the pointer on the throttled bump too, so
|
|
125
|
+
* pre-existing rows converge and a deleted+recreated Service
|
|
126
|
+
* (new id, same name) heals instead of pointing at a dead row.
|
|
127
|
+
*/
|
|
128
|
+
if (serviceResourceId &&
|
|
129
|
+
((_a = existing.resourceId) === null || _a === void 0 ? void 0 : _a.toString()) !== serviceResourceId.toString()) {
|
|
130
|
+
update.resourceType = "Service";
|
|
131
|
+
update.resourceId = serviceResourceId;
|
|
132
|
+
}
|
|
133
|
+
return update;
|
|
76
134
|
},
|
|
77
135
|
/*
|
|
78
136
|
* Entity budget (doc §Edge Cases): existing rows always get their
|
|
@@ -117,6 +175,10 @@ export class TelemetryEntityService extends DatabaseService {
|
|
|
117
175
|
}
|
|
118
176
|
// varchar(ShortText) column; k8s names can run to 253 chars.
|
|
119
177
|
model.displayName = TelemetryEntityService.deriveDisplayName(entity).substring(0, ColumnLength.ShortText);
|
|
178
|
+
if (serviceResourceId) {
|
|
179
|
+
model.resourceType = "Service";
|
|
180
|
+
model.resourceId = serviceResourceId;
|
|
181
|
+
}
|
|
120
182
|
model.firstSeenAt = now;
|
|
121
183
|
model.lastSeenAt = now;
|
|
122
184
|
return model;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TelemetryEntityService.js","sourceRoot":"","sources":["../../../../Server/Services/TelemetryEntityService.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,eAAe,MAAM,mBAAmB,CAAC;AAChD,OAAO,KAAK,MAAM,6CAA6C,CAAC;AAEhE,OAAO,aAAa,MAAM,kBAAkB,CAAC;AAC7C,OAAO,YAAY,MAAM,mCAAmC,CAAC;
|
|
1
|
+
{"version":3,"file":"TelemetryEntityService.js","sourceRoot":"","sources":["../../../../Server/Services/TelemetryEntityService.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,11 +8,19 @@ var __metadata = (this && this.__metadata) || function (k, v) {
|
|
|
8
8
|
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
9
9
|
};
|
|
10
10
|
import OneUptimeDate from "../../../../Types/Date";
|
|
11
|
+
import SortOrder from "../../../../Types/BaseDatabase/SortOrder";
|
|
12
|
+
import AIRunType from "../../../../Types/AI/AIRunType";
|
|
11
13
|
import { Blue500 } from "../../../../Types/BrandColors";
|
|
12
14
|
import { AlertFeedEventType } from "../../../../Models/DatabaseModels/AlertFeed";
|
|
15
|
+
import AlertService from "../../../Services/AlertService";
|
|
16
|
+
import AlertSeverityService from "../../../Services/AlertSeverityService";
|
|
17
|
+
import ProjectService from "../../../Services/ProjectService";
|
|
18
|
+
import AIRunService from "../../../Services/AIRunService";
|
|
13
19
|
import AlertFeedService from "../../../Services/AlertFeedService";
|
|
20
|
+
import QueryHelper from "../../../Types/Database/QueryHelper";
|
|
14
21
|
import AlertAIContextBuilder from "../AlertAIContextBuilder";
|
|
15
22
|
import SentinelInvestigationEngine from "./SentinelInvestigationEngine";
|
|
23
|
+
import SentinelInvestigationQueue from "./InvestigationQueue";
|
|
16
24
|
import logger from "../../Logger";
|
|
17
25
|
import CaptureSpan from "../../Telemetry/CaptureSpan";
|
|
18
26
|
/*
|
|
@@ -23,13 +31,23 @@ import CaptureSpan from "../../Telemetry/CaptureSpan";
|
|
|
23
31
|
* the alert timeline + Slack/Teams. Symmetric to incident investigation and
|
|
24
32
|
* built on the same shared SentinelInvestigationEngine.
|
|
25
33
|
*
|
|
26
|
-
* Gated by the same per-project opt-in as incidents
|
|
27
|
-
*
|
|
34
|
+
* Gated by the same per-project opt-in as incidents, PLUS alert-specific cost
|
|
35
|
+
* gates (alert volume can be far higher than incidents):
|
|
36
|
+
* - severity floor: only alerts at or above the project's configured minimum
|
|
37
|
+
* severity are investigated; when unset, the top two severity tiers
|
|
38
|
+
* (lowest two `order` values) are the default.
|
|
39
|
+
* - per-monitor dedupe window: a monitor that already triggered an
|
|
40
|
+
* investigation recently is not re-investigated — the first RCA stands.
|
|
28
41
|
*/
|
|
42
|
+
// Per-project override lives in Project.alertInvestigationDedupeWindowMinutes.
|
|
43
|
+
export const DEFAULT_DEDUPE_WINDOW_MINUTES = 30;
|
|
44
|
+
// Clamp: an RCA older than a day is a new episode by any reading.
|
|
45
|
+
const MAX_DEDUPE_WINDOW_MINUTES = 24 * 60;
|
|
29
46
|
export default class SentinelAlertInvestigationRunner {
|
|
30
47
|
/*
|
|
31
48
|
* Entry point called (fire-and-forget) from AlertService.onCreateSuccess.
|
|
32
|
-
*
|
|
49
|
+
* Cheap: gates + a Queued AIRun row; execution happens via the queue.
|
|
50
|
+
* Never throws — all failures are logged.
|
|
33
51
|
*/
|
|
34
52
|
static async investigateNewAlert(data) {
|
|
35
53
|
const { alertId, projectId } = data;
|
|
@@ -37,14 +55,59 @@ export default class SentinelAlertInvestigationRunner {
|
|
|
37
55
|
if (!(await SentinelInvestigationEngine.isEnabledForProject(projectId, "Alert"))) {
|
|
38
56
|
return;
|
|
39
57
|
}
|
|
40
|
-
const
|
|
58
|
+
const gate = await this.shouldInvestigateAlert({
|
|
41
59
|
alertId,
|
|
60
|
+
projectId,
|
|
42
61
|
});
|
|
43
|
-
|
|
62
|
+
if (!gate.investigate) {
|
|
63
|
+
logger.debug(`Sentinel: skipping investigation for alert ${alertId.toString()} — ${gate.reason}.`);
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
await SentinelInvestigationQueue.enqueue({
|
|
44
67
|
projectId,
|
|
45
|
-
feature: "Sentinel Alert Investigation",
|
|
46
68
|
subjectAlertId: alertId,
|
|
47
|
-
|
|
69
|
+
subjectMonitorId: gate.monitorId,
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
catch (error) {
|
|
73
|
+
logger.error(`Sentinel: unexpected error enqueueing investigation for alert ${alertId.toString()}: ${error}`);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
/*
|
|
77
|
+
* Execute a claimed run: assemble alert context and hand it to the engine.
|
|
78
|
+
* Called by SentinelInvestigationQueue after a successful claim. Never
|
|
79
|
+
* throws — failures are handed to the queue's retry policy so a claimed
|
|
80
|
+
* run is always finalized or requeued.
|
|
81
|
+
*/
|
|
82
|
+
static async executeInvestigation(data) {
|
|
83
|
+
const { aiRunId, projectId, alertId, attemptCount } = data;
|
|
84
|
+
let contextSummary;
|
|
85
|
+
try {
|
|
86
|
+
const contextData = await AlertAIContextBuilder.buildAlertContext({
|
|
87
|
+
alertId,
|
|
88
|
+
});
|
|
89
|
+
contextSummary = this.buildAlertSummary(contextData);
|
|
90
|
+
}
|
|
91
|
+
catch (error) {
|
|
92
|
+
/*
|
|
93
|
+
* Context assembly failed — the run is claimed, so hand it to the
|
|
94
|
+
* retry policy rather than leaving it Running until the sweeper.
|
|
95
|
+
*/
|
|
96
|
+
await SentinelInvestigationQueue.failOrRequeue({
|
|
97
|
+
aiRunId,
|
|
98
|
+
attemptCount,
|
|
99
|
+
errorMessage: `Failed to build alert context: ${error instanceof Error ? error.message : String(error)}`,
|
|
100
|
+
isPermanent: false,
|
|
101
|
+
});
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
await SentinelInvestigationEngine.executeRun({
|
|
105
|
+
aiRunId,
|
|
106
|
+
projectId,
|
|
107
|
+
attemptCount,
|
|
108
|
+
request: {
|
|
109
|
+
feature: "Sentinel Alert Investigation",
|
|
110
|
+
contextSummary,
|
|
48
111
|
postAnalysis: async (postData) => {
|
|
49
112
|
await AlertFeedService.createAlertFeedItem({
|
|
50
113
|
alertId,
|
|
@@ -61,11 +124,116 @@ export default class SentinelAlertInvestigationRunner {
|
|
|
61
124
|
},
|
|
62
125
|
});
|
|
63
126
|
},
|
|
127
|
+
},
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
/*
|
|
131
|
+
* The alert-specific cost gates, evaluated BEFORE the expensive context
|
|
132
|
+
* build. Severity first (cheapest to reason about), then the per-monitor
|
|
133
|
+
* dedupe window. The severity gate only filters KNOWN-low-severity noise:
|
|
134
|
+
* an alert whose severity order cannot be determined passes it.
|
|
135
|
+
*/
|
|
136
|
+
static async shouldInvestigateAlert(data) {
|
|
137
|
+
var _a, _b;
|
|
138
|
+
const { alertId, projectId } = data;
|
|
139
|
+
const alert = await AlertService.findOneById({
|
|
140
|
+
id: alertId,
|
|
141
|
+
select: {
|
|
142
|
+
monitorId: true,
|
|
143
|
+
alertSeverity: {
|
|
144
|
+
order: true,
|
|
145
|
+
},
|
|
146
|
+
},
|
|
147
|
+
props: { isRoot: true },
|
|
148
|
+
});
|
|
149
|
+
if (!alert) {
|
|
150
|
+
return { investigate: false, reason: "alert not found" };
|
|
151
|
+
}
|
|
152
|
+
// One project read serves both the severity floor and the dedupe window.
|
|
153
|
+
const project = await ProjectService.findOneById({
|
|
154
|
+
id: projectId,
|
|
155
|
+
select: {
|
|
156
|
+
alertInvestigationMinimumSeverityId: true,
|
|
157
|
+
alertInvestigationDedupeWindowMinutes: true,
|
|
158
|
+
},
|
|
159
|
+
props: { isRoot: true },
|
|
160
|
+
});
|
|
161
|
+
// Severity floor.
|
|
162
|
+
const floorOrder = await this.getSeverityFloorOrder(projectId, project === null || project === void 0 ? void 0 : project.alertInvestigationMinimumSeverityId);
|
|
163
|
+
const alertOrder = (_a = alert.alertSeverity) === null || _a === void 0 ? void 0 : _a.order;
|
|
164
|
+
if (floorOrder !== null &&
|
|
165
|
+
alertOrder !== undefined &&
|
|
166
|
+
alertOrder > floorOrder) {
|
|
167
|
+
return {
|
|
168
|
+
investigate: false,
|
|
169
|
+
reason: `severity order ${alertOrder} is below the investigation floor (order ${floorOrder})`,
|
|
170
|
+
monitorId: alert.monitorId,
|
|
171
|
+
};
|
|
172
|
+
}
|
|
173
|
+
/*
|
|
174
|
+
* Per-monitor dedupe window: per-project override, defaulting to 30
|
|
175
|
+
* minutes, clamped to at most a day; 0 disables the cooldown. Alerts
|
|
176
|
+
* without a monitor have no dedupe key.
|
|
177
|
+
*/
|
|
178
|
+
const dedupeWindowMinutes = Math.min(MAX_DEDUPE_WINDOW_MINUTES, Math.max(0, (_b = project === null || project === void 0 ? void 0 : project.alertInvestigationDedupeWindowMinutes) !== null && _b !== void 0 ? _b : DEFAULT_DEDUPE_WINDOW_MINUTES));
|
|
179
|
+
if (alert.monitorId && dedupeWindowMinutes > 0) {
|
|
180
|
+
const windowStart = OneUptimeDate.getSomeMinutesAgo(dedupeWindowMinutes);
|
|
181
|
+
const recentRunCount = (await AIRunService.countBy({
|
|
182
|
+
query: {
|
|
183
|
+
projectId,
|
|
184
|
+
monitorId: alert.monitorId,
|
|
185
|
+
runType: AIRunType.Investigation,
|
|
186
|
+
createdAt: QueryHelper.greaterThan(windowStart),
|
|
187
|
+
},
|
|
188
|
+
props: { isRoot: true },
|
|
189
|
+
})).toNumber();
|
|
190
|
+
if (recentRunCount > 0) {
|
|
191
|
+
return {
|
|
192
|
+
investigate: false,
|
|
193
|
+
reason: `monitor ${alert.monitorId.toString()} was already investigated within the last ${dedupeWindowMinutes} minutes`,
|
|
194
|
+
monitorId: alert.monitorId,
|
|
195
|
+
};
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
return {
|
|
199
|
+
investigate: true,
|
|
200
|
+
reason: "passed severity and dedupe gates",
|
|
201
|
+
monitorId: alert.monitorId,
|
|
202
|
+
};
|
|
203
|
+
}
|
|
204
|
+
/*
|
|
205
|
+
* The severity `order` value that still qualifies for investigation (lower
|
|
206
|
+
* order = higher severity; an alert qualifies when its order <= floor).
|
|
207
|
+
* An explicitly configured minimum severity wins; when unset — or when the
|
|
208
|
+
* configured severity has been deleted — the default is the project's top
|
|
209
|
+
* two tiers. Returns null when no floor applies (no severities configured).
|
|
210
|
+
*/
|
|
211
|
+
static async getSeverityFloorOrder(projectId, minimumSeverityId) {
|
|
212
|
+
var _a;
|
|
213
|
+
if (minimumSeverityId) {
|
|
214
|
+
const floorSeverity = await AlertSeverityService.findOneById({
|
|
215
|
+
id: minimumSeverityId,
|
|
216
|
+
select: { order: true },
|
|
217
|
+
props: { isRoot: true },
|
|
64
218
|
});
|
|
219
|
+
if (floorSeverity && floorSeverity.order !== undefined) {
|
|
220
|
+
return floorSeverity.order;
|
|
221
|
+
}
|
|
65
222
|
}
|
|
66
|
-
|
|
67
|
-
|
|
223
|
+
// Default: the top two severity tiers (the two lowest order values).
|
|
224
|
+
const topTiers = await AlertSeverityService.findBy({
|
|
225
|
+
query: { projectId },
|
|
226
|
+
select: { order: true },
|
|
227
|
+
sort: { order: SortOrder.Ascending },
|
|
228
|
+
limit: 2,
|
|
229
|
+
skip: 0,
|
|
230
|
+
props: { isRoot: true },
|
|
231
|
+
});
|
|
232
|
+
if (topTiers.length === 0) {
|
|
233
|
+
return null;
|
|
68
234
|
}
|
|
235
|
+
const lastTier = topTiers[topTiers.length - 1];
|
|
236
|
+
return (_a = lastTier.order) !== null && _a !== void 0 ? _a : null;
|
|
69
237
|
}
|
|
70
238
|
// Build a compact alert record to seed the investigation.
|
|
71
239
|
static buildAlertSummary(contextData) {
|
|
@@ -116,4 +284,16 @@ __decorate([
|
|
|
116
284
|
__metadata("design:paramtypes", [Object]),
|
|
117
285
|
__metadata("design:returntype", Promise)
|
|
118
286
|
], SentinelAlertInvestigationRunner, "investigateNewAlert", null);
|
|
287
|
+
__decorate([
|
|
288
|
+
CaptureSpan(),
|
|
289
|
+
__metadata("design:type", Function),
|
|
290
|
+
__metadata("design:paramtypes", [Object]),
|
|
291
|
+
__metadata("design:returntype", Promise)
|
|
292
|
+
], SentinelAlertInvestigationRunner, "executeInvestigation", null);
|
|
293
|
+
__decorate([
|
|
294
|
+
CaptureSpan(),
|
|
295
|
+
__metadata("design:type", Function),
|
|
296
|
+
__metadata("design:paramtypes", [Object]),
|
|
297
|
+
__metadata("design:returntype", Promise)
|
|
298
|
+
], SentinelAlertInvestigationRunner, "shouldInvestigateAlert", null);
|
|
119
299
|
//# sourceMappingURL=AlertInvestigationRunner.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AlertInvestigationRunner.js","sourceRoot":"","sources":["../../../../../../Server/Utils/AI/Sentinel/AlertInvestigationRunner.ts"],"names":[],"mappings":";;;;;;;;;AACA,OAAO,aAAa,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"AlertInvestigationRunner.js","sourceRoot":"","sources":["../../../../../../Server/Utils/AI/Sentinel/AlertInvestigationRunner.ts"],"names":[],"mappings":"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"}
|