@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
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
import { describe, expect, test } from "@jest/globals";
|
|
2
2
|
import OneUptimeDate from "../../../Types/Date";
|
|
3
|
+
import NetworkDeviceMonitoringMethod, {
|
|
4
|
+
LEGACY_SNMP_MONITORING_METHOD,
|
|
5
|
+
} from "../../../Types/NetworkDevice/NetworkDeviceMonitoringMethod";
|
|
3
6
|
import {
|
|
4
7
|
DeviceHealthCounts,
|
|
8
|
+
DeviceHealthStateInput,
|
|
5
9
|
NetworkDeviceHealthState,
|
|
6
10
|
addDeviceHealth,
|
|
7
11
|
deviceAttentionCount,
|
|
@@ -16,11 +20,25 @@ import {
|
|
|
16
20
|
* has to look at.
|
|
17
21
|
*
|
|
18
22
|
* Everything the hierarchy view claims about an estate of 21,700 devices is
|
|
19
|
-
* this function summed up, so every branch of it is pinned here:
|
|
20
|
-
* monitor
|
|
21
|
-
* otherwise answering, and — the one that matters most —
|
|
22
|
-
* "unknown" instead of being quietly counted as either a failure
|
|
23
|
-
* success.
|
|
23
|
+
* this function summed up, so every branch of it is pinned here: which kind
|
|
24
|
+
* of device a stamped monitor status speaks for, what a dark port does to a
|
|
25
|
+
* device that is otherwise answering, and — the one that matters most —
|
|
26
|
+
* what stays "unknown" instead of being quietly counted as either a failure
|
|
27
|
+
* or a success.
|
|
28
|
+
*
|
|
29
|
+
* The precedence rule (issue #3562, ping-first polling). Under SNMP-first
|
|
30
|
+
* polling a stamped MonitorStatus outranked the poll on EVERY device, and
|
|
31
|
+
* that no longer holds: every probe-polled device is now pinged on its
|
|
32
|
+
* schedule, so it always has a poll verdict of its own, and the monitors
|
|
33
|
+
* that stamp it (a Network Device monitor watching its SNMP walk, with an
|
|
34
|
+
* "interface down → Offline" criterion) are watching something narrower
|
|
35
|
+
* than reachability. The rule is therefore split by kind of device:
|
|
36
|
+
*
|
|
37
|
+
* monitor-backed ("Monitor") — nothing polls it, so the stamp IS its
|
|
38
|
+
* health, and no stamp means Pending.
|
|
39
|
+
* probe-polled (anything else, including NULL, "" and the legacy "SNMP")
|
|
40
|
+
* — the poll decides; the stamp is
|
|
41
|
+
* informational and never consulted.
|
|
24
42
|
*/
|
|
25
43
|
|
|
26
44
|
const NOW: Date = OneUptimeDate.fromString("2026-08-21T12:00:00.000Z");
|
|
@@ -31,13 +49,38 @@ const minutesAgo: MinutesAgoFunction = (minutes: number): Date => {
|
|
|
31
49
|
return new Date(NOW.getTime() - minutes * 60 * 1000);
|
|
32
50
|
};
|
|
33
51
|
|
|
34
|
-
|
|
35
|
-
|
|
52
|
+
/*
|
|
53
|
+
* Every spelling of "this device is polled by its probe" that reaches the
|
|
54
|
+
* classifier from a real row. NULL and "" are rows written before the column
|
|
55
|
+
* existed; "SNMP" is the retired first value of the enum, and a device that
|
|
56
|
+
* carried it was probe-polled all along (the probe just did not ping it
|
|
57
|
+
* yet). All four must take the poll branch identically — a device that read
|
|
58
|
+
* as monitor-backed on one of them would have the stamp outrank its own
|
|
59
|
+
* poll, which is the regression this whole describe block exists to catch.
|
|
60
|
+
*/
|
|
61
|
+
const PROBE_POLLED_METHODS: Array<string | null | undefined> = [
|
|
62
|
+
// The real values, so a renamed member fails here and not in production.
|
|
63
|
+
NetworkDeviceMonitoringMethod.Probe,
|
|
64
|
+
LEGACY_SNMP_MONITORING_METHOD,
|
|
65
|
+
"",
|
|
66
|
+
null,
|
|
67
|
+
undefined,
|
|
68
|
+
];
|
|
69
|
+
|
|
70
|
+
// The one value on which a stamped MonitorStatus is the device's verdict.
|
|
71
|
+
const MONITOR_BACKED: string = NetworkDeviceMonitoringMethod.Monitor;
|
|
72
|
+
|
|
73
|
+
describe("deviceHealthState — a monitor's verdict is the system of record for a MONITOR-BACKED device", () => {
|
|
74
|
+
test("a status the ladder does not call offline makes the device up, whatever the poll leftovers say", () => {
|
|
36
75
|
expect(
|
|
37
76
|
deviceHealthState(
|
|
38
77
|
{
|
|
78
|
+
monitoringMethod: MONITOR_BACKED,
|
|
39
79
|
monitorStatusIsOffline: false,
|
|
40
|
-
|
|
80
|
+
/*
|
|
81
|
+
* Leftovers from before the device was switched over to a bound
|
|
82
|
+
* monitor. Nothing polls it now, so these must not be read.
|
|
83
|
+
*/
|
|
41
84
|
isReachable: false,
|
|
42
85
|
lastPolledAt: minutesAgo(1),
|
|
43
86
|
},
|
|
@@ -46,10 +89,11 @@ describe("deviceHealthState — a monitor's verdict is the system of record", ()
|
|
|
46
89
|
).toBe("healthy");
|
|
47
90
|
});
|
|
48
91
|
|
|
49
|
-
test("an offline monitor status makes the device down, whatever the poll
|
|
92
|
+
test("an offline monitor status makes the device down, whatever the poll leftovers say", () => {
|
|
50
93
|
expect(
|
|
51
94
|
deviceHealthState(
|
|
52
95
|
{
|
|
96
|
+
monitoringMethod: MONITOR_BACKED,
|
|
53
97
|
monitorStatusIsOffline: true,
|
|
54
98
|
isReachable: true,
|
|
55
99
|
lastPolledAt: minutesAgo(1),
|
|
@@ -63,19 +107,154 @@ describe("deviceHealthState — a monitor's verdict is the system of record", ()
|
|
|
63
107
|
test("a monitor-backed device that is up can still be degraded by its ports", () => {
|
|
64
108
|
expect(
|
|
65
109
|
deviceHealthState(
|
|
66
|
-
{
|
|
110
|
+
{
|
|
111
|
+
monitoringMethod: MONITOR_BACKED,
|
|
112
|
+
monitorStatusIsOffline: false,
|
|
113
|
+
interfacesDown: 3,
|
|
114
|
+
},
|
|
67
115
|
NOW,
|
|
68
116
|
),
|
|
69
117
|
).toBe("degraded");
|
|
70
118
|
});
|
|
71
119
|
|
|
72
120
|
/*
|
|
73
|
-
*
|
|
74
|
-
*
|
|
75
|
-
*
|
|
76
|
-
*
|
|
121
|
+
* The Pending case. A monitor-backed device with nothing stamped has
|
|
122
|
+
* either had no monitor bound to it yet (discovery used to import
|
|
123
|
+
* ping-only hosts that way on purpose) or has one that has never been
|
|
124
|
+
* evaluated. Neither is a verdict, and the device list says "Pending"
|
|
125
|
+
* about the very same row — reading a green or a red here would put the
|
|
126
|
+
* site card at odds with the pill under it.
|
|
77
127
|
*/
|
|
78
|
-
test("
|
|
128
|
+
test("a monitor-backed device nothing has stamped is unknown, not a verdict", () => {
|
|
129
|
+
expect(deviceHealthState({ monitoringMethod: MONITOR_BACKED }, NOW)).toBe(
|
|
130
|
+
"unknown",
|
|
131
|
+
);
|
|
132
|
+
expect(
|
|
133
|
+
deviceHealthState(
|
|
134
|
+
{ monitoringMethod: MONITOR_BACKED, monitorStatusIsOffline: undefined },
|
|
135
|
+
NOW,
|
|
136
|
+
),
|
|
137
|
+
).toBe("unknown");
|
|
138
|
+
expect(
|
|
139
|
+
deviceHealthState(
|
|
140
|
+
{ monitoringMethod: MONITOR_BACKED, monitorStatusIsOffline: null },
|
|
141
|
+
NOW,
|
|
142
|
+
),
|
|
143
|
+
).toBe("unknown");
|
|
144
|
+
// Not even dark ports promote a Pending device to a verdict.
|
|
145
|
+
expect(
|
|
146
|
+
deviceHealthState(
|
|
147
|
+
{ monitoringMethod: MONITOR_BACKED, interfacesDown: 3 },
|
|
148
|
+
NOW,
|
|
149
|
+
),
|
|
150
|
+
).toBe("unknown");
|
|
151
|
+
});
|
|
152
|
+
});
|
|
153
|
+
|
|
154
|
+
/*
|
|
155
|
+
* The other direction, and the reason the split exists (issue #3562).
|
|
156
|
+
*
|
|
157
|
+
* A probe-polled switch that answers every ping can carry a stamped Offline
|
|
158
|
+
* status: a Network Device monitor with an "interface down → Offline"
|
|
159
|
+
* criterion stamps one the moment a single port goes dark, and the SNMP
|
|
160
|
+
* walk failing on a credential change does the same. Letting that stamp
|
|
161
|
+
* decide here painted the site card and the topology node RED while the
|
|
162
|
+
* device's own row in the device list — which reads `isReachable` — said Up.
|
|
163
|
+
* These pin the stamp back down to informational for every device the probe
|
|
164
|
+
* polls.
|
|
165
|
+
*/
|
|
166
|
+
describe("deviceHealthState — a PROBE-POLLED device is judged by its poll, never by a stamp", () => {
|
|
167
|
+
test.each(PROBE_POLLED_METHODS)(
|
|
168
|
+
"monitoringMethod %p: a stamped Offline does not override an answering poll",
|
|
169
|
+
(monitoringMethod: string | null | undefined) => {
|
|
170
|
+
expect(
|
|
171
|
+
deviceHealthState(
|
|
172
|
+
{
|
|
173
|
+
monitoringMethod: monitoringMethod,
|
|
174
|
+
// An "interface down → Offline" criterion fired.
|
|
175
|
+
monitorStatusIsOffline: true,
|
|
176
|
+
// ...but the device answered its ping one minute ago.
|
|
177
|
+
isReachable: true,
|
|
178
|
+
lastPolledAt: minutesAgo(1),
|
|
179
|
+
lastSeenAt: minutesAgo(1),
|
|
180
|
+
},
|
|
181
|
+
NOW,
|
|
182
|
+
),
|
|
183
|
+
).toBe("healthy");
|
|
184
|
+
},
|
|
185
|
+
);
|
|
186
|
+
|
|
187
|
+
test.each(PROBE_POLLED_METHODS)(
|
|
188
|
+
"monitoringMethod %p: a stamped Operational does not rescue a failing poll",
|
|
189
|
+
(monitoringMethod: string | null | undefined) => {
|
|
190
|
+
expect(
|
|
191
|
+
deviceHealthState(
|
|
192
|
+
{
|
|
193
|
+
monitoringMethod: monitoringMethod,
|
|
194
|
+
monitorStatusIsOffline: false,
|
|
195
|
+
isReachable: false,
|
|
196
|
+
lastPolledAt: minutesAgo(1),
|
|
197
|
+
},
|
|
198
|
+
NOW,
|
|
199
|
+
),
|
|
200
|
+
).toBe("down");
|
|
201
|
+
},
|
|
202
|
+
);
|
|
203
|
+
|
|
204
|
+
/*
|
|
205
|
+
* The whole point of the split, stated as the invariant an operator sees:
|
|
206
|
+
* the interface-down criterion that stamps a switch Offline must move the
|
|
207
|
+
* device's own dark-port count and nothing else. A site of answering
|
|
208
|
+
* devices stays green with one degraded switch in it, and the map you
|
|
209
|
+
* reach by clicking that card draws the same switch amber rather than red.
|
|
210
|
+
*/
|
|
211
|
+
test("an interface-down stamp on an answering switch reads degraded, not down", () => {
|
|
212
|
+
expect(
|
|
213
|
+
deviceHealthState(
|
|
214
|
+
{
|
|
215
|
+
monitoringMethod: NetworkDeviceMonitoringMethod.Probe,
|
|
216
|
+
monitorStatusIsOffline: true,
|
|
217
|
+
isReachable: true,
|
|
218
|
+
lastPolledAt: minutesAgo(1),
|
|
219
|
+
lastSeenAt: minutesAgo(1),
|
|
220
|
+
interfacesDown: 3,
|
|
221
|
+
},
|
|
222
|
+
NOW,
|
|
223
|
+
),
|
|
224
|
+
).toBe("degraded");
|
|
225
|
+
});
|
|
226
|
+
|
|
227
|
+
/*
|
|
228
|
+
* A probe-polled device with a failing SNMP walk still answers ping, so
|
|
229
|
+
* `isReachable` is true (reachability is ping OR walk) and the device is
|
|
230
|
+
* up. The walk's own verdict lives in isSnmpReachable and is a separate,
|
|
231
|
+
* explanatory pill — it is not this classifier's input at all, which is
|
|
232
|
+
* why a ping-only device can never be coloured by "SNMP failing".
|
|
233
|
+
*/
|
|
234
|
+
test("a failing SNMP walk on a device that answers ping is not a health verdict", () => {
|
|
235
|
+
expect(
|
|
236
|
+
deviceHealthState(
|
|
237
|
+
{
|
|
238
|
+
monitoringMethod: NetworkDeviceMonitoringMethod.Probe,
|
|
239
|
+
// The walk failed, so a Network Device monitor stamped it Offline.
|
|
240
|
+
monitorStatusIsOffline: true,
|
|
241
|
+
// Reachability is ping OR walk, and the ping answered.
|
|
242
|
+
isReachable: true,
|
|
243
|
+
lastPolledAt: minutesAgo(1),
|
|
244
|
+
lastSeenAt: minutesAgo(1),
|
|
245
|
+
},
|
|
246
|
+
NOW,
|
|
247
|
+
),
|
|
248
|
+
).toBe("healthy");
|
|
249
|
+
});
|
|
250
|
+
|
|
251
|
+
/*
|
|
252
|
+
* `undefined` means no monitor has stamped this device at all, which is
|
|
253
|
+
* the ordinary case for a probe-polled one. It must not be read as a
|
|
254
|
+
* verdict of any kind — doing so would either paint every switch in the
|
|
255
|
+
* estate down or hide every real outage behind a stamped green.
|
|
256
|
+
*/
|
|
257
|
+
test("an absent monitor status leaves the poll in charge, as always", () => {
|
|
79
258
|
expect(
|
|
80
259
|
deviceHealthState(
|
|
81
260
|
{
|
|
@@ -109,7 +288,10 @@ describe("deviceHealthState — a monitor's verdict is the system of record", ()
|
|
|
109
288
|
* networks, which is precisely what a shared classifier is for.
|
|
110
289
|
*
|
|
111
290
|
* NetworkDeviceTopology.ts resolves the ladder with
|
|
112
|
-
* `status.isOfflineState ? "down" : "up"
|
|
291
|
+
* `status.isOfflineState ? "down" : "up"` — and, since ping-first polling,
|
|
292
|
+
* only for a monitor-backed device (it applies the same isMonitorBacked gate
|
|
293
|
+
* this module does). So every device below is monitor-backed: that is the
|
|
294
|
+
* one kind of device on which a rung of the ladder decides anything.
|
|
113
295
|
*/
|
|
114
296
|
describe("the MonitorStatus ladder — a middle rung is not an outage", () => {
|
|
115
297
|
type LadderRow = {
|
|
@@ -126,7 +308,7 @@ describe("the MonitorStatus ladder — a middle rung is not an outage", () => {
|
|
|
126
308
|
{ name: "Offline", isOperationalState: false, isOfflineState: true },
|
|
127
309
|
];
|
|
128
310
|
|
|
129
|
-
// Exactly what NetworkDeviceTopology.ts does with a
|
|
311
|
+
// Exactly what NetworkDeviceTopology.ts does with a monitor-backed row.
|
|
130
312
|
function mapVerdict(row: LadderRow): "up" | "down" {
|
|
131
313
|
return row.isOfflineState ? "down" : "up";
|
|
132
314
|
}
|
|
@@ -135,7 +317,10 @@ describe("the MonitorStatus ladder — a middle rung is not an outage", () => {
|
|
|
135
317
|
"$name: the rollup agrees with the map about up/down",
|
|
136
318
|
(row: LadderRow) => {
|
|
137
319
|
const state: NetworkDeviceHealthState = deviceHealthState(
|
|
138
|
-
{
|
|
320
|
+
{
|
|
321
|
+
monitoringMethod: MONITOR_BACKED,
|
|
322
|
+
monitorStatusIsOffline: row.isOfflineState,
|
|
323
|
+
},
|
|
139
324
|
NOW,
|
|
140
325
|
);
|
|
141
326
|
const rollupSaysDown: boolean = state === "down";
|
|
@@ -144,9 +329,12 @@ describe("the MonitorStatus ladder — a middle rung is not an outage", () => {
|
|
|
144
329
|
);
|
|
145
330
|
|
|
146
331
|
test("a Degraded device with no dark ports is healthy, not down", () => {
|
|
147
|
-
expect(
|
|
148
|
-
|
|
149
|
-
|
|
332
|
+
expect(
|
|
333
|
+
deviceHealthState(
|
|
334
|
+
{ monitoringMethod: MONITOR_BACKED, monitorStatusIsOffline: false },
|
|
335
|
+
NOW,
|
|
336
|
+
),
|
|
337
|
+
).toBe("healthy");
|
|
150
338
|
});
|
|
151
339
|
|
|
152
340
|
/*
|
|
@@ -158,7 +346,10 @@ describe("the MonitorStatus ladder — a middle rung is not an outage", () => {
|
|
|
158
346
|
const downRungs: Array<string> = LADDER.filter((row: LadderRow) => {
|
|
159
347
|
return (
|
|
160
348
|
deviceHealthState(
|
|
161
|
-
{
|
|
349
|
+
{
|
|
350
|
+
monitoringMethod: MONITOR_BACKED,
|
|
351
|
+
monitorStatusIsOffline: row.isOfflineState,
|
|
352
|
+
},
|
|
162
353
|
NOW,
|
|
163
354
|
) === "down"
|
|
164
355
|
);
|
|
@@ -167,9 +358,46 @@ describe("the MonitorStatus ladder — a middle rung is not an outage", () => {
|
|
|
167
358
|
});
|
|
168
359
|
expect(downRungs).toEqual(["Offline"]);
|
|
169
360
|
});
|
|
361
|
+
|
|
362
|
+
/*
|
|
363
|
+
* ...and the same ladder against a PROBE-POLLED device, where no rung of
|
|
364
|
+
* it decides anything. Every one of the four reads by the poll instead, so
|
|
365
|
+
* the switch that answered its ping is healthy on all four rungs —
|
|
366
|
+
* including Offline, which is exactly what an "interface down" criterion
|
|
367
|
+
* stamps on a switch with one dark port.
|
|
368
|
+
*/
|
|
369
|
+
test.each(LADDER)(
|
|
370
|
+
"$name: a probe-polled device ignores the rung entirely and reads by its poll",
|
|
371
|
+
(row: LadderRow) => {
|
|
372
|
+
expect(
|
|
373
|
+
deviceHealthState(
|
|
374
|
+
{
|
|
375
|
+
monitoringMethod: NetworkDeviceMonitoringMethod.Probe,
|
|
376
|
+
monitorStatusIsOffline: row.isOfflineState,
|
|
377
|
+
isReachable: true,
|
|
378
|
+
lastPolledAt: minutesAgo(1),
|
|
379
|
+
lastSeenAt: minutesAgo(1),
|
|
380
|
+
},
|
|
381
|
+
NOW,
|
|
382
|
+
),
|
|
383
|
+
).toBe("healthy");
|
|
384
|
+
|
|
385
|
+
expect(
|
|
386
|
+
deviceHealthState(
|
|
387
|
+
{
|
|
388
|
+
monitoringMethod: NetworkDeviceMonitoringMethod.Probe,
|
|
389
|
+
monitorStatusIsOffline: row.isOfflineState,
|
|
390
|
+
isReachable: false,
|
|
391
|
+
lastPolledAt: minutesAgo(1),
|
|
392
|
+
},
|
|
393
|
+
NOW,
|
|
394
|
+
),
|
|
395
|
+
).toBe("down");
|
|
396
|
+
},
|
|
397
|
+
);
|
|
170
398
|
});
|
|
171
399
|
|
|
172
|
-
describe("deviceHealthState —
|
|
400
|
+
describe("deviceHealthState — the poll rule, which every probe-polled device reads", () => {
|
|
173
401
|
test("the probe asked and got nothing: down", () => {
|
|
174
402
|
expect(
|
|
175
403
|
deviceHealthState(
|
|
@@ -224,6 +452,39 @@ describe("deviceHealthState — reachability, when nothing is stamped", () => {
|
|
|
224
452
|
"down",
|
|
225
453
|
);
|
|
226
454
|
});
|
|
455
|
+
|
|
456
|
+
/*
|
|
457
|
+
* Issue #3562. A monitor-backed device is never polled, so whatever its
|
|
458
|
+
* poll columns hold is either NULL or what a probe last found before it
|
|
459
|
+
* stopped asking — a device switched over to a bound monitor keeps a
|
|
460
|
+
* lastSeenAt from months ago. With nothing stamped yet the only honest
|
|
461
|
+
* answer is "unknown", which is also what the device list says about the
|
|
462
|
+
* same row; letting the legacy freshness branch read that timestamp would
|
|
463
|
+
* put the site card at odds with the pill under it.
|
|
464
|
+
*/
|
|
465
|
+
test("a monitor-backed device nothing has reported on is unknown, whatever its leftover poll columns say", () => {
|
|
466
|
+
const leftovers: DeviceHealthStateInput = {
|
|
467
|
+
isReachable: null,
|
|
468
|
+
lastSeenAt: minutesAgo(60 * 24 * 30),
|
|
469
|
+
pollingIntervalInMinutes: 5,
|
|
470
|
+
};
|
|
471
|
+
|
|
472
|
+
// The legacy branch, for a device that IS polled: staleness decides.
|
|
473
|
+
expect(deviceHealthState(leftovers, NOW)).toBe("down");
|
|
474
|
+
expect(
|
|
475
|
+
deviceHealthState(
|
|
476
|
+
{ ...leftovers, monitoringMethod: MONITOR_BACKED },
|
|
477
|
+
NOW,
|
|
478
|
+
),
|
|
479
|
+
).toBe("unknown");
|
|
480
|
+
// ...and a mirrored outcome without a stamp is not a verdict either.
|
|
481
|
+
expect(
|
|
482
|
+
deviceHealthState(
|
|
483
|
+
{ ...leftovers, isReachable: true, monitoringMethod: MONITOR_BACKED },
|
|
484
|
+
NOW,
|
|
485
|
+
),
|
|
486
|
+
).toBe("unknown");
|
|
487
|
+
});
|
|
227
488
|
});
|
|
228
489
|
|
|
229
490
|
describe("deviceHealthState — degraded", () => {
|
|
@@ -860,3 +860,180 @@ describe("which rows count as monitor-backed", () => {
|
|
|
860
860
|
expect(result.isMonitorBacked).toBe(false);
|
|
861
861
|
});
|
|
862
862
|
});
|
|
863
|
+
|
|
864
|
+
/*
|
|
865
|
+
* The QUALIFIER inputs (issue #3562, ping-first polling).
|
|
866
|
+
*
|
|
867
|
+
* Every probe-polled device is PINGED on its schedule and additionally
|
|
868
|
+
* WALKED over SNMP only when credentials resolve for it, so `isReachable` is
|
|
869
|
+
* "the ping answered OR the walk succeeded" and the walk's own verdict lives
|
|
870
|
+
* separately in `isSnmpReachable` — NULL when no walk was attempted, which is
|
|
871
|
+
* every ping-only device forever. `probeId` and `isPollingEnabled` say
|
|
872
|
+
* whether the device can be polled at all.
|
|
873
|
+
*
|
|
874
|
+
* All four ride on this input so a surface can hand its whole row over once
|
|
875
|
+
* and put a second, explanatory pill ("SNMP failing", "No probe") beside the
|
|
876
|
+
* verdict. NONE of them moves the verdict, and that is load-bearing rather
|
|
877
|
+
* than incidental: the pill, the summary tiles and the Status filter are all
|
|
878
|
+
* SQL over `isReachable` alone, so a verdict that consulted a fifth column
|
|
879
|
+
* could not be counted or filtered by the list that renders it. Wire
|
|
880
|
+
* `isSnmpReachable` in here and a ping-only device — NULL walk, answering
|
|
881
|
+
* ping — starts reading Down or Pending on the map and the site card while
|
|
882
|
+
* its own row says Up.
|
|
883
|
+
*/
|
|
884
|
+
describe("the qualifier columns ride along without moving the verdict", () => {
|
|
885
|
+
// The verdict-deciding columns, held fixed while the qualifiers vary.
|
|
886
|
+
const ANSWERING: DeviceReachabilityInput = {
|
|
887
|
+
isReachable: true,
|
|
888
|
+
lastPolledAt: minutesAgo(1),
|
|
889
|
+
lastSeenAt: minutesAgo(1),
|
|
890
|
+
pollingIntervalInMinutes: 5,
|
|
891
|
+
};
|
|
892
|
+
|
|
893
|
+
const NOT_ANSWERING: DeviceReachabilityInput = {
|
|
894
|
+
isReachable: false,
|
|
895
|
+
lastPolledAt: minutesAgo(1),
|
|
896
|
+
lastSeenAt: minutesAgo(60),
|
|
897
|
+
pollingIntervalInMinutes: 5,
|
|
898
|
+
};
|
|
899
|
+
|
|
900
|
+
/*
|
|
901
|
+
* The three states of the walk: it succeeded, it failed, or no walk was
|
|
902
|
+
* attempted at all (a ping-only device — no usable credentials).
|
|
903
|
+
*/
|
|
904
|
+
const WALK_OUTCOMES: Array<[string, boolean | null]> = [
|
|
905
|
+
["a successful walk", true],
|
|
906
|
+
["a failed walk", false],
|
|
907
|
+
["no walk at all (ping-only)", null],
|
|
908
|
+
];
|
|
909
|
+
|
|
910
|
+
test.each(WALK_OUTCOMES)(
|
|
911
|
+
"%s leaves an answering device Up",
|
|
912
|
+
(_label: string, isSnmpReachable: boolean | null) => {
|
|
913
|
+
expect(
|
|
914
|
+
statusOf({
|
|
915
|
+
...ANSWERING,
|
|
916
|
+
isSnmpReachable: isSnmpReachable,
|
|
917
|
+
lastSnmpSeenAt: isSnmpReachable === true ? minutesAgo(1) : null,
|
|
918
|
+
}),
|
|
919
|
+
).toBe(NetworkDeviceReachability.Up);
|
|
920
|
+
},
|
|
921
|
+
);
|
|
922
|
+
|
|
923
|
+
test.each(WALK_OUTCOMES)(
|
|
924
|
+
"%s leaves a device that answered nothing Down",
|
|
925
|
+
(_label: string, isSnmpReachable: boolean | null) => {
|
|
926
|
+
expect(
|
|
927
|
+
statusOf({
|
|
928
|
+
...NOT_ANSWERING,
|
|
929
|
+
isSnmpReachable: isSnmpReachable,
|
|
930
|
+
}),
|
|
931
|
+
).toBe(NetworkDeviceReachability.Down);
|
|
932
|
+
},
|
|
933
|
+
);
|
|
934
|
+
|
|
935
|
+
/*
|
|
936
|
+
* The exact row the split exists for: a switch whose SNMP credentials were
|
|
937
|
+
* rotated. The walk fails every cycle, the ping answers every cycle, and
|
|
938
|
+
* `isReachable` records the OR — so the device is Up and the failing walk
|
|
939
|
+
* is somebody else's pill to render.
|
|
940
|
+
*/
|
|
941
|
+
test("a failing walk on a device that still answers ping is Up, not Down", () => {
|
|
942
|
+
expect(
|
|
943
|
+
statusOf({
|
|
944
|
+
isReachable: true,
|
|
945
|
+
isSnmpReachable: false,
|
|
946
|
+
lastPolledAt: minutesAgo(1),
|
|
947
|
+
lastSeenAt: minutesAgo(1),
|
|
948
|
+
lastSnmpSeenAt: minutesAgo(60 * 24 * 7),
|
|
949
|
+
pollingIntervalInMinutes: 5,
|
|
950
|
+
}),
|
|
951
|
+
).toBe(NetworkDeviceReachability.Up);
|
|
952
|
+
});
|
|
953
|
+
|
|
954
|
+
/*
|
|
955
|
+
* ...and a ping-only device is never "SNMP failing": its walk verdict is
|
|
956
|
+
* NULL because no walk was attempted, which must read no differently from
|
|
957
|
+
* a device whose walk succeeded.
|
|
958
|
+
*/
|
|
959
|
+
test("a ping-only device (NULL walk verdict) reads exactly as a walked one", () => {
|
|
960
|
+
const pingOnly: NetworkDeviceReachability = statusOf({
|
|
961
|
+
...ANSWERING,
|
|
962
|
+
isSnmpReachable: null,
|
|
963
|
+
lastSnmpSeenAt: null,
|
|
964
|
+
});
|
|
965
|
+
const walked: NetworkDeviceReachability = statusOf({
|
|
966
|
+
...ANSWERING,
|
|
967
|
+
isSnmpReachable: true,
|
|
968
|
+
lastSnmpSeenAt: minutesAgo(1),
|
|
969
|
+
});
|
|
970
|
+
|
|
971
|
+
expect(pingOnly).toBe(walked);
|
|
972
|
+
expect(pingOnly).toBe(NetworkDeviceReachability.Up);
|
|
973
|
+
});
|
|
974
|
+
|
|
975
|
+
/*
|
|
976
|
+
* A device with no probe, or with polling switched off, cannot be polled —
|
|
977
|
+
* but neither fact is a verdict about the device. Whatever its last poll
|
|
978
|
+
* said still stands until something contradicts it, and a device with no
|
|
979
|
+
* poll on record stays Pending. Turning either into Down would paint a
|
|
980
|
+
* whole fleet red the moment somebody paused polling for a maintenance
|
|
981
|
+
* window.
|
|
982
|
+
*/
|
|
983
|
+
test("no probe and polling switched off qualify the verdict, they do not set it", () => {
|
|
984
|
+
for (const probeId of [null, undefined, "probe-1"]) {
|
|
985
|
+
for (const isPollingEnabled of [true, false, null, undefined]) {
|
|
986
|
+
expect(
|
|
987
|
+
statusOf({
|
|
988
|
+
...ANSWERING,
|
|
989
|
+
probeId: probeId,
|
|
990
|
+
isPollingEnabled: isPollingEnabled,
|
|
991
|
+
}),
|
|
992
|
+
).toBe(NetworkDeviceReachability.Up);
|
|
993
|
+
expect(
|
|
994
|
+
statusOf({
|
|
995
|
+
...NOT_ANSWERING,
|
|
996
|
+
probeId: probeId,
|
|
997
|
+
isPollingEnabled: isPollingEnabled,
|
|
998
|
+
}),
|
|
999
|
+
).toBe(NetworkDeviceReachability.Down);
|
|
1000
|
+
// Nothing polled yet: still Pending, not Down.
|
|
1001
|
+
expect(
|
|
1002
|
+
statusOf({
|
|
1003
|
+
probeId: probeId,
|
|
1004
|
+
isPollingEnabled: isPollingEnabled,
|
|
1005
|
+
}),
|
|
1006
|
+
).toBe(NetworkDeviceReachability.Pending);
|
|
1007
|
+
}
|
|
1008
|
+
}
|
|
1009
|
+
});
|
|
1010
|
+
|
|
1011
|
+
/*
|
|
1012
|
+
* And the whole set at once, stated as the invariant rather than case by
|
|
1013
|
+
* case: for fixed verdict columns, no combination of the four qualifiers
|
|
1014
|
+
* changes the answer.
|
|
1015
|
+
*/
|
|
1016
|
+
test("no combination of the four qualifiers changes the verdict", () => {
|
|
1017
|
+
for (const base of [ANSWERING, NOT_ANSWERING]) {
|
|
1018
|
+
const expected: NetworkDeviceReachability = statusOf(base);
|
|
1019
|
+
|
|
1020
|
+
for (const isSnmpReachable of [true, false, null, undefined]) {
|
|
1021
|
+
for (const lastSnmpSeenAt of [minutesAgo(1), minutesAgo(99999), null]) {
|
|
1022
|
+
for (const probeId of [null, "probe-1"]) {
|
|
1023
|
+
for (const isPollingEnabled of [true, false]) {
|
|
1024
|
+
expect(
|
|
1025
|
+
statusOf({
|
|
1026
|
+
...base,
|
|
1027
|
+
isSnmpReachable: isSnmpReachable,
|
|
1028
|
+
lastSnmpSeenAt: lastSnmpSeenAt,
|
|
1029
|
+
probeId: probeId,
|
|
1030
|
+
isPollingEnabled: isPollingEnabled,
|
|
1031
|
+
}),
|
|
1032
|
+
).toBe(expected);
|
|
1033
|
+
}
|
|
1034
|
+
}
|
|
1035
|
+
}
|
|
1036
|
+
}
|
|
1037
|
+
}
|
|
1038
|
+
});
|
|
1039
|
+
});
|