@oneuptime/common 12.0.32 → 12.0.33
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/Span.ts +14 -0
- package/Models/DatabaseModels/EnterpriseLicense.ts +56 -0
- package/Models/DatabaseModels/Index.ts +10 -0
- package/Models/DatabaseModels/Monitor.ts +76 -0
- package/Models/DatabaseModels/NetworkAlertPolicy.ts +690 -0
- package/Models/DatabaseModels/NetworkDevice.ts +176 -1
- package/Models/DatabaseModels/NetworkSite.ts +201 -2
- package/Models/DatabaseModels/NetworkSiteType.ts +102 -3
- package/Models/DatabaseModels/NetworkSnmpCredentialProfile.ts +841 -0
- package/Models/DatabaseModels/TelemetryException.ts +119 -0
- package/Models/DatabaseModels/UserNotificationEmailRollupBatch.ts +334 -0
- package/Models/DatabaseModels/UserNotificationEmailRollupItem.ts +370 -0
- package/Models/DatabaseModels/UserNotificationEmailRollupSetting.ts +282 -0
- package/Server/API/EnterpriseLicenseAPI.ts +391 -64
- package/Server/API/LlmProviderAPI.ts +137 -22
- package/Server/EnvironmentConfig.ts +14 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1790700000000-AddNetworkSiteTypeParentHierarchy.ts +55 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1790900000000-AddEnterpriseLicenseUsageProvenance.ts +31 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1790900000000-AddTelemetryExceptionErrorClass.ts +124 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1791000000000-AddUserNotificationEmailRollup.ts +132 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1791100000000-AddUserNotificationEmailRollupSetting.ts +79 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1791200000000-AddNetworkSnmpCredentialProfilesAndAlertPolicies.ts +191 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +12 -0
- package/Server/Infrastructure/QueueWorker.ts +38 -8
- package/Server/Middleware/BearerTokenAuthorization.ts +12 -0
- package/Server/Middleware/ProjectAuthorization.ts +11 -0
- package/Server/Middleware/SCIMAuthorization.ts +12 -0
- package/Server/Middleware/TelemetryIngest.ts +11 -0
- package/Server/Services/AIBillingService.ts +101 -27
- package/Server/Services/EnterpriseLicenseInstanceService.ts +197 -0
- package/Server/Services/EnterpriseLicenseService.ts +55 -0
- package/Server/Services/Index.ts +10 -0
- package/Server/Services/MonitorService.ts +143 -21
- package/Server/Services/MonitorStatusTimelineService.ts +150 -8
- package/Server/Services/MonitorTemplateService.ts +217 -1
- package/Server/Services/NetworkAlertPolicyEngineService.ts +2159 -0
- package/Server/Services/NetworkAlertPolicyService.ts +944 -0
- package/Server/Services/NetworkDeviceAutoImportRuleEngineService.ts +9 -10
- package/Server/Services/NetworkDeviceAutoImportRuleService.ts +60 -15
- package/Server/Services/NetworkDeviceService.ts +1032 -73
- package/Server/Services/NetworkSiteService.ts +1502 -129
- package/Server/Services/NetworkSiteTypeService.ts +1216 -0
- package/Server/Services/NetworkSnmpCredentialProfileService.ts +238 -0
- package/Server/Services/NotificationService.ts +118 -28
- package/Server/Services/ProjectService.ts +105 -48
- package/Server/Services/StatusPagePrivateUserService.ts +103 -3
- package/Server/Services/UserNotificationEmailRollupBatchService.ts +78 -0
- package/Server/Services/UserNotificationEmailRollupItemService.ts +79 -0
- package/Server/Services/UserNotificationEmailRollupSettingService.ts +113 -0
- package/Server/Services/UserNotificationSettingService.ts +62 -25
- package/Server/Services/UserService.ts +95 -0
- package/Server/Types/Database/QueryHelper.ts +2 -2
- package/Server/Utils/AI/Chat/ObservabilityChatPrompt.ts +14 -3
- package/Server/Utils/AI/SRE/Insights/Detectors/ExceptionSpikeDetector.ts +10 -0
- package/Server/Utils/AI/SRE/Insights/Detectors/NewExceptionDetector.ts +10 -0
- package/Server/Utils/AI/SRE/Insights/InsightTriageRunner.ts +62 -1
- package/Server/Utils/AI/Toolbox/AlertTools.ts +15 -1
- package/Server/Utils/Billing/BillingFailureNoticeThrottle.ts +80 -0
- package/Server/Utils/DataSource/HttpFetch.ts +9 -2
- package/Server/Utils/EmailRollup/EmailRollupConstants.ts +98 -0
- package/Server/Utils/EmailRollup/EmailRollupFlushRunner.ts +872 -0
- package/Server/Utils/EmailRollup/EmailRollupRenderer.ts +781 -0
- package/Server/Utils/EmailRollup/EmailRollupWriter.ts +368 -0
- package/Server/Utils/LLM/LLMService.ts +78 -0
- package/Server/Utils/LogRedaction.ts +8 -0
- package/Server/Utils/Logger.ts +79 -1
- package/Server/Utils/Monitor/Criteria/DatabaseMonitorCriteria.ts +190 -0
- package/Server/Utils/Monitor/Criteria/EvaluateOverTime.ts +9 -2
- package/Server/Utils/Monitor/Criteria/SnmpMonitorCriteria.ts +61 -1
- package/Server/Utils/Monitor/MonitorCriteriaDataExtractor.ts +14 -0
- package/Server/Utils/Monitor/MonitorCriteriaEvaluator.ts +49 -0
- package/Server/Utils/Monitor/MonitorCriteriaObservationBuilder.ts +255 -4
- package/Server/Utils/Monitor/MonitorMetricUtil.ts +41 -0
- package/Server/Utils/Monitor/MonitorTemplateUtil.ts +43 -0
- package/Server/Utils/Monitor/NetworkDeviceHydrationUtil.ts +499 -19
- package/Server/Utils/Monitor/NetworkDeviceMetricUtil.ts +66 -10
- package/Server/Utils/Monitor/NetworkDeviceWalkUtil.ts +238 -44
- package/Server/Utils/Monitor/NetworkInventoryUtil.ts +146 -39
- package/Server/Utils/NetworkDevice/DeviceHealthAggregation.ts +31 -18
- package/Server/Utils/NetworkSite/NetworkSiteHierarchyLock.ts +213 -0
- package/Server/Utils/OutboundUserAgent.ts +152 -0
- package/Server/Utils/StartServer.ts +51 -19
- package/Server/Utils/Telemetry/CaptureSpan.ts +32 -8
- package/Server/Utils/Telemetry/ErrorClassResolver.ts +120 -0
- package/Server/Utils/Telemetry/SpanUtil.ts +33 -0
- package/Server/Utils/Telemetry.ts +198 -51
- package/Server/Views/Partials/SensitiveUrlToken.ejs +140 -0
- package/Tests/App/Dashboard/AddNeighborToMonitoringModal.test.tsx +134 -33
- package/Tests/App/Dashboard/AskAiSuggestedPrompts.test.ts +279 -0
- package/Tests/App/Dashboard/DashboardEditPermissions.test.tsx +517 -0
- package/Tests/App/Dashboard/DashboardVariablesDiscard.test.tsx +26 -0
- package/Tests/App/Dashboard/DeviceStatusHero.test.tsx +588 -0
- package/Tests/App/Dashboard/DiscoveryScanWizardValidation.test.tsx +18 -9
- package/Tests/App/Dashboard/MonitorCreateFromMonitorBackedDevice.test.tsx +632 -0
- package/Tests/App/Dashboard/MonitorRecommendationCreateProgress.test.tsx +682 -0
- package/Tests/App/Dashboard/MonitorTypePicker.test.tsx +4 -2
- package/Tests/App/Dashboard/NetworkDeviceCreateFormMonitorBinding.test.tsx +676 -0
- package/Tests/App/Dashboard/NetworkDeviceCreateFormPingMonitor.test.tsx +791 -0
- package/Tests/App/Dashboard/NetworkDeviceCreateFormProbeAndSnmp.test.tsx +833 -0
- package/Tests/App/Dashboard/NetworkDeviceCriteriaFilter.test.ts +161 -0
- package/Tests/App/Dashboard/NetworkDeviceSettingsMonitoringSection.test.tsx +458 -0
- package/Tests/App/Dashboard/NetworkSideMenu.test.tsx +41 -5
- package/Tests/App/Dashboard/PingMonitorProvisioning.test.ts +368 -0
- package/Tests/App/Dashboard/RecommendationCard.test.tsx +796 -0
- package/Tests/App/Dashboard/RecommendationToolbar.test.tsx +519 -0
- package/Tests/App/Dashboard/RecommendationsList.test.tsx +661 -0
- package/Tests/App/Dashboard/UseBulkCreatePingMonitors.test.tsx +899 -0
- package/Tests/App/Dashboard/UseBulkSnmpCredentialProfileActions.test.tsx +732 -0
- package/Tests/App/SensitiveUrlTokenBootstrap.test.ts +256 -0
- package/Tests/App/StatusPage/StatusPageIndexPageRobotsMeta.test.ts +11 -1
- package/Tests/App/StatusPage/StatusPageLoginCodeBootstrap.test.ts +9 -4
- package/Tests/Models/NetworkSiteHierarchy.test.ts +41 -4
- package/Tests/Server/API/EnterpriseLicenseReportUserCount.test.ts +951 -7
- package/Tests/Server/API/LlmProviderConnectionTest.test.ts +522 -0
- package/Tests/Server/Infrastructure/Postgres/NetworkSnmpCredentialProfilesAndAlertPoliciesMigration.test.ts +854 -0
- package/Tests/Server/Infrastructure/Postgres/SchemaMigrationsOrdering.test.ts +18 -0
- package/Tests/Server/Infrastructure/Postgres/UserNotificationEmailRollupTableMigration.test.ts +535 -0
- package/Tests/Server/Services/AIChatPrivacyPin.test.ts +560 -0
- package/Tests/Server/Services/BillingRechargeOwnerEmailGuards.test.ts +783 -0
- package/Tests/Server/Services/EnterpriseLicenseInstanceServiceDeletionUsage.test.ts +707 -0
- package/Tests/Server/Services/EnterpriseLicenseServiceUsageAggregationLock.test.ts +329 -0
- package/Tests/Server/Services/MonitorServiceDeleteNetworkDeviceCleanup.test.ts +294 -0
- package/Tests/Server/Services/MonitorStatusBridgeProbePath.test.ts +802 -0
- package/Tests/Server/Services/MonitorStatusTimelineService.test.ts +72 -2
- package/Tests/Server/Services/NetworkAlertPolicyEngineHooks.test.ts +752 -0
- package/Tests/Server/Services/NetworkAlertPolicyEngineService.test.ts +1849 -0
- package/Tests/Server/Services/NetworkAlertPolicyModel.test.ts +1793 -0
- package/Tests/Server/Services/NetworkDeviceAutoImportRuleEngineService.test.ts +47 -4
- package/Tests/Server/Services/NetworkDeviceAutoImportRuleService.test.ts +97 -12
- package/Tests/Server/Services/NetworkDeviceAutoMonitorLifecycle.test.ts +148 -3
- package/Tests/Server/Services/NetworkDeviceMonitorBindingUpdateGuard.test.ts +514 -0
- package/Tests/Server/Services/NetworkDeviceMonitorStatusStamp.test.ts +447 -58
- package/Tests/Server/Services/NetworkDeviceMonitoringMethodTransition.test.ts +739 -0
- package/Tests/Server/Services/NetworkDevicePollingTenancy.test.ts +501 -0
- package/Tests/Server/Services/NetworkDeviceSiteDefaultProbe.test.ts +432 -0
- package/Tests/Server/Services/NetworkSiteMonitoringDefaults.test.ts +498 -0
- package/Tests/Server/Services/NetworkSiteRollupPolicyAndMaintenance.test.ts +337 -55
- package/Tests/Server/Services/NetworkSiteService.test.ts +1868 -131
- package/Tests/Server/Services/NetworkSiteTypeService.test.ts +1109 -0
- package/Tests/Server/Services/NetworkSnmpCredentialProfileModel.test.ts +926 -0
- package/Tests/Server/Services/NetworkSnmpCredentialProfileService.test.ts +796 -0
- package/Tests/Server/Services/ProjectServiceNetworkSiteTypeDefaults.test.ts +214 -0
- package/Tests/Server/Services/StatusPagePrivateUserEmailChangePasswordResetExpiry.test.ts +269 -0
- package/Tests/Server/Services/UserEmailChangePasswordResetExpiry.test.ts +472 -0
- package/Tests/Server/Services/UserNotificationEmailRollupModels.test.ts +569 -0
- package/Tests/Server/Services/UserNotificationEmailRollupSettingModel.test.ts +314 -0
- package/Tests/Server/Services/UserNotificationEmailRollupSettingService.test.ts +409 -0
- package/Tests/Server/Services/UserNotificationSettingRollupRouting.test.ts +856 -0
- package/Tests/Server/Services/UserNotificationSettingWorkspaceChannels.test.ts +102 -1
- package/Tests/Server/Types/Database/Permissions/DashboardAccessPermission.test.ts +321 -0
- package/Tests/Server/Types/Database/QueryHelperOperators.test.ts +17 -0
- package/Tests/Server/Utils/AI/AlertMonitorFilters.test.ts +124 -0
- package/Tests/Server/Utils/AI/Insights/InsightTriageRunner.test.ts +208 -0
- package/Tests/Server/Utils/AI/LLMServiceToolCalling.test.ts +235 -0
- package/Tests/Server/Utils/AI/ObservabilityChatPrompt.test.ts +253 -0
- package/Tests/Server/Utils/Captcha.test.ts +422 -0
- package/Tests/Server/Utils/DataSource/HttpFetch.test.ts +96 -2
- package/Tests/Server/Utils/Database/MigrationFailureLog.test.ts +466 -0
- package/Tests/Server/Utils/EmailRollup/EmailRollupFlushRunnerBehaviour.test.ts +1096 -0
- package/Tests/Server/Utils/EmailRollup/EmailRollupFlushRunnerClaim.test.ts +466 -0
- package/Tests/Server/Utils/EmailRollup/EmailRollupRenderer.test.ts +1428 -0
- package/Tests/Server/Utils/EmailRollup/EmailRollupTestHarness.ts +752 -0
- package/Tests/Server/Utils/EmailRollup/EmailRollupWriter.test.ts +864 -0
- package/Tests/Server/Utils/LoggerFaultDemotion.test.ts +346 -0
- package/Tests/Server/Utils/Monitor/Criteria/DatabaseMonitorCriteria.test.ts +633 -0
- package/Tests/Server/Utils/Monitor/Criteria/SnmpMonitorCriteria.test.ts +196 -0
- package/Tests/Server/Utils/Monitor/DatabaseMetricWrite.test.ts +367 -0
- package/Tests/Server/Utils/Monitor/MonitorCriteriaObservationBuilderUnits.test.ts +100 -0
- package/Tests/Server/Utils/Monitor/MonitorStepResourceIdentity.test.ts +5 -0
- package/Tests/Server/Utils/Monitor/NetworkDeviceHydrationUtil.test.ts +512 -31
- package/Tests/Server/Utils/Monitor/NetworkDeviceMetricUtil.test.ts +252 -0
- package/Tests/Server/Utils/Monitor/NetworkDeviceWalkUtil.test.ts +479 -42
- package/Tests/Server/Utils/Monitor/NetworkInventoryUtil.test.ts +351 -5
- package/Tests/Server/Utils/NetworkDevice/DeviceHealthAggregation.test.ts +136 -12
- package/Tests/Server/Utils/NetworkSite/NetworkSiteHierarchyLock.test.ts +306 -0
- package/Tests/Server/Utils/OutboundUserAgent.test.ts +266 -0
- package/Tests/Server/Utils/SecurityEvent/ThreatIntel/TaxiiClientUserAgent.test.ts +141 -0
- package/Tests/Server/Utils/Telemetry/ErrorClassResolver.test.ts +298 -0
- package/Tests/Server/Utils/Telemetry.test.ts +456 -66
- package/Tests/Types/Monitor/DatabaseMetricCatalog.test.ts +388 -0
- package/Tests/Types/Monitor/MonitorStepDatabaseMonitor.test.ts +243 -0
- package/Tests/Types/Monitor/MonitorStepDefaultTelemetryConfig.test.ts +1 -0
- package/Tests/Types/Monitor/MonitorType.test.ts +1 -0
- package/Tests/Types/Monitor/MonitorTypeKeywords.test.ts +16 -7
- package/Tests/Types/Monitor/NetworkDeviceAlertPack.test.ts +60 -0
- package/Tests/Types/NetworkDevice/NetworkAlertPolicyScope.test.ts +655 -0
- package/Tests/Types/NetworkDevice/NetworkDeviceMonitoringMethod.test.ts +115 -26
- package/Tests/Types/NetworkSite/DefaultNetworkSiteType.test.ts +39 -0
- package/Tests/Types/NotificationSetting/NotificationEmailRollupPolicy.test.ts +299 -0
- package/Tests/Types/Telemetry/ErrorClass.test.ts +483 -0
- package/Tests/UI/Components/BasicRadioButtons.test.tsx +336 -0
- package/Tests/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.test.ts +15 -0
- package/Tests/UI/Components/ProgressBar.test.tsx +38 -2
- package/Tests/UI/Components/SideMenuItem.test.tsx +226 -4
- package/Tests/UI/Components/SideMenuSection.test.tsx +310 -0
- package/Tests/UI/Components/SideOverSubmitState.test.tsx +335 -0
- package/Tests/UI/Utils/PageScrollLock.test.tsx +377 -0
- package/Tests/UI/Utils/PermissionGate.test.ts +78 -0
- package/Tests/UI/Utils/SensitiveUrlToken.test.ts +140 -0
- package/Tests/Utils/EnterpriseLicenseSeats.test.ts +69 -0
- package/Tests/Utils/EnterpriseLicenseSync.test.ts +7 -1
- package/Tests/Utils/EnterpriseLicenseUsage.test.ts +433 -2
- package/Tests/Utils/Monitor/MonitorMetricType.test.ts +280 -1
- package/Tests/Utils/Monitor/MonitorSummarySnapshotUtil.test.ts +1 -0
- package/Tests/Utils/Monitor/NetworkTopologyUtil.test.ts +38 -0
- package/Tests/Utils/NetworkDevice/DeviceHealthStateUtil.test.ts +284 -23
- package/Tests/Utils/NetworkDevice/DeviceReachabilityUtil.test.ts +177 -0
- package/Tests/Utils/NetworkDevice/MonitoringMethodThreadedClassifiers.test.ts +992 -0
- package/Tests/Utils/NetworkDevice/NetworkAlertPolicyBootstrapUtil.test.ts +427 -0
- package/Tests/Utils/NetworkDevice/ReachabilityStampConsistency.test.ts +185 -0
- package/Tests/Utils/NetworkDevice/SnmpCredentialUtil.test.ts +268 -0
- package/Tests/Utils/NetworkDiscovery/AutoImportRuleMatcher.test.ts +55 -5
- package/Tests/Utils/NetworkDiscovery/DiscoveredDeviceBuilder.test.ts +98 -21
- package/Tests/Utils/NetworkDiscovery/DiscoveryImportEligibility.test.ts +98 -20
- package/Tests/Utils/NetworkDiscovery/DiscoveryReverseDnsChain.test.ts +8 -7
- package/Tests/Utils/NetworkDiscovery/PingMonitorBuilderForAddress.test.ts +274 -0
- package/Tests/Utils/NetworkSite/SiteStatusRollupUtil.test.ts +230 -51
- package/Tests/Utils/NetworkSite/TypeHierarchyUtil.test.ts +209 -0
- package/Tests/Utils/Telemetry/CaptureSpanExportGating.test.ts +145 -0
- package/Types/AI/ExceptionAIClassification.ts +10 -24
- package/Types/Email/EmailTemplateType.ts +2 -0
- package/Types/EnterpriseLicense/EnterpriseLicenseInstanceSummary.ts +5 -0
- package/Types/EnterpriseLicense/EnterpriseLicenseUsageSnapshot.ts +13 -0
- package/Types/EnterpriseLicense/EnterpriseLicenseUserCountSource.ts +6 -0
- package/Types/Exception/ApiException.ts +10 -0
- package/Types/Exception/BadDataException.ts +11 -0
- package/Types/Exception/BadRequestException.ts +11 -0
- package/Types/Exception/Exception.ts +65 -0
- package/Types/Exception/ForbiddenException.ts +10 -0
- package/Types/Exception/NotAuthenticatedException.ts +10 -0
- package/Types/Exception/NotAuthorizedException.ts +10 -0
- package/Types/Exception/NotFoundException.ts +11 -0
- package/Types/Exception/PayloadTooLargeException.ts +11 -0
- package/Types/Exception/PaymentRequiredException.ts +10 -0
- package/Types/Exception/ServiceUnavailableException.ts +10 -0
- package/Types/Exception/SsoAuthorizationException.ts +10 -0
- package/Types/Exception/TenantNotFoundException.ts +11 -0
- package/Types/Exception/TimeoutException.ts +10 -0
- package/Types/Exception/TooManyRequestsException.ts +10 -0
- package/Types/Exception/UnableToReachServer.ts +10 -0
- package/Types/Exception/WebsiteRequestException.ts +10 -0
- package/Types/Monitor/CriteriaFilter.ts +60 -2
- package/Types/Monitor/DatabaseMetricCatalog.ts +693 -0
- package/Types/Monitor/DatabaseMonitor/DatabaseMonitorResponse.ts +83 -0
- package/Types/Monitor/MonitorCriteriaInstance.ts +76 -0
- package/Types/Monitor/MonitorMetricType.ts +71 -0
- package/Types/Monitor/MonitorStep.ts +76 -0
- package/Types/Monitor/MonitorStepDatabaseMonitor.ts +171 -0
- package/Types/Monitor/MonitorStepSqlMonitor.ts +2 -20
- package/Types/Monitor/MonitorType.ts +47 -1
- package/Types/Monitor/SnmpMonitor/NetworkDeviceAlertPack.ts +22 -1
- package/Types/Monitor/SqlConnectionConfig.ts +31 -0
- package/Types/NetworkDevice/NetworkAlertPolicyScope.ts +343 -0
- package/Types/NetworkDevice/NetworkDeviceMonitoringMethod.ts +42 -22
- package/Types/NetworkSite/DefaultNetworkSiteTypeHierarchy.ts +30 -0
- package/Types/NotificationSetting/NotificationEmailRollupCategory.ts +255 -0
- package/Types/NotificationSetting/NotificationEmailRollupPolicy.ts +104 -0
- package/Types/Permission.ts +90 -0
- package/Types/Probe/ProbeMonitorResponse.ts +16 -0
- package/Types/Telemetry/ErrorClass.ts +274 -0
- package/Types/Telemetry/UnitOfWork.ts +59 -0
- package/UI/Components/CommandPalette/CommandPalette.tsx +2 -8
- package/UI/Components/EditionLabel/EditionLabel.tsx +4 -0
- package/UI/Components/Modal/Modal.tsx +2 -8
- package/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.ts +44 -0
- package/UI/Components/ProgressBar/ProgressBar.tsx +12 -1
- package/UI/Components/RadioButtons/BasicRadioButtons.tsx +37 -7
- package/UI/Components/SideMenu/SideMenu.tsx +123 -5
- package/UI/Components/SideMenu/SideMenuItem.tsx +76 -84
- package/UI/Components/SideMenu/SideMenuSection.tsx +55 -23
- package/UI/Components/SideOver/SideOver.tsx +21 -20
- package/UI/Utils/PageScrollLock.ts +79 -3
- package/UI/Utils/PermissionGate.ts +61 -0
- package/UI/Utils/SensitiveUrlToken.ts +112 -0
- package/UI/Utils/TestLLMProvider.ts +11 -0
- package/Utils/EnterpriseLicense/EnterpriseLicenseSeats.ts +16 -0
- package/Utils/EnterpriseLicense/EnterpriseLicenseUsage.ts +191 -11
- package/Utils/Monitor/MonitorMetricType.ts +153 -1
- package/Utils/Monitor/NetworkTopologyUtil.ts +23 -3
- package/Utils/NetworkDevice/DeviceHealthStateUtil.ts +65 -14
- package/Utils/NetworkDevice/DeviceReachabilityUtil.ts +43 -14
- package/Utils/NetworkDevice/NetworkAlertPolicyBootstrapUtil.ts +247 -0
- package/Utils/NetworkDevice/SnmpCredentialUtil.ts +68 -0
- package/Utils/NetworkDiscovery/AutoImportRuleMatcher.ts +15 -7
- package/Utils/NetworkDiscovery/DiscoveredDeviceBuilder.ts +52 -17
- package/Utils/NetworkDiscovery/DiscoveryImportEligibility.ts +55 -23
- package/Utils/NetworkDiscovery/PingMonitorBuilder.ts +115 -13
- package/Utils/NetworkSite/SiteStatusRollupUtil.ts +66 -20
- package/Utils/NetworkSite/TypeHierarchyUtil.ts +313 -0
- package/build/dist/Models/AnalyticsModels/Span.js +14 -0
- package/build/dist/Models/AnalyticsModels/Span.js.map +1 -1
- package/build/dist/Models/DatabaseModels/EnterpriseLicense.js +59 -0
- package/build/dist/Models/DatabaseModels/EnterpriseLicense.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Index.js +10 -0
- package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Monitor.js +75 -0
- package/build/dist/Models/DatabaseModels/Monitor.js.map +1 -1
- package/build/dist/Models/DatabaseModels/NetworkAlertPolicy.js +713 -0
- package/build/dist/Models/DatabaseModels/NetworkAlertPolicy.js.map +1 -0
- package/build/dist/Models/DatabaseModels/NetworkDevice.js +180 -1
- package/build/dist/Models/DatabaseModels/NetworkDevice.js.map +1 -1
- package/build/dist/Models/DatabaseModels/NetworkSite.js +200 -2
- package/build/dist/Models/DatabaseModels/NetworkSite.js.map +1 -1
- package/build/dist/Models/DatabaseModels/NetworkSiteType.js +102 -3
- package/build/dist/Models/DatabaseModels/NetworkSiteType.js.map +1 -1
- package/build/dist/Models/DatabaseModels/NetworkSnmpCredentialProfile.js +878 -0
- package/build/dist/Models/DatabaseModels/NetworkSnmpCredentialProfile.js.map +1 -0
- package/build/dist/Models/DatabaseModels/TelemetryException.js +123 -0
- package/build/dist/Models/DatabaseModels/TelemetryException.js.map +1 -1
- package/build/dist/Models/DatabaseModels/UserNotificationEmailRollupBatch.js +363 -0
- package/build/dist/Models/DatabaseModels/UserNotificationEmailRollupBatch.js.map +1 -0
- package/build/dist/Models/DatabaseModels/UserNotificationEmailRollupItem.js +402 -0
- package/build/dist/Models/DatabaseModels/UserNotificationEmailRollupItem.js.map +1 -0
- package/build/dist/Models/DatabaseModels/UserNotificationEmailRollupSetting.js +296 -0
- package/build/dist/Models/DatabaseModels/UserNotificationEmailRollupSetting.js.map +1 -0
- package/build/dist/Server/API/EnterpriseLicenseAPI.js +273 -60
- package/build/dist/Server/API/EnterpriseLicenseAPI.js.map +1 -1
- package/build/dist/Server/API/LlmProviderAPI.js +108 -13
- package/build/dist/Server/API/LlmProviderAPI.js.map +1 -1
- package/build/dist/Server/EnvironmentConfig.js +12 -0
- package/build/dist/Server/EnvironmentConfig.js.map +1 -1
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790700000000-AddNetworkSiteTypeParentHierarchy.js +24 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790700000000-AddNetworkSiteTypeParentHierarchy.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790900000000-AddEnterpriseLicenseUsageProvenance.js +16 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790900000000-AddEnterpriseLicenseUsageProvenance.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790900000000-AddTelemetryExceptionErrorClass.js +111 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790900000000-AddTelemetryExceptionErrorClass.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791000000000-AddUserNotificationEmailRollup.js +77 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791000000000-AddUserNotificationEmailRollup.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791100000000-AddUserNotificationEmailRollupSetting.js +50 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791100000000-AddUserNotificationEmailRollupSetting.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791200000000-AddNetworkSnmpCredentialProfilesAndAlertPolicies.js +83 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791200000000-AddNetworkSnmpCredentialProfilesAndAlertPolicies.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +12 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
- package/build/dist/Server/Infrastructure/QueueWorker.js +33 -5
- package/build/dist/Server/Infrastructure/QueueWorker.js.map +1 -1
- package/build/dist/Server/Middleware/BearerTokenAuthorization.js +12 -0
- package/build/dist/Server/Middleware/BearerTokenAuthorization.js.map +1 -1
- package/build/dist/Server/Middleware/ProjectAuthorization.js +11 -0
- package/build/dist/Server/Middleware/ProjectAuthorization.js.map +1 -1
- package/build/dist/Server/Middleware/SCIMAuthorization.js +12 -0
- package/build/dist/Server/Middleware/SCIMAuthorization.js.map +1 -1
- package/build/dist/Server/Middleware/TelemetryIngest.js +11 -0
- package/build/dist/Server/Middleware/TelemetryIngest.js.map +1 -1
- package/build/dist/Server/Services/AIBillingService.js +70 -16
- package/build/dist/Server/Services/AIBillingService.js.map +1 -1
- package/build/dist/Server/Services/EnterpriseLicenseInstanceService.js +167 -0
- package/build/dist/Server/Services/EnterpriseLicenseInstanceService.js.map +1 -1
- package/build/dist/Server/Services/EnterpriseLicenseService.js +39 -0
- package/build/dist/Server/Services/EnterpriseLicenseService.js.map +1 -1
- package/build/dist/Server/Services/Index.js +10 -0
- package/build/dist/Server/Services/Index.js.map +1 -1
- package/build/dist/Server/Services/MonitorService.js +119 -21
- package/build/dist/Server/Services/MonitorService.js.map +1 -1
- package/build/dist/Server/Services/MonitorStatusTimelineService.js +127 -8
- package/build/dist/Server/Services/MonitorStatusTimelineService.js.map +1 -1
- package/build/dist/Server/Services/MonitorTemplateService.js +162 -0
- package/build/dist/Server/Services/MonitorTemplateService.js.map +1 -1
- package/build/dist/Server/Services/NetworkAlertPolicyEngineService.js +1683 -0
- package/build/dist/Server/Services/NetworkAlertPolicyEngineService.js.map +1 -0
- package/build/dist/Server/Services/NetworkAlertPolicyService.js +732 -0
- package/build/dist/Server/Services/NetworkAlertPolicyService.js.map +1 -0
- package/build/dist/Server/Services/NetworkDeviceAutoImportRuleEngineService.js +10 -9
- package/build/dist/Server/Services/NetworkDeviceAutoImportRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/NetworkDeviceAutoImportRuleService.js +54 -11
- package/build/dist/Server/Services/NetworkDeviceAutoImportRuleService.js.map +1 -1
- package/build/dist/Server/Services/NetworkDeviceService.js +841 -70
- package/build/dist/Server/Services/NetworkDeviceService.js.map +1 -1
- package/build/dist/Server/Services/NetworkSiteService.js +1145 -107
- package/build/dist/Server/Services/NetworkSiteService.js.map +1 -1
- package/build/dist/Server/Services/NetworkSiteTypeService.js +863 -0
- package/build/dist/Server/Services/NetworkSiteTypeService.js.map +1 -1
- package/build/dist/Server/Services/NetworkSnmpCredentialProfileService.js +217 -0
- package/build/dist/Server/Services/NetworkSnmpCredentialProfileService.js.map +1 -0
- package/build/dist/Server/Services/NotificationService.js +80 -17
- package/build/dist/Server/Services/NotificationService.js.map +1 -1
- package/build/dist/Server/Services/ProjectService.js +66 -30
- package/build/dist/Server/Services/ProjectService.js.map +1 -1
- package/build/dist/Server/Services/StatusPagePrivateUserService.js +92 -2
- package/build/dist/Server/Services/StatusPagePrivateUserService.js.map +1 -1
- package/build/dist/Server/Services/UserNotificationEmailRollupBatchService.js +76 -0
- package/build/dist/Server/Services/UserNotificationEmailRollupBatchService.js.map +1 -0
- package/build/dist/Server/Services/UserNotificationEmailRollupItemService.js +77 -0
- package/build/dist/Server/Services/UserNotificationEmailRollupItemService.js.map +1 -0
- package/build/dist/Server/Services/UserNotificationEmailRollupSettingService.js +111 -0
- package/build/dist/Server/Services/UserNotificationEmailRollupSettingService.js.map +1 -0
- package/build/dist/Server/Services/UserNotificationSettingService.js +46 -20
- package/build/dist/Server/Services/UserNotificationSettingService.js.map +1 -1
- package/build/dist/Server/Services/UserService.js +90 -0
- package/build/dist/Server/Services/UserService.js.map +1 -1
- package/build/dist/Server/Types/Database/QueryHelper.js +1 -1
- package/build/dist/Server/Types/Database/QueryHelper.js.map +1 -1
- package/build/dist/Server/Utils/AI/Chat/ObservabilityChatPrompt.js +14 -3
- package/build/dist/Server/Utils/AI/Chat/ObservabilityChatPrompt.js.map +1 -1
- package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/ExceptionSpikeDetector.js +10 -0
- package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/ExceptionSpikeDetector.js.map +1 -1
- package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/NewExceptionDetector.js +10 -0
- package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/NewExceptionDetector.js.map +1 -1
- package/build/dist/Server/Utils/AI/SRE/Insights/InsightTriageRunner.js +54 -1
- package/build/dist/Server/Utils/AI/SRE/Insights/InsightTriageRunner.js.map +1 -1
- package/build/dist/Server/Utils/AI/Toolbox/AlertTools.js +18 -4
- package/build/dist/Server/Utils/AI/Toolbox/AlertTools.js.map +1 -1
- package/build/dist/Server/Utils/Billing/BillingFailureNoticeThrottle.js +59 -0
- package/build/dist/Server/Utils/Billing/BillingFailureNoticeThrottle.js.map +1 -0
- package/build/dist/Server/Utils/DataSource/HttpFetch.js +2 -1
- package/build/dist/Server/Utils/DataSource/HttpFetch.js.map +1 -1
- package/build/dist/Server/Utils/EmailRollup/EmailRollupConstants.js +91 -0
- package/build/dist/Server/Utils/EmailRollup/EmailRollupConstants.js.map +1 -0
- package/build/dist/Server/Utils/EmailRollup/EmailRollupFlushRunner.js +691 -0
- package/build/dist/Server/Utils/EmailRollup/EmailRollupFlushRunner.js.map +1 -0
- package/build/dist/Server/Utils/EmailRollup/EmailRollupRenderer.js +497 -0
- package/build/dist/Server/Utils/EmailRollup/EmailRollupRenderer.js.map +1 -0
- package/build/dist/Server/Utils/EmailRollup/EmailRollupWriter.js +257 -0
- package/build/dist/Server/Utils/EmailRollup/EmailRollupWriter.js.map +1 -0
- package/build/dist/Server/Utils/LLM/LLMService.js +64 -1
- package/build/dist/Server/Utils/LLM/LLMService.js.map +1 -1
- package/build/dist/Server/Utils/LogRedaction.js +8 -0
- package/build/dist/Server/Utils/LogRedaction.js.map +1 -1
- package/build/dist/Server/Utils/Logger.js +63 -1
- package/build/dist/Server/Utils/Logger.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/Criteria/DatabaseMonitorCriteria.js +141 -0
- package/build/dist/Server/Utils/Monitor/Criteria/DatabaseMonitorCriteria.js.map +1 -0
- package/build/dist/Server/Utils/Monitor/Criteria/EvaluateOverTime.js +8 -1
- package/build/dist/Server/Utils/Monitor/Criteria/EvaluateOverTime.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/Criteria/SnmpMonitorCriteria.js +51 -1
- package/build/dist/Server/Utils/Monitor/Criteria/SnmpMonitorCriteria.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaDataExtractor.js +7 -0
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaDataExtractor.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js +37 -0
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaObservationBuilder.js +158 -6
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaObservationBuilder.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorMetricUtil.js +33 -0
- package/build/dist/Server/Utils/Monitor/MonitorMetricUtil.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorTemplateUtil.js +32 -0
- package/build/dist/Server/Utils/Monitor/MonitorTemplateUtil.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/NetworkDeviceHydrationUtil.js +330 -21
- package/build/dist/Server/Utils/Monitor/NetworkDeviceHydrationUtil.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/NetworkDeviceMetricUtil.js +55 -10
- package/build/dist/Server/Utils/Monitor/NetworkDeviceMetricUtil.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/NetworkDeviceWalkUtil.js +178 -49
- package/build/dist/Server/Utils/Monitor/NetworkDeviceWalkUtil.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/NetworkInventoryUtil.js +119 -29
- package/build/dist/Server/Utils/Monitor/NetworkInventoryUtil.js.map +1 -1
- package/build/dist/Server/Utils/NetworkDevice/DeviceHealthAggregation.js +30 -17
- package/build/dist/Server/Utils/NetworkDevice/DeviceHealthAggregation.js.map +1 -1
- package/build/dist/Server/Utils/NetworkSite/NetworkSiteHierarchyLock.js +158 -0
- package/build/dist/Server/Utils/NetworkSite/NetworkSiteHierarchyLock.js.map +1 -0
- package/build/dist/Server/Utils/OutboundUserAgent.js +123 -0
- package/build/dist/Server/Utils/OutboundUserAgent.js.map +1 -0
- package/build/dist/Server/Utils/StartServer.js +38 -14
- package/build/dist/Server/Utils/StartServer.js.map +1 -1
- package/build/dist/Server/Utils/Telemetry/CaptureSpan.js +28 -8
- package/build/dist/Server/Utils/Telemetry/CaptureSpan.js.map +1 -1
- package/build/dist/Server/Utils/Telemetry/ErrorClassResolver.js +95 -0
- package/build/dist/Server/Utils/Telemetry/ErrorClassResolver.js.map +1 -0
- package/build/dist/Server/Utils/Telemetry/SpanUtil.js +29 -0
- package/build/dist/Server/Utils/Telemetry/SpanUtil.js.map +1 -1
- package/build/dist/Server/Utils/Telemetry.js +162 -46
- package/build/dist/Server/Utils/Telemetry.js.map +1 -1
- package/build/dist/Types/AI/ExceptionAIClassification.js +10 -24
- package/build/dist/Types/AI/ExceptionAIClassification.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/EnterpriseLicense/EnterpriseLicenseUsageSnapshot.js +2 -0
- package/build/dist/Types/EnterpriseLicense/EnterpriseLicenseUsageSnapshot.js.map +1 -0
- package/build/dist/Types/EnterpriseLicense/EnterpriseLicenseUserCountSource.js +7 -0
- package/build/dist/Types/EnterpriseLicense/EnterpriseLicenseUserCountSource.js.map +1 -0
- package/build/dist/Types/Exception/ApiException.js +9 -0
- package/build/dist/Types/Exception/ApiException.js.map +1 -1
- package/build/dist/Types/Exception/BadDataException.js +10 -0
- package/build/dist/Types/Exception/BadDataException.js.map +1 -1
- package/build/dist/Types/Exception/BadRequestException.js +10 -0
- package/build/dist/Types/Exception/BadRequestException.js.map +1 -1
- package/build/dist/Types/Exception/Exception.js +56 -0
- package/build/dist/Types/Exception/Exception.js.map +1 -1
- package/build/dist/Types/Exception/ForbiddenException.js +9 -0
- package/build/dist/Types/Exception/ForbiddenException.js.map +1 -1
- package/build/dist/Types/Exception/NotAuthenticatedException.js +9 -0
- package/build/dist/Types/Exception/NotAuthenticatedException.js.map +1 -1
- package/build/dist/Types/Exception/NotAuthorizedException.js +9 -0
- package/build/dist/Types/Exception/NotAuthorizedException.js.map +1 -1
- package/build/dist/Types/Exception/NotFoundException.js +10 -0
- package/build/dist/Types/Exception/NotFoundException.js.map +1 -1
- package/build/dist/Types/Exception/PayloadTooLargeException.js +10 -0
- package/build/dist/Types/Exception/PayloadTooLargeException.js.map +1 -1
- package/build/dist/Types/Exception/PaymentRequiredException.js +9 -0
- package/build/dist/Types/Exception/PaymentRequiredException.js.map +1 -1
- package/build/dist/Types/Exception/ServiceUnavailableException.js +9 -0
- package/build/dist/Types/Exception/ServiceUnavailableException.js.map +1 -1
- package/build/dist/Types/Exception/SsoAuthorizationException.js +9 -0
- package/build/dist/Types/Exception/SsoAuthorizationException.js.map +1 -1
- package/build/dist/Types/Exception/TenantNotFoundException.js +10 -0
- package/build/dist/Types/Exception/TenantNotFoundException.js.map +1 -1
- package/build/dist/Types/Exception/TimeoutException.js +9 -0
- package/build/dist/Types/Exception/TimeoutException.js.map +1 -1
- package/build/dist/Types/Exception/TooManyRequestsException.js +9 -0
- package/build/dist/Types/Exception/TooManyRequestsException.js.map +1 -1
- package/build/dist/Types/Exception/UnableToReachServer.js +9 -0
- package/build/dist/Types/Exception/UnableToReachServer.js.map +1 -1
- package/build/dist/Types/Exception/WebsiteRequestException.js +9 -0
- package/build/dist/Types/Exception/WebsiteRequestException.js.map +1 -1
- package/build/dist/Types/Monitor/CriteriaFilter.js +45 -2
- package/build/dist/Types/Monitor/CriteriaFilter.js.map +1 -1
- package/build/dist/Types/Monitor/DatabaseMetricCatalog.js +594 -0
- package/build/dist/Types/Monitor/DatabaseMetricCatalog.js.map +1 -0
- package/build/dist/Types/Monitor/DatabaseMonitor/DatabaseMonitorResponse.js +21 -0
- package/build/dist/Types/Monitor/DatabaseMonitor/DatabaseMonitorResponse.js.map +1 -0
- package/build/dist/Types/Monitor/MonitorCriteriaInstance.js +70 -0
- package/build/dist/Types/Monitor/MonitorCriteriaInstance.js.map +1 -1
- package/build/dist/Types/Monitor/MonitorMetricType.js +61 -0
- package/build/dist/Types/Monitor/MonitorMetricType.js.map +1 -1
- package/build/dist/Types/Monitor/MonitorStep.js +54 -0
- package/build/dist/Types/Monitor/MonitorStep.js.map +1 -1
- package/build/dist/Types/Monitor/MonitorStepDatabaseMonitor.js +122 -0
- package/build/dist/Types/Monitor/MonitorStepDatabaseMonitor.js.map +1 -0
- package/build/dist/Types/Monitor/MonitorStepSqlMonitor.js.map +1 -1
- package/build/dist/Types/Monitor/MonitorType.js +45 -1
- package/build/dist/Types/Monitor/MonitorType.js.map +1 -1
- package/build/dist/Types/Monitor/SnmpMonitor/NetworkDeviceAlertPack.js +21 -1
- package/build/dist/Types/Monitor/SnmpMonitor/NetworkDeviceAlertPack.js.map +1 -1
- package/build/dist/Types/Monitor/SqlConnectionConfig.js +2 -0
- package/build/dist/Types/Monitor/SqlConnectionConfig.js.map +1 -0
- package/build/dist/Types/NetworkDevice/NetworkAlertPolicyScope.js +172 -0
- package/build/dist/Types/NetworkDevice/NetworkAlertPolicyScope.js.map +1 -0
- package/build/dist/Types/NetworkDevice/NetworkDeviceMonitoringMethod.js +40 -22
- package/build/dist/Types/NetworkDevice/NetworkDeviceMonitoringMethod.js.map +1 -1
- package/build/dist/Types/NetworkSite/DefaultNetworkSiteTypeHierarchy.js +26 -0
- package/build/dist/Types/NetworkSite/DefaultNetworkSiteTypeHierarchy.js.map +1 -0
- package/build/dist/Types/NotificationSetting/NotificationEmailRollupCategory.js +186 -0
- package/build/dist/Types/NotificationSetting/NotificationEmailRollupCategory.js.map +1 -0
- package/build/dist/Types/NotificationSetting/NotificationEmailRollupPolicy.js +87 -0
- package/build/dist/Types/NotificationSetting/NotificationEmailRollupPolicy.js.map +1 -0
- package/build/dist/Types/Permission.js +80 -0
- package/build/dist/Types/Permission.js.map +1 -1
- package/build/dist/Types/Telemetry/ErrorClass.js +216 -0
- package/build/dist/Types/Telemetry/ErrorClass.js.map +1 -0
- package/build/dist/Types/Telemetry/UnitOfWork.js +59 -0
- package/build/dist/Types/Telemetry/UnitOfWork.js.map +1 -0
- package/build/dist/UI/Components/CommandPalette/CommandPalette.js +2 -7
- package/build/dist/UI/Components/CommandPalette/CommandPalette.js.map +1 -1
- package/build/dist/UI/Components/EditionLabel/EditionLabel.js +3 -0
- package/build/dist/UI/Components/EditionLabel/EditionLabel.js.map +1 -1
- package/build/dist/UI/Components/Modal/Modal.js +2 -7
- package/build/dist/UI/Components/Modal/Modal.js.map +1 -1
- package/build/dist/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.js +39 -0
- package/build/dist/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.js.map +1 -1
- package/build/dist/UI/Components/ProgressBar/ProgressBar.js +12 -1
- package/build/dist/UI/Components/ProgressBar/ProgressBar.js.map +1 -1
- package/build/dist/UI/Components/RadioButtons/BasicRadioButtons.js +6 -6
- package/build/dist/UI/Components/RadioButtons/BasicRadioButtons.js.map +1 -1
- package/build/dist/UI/Components/SideMenu/SideMenu.js +67 -5
- package/build/dist/UI/Components/SideMenu/SideMenu.js.map +1 -1
- package/build/dist/UI/Components/SideMenu/SideMenuItem.js +49 -53
- package/build/dist/UI/Components/SideMenu/SideMenuItem.js.map +1 -1
- package/build/dist/UI/Components/SideMenu/SideMenuSection.js +25 -7
- package/build/dist/UI/Components/SideMenu/SideMenuSection.js.map +1 -1
- package/build/dist/UI/Components/SideOver/SideOver.js +5 -20
- package/build/dist/UI/Components/SideOver/SideOver.js.map +1 -1
- package/build/dist/UI/Utils/PageScrollLock.js +31 -3
- package/build/dist/UI/Utils/PageScrollLock.js.map +1 -1
- package/build/dist/UI/Utils/PermissionGate.js +42 -1
- package/build/dist/UI/Utils/PermissionGate.js.map +1 -1
- package/build/dist/UI/Utils/SensitiveUrlToken.js +97 -0
- package/build/dist/UI/Utils/SensitiveUrlToken.js.map +1 -0
- package/build/dist/UI/Utils/TestLLMProvider.js +4 -5
- package/build/dist/UI/Utils/TestLLMProvider.js.map +1 -1
- package/build/dist/Utils/EnterpriseLicense/EnterpriseLicenseSeats.js +15 -0
- package/build/dist/Utils/EnterpriseLicense/EnterpriseLicenseSeats.js.map +1 -1
- package/build/dist/Utils/EnterpriseLicense/EnterpriseLicenseUsage.js +111 -9
- package/build/dist/Utils/EnterpriseLicense/EnterpriseLicenseUsage.js.map +1 -1
- package/build/dist/Utils/Monitor/MonitorMetricType.js +109 -1
- package/build/dist/Utils/Monitor/MonitorMetricType.js.map +1 -1
- package/build/dist/Utils/Monitor/NetworkTopologyUtil.js +8 -3
- package/build/dist/Utils/Monitor/NetworkTopologyUtil.js.map +1 -1
- package/build/dist/Utils/NetworkDevice/DeviceHealthStateUtil.js +27 -7
- package/build/dist/Utils/NetworkDevice/DeviceHealthStateUtil.js.map +1 -1
- package/build/dist/Utils/NetworkDevice/DeviceReachabilityUtil.js +7 -5
- package/build/dist/Utils/NetworkDevice/DeviceReachabilityUtil.js.map +1 -1
- package/build/dist/Utils/NetworkDevice/NetworkAlertPolicyBootstrapUtil.js +180 -0
- package/build/dist/Utils/NetworkDevice/NetworkAlertPolicyBootstrapUtil.js.map +1 -0
- package/build/dist/Utils/NetworkDevice/SnmpCredentialUtil.js +12 -0
- package/build/dist/Utils/NetworkDevice/SnmpCredentialUtil.js.map +1 -0
- package/build/dist/Utils/NetworkDiscovery/AutoImportRuleMatcher.js +15 -5
- package/build/dist/Utils/NetworkDiscovery/AutoImportRuleMatcher.js.map +1 -1
- package/build/dist/Utils/NetworkDiscovery/DiscoveredDeviceBuilder.js +44 -15
- package/build/dist/Utils/NetworkDiscovery/DiscoveredDeviceBuilder.js.map +1 -1
- package/build/dist/Utils/NetworkDiscovery/DiscoveryImportEligibility.js +52 -23
- package/build/dist/Utils/NetworkDiscovery/DiscoveryImportEligibility.js.map +1 -1
- package/build/dist/Utils/NetworkDiscovery/PingMonitorBuilder.js +85 -13
- package/build/dist/Utils/NetworkDiscovery/PingMonitorBuilder.js.map +1 -1
- package/build/dist/Utils/NetworkSite/SiteStatusRollupUtil.js +30 -15
- package/build/dist/Utils/NetworkSite/SiteStatusRollupUtil.js.map +1 -1
- package/build/dist/Utils/NetworkSite/TypeHierarchyUtil.js +191 -0
- package/build/dist/Utils/NetworkSite/TypeHierarchyUtil.js.map +1 -0
- package/package.json +2 -2
|
@@ -5,15 +5,30 @@ import SiteStatusRollupUtil, {
|
|
|
5
5
|
RollupStatusOption,
|
|
6
6
|
} from "../../../Utils/NetworkSite/SiteStatusRollupUtil";
|
|
7
7
|
import SiteHealthRollupPolicy from "../../../Types/NetworkSite/SiteHealthRollupPolicy";
|
|
8
|
+
import NetworkDeviceMonitoringMethod, {
|
|
9
|
+
LEGACY_SNMP_MONITORING_METHOD,
|
|
10
|
+
} from "../../../Types/NetworkDevice/NetworkDeviceMonitoringMethod";
|
|
8
11
|
|
|
9
12
|
/*
|
|
10
13
|
* MonitorStatus priority is HIGHER = WORSE (seeded: Operational 1,
|
|
11
14
|
* Degraded 2, Offline 3).
|
|
12
15
|
*
|
|
13
|
-
* The
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
16
|
+
* The poll half of this rollup asks DeviceReachabilityUtil — "did the last
|
|
17
|
+
* poll succeed" — rather than "was the last success recent". That is what
|
|
18
|
+
* stops a site card going red because its probe is behind on a large fleet
|
|
19
|
+
* while every device under it is answering (issue #3220).
|
|
20
|
+
*
|
|
21
|
+
* WHICH HALF A DEVICE GOES DOWN (issue #3562, ping-first polling). A stamped
|
|
22
|
+
* MonitorStatus is a device's vote only when the device is MONITOR-BACKED —
|
|
23
|
+
* nothing polls such a device, so the bound monitor is all it has. Every
|
|
24
|
+
* other device (monitoringMethod "Probe", and equally NULL, "" or the
|
|
25
|
+
* retired "SNMP") is pinged by its probe on its schedule, so it has a poll
|
|
26
|
+
* verdict of its own and that is its vote; a stamp on it is informational.
|
|
27
|
+
* Both policies apply the identical gate, which is why the site card, the
|
|
28
|
+
* device list pill and the topology map can never describe different
|
|
29
|
+
* networks. Every device literal below therefore says which kind it is, and
|
|
30
|
+
* `stamped()` builds monitor-backed ones because that is the only kind whose
|
|
31
|
+
* stamp votes.
|
|
17
32
|
*/
|
|
18
33
|
const OPERATIONAL: RollupStatusOption = {
|
|
19
34
|
monitorStatusId: "status-operational",
|
|
@@ -34,7 +49,14 @@ function minutesAgo(minutes: number): Date {
|
|
|
34
49
|
return new Date(NOW.getTime() - minutes * 60 * 1000);
|
|
35
50
|
}
|
|
36
51
|
|
|
37
|
-
|
|
52
|
+
/*
|
|
53
|
+
* The column value that makes a device's stamp its vote. Spelled out once so
|
|
54
|
+
* every literal that relies on the gate says so, and so a device that is
|
|
55
|
+
* merely POLLED can never be mistaken for one at a glance.
|
|
56
|
+
*/
|
|
57
|
+
const MONITOR_BACKED: string = NetworkDeviceMonitoringMethod.Monitor;
|
|
58
|
+
|
|
59
|
+
// A probe-polled device whose last poll succeeded `minutes` ago.
|
|
38
60
|
function answered(minutes: number): DeviceHealthState {
|
|
39
61
|
return {
|
|
40
62
|
isReachable: true,
|
|
@@ -44,7 +66,7 @@ function answered(minutes: number): DeviceHealthState {
|
|
|
44
66
|
};
|
|
45
67
|
}
|
|
46
68
|
|
|
47
|
-
// A device whose last poll failed `minutes` ago.
|
|
69
|
+
// A probe-polled device whose last poll failed `minutes` ago.
|
|
48
70
|
function failed(minutes: number): DeviceHealthState {
|
|
49
71
|
return {
|
|
50
72
|
isReachable: false,
|
|
@@ -54,6 +76,15 @@ function failed(minutes: number): DeviceHealthState {
|
|
|
54
76
|
};
|
|
55
77
|
}
|
|
56
78
|
|
|
79
|
+
// A monitor-backed device carrying a stamped, resolvable status row.
|
|
80
|
+
function monitorBacked(status: RollupStatusOption): DeviceHealthState {
|
|
81
|
+
return {
|
|
82
|
+
monitoringMethod: MONITOR_BACKED,
|
|
83
|
+
currentMonitorStatusId: status.monitorStatusId,
|
|
84
|
+
monitorStatusPriority: status.priority,
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
|
|
57
88
|
function worst(
|
|
58
89
|
deviceStates: Array<DeviceHealthState>,
|
|
59
90
|
overrides?: {
|
|
@@ -80,32 +111,16 @@ describe("SiteStatusRollupUtil.worstStatus", () => {
|
|
|
80
111
|
expect(worst([])).toBeNull();
|
|
81
112
|
});
|
|
82
113
|
|
|
83
|
-
it("a single
|
|
84
|
-
expect(
|
|
85
|
-
worst([
|
|
86
|
-
{
|
|
87
|
-
currentMonitorStatusId: DEGRADED.monitorStatusId,
|
|
88
|
-
monitorStatusPriority: DEGRADED.priority,
|
|
89
|
-
},
|
|
90
|
-
]),
|
|
91
|
-
).toBe(DEGRADED.monitorStatusId);
|
|
114
|
+
it("a single monitor-backed device contributes its stamped status", () => {
|
|
115
|
+
expect(worst([monitorBacked(DEGRADED)])).toBe(DEGRADED.monitorStatusId);
|
|
92
116
|
});
|
|
93
117
|
|
|
94
118
|
it("the worst (highest priority) stamped status wins", () => {
|
|
95
119
|
expect(
|
|
96
120
|
worst([
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
},
|
|
101
|
-
{
|
|
102
|
-
currentMonitorStatusId: OFFLINE.monitorStatusId,
|
|
103
|
-
monitorStatusPriority: OFFLINE.priority,
|
|
104
|
-
},
|
|
105
|
-
{
|
|
106
|
-
currentMonitorStatusId: DEGRADED.monitorStatusId,
|
|
107
|
-
monitorStatusPriority: DEGRADED.priority,
|
|
108
|
-
},
|
|
121
|
+
monitorBacked(OPERATIONAL),
|
|
122
|
+
monitorBacked(OFFLINE),
|
|
123
|
+
monitorBacked(DEGRADED),
|
|
109
124
|
]),
|
|
110
125
|
).toBe(OFFLINE.monitorStatusId);
|
|
111
126
|
});
|
|
@@ -174,33 +189,74 @@ describe("SiteStatusRollupUtil.worstStatus", () => {
|
|
|
174
189
|
expect(worst([answered(1), {}])).toBe(OPERATIONAL.monitorStatusId);
|
|
175
190
|
});
|
|
176
191
|
|
|
177
|
-
it("mix: a failing device outranks a
|
|
192
|
+
it("mix: a failing polled device outranks a monitor-backed operational one", () => {
|
|
193
|
+
expect(worst([monitorBacked(OPERATIONAL), failed(1)])).toBe(
|
|
194
|
+
OFFLINE.monitorStatusId,
|
|
195
|
+
);
|
|
196
|
+
});
|
|
197
|
+
|
|
198
|
+
it("mix: a monitor-backed offline device outranks answering ones", () => {
|
|
199
|
+
expect(worst([answered(1), monitorBacked(OFFLINE), answered(2)])).toBe(
|
|
200
|
+
OFFLINE.monitorStatusId,
|
|
201
|
+
);
|
|
202
|
+
});
|
|
203
|
+
|
|
204
|
+
/*
|
|
205
|
+
* A stamp a probe-polled device carries is not its vote — the poll is (see
|
|
206
|
+
* the header). Reading the stamp instead is the regression that turned a
|
|
207
|
+
* region of answering switches Offline the moment one of them reported a
|
|
208
|
+
* dark port to a Network Device monitor, while every device row under it
|
|
209
|
+
* still read Up.
|
|
210
|
+
*/
|
|
211
|
+
it("a stamped status on a PROBE-POLLED device is ignored; its poll votes instead", () => {
|
|
212
|
+
// Stamped Offline, but the ping answered a minute ago: operational.
|
|
178
213
|
expect(
|
|
179
214
|
worst([
|
|
180
215
|
{
|
|
181
|
-
|
|
182
|
-
|
|
216
|
+
...answered(1),
|
|
217
|
+
currentMonitorStatusId: OFFLINE.monitorStatusId,
|
|
218
|
+
monitorStatusPriority: OFFLINE.priority,
|
|
183
219
|
},
|
|
184
|
-
failed(1),
|
|
185
220
|
]),
|
|
186
|
-
).toBe(
|
|
187
|
-
});
|
|
221
|
+
).toBe(OPERATIONAL.monitorStatusId);
|
|
188
222
|
|
|
189
|
-
|
|
223
|
+
// ...and the mirror: a stamped Operational cannot rescue a failing poll.
|
|
190
224
|
expect(
|
|
191
225
|
worst([
|
|
192
|
-
answered(1),
|
|
193
226
|
{
|
|
194
|
-
|
|
195
|
-
|
|
227
|
+
...failed(1),
|
|
228
|
+
currentMonitorStatusId: OPERATIONAL.monitorStatusId,
|
|
229
|
+
monitorStatusPriority: OPERATIONAL.priority,
|
|
196
230
|
},
|
|
197
|
-
answered(2),
|
|
198
231
|
]),
|
|
199
232
|
).toBe(OFFLINE.monitorStatusId);
|
|
233
|
+
|
|
234
|
+
// The retired "SNMP" spelling and an explicit "Probe" read alike.
|
|
235
|
+
for (const method of [
|
|
236
|
+
NetworkDeviceMonitoringMethod.Probe,
|
|
237
|
+
LEGACY_SNMP_MONITORING_METHOD,
|
|
238
|
+
"",
|
|
239
|
+
null,
|
|
240
|
+
undefined,
|
|
241
|
+
]) {
|
|
242
|
+
expect(
|
|
243
|
+
worst([
|
|
244
|
+
{
|
|
245
|
+
...answered(1),
|
|
246
|
+
monitoringMethod: method,
|
|
247
|
+
currentMonitorStatusId: OFFLINE.monitorStatusId,
|
|
248
|
+
monitorStatusPriority: OFFLINE.priority,
|
|
249
|
+
},
|
|
250
|
+
]),
|
|
251
|
+
).toBe(OPERATIONAL.monitorStatusId);
|
|
252
|
+
}
|
|
200
253
|
});
|
|
201
254
|
|
|
202
|
-
it("a stamped status whose priority is unknown falls back to reachability", () => {
|
|
203
|
-
|
|
255
|
+
it("a stamped status whose priority is unknown falls back to the shared reachability rule", () => {
|
|
256
|
+
/*
|
|
257
|
+
* The MonitorStatus row was deleted under a probe-polled device: it has
|
|
258
|
+
* a poll of its own to fall back to, so it still votes.
|
|
259
|
+
*/
|
|
204
260
|
expect(
|
|
205
261
|
worst([
|
|
206
262
|
{
|
|
@@ -219,16 +275,35 @@ describe("SiteStatusRollupUtil.worstStatus", () => {
|
|
|
219
275
|
},
|
|
220
276
|
]),
|
|
221
277
|
).toBe(OFFLINE.monitorStatusId);
|
|
278
|
+
|
|
279
|
+
/*
|
|
280
|
+
* The same deleted row under a MONITOR-BACKED device leaves nothing to
|
|
281
|
+
* fall back to — nothing polls it — so the shared rule answers Pending
|
|
282
|
+
* and it contributes nothing, exactly as an unstamped monitor-backed
|
|
283
|
+
* device does. Inventing a verdict from its NULL poll columns would be
|
|
284
|
+
* the months-old-lastSeenAt bug in a second place.
|
|
285
|
+
*/
|
|
286
|
+
expect(
|
|
287
|
+
worst([
|
|
288
|
+
{
|
|
289
|
+
monitoringMethod: MONITOR_BACKED,
|
|
290
|
+
currentMonitorStatusId: "deleted-status",
|
|
291
|
+
monitorStatusPriority: undefined,
|
|
292
|
+
},
|
|
293
|
+
]),
|
|
294
|
+
).toBeNull();
|
|
222
295
|
});
|
|
223
296
|
|
|
224
297
|
it("priority ties keep the first contributor (stable)", () => {
|
|
225
298
|
expect(
|
|
226
299
|
worst([
|
|
227
300
|
{
|
|
301
|
+
monitoringMethod: MONITOR_BACKED,
|
|
228
302
|
currentMonitorStatusId: "status-a",
|
|
229
303
|
monitorStatusPriority: 2,
|
|
230
304
|
},
|
|
231
305
|
{
|
|
306
|
+
monitoringMethod: MONITOR_BACKED,
|
|
232
307
|
currentMonitorStatusId: "status-b",
|
|
233
308
|
monitorStatusPriority: 2,
|
|
234
309
|
},
|
|
@@ -236,7 +311,7 @@ describe("SiteStatusRollupUtil.worstStatus", () => {
|
|
|
236
311
|
).toBe("status-a");
|
|
237
312
|
});
|
|
238
313
|
|
|
239
|
-
it("returns null when only
|
|
314
|
+
it("returns null when only poll fallbacks apply but the project has no flagged rows", () => {
|
|
240
315
|
expect(
|
|
241
316
|
worst([answered(1), failed(1)], {
|
|
242
317
|
operationalStatus: null,
|
|
@@ -250,10 +325,7 @@ describe("SiteStatusRollupUtil.worstStatus", () => {
|
|
|
250
325
|
worst(
|
|
251
326
|
[
|
|
252
327
|
failed(1), // offline equivalent missing -> skipped
|
|
253
|
-
|
|
254
|
-
currentMonitorStatusId: DEGRADED.monitorStatusId,
|
|
255
|
-
monitorStatusPriority: DEGRADED.priority,
|
|
256
|
-
},
|
|
328
|
+
monitorBacked(DEGRADED),
|
|
257
329
|
],
|
|
258
330
|
{ offlineStatus: null },
|
|
259
331
|
),
|
|
@@ -290,6 +362,26 @@ describe("SiteStatusRollupUtil.worstStatus", () => {
|
|
|
290
362
|
OFFLINE.monitorStatusId,
|
|
291
363
|
);
|
|
292
364
|
});
|
|
365
|
+
|
|
366
|
+
/*
|
|
367
|
+
* Issue #3562: the legacy branch above must never fire for a device that
|
|
368
|
+
* is not polled at all. A monitor-backed device switched over from probe
|
|
369
|
+
* polling keeps its old lastSeenAt until the switch-over clears it, and
|
|
370
|
+
* with no stamp yet it is Pending — not a months-old freshness verdict
|
|
371
|
+
* against the site.
|
|
372
|
+
*/
|
|
373
|
+
it("a monitor-backed device with no stamp contributes nothing, whatever its leftover poll columns say", () => {
|
|
374
|
+
const leftovers: DeviceHealthState = {
|
|
375
|
+
lastSeenAt: minutesAgo(600),
|
|
376
|
+
pollingIntervalInMinutes: 5,
|
|
377
|
+
monitoringMethod: MONITOR_BACKED,
|
|
378
|
+
};
|
|
379
|
+
|
|
380
|
+
expect(worst([leftovers])).toBeNull();
|
|
381
|
+
expect(worst([leftovers, answered(1)])).toBe(OPERATIONAL.monitorStatusId);
|
|
382
|
+
// A mirrored outcome without a stamp is not a vote either.
|
|
383
|
+
expect(worst([{ ...leftovers, isReachable: false }])).toBeNull();
|
|
384
|
+
});
|
|
293
385
|
});
|
|
294
386
|
|
|
295
387
|
/*
|
|
@@ -309,13 +401,23 @@ const LADDER: RollupStatusLadder = {
|
|
|
309
401
|
offlineStatus: OFFLINE,
|
|
310
402
|
};
|
|
311
403
|
|
|
312
|
-
|
|
404
|
+
/*
|
|
405
|
+
* A bucket of `count` MONITOR-BACKED devices carrying a stamped, resolved
|
|
406
|
+
* status.
|
|
407
|
+
*
|
|
408
|
+
* Monitor-backed on purpose: the stamp is only a device's vote on that kind
|
|
409
|
+
* of device (see the header), so a bucket built without the method would be
|
|
410
|
+
* a bucket of probe-polled devices with no poll columns — Pending, and
|
|
411
|
+
* silently absent from every share below. The share arithmetic these tests
|
|
412
|
+
* pin needs devices whose stamp actually counts.
|
|
413
|
+
*/
|
|
313
414
|
function stamped(
|
|
314
415
|
status: RollupStatusOption,
|
|
315
416
|
isOperational: boolean,
|
|
316
417
|
count: number,
|
|
317
418
|
): DeviceHealthState {
|
|
318
419
|
return {
|
|
420
|
+
monitoringMethod: MONITOR_BACKED,
|
|
319
421
|
currentMonitorStatusId: status.monitorStatusId,
|
|
320
422
|
monitorStatusPriority: status.priority,
|
|
321
423
|
monitorStatusIsOperational: isOperational,
|
|
@@ -388,12 +490,66 @@ describe("SiteStatusRollupUtil.deviceHealthShare", () => {
|
|
|
388
490
|
expect(share.nonOperationalDeviceCount).toBe(1);
|
|
389
491
|
});
|
|
390
492
|
|
|
391
|
-
|
|
493
|
+
/*
|
|
494
|
+
* Issue #3562: an unstamped monitor-backed bucket is a never-reported
|
|
495
|
+
* bucket, whatever its leftover poll columns say — it goes in neither
|
|
496
|
+
* side, so four hundred devices awaiting their first monitor evaluation
|
|
497
|
+
* cannot dilute the one switch that is genuinely dark.
|
|
498
|
+
*/
|
|
499
|
+
it("unstamped monitor-backed devices are in neither side either, whatever their leftovers say", () => {
|
|
500
|
+
const share: DeviceHealthShare = SiteStatusRollupUtil.deviceHealthShare({
|
|
501
|
+
deviceStates: [
|
|
502
|
+
failed(1),
|
|
503
|
+
{
|
|
504
|
+
lastSeenAt: minutesAgo(600),
|
|
505
|
+
pollingIntervalInMinutes: 5,
|
|
506
|
+
monitoringMethod: MONITOR_BACKED,
|
|
507
|
+
deviceCount: 400,
|
|
508
|
+
},
|
|
509
|
+
],
|
|
510
|
+
now: NOW,
|
|
511
|
+
});
|
|
512
|
+
|
|
513
|
+
expect(share.reportingDeviceCount).toBe(1);
|
|
514
|
+
expect(share.nonOperationalDeviceCount).toBe(1);
|
|
515
|
+
expect(share.nonOperationalPercent).toBe(100);
|
|
516
|
+
});
|
|
517
|
+
|
|
518
|
+
/*
|
|
519
|
+
* Issue #3562, the other direction, and the one an operator actually
|
|
520
|
+
* complains about: a Network Device monitor with an "interface down →
|
|
521
|
+
* Offline" criterion stamps four hundred answering switches non-operational
|
|
522
|
+
* the first time each of them reports a dark port. Counting those stamps
|
|
523
|
+
* here would put the region at 100% down while every device row under it
|
|
524
|
+
* reads Up. The share must read their POLLS, which all answered.
|
|
525
|
+
*/
|
|
526
|
+
it("a stamp on a PROBE-POLLED bucket does not enter the numerator; its poll does", () => {
|
|
527
|
+
const share: DeviceHealthShare = SiteStatusRollupUtil.deviceHealthShare({
|
|
528
|
+
deviceStates: [
|
|
529
|
+
{
|
|
530
|
+
...answered(1),
|
|
531
|
+
// Stamped Offline by an interface-down criterion...
|
|
532
|
+
currentMonitorStatusId: OFFLINE.monitorStatusId,
|
|
533
|
+
monitorStatusPriority: OFFLINE.priority,
|
|
534
|
+
monitorStatusIsOperational: false,
|
|
535
|
+
deviceCount: 400,
|
|
536
|
+
},
|
|
537
|
+
],
|
|
538
|
+
now: NOW,
|
|
539
|
+
});
|
|
540
|
+
|
|
541
|
+
expect(share.reportingDeviceCount).toBe(400);
|
|
542
|
+
// ...but all four hundred answered their ping, so none is down.
|
|
543
|
+
expect(share.nonOperationalDeviceCount).toBe(0);
|
|
544
|
+
expect(share.nonOperationalPercent).toBe(0);
|
|
545
|
+
});
|
|
546
|
+
|
|
547
|
+
it("falls back to the poll rule when the stamped status could not be resolved", () => {
|
|
392
548
|
/*
|
|
393
|
-
* Same fallback worst-of takes when it cannot resolve the row
|
|
394
|
-
*
|
|
395
|
-
*
|
|
396
|
-
*
|
|
549
|
+
* Same fallback worst-of takes when it cannot resolve the row. If the two
|
|
550
|
+
* policies disagreed about which devices their stamped status speaks for,
|
|
551
|
+
* the same fleet would read differently depending on which policy a site
|
|
552
|
+
* happened to use.
|
|
397
553
|
*/
|
|
398
554
|
const share: DeviceHealthShare = SiteStatusRollupUtil.deviceHealthShare({
|
|
399
555
|
deviceStates: [
|
|
@@ -495,6 +651,29 @@ describe("SiteStatusRollupUtil.percentThresholdStatus", () => {
|
|
|
495
651
|
expect(percent([], 50)).toBeNull();
|
|
496
652
|
expect(percent([{ deviceCount: 10 }], 50)).toBeNull();
|
|
497
653
|
});
|
|
654
|
+
|
|
655
|
+
/*
|
|
656
|
+
* Issue #3562, end to end and under BOTH policies. A region of four
|
|
657
|
+
* hundred probe-polled switches, every one answering its ping, every one
|
|
658
|
+
* stamped Offline by a Network Device monitor whose "interface down"
|
|
659
|
+
* criterion fired. The site card must be green, because the device list
|
|
660
|
+
* under it shows four hundred green pills. Before the precedence split it
|
|
661
|
+
* went red — a region on fire, drawn from a fleet with nothing wrong.
|
|
662
|
+
*/
|
|
663
|
+
it("interface-down stamps across an answering fleet leave the region operational", () => {
|
|
664
|
+
const stampedButAnswering: DeviceHealthState = {
|
|
665
|
+
...answered(1),
|
|
666
|
+
currentMonitorStatusId: OFFLINE.monitorStatusId,
|
|
667
|
+
monitorStatusPriority: OFFLINE.priority,
|
|
668
|
+
monitorStatusIsOperational: false,
|
|
669
|
+
deviceCount: 400,
|
|
670
|
+
};
|
|
671
|
+
|
|
672
|
+
expect(percent([stampedButAnswering], 50)).toBe(
|
|
673
|
+
OPERATIONAL.monitorStatusId,
|
|
674
|
+
);
|
|
675
|
+
expect(worst([stampedButAnswering])).toBe(OPERATIONAL.monitorStatusId);
|
|
676
|
+
});
|
|
498
677
|
});
|
|
499
678
|
|
|
500
679
|
describe("SiteStatusRollupUtil.rollupStatus dispatch", () => {
|
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
import NetworkSiteType from "../../../Models/DatabaseModels/NetworkSiteType";
|
|
2
|
+
import ObjectID from "../../../Types/ObjectID";
|
|
3
|
+
import NetworkSiteTypeHierarchyUtil, {
|
|
4
|
+
NetworkSiteTypeHierarchyNode,
|
|
5
|
+
} from "../../../Utils/NetworkSite/TypeHierarchyUtil";
|
|
6
|
+
import { describe, expect, it } from "@jest/globals";
|
|
7
|
+
|
|
8
|
+
function typeId(index: number): ObjectID {
|
|
9
|
+
return new ObjectID(
|
|
10
|
+
`aaaaaaaa-aaaa-4aaa-8aaa-${index.toString().padStart(12, "0")}`,
|
|
11
|
+
);
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
function makeType(data: {
|
|
15
|
+
index: number;
|
|
16
|
+
name: string;
|
|
17
|
+
order?: number | undefined;
|
|
18
|
+
parentIndex?: number | undefined;
|
|
19
|
+
isUnitLevel?: boolean | undefined;
|
|
20
|
+
}): NetworkSiteType {
|
|
21
|
+
const networkSiteType: NetworkSiteType = new NetworkSiteType();
|
|
22
|
+
networkSiteType.id = typeId(data.index);
|
|
23
|
+
networkSiteType.name = data.name;
|
|
24
|
+
|
|
25
|
+
if (data.order !== undefined) {
|
|
26
|
+
networkSiteType.order = data.order;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
if (data.isUnitLevel !== undefined) {
|
|
30
|
+
networkSiteType.isUnitLevel = data.isUnitLevel;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
if (data.parentIndex !== undefined) {
|
|
34
|
+
networkSiteType.parentNetworkSiteTypeId = typeId(data.parentIndex);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
return networkSiteType;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
function flatten(
|
|
41
|
+
tree: Array<NetworkSiteTypeHierarchyNode>,
|
|
42
|
+
): Array<NetworkSiteTypeHierarchyNode> {
|
|
43
|
+
return tree.flatMap((node: NetworkSiteTypeHierarchyNode) => {
|
|
44
|
+
return [node, ...flatten(node.children)];
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
describe("NetworkSiteTypeHierarchyUtil", () => {
|
|
49
|
+
it("builds a parent tree and orders siblings by order then name", () => {
|
|
50
|
+
const account: NetworkSiteType = makeType({
|
|
51
|
+
index: 1,
|
|
52
|
+
name: "Account",
|
|
53
|
+
order: 1,
|
|
54
|
+
});
|
|
55
|
+
const regionB: NetworkSiteType = makeType({
|
|
56
|
+
index: 2,
|
|
57
|
+
name: "Region B",
|
|
58
|
+
order: 2,
|
|
59
|
+
parentIndex: 1,
|
|
60
|
+
});
|
|
61
|
+
const regionA: NetworkSiteType = makeType({
|
|
62
|
+
index: 3,
|
|
63
|
+
name: "Region A",
|
|
64
|
+
order: 2,
|
|
65
|
+
parentIndex: 1,
|
|
66
|
+
});
|
|
67
|
+
const unordered: NetworkSiteType = makeType({
|
|
68
|
+
index: 4,
|
|
69
|
+
name: "Unordered",
|
|
70
|
+
parentIndex: 1,
|
|
71
|
+
});
|
|
72
|
+
|
|
73
|
+
const tree: Array<NetworkSiteTypeHierarchyNode> =
|
|
74
|
+
NetworkSiteTypeHierarchyUtil.buildTree({
|
|
75
|
+
networkSiteTypes: [unordered, regionB, account, regionA],
|
|
76
|
+
});
|
|
77
|
+
|
|
78
|
+
expect(
|
|
79
|
+
tree.map((node: NetworkSiteTypeHierarchyNode) => {
|
|
80
|
+
return node.networkSiteType.name;
|
|
81
|
+
}),
|
|
82
|
+
).toEqual(["Account"]);
|
|
83
|
+
expect(
|
|
84
|
+
tree[0]!.children.map((node: NetworkSiteTypeHierarchyNode) => {
|
|
85
|
+
return node.networkSiteType.name;
|
|
86
|
+
}),
|
|
87
|
+
).toEqual(["Region A", "Region B", "Unordered"]);
|
|
88
|
+
expect(
|
|
89
|
+
tree[0]!.children.every((node: NetworkSiteTypeHierarchyNode) => {
|
|
90
|
+
return node.depth === 1;
|
|
91
|
+
}),
|
|
92
|
+
).toBe(true);
|
|
93
|
+
});
|
|
94
|
+
|
|
95
|
+
it("reads a serialized relation when the scalar parent ID is absent", () => {
|
|
96
|
+
const parent: NetworkSiteType = makeType({ index: 1, name: "Parent" });
|
|
97
|
+
const child: NetworkSiteType = makeType({ index: 2, name: "Child" });
|
|
98
|
+
child.parentNetworkSiteType = parent;
|
|
99
|
+
|
|
100
|
+
expect(NetworkSiteTypeHierarchyUtil.getParentId(child)).toBe(
|
|
101
|
+
parent.id!.toString(),
|
|
102
|
+
);
|
|
103
|
+
});
|
|
104
|
+
|
|
105
|
+
it("returns ancestors closest-first and a root-first breadcrumb", () => {
|
|
106
|
+
const account: NetworkSiteType = makeType({ index: 1, name: "Account" });
|
|
107
|
+
const region: NetworkSiteType = makeType({
|
|
108
|
+
index: 2,
|
|
109
|
+
name: "Region",
|
|
110
|
+
parentIndex: 1,
|
|
111
|
+
});
|
|
112
|
+
const unit: NetworkSiteType = makeType({
|
|
113
|
+
index: 3,
|
|
114
|
+
name: "Unit",
|
|
115
|
+
parentIndex: 2,
|
|
116
|
+
});
|
|
117
|
+
const all: Array<NetworkSiteType> = [unit, account, region];
|
|
118
|
+
|
|
119
|
+
expect(
|
|
120
|
+
NetworkSiteTypeHierarchyUtil.getAncestorNetworkSiteTypes({
|
|
121
|
+
networkSiteType: unit,
|
|
122
|
+
networkSiteTypes: all,
|
|
123
|
+
}).map((networkSiteType: NetworkSiteType) => {
|
|
124
|
+
return networkSiteType.name;
|
|
125
|
+
}),
|
|
126
|
+
).toEqual(["Region", "Account"]);
|
|
127
|
+
expect(
|
|
128
|
+
NetworkSiteTypeHierarchyUtil.getBreadcrumbLabel({
|
|
129
|
+
networkSiteType: unit,
|
|
130
|
+
networkSiteTypes: all,
|
|
131
|
+
}),
|
|
132
|
+
).toBe("Account › Region › Unit");
|
|
133
|
+
});
|
|
134
|
+
|
|
135
|
+
it("excludes self, descendants, and unit-level types from parent candidates", () => {
|
|
136
|
+
const root: NetworkSiteType = makeType({ index: 1, name: "Root" });
|
|
137
|
+
const moving: NetworkSiteType = makeType({
|
|
138
|
+
index: 2,
|
|
139
|
+
name: "Moving",
|
|
140
|
+
parentIndex: 1,
|
|
141
|
+
});
|
|
142
|
+
const descendant: NetworkSiteType = makeType({
|
|
143
|
+
index: 3,
|
|
144
|
+
name: "Descendant",
|
|
145
|
+
parentIndex: 2,
|
|
146
|
+
});
|
|
147
|
+
const other: NetworkSiteType = makeType({ index: 4, name: "Other" });
|
|
148
|
+
const unit: NetworkSiteType = makeType({
|
|
149
|
+
index: 5,
|
|
150
|
+
name: "Unit",
|
|
151
|
+
isUnitLevel: true,
|
|
152
|
+
});
|
|
153
|
+
|
|
154
|
+
expect(
|
|
155
|
+
NetworkSiteTypeHierarchyUtil.getValidParentCandidates({
|
|
156
|
+
networkSiteType: moving,
|
|
157
|
+
networkSiteTypes: [descendant, unit, moving, other, root],
|
|
158
|
+
}).map((networkSiteType: NetworkSiteType) => {
|
|
159
|
+
return networkSiteType.name;
|
|
160
|
+
}),
|
|
161
|
+
).toEqual(["Other", "Root"]);
|
|
162
|
+
});
|
|
163
|
+
|
|
164
|
+
it("promotes orphans to roots so they remain visible", () => {
|
|
165
|
+
const orphan: NetworkSiteType = makeType({
|
|
166
|
+
index: 1,
|
|
167
|
+
name: "Orphan",
|
|
168
|
+
parentIndex: 99,
|
|
169
|
+
});
|
|
170
|
+
|
|
171
|
+
const tree: Array<NetworkSiteTypeHierarchyNode> =
|
|
172
|
+
NetworkSiteTypeHierarchyUtil.buildTree({ networkSiteTypes: [orphan] });
|
|
173
|
+
|
|
174
|
+
expect(tree).toHaveLength(1);
|
|
175
|
+
expect(tree[0]!.networkSiteType).toBe(orphan);
|
|
176
|
+
expect(tree[0]!.depth).toBe(0);
|
|
177
|
+
});
|
|
178
|
+
|
|
179
|
+
it("terminates cycles and includes every type exactly once", () => {
|
|
180
|
+
const a: NetworkSiteType = makeType({
|
|
181
|
+
index: 1,
|
|
182
|
+
name: "A",
|
|
183
|
+
parentIndex: 3,
|
|
184
|
+
});
|
|
185
|
+
const b: NetworkSiteType = makeType({
|
|
186
|
+
index: 2,
|
|
187
|
+
name: "B",
|
|
188
|
+
parentIndex: 1,
|
|
189
|
+
});
|
|
190
|
+
const c: NetworkSiteType = makeType({
|
|
191
|
+
index: 3,
|
|
192
|
+
name: "C",
|
|
193
|
+
parentIndex: 2,
|
|
194
|
+
});
|
|
195
|
+
|
|
196
|
+
const nodes: Array<NetworkSiteTypeHierarchyNode> = flatten(
|
|
197
|
+
NetworkSiteTypeHierarchyUtil.buildTree({ networkSiteTypes: [a, b, c] }),
|
|
198
|
+
);
|
|
199
|
+
|
|
200
|
+
expect(nodes).toHaveLength(3);
|
|
201
|
+
expect(
|
|
202
|
+
new Set(
|
|
203
|
+
nodes.map((node: NetworkSiteTypeHierarchyNode) => {
|
|
204
|
+
return node.networkSiteType.id!.toString();
|
|
205
|
+
}),
|
|
206
|
+
).size,
|
|
207
|
+
).toBe(3);
|
|
208
|
+
});
|
|
209
|
+
});
|