@oneuptime/common 12.0.24 → 12.0.26
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/AnalyticsModels/Index.ts +2 -0
- package/Models/AnalyticsModels/Span.ts +101 -0
- package/Models/AnalyticsModels/ThreatIntelIndicator.ts +413 -0
- package/Models/DatabaseModels/AlertSeverity.ts +4 -1
- package/Models/DatabaseModels/CephClusterFeed.ts +625 -0
- package/Models/DatabaseModels/CloudResourceFeed.ts +625 -0
- package/Models/DatabaseModels/DatabaseBaseModel/DatabaseBaseModel.ts +13 -0
- package/Models/DatabaseModels/DetectionRule.ts +9 -3
- package/Models/DatabaseModels/DockerHostFeed.ts +625 -0
- package/Models/DatabaseModels/DockerSwarmClusterFeed.ts +628 -0
- package/Models/DatabaseModels/GoogleSecOpsConnection.ts +9 -3
- package/Models/DatabaseModels/HostFeed.ts +625 -0
- package/Models/DatabaseModels/IncidentSeverity.ts +4 -1
- package/Models/DatabaseModels/Index.ts +22 -0
- package/Models/DatabaseModels/KubernetesClusterFeed.ts +628 -0
- package/Models/DatabaseModels/Monitor.ts +87 -0
- package/Models/DatabaseModels/NetworkDevice.ts +96 -5
- package/Models/DatabaseModels/NetworkDeviceAutoImportRule.ts +92 -6
- package/Models/DatabaseModels/NetworkDeviceDiscoveryScan.ts +301 -31
- package/Models/DatabaseModels/NetworkSite.ts +120 -0
- package/Models/DatabaseModels/OnCallDutyPolicyExecutionLog.ts +1 -0
- package/Models/DatabaseModels/PodmanHostFeed.ts +625 -0
- package/Models/DatabaseModels/ProxmoxClusterFeed.ts +626 -0
- package/Models/DatabaseModels/ScheduledMaintenance.ts +67 -0
- package/Models/DatabaseModels/ServiceFeed.ts +625 -0
- package/Models/DatabaseModels/TelemetrySourceMap.ts +474 -0
- package/Models/DatabaseModels/ThreatIntelFeed.ts +758 -0
- package/Models/DatabaseModels/UserOnCallLog.ts +1 -0
- package/Models/DatabaseModels/UserTotpAuth.ts +1 -0
- package/Models/DatabaseModels/UserWebAuthn.ts +1 -0
- package/Server/API/AlertAPI.ts +23 -1
- package/Server/API/BaseAPI.ts +14 -27
- package/Server/API/IncidentAPI.ts +41 -1
- package/Server/API/IncidentEpisodeAPI.ts +23 -1
- package/Server/API/MicrosoftTeamsAPI.ts +31 -2
- package/Server/API/ScheduledMaintenanceAPI.ts +23 -1
- package/Server/API/SlackAPI.ts +48 -2
- package/Server/API/TelemetryAPI.ts +167 -42
- package/Server/API/UserOnCallLogTimelineAPI.ts +75 -61
- package/Server/API/UserTotpAuthAPI.ts +67 -1
- package/Server/API/UserWebAuthnAPI.ts +44 -1
- package/Server/Infrastructure/Postgres/SchemaMigrations/1787923136162-MigrationName.ts +57 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1789600000000-AddAutoProvisionedNetworkDeviceMonitors.ts +49 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1789700000000-AddNetworkScaleIndexes.ts +129 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1789800000000-WidenSecurityEventLastErrorColumns.ts +54 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1789900000000-AddNetworkSiteRollupPolicyAndMaintenance.ts +64 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1790000000000-AddTelemetrySourceMap.ts +64 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1790000000001-AddSnmpConfigsToNetworkDeviceDiscoveryScan.ts +72 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1790003445000-AddSnmpEnabledToNetworkDeviceDiscoveryScan.ts +31 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1790100000000-AddResourceActivityFeeds.ts +489 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +18 -0
- package/Server/Middleware/IdentityRateLimit.ts +53 -3
- package/Server/Middleware/SlackAuthorization.ts +96 -18
- package/Server/Services/AIService.ts +181 -41
- package/Server/Services/CephClusterFeedService.ts +99 -0
- package/Server/Services/CephClusterLabelRuleEngineService.ts +29 -0
- package/Server/Services/CephClusterOwnerRuleEngineService.ts +23 -0
- package/Server/Services/CephClusterOwnerTeamService.ts +129 -0
- package/Server/Services/CephClusterOwnerUserService.ts +123 -0
- package/Server/Services/CephClusterService.ts +223 -2
- package/Server/Services/CloudResourceFeedService.ts +99 -0
- package/Server/Services/CloudResourceLabelRuleEngineService.ts +30 -0
- package/Server/Services/CloudResourceOwnerRuleEngineService.ts +33 -0
- package/Server/Services/CloudResourceOwnerTeamService.ts +129 -0
- package/Server/Services/CloudResourceOwnerUserService.ts +123 -0
- package/Server/Services/CloudResourceService.ts +227 -2
- package/Server/Services/DatabaseService.ts +265 -0
- package/Server/Services/DockerHostFeedService.ts +99 -0
- package/Server/Services/DockerHostLabelRuleEngineService.ts +29 -0
- package/Server/Services/DockerHostOwnerRuleEngineService.ts +23 -0
- package/Server/Services/DockerHostOwnerTeamService.ts +129 -0
- package/Server/Services/DockerHostOwnerUserService.ts +123 -0
- package/Server/Services/DockerHostService.ts +227 -2
- package/Server/Services/DockerSwarmClusterFeedService.ts +102 -0
- package/Server/Services/DockerSwarmClusterLabelRuleEngineService.ts +30 -0
- package/Server/Services/DockerSwarmClusterOwnerRuleEngineService.ts +24 -0
- package/Server/Services/DockerSwarmClusterOwnerTeamService.ts +133 -0
- package/Server/Services/DockerSwarmClusterOwnerUserService.ts +127 -0
- package/Server/Services/DockerSwarmClusterService.ts +229 -2
- package/Server/Services/EnterpriseLicenseService.ts +15 -7
- package/Server/Services/ExceptionAggregationService.ts +12 -2
- package/Server/Services/HostFeedService.ts +99 -0
- package/Server/Services/HostLabelRuleEngineService.ts +29 -0
- package/Server/Services/HostOwnerRuleEngineService.ts +23 -0
- package/Server/Services/HostOwnerTeamService.ts +129 -0
- package/Server/Services/HostOwnerUserService.ts +123 -0
- package/Server/Services/HostService.ts +215 -2
- package/Server/Services/IncidentService.ts +11 -0
- package/Server/Services/Index.ts +24 -0
- package/Server/Services/KubernetesClusterFeedService.ts +99 -0
- package/Server/Services/KubernetesClusterLabelRuleEngineService.ts +30 -0
- package/Server/Services/KubernetesClusterOwnerRuleEngineService.ts +24 -0
- package/Server/Services/KubernetesClusterOwnerTeamService.ts +133 -0
- package/Server/Services/KubernetesClusterOwnerUserService.ts +127 -0
- package/Server/Services/KubernetesClusterService.ts +231 -2
- package/Server/Services/LogAggregationService.ts +23 -280
- package/Server/Services/MetricAggregationService.ts +98 -1
- package/Server/Services/MonitorService.ts +177 -13
- package/Server/Services/MonitorTemplateService.ts +111 -0
- package/Server/Services/NetworkDeviceAutoImportRuleEngineService.ts +777 -86
- package/Server/Services/NetworkDeviceAutoImportRuleService.ts +199 -16
- package/Server/Services/NetworkDeviceDiscoveryScanService.ts +1055 -14
- package/Server/Services/NetworkDeviceService.ts +750 -4
- package/Server/Services/NetworkInterfaceService.ts +415 -0
- package/Server/Services/NetworkSiteService.ts +485 -52
- package/Server/Services/PodmanHostFeedService.ts +99 -0
- package/Server/Services/PodmanHostLabelRuleEngineService.ts +29 -0
- package/Server/Services/PodmanHostOwnerRuleEngineService.ts +23 -0
- package/Server/Services/PodmanHostOwnerTeamService.ts +129 -0
- package/Server/Services/PodmanHostOwnerUserService.ts +123 -0
- package/Server/Services/PodmanHostService.ts +227 -2
- package/Server/Services/ProjectService.ts +16 -10
- package/Server/Services/ProxmoxClusterFeedService.ts +99 -0
- package/Server/Services/ProxmoxClusterLabelRuleEngineService.ts +30 -0
- package/Server/Services/ProxmoxClusterOwnerRuleEngineService.ts +24 -0
- package/Server/Services/ProxmoxClusterOwnerTeamService.ts +131 -0
- package/Server/Services/ProxmoxClusterOwnerUserService.ts +124 -0
- package/Server/Services/ProxmoxClusterService.ts +225 -2
- package/Server/Services/ScheduledMaintenanceStateTimelineService.ts +61 -0
- package/Server/Services/ServiceFeedService.ts +99 -0
- package/Server/Services/ServiceLabelRuleEngineService.ts +29 -0
- package/Server/Services/ServiceOwnerRuleEngineService.ts +26 -0
- package/Server/Services/ServiceOwnerTeamService.ts +129 -0
- package/Server/Services/ServiceOwnerUserService.ts +123 -0
- package/Server/Services/ServiceService.ts +227 -3
- package/Server/Services/StatusPageSubscriberService.ts +7 -0
- package/Server/Services/TelemetryAttributeService.ts +13 -3
- package/Server/Services/TelemetrySourceMapService.ts +307 -0
- package/Server/Services/ThreatIntelFeedService.ts +222 -0
- package/Server/Services/ThreatIntelIndicatorService.ts +428 -0
- package/Server/Services/TraceAggregationService.ts +101 -11
- package/Server/Services/UserService.ts +13 -6
- package/Server/Services/UserTwoFactorBackupCodeService.ts +127 -0
- package/Server/Services/UserWebhookService.ts +11 -2
- package/Server/Static/Brand/README.md +38 -0
- package/Server/Static/Brand/favicons/apple-touch-icon.png +0 -0
- package/Server/Static/Brand/favicons/favicon-16x16.png +0 -0
- package/Server/Static/Brand/favicons/favicon-32x32.png +0 -0
- package/Server/Static/Brand/favicons/favicon.ico +0 -0
- package/Server/Static/Brand/favicons/safari-pinned-tab.svg +31 -0
- package/Server/Static/Brand/hou-wb.svg +1 -0
- package/Server/Static/Brand/oneuptime-logo.svg +1 -0
- package/Server/Static/Brand/ou-wb.svg +1 -0
- package/Server/Static/Vendor/README.md +4 -0
- package/Server/Types/AnalyticsDatabase/ModelPermission.ts +13 -3
- package/Server/Types/Database/AggregateBy.ts +83 -0
- package/Server/Types/Database/AggregateResultUtil.ts +126 -0
- package/Server/Types/Database/JSONColumnQuery.ts +18 -0
- package/Server/Types/Database/QueryHelper.ts +40 -0
- package/Server/Types/Database/QueryUtil.ts +26 -0
- package/Server/Types/Workflow/Components/API/Utils.ts +10 -1
- package/Server/Types/Workflow/Components/JavaScript.ts +8 -0
- package/Server/Utils/AI/CodeFix/CodeFixAgentCompletion.ts +9 -0
- package/Server/Utils/AI/SRE/InvestigationGrader.ts +18 -0
- package/Server/Utils/AnalyticsDatabase/AttributeFilterStatement.ts +422 -0
- package/Server/Utils/AnalyticsDatabase/StatementGenerator.ts +176 -0
- package/Server/Utils/DataSource/HttpFetch.ts +18 -0
- package/Server/Utils/Database/RelationIdUtil.ts +42 -0
- package/Server/Utils/Marketing/MarketingEventUtil.ts +38 -9
- package/Server/Utils/Monitor/Criteria/ServerMonitorCriteria.ts +34 -3
- package/Server/Utils/Monitor/Criteria/SnmpMonitorCriteria.ts +9 -1
- package/Server/Utils/Monitor/Criteria/SyntheticMonitor.ts +28 -10
- package/Server/Utils/Monitor/MonitorAlert.ts +541 -332
- package/Server/Utils/Monitor/MonitorCriteriaEvaluator.ts +330 -64
- package/Server/Utils/Monitor/MonitorIncident.ts +640 -434
- package/Server/Utils/Monitor/MonitorResource.ts +226 -49
- package/Server/Utils/Monitor/NetworkDeviceWalkUtil.ts +46 -3
- package/Server/Utils/Monitor/NetworkInventoryUtil.ts +23 -102
- package/Server/Utils/Monitor/PerEntityCriteriaFanOut.ts +329 -0
- package/Server/Utils/NetworkDevice/DeviceHealthAggregation.ts +427 -0
- package/Server/Utils/NetworkSite/NetworkSiteMaintenanceSuppression.ts +310 -0
- package/Server/Utils/OnCallNotificationContext.ts +686 -0
- package/Server/Utils/PrivateNetworkWebhookConfig.ts +549 -0
- package/Server/Utils/ResourceFeed/ResourceFeedUtil.ts +139 -0
- package/Server/Utils/Response.ts +11 -1
- package/Server/Utils/SSRFProtection.ts +230 -60
- package/Server/Utils/SecurityEvent/ConnectorErrorMessage.ts +106 -0
- package/Server/Utils/SecurityEvent/DetectionRuleEvaluator.ts +84 -284
- package/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsPoller.ts +47 -20
- package/Server/Utils/SecurityEvent/SecurityEventAlerting.ts +318 -0
- package/Server/Utils/SecurityEvent/ThreatIntel/TaxiiClient.ts +199 -0
- package/Server/Utils/SecurityEvent/ThreatIntel/ThreatIntelEnricher.ts +252 -0
- package/Server/Utils/SecurityEvent/ThreatIntel/ThreatIntelFeedPoller.ts +739 -0
- package/Server/Utils/SecurityEvent/ThreatIntel/ThreatIntelMatcher.ts +533 -0
- package/Server/Utils/StartServer.ts +83 -56
- package/Server/Utils/StatusPageSubscriberWebhook.ts +3 -0
- package/Server/Utils/Telemetry/LlmMetricSpend.ts +56 -5
- package/Server/Utils/Telemetry/LlmSpan.ts +46 -0
- package/Server/Utils/Telemetry/SourceMapResolver.ts +480 -0
- package/Server/Utils/TwoFactorBackupCodeNotification.ts +106 -0
- package/Server/Utils/VM/VMAPI.ts +3 -0
- package/Server/Utils/VM/VMRunner.ts +27 -1
- package/Server/Utils/VendorAssets.ts +42 -0
- package/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.ts +136 -6
- package/Server/Utils/Workspace/Slack/Actions/Auth.ts +0 -12
- package/Server/Views/AcknowledgeUserOnCallNotification.ejs +11 -9
- package/Server/Views/Partials/Head.ejs +9 -9
- package/Server/Views/Partials/OnCallNotificationDetails.ejs +48 -0
- package/Server/Views/ViewMessage.ejs +11 -9
- package/Tests/App/Accounts/LoginTwoFactorRecovery.test.tsx +972 -0
- package/Tests/App/Dashboard/AddNeighborToMonitoringModal.test.tsx +401 -0
- package/Tests/App/Dashboard/DiscoveryScanEditForm.test.tsx +707 -0
- package/Tests/App/Dashboard/DiscoveryScanWizardValidation.test.tsx +1908 -18
- package/Tests/App/Dashboard/LlmCallsTableIdentity.test.tsx +322 -0
- package/Tests/App/Dashboard/LlmOverview.test.tsx +335 -0
- package/Tests/App/Dashboard/LlmSpanDisplay.test.ts +391 -0
- package/Tests/App/Dashboard/LlmUsageBreakdown.test.tsx +1007 -0
- package/Tests/App/Dashboard/ResourceFeed.test.tsx +230 -0
- package/Tests/App/Dashboard/ResourceFeedPageWiring.test.ts +216 -0
- package/Tests/App/Dashboard/TopologyAddToMonitoring.test.tsx +192 -0
- package/Tests/App/Dashboard/WorkspaceNotificationRuleConditions.test.tsx +439 -0
- package/Tests/Models/DatabaseModels/DateColumnDeserialization.test.ts +182 -0
- package/Tests/Models/DatabaseModels/RelationColumnModelTypeCoverage.test.ts +82 -0
- package/Tests/Models/DatabaseModels/ResourceFeedModels.test.ts +398 -0
- package/Tests/Models/DiscoveryScanNameColumn.test.ts +151 -16
- package/Tests/Models/DiscoveryScanSnmpEnabledColumn.test.ts +593 -0
- package/Tests/Models/NetworkDeviceCreateContract.test.ts +102 -0
- package/Tests/Server/API/AIGenerationProjectAIToggle.test.ts +607 -0
- package/Tests/Server/API/AIGenerationRequestBudget.test.ts +355 -0
- package/Tests/Server/API/AIKillSwitchBackstop.test.ts +602 -0
- package/Tests/Server/API/BaseAPI.test.ts +41 -0
- package/Tests/Server/API/BaseAPIUpdateDateColumns.test.ts +154 -0
- package/Tests/Server/API/BaseAPIUpdatePayloadValidation.test.ts +9 -16
- package/Tests/Server/API/MicrosoftTeamsBotTestEndpoint.test.ts +335 -0
- package/Tests/Server/API/UserOnCallLogTimelineAcknowledgePage.test.ts +611 -0
- package/Tests/Server/API/UserTotpAuthAPI.test.ts +498 -4
- package/Tests/Server/API/UserWebAuthnBackupCodeMinting.test.ts +682 -0
- package/Tests/Server/Infrastructure/ExampleDockerfiles.test.ts +595 -0
- package/Tests/Server/Middleware/SlackAuthorization.test.ts +262 -5
- package/Tests/Server/Services/AIServiceDailyBudget.test.ts +9 -0
- package/Tests/Server/Services/AIServiceProjectAccess.test.ts +6 -0
- package/Tests/Server/Services/AutoImportScanCredentialSelect.test.ts +18 -0
- package/Tests/Server/Services/DatabaseServiceAggregateBy.test.ts +590 -0
- package/Tests/Server/Services/DatabaseServiceUpdateWriteRouting.test.ts +12 -0
- package/Tests/Server/Services/DiscoveryScanClaimHookFreeSafety.test.ts +162 -26
- package/Tests/Server/Services/EnterpriseLicenseServiceCreate.test.ts +292 -0
- package/Tests/Server/Services/FeedRetentionConsistency.test.ts +119 -12
- package/Tests/Server/Services/LogAggregationAttributeOperators.test.ts +109 -0
- package/Tests/Server/Services/MetricAggregationAttributeOperators.test.ts +170 -0
- package/Tests/Server/Services/MonitorTemplateServiceNetworkDeviceSync.test.ts +383 -0
- package/Tests/Server/Services/NetworkDeviceAutoImportRuleEngineService.test.ts +997 -3
- package/Tests/Server/Services/NetworkDeviceAutoImportRuleService.test.ts +830 -0
- package/Tests/Server/Services/NetworkDeviceAutoMonitorLifecycle.test.ts +528 -0
- package/Tests/Server/Services/NetworkDeviceDiscoveryScanService.test.ts +3141 -1
- package/Tests/Server/Services/NetworkDeviceRegisteredHostnames.test.ts +1023 -0
- package/Tests/Server/Services/NetworkDeviceSiteAssignmentRuleSkip.test.ts +728 -0
- package/Tests/Server/Services/NetworkInterfaceServiceUpsert.test.ts +795 -0
- package/Tests/Server/Services/NetworkSiteRollupPolicyAndMaintenance.test.ts +903 -0
- package/Tests/Server/Services/NetworkSiteService.test.ts +165 -24
- package/Tests/Server/Services/ProjectServiceChangePlan.test.ts +5 -3
- package/Tests/Server/Services/ProjectServiceCreateSubscriptionStarted.test.ts +5 -2
- package/Tests/Server/Services/ResourceCreationFeedWrites.test.ts +304 -0
- package/Tests/Server/Services/ResourceFeedServices.test.ts +269 -0
- package/Tests/Server/Services/ResourceOwnerFeedWrites.test.ts +245 -0
- package/Tests/Server/Services/SecurityEventLastErrorColumnWidth.test.ts +792 -0
- package/Tests/Server/Services/TelemetrySourceMapService.test.ts +483 -0
- package/Tests/Server/Services/ThreatIntelFeedService.test.ts +351 -0
- package/Tests/Server/Services/ThreatIntelIndicatorService.test.ts +366 -0
- package/Tests/Server/Services/TraceAggregationAttributeOperators.test.ts +507 -0
- package/Tests/Server/Services/UserTwoFactorBackupCodeGenerateIfNone.test.ts +705 -0
- package/Tests/Server/Services/WorkspaceNotificationRuleOnCallDutyPolicy.test.ts +306 -0
- package/Tests/Server/Types/Database/AggregateResultUtil.test.ts +386 -0
- package/Tests/Server/Types/Database/Permissions/SelectRejectionMessageContract.test.ts +424 -0
- package/Tests/Server/Types/Database/QueryHelperWildcard.test.ts +142 -0
- package/Tests/Server/Types/Workflow/Components/ApiComponentPrivateNetwork.test.ts +163 -0
- package/Tests/Server/Types/Workflow/Components/JavaScriptPrivateNetwork.test.ts +124 -0
- package/Tests/Server/Utils/AI/CodeFixAgentCompletion.test.ts +5 -0
- package/Tests/Server/Utils/AI/InvestigationGrader.test.ts +39 -1
- package/Tests/Server/Utils/AnalyticsDatabase/AttributeFilterStatement.test.ts +338 -0
- package/Tests/Server/Utils/AnalyticsDatabase/StatementGeneratorWildcard.test.ts +383 -0
- package/Tests/Server/Utils/Marketing/EmittedMarketingEvent.ts +23 -0
- package/Tests/Server/Utils/Marketing/MarketingEventUtil.test.ts +51 -0
- package/Tests/Server/Utils/Monitor/Criteria/SyntheticMonitorCriteria.test.ts +259 -0
- package/Tests/Server/Utils/Monitor/MonitorCriteriaEvaluatorPerSeriesFanout.test.ts +557 -0
- package/Tests/Server/Utils/Monitor/MonitorDependencySuppressionCreatorSkip.test.ts +12 -2
- package/Tests/Server/Utils/Monitor/NetworkDeviceWalkLogWritePath.test.ts +404 -0
- package/Tests/Server/Utils/Monitor/NetworkDeviceWalkUtil.test.ts +8 -2
- package/Tests/Server/Utils/Monitor/NetworkInventoryUtil.test.ts +125 -98
- package/Tests/Server/Utils/Monitor/PerEntityCriteriaFanOut.test.ts +444 -0
- package/Tests/Server/Utils/Monitor/PerSeriesSecondEntityAlerting.test.ts +1112 -0
- package/Tests/Server/Utils/NetworkDevice/DeviceHealthAggregation.test.ts +717 -0
- package/Tests/Server/Utils/NetworkDevice/RulePatternValidator.test.ts +78 -0
- package/Tests/Server/Utils/NetworkSite/NetworkSiteMaintenanceSuppression.test.ts +363 -0
- package/Tests/Server/Utils/OfflineAssetHygiene.test.ts +35 -0
- package/Tests/Server/Utils/OnCallNotificationContext.test.ts +908 -0
- package/Tests/Server/Utils/PrivateNetworkWebhookConfig.test.ts +423 -0
- package/Tests/Server/Utils/ResourceFeed/ResourceFeedUtil.test.ts +191 -0
- package/Tests/Server/Utils/SSRFProtectionPrivateNetwork.test.ts +597 -0
- package/Tests/Server/Utils/SecurityEvent/ConnectorErrorMessage.test.ts +819 -0
- package/Tests/Server/Utils/SecurityEvent/DetectionRuleEvaluator.test.ts +381 -0
- package/Tests/Server/Utils/SecurityEvent/GoogleSecOpsPoller.test.ts +417 -0
- package/Tests/Server/Utils/SecurityEvent/GoogleSecOpsPollerFailureTaxonomy.test.ts +819 -0
- package/Tests/Server/Utils/SecurityEvent/SecurityEventAlerting.test.ts +246 -0
- package/Tests/Server/Utils/SecurityEvent/ThreatIntel/TaxiiClient.test.ts +282 -0
- package/Tests/Server/Utils/SecurityEvent/ThreatIntel/ThreatIntelEnricher.test.ts +312 -0
- package/Tests/Server/Utils/SecurityEvent/ThreatIntel/ThreatIntelFeedPoller.test.ts +854 -0
- package/Tests/Server/Utils/SecurityEvent/ThreatIntel/ThreatIntelMatcher.test.ts +437 -0
- package/Tests/Server/Utils/StartServerErrorStatus.test.ts +225 -0
- package/Tests/Server/Utils/StatusPage/MonitorRulePatternValidator.test.ts +62 -0
- package/Tests/Server/Utils/StatusPageSubscriberWebhookPrivateNetwork.test.ts +119 -0
- package/Tests/Server/Utils/Telemetry/LlmCostBudgetEvaluator.test.ts +37 -18
- package/Tests/Server/Utils/Telemetry/LlmMetricSpend.test.ts +143 -2
- package/Tests/Server/Utils/Telemetry/LlmSpan.test.ts +804 -0
- package/Tests/Server/Utils/Telemetry/SourceMapResolver.test.ts +542 -0
- package/Tests/Server/Utils/TwoFactorBackupCodeNotification.test.ts +272 -0
- package/Tests/Server/Utils/VM/VMRunnerPrivateNetworkWiring.test.ts +111 -0
- package/Tests/Server/Utils/VendorAssets.test.ts +117 -0
- package/Tests/Server/Utils/Workspace/MicrosoftTeamsChannelSend.test.ts +101 -4
- package/Tests/Server/Utils/Workspace/MicrosoftTeamsInstallStateDiagnostics.test.ts +922 -0
- package/Tests/Server/Utils/Workspace/MicrosoftTeamsRosterDiagnosticMessages.test.ts +642 -0
- package/Tests/Server/Views/OnCallAcknowledgePage.test.ts +430 -0
- package/Tests/Types/API/URLQueryString.test.ts +472 -0
- package/Tests/Types/BaseDatabase/Wildcard.test.ts +163 -0
- package/Tests/Types/BaseDatabase/WildcardPattern.test.ts +149 -0
- package/Tests/Types/Database/DateColumnValue.test.ts +265 -0
- package/Tests/Types/DateToIsoStringOrNull.test.ts +67 -0
- package/Tests/Types/Log/LogQueryToFilter.test.ts +218 -43
- package/Tests/Types/Monitor/KubernetesTemplateGroupByKeys.test.ts +225 -0
- package/Tests/Types/Monitor/TemplateGroupByKeys.test.ts +296 -0
- package/Tests/Types/NetworkAutomation/RuleRunResult.test.ts +102 -0
- package/Tests/Types/NetworkAutomation/RuleRunResultDescribe.test.ts +145 -0
- package/Tests/Types/NetworkSite/SiteHealthRollupPolicy.test.ts +58 -0
- package/Tests/Types/SerializableObjectDictionaryImportCycle.test.ts +15 -0
- package/Tests/Types/Telemetry/LlmMetricConventions.test.ts +391 -0
- package/Tests/Types/Telemetry/TelemetrySearchQuery.test.ts +620 -0
- package/Tests/Types/WhatsApp/WhatsAppTemplates.test.ts +110 -0
- package/Tests/Types/Workspace/NotificationRuleConditionUtil.test.ts +76 -6
- package/Tests/Types/Workspace/NotificationRules/NotificationRuleCondition.test.ts +16 -4
- package/Tests/Types/Workspace/NotificationRules/OnCallDutyPolicyConditions.test.ts +669 -0
- package/Tests/UI/Components/DictionaryFilterOperatorWildcard.test.ts +175 -0
- package/Tests/UI/Components/IconOpticalSize.test.tsx +377 -0
- package/Tests/UI/MicrosoftTeams/MicrosoftTeamsChatsCardInstallGuidance.test.tsx +332 -0
- package/Tests/UI/MicrosoftTeams/MicrosoftTeamsInstallGuidanceContent.test.tsx +643 -0
- package/Tests/Utils/Monitor/InterfaceInventoryUtil.test.ts +824 -0
- package/Tests/Utils/Monitor/NetworkDeviceMonitorTemplateUtil.test.ts +626 -0
- package/Tests/Utils/Monitor/NetworkTopologyUtil.test.ts +718 -0
- package/Tests/Utils/NetworkDevice/DeviceHealthStateUtil.test.ts +59 -0
- package/Tests/Utils/NetworkDiscovery/DiscoveredDeviceBuilder.test.ts +287 -2
- package/Tests/Utils/NetworkDiscovery/DiscoveryImportEligibility.test.ts +73 -0
- package/Tests/Utils/NetworkDiscovery/PingMonitorBuilder.test.ts +317 -0
- package/Tests/Utils/NetworkDiscovery/RescanIntervalUtil.test.ts +262 -0
- package/Tests/Utils/NetworkDiscovery/ScanModeUtil.test.ts +474 -0
- package/Tests/Utils/NetworkDiscovery/SnmpScanConfigUtil.test.ts +2442 -0
- package/Tests/Utils/NetworkSite/SiteMaintenanceUtil.test.ts +188 -0
- package/Tests/Utils/NetworkSite/SiteStatusRollupUtil.test.ts +522 -0
- package/Tests/Utils/NetworkSite/SiteUptimeUtil.test.ts +694 -0
- package/Tests/Utils/SecurityEvent/ThreatIntel/StixPatternParser.test.ts +281 -0
- package/Tests/Utils/Telemetry/CrossSignalScope.test.ts +87 -67
- package/Tests/Utils/Telemetry/LlmMetricQuery.test.ts +298 -0
- package/Types/API/URL.ts +45 -10
- package/Types/AnalyticsDatabase/AnalyticsTableName.ts +8 -0
- package/Types/BaseDatabase/NotWildcard.ts +86 -0
- package/Types/BaseDatabase/Wildcard.ts +89 -0
- package/Types/BaseDatabase/WildcardPattern.ts +176 -0
- package/Types/Database/DateColumnValue.ts +184 -0
- package/Types/Database/TableColumn.ts +40 -5
- package/Types/Date.ts +37 -0
- package/Types/Email/EmailTemplateType.ts +1 -0
- package/Types/JSON.ts +8 -0
- package/Types/Log/LogQueryToFilter.ts +167 -129
- package/Types/Monitor/DockerAlertTemplates.ts +43 -12
- package/Types/Monitor/HostAlertTemplates.ts +31 -3
- package/Types/Monitor/KubernetesAlertTemplates.ts +98 -0
- package/Types/Monitor/MonitorStep.ts +49 -0
- package/Types/Monitor/PodmanAlertTemplates.ts +39 -12
- package/Types/Monitor/SnmpMonitor/CdpNeighbor.ts +14 -0
- package/Types/Monitor/SnmpMonitor/LldpNeighbor.ts +11 -0
- package/Types/Monitor/SnmpMonitor/NetworkTopology.ts +11 -4
- package/Types/NetworkAutomation/RuleRunResult.ts +191 -2
- package/Types/NetworkSite/SiteHealthRollupPolicy.ts +96 -0
- package/Types/Permission.ts +411 -0
- package/Types/Probe/ProbeApiIngestResponse.ts +42 -0
- package/Types/SecurityEvent/ThreatIntelConstants.ts +118 -0
- package/Types/SerializableObjectDictionary.ts +8 -0
- package/Types/Telemetry/LlmConventions.ts +255 -0
- package/Types/Telemetry/LlmMetricConventions.ts +212 -7
- package/Types/Telemetry/SourceMap.ts +56 -0
- package/Types/Telemetry/TelemetrySearchQuery.ts +949 -0
- package/Types/Workspace/NotificationRules/NotificationRuleCondition.ts +12 -1
- package/UI/Components/Dictionary/DictionaryFilterOperator.ts +83 -0
- package/UI/Components/Icon/Icon.tsx +28 -1
- package/UI/Components/LogsViewer/components/LogSearchBar.tsx +26 -4
- package/UI/Components/LogsViewer/components/LogSearchHelp.tsx +34 -16
- package/UI/Components/TelemetryViewer/components/TelemetrySearchBar.tsx +15 -2
- package/Utils/Metrics/MetricExplorerUrl.ts +77 -15
- package/Utils/Monitor/InterfaceInventoryUtil.ts +251 -0
- package/Utils/Monitor/NetworkDeviceMonitorTemplateUtil.ts +333 -0
- package/Utils/Monitor/NetworkTopologyUtil.ts +249 -28
- package/Utils/NetworkDevice/DeviceHealthStateUtil.ts +14 -6
- package/Utils/NetworkDiscovery/AutoImportRuleMatcher.ts +2 -0
- package/Utils/NetworkDiscovery/DiscoveredDeviceBuilder.ts +49 -18
- package/Utils/NetworkDiscovery/PingMonitorBuilder.ts +215 -0
- package/Utils/NetworkDiscovery/RescanIntervalUtil.ts +148 -0
- package/Utils/NetworkDiscovery/ScanModeUtil.ts +105 -0
- package/Utils/NetworkDiscovery/SnmpScanConfigUtil.ts +827 -0
- package/Utils/NetworkSite/SiteMaintenanceUtil.ts +110 -0
- package/Utils/NetworkSite/SiteStatusRollupUtil.ts +350 -19
- package/Utils/NetworkSite/SiteUptimeUtil.ts +422 -21
- package/Utils/SecurityEvent/ThreatIntel/StixPatternParser.ts +383 -0
- package/Utils/Telemetry/CrossSignalScope.ts +37 -39
- package/Utils/Telemetry/LlmMetricQuery.ts +83 -0
- package/build/dist/Models/AnalyticsModels/Index.js +2 -0
- package/build/dist/Models/AnalyticsModels/Index.js.map +1 -1
- package/build/dist/Models/AnalyticsModels/Span.js +89 -0
- package/build/dist/Models/AnalyticsModels/Span.js.map +1 -1
- package/build/dist/Models/AnalyticsModels/ThreatIntelIndicator.js +325 -0
- package/build/dist/Models/AnalyticsModels/ThreatIntelIndicator.js.map +1 -0
- package/build/dist/Models/DatabaseModels/AlertSeverity.js +4 -1
- package/build/dist/Models/DatabaseModels/AlertSeverity.js.map +1 -1
- package/build/dist/Models/DatabaseModels/CephClusterFeed.js +648 -0
- package/build/dist/Models/DatabaseModels/CephClusterFeed.js.map +1 -0
- package/build/dist/Models/DatabaseModels/CloudResourceFeed.js +648 -0
- package/build/dist/Models/DatabaseModels/CloudResourceFeed.js.map +1 -0
- package/build/dist/Models/DatabaseModels/DatabaseBaseModel/DatabaseBaseModel.js +11 -0
- package/build/dist/Models/DatabaseModels/DatabaseBaseModel/DatabaseBaseModel.js.map +1 -1
- package/build/dist/Models/DatabaseModels/DetectionRule.js +9 -3
- package/build/dist/Models/DatabaseModels/DetectionRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/DockerHostFeed.js +648 -0
- package/build/dist/Models/DatabaseModels/DockerHostFeed.js.map +1 -0
- package/build/dist/Models/DatabaseModels/DockerSwarmClusterFeed.js +648 -0
- package/build/dist/Models/DatabaseModels/DockerSwarmClusterFeed.js.map +1 -0
- package/build/dist/Models/DatabaseModels/GoogleSecOpsConnection.js +9 -3
- package/build/dist/Models/DatabaseModels/GoogleSecOpsConnection.js.map +1 -1
- package/build/dist/Models/DatabaseModels/HostFeed.js +648 -0
- package/build/dist/Models/DatabaseModels/HostFeed.js.map +1 -0
- package/build/dist/Models/DatabaseModels/IncidentSeverity.js +4 -1
- package/build/dist/Models/DatabaseModels/IncidentSeverity.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Index.js +22 -0
- package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
- package/build/dist/Models/DatabaseModels/KubernetesClusterFeed.js +648 -0
- package/build/dist/Models/DatabaseModels/KubernetesClusterFeed.js.map +1 -0
- package/build/dist/Models/DatabaseModels/Monitor.js +81 -0
- package/build/dist/Models/DatabaseModels/Monitor.js.map +1 -1
- package/build/dist/Models/DatabaseModels/NetworkDevice.js +103 -7
- package/build/dist/Models/DatabaseModels/NetworkDevice.js.map +1 -1
- package/build/dist/Models/DatabaseModels/NetworkDeviceAutoImportRule.js +91 -6
- package/build/dist/Models/DatabaseModels/NetworkDeviceAutoImportRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/NetworkDeviceDiscoveryScan.js +276 -31
- package/build/dist/Models/DatabaseModels/NetworkDeviceDiscoveryScan.js.map +1 -1
- package/build/dist/Models/DatabaseModels/NetworkSite.js +124 -1
- package/build/dist/Models/DatabaseModels/NetworkSite.js.map +1 -1
- package/build/dist/Models/DatabaseModels/OnCallDutyPolicyExecutionLog.js +1 -0
- package/build/dist/Models/DatabaseModels/OnCallDutyPolicyExecutionLog.js.map +1 -1
- package/build/dist/Models/DatabaseModels/PodmanHostFeed.js +648 -0
- package/build/dist/Models/DatabaseModels/PodmanHostFeed.js.map +1 -0
- package/build/dist/Models/DatabaseModels/ProxmoxClusterFeed.js +648 -0
- package/build/dist/Models/DatabaseModels/ProxmoxClusterFeed.js.map +1 -0
- package/build/dist/Models/DatabaseModels/ScheduledMaintenance.js +66 -0
- package/build/dist/Models/DatabaseModels/ScheduledMaintenance.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ServiceFeed.js +648 -0
- package/build/dist/Models/DatabaseModels/ServiceFeed.js.map +1 -0
- package/build/dist/Models/DatabaseModels/TelemetrySourceMap.js +496 -0
- package/build/dist/Models/DatabaseModels/TelemetrySourceMap.js.map +1 -0
- package/build/dist/Models/DatabaseModels/ThreatIntelFeed.js +800 -0
- package/build/dist/Models/DatabaseModels/ThreatIntelFeed.js.map +1 -0
- package/build/dist/Models/DatabaseModels/UserOnCallLog.js +1 -0
- package/build/dist/Models/DatabaseModels/UserOnCallLog.js.map +1 -1
- package/build/dist/Models/DatabaseModels/UserTotpAuth.js +1 -0
- package/build/dist/Models/DatabaseModels/UserTotpAuth.js.map +1 -1
- package/build/dist/Models/DatabaseModels/UserWebAuthn.js +1 -0
- package/build/dist/Models/DatabaseModels/UserWebAuthn.js.map +1 -1
- package/build/dist/Server/API/AlertAPI.js +18 -1
- package/build/dist/Server/API/AlertAPI.js.map +1 -1
- package/build/dist/Server/API/BaseAPI.js +11 -20
- package/build/dist/Server/API/BaseAPI.js.map +1 -1
- package/build/dist/Server/API/IncidentAPI.js +35 -1
- package/build/dist/Server/API/IncidentAPI.js.map +1 -1
- package/build/dist/Server/API/IncidentEpisodeAPI.js +18 -1
- package/build/dist/Server/API/IncidentEpisodeAPI.js.map +1 -1
- package/build/dist/Server/API/MicrosoftTeamsAPI.js +30 -2
- package/build/dist/Server/API/MicrosoftTeamsAPI.js.map +1 -1
- package/build/dist/Server/API/ScheduledMaintenanceAPI.js +18 -1
- package/build/dist/Server/API/ScheduledMaintenanceAPI.js.map +1 -1
- package/build/dist/Server/API/SlackAPI.js +45 -2
- package/build/dist/Server/API/SlackAPI.js.map +1 -1
- package/build/dist/Server/API/TelemetryAPI.js +100 -35
- package/build/dist/Server/API/TelemetryAPI.js.map +1 -1
- package/build/dist/Server/API/UserOnCallLogTimelineAPI.js +64 -59
- package/build/dist/Server/API/UserOnCallLogTimelineAPI.js.map +1 -1
- package/build/dist/Server/API/UserTotpAuthAPI.js +65 -1
- package/build/dist/Server/API/UserTotpAuthAPI.js.map +1 -1
- package/build/dist/Server/API/UserWebAuthnAPI.js +42 -1
- package/build/dist/Server/API/UserWebAuthnAPI.js.map +1 -1
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1787923136162-MigrationName.js +26 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1787923136162-MigrationName.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1789600000000-AddAutoProvisionedNetworkDeviceMonitors.js +22 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1789600000000-AddAutoProvisionedNetworkDeviceMonitors.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1789700000000-AddNetworkScaleIndexes.js +88 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1789700000000-AddNetworkScaleIndexes.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1789800000000-WidenSecurityEventLastErrorColumns.js +39 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1789800000000-WidenSecurityEventLastErrorColumns.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1789900000000-AddNetworkSiteRollupPolicyAndMaintenance.js +34 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1789900000000-AddNetworkSiteRollupPolicyAndMaintenance.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790000000000-AddTelemetrySourceMap.js +32 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790000000000-AddTelemetrySourceMap.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790000000001-AddSnmpConfigsToNetworkDeviceDiscoveryScan.js +61 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790000000001-AddSnmpConfigsToNetworkDeviceDiscoveryScan.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790003445000-AddSnmpEnabledToNetworkDeviceDiscoveryScan.js +23 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790003445000-AddSnmpEnabledToNetworkDeviceDiscoveryScan.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790100000000-AddResourceActivityFeeds.js +179 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790100000000-AddResourceActivityFeeds.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +18 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
- package/build/dist/Server/Middleware/IdentityRateLimit.js +40 -3
- package/build/dist/Server/Middleware/IdentityRateLimit.js.map +1 -1
- package/build/dist/Server/Middleware/SlackAuthorization.js +58 -7
- package/build/dist/Server/Middleware/SlackAuthorization.js.map +1 -1
- package/build/dist/Server/Services/AIService.js +177 -30
- package/build/dist/Server/Services/AIService.js.map +1 -1
- package/build/dist/Server/Services/CephClusterFeedService.js +89 -0
- package/build/dist/Server/Services/CephClusterFeedService.js.map +1 -0
- package/build/dist/Server/Services/CephClusterLabelRuleEngineService.js +27 -3
- package/build/dist/Server/Services/CephClusterLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/CephClusterOwnerRuleEngineService.js +21 -0
- package/build/dist/Server/Services/CephClusterOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/CephClusterOwnerTeamService.js +120 -0
- package/build/dist/Server/Services/CephClusterOwnerTeamService.js.map +1 -1
- package/build/dist/Server/Services/CephClusterOwnerUserService.js +113 -0
- package/build/dist/Server/Services/CephClusterOwnerUserService.js.map +1 -1
- package/build/dist/Server/Services/CephClusterService.js +175 -1
- package/build/dist/Server/Services/CephClusterService.js.map +1 -1
- package/build/dist/Server/Services/CloudResourceFeedService.js +89 -0
- package/build/dist/Server/Services/CloudResourceFeedService.js.map +1 -0
- package/build/dist/Server/Services/CloudResourceLabelRuleEngineService.js +27 -3
- package/build/dist/Server/Services/CloudResourceLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/CloudResourceOwnerRuleEngineService.js +28 -3
- package/build/dist/Server/Services/CloudResourceOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/CloudResourceOwnerTeamService.js +120 -0
- package/build/dist/Server/Services/CloudResourceOwnerTeamService.js.map +1 -1
- package/build/dist/Server/Services/CloudResourceOwnerUserService.js +113 -0
- package/build/dist/Server/Services/CloudResourceOwnerUserService.js.map +1 -1
- package/build/dist/Server/Services/CloudResourceService.js +177 -1
- package/build/dist/Server/Services/CloudResourceService.js.map +1 -1
- package/build/dist/Server/Services/DatabaseService.js +201 -0
- package/build/dist/Server/Services/DatabaseService.js.map +1 -1
- package/build/dist/Server/Services/DockerHostFeedService.js +89 -0
- package/build/dist/Server/Services/DockerHostFeedService.js.map +1 -0
- package/build/dist/Server/Services/DockerHostLabelRuleEngineService.js +27 -3
- package/build/dist/Server/Services/DockerHostLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/DockerHostOwnerRuleEngineService.js +21 -0
- package/build/dist/Server/Services/DockerHostOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/DockerHostOwnerTeamService.js +120 -0
- package/build/dist/Server/Services/DockerHostOwnerTeamService.js.map +1 -1
- package/build/dist/Server/Services/DockerHostOwnerUserService.js +113 -0
- package/build/dist/Server/Services/DockerHostOwnerUserService.js.map +1 -1
- package/build/dist/Server/Services/DockerHostService.js +177 -1
- package/build/dist/Server/Services/DockerHostService.js.map +1 -1
- package/build/dist/Server/Services/DockerSwarmClusterFeedService.js +90 -0
- package/build/dist/Server/Services/DockerSwarmClusterFeedService.js.map +1 -0
- package/build/dist/Server/Services/DockerSwarmClusterLabelRuleEngineService.js +27 -3
- package/build/dist/Server/Services/DockerSwarmClusterLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/DockerSwarmClusterOwnerRuleEngineService.js +21 -0
- package/build/dist/Server/Services/DockerSwarmClusterOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/DockerSwarmClusterOwnerTeamService.js +120 -0
- package/build/dist/Server/Services/DockerSwarmClusterOwnerTeamService.js.map +1 -1
- package/build/dist/Server/Services/DockerSwarmClusterOwnerUserService.js +113 -0
- package/build/dist/Server/Services/DockerSwarmClusterOwnerUserService.js.map +1 -1
- package/build/dist/Server/Services/DockerSwarmClusterService.js +175 -1
- package/build/dist/Server/Services/DockerSwarmClusterService.js.map +1 -1
- package/build/dist/Server/Services/EnterpriseLicenseService.js +40 -30
- package/build/dist/Server/Services/EnterpriseLicenseService.js.map +1 -1
- package/build/dist/Server/Services/ExceptionAggregationService.js +8 -2
- package/build/dist/Server/Services/ExceptionAggregationService.js.map +1 -1
- package/build/dist/Server/Services/HostFeedService.js +89 -0
- package/build/dist/Server/Services/HostFeedService.js.map +1 -0
- package/build/dist/Server/Services/HostLabelRuleEngineService.js +27 -3
- package/build/dist/Server/Services/HostLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/HostOwnerRuleEngineService.js +21 -0
- package/build/dist/Server/Services/HostOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/HostOwnerTeamService.js +120 -0
- package/build/dist/Server/Services/HostOwnerTeamService.js.map +1 -1
- package/build/dist/Server/Services/HostOwnerUserService.js +113 -0
- package/build/dist/Server/Services/HostOwnerUserService.js.map +1 -1
- package/build/dist/Server/Services/HostService.js +175 -1
- package/build/dist/Server/Services/HostService.js.map +1 -1
- package/build/dist/Server/Services/IncidentService.js +10 -0
- package/build/dist/Server/Services/IncidentService.js.map +1 -1
- package/build/dist/Server/Services/Index.js +24 -0
- package/build/dist/Server/Services/Index.js.map +1 -1
- package/build/dist/Server/Services/KubernetesClusterFeedService.js +89 -0
- package/build/dist/Server/Services/KubernetesClusterFeedService.js.map +1 -0
- package/build/dist/Server/Services/KubernetesClusterLabelRuleEngineService.js +27 -3
- package/build/dist/Server/Services/KubernetesClusterLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/KubernetesClusterOwnerRuleEngineService.js +21 -0
- package/build/dist/Server/Services/KubernetesClusterOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/KubernetesClusterOwnerTeamService.js +120 -0
- package/build/dist/Server/Services/KubernetesClusterOwnerTeamService.js.map +1 -1
- package/build/dist/Server/Services/KubernetesClusterOwnerUserService.js +113 -0
- package/build/dist/Server/Services/KubernetesClusterOwnerUserService.js.map +1 -1
- package/build/dist/Server/Services/KubernetesClusterService.js +177 -1
- package/build/dist/Server/Services/KubernetesClusterService.js.map +1 -1
- package/build/dist/Server/Services/LogAggregationService.js +19 -196
- package/build/dist/Server/Services/LogAggregationService.js.map +1 -1
- package/build/dist/Server/Services/MetricAggregationService.js +59 -0
- package/build/dist/Server/Services/MetricAggregationService.js.map +1 -1
- package/build/dist/Server/Services/MonitorService.js +115 -13
- package/build/dist/Server/Services/MonitorService.js.map +1 -1
- package/build/dist/Server/Services/MonitorTemplateService.js +86 -0
- package/build/dist/Server/Services/MonitorTemplateService.js.map +1 -1
- package/build/dist/Server/Services/NetworkDeviceAutoImportRuleEngineService.js +561 -67
- package/build/dist/Server/Services/NetworkDeviceAutoImportRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/NetworkDeviceAutoImportRuleService.js +130 -16
- package/build/dist/Server/Services/NetworkDeviceAutoImportRuleService.js.map +1 -1
- package/build/dist/Server/Services/NetworkDeviceDiscoveryScanService.js +850 -8
- package/build/dist/Server/Services/NetworkDeviceDiscoveryScanService.js.map +1 -1
- package/build/dist/Server/Services/NetworkDeviceService.js +594 -5
- package/build/dist/Server/Services/NetworkDeviceService.js.map +1 -1
- package/build/dist/Server/Services/NetworkInterfaceService.js +306 -0
- package/build/dist/Server/Services/NetworkInterfaceService.js.map +1 -1
- package/build/dist/Server/Services/NetworkSiteService.js +408 -47
- package/build/dist/Server/Services/NetworkSiteService.js.map +1 -1
- package/build/dist/Server/Services/PodmanHostFeedService.js +89 -0
- package/build/dist/Server/Services/PodmanHostFeedService.js.map +1 -0
- package/build/dist/Server/Services/PodmanHostLabelRuleEngineService.js +27 -3
- package/build/dist/Server/Services/PodmanHostLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/PodmanHostOwnerRuleEngineService.js +21 -0
- package/build/dist/Server/Services/PodmanHostOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/PodmanHostOwnerTeamService.js +120 -0
- package/build/dist/Server/Services/PodmanHostOwnerTeamService.js.map +1 -1
- package/build/dist/Server/Services/PodmanHostOwnerUserService.js +113 -0
- package/build/dist/Server/Services/PodmanHostOwnerUserService.js.map +1 -1
- package/build/dist/Server/Services/PodmanHostService.js +177 -1
- package/build/dist/Server/Services/PodmanHostService.js.map +1 -1
- package/build/dist/Server/Services/ProjectService.js +40 -30
- package/build/dist/Server/Services/ProjectService.js.map +1 -1
- package/build/dist/Server/Services/ProxmoxClusterFeedService.js +89 -0
- package/build/dist/Server/Services/ProxmoxClusterFeedService.js.map +1 -0
- package/build/dist/Server/Services/ProxmoxClusterLabelRuleEngineService.js +27 -3
- package/build/dist/Server/Services/ProxmoxClusterLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/ProxmoxClusterOwnerRuleEngineService.js +21 -0
- package/build/dist/Server/Services/ProxmoxClusterOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/ProxmoxClusterOwnerTeamService.js +120 -0
- package/build/dist/Server/Services/ProxmoxClusterOwnerTeamService.js.map +1 -1
- package/build/dist/Server/Services/ProxmoxClusterOwnerUserService.js +113 -0
- package/build/dist/Server/Services/ProxmoxClusterOwnerUserService.js.map +1 -1
- package/build/dist/Server/Services/ProxmoxClusterService.js +175 -1
- package/build/dist/Server/Services/ProxmoxClusterService.js.map +1 -1
- package/build/dist/Server/Services/ScheduledMaintenanceStateTimelineService.js +56 -0
- package/build/dist/Server/Services/ScheduledMaintenanceStateTimelineService.js.map +1 -1
- package/build/dist/Server/Services/ServiceFeedService.js +89 -0
- package/build/dist/Server/Services/ServiceFeedService.js.map +1 -0
- package/build/dist/Server/Services/ServiceLabelRuleEngineService.js +27 -3
- package/build/dist/Server/Services/ServiceLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/ServiceOwnerRuleEngineService.js +24 -0
- package/build/dist/Server/Services/ServiceOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/ServiceOwnerTeamService.js +120 -0
- package/build/dist/Server/Services/ServiceOwnerTeamService.js.map +1 -1
- package/build/dist/Server/Services/ServiceOwnerUserService.js +113 -0
- package/build/dist/Server/Services/ServiceOwnerUserService.js.map +1 -1
- package/build/dist/Server/Services/ServiceService.js +173 -2
- package/build/dist/Server/Services/ServiceService.js.map +1 -1
- package/build/dist/Server/Services/StatusPageSubscriberService.js +7 -0
- package/build/dist/Server/Services/StatusPageSubscriberService.js.map +1 -1
- package/build/dist/Server/Services/TelemetryAttributeService.js +9 -3
- package/build/dist/Server/Services/TelemetryAttributeService.js.map +1 -1
- package/build/dist/Server/Services/TelemetrySourceMapService.js +265 -0
- package/build/dist/Server/Services/TelemetrySourceMapService.js.map +1 -0
- package/build/dist/Server/Services/ThreatIntelFeedService.js +157 -0
- package/build/dist/Server/Services/ThreatIntelFeedService.js.map +1 -0
- package/build/dist/Server/Services/ThreatIntelIndicatorService.js +276 -0
- package/build/dist/Server/Services/ThreatIntelIndicatorService.js.map +1 -0
- package/build/dist/Server/Services/TraceAggregationService.js +62 -6
- package/build/dist/Server/Services/TraceAggregationService.js.map +1 -1
- package/build/dist/Server/Services/UserService.js +22 -13
- package/build/dist/Server/Services/UserService.js.map +1 -1
- package/build/dist/Server/Services/UserTwoFactorBackupCodeService.js +120 -0
- package/build/dist/Server/Services/UserTwoFactorBackupCodeService.js.map +1 -1
- package/build/dist/Server/Services/UserWebhookService.js +11 -2
- package/build/dist/Server/Services/UserWebhookService.js.map +1 -1
- package/build/dist/Server/Types/AnalyticsDatabase/ModelPermission.js +12 -1
- package/build/dist/Server/Types/AnalyticsDatabase/ModelPermission.js.map +1 -1
- package/build/dist/Server/Types/Database/AggregateBy.js +2 -0
- package/build/dist/Server/Types/Database/AggregateBy.js.map +1 -0
- package/build/dist/Server/Types/Database/AggregateResultUtil.js +90 -0
- package/build/dist/Server/Types/Database/AggregateResultUtil.js.map +1 -0
- package/build/dist/Server/Types/Database/JSONColumnQuery.js +14 -0
- package/build/dist/Server/Types/Database/JSONColumnQuery.js.map +1 -1
- package/build/dist/Server/Types/Database/QueryHelper.js +42 -0
- package/build/dist/Server/Types/Database/QueryHelper.js.map +1 -1
- package/build/dist/Server/Types/Database/QueryUtil.js +18 -0
- package/build/dist/Server/Types/Database/QueryUtil.js.map +1 -1
- package/build/dist/Server/Types/Workflow/Components/API/Utils.js +10 -1
- package/build/dist/Server/Types/Workflow/Components/API/Utils.js.map +1 -1
- package/build/dist/Server/Types/Workflow/Components/JavaScript.js +8 -0
- package/build/dist/Server/Types/Workflow/Components/JavaScript.js.map +1 -1
- package/build/dist/Server/Utils/AI/CodeFix/CodeFixAgentCompletion.js +8 -0
- package/build/dist/Server/Utils/AI/CodeFix/CodeFixAgentCompletion.js.map +1 -1
- package/build/dist/Server/Utils/AI/SRE/InvestigationGrader.js +15 -0
- package/build/dist/Server/Utils/AI/SRE/InvestigationGrader.js.map +1 -1
- package/build/dist/Server/Utils/AnalyticsDatabase/AttributeFilterStatement.js +266 -0
- package/build/dist/Server/Utils/AnalyticsDatabase/AttributeFilterStatement.js.map +1 -0
- package/build/dist/Server/Utils/AnalyticsDatabase/StatementGenerator.js +134 -0
- package/build/dist/Server/Utils/AnalyticsDatabase/StatementGenerator.js.map +1 -1
- package/build/dist/Server/Utils/DataSource/HttpFetch.js +8 -0
- package/build/dist/Server/Utils/DataSource/HttpFetch.js.map +1 -1
- package/build/dist/Server/Utils/Database/RelationIdUtil.js +31 -0
- package/build/dist/Server/Utils/Database/RelationIdUtil.js.map +1 -1
- package/build/dist/Server/Utils/Marketing/MarketingEventUtil.js +26 -8
- package/build/dist/Server/Utils/Marketing/MarketingEventUtil.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/Criteria/ServerMonitorCriteria.js +42 -17
- package/build/dist/Server/Utils/Monitor/Criteria/ServerMonitorCriteria.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/Criteria/SnmpMonitorCriteria.js +9 -1
- package/build/dist/Server/Utils/Monitor/Criteria/SnmpMonitorCriteria.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/Criteria/SyntheticMonitor.js +15 -2
- package/build/dist/Server/Utils/Monitor/Criteria/SyntheticMonitor.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorAlert.js +386 -271
- package/build/dist/Server/Utils/Monitor/MonitorAlert.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js +278 -64
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorIncident.js +469 -350
- package/build/dist/Server/Utils/Monitor/MonitorIncident.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorResource.js +183 -44
- package/build/dist/Server/Utils/Monitor/MonitorResource.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/NetworkDeviceWalkUtil.js +46 -3
- package/build/dist/Server/Utils/Monitor/NetworkDeviceWalkUtil.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/NetworkInventoryUtil.js +18 -91
- package/build/dist/Server/Utils/Monitor/NetworkInventoryUtil.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/PerEntityCriteriaFanOut.js +194 -0
- package/build/dist/Server/Utils/Monitor/PerEntityCriteriaFanOut.js.map +1 -0
- package/build/dist/Server/Utils/NetworkDevice/DeviceHealthAggregation.js +332 -0
- package/build/dist/Server/Utils/NetworkDevice/DeviceHealthAggregation.js.map +1 -0
- package/build/dist/Server/Utils/NetworkSite/NetworkSiteMaintenanceSuppression.js +279 -0
- package/build/dist/Server/Utils/NetworkSite/NetworkSiteMaintenanceSuppression.js.map +1 -0
- package/build/dist/Server/Utils/OnCallNotificationContext.js +415 -0
- package/build/dist/Server/Utils/OnCallNotificationContext.js.map +1 -0
- package/build/dist/Server/Utils/PrivateNetworkWebhookConfig.js +424 -0
- package/build/dist/Server/Utils/PrivateNetworkWebhookConfig.js.map +1 -0
- package/build/dist/Server/Utils/ResourceFeed/ResourceFeedUtil.js +108 -0
- package/build/dist/Server/Utils/ResourceFeed/ResourceFeedUtil.js.map +1 -0
- package/build/dist/Server/Utils/Response.js +12 -1
- package/build/dist/Server/Utils/Response.js.map +1 -1
- package/build/dist/Server/Utils/SSRFProtection.js +160 -58
- package/build/dist/Server/Utils/SSRFProtection.js.map +1 -1
- package/build/dist/Server/Utils/SecurityEvent/ConnectorErrorMessage.js +89 -0
- package/build/dist/Server/Utils/SecurityEvent/ConnectorErrorMessage.js.map +1 -0
- package/build/dist/Server/Utils/SecurityEvent/DetectionRuleEvaluator.js +75 -234
- package/build/dist/Server/Utils/SecurityEvent/DetectionRuleEvaluator.js.map +1 -1
- package/build/dist/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsPoller.js +41 -16
- package/build/dist/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsPoller.js.map +1 -1
- package/build/dist/Server/Utils/SecurityEvent/SecurityEventAlerting.js +217 -0
- package/build/dist/Server/Utils/SecurityEvent/SecurityEventAlerting.js.map +1 -0
- package/build/dist/Server/Utils/SecurityEvent/ThreatIntel/TaxiiClient.js +103 -0
- package/build/dist/Server/Utils/SecurityEvent/ThreatIntel/TaxiiClient.js.map +1 -0
- package/build/dist/Server/Utils/SecurityEvent/ThreatIntel/ThreatIntelEnricher.js +168 -0
- package/build/dist/Server/Utils/SecurityEvent/ThreatIntel/ThreatIntelEnricher.js.map +1 -0
- package/build/dist/Server/Utils/SecurityEvent/ThreatIntel/ThreatIntelFeedPoller.js +527 -0
- package/build/dist/Server/Utils/SecurityEvent/ThreatIntel/ThreatIntelFeedPoller.js.map +1 -0
- package/build/dist/Server/Utils/SecurityEvent/ThreatIntel/ThreatIntelMatcher.js +376 -0
- package/build/dist/Server/Utils/SecurityEvent/ThreatIntel/ThreatIntelMatcher.js.map +1 -0
- package/build/dist/Server/Utils/StartServer.js +70 -44
- package/build/dist/Server/Utils/StartServer.js.map +1 -1
- package/build/dist/Server/Utils/StatusPageSubscriberWebhook.js +3 -0
- package/build/dist/Server/Utils/StatusPageSubscriberWebhook.js.map +1 -1
- package/build/dist/Server/Utils/Telemetry/LlmMetricSpend.js +52 -3
- package/build/dist/Server/Utils/Telemetry/LlmMetricSpend.js.map +1 -1
- package/build/dist/Server/Utils/Telemetry/LlmSpan.js +24 -1
- package/build/dist/Server/Utils/Telemetry/LlmSpan.js.map +1 -1
- package/build/dist/Server/Utils/Telemetry/SourceMapResolver.js +327 -0
- package/build/dist/Server/Utils/Telemetry/SourceMapResolver.js.map +1 -0
- package/build/dist/Server/Utils/TwoFactorBackupCodeNotification.js +84 -0
- package/build/dist/Server/Utils/TwoFactorBackupCodeNotification.js.map +1 -0
- package/build/dist/Server/Utils/VM/VMAPI.js.map +1 -1
- package/build/dist/Server/Utils/VM/VMRunner.js +10 -1
- package/build/dist/Server/Utils/VM/VMRunner.js.map +1 -1
- package/build/dist/Server/Utils/VendorAssets.js +29 -0
- package/build/dist/Server/Utils/VendorAssets.js.map +1 -1
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.js +121 -6
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.js.map +1 -1
- package/build/dist/Server/Utils/Workspace/Slack/Actions/Auth.js +0 -10
- package/build/dist/Server/Utils/Workspace/Slack/Actions/Auth.js.map +1 -1
- package/build/dist/Types/API/URL.js +40 -10
- package/build/dist/Types/API/URL.js.map +1 -1
- package/build/dist/Types/AnalyticsDatabase/AnalyticsTableName.js +8 -0
- package/build/dist/Types/AnalyticsDatabase/AnalyticsTableName.js.map +1 -1
- package/build/dist/Types/BaseDatabase/NotWildcard.js +72 -0
- package/build/dist/Types/BaseDatabase/NotWildcard.js.map +1 -0
- package/build/dist/Types/BaseDatabase/Wildcard.js +75 -0
- package/build/dist/Types/BaseDatabase/Wildcard.js.map +1 -0
- package/build/dist/Types/BaseDatabase/WildcardPattern.js +137 -0
- package/build/dist/Types/BaseDatabase/WildcardPattern.js.map +1 -0
- package/build/dist/Types/Database/DateColumnValue.js +125 -0
- package/build/dist/Types/Database/DateColumnValue.js.map +1 -0
- package/build/dist/Types/Database/TableColumn.js +18 -2
- package/build/dist/Types/Database/TableColumn.js.map +1 -1
- package/build/dist/Types/Date.js +31 -0
- package/build/dist/Types/Date.js.map +1 -1
- package/build/dist/Types/Email/EmailTemplateType.js +1 -0
- package/build/dist/Types/Email/EmailTemplateType.js.map +1 -1
- package/build/dist/Types/JSON.js +2 -0
- package/build/dist/Types/JSON.js.map +1 -1
- package/build/dist/Types/Log/LogQueryToFilter.js +111 -108
- package/build/dist/Types/Log/LogQueryToFilter.js.map +1 -1
- package/build/dist/Types/Monitor/DockerAlertTemplates.js +40 -16
- package/build/dist/Types/Monitor/DockerAlertTemplates.js.map +1 -1
- package/build/dist/Types/Monitor/HostAlertTemplates.js +29 -7
- package/build/dist/Types/Monitor/HostAlertTemplates.js.map +1 -1
- package/build/dist/Types/Monitor/KubernetesAlertTemplates.js +98 -4
- package/build/dist/Types/Monitor/KubernetesAlertTemplates.js.map +1 -1
- package/build/dist/Types/Monitor/MonitorStep.js +40 -0
- package/build/dist/Types/Monitor/MonitorStep.js.map +1 -1
- package/build/dist/Types/Monitor/PodmanAlertTemplates.js +36 -16
- package/build/dist/Types/Monitor/PodmanAlertTemplates.js.map +1 -1
- package/build/dist/Types/NetworkAutomation/RuleRunResult.js +90 -0
- package/build/dist/Types/NetworkAutomation/RuleRunResult.js.map +1 -1
- package/build/dist/Types/NetworkSite/SiteHealthRollupPolicy.js +84 -0
- package/build/dist/Types/NetworkSite/SiteHealthRollupPolicy.js.map +1 -0
- package/build/dist/Types/Permission.js +354 -0
- package/build/dist/Types/Permission.js.map +1 -1
- package/build/dist/Types/SecurityEvent/ThreatIntelConstants.js +100 -0
- package/build/dist/Types/SecurityEvent/ThreatIntelConstants.js.map +1 -0
- package/build/dist/Types/SerializableObjectDictionary.js +8 -0
- package/build/dist/Types/SerializableObjectDictionary.js.map +1 -1
- package/build/dist/Types/Telemetry/LlmConventions.js +236 -0
- package/build/dist/Types/Telemetry/LlmConventions.js.map +1 -1
- package/build/dist/Types/Telemetry/LlmMetricConventions.js +197 -5
- package/build/dist/Types/Telemetry/LlmMetricConventions.js.map +1 -1
- package/build/dist/Types/Telemetry/SourceMap.js +9 -0
- package/build/dist/Types/Telemetry/SourceMap.js.map +1 -0
- package/build/dist/Types/Telemetry/TelemetrySearchQuery.js +661 -0
- package/build/dist/Types/Telemetry/TelemetrySearchQuery.js.map +1 -0
- package/build/dist/Types/Workspace/NotificationRules/NotificationRuleCondition.js +12 -1
- package/build/dist/Types/Workspace/NotificationRules/NotificationRuleCondition.js.map +1 -1
- package/build/dist/UI/Components/Dictionary/DictionaryFilterOperator.js +67 -0
- package/build/dist/UI/Components/Dictionary/DictionaryFilterOperator.js.map +1 -1
- package/build/dist/UI/Components/Icon/Icon.js +28 -1
- package/build/dist/UI/Components/Icon/Icon.js.map +1 -1
- package/build/dist/UI/Components/LogsViewer/components/LogSearchBar.js +25 -4
- package/build/dist/UI/Components/LogsViewer/components/LogSearchBar.js.map +1 -1
- package/build/dist/UI/Components/LogsViewer/components/LogSearchHelp.js +36 -16
- package/build/dist/UI/Components/LogsViewer/components/LogSearchHelp.js.map +1 -1
- package/build/dist/UI/Components/TelemetryViewer/components/TelemetrySearchBar.js +14 -2
- package/build/dist/UI/Components/TelemetryViewer/components/TelemetrySearchBar.js.map +1 -1
- package/build/dist/Utils/Metrics/MetricExplorerUrl.js +54 -9
- package/build/dist/Utils/Metrics/MetricExplorerUrl.js.map +1 -1
- package/build/dist/Utils/Monitor/InterfaceInventoryUtil.js +128 -0
- package/build/dist/Utils/Monitor/InterfaceInventoryUtil.js.map +1 -0
- package/build/dist/Utils/Monitor/NetworkDeviceMonitorTemplateUtil.js +190 -0
- package/build/dist/Utils/Monitor/NetworkDeviceMonitorTemplateUtil.js.map +1 -0
- package/build/dist/Utils/Monitor/NetworkTopologyUtil.js +206 -28
- package/build/dist/Utils/Monitor/NetworkTopologyUtil.js.map +1 -1
- package/build/dist/Utils/NetworkDevice/DeviceHealthStateUtil.js +14 -7
- package/build/dist/Utils/NetworkDevice/DeviceHealthStateUtil.js.map +1 -1
- package/build/dist/Utils/NetworkDiscovery/AutoImportRuleMatcher.js.map +1 -1
- package/build/dist/Utils/NetworkDiscovery/DiscoveredDeviceBuilder.js +34 -18
- package/build/dist/Utils/NetworkDiscovery/DiscoveredDeviceBuilder.js.map +1 -1
- package/build/dist/Utils/NetworkDiscovery/PingMonitorBuilder.js +163 -0
- package/build/dist/Utils/NetworkDiscovery/PingMonitorBuilder.js.map +1 -0
- package/build/dist/Utils/NetworkDiscovery/RescanIntervalUtil.js +99 -0
- package/build/dist/Utils/NetworkDiscovery/RescanIntervalUtil.js.map +1 -0
- package/build/dist/Utils/NetworkDiscovery/ScanModeUtil.js +85 -0
- package/build/dist/Utils/NetworkDiscovery/ScanModeUtil.js.map +1 -0
- package/build/dist/Utils/NetworkDiscovery/SnmpScanConfigUtil.js +560 -0
- package/build/dist/Utils/NetworkDiscovery/SnmpScanConfigUtil.js.map +1 -0
- package/build/dist/Utils/NetworkSite/SiteMaintenanceUtil.js +56 -0
- package/build/dist/Utils/NetworkSite/SiteMaintenanceUtil.js.map +1 -0
- package/build/dist/Utils/NetworkSite/SiteStatusRollupUtil.js +185 -10
- package/build/dist/Utils/NetworkSite/SiteStatusRollupUtil.js.map +1 -1
- package/build/dist/Utils/NetworkSite/SiteUptimeUtil.js +248 -21
- package/build/dist/Utils/NetworkSite/SiteUptimeUtil.js.map +1 -1
- package/build/dist/Utils/SecurityEvent/ThreatIntel/StixPatternParser.js +255 -0
- package/build/dist/Utils/SecurityEvent/ThreatIntel/StixPatternParser.js.map +1 -0
- package/build/dist/Utils/Telemetry/CrossSignalScope.js +27 -30
- package/build/dist/Utils/Telemetry/CrossSignalScope.js.map +1 -1
- package/build/dist/Utils/Telemetry/LlmMetricQuery.js +57 -1
- package/build/dist/Utils/Telemetry/LlmMetricQuery.js.map +1 -1
- package/package.json +2 -1
- package/Tests/Types/Log/LogQueryParser.test.ts +0 -186
- package/Types/Log/LogQueryParser.ts +0 -252
- package/build/dist/Types/Log/LogQueryParser.js +0 -200
- package/build/dist/Types/Log/LogQueryParser.js.map +0 -1
|
@@ -10,15 +10,24 @@ var __metadata = (this && this.__metadata) || function (k, v) {
|
|
|
10
10
|
import NetworkDeviceAutoImportRuleService from "./NetworkDeviceAutoImportRuleService";
|
|
11
11
|
import NetworkDeviceDiscoveryScanService from "./NetworkDeviceDiscoveryScanService";
|
|
12
12
|
import NetworkDeviceService from "./NetworkDeviceService";
|
|
13
|
+
import MonitorService from "./MonitorService";
|
|
14
|
+
import MonitorTemplateService from "./MonitorTemplateService";
|
|
13
15
|
import BadDataException from "../../Types/Exception/BadDataException";
|
|
14
16
|
import LIMIT_MAX from "../../Types/Database/LimitMax";
|
|
17
|
+
import ObjectID from "../../Types/ObjectID";
|
|
15
18
|
import OneUptimeDate from "../../Types/Date";
|
|
16
19
|
import SortOrder from "../../Types/BaseDatabase/SortOrder";
|
|
20
|
+
import MonitorType from "../../Types/Monitor/MonitorType";
|
|
17
21
|
import { MAX_MATCHED_IP_SAMPLE, } from "../../Types/NetworkAutomation/RuleRunResult";
|
|
18
22
|
import AutoImportRuleMatcher from "../../Utils/NetworkDiscovery/AutoImportRuleMatcher";
|
|
19
23
|
import { buildFallbackDeviceName, buildNetworkDeviceFromDiscoveredHost, } from "../../Utils/NetworkDiscovery/DiscoveredDeviceBuilder";
|
|
20
24
|
import { normalizeDiscoveredHosts } from "../../Utils/NetworkDiscovery/DiscoveredHostUtil";
|
|
25
|
+
import { monitoringMethodForDiscoveredHost } from "../../Utils/NetworkDiscovery/DiscoveryImportEligibility";
|
|
26
|
+
import NetworkDeviceMonitoringMethod, { NetworkDeviceMonitoringMethodUtil, } from "../../Types/NetworkDevice/NetworkDeviceMonitoringMethod";
|
|
27
|
+
import NetworkDeviceMonitorTemplateUtil from "../../Utils/Monitor/NetworkDeviceMonitorTemplateUtil";
|
|
21
28
|
import Semaphore from "../Infrastructure/Semaphore";
|
|
29
|
+
import QueryHelper from "../Types/Database/QueryHelper";
|
|
30
|
+
import NetworkDeviceHydrationUtil from "../Utils/Monitor/NetworkDeviceHydrationUtil";
|
|
22
31
|
import CaptureSpan from "../Utils/Telemetry/CaptureSpan";
|
|
23
32
|
import logger from "../Utils/Logger";
|
|
24
33
|
/*
|
|
@@ -40,8 +49,9 @@ import logger from "../Utils/Logger";
|
|
|
40
49
|
*
|
|
41
50
|
* Everything here is idempotent by construction: a device exists per
|
|
42
51
|
* (project, address), recurring scans re-report the same hosts every
|
|
43
|
-
* interval, and both paths
|
|
44
|
-
*
|
|
52
|
+
* interval, and both paths reuse hosts whose address is already registered.
|
|
53
|
+
* Existing devices are still reconciled for a selected template monitor,
|
|
54
|
+
* while provenance keys prevent the same monitor from being created twice.
|
|
45
55
|
*/
|
|
46
56
|
/*
|
|
47
57
|
* The scan columns an import copies onto an SNMP device — the same set the
|
|
@@ -52,6 +62,13 @@ import logger from "../Utils/Logger";
|
|
|
52
62
|
*/
|
|
53
63
|
export const AUTO_IMPORT_SCAN_CREDENTIAL_SELECT = {
|
|
54
64
|
probeId: true,
|
|
65
|
+
/*
|
|
66
|
+
* The ordered credential list, so an imported device is built with the
|
|
67
|
+
* config that ACTUALLY answered its address rather than with the scan's
|
|
68
|
+
* first one. The flattened columns below are what a scan written out of
|
|
69
|
+
* band carries, and are the fallback SnmpScanConfigUtil resolves to.
|
|
70
|
+
*/
|
|
71
|
+
snmpConfigs: true,
|
|
55
72
|
snmpVersion: true,
|
|
56
73
|
snmpCommunityString: true,
|
|
57
74
|
snmpPort: true,
|
|
@@ -72,6 +89,15 @@ export const AUTO_IMPORT_SCAN_CREDENTIAL_SELECT = {
|
|
|
72
89
|
* /16" from an outage into a few paced ticks an operator can catch.
|
|
73
90
|
*/
|
|
74
91
|
export const MAX_DEVICES_PER_AUTO_IMPORT_RUN = 500;
|
|
92
|
+
/*
|
|
93
|
+
* Monitor creates run an even broader service pipeline than device creates:
|
|
94
|
+
* plan limits, operational status, labels, owners, SLOs and status pages all
|
|
95
|
+
* participate. Keep a separate cap so reconciling an existing /16 cannot
|
|
96
|
+
* bypass the device cap merely because all devices are already registered.
|
|
97
|
+
* A truncated automatic pass leaves its marker NULL whenever it made
|
|
98
|
+
* progress, and the next sweep resumes from the queryable provenance keys.
|
|
99
|
+
*/
|
|
100
|
+
export const MAX_MONITORS_PER_AUTO_IMPORT_RUN = 500;
|
|
75
101
|
// Scans one manual "Run Now" will read, oldest results last.
|
|
76
102
|
export const MAX_SCANS_PER_AUTO_IMPORT_RULE_RUN = 100;
|
|
77
103
|
/*
|
|
@@ -121,7 +147,7 @@ class NetworkDeviceAutoImportRuleEngineServiceClass {
|
|
|
121
147
|
* the zero-progress note at the stamp below.)
|
|
122
148
|
*/
|
|
123
149
|
async processCompletedScan(data) {
|
|
124
|
-
var _a, _b;
|
|
150
|
+
var _a, _b, _c;
|
|
125
151
|
const scan = await NetworkDeviceDiscoveryScanService.findOneBy({
|
|
126
152
|
query: {
|
|
127
153
|
_id: data.scanId,
|
|
@@ -156,16 +182,45 @@ class NetworkDeviceAutoImportRuleEngineServiceClass {
|
|
|
156
182
|
await this.stampScan({ scan: scan, createdIpAddresses: [] });
|
|
157
183
|
return null;
|
|
158
184
|
}
|
|
159
|
-
const
|
|
185
|
+
const existingDevices = this.getExistingDevices({
|
|
160
186
|
projectId: projectId,
|
|
161
187
|
cache: data.existingHostnamesByProjectId,
|
|
162
188
|
});
|
|
189
|
+
const hasMonitorProvisioningRules = rules.some((rule) => {
|
|
190
|
+
return !rule.isExclusion && Boolean(rule.monitorTemplateId);
|
|
191
|
+
});
|
|
192
|
+
const existingMonitors = hasMonitorProvisioningRules
|
|
193
|
+
? await this.getExistingMonitors({
|
|
194
|
+
projectId: projectId,
|
|
195
|
+
cache: data.existingMonitorsByProjectId || new Map(),
|
|
196
|
+
})
|
|
197
|
+
: this.emptyExistingMonitorProvisioningState();
|
|
198
|
+
const monitorTemplates = hasMonitorProvisioningRules
|
|
199
|
+
? await this.loadMonitorTemplates({ projectId, rules })
|
|
200
|
+
: new Map();
|
|
163
201
|
const result = this.emptyResult(false);
|
|
164
|
-
const
|
|
202
|
+
const projectBudgetKey = projectId.toString();
|
|
203
|
+
const attempts = data.attemptBudgetsByProjectId
|
|
204
|
+
? data.attemptBudgetsByProjectId.get(projectBudgetKey) || {
|
|
205
|
+
deviceCount: 0,
|
|
206
|
+
monitorCount: 0,
|
|
207
|
+
}
|
|
208
|
+
: { deviceCount: 0, monitorCount: 0 };
|
|
209
|
+
/*
|
|
210
|
+
* A project budget is shared across every scan in one worker sweep. Keep
|
|
211
|
+
* the starting values so a scan reached after an earlier scan consumed
|
|
212
|
+
* the budget can be distinguished from a scan whose own create attempts
|
|
213
|
+
* all failed. The former must remain unprocessed for the next sweep; the
|
|
214
|
+
* latter is deliberately retired to avoid an infinite retry loop.
|
|
215
|
+
*/
|
|
216
|
+
const attemptsAtStart = Object.assign({}, attempts);
|
|
217
|
+
(_b = data.attemptBudgetsByProjectId) === null || _b === void 0 ? void 0 : _b.set(projectBudgetKey, attempts);
|
|
165
218
|
const createdIpAddresses = await this.importHostsFromScan({
|
|
166
219
|
scan: scan,
|
|
167
220
|
rules: rules,
|
|
168
|
-
|
|
221
|
+
existingDevices: existingDevices,
|
|
222
|
+
existingMonitors: existingMonitors,
|
|
223
|
+
monitorTemplates: monitorTemplates,
|
|
169
224
|
result: result,
|
|
170
225
|
attempts: attempts,
|
|
171
226
|
isDryRun: false,
|
|
@@ -179,9 +234,17 @@ class NetworkDeviceAutoImportRuleEngineServiceClass {
|
|
|
179
234
|
* pass, so stamping keeps the two consistent. Run Now remains the
|
|
180
235
|
* deliberate way back into a stamped scan.
|
|
181
236
|
*/
|
|
182
|
-
const
|
|
183
|
-
|
|
184
|
-
|
|
237
|
+
const inheritedBudget = result.isTruncated &&
|
|
238
|
+
(attemptsAtStart.deviceCount > 0 || attemptsAtStart.monitorCount > 0);
|
|
239
|
+
const shouldResume = result.isTruncated &&
|
|
240
|
+
(result.devicesCreated > 0 ||
|
|
241
|
+
result.monitorsCreated > 0 ||
|
|
242
|
+
inheritedBudget);
|
|
243
|
+
if (result.isTruncated &&
|
|
244
|
+
result.devicesCreated === 0 &&
|
|
245
|
+
result.monitorsCreated === 0 &&
|
|
246
|
+
!inheritedBudget) {
|
|
247
|
+
logger.error(`Auto-import: scan ${(_c = scan.id) === null || _c === void 0 ? void 0 : _c.toString()} hit a per-pass cap without making progress (${result.devicesFailed} device failure(s), ${result.monitorsFailed} monitor failure(s)); stamping it processed so the sweep does not retry it forever. Inspect the failures and use the rule's Run Now to retry deliberately.`, { projectId: projectId.toString() });
|
|
185
248
|
}
|
|
186
249
|
await this.stampScan({
|
|
187
250
|
scan: scan,
|
|
@@ -201,6 +264,7 @@ class NetworkDeviceAutoImportRuleEngineServiceClass {
|
|
|
201
264
|
* full rule set would.
|
|
202
265
|
*/
|
|
203
266
|
async applyRuleToCompletedScans(data) {
|
|
267
|
+
var _a, _b;
|
|
204
268
|
const rule = await NetworkDeviceAutoImportRuleService.findOneBy({
|
|
205
269
|
query: {
|
|
206
270
|
_id: data.ruleId,
|
|
@@ -216,12 +280,20 @@ class NetworkDeviceAutoImportRuleEngineServiceClass {
|
|
|
216
280
|
sysDescrPattern: true,
|
|
217
281
|
sysObjectIdPattern: true,
|
|
218
282
|
includePingOnlyHosts: true,
|
|
283
|
+
monitorTemplateId: true,
|
|
219
284
|
},
|
|
220
285
|
props: { isRoot: true },
|
|
221
286
|
});
|
|
222
287
|
if (!rule) {
|
|
223
288
|
throw new BadDataException("Auto-import rule not found.");
|
|
224
289
|
}
|
|
290
|
+
if (data.expectedMonitorTemplateId !== undefined) {
|
|
291
|
+
const expectedTemplateId = ((_a = data.expectedMonitorTemplateId) === null || _a === void 0 ? void 0 : _a.toString()) || "";
|
|
292
|
+
const currentTemplateId = ((_b = rule.monitorTemplateId) === null || _b === void 0 ? void 0 : _b.toString()) || "";
|
|
293
|
+
if (expectedTemplateId !== currentTemplateId) {
|
|
294
|
+
throw new BadDataException("This auto-import rule changed while the run was being authorized. Review it and run it again.");
|
|
295
|
+
}
|
|
296
|
+
}
|
|
225
297
|
/*
|
|
226
298
|
* A DISABLED rule can still be dry-run — that is the point of the dry
|
|
227
299
|
* run: answer "what would this rule import" BEFORE enabling it against
|
|
@@ -283,9 +355,23 @@ class NetworkDeviceAutoImportRuleEngineServiceClass {
|
|
|
283
355
|
data.rule,
|
|
284
356
|
...exclusionRules,
|
|
285
357
|
];
|
|
286
|
-
|
|
358
|
+
/*
|
|
359
|
+
* Starts empty and is primed per scan from the addresses that scan found.
|
|
360
|
+
* See getExistingDevices.
|
|
361
|
+
*/
|
|
362
|
+
const existingDevices = new Map();
|
|
363
|
+
const hasMonitorProvisioningRule = Boolean(data.rule.monitorTemplateId);
|
|
364
|
+
const existingMonitors = hasMonitorProvisioningRule
|
|
365
|
+
? await this.loadExistingMonitors(data.projectId)
|
|
366
|
+
: this.emptyExistingMonitorProvisioningState();
|
|
367
|
+
const monitorTemplates = hasMonitorProvisioningRule
|
|
368
|
+
? await this.loadMonitorTemplates({
|
|
369
|
+
projectId: data.projectId,
|
|
370
|
+
rules: rules,
|
|
371
|
+
})
|
|
372
|
+
: new Map();
|
|
287
373
|
const result = this.emptyResult(data.isDryRun);
|
|
288
|
-
const attempts = {
|
|
374
|
+
const attempts = { deviceCount: 0, monitorCount: 0 };
|
|
289
375
|
/*
|
|
290
376
|
* Newest results first: a manual run is "bring the estate up to date",
|
|
291
377
|
* and the newest scan of a subnet supersedes its older runs — with
|
|
@@ -332,7 +418,9 @@ class NetworkDeviceAutoImportRuleEngineServiceClass {
|
|
|
332
418
|
const createdIpAddresses = await this.importHostsFromScan({
|
|
333
419
|
scan: scan,
|
|
334
420
|
rules: rules,
|
|
335
|
-
|
|
421
|
+
existingDevices: existingDevices,
|
|
422
|
+
existingMonitors: existingMonitors,
|
|
423
|
+
monitorTemplates: monitorTemplates,
|
|
336
424
|
result: result,
|
|
337
425
|
attempts: attempts,
|
|
338
426
|
isDryRun: data.isDryRun,
|
|
@@ -381,12 +469,24 @@ class NetworkDeviceAutoImportRuleEngineServiceClass {
|
|
|
381
469
|
hostsSkippedAlreadyRegistered: 0,
|
|
382
470
|
devicesCreated: 0,
|
|
383
471
|
devicesFailed: 0,
|
|
472
|
+
monitorsWouldCreate: 0,
|
|
473
|
+
monitorsCreated: 0,
|
|
474
|
+
monitorsSkippedAlreadyExisting: 0,
|
|
475
|
+
monitorsSkippedUnsupportedHost: 0,
|
|
476
|
+
monitorsFailed: 0,
|
|
384
477
|
isTruncated: false,
|
|
385
478
|
hasMoreScans: false,
|
|
386
479
|
isDryRun: isDryRun,
|
|
387
480
|
matchedIpAddressSample: [],
|
|
388
481
|
};
|
|
389
482
|
}
|
|
483
|
+
emptyExistingMonitorProvisioningState() {
|
|
484
|
+
return {
|
|
485
|
+
autoProvisionedKeys: new Set(),
|
|
486
|
+
manuallyMonitoredDeviceIds: new Set(),
|
|
487
|
+
attemptedProvisioningKeys: new Set(),
|
|
488
|
+
};
|
|
489
|
+
}
|
|
390
490
|
/*
|
|
391
491
|
* ALL enabled rules of the project, paged to completeness — never a capped
|
|
392
492
|
* subset. The label/owner engines cap their fetch at 100 and a dropped
|
|
@@ -413,6 +513,7 @@ class NetworkDeviceAutoImportRuleEngineServiceClass {
|
|
|
413
513
|
sysDescrPattern: true,
|
|
414
514
|
sysObjectIdPattern: true,
|
|
415
515
|
includePingOnlyHosts: true,
|
|
516
|
+
monitorTemplateId: true,
|
|
416
517
|
},
|
|
417
518
|
sort: {
|
|
418
519
|
createdAt: SortOrder.Ascending,
|
|
@@ -434,15 +535,39 @@ class NetworkDeviceAutoImportRuleEngineServiceClass {
|
|
|
434
535
|
}
|
|
435
536
|
return OneUptimeDate.isBefore(OneUptimeDate.fromString(scan.completedAt), OneUptimeDate.getSomeHoursAgo(MAX_RESULT_AGE_IN_HOURS));
|
|
436
537
|
}
|
|
437
|
-
|
|
538
|
+
/*
|
|
539
|
+
* The project's running map of "this address already has a device", shared
|
|
540
|
+
* across every scan in one sweep.
|
|
541
|
+
*
|
|
542
|
+
* It starts EMPTY and is filled per scan by `primeExistingDevices`, from the
|
|
543
|
+
* addresses that scan actually found. It used to start full — every device
|
|
544
|
+
* in the project, paged out of the database — which was both a full-table
|
|
545
|
+
* read per sweep and, on a fleet whose devices share one `createdAt` (what a
|
|
546
|
+
* bulk import produces), an unstable page walk that SKIPPED hostnames and
|
|
547
|
+
* let this engine create duplicates. See loadExistingDevices.
|
|
548
|
+
*/
|
|
549
|
+
getExistingDevices(data) {
|
|
438
550
|
const key = data.projectId.toString();
|
|
439
551
|
const cached = data.cache.get(key);
|
|
440
552
|
if (cached) {
|
|
441
553
|
return cached;
|
|
442
554
|
}
|
|
443
|
-
const
|
|
444
|
-
data.cache.set(key,
|
|
445
|
-
return
|
|
555
|
+
const fresh = new Map();
|
|
556
|
+
data.cache.set(key, fresh);
|
|
557
|
+
return fresh;
|
|
558
|
+
}
|
|
559
|
+
/*
|
|
560
|
+
* Fills the running map with whatever of THESE addresses already has a
|
|
561
|
+
* device. Only what is found is recorded, so an address that is not
|
|
562
|
+
* registered is looked up again if a later scan in the same sweep carries it
|
|
563
|
+
* — one indexed lookup, and recording absence would go stale the moment this
|
|
564
|
+
* run creates the device.
|
|
565
|
+
*/
|
|
566
|
+
async primeExistingDevices(data) {
|
|
567
|
+
const found = await this.loadExistingDevices(data.projectId, data.hostnames);
|
|
568
|
+
for (const [hostname, device] of found) {
|
|
569
|
+
data.into.set(hostname, device);
|
|
570
|
+
}
|
|
446
571
|
}
|
|
447
572
|
/*
|
|
448
573
|
* Every device address in the project — the same paged walk the probe
|
|
@@ -450,43 +575,201 @@ class NetworkDeviceAutoImportRuleEngineServiceClass {
|
|
|
450
575
|
* a truncated answer produces duplicate devices, which is worse than a
|
|
451
576
|
* slow answer. Sorted for stable paging.
|
|
452
577
|
*/
|
|
453
|
-
|
|
454
|
-
|
|
578
|
+
/*
|
|
579
|
+
* The devices already at these addresses, keyed by hostname.
|
|
580
|
+
*
|
|
581
|
+
* This used to load EVERY device in the project, paging `ORDER BY
|
|
582
|
+
* createdAt` — and a bulk discovery import stamps every device it creates
|
|
583
|
+
* with the same `createdAt`, so on a large fleet the sort key is
|
|
584
|
+
* single-valued and `LIMIT/OFFSET` over it returns an arbitrary,
|
|
585
|
+
* non-deterministic slice per call. Pages overlapped and skipped, and a
|
|
586
|
+
* skipped hostname reads as "not registered", which CREATES A DUPLICATE
|
|
587
|
+
* DEVICE — the exact failure the paging was added to prevent. It also cost
|
|
588
|
+
* a full table scan per page.
|
|
589
|
+
*
|
|
590
|
+
* Asking about the addresses the scans actually carry is both correct and
|
|
591
|
+
* an indexed lookup. See NetworkDeviceService.getDevicesByHostnames.
|
|
592
|
+
*/
|
|
593
|
+
async loadExistingDevices(projectId, hostnames) {
|
|
594
|
+
return NetworkDeviceService.getDevicesByHostnames({
|
|
595
|
+
projectId: projectId,
|
|
596
|
+
hostnames: hostnames,
|
|
597
|
+
select: {
|
|
598
|
+
_id: true,
|
|
599
|
+
projectId: true,
|
|
600
|
+
name: true,
|
|
601
|
+
hostname: true,
|
|
602
|
+
monitoringMethod: true,
|
|
603
|
+
},
|
|
604
|
+
props: {
|
|
605
|
+
isRoot: true,
|
|
606
|
+
},
|
|
607
|
+
});
|
|
608
|
+
}
|
|
609
|
+
static monitorProvisioningKey(networkDeviceId, monitorTemplateId) {
|
|
610
|
+
return `${networkDeviceId.toString()}:${monitorTemplateId.toString()}`;
|
|
611
|
+
}
|
|
612
|
+
async getExistingMonitors(data) {
|
|
613
|
+
const key = data.projectId.toString();
|
|
614
|
+
const cached = data.cache.get(key);
|
|
615
|
+
if (cached) {
|
|
616
|
+
return cached;
|
|
617
|
+
}
|
|
618
|
+
const loaded = await this.loadExistingMonitors(data.projectId);
|
|
619
|
+
data.cache.set(key, loaded);
|
|
620
|
+
return loaded;
|
|
621
|
+
}
|
|
622
|
+
/*
|
|
623
|
+
* Queryable provenance is the concurrency/idempotency key for monitors
|
|
624
|
+
* created by this engine. Existing manually-created Network Device
|
|
625
|
+
* monitors are parsed once and suppress automatic duplicates: an operator
|
|
626
|
+
* who already chose how to monitor a device must not receive a second,
|
|
627
|
+
* potentially billable monitor merely because an import rule was edited.
|
|
628
|
+
*/
|
|
629
|
+
async loadExistingMonitors(projectId) {
|
|
630
|
+
const state = this.emptyExistingMonitorProvisioningState();
|
|
455
631
|
for (let skip = 0;; skip += LIMIT_MAX) {
|
|
456
|
-
const
|
|
632
|
+
const monitors = await MonitorService.findBy({
|
|
457
633
|
query: {
|
|
458
634
|
projectId: projectId,
|
|
635
|
+
monitorType: MonitorType.NetworkDevice,
|
|
459
636
|
},
|
|
460
637
|
select: {
|
|
461
|
-
|
|
638
|
+
_id: true,
|
|
639
|
+
monitorType: true,
|
|
640
|
+
monitorSteps: true,
|
|
641
|
+
monitorTemplateId: true,
|
|
642
|
+
autoProvisionedNetworkDeviceId: true,
|
|
462
643
|
},
|
|
463
644
|
sort: {
|
|
464
645
|
createdAt: SortOrder.Ascending,
|
|
465
646
|
},
|
|
466
647
|
limit: LIMIT_MAX,
|
|
467
648
|
skip: skip,
|
|
468
|
-
props: {
|
|
469
|
-
|
|
649
|
+
props: { isRoot: true },
|
|
650
|
+
});
|
|
651
|
+
for (const monitor of monitors) {
|
|
652
|
+
this.recordExistingMonitor(state, monitor);
|
|
653
|
+
}
|
|
654
|
+
if (monitors.length < LIMIT_MAX) {
|
|
655
|
+
break;
|
|
656
|
+
}
|
|
657
|
+
}
|
|
658
|
+
return state;
|
|
659
|
+
}
|
|
660
|
+
/*
|
|
661
|
+
* Classify one stored monitor from both its queryable provenance and its
|
|
662
|
+
* actual step binding. Provenance is trusted only while the monitor still
|
|
663
|
+
* watches the device it was provisioned for. An orphaned template link or
|
|
664
|
+
* any legacy drift is treated as an operator-managed monitor on its actual
|
|
665
|
+
* device(s), which is the conservative no-duplicate behavior.
|
|
666
|
+
*/
|
|
667
|
+
recordExistingMonitor(state, monitor) {
|
|
668
|
+
var _a;
|
|
669
|
+
const referencedDeviceIds = new Set(NetworkDeviceHydrationUtil.getReferencedNetworkDeviceIds([monitor]));
|
|
670
|
+
const provenanceDeviceId = ((_a = monitor.autoProvisionedNetworkDeviceId) === null || _a === void 0 ? void 0 : _a.toString()) || "";
|
|
671
|
+
if (provenanceDeviceId &&
|
|
672
|
+
monitor.monitorTemplateId &&
|
|
673
|
+
referencedDeviceIds.size === 1 &&
|
|
674
|
+
referencedDeviceIds.has(provenanceDeviceId)) {
|
|
675
|
+
state.autoProvisionedKeys.add(NetworkDeviceAutoImportRuleEngineServiceClass.monitorProvisioningKey(provenanceDeviceId, monitor.monitorTemplateId));
|
|
676
|
+
return;
|
|
677
|
+
}
|
|
678
|
+
for (const networkDeviceId of referencedDeviceIds) {
|
|
679
|
+
state.manuallyMonitoredDeviceIds.add(networkDeviceId);
|
|
680
|
+
}
|
|
681
|
+
}
|
|
682
|
+
/*
|
|
683
|
+
* Close the practical manual-create race left by the project-wide snapshot:
|
|
684
|
+
* immediately before provisioning a device, search the JSON step payload
|
|
685
|
+
* for its UUID and classify exact bindings. The automatic (device,template)
|
|
686
|
+
* partial unique index remains the final concurrent-auto backstop; this
|
|
687
|
+
* narrow read prevents a monitor a human just created from being ignored by
|
|
688
|
+
* a long-running sweep.
|
|
689
|
+
*/
|
|
690
|
+
async refreshExistingMonitorsForDevice(data) {
|
|
691
|
+
for (let skip = 0;; skip += LIMIT_MAX) {
|
|
692
|
+
const monitors = await MonitorService.findBy({
|
|
693
|
+
query: {
|
|
694
|
+
projectId: data.projectId,
|
|
695
|
+
monitorType: MonitorType.NetworkDevice,
|
|
696
|
+
monitorSteps: QueryHelper.search(data.networkDeviceId.toString()),
|
|
697
|
+
},
|
|
698
|
+
select: {
|
|
699
|
+
_id: true,
|
|
700
|
+
monitorType: true,
|
|
701
|
+
monitorSteps: true,
|
|
702
|
+
monitorTemplateId: true,
|
|
703
|
+
autoProvisionedNetworkDeviceId: true,
|
|
470
704
|
},
|
|
705
|
+
sort: { createdAt: SortOrder.Ascending },
|
|
706
|
+
limit: LIMIT_MAX,
|
|
707
|
+
skip: skip,
|
|
708
|
+
props: { isRoot: true },
|
|
471
709
|
});
|
|
472
|
-
for (const
|
|
473
|
-
|
|
474
|
-
|
|
710
|
+
for (const monitor of monitors) {
|
|
711
|
+
this.recordExistingMonitor(data.state, monitor);
|
|
712
|
+
}
|
|
713
|
+
if (monitors.length < LIMIT_MAX) {
|
|
714
|
+
break;
|
|
715
|
+
}
|
|
716
|
+
}
|
|
717
|
+
}
|
|
718
|
+
async loadMonitorTemplates(data) {
|
|
719
|
+
const ids = Array.from(new Map(data.rules
|
|
720
|
+
.filter((rule) => {
|
|
721
|
+
return Boolean(rule.monitorTemplateId);
|
|
722
|
+
})
|
|
723
|
+
.map((rule) => {
|
|
724
|
+
const id = rule.monitorTemplateId;
|
|
725
|
+
return [id.toString(), id];
|
|
726
|
+
})).values());
|
|
727
|
+
const templatesById = new Map();
|
|
728
|
+
if (ids.length === 0) {
|
|
729
|
+
return templatesById;
|
|
730
|
+
}
|
|
731
|
+
for (let skip = 0;; skip += LIMIT_MAX) {
|
|
732
|
+
const templates = await MonitorTemplateService.findBy({
|
|
733
|
+
query: {
|
|
734
|
+
_id: QueryHelper.any(ids),
|
|
735
|
+
projectId: data.projectId,
|
|
736
|
+
monitorType: MonitorType.NetworkDevice,
|
|
737
|
+
},
|
|
738
|
+
select: {
|
|
739
|
+
_id: true,
|
|
740
|
+
projectId: true,
|
|
741
|
+
monitorName: true,
|
|
742
|
+
monitorDescription: true,
|
|
743
|
+
monitorType: true,
|
|
744
|
+
monitorSteps: true,
|
|
745
|
+
monitoringInterval: true,
|
|
746
|
+
minimumProbeAgreement: true,
|
|
747
|
+
customFields: true,
|
|
748
|
+
labels: { _id: true },
|
|
749
|
+
},
|
|
750
|
+
sort: { createdAt: SortOrder.Ascending },
|
|
751
|
+
limit: LIMIT_MAX,
|
|
752
|
+
skip: skip,
|
|
753
|
+
props: { isRoot: true },
|
|
754
|
+
});
|
|
755
|
+
for (const template of templates) {
|
|
756
|
+
if (template.id) {
|
|
757
|
+
templatesById.set(template.id.toString(), template);
|
|
475
758
|
}
|
|
476
759
|
}
|
|
477
|
-
if (
|
|
760
|
+
if (templates.length < LIMIT_MAX) {
|
|
478
761
|
break;
|
|
479
762
|
}
|
|
480
763
|
}
|
|
481
|
-
return
|
|
764
|
+
return templatesById;
|
|
482
765
|
}
|
|
483
766
|
/*
|
|
484
767
|
* The core loop: evaluate every discovered host of one scan against the
|
|
485
|
-
* rule set, create what should import,
|
|
486
|
-
* shared result. Returns the addresses
|
|
487
|
-
* write-back). Mutates `
|
|
488
|
-
* makes duplicate rows, overlapping scans in one
|
|
489
|
-
* idempotent.
|
|
768
|
+
* rule set, create what should import, reconcile selected template monitors,
|
|
769
|
+
* and account for every host in the shared result. Returns the addresses
|
|
770
|
+
* actually created (for the jsonb write-back). Mutates `existingDevices` as
|
|
771
|
+
* it creates, which is what makes duplicate rows, overlapping scans in one
|
|
772
|
+
* sweep, and repeat runs idempotent.
|
|
490
773
|
*/
|
|
491
774
|
async importHostsFromScan(data) {
|
|
492
775
|
const scan = data.scan;
|
|
@@ -500,6 +783,17 @@ class NetworkDeviceAutoImportRuleEngineServiceClass {
|
|
|
500
783
|
* Review dialog already learned to survive. See DiscoveredHostUtil.
|
|
501
784
|
*/
|
|
502
785
|
const hosts = normalizeDiscoveredHosts(scan.discoveredDevices || []);
|
|
786
|
+
/*
|
|
787
|
+
* Ask the database about THESE addresses, once, before the loop — rather
|
|
788
|
+
* than having loaded every device in the project up front.
|
|
789
|
+
*/
|
|
790
|
+
await this.primeExistingDevices({
|
|
791
|
+
projectId: scan.projectId,
|
|
792
|
+
hostnames: hosts.map((host) => {
|
|
793
|
+
return host.ipAddress || "";
|
|
794
|
+
}),
|
|
795
|
+
into: data.existingDevices,
|
|
796
|
+
});
|
|
503
797
|
const createdIpAddresses = [];
|
|
504
798
|
for (const host of hosts) {
|
|
505
799
|
/*
|
|
@@ -523,52 +817,244 @@ class NetworkDeviceAutoImportRuleEngineServiceClass {
|
|
|
523
817
|
continue;
|
|
524
818
|
}
|
|
525
819
|
result.hostsMatched++;
|
|
820
|
+
const templateIds = Array.from(new Set(evaluation.matchedRules
|
|
821
|
+
.map((matchedRule) => {
|
|
822
|
+
var _a;
|
|
823
|
+
return ((_a = matchedRule.monitorTemplateId) === null || _a === void 0 ? void 0 : _a.toString()) || "";
|
|
824
|
+
})
|
|
825
|
+
.filter((id) => {
|
|
826
|
+
return Boolean(id);
|
|
827
|
+
})));
|
|
828
|
+
let networkDevice = data.existingDevices.get(host.ipAddress);
|
|
829
|
+
let deviceWasCreated = false;
|
|
526
830
|
/*
|
|
527
831
|
* The frozen isAlreadyRegistered flag AND the live set: the flag is a
|
|
528
832
|
* point-in-time answer from the last upload, the set covers devices
|
|
529
833
|
* created since — including by this very run, which is what collapses
|
|
530
834
|
* duplicate rows and overlapping scans into one device.
|
|
531
835
|
*/
|
|
532
|
-
if (host.isAlreadyRegistered ||
|
|
533
|
-
data.existingHostnames.has(host.ipAddress)) {
|
|
836
|
+
if (host.isAlreadyRegistered || networkDevice) {
|
|
534
837
|
result.hostsSkippedAlreadyRegistered++;
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
838
|
+
/*
|
|
839
|
+
* A stale scan can claim a deleted device is still registered. With
|
|
840
|
+
* no live row there is neither a safe binding nor enough intent to
|
|
841
|
+
* recreate it from old data, so preserve the established skip.
|
|
842
|
+
*/
|
|
843
|
+
if (!networkDevice) {
|
|
844
|
+
continue;
|
|
845
|
+
}
|
|
540
846
|
}
|
|
541
847
|
if (result.matchedIpAddressSample.length < MAX_MATCHED_IP_SAMPLE) {
|
|
542
|
-
result.matchedIpAddressSample.
|
|
848
|
+
if (!result.matchedIpAddressSample.includes(host.ipAddress)) {
|
|
849
|
+
result.matchedIpAddressSample.push(host.ipAddress);
|
|
850
|
+
}
|
|
543
851
|
}
|
|
544
|
-
if (
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
852
|
+
if (!networkDevice) {
|
|
853
|
+
if (data.attempts.deviceCount >= MAX_DEVICES_PER_AUTO_IMPORT_RUN) {
|
|
854
|
+
result.isTruncated = true;
|
|
855
|
+
break;
|
|
856
|
+
}
|
|
857
|
+
if (data.isDryRun) {
|
|
858
|
+
/*
|
|
859
|
+
* Add a fully-shaped in-memory device to simulate the create. Its
|
|
860
|
+
* generated id never leaves this process; it merely lets monitor
|
|
861
|
+
* reconciliation deduplicate the same host across duplicate rows
|
|
862
|
+
* and overlapping scans exactly as a real run would.
|
|
863
|
+
*/
|
|
864
|
+
data.attempts.deviceCount++;
|
|
865
|
+
networkDevice = buildNetworkDeviceFromDiscoveredHost({
|
|
866
|
+
projectId: scan.projectId,
|
|
867
|
+
host: host,
|
|
868
|
+
scan: scan,
|
|
869
|
+
autoApplyVendorHealthTemplate: true,
|
|
870
|
+
});
|
|
871
|
+
networkDevice.id = ObjectID.generate();
|
|
872
|
+
data.existingDevices.set(host.ipAddress, networkDevice);
|
|
873
|
+
}
|
|
874
|
+
else {
|
|
875
|
+
const createResult = await this.createDeviceForHost({
|
|
876
|
+
projectId: scan.projectId,
|
|
877
|
+
scan: scan,
|
|
878
|
+
host: host,
|
|
879
|
+
existingDevices: data.existingDevices,
|
|
880
|
+
result: result,
|
|
881
|
+
attempts: data.attempts,
|
|
882
|
+
});
|
|
883
|
+
networkDevice = createResult.device || undefined;
|
|
884
|
+
deviceWasCreated = createResult.wasCreated;
|
|
885
|
+
if (!networkDevice) {
|
|
886
|
+
continue;
|
|
887
|
+
}
|
|
888
|
+
}
|
|
889
|
+
}
|
|
890
|
+
if (deviceWasCreated) {
|
|
891
|
+
createdIpAddresses.push(host.ipAddress);
|
|
892
|
+
}
|
|
893
|
+
if (templateIds.length === 0) {
|
|
556
894
|
continue;
|
|
557
895
|
}
|
|
558
|
-
const
|
|
896
|
+
const monitorsWereTruncated = await this.ensureMonitorsForDevice({
|
|
559
897
|
projectId: scan.projectId,
|
|
560
|
-
scan: scan,
|
|
561
898
|
host: host,
|
|
562
|
-
|
|
899
|
+
networkDevice: networkDevice,
|
|
900
|
+
templateIds: templateIds,
|
|
901
|
+
monitorTemplates: data.monitorTemplates,
|
|
902
|
+
existingMonitors: data.existingMonitors,
|
|
563
903
|
result: result,
|
|
564
904
|
attempts: data.attempts,
|
|
905
|
+
isDryRun: data.isDryRun,
|
|
565
906
|
});
|
|
566
|
-
if (
|
|
567
|
-
|
|
907
|
+
if (monitorsWereTruncated) {
|
|
908
|
+
result.isTruncated = true;
|
|
909
|
+
break;
|
|
568
910
|
}
|
|
569
911
|
}
|
|
570
912
|
return createdIpAddresses;
|
|
571
913
|
}
|
|
914
|
+
async ensureMonitorsForDevice(data) {
|
|
915
|
+
/*
|
|
916
|
+
* A Network Device monitor is evaluated from SNMP walks. A ping-only
|
|
917
|
+
* import intentionally has polling disabled and can never supply those
|
|
918
|
+
* results. Rule validation prevents this combination, while this guard
|
|
919
|
+
* keeps legacy or directly-written rows from creating inert monitors.
|
|
920
|
+
*/
|
|
921
|
+
if (monitoringMethodForDiscoveredHost(data.host) ===
|
|
922
|
+
NetworkDeviceMonitoringMethod.Monitor ||
|
|
923
|
+
NetworkDeviceMonitoringMethodUtil.isMonitorBacked(data.networkDevice.monitoringMethod)) {
|
|
924
|
+
data.result.monitorsSkippedUnsupportedHost += data.templateIds.length;
|
|
925
|
+
return false;
|
|
926
|
+
}
|
|
927
|
+
if (!data.networkDevice.id) {
|
|
928
|
+
data.result.monitorsFailed += data.templateIds.length;
|
|
929
|
+
logger.error(`Auto-import: cannot provision monitor(s) for ${data.host.ipAddress} because the Network Device has no id.`, { projectId: data.projectId.toString() });
|
|
930
|
+
return false;
|
|
931
|
+
}
|
|
932
|
+
const networkDeviceId = data.networkDevice.id;
|
|
933
|
+
const networkDeviceIdString = networkDeviceId.toString();
|
|
934
|
+
const pendingTemplateIds = [];
|
|
935
|
+
/*
|
|
936
|
+
* The project-wide snapshot is complete and indexed. Settle everything
|
|
937
|
+
* it already covers before issuing the narrow JSON race-check query; an
|
|
938
|
+
* established fleet whose monitors are already reconciled must not do one
|
|
939
|
+
* full monitor-table search per discovered device on every scan.
|
|
940
|
+
*/
|
|
941
|
+
for (const templateId of data.templateIds) {
|
|
942
|
+
const key = NetworkDeviceAutoImportRuleEngineServiceClass.monitorProvisioningKey(networkDeviceId, templateId);
|
|
943
|
+
if (data.existingMonitors.autoProvisionedKeys.has(key)) {
|
|
944
|
+
data.result.monitorsSkippedAlreadyExisting++;
|
|
945
|
+
continue;
|
|
946
|
+
}
|
|
947
|
+
if (data.existingMonitors.attemptedProvisioningKeys.has(key)) {
|
|
948
|
+
continue;
|
|
949
|
+
}
|
|
950
|
+
pendingTemplateIds.push(templateId);
|
|
951
|
+
}
|
|
952
|
+
if (pendingTemplateIds.length === 0) {
|
|
953
|
+
return false;
|
|
954
|
+
}
|
|
955
|
+
if (data.existingMonitors.manuallyMonitoredDeviceIds.has(networkDeviceIdString)) {
|
|
956
|
+
data.result.monitorsSkippedAlreadyExisting += pendingTemplateIds.length;
|
|
957
|
+
return false;
|
|
958
|
+
}
|
|
959
|
+
/*
|
|
960
|
+
* Do not run the unindexed JSON race-check after this run's monitor-work
|
|
961
|
+
* budget is already exhausted. The device remains unreconciled and the
|
|
962
|
+
* truncated marker protocol brings it back on the next bounded pass.
|
|
963
|
+
*/
|
|
964
|
+
if (data.attempts.monitorCount >= MAX_MONITORS_PER_AUTO_IMPORT_RUN) {
|
|
965
|
+
return true;
|
|
966
|
+
}
|
|
967
|
+
if (!data.isDryRun) {
|
|
968
|
+
await this.refreshExistingMonitorsForDevice({
|
|
969
|
+
projectId: data.projectId,
|
|
970
|
+
networkDeviceId: networkDeviceId,
|
|
971
|
+
state: data.existingMonitors,
|
|
972
|
+
});
|
|
973
|
+
}
|
|
974
|
+
if (data.existingMonitors.manuallyMonitoredDeviceIds.has(networkDeviceIdString)) {
|
|
975
|
+
data.result.monitorsSkippedAlreadyExisting += pendingTemplateIds.length;
|
|
976
|
+
return false;
|
|
977
|
+
}
|
|
978
|
+
for (const templateId of pendingTemplateIds) {
|
|
979
|
+
const key = NetworkDeviceAutoImportRuleEngineServiceClass.monitorProvisioningKey(networkDeviceId, templateId);
|
|
980
|
+
/* The race-check may have found this key after the initial snapshot. */
|
|
981
|
+
if (data.existingMonitors.autoProvisionedKeys.has(key)) {
|
|
982
|
+
data.result.monitorsSkippedAlreadyExisting++;
|
|
983
|
+
continue;
|
|
984
|
+
}
|
|
985
|
+
if (data.attempts.monitorCount >= MAX_MONITORS_PER_AUTO_IMPORT_RUN) {
|
|
986
|
+
return true;
|
|
987
|
+
}
|
|
988
|
+
data.attempts.monitorCount++;
|
|
989
|
+
data.existingMonitors.attemptedProvisioningKeys.add(key);
|
|
990
|
+
/*
|
|
991
|
+
* Invalid or concurrently deleted templates are failed attempts too.
|
|
992
|
+
* Count them inside the same cap before looking up the cached template;
|
|
993
|
+
* otherwise one stale rule could walk and log an unbounded estate in a
|
|
994
|
+
* single API request or worker tick.
|
|
995
|
+
*/
|
|
996
|
+
const template = data.monitorTemplates.get(templateId);
|
|
997
|
+
if (!template) {
|
|
998
|
+
data.result.monitorsFailed++;
|
|
999
|
+
logger.error(`Auto-import: Network Device monitor template ${templateId} is missing, deleted, or not valid for project ${data.projectId.toString()}.`, { projectId: data.projectId.toString() });
|
|
1000
|
+
continue;
|
|
1001
|
+
}
|
|
1002
|
+
if (data.isDryRun) {
|
|
1003
|
+
data.result.monitorsWouldCreate++;
|
|
1004
|
+
data.existingMonitors.autoProvisionedKeys.add(key);
|
|
1005
|
+
continue;
|
|
1006
|
+
}
|
|
1007
|
+
try {
|
|
1008
|
+
const monitor = NetworkDeviceMonitorTemplateUtil.buildMonitor({
|
|
1009
|
+
template: template,
|
|
1010
|
+
networkDevice: data.networkDevice,
|
|
1011
|
+
});
|
|
1012
|
+
await MonitorService.create({
|
|
1013
|
+
data: monitor,
|
|
1014
|
+
props: {
|
|
1015
|
+
isRoot: true,
|
|
1016
|
+
tenantId: data.projectId,
|
|
1017
|
+
},
|
|
1018
|
+
});
|
|
1019
|
+
data.existingMonitors.autoProvisionedKeys.add(key);
|
|
1020
|
+
data.result.monitorsCreated++;
|
|
1021
|
+
}
|
|
1022
|
+
catch (error) {
|
|
1023
|
+
/*
|
|
1024
|
+
* The partial unique index is the final race backstop. If another
|
|
1025
|
+
* writer won between our cache read and create, classify that as an
|
|
1026
|
+
* idempotent skip; otherwise expose a real provisioning failure and
|
|
1027
|
+
* leave the key absent so a later scan or Run Now can retry it.
|
|
1028
|
+
*/
|
|
1029
|
+
const createdMeanwhile = await MonitorService.findOneBy({
|
|
1030
|
+
query: {
|
|
1031
|
+
projectId: data.projectId,
|
|
1032
|
+
monitorType: MonitorType.NetworkDevice,
|
|
1033
|
+
monitorTemplateId: new ObjectID(templateId),
|
|
1034
|
+
autoProvisionedNetworkDeviceId: networkDeviceId,
|
|
1035
|
+
},
|
|
1036
|
+
select: {
|
|
1037
|
+
_id: true,
|
|
1038
|
+
monitorType: true,
|
|
1039
|
+
monitorSteps: true,
|
|
1040
|
+
monitorTemplateId: true,
|
|
1041
|
+
autoProvisionedNetworkDeviceId: true,
|
|
1042
|
+
},
|
|
1043
|
+
props: { isRoot: true },
|
|
1044
|
+
});
|
|
1045
|
+
if (createdMeanwhile) {
|
|
1046
|
+
this.recordExistingMonitor(data.existingMonitors, createdMeanwhile);
|
|
1047
|
+
if (data.existingMonitors.autoProvisionedKeys.has(key)) {
|
|
1048
|
+
data.result.monitorsSkippedAlreadyExisting++;
|
|
1049
|
+
continue;
|
|
1050
|
+
}
|
|
1051
|
+
}
|
|
1052
|
+
data.result.monitorsFailed++;
|
|
1053
|
+
logger.error(`Auto-import: could not create monitor from template ${templateId} for Network Device ${networkDeviceId.toString()} (${data.host.ipAddress}): ${error}`, { projectId: data.projectId.toString() });
|
|
1054
|
+
}
|
|
1055
|
+
}
|
|
1056
|
+
return false;
|
|
1057
|
+
}
|
|
572
1058
|
/*
|
|
573
1059
|
* One host -> one device, with the collision protocol the estate needs:
|
|
574
1060
|
*
|
|
@@ -582,7 +1068,7 @@ class NetworkDeviceAutoImportRuleEngineServiceClass {
|
|
|
582
1068
|
*/
|
|
583
1069
|
async createDeviceForHost(data) {
|
|
584
1070
|
var _a;
|
|
585
|
-
data.attempts.
|
|
1071
|
+
data.attempts.deviceCount++;
|
|
586
1072
|
const attemptCreate = async (name) => {
|
|
587
1073
|
const device = buildNetworkDeviceFromDiscoveredHost({
|
|
588
1074
|
projectId: data.projectId,
|
|
@@ -597,15 +1083,17 @@ class NetworkDeviceAutoImportRuleEngineServiceClass {
|
|
|
597
1083
|
*/
|
|
598
1084
|
autoApplyVendorHealthTemplate: true,
|
|
599
1085
|
});
|
|
600
|
-
await NetworkDeviceService.create({
|
|
1086
|
+
const created = await NetworkDeviceService.create({
|
|
601
1087
|
data: device,
|
|
602
1088
|
props: {
|
|
603
1089
|
isRoot: true,
|
|
604
1090
|
},
|
|
605
1091
|
});
|
|
1092
|
+
return created || device;
|
|
606
1093
|
};
|
|
1094
|
+
let createdDevice;
|
|
607
1095
|
try {
|
|
608
|
-
await attemptCreate();
|
|
1096
|
+
createdDevice = await attemptCreate();
|
|
609
1097
|
}
|
|
610
1098
|
catch (firstError) {
|
|
611
1099
|
const registeredMeanwhile = await NetworkDeviceService.findOneBy({
|
|
@@ -613,27 +1101,33 @@ class NetworkDeviceAutoImportRuleEngineServiceClass {
|
|
|
613
1101
|
projectId: data.projectId,
|
|
614
1102
|
hostname: data.host.ipAddress,
|
|
615
1103
|
},
|
|
616
|
-
select: {
|
|
1104
|
+
select: {
|
|
1105
|
+
_id: true,
|
|
1106
|
+
projectId: true,
|
|
1107
|
+
name: true,
|
|
1108
|
+
hostname: true,
|
|
1109
|
+
monitoringMethod: true,
|
|
1110
|
+
},
|
|
617
1111
|
props: { isRoot: true },
|
|
618
1112
|
});
|
|
619
1113
|
if (registeredMeanwhile) {
|
|
620
1114
|
// Skipped is a sub-bucket of matched, same as the other run results.
|
|
621
1115
|
data.result.hostsSkippedAlreadyRegistered++;
|
|
622
|
-
data.
|
|
623
|
-
return false;
|
|
1116
|
+
data.existingDevices.set(data.host.ipAddress, registeredMeanwhile);
|
|
1117
|
+
return { device: registeredMeanwhile, wasCreated: false };
|
|
624
1118
|
}
|
|
625
1119
|
try {
|
|
626
|
-
await attemptCreate(buildFallbackDeviceName(data.host));
|
|
1120
|
+
createdDevice = await attemptCreate(buildFallbackDeviceName(data.host));
|
|
627
1121
|
}
|
|
628
1122
|
catch (secondError) {
|
|
629
1123
|
data.result.devicesFailed++;
|
|
630
1124
|
logger.error(`Auto-import: could not create a device for ${data.host.ipAddress} (scan ${(_a = data.scan.id) === null || _a === void 0 ? void 0 : _a.toString()}): ${firstError} / retry: ${secondError}`, { projectId: data.projectId.toString() });
|
|
631
|
-
return false;
|
|
1125
|
+
return { device: null, wasCreated: false };
|
|
632
1126
|
}
|
|
633
1127
|
}
|
|
634
1128
|
data.result.devicesCreated++;
|
|
635
|
-
data.
|
|
636
|
-
return true;
|
|
1129
|
+
data.existingDevices.set(data.host.ipAddress, createdDevice);
|
|
1130
|
+
return { device: createdDevice, wasCreated: true };
|
|
637
1131
|
}
|
|
638
1132
|
/*
|
|
639
1133
|
* The one write this engine makes to the scan row: retire the consumed
|