@oneuptime/common 12.0.25 → 12.0.27
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/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 -3
- 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 -0
- 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/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/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/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/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/BaseAPIUpdateDateColumns.test.ts +154 -0
- 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/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/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/HostnameAuthorityParsing.test.ts +1 -0
- package/Tests/Types/API/URLMailtoQueryString.test.ts +439 -0
- package/Tests/Types/API/URLQueryString.test.ts +481 -0
- package/Tests/Types/API/URLRouteQuerySeparation.test.ts +491 -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/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/Components/LogsHistogramDragTooltip.test.tsx +393 -0
- package/Tests/UI/Components/LogsViewerHistogramZoom.test.tsx +248 -0
- package/Tests/UI/Components/TelemetryHistogramDragTooltip.test.tsx +205 -0
- package/Tests/UI/Components/UseHistogramZoom.test.tsx +262 -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/Types/API/URL.ts +100 -28
- 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/SourceMap.ts +56 -0
- package/Types/Telemetry/TelemetrySearchQuery.ts +949 -0
- package/Types/Workspace/NotificationRules/NotificationRuleCondition.ts +12 -1
- package/UI/Components/Charts/Utils/useHistogramZoom.ts +101 -0
- package/UI/Components/Dictionary/DictionaryFilterOperator.ts +83 -0
- package/UI/Components/Icon/Icon.tsx +28 -1
- package/UI/Components/LogsViewer/LogsViewer.tsx +19 -3
- package/UI/Components/LogsViewer/components/LogSearchBar.tsx +26 -4
- package/UI/Components/LogsViewer/components/LogSearchHelp.tsx +34 -16
- package/UI/Components/LogsViewer/components/LogsHistogram.tsx +52 -1
- package/UI/Components/TelemetryViewer/TelemetryViewer.tsx +18 -2
- package/UI/Components/TelemetryViewer/components/TelemetryHistogram.tsx +52 -1
- 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/build/dist/Models/AnalyticsModels/Index.js +2 -0
- package/build/dist/Models/AnalyticsModels/Index.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 +8 -1
- 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 -0
- 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/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/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/Types/API/URL.js +88 -27
- 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/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/Charts/Utils/useHistogramZoom.js +47 -0
- package/build/dist/UI/Components/Charts/Utils/useHistogramZoom.js.map +1 -0
- 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/LogsViewer.js +15 -3
- package/build/dist/UI/Components/LogsViewer/LogsViewer.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/LogsViewer/components/LogsHistogram.js +33 -5
- package/build/dist/UI/Components/LogsViewer/components/LogsHistogram.js.map +1 -1
- package/build/dist/UI/Components/TelemetryViewer/TelemetryViewer.js +14 -2
- package/build/dist/UI/Components/TelemetryViewer/TelemetryViewer.js.map +1 -1
- package/build/dist/UI/Components/TelemetryViewer/components/TelemetryHistogram.js +33 -5
- package/build/dist/UI/Components/TelemetryViewer/components/TelemetryHistogram.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/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
|
@@ -14,16 +14,22 @@ import NetworkDeviceOwnerRuleEngineService from "./NetworkDeviceOwnerRuleEngineS
|
|
|
14
14
|
import NetworkSiteAssignmentRuleService from "./NetworkSiteAssignmentRuleService";
|
|
15
15
|
import NetworkSiteService from "./NetworkSiteService";
|
|
16
16
|
import Model from "../../Models/DatabaseModels/NetworkDevice";
|
|
17
|
+
import Monitor from "../../Models/DatabaseModels/Monitor";
|
|
17
18
|
import CaptureSpan from "../Utils/Telemetry/CaptureSpan";
|
|
18
19
|
import logger from "../Utils/Logger";
|
|
19
20
|
import LIMIT_MAX, { LIMIT_PER_PROJECT } from "../../Types/Database/LimitMax";
|
|
20
21
|
import SortOrder from "../../Types/BaseDatabase/SortOrder";
|
|
21
22
|
import BadDataException from "../../Types/Exception/BadDataException";
|
|
23
|
+
import NotAuthorizedException from "../../Types/Exception/NotAuthorizedException";
|
|
22
24
|
import ObjectID from "../../Types/ObjectID";
|
|
23
25
|
import OneUptimeDate from "../../Types/Date";
|
|
24
26
|
import CidrMatchUtil from "../../Utils/NetworkSite/CidrMatchUtil";
|
|
25
27
|
import { NetworkDeviceMonitoringMethodUtil } from "../../Types/NetworkDevice/NetworkDeviceMonitoringMethod";
|
|
26
28
|
import RelationIdUtil from "../Utils/Database/RelationIdUtil";
|
|
29
|
+
import ModelPermission from "../Types/Database/Permissions/Index";
|
|
30
|
+
import QueryHelper from "../Types/Database/QueryHelper";
|
|
31
|
+
import AggregateResultUtil from "../Types/Database/AggregateResultUtil";
|
|
32
|
+
import { DEVICE_HEALTH_AGGREGATES, DEVICE_HEALTH_GROUP_COLUMNS, DEVICE_HEALTH_GROUP_ORDER, DEVICE_HEALTH_GROUP_COLUMNS_BY_SITE, DEVICE_HEALTH_NOW_PARAMETER, parseDeviceHealthGroup, } from "../Utils/NetworkDevice/DeviceHealthAggregation";
|
|
27
33
|
/*
|
|
28
34
|
* Columns a NetworkSiteAssignmentRule's hostname pattern is matched against.
|
|
29
35
|
* A write to any of them can change which rule wins for the device, so
|
|
@@ -80,6 +86,11 @@ function readMonitorIdFromData(data) {
|
|
|
80
86
|
export const MAX_DEVICES_PER_RULE_RUN = LIMIT_PER_PROJECT;
|
|
81
87
|
// Devices are read in pages so a large estate never lands in memory at once.
|
|
82
88
|
const RULE_RUN_PAGE_SIZE = 1000;
|
|
89
|
+
/*
|
|
90
|
+
* How many addresses one "are these already registered" lookup asks about.
|
|
91
|
+
* Bounded because the list is rendered into the statement as a literal IN.
|
|
92
|
+
*/
|
|
93
|
+
const HOSTNAME_LOOKUP_CHUNK_SIZE = 500;
|
|
83
94
|
/*
|
|
84
95
|
* The identity a rule is matched against. The hostname column holds an IP
|
|
85
96
|
* address or a DNS name depending on how the device got here, so it is passed
|
|
@@ -95,9 +106,481 @@ function toRuleMatchTarget(device) {
|
|
|
95
106
|
name: device.name,
|
|
96
107
|
};
|
|
97
108
|
}
|
|
109
|
+
/*
|
|
110
|
+
* How long "this project has no site-assignment rules at all" is trusted
|
|
111
|
+
* without asking Postgres again.
|
|
112
|
+
*
|
|
113
|
+
* Every successful walk writes `sysName`, an identity column, so
|
|
114
|
+
* onUpdateSuccess re-evaluates the rules for every device that has no site.
|
|
115
|
+
* That rule is correct and stays (see shouldReapplySiteAssignmentRules), but
|
|
116
|
+
* on a project mid-rollout — devices imported, rules not written yet — it is
|
|
117
|
+
* EVERY device, and each one re-read the same empty rule set to conclude
|
|
118
|
+
* nothing: a findOneById plus an uncached findBy per device per poll, i.e.
|
|
119
|
+
* ~160,000 queries per five-minute cycle on an 80,000-device fleet.
|
|
120
|
+
*
|
|
121
|
+
* Ten seconds is measured against the thing a user would actually notice.
|
|
122
|
+
* The earliest a newly saved rule can reach an already-imported device is
|
|
123
|
+
* that device's next poll — five minutes by default — or the rule's "Run
|
|
124
|
+
* now" button, which never consults this cache. Ten seconds is a rounding
|
|
125
|
+
* error against that window, so this can never be the reason a rule looks
|
|
126
|
+
* like it did not take.
|
|
127
|
+
*/
|
|
128
|
+
export const EMPTY_SITE_ASSIGNMENT_RULE_CACHE_TTL_IN_MS = 10 * 1000;
|
|
129
|
+
/*
|
|
130
|
+
* Bounded so an instance serving many projects cannot grow this forever.
|
|
131
|
+
* Only ever holds projects that had NO rules, so in practice it is small.
|
|
132
|
+
*/
|
|
133
|
+
const EMPTY_SITE_ASSIGNMENT_RULE_CACHE_MAX_PROJECTS = 10000;
|
|
134
|
+
/*
|
|
135
|
+
* Remembers ONLY the negative answer: "this project had zero site-assignment
|
|
136
|
+
* rules when we last looked."
|
|
137
|
+
*
|
|
138
|
+
* Deliberately not a cache of the rules themselves. A stale rule set causes a
|
|
139
|
+
* WRONG WRITE — a device assigned to a site by a rule that was edited or
|
|
140
|
+
* deleted seconds ago, and nothing ever moves it back — whereas a stale "no
|
|
141
|
+
* rules" only defers work that the polling interval already defers by
|
|
142
|
+
* minutes. The two failure modes are not comparable, so only the safe half is
|
|
143
|
+
* cached.
|
|
144
|
+
*
|
|
145
|
+
* Every read of the rule set feeds `record`, so the instant any code path in
|
|
146
|
+
* this process observes that the project does have rules, the skip is
|
|
147
|
+
* dropped. Across replicas nothing is invalidated by another replica's write
|
|
148
|
+
* — which is precisely why the TTL, not the invalidation, is the guarantee.
|
|
149
|
+
*/
|
|
150
|
+
export class EmptySiteAssignmentRuleCache {
|
|
151
|
+
constructor(options) {
|
|
152
|
+
var _a, _b, _c;
|
|
153
|
+
this.knownEmptyUntil = new Map();
|
|
154
|
+
this.ttlInMs =
|
|
155
|
+
(_a = options === null || options === void 0 ? void 0 : options.ttlInMs) !== null && _a !== void 0 ? _a : EMPTY_SITE_ASSIGNMENT_RULE_CACHE_TTL_IN_MS;
|
|
156
|
+
this.maxProjects =
|
|
157
|
+
(_b = options === null || options === void 0 ? void 0 : options.maxProjects) !== null && _b !== void 0 ? _b : EMPTY_SITE_ASSIGNMENT_RULE_CACHE_MAX_PROJECTS;
|
|
158
|
+
/*
|
|
159
|
+
* Wrapped rather than stored as `Date.now` itself, so moving the clock
|
|
160
|
+
* (a test, or a future injected clock) is actually observed here.
|
|
161
|
+
*/
|
|
162
|
+
this.now =
|
|
163
|
+
(_c = options === null || options === void 0 ? void 0 : options.now) !== null && _c !== void 0 ? _c : (() => {
|
|
164
|
+
return Date.now();
|
|
165
|
+
});
|
|
166
|
+
}
|
|
167
|
+
isKnownEmpty(projectId) {
|
|
168
|
+
const key = projectId.toString();
|
|
169
|
+
const expiresAt = this.knownEmptyUntil.get(key);
|
|
170
|
+
if (expiresAt === undefined) {
|
|
171
|
+
return false;
|
|
172
|
+
}
|
|
173
|
+
if (expiresAt <= this.now()) {
|
|
174
|
+
// Dropped on read, so an idle project's entry does not linger.
|
|
175
|
+
this.knownEmptyUntil.delete(key);
|
|
176
|
+
return false;
|
|
177
|
+
}
|
|
178
|
+
return true;
|
|
179
|
+
}
|
|
180
|
+
record(data) {
|
|
181
|
+
const key = data.projectId.toString();
|
|
182
|
+
if (!data.isEmpty) {
|
|
183
|
+
this.knownEmptyUntil.delete(key);
|
|
184
|
+
return;
|
|
185
|
+
}
|
|
186
|
+
if (this.knownEmptyUntil.size >= this.maxProjects &&
|
|
187
|
+
!this.knownEmptyUntil.has(key)) {
|
|
188
|
+
// Evict the oldest — a Map iterates in insertion order.
|
|
189
|
+
const oldestKey = this.knownEmptyUntil
|
|
190
|
+
.keys()
|
|
191
|
+
.next().value;
|
|
192
|
+
if (oldestKey !== undefined) {
|
|
193
|
+
this.knownEmptyUntil.delete(oldestKey);
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
this.knownEmptyUntil.set(key, this.now() + this.ttlInMs);
|
|
197
|
+
}
|
|
198
|
+
clear() {
|
|
199
|
+
this.knownEmptyUntil.clear();
|
|
200
|
+
}
|
|
201
|
+
}
|
|
98
202
|
export class Service extends DatabaseService {
|
|
99
203
|
constructor() {
|
|
100
204
|
super(Model);
|
|
205
|
+
/*
|
|
206
|
+
* The projects known to have no site-assignment rules. Exposed so tests can
|
|
207
|
+
* reset it between cases, and so a future invalidation hook on
|
|
208
|
+
* NetworkSiteAssignmentRuleService has something to call — note that such a
|
|
209
|
+
* hook only clears the replica that ran the write, which is why the TTL
|
|
210
|
+
* above is what actually bounds staleness.
|
|
211
|
+
*/
|
|
212
|
+
this.emptySiteAssignmentRuleCache = new EmptySiteAssignmentRuleCache();
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* The four numbers in the summary strip above the device list, in one
|
|
216
|
+
* round trip and one SQL statement.
|
|
217
|
+
*
|
|
218
|
+
* The three status counts partition the fleet exactly — `isReachable` is
|
|
219
|
+
* true, false, or NULL — which is what lets the strip agree with the rows
|
|
220
|
+
* underneath it: the Status chip filters on the same column, so clicking a
|
|
221
|
+
* tile opens exactly the devices it counted.
|
|
222
|
+
*
|
|
223
|
+
* `interfacesDown` is a real SUM over the whole fleet. It used to be
|
|
224
|
+
* computed by fetching every device with a down interface and adding them
|
|
225
|
+
* up in the browser, which was not only slow but WRONG past ten thousand
|
|
226
|
+
* such devices — the fetch was capped, so the tile understated the fleet
|
|
227
|
+
* without saying so.
|
|
228
|
+
*/
|
|
229
|
+
async getFleetSummary(data) {
|
|
230
|
+
const rows = await this.aggregateBy({
|
|
231
|
+
query: {
|
|
232
|
+
projectId: data.projectId,
|
|
233
|
+
isArchived: false,
|
|
234
|
+
},
|
|
235
|
+
select: [
|
|
236
|
+
{
|
|
237
|
+
expression: `COUNT(*) FILTER (WHERE "NetworkDevice"."isReachable" = true)`,
|
|
238
|
+
alias: "devicesUp",
|
|
239
|
+
},
|
|
240
|
+
{
|
|
241
|
+
expression: `COUNT(*) FILTER (WHERE "NetworkDevice"."isReachable" = false)`,
|
|
242
|
+
alias: "devicesDown",
|
|
243
|
+
},
|
|
244
|
+
{
|
|
245
|
+
expression: `COUNT(*) FILTER (WHERE "NetworkDevice"."isReachable" IS NULL)`,
|
|
246
|
+
alias: "devicesPending",
|
|
247
|
+
},
|
|
248
|
+
{
|
|
249
|
+
expression: `COALESCE(SUM("NetworkDevice"."interfacesDown"), 0)`,
|
|
250
|
+
alias: "interfacesDown",
|
|
251
|
+
},
|
|
252
|
+
{
|
|
253
|
+
expression: `COUNT(*)`,
|
|
254
|
+
alias: "totalDevices",
|
|
255
|
+
},
|
|
256
|
+
{
|
|
257
|
+
expression: `COUNT(*) FILTER (WHERE "NetworkDevice"."siteId" IS NULL)`,
|
|
258
|
+
alias: "devicesWithoutSite",
|
|
259
|
+
},
|
|
260
|
+
],
|
|
261
|
+
props: data.props,
|
|
262
|
+
});
|
|
263
|
+
const row = rows[0];
|
|
264
|
+
return {
|
|
265
|
+
devicesUp: AggregateResultUtil.toNumber(row, "devicesUp"),
|
|
266
|
+
devicesDown: AggregateResultUtil.toNumber(row, "devicesDown"),
|
|
267
|
+
devicesPending: AggregateResultUtil.toNumber(row, "devicesPending"),
|
|
268
|
+
interfacesDown: AggregateResultUtil.toNumber(row, "interfacesDown"),
|
|
269
|
+
totalDevices: AggregateResultUtil.toNumber(row, "totalDevices"),
|
|
270
|
+
devicesWithoutSite: AggregateResultUtil.toNumber(row, "devicesWithoutSite"),
|
|
271
|
+
};
|
|
272
|
+
}
|
|
273
|
+
/**
|
|
274
|
+
* How many devices of each vendor, biggest first.
|
|
275
|
+
*
|
|
276
|
+
* `GROUP BY vendor` in the database rather than a Map built over every
|
|
277
|
+
* device row in the browser. Unenriched devices — no SNMP walk yet, so no
|
|
278
|
+
* vendor — group under the empty string here and are named by the caller,
|
|
279
|
+
* because "Unknown" is a label rather than a fact about the row.
|
|
280
|
+
*/
|
|
281
|
+
async getVendorBreakdown(data) {
|
|
282
|
+
const rows = await this.aggregateBy({
|
|
283
|
+
query: {
|
|
284
|
+
projectId: data.projectId,
|
|
285
|
+
isArchived: false,
|
|
286
|
+
},
|
|
287
|
+
groupBy: [
|
|
288
|
+
{
|
|
289
|
+
expression: `COALESCE(NULLIF(TRIM("NetworkDevice"."vendor"), ''), '')`,
|
|
290
|
+
alias: "vendor",
|
|
291
|
+
},
|
|
292
|
+
],
|
|
293
|
+
select: [
|
|
294
|
+
{
|
|
295
|
+
expression: `COUNT(*)`,
|
|
296
|
+
alias: "deviceCount",
|
|
297
|
+
},
|
|
298
|
+
],
|
|
299
|
+
orderBy: [
|
|
300
|
+
// Ties break by name so the list is stable across refreshes.
|
|
301
|
+
{ expression: `"deviceCount"`, sortOrder: SortOrder.Descending },
|
|
302
|
+
{ expression: `"vendor"`, sortOrder: SortOrder.Ascending },
|
|
303
|
+
],
|
|
304
|
+
limit: data.limit,
|
|
305
|
+
props: data.props,
|
|
306
|
+
});
|
|
307
|
+
return rows.map((row) => {
|
|
308
|
+
return {
|
|
309
|
+
vendor: AggregateResultUtil.toStringOrNull(row, "vendor") || "",
|
|
310
|
+
count: AggregateResultUtil.toNumber(row, "deviceCount"),
|
|
311
|
+
};
|
|
312
|
+
});
|
|
313
|
+
}
|
|
314
|
+
/**
|
|
315
|
+
* Which of these addresses already have a device in this project.
|
|
316
|
+
*
|
|
317
|
+
* Answers "is 10.4.2.17 already registered" for the few hundred hosts a
|
|
318
|
+
* discovery sweep actually found, rather than by loading every hostname in
|
|
319
|
+
* the project into a Set and asking the Set.
|
|
320
|
+
*
|
|
321
|
+
* That walk was not just expensive — it was WRONG in the exact scenario it
|
|
322
|
+
* served. It paged `ORDER BY createdAt`, and a bulk discovery import stamps
|
|
323
|
+
* every device it creates with the same `createdAt`: on a fleet of 80,000
|
|
324
|
+
* devices, all 80,000 shared one value, so `LIMIT 10000 OFFSET n` over a
|
|
325
|
+
* single-valued sort key returned an arbitrary, non-deterministic slice per
|
|
326
|
+
* call. Pages overlapped and skipped, and a skipped hostname reads as "not
|
|
327
|
+
* registered" — which creates a duplicate device, the very thing the paging
|
|
328
|
+
* was added to prevent.
|
|
329
|
+
*
|
|
330
|
+
* `hostname` is indexed, so each chunk here is an index lookup.
|
|
331
|
+
*/
|
|
332
|
+
async getRegisteredHostnames(data) {
|
|
333
|
+
return new Set((await this.getDevicesByHostnames({
|
|
334
|
+
projectId: data.projectId,
|
|
335
|
+
hostnames: data.hostnames,
|
|
336
|
+
select: { hostname: true },
|
|
337
|
+
props: data.props,
|
|
338
|
+
})).keys());
|
|
339
|
+
}
|
|
340
|
+
/**
|
|
341
|
+
* The devices at these addresses, keyed by hostname.
|
|
342
|
+
*
|
|
343
|
+
* The row-returning form of `getRegisteredHostnames`, for callers that need
|
|
344
|
+
* more than "does it exist" — the auto-import engine reads back the device's
|
|
345
|
+
* id and monitoring method to decide whether it also needs a monitor
|
|
346
|
+
* provisioned. Same chunked, indexed lookup; same reason for existing.
|
|
347
|
+
*/
|
|
348
|
+
async getDevicesByHostnames(data) {
|
|
349
|
+
const registered = new Map();
|
|
350
|
+
const wanted = Array.from(new Set(data.hostnames.filter((hostname) => {
|
|
351
|
+
return Boolean(hostname);
|
|
352
|
+
})));
|
|
353
|
+
/*
|
|
354
|
+
* Chunked, because the whole list becomes a literal `IN (...)` in the
|
|
355
|
+
* statement text. A scan may cover tens of thousands of addresses
|
|
356
|
+
* (ScanTargetUtil.MAX_SCAN_HOSTS), and a single IN list that long costs
|
|
357
|
+
* more to parse and plan than the lookups it saves.
|
|
358
|
+
*/
|
|
359
|
+
for (let offset = 0; offset < wanted.length; offset += HOSTNAME_LOOKUP_CHUNK_SIZE) {
|
|
360
|
+
const chunk = wanted.slice(offset, offset + HOSTNAME_LOOKUP_CHUNK_SIZE);
|
|
361
|
+
const found = await this.findBy({
|
|
362
|
+
query: {
|
|
363
|
+
projectId: data.projectId,
|
|
364
|
+
hostname: QueryHelper.any(chunk),
|
|
365
|
+
},
|
|
366
|
+
select: Object.assign(Object.assign({}, data.select), { hostname: true }),
|
|
367
|
+
sort: {},
|
|
368
|
+
limit: LIMIT_MAX,
|
|
369
|
+
skip: 0,
|
|
370
|
+
props: data.props,
|
|
371
|
+
});
|
|
372
|
+
for (const device of found) {
|
|
373
|
+
if (device.hostname) {
|
|
374
|
+
registered.set(device.hostname, device);
|
|
375
|
+
}
|
|
376
|
+
}
|
|
377
|
+
}
|
|
378
|
+
return registered;
|
|
379
|
+
}
|
|
380
|
+
/**
|
|
381
|
+
* How many live devices are attached to each site in the project — one row
|
|
382
|
+
* per site that has any, counted in the database.
|
|
383
|
+
*
|
|
384
|
+
* The Sites page's hierarchy tree used to work this out by fetching every
|
|
385
|
+
* device in the project and tallying `siteId` in the browser. Capped at
|
|
386
|
+
* LIMIT_PER_PROJECT, that is not slow so much as WRONG: on a fleet of
|
|
387
|
+
* 80,000 devices across 1,188 sites it returned an arbitrary 10,000 of them
|
|
388
|
+
* — no ORDER BY, so which 10,000 was up to Postgres — and every store in the
|
|
389
|
+
* tree read "8 devices" when it had 65.
|
|
390
|
+
*
|
|
391
|
+
* Sites with no devices are simply absent, which is what the caller's
|
|
392
|
+
* `count || 0` already assumed.
|
|
393
|
+
*/
|
|
394
|
+
async getDeviceCountsBySite(data) {
|
|
395
|
+
const rows = await this.aggregateBy({
|
|
396
|
+
query: {
|
|
397
|
+
projectId: data.projectId,
|
|
398
|
+
isArchived: false,
|
|
399
|
+
siteId: QueryHelper.notNull(),
|
|
400
|
+
},
|
|
401
|
+
groupBy: [
|
|
402
|
+
{
|
|
403
|
+
expression: `"NetworkDevice"."siteId"`,
|
|
404
|
+
alias: "siteId",
|
|
405
|
+
},
|
|
406
|
+
],
|
|
407
|
+
select: [
|
|
408
|
+
{
|
|
409
|
+
expression: `COUNT(*)`,
|
|
410
|
+
alias: "deviceCount",
|
|
411
|
+
},
|
|
412
|
+
],
|
|
413
|
+
props: data.props,
|
|
414
|
+
});
|
|
415
|
+
const counts = [];
|
|
416
|
+
for (const row of rows) {
|
|
417
|
+
const siteId = AggregateResultUtil.toStringOrNull(row, "siteId");
|
|
418
|
+
if (!siteId) {
|
|
419
|
+
continue;
|
|
420
|
+
}
|
|
421
|
+
counts.push({
|
|
422
|
+
siteId: siteId,
|
|
423
|
+
deviceCount: AggregateResultUtil.toNumber(row, "deviceCount"),
|
|
424
|
+
});
|
|
425
|
+
}
|
|
426
|
+
return counts;
|
|
427
|
+
}
|
|
428
|
+
/**
|
|
429
|
+
* Device health, bucketed by the discriminating columns and broken down by
|
|
430
|
+
* site — the input a per-site rollup needs, without reading the devices.
|
|
431
|
+
*
|
|
432
|
+
* The buckets are NOT verdicts: they are the raw facts
|
|
433
|
+
* `DeviceHealthStateUtil` classifies, so the caller runs the one real
|
|
434
|
+
* classifier over a few hundred buckets instead of eighty thousand rows.
|
|
435
|
+
* See DeviceHealthAggregation for why the rule is not reimplemented in SQL.
|
|
436
|
+
*/
|
|
437
|
+
async getHealthGroups(data) {
|
|
438
|
+
const query = {
|
|
439
|
+
projectId: data.projectId,
|
|
440
|
+
isArchived: false,
|
|
441
|
+
};
|
|
442
|
+
if (data.onlyAttachedToSite) {
|
|
443
|
+
query.siteId = QueryHelper.notNull();
|
|
444
|
+
}
|
|
445
|
+
const rows = await this.aggregateBy({
|
|
446
|
+
query: query,
|
|
447
|
+
groupBy: data.groupBySite
|
|
448
|
+
? DEVICE_HEALTH_GROUP_COLUMNS_BY_SITE
|
|
449
|
+
: DEVICE_HEALTH_GROUP_COLUMNS,
|
|
450
|
+
select: DEVICE_HEALTH_AGGREGATES,
|
|
451
|
+
orderBy: DEVICE_HEALTH_GROUP_ORDER,
|
|
452
|
+
parameters: {
|
|
453
|
+
[DEVICE_HEALTH_NOW_PARAMETER]: data.now,
|
|
454
|
+
},
|
|
455
|
+
props: data.props,
|
|
456
|
+
});
|
|
457
|
+
return rows.map(parseDeviceHealthGroup);
|
|
458
|
+
}
|
|
459
|
+
/**
|
|
460
|
+
* Health buckets for the devices attached to a specific set of sites — the
|
|
461
|
+
* subtree read the persisted rollup engine runs on.
|
|
462
|
+
*
|
|
463
|
+
* Not broken down by site: the caller wants one verdict for the whole
|
|
464
|
+
* subtree, so bucketing across all of it produces the fewest rows that can
|
|
465
|
+
* still answer the question.
|
|
466
|
+
*/
|
|
467
|
+
async getHealthGroupsForSites(data) {
|
|
468
|
+
if (data.siteIds.length === 0) {
|
|
469
|
+
return [];
|
|
470
|
+
}
|
|
471
|
+
const rows = await this.aggregateBy({
|
|
472
|
+
query: {
|
|
473
|
+
projectId: data.projectId,
|
|
474
|
+
siteId: QueryHelper.any(data.siteIds),
|
|
475
|
+
isArchived: false,
|
|
476
|
+
},
|
|
477
|
+
groupBy: data.groupBySite
|
|
478
|
+
? DEVICE_HEALTH_GROUP_COLUMNS_BY_SITE
|
|
479
|
+
: DEVICE_HEALTH_GROUP_COLUMNS,
|
|
480
|
+
select: DEVICE_HEALTH_AGGREGATES,
|
|
481
|
+
orderBy: DEVICE_HEALTH_GROUP_ORDER,
|
|
482
|
+
parameters: {
|
|
483
|
+
[DEVICE_HEALTH_NOW_PARAMETER]: data.now,
|
|
484
|
+
},
|
|
485
|
+
props: data.props,
|
|
486
|
+
});
|
|
487
|
+
return rows.map(parseDeviceHealthGroup);
|
|
488
|
+
}
|
|
489
|
+
/*
|
|
490
|
+
* The provenance FK uses RESTRICT as a final race backstop: PostgreSQL must
|
|
491
|
+
* never silently remove an active monitor with its device. An ordinary
|
|
492
|
+
* service deletion therefore authorizes and resolves the exact device rows
|
|
493
|
+
* first, then deletes their automatic monitors through MonitorService so
|
|
494
|
+
* Monitor delete permissions, workspace cleanup, workflows, audit,
|
|
495
|
+
* realtime, and billing hooks all run before the devices are removed.
|
|
496
|
+
*/
|
|
497
|
+
async onBeforeDelete(deleteBy) {
|
|
498
|
+
const authorizedQuery = await ModelPermission.checkDeleteQueryPermission(Model, deleteBy.query, deleteBy.props);
|
|
499
|
+
const devices = await this.findBy({
|
|
500
|
+
query: authorizedQuery,
|
|
501
|
+
select: {
|
|
502
|
+
_id: true,
|
|
503
|
+
projectId: true,
|
|
504
|
+
},
|
|
505
|
+
limit: deleteBy.limit,
|
|
506
|
+
skip: deleteBy.skip,
|
|
507
|
+
props: { isRoot: true },
|
|
508
|
+
});
|
|
509
|
+
const countAutomaticMonitors = async (query) => {
|
|
510
|
+
return (await MonitorService.countBy({
|
|
511
|
+
query,
|
|
512
|
+
props: { isRoot: true },
|
|
513
|
+
})).toNumber();
|
|
514
|
+
};
|
|
515
|
+
const cleanupPlans = [];
|
|
516
|
+
/*
|
|
517
|
+
* Preflight every device in the bulk request before deleting the first
|
|
518
|
+
* monitor. Otherwise a later inaccessible device could abort the request
|
|
519
|
+
* after earlier devices had already lost their automatic monitors.
|
|
520
|
+
*/
|
|
521
|
+
for (const device of devices) {
|
|
522
|
+
if (!device.id || !device.projectId) {
|
|
523
|
+
continue;
|
|
524
|
+
}
|
|
525
|
+
const automaticMonitorQuery = {
|
|
526
|
+
projectId: device.projectId,
|
|
527
|
+
autoProvisionedNetworkDeviceId: device.id,
|
|
528
|
+
};
|
|
529
|
+
const monitorDeleteProps = Object.assign(Object.assign({}, deleteBy.props), { tenantId: device.projectId });
|
|
530
|
+
const monitorCount = await countAutomaticMonitors(automaticMonitorQuery);
|
|
531
|
+
if (monitorCount === 0) {
|
|
532
|
+
continue;
|
|
533
|
+
}
|
|
534
|
+
/*
|
|
535
|
+
* Prove access BEFORE deleting anything. Without this preflight an
|
|
536
|
+
* access-control query could delete only the monitors visible to the
|
|
537
|
+
* caller before the RESTRICT constraint rejects the device deletion,
|
|
538
|
+
* leaving a partially cleaned-up request. The authorized query is a
|
|
539
|
+
* subset of automaticMonitorQuery, so equal counts prove that it covers
|
|
540
|
+
* the full set at this instant.
|
|
541
|
+
*/
|
|
542
|
+
const authorizedMonitorQuery = await ModelPermission.checkDeleteQueryPermission(Monitor, automaticMonitorQuery, monitorDeleteProps);
|
|
543
|
+
const authorizedMonitorCount = await countAutomaticMonitors(authorizedMonitorQuery);
|
|
544
|
+
if (authorizedMonitorCount !== monitorCount) {
|
|
545
|
+
throw new NotAuthorizedException("You do not have permission to delete every auto-provisioned monitor linked to this Network Device.");
|
|
546
|
+
}
|
|
547
|
+
cleanupPlans.push({
|
|
548
|
+
automaticMonitorQuery,
|
|
549
|
+
monitorDeleteProps,
|
|
550
|
+
monitorCount,
|
|
551
|
+
});
|
|
552
|
+
}
|
|
553
|
+
for (const cleanupPlan of cleanupPlans) {
|
|
554
|
+
/*
|
|
555
|
+
* LIMIT_MAX is a per-service-call cap, not a lifecycle cap. Always
|
|
556
|
+
* delete from offset zero because each successful batch shrinks the
|
|
557
|
+
* result set. Recount as root after every batch: a permission change or
|
|
558
|
+
* concurrent inaccessible insert must fail closed, with the FK's
|
|
559
|
+
* RESTRICT policy remaining the last guard before device deletion.
|
|
560
|
+
*/
|
|
561
|
+
let remainingMonitorCount = cleanupPlan.monitorCount;
|
|
562
|
+
while (remainingMonitorCount > 0) {
|
|
563
|
+
await MonitorService.deleteBy({
|
|
564
|
+
query: cleanupPlan.automaticMonitorQuery,
|
|
565
|
+
limit: LIMIT_MAX,
|
|
566
|
+
skip: 0,
|
|
567
|
+
props: cleanupPlan.monitorDeleteProps,
|
|
568
|
+
});
|
|
569
|
+
const previousMonitorCount = remainingMonitorCount;
|
|
570
|
+
remainingMonitorCount = await countAutomaticMonitors(cleanupPlan.automaticMonitorQuery);
|
|
571
|
+
if (remainingMonitorCount >= previousMonitorCount) {
|
|
572
|
+
throw new NotAuthorizedException("Could not delete every auto-provisioned monitor linked to this Network Device.");
|
|
573
|
+
}
|
|
574
|
+
}
|
|
575
|
+
}
|
|
576
|
+
return {
|
|
577
|
+
deleteBy: Object.assign(Object.assign({}, deleteBy), { query: {
|
|
578
|
+
_id: QueryHelper.any(devices.flatMap((device) => {
|
|
579
|
+
return device.id ? [device.id] : [];
|
|
580
|
+
})),
|
|
581
|
+
}, skip: 0 }),
|
|
582
|
+
carryForward: null,
|
|
583
|
+
};
|
|
101
584
|
}
|
|
102
585
|
/*
|
|
103
586
|
* The FK behind siteId only requires the NetworkSite row to exist, not that
|
|
@@ -522,7 +1005,24 @@ export class Service extends DatabaseService {
|
|
|
522
1005
|
!this.shouldReapplySiteAssignmentRules(previousDevice, onUpdate.updateBy.data)) {
|
|
523
1006
|
continue;
|
|
524
1007
|
}
|
|
525
|
-
|
|
1008
|
+
/*
|
|
1009
|
+
* The previous snapshot already carries the device's project, so
|
|
1010
|
+
* hand it over: it lets a project with no rules at all skip both
|
|
1011
|
+
* the device read and the rule read, which is the whole cost of
|
|
1012
|
+
* this branch for a fleet that has not been given rules yet.
|
|
1013
|
+
*
|
|
1014
|
+
* ...but ONLY for a device with no site, and that distinction is
|
|
1015
|
+
* the whole safety of the skip. Those devices are re-evaluated on
|
|
1016
|
+
* every poll, so a skip there defers work by one cycle and the next
|
|
1017
|
+
* poll picks it up. A device that already HAS a site is re-evaluated
|
|
1018
|
+
* only when its identity actually changed — a one-shot event, not a
|
|
1019
|
+
* retry. Skipping that is not a deferral, it is a LOSS: the rename
|
|
1020
|
+
* never happens again, the device keeps its old site indefinitely,
|
|
1021
|
+
* and nothing says so. Ten seconds of staleness is a fine price for
|
|
1022
|
+
* a deferral and an unacceptable one for a loss, so the identity
|
|
1023
|
+
* path always reads the rules.
|
|
1024
|
+
*/
|
|
1025
|
+
await this.applySiteAssignmentRulesToDevice(deviceId, (previousDevice === null || previousDevice === void 0 ? void 0 : previousDevice.siteId) ? undefined : previousDevice === null || previousDevice === void 0 ? void 0 : previousDevice.projectId);
|
|
526
1026
|
}
|
|
527
1027
|
}
|
|
528
1028
|
}
|
|
@@ -565,7 +1065,23 @@ export class Service extends DatabaseService {
|
|
|
565
1065
|
* goes through updateOneById so onUpdateSuccess refreshes the rollups of
|
|
566
1066
|
* both the old and the new site.
|
|
567
1067
|
*/
|
|
568
|
-
async applySiteAssignmentRulesToDevice(deviceId
|
|
1068
|
+
async applySiteAssignmentRulesToDevice(deviceId,
|
|
1069
|
+
/*
|
|
1070
|
+
* The device's project, when the caller already knows it AND the call is
|
|
1071
|
+
* one that will happen again if it is skipped. Purely an optimisation,
|
|
1072
|
+
* and only ever a SKIP: it lets the known-empty check run before the
|
|
1073
|
+
* device read, so a project with no rules costs nothing per poll.
|
|
1074
|
+
*
|
|
1075
|
+
* Leaving it out gets the unconditional, always-fresh path, and two
|
|
1076
|
+
* callers deliberately do: device creation (a rule saved moments ago must
|
|
1077
|
+
* apply to the device being imported right now) and the identity-change
|
|
1078
|
+
* branch of onUpdateSuccess (a one-shot event — see the note there).
|
|
1079
|
+
*/
|
|
1080
|
+
projectId) {
|
|
1081
|
+
if (projectId &&
|
|
1082
|
+
this.emptySiteAssignmentRuleCache.isKnownEmpty(projectId)) {
|
|
1083
|
+
return;
|
|
1084
|
+
}
|
|
569
1085
|
const device = await this.findOneById({
|
|
570
1086
|
id: deviceId,
|
|
571
1087
|
select: {
|
|
@@ -601,6 +1117,16 @@ export class Service extends DatabaseService {
|
|
|
601
1117
|
isRoot: true,
|
|
602
1118
|
},
|
|
603
1119
|
});
|
|
1120
|
+
/*
|
|
1121
|
+
* Feed the answer back either way: an empty set starts (or renews) the
|
|
1122
|
+
* skip, and a non-empty one cancels it immediately — so a project that
|
|
1123
|
+
* gains its first rule stops being skipped on this replica as soon as
|
|
1124
|
+
* anything here looks at the rules, without waiting for the TTL.
|
|
1125
|
+
*/
|
|
1126
|
+
this.emptySiteAssignmentRuleCache.record({
|
|
1127
|
+
projectId: device.projectId,
|
|
1128
|
+
isEmpty: rules.length === 0,
|
|
1129
|
+
});
|
|
604
1130
|
if (rules.length === 0) {
|
|
605
1131
|
return;
|
|
606
1132
|
}
|
|
@@ -674,6 +1200,16 @@ export class Service extends DatabaseService {
|
|
|
674
1200
|
isRoot: true,
|
|
675
1201
|
},
|
|
676
1202
|
});
|
|
1203
|
+
/*
|
|
1204
|
+
* Read fresh above and never from the negative cache: this is the button
|
|
1205
|
+
* an operator presses right after saving a rule, so it must see the rule
|
|
1206
|
+
* it was pressed for. Recording the answer here also means pressing it
|
|
1207
|
+
* lifts any "no rules" skip the poll path had cached for the project.
|
|
1208
|
+
*/
|
|
1209
|
+
this.emptySiteAssignmentRuleCache.record({
|
|
1210
|
+
projectId: data.projectId,
|
|
1211
|
+
isEmpty: rules.length === 0,
|
|
1212
|
+
});
|
|
677
1213
|
const rule = rules.find((candidate) => {
|
|
678
1214
|
var _a;
|
|
679
1215
|
return ((_a = candidate._id) === null || _a === void 0 ? void 0 : _a.toString()) === data.ruleId.toString();
|
|
@@ -838,13 +1374,18 @@ export class Service extends DatabaseService {
|
|
|
838
1374
|
-- A monitor-backed device has no credentials to walk with. NULL is
|
|
839
1375
|
-- every device created before the column existed: those are SNMP.
|
|
840
1376
|
AND (nd."monitoringMethod" IS NULL OR nd."monitoringMethod" <> 'Monitor')
|
|
841
|
-
AND
|
|
1377
|
+
AND nd."nextPollAt" <= $2
|
|
842
1378
|
AND p."deletedAt" IS NULL
|
|
843
1379
|
AND (p."paymentProviderSubscriptionStatus" IS NULL
|
|
844
1380
|
OR p."paymentProviderSubscriptionStatus" IN ('active', 'trialing'))
|
|
845
1381
|
AND (p."paymentProviderMeteredSubscriptionStatus" IS NULL
|
|
846
1382
|
OR p."paymentProviderMeteredSubscriptionStatus" IN ('active', 'trialing'))
|
|
847
|
-
|
|
1383
|
+
-- Plain ASC, which is the order the (probeId, nextPollAt) btree is
|
|
1384
|
+
-- already in, so this is a range scan that stops at LIMIT rather than
|
|
1385
|
+
-- a scan-and-sort of the probe's whole slice of the fleet. See the
|
|
1386
|
+
-- column's NOT NULL note on the model for why there are no NULLs to
|
|
1387
|
+
-- order around any more.
|
|
1388
|
+
ORDER BY nd."nextPollAt" ASC
|
|
848
1389
|
LIMIT $3
|
|
849
1390
|
FOR UPDATE OF nd SKIP LOCKED
|
|
850
1391
|
`;
|
|
@@ -901,6 +1442,54 @@ export class Service extends DatabaseService {
|
|
|
901
1442
|
return claimedIds;
|
|
902
1443
|
}
|
|
903
1444
|
}
|
|
1445
|
+
__decorate([
|
|
1446
|
+
CaptureSpan(),
|
|
1447
|
+
__metadata("design:type", Function),
|
|
1448
|
+
__metadata("design:paramtypes", [Object]),
|
|
1449
|
+
__metadata("design:returntype", Promise)
|
|
1450
|
+
], Service.prototype, "getFleetSummary", null);
|
|
1451
|
+
__decorate([
|
|
1452
|
+
CaptureSpan(),
|
|
1453
|
+
__metadata("design:type", Function),
|
|
1454
|
+
__metadata("design:paramtypes", [Object]),
|
|
1455
|
+
__metadata("design:returntype", Promise)
|
|
1456
|
+
], Service.prototype, "getVendorBreakdown", null);
|
|
1457
|
+
__decorate([
|
|
1458
|
+
CaptureSpan(),
|
|
1459
|
+
__metadata("design:type", Function),
|
|
1460
|
+
__metadata("design:paramtypes", [Object]),
|
|
1461
|
+
__metadata("design:returntype", Promise)
|
|
1462
|
+
], Service.prototype, "getRegisteredHostnames", null);
|
|
1463
|
+
__decorate([
|
|
1464
|
+
CaptureSpan(),
|
|
1465
|
+
__metadata("design:type", Function),
|
|
1466
|
+
__metadata("design:paramtypes", [Object]),
|
|
1467
|
+
__metadata("design:returntype", Promise)
|
|
1468
|
+
], Service.prototype, "getDevicesByHostnames", null);
|
|
1469
|
+
__decorate([
|
|
1470
|
+
CaptureSpan(),
|
|
1471
|
+
__metadata("design:type", Function),
|
|
1472
|
+
__metadata("design:paramtypes", [Object]),
|
|
1473
|
+
__metadata("design:returntype", Promise)
|
|
1474
|
+
], Service.prototype, "getDeviceCountsBySite", null);
|
|
1475
|
+
__decorate([
|
|
1476
|
+
CaptureSpan(),
|
|
1477
|
+
__metadata("design:type", Function),
|
|
1478
|
+
__metadata("design:paramtypes", [Object]),
|
|
1479
|
+
__metadata("design:returntype", Promise)
|
|
1480
|
+
], Service.prototype, "getHealthGroups", null);
|
|
1481
|
+
__decorate([
|
|
1482
|
+
CaptureSpan(),
|
|
1483
|
+
__metadata("design:type", Function),
|
|
1484
|
+
__metadata("design:paramtypes", [Object]),
|
|
1485
|
+
__metadata("design:returntype", Promise)
|
|
1486
|
+
], Service.prototype, "getHealthGroupsForSites", null);
|
|
1487
|
+
__decorate([
|
|
1488
|
+
CaptureSpan(),
|
|
1489
|
+
__metadata("design:type", Function),
|
|
1490
|
+
__metadata("design:paramtypes", [Object]),
|
|
1491
|
+
__metadata("design:returntype", Promise)
|
|
1492
|
+
], Service.prototype, "onBeforeDelete", null);
|
|
904
1493
|
__decorate([
|
|
905
1494
|
CaptureSpan(),
|
|
906
1495
|
__metadata("design:type", Function),
|
|
@@ -940,7 +1529,7 @@ __decorate([
|
|
|
940
1529
|
__decorate([
|
|
941
1530
|
CaptureSpan(),
|
|
942
1531
|
__metadata("design:type", Function),
|
|
943
|
-
__metadata("design:paramtypes", [ObjectID]),
|
|
1532
|
+
__metadata("design:paramtypes", [ObjectID, Object]),
|
|
944
1533
|
__metadata("design:returntype", Promise)
|
|
945
1534
|
], Service.prototype, "applySiteAssignmentRulesToDevice", null);
|
|
946
1535
|
__decorate([
|