@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
|
@@ -0,0 +1,427 @@
|
|
|
1
|
+
import { describe, expect, test } from "@jest/globals";
|
|
2
|
+
import MonitorTemplate from "../../../Models/DatabaseModels/MonitorTemplate";
|
|
3
|
+
import NetworkAlertPolicy from "../../../Models/DatabaseModels/NetworkAlertPolicy";
|
|
4
|
+
import { JSONObject } from "../../../Types/JSON";
|
|
5
|
+
import MonitorCriteriaInstance from "../../../Types/Monitor/MonitorCriteriaInstance";
|
|
6
|
+
import MonitorStep from "../../../Types/Monitor/MonitorStep";
|
|
7
|
+
import MonitorSteps from "../../../Types/Monitor/MonitorSteps";
|
|
8
|
+
import MonitorType from "../../../Types/Monitor/MonitorType";
|
|
9
|
+
import NetworkDeviceAlertPackUtil, {
|
|
10
|
+
NetworkDeviceAlertPackItem,
|
|
11
|
+
} from "../../../Types/Monitor/SnmpMonitor/NetworkDeviceAlertPack";
|
|
12
|
+
import { NetworkAlertPolicyScopeUtil } from "../../../Types/NetworkDevice/NetworkAlertPolicyScope";
|
|
13
|
+
import ObjectID from "../../../Types/ObjectID";
|
|
14
|
+
import NetworkDeviceMonitorTemplateUtil from "../../../Utils/Monitor/NetworkDeviceMonitorTemplateUtil";
|
|
15
|
+
import NetworkAlertPolicyBootstrapUtil, {
|
|
16
|
+
RECOMMENDED_POLICY_NAME,
|
|
17
|
+
RECOMMENDED_TEMPLATE_MARKER,
|
|
18
|
+
RECOMMENDED_TEMPLATE_NAME,
|
|
19
|
+
RecommendedMonitorTemplateSeedIds,
|
|
20
|
+
} from "../../../Utils/NetworkDevice/NetworkAlertPolicyBootstrapUtil";
|
|
21
|
+
|
|
22
|
+
/*
|
|
23
|
+
* The bootstrap is the one path that builds a Network Device template with
|
|
24
|
+
* nobody looking at the monitor form, so nothing catches a half-filled
|
|
25
|
+
* criteria before the engine clones it onto a fleet. What has to hold:
|
|
26
|
+
*
|
|
27
|
+
* - the template is a Network Device template whose one step carries the
|
|
28
|
+
* alert pack, item for item;
|
|
29
|
+
* - every incident-creating item has an incident, every alert-creating
|
|
30
|
+
* item has an alert, at the severities it was given, auto-resolving;
|
|
31
|
+
* - the statuses are threaded through: offline on the incident items,
|
|
32
|
+
* online as the step's default;
|
|
33
|
+
* - the step has no device (the engine binds one per device) but has the
|
|
34
|
+
* block the engine's rebind requires;
|
|
35
|
+
* - the marker is a fixed string in the description, so the settings page
|
|
36
|
+
* finds the template again instead of minting a second one;
|
|
37
|
+
* - the recommended policy is unscoped and points at the template.
|
|
38
|
+
*/
|
|
39
|
+
|
|
40
|
+
const PROJECT_ID: ObjectID = new ObjectID(
|
|
41
|
+
"11111111-1111-4111-8111-111111111111",
|
|
42
|
+
);
|
|
43
|
+
const INCIDENT_SEVERITY_ID: ObjectID = new ObjectID(
|
|
44
|
+
"22222222-2222-4222-8222-222222222222",
|
|
45
|
+
);
|
|
46
|
+
const ALERT_SEVERITY_ID: ObjectID = new ObjectID(
|
|
47
|
+
"33333333-3333-4333-8333-333333333333",
|
|
48
|
+
);
|
|
49
|
+
const ONLINE_STATUS_ID: ObjectID = new ObjectID(
|
|
50
|
+
"44444444-4444-4444-8444-444444444444",
|
|
51
|
+
);
|
|
52
|
+
const OFFLINE_STATUS_ID: ObjectID = new ObjectID(
|
|
53
|
+
"55555555-5555-4555-8555-555555555555",
|
|
54
|
+
);
|
|
55
|
+
const TEMPLATE_ID: ObjectID = new ObjectID(
|
|
56
|
+
"66666666-6666-4666-8666-666666666666",
|
|
57
|
+
);
|
|
58
|
+
const DEVICE_ID: ObjectID = new ObjectID(
|
|
59
|
+
"77777777-7777-4777-8777-777777777777",
|
|
60
|
+
);
|
|
61
|
+
|
|
62
|
+
const SEED_IDS: RecommendedMonitorTemplateSeedIds = {
|
|
63
|
+
projectId: PROJECT_ID,
|
|
64
|
+
incidentSeverityId: INCIDENT_SEVERITY_ID,
|
|
65
|
+
alertSeverityId: ALERT_SEVERITY_ID,
|
|
66
|
+
onlineMonitorStatusId: ONLINE_STATUS_ID,
|
|
67
|
+
offlineMonitorStatusId: OFFLINE_STATUS_ID,
|
|
68
|
+
};
|
|
69
|
+
|
|
70
|
+
type BuildTemplateFunction = () => MonitorTemplate;
|
|
71
|
+
|
|
72
|
+
const buildTemplate: BuildTemplateFunction = (): MonitorTemplate => {
|
|
73
|
+
return NetworkAlertPolicyBootstrapUtil.buildRecommendedMonitorTemplate(
|
|
74
|
+
SEED_IDS,
|
|
75
|
+
);
|
|
76
|
+
};
|
|
77
|
+
|
|
78
|
+
type CriteriaOfFunction = (
|
|
79
|
+
template: MonitorTemplate,
|
|
80
|
+
) => Array<MonitorCriteriaInstance>;
|
|
81
|
+
|
|
82
|
+
const criteriaOf: CriteriaOfFunction = (
|
|
83
|
+
template: MonitorTemplate,
|
|
84
|
+
): Array<MonitorCriteriaInstance> => {
|
|
85
|
+
const step: MonitorStep | undefined =
|
|
86
|
+
template.monitorSteps?.data?.monitorStepsInstanceArray[0];
|
|
87
|
+
|
|
88
|
+
return step?.data?.monitorCriteria?.data?.monitorCriteriaInstanceArray || [];
|
|
89
|
+
};
|
|
90
|
+
|
|
91
|
+
describe("NetworkAlertPolicyBootstrapUtil.buildRecommendedMonitorTemplate", () => {
|
|
92
|
+
test("is a Network Device template in the project, named and marked", () => {
|
|
93
|
+
const template: MonitorTemplate = buildTemplate();
|
|
94
|
+
|
|
95
|
+
expect(template.monitorType).toBe(MonitorType.NetworkDevice);
|
|
96
|
+
expect(template.projectId?.toString()).toBe(PROJECT_ID.toString());
|
|
97
|
+
expect(template.templateName).toBe(RECOMMENDED_TEMPLATE_NAME);
|
|
98
|
+
expect(template.templateDescription).toContain(RECOMMENDED_TEMPLATE_MARKER);
|
|
99
|
+
/*
|
|
100
|
+
* Deliberately blank: a default monitor name becomes a suffix on every
|
|
101
|
+
* provisioned monitor's name.
|
|
102
|
+
*/
|
|
103
|
+
expect(template.monitorName).toBeUndefined();
|
|
104
|
+
});
|
|
105
|
+
|
|
106
|
+
/*
|
|
107
|
+
* The settings page finds the template by this string. Changing it would
|
|
108
|
+
* orphan every template already minted and make the action mint another.
|
|
109
|
+
*/
|
|
110
|
+
test("the marker is a fixed, versioned string", () => {
|
|
111
|
+
expect(RECOMMENDED_TEMPLATE_MARKER).toBe(
|
|
112
|
+
"[oneuptime:network-alert-pack:v1]",
|
|
113
|
+
);
|
|
114
|
+
});
|
|
115
|
+
|
|
116
|
+
test("has exactly one step, carrying the alert pack item for item", () => {
|
|
117
|
+
const template: MonitorTemplate = buildTemplate();
|
|
118
|
+
const packItems: Array<NetworkDeviceAlertPackItem> =
|
|
119
|
+
NetworkDeviceAlertPackUtil.getPackItems();
|
|
120
|
+
|
|
121
|
+
expect(template.monitorSteps?.data?.monitorStepsInstanceArray).toHaveLength(
|
|
122
|
+
1,
|
|
123
|
+
);
|
|
124
|
+
|
|
125
|
+
const criteria: Array<MonitorCriteriaInstance> = criteriaOf(template);
|
|
126
|
+
|
|
127
|
+
expect(criteria).toHaveLength(packItems.length);
|
|
128
|
+
expect(
|
|
129
|
+
criteria.map((criteriaInstance: MonitorCriteriaInstance): string => {
|
|
130
|
+
return criteriaInstance.data?.name || "";
|
|
131
|
+
}),
|
|
132
|
+
).toEqual(
|
|
133
|
+
packItems.map((item: NetworkDeviceAlertPackItem): string => {
|
|
134
|
+
return item.name;
|
|
135
|
+
}),
|
|
136
|
+
);
|
|
137
|
+
|
|
138
|
+
for (const criteriaInstance of criteria) {
|
|
139
|
+
expect(criteriaInstance.data?.isEnabled).toBe(true);
|
|
140
|
+
expect(criteriaInstance.data?.filters.length).toBeGreaterThan(0);
|
|
141
|
+
}
|
|
142
|
+
});
|
|
143
|
+
|
|
144
|
+
test("every pack item has either an incident or an alert filled in, never neither", () => {
|
|
145
|
+
const criteria: Array<MonitorCriteriaInstance> =
|
|
146
|
+
criteriaOf(buildTemplate());
|
|
147
|
+
|
|
148
|
+
for (const criteriaInstance of criteria) {
|
|
149
|
+
const incidents: number = criteriaInstance.data?.incidents.length || 0;
|
|
150
|
+
const alerts: number = criteriaInstance.data?.alerts.length || 0;
|
|
151
|
+
|
|
152
|
+
expect(incidents + alerts).toBeGreaterThan(0);
|
|
153
|
+
|
|
154
|
+
if (criteriaInstance.data?.createIncidents) {
|
|
155
|
+
expect(incidents).toBe(1);
|
|
156
|
+
} else {
|
|
157
|
+
expect(incidents).toBe(0);
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
if (criteriaInstance.data?.createAlerts) {
|
|
161
|
+
expect(alerts).toBe(1);
|
|
162
|
+
} else {
|
|
163
|
+
expect(alerts).toBe(0);
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
});
|
|
167
|
+
|
|
168
|
+
test("incident items carry the incident severity, auto-resolve and are titled after the item", () => {
|
|
169
|
+
const criteria: Array<MonitorCriteriaInstance> =
|
|
170
|
+
criteriaOf(buildTemplate());
|
|
171
|
+
|
|
172
|
+
const incidentItems: Array<MonitorCriteriaInstance> = criteria.filter(
|
|
173
|
+
(criteriaInstance: MonitorCriteriaInstance): boolean => {
|
|
174
|
+
return Boolean(criteriaInstance.data?.createIncidents);
|
|
175
|
+
},
|
|
176
|
+
);
|
|
177
|
+
|
|
178
|
+
expect(incidentItems.length).toBeGreaterThan(0);
|
|
179
|
+
|
|
180
|
+
for (const criteriaInstance of incidentItems) {
|
|
181
|
+
const incident: MonitorCriteriaInstance["data"] extends infer D
|
|
182
|
+
? D extends { incidents: Array<infer I> }
|
|
183
|
+
? I
|
|
184
|
+
: never
|
|
185
|
+
: never = criteriaInstance.data!.incidents[0]!;
|
|
186
|
+
|
|
187
|
+
expect(incident.incidentSeverityId?.toString()).toBe(
|
|
188
|
+
INCIDENT_SEVERITY_ID.toString(),
|
|
189
|
+
);
|
|
190
|
+
expect(incident.autoResolveIncident).toBe(true);
|
|
191
|
+
expect(incident.title).toBe(criteriaInstance.data?.name);
|
|
192
|
+
expect(incident.description).toBe(criteriaInstance.data?.description);
|
|
193
|
+
expect(incident.id).toBeTruthy();
|
|
194
|
+
expect(incident.onCallPolicyIds).toEqual([]);
|
|
195
|
+
}
|
|
196
|
+
});
|
|
197
|
+
|
|
198
|
+
test("alert items carry the alert severity, auto-resolve and are titled after the item", () => {
|
|
199
|
+
const criteria: Array<MonitorCriteriaInstance> =
|
|
200
|
+
criteriaOf(buildTemplate());
|
|
201
|
+
|
|
202
|
+
const alertItems: Array<MonitorCriteriaInstance> = criteria.filter(
|
|
203
|
+
(criteriaInstance: MonitorCriteriaInstance): boolean => {
|
|
204
|
+
return Boolean(criteriaInstance.data?.createAlerts);
|
|
205
|
+
},
|
|
206
|
+
);
|
|
207
|
+
|
|
208
|
+
expect(alertItems.length).toBeGreaterThan(0);
|
|
209
|
+
|
|
210
|
+
for (const criteriaInstance of alertItems) {
|
|
211
|
+
const alert: MonitorCriteriaInstance["data"] extends infer D
|
|
212
|
+
? D extends { alerts: Array<infer A> }
|
|
213
|
+
? A
|
|
214
|
+
: never
|
|
215
|
+
: never = criteriaInstance.data!.alerts[0]!;
|
|
216
|
+
|
|
217
|
+
expect(alert.alertSeverityId?.toString()).toBe(
|
|
218
|
+
ALERT_SEVERITY_ID.toString(),
|
|
219
|
+
);
|
|
220
|
+
expect(alert.autoResolveAlert).toBe(true);
|
|
221
|
+
expect(alert.title).toBe(criteriaInstance.data?.name);
|
|
222
|
+
expect(alert.description).toBe(criteriaInstance.data?.description);
|
|
223
|
+
expect(alert.id).toBeTruthy();
|
|
224
|
+
}
|
|
225
|
+
});
|
|
226
|
+
|
|
227
|
+
test("threads the offline status onto incident items and the online status onto the step default", () => {
|
|
228
|
+
const template: MonitorTemplate = buildTemplate();
|
|
229
|
+
|
|
230
|
+
expect(
|
|
231
|
+
template.monitorSteps?.data?.defaultMonitorStatusId?.toString(),
|
|
232
|
+
).toBe(ONLINE_STATUS_ID.toString());
|
|
233
|
+
|
|
234
|
+
for (const criteriaInstance of criteriaOf(template)) {
|
|
235
|
+
expect(criteriaInstance.data?.monitorStatusId?.toString()).toBe(
|
|
236
|
+
OFFLINE_STATUS_ID.toString(),
|
|
237
|
+
);
|
|
238
|
+
|
|
239
|
+
if (criteriaInstance.data?.createIncidents) {
|
|
240
|
+
expect(criteriaInstance.data?.changeMonitorStatus).toBe(true);
|
|
241
|
+
} else {
|
|
242
|
+
// An alert is not an outage; the monitor's status stays put.
|
|
243
|
+
expect(criteriaInstance.data?.changeMonitorStatus).toBe(false);
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
});
|
|
247
|
+
|
|
248
|
+
/*
|
|
249
|
+
* The engine clones the template per device and writes the device id into
|
|
250
|
+
* the step; the block it writes into has to exist, and the id has to be
|
|
251
|
+
* empty so the template's reference validator skips it rather than
|
|
252
|
+
* looking up a device that is not there.
|
|
253
|
+
*/
|
|
254
|
+
test("the step carries a Network Device block with no device, and the engine can rebind it", () => {
|
|
255
|
+
const template: MonitorTemplate = buildTemplate();
|
|
256
|
+
const step: MonitorStep =
|
|
257
|
+
template.monitorSteps!.data!.monitorStepsInstanceArray[0]!;
|
|
258
|
+
|
|
259
|
+
expect(step.data?.networkDeviceMonitor).toBeDefined();
|
|
260
|
+
expect(step.data?.networkDeviceMonitor?.networkDeviceId).toBeUndefined();
|
|
261
|
+
|
|
262
|
+
const rebound: MonitorSteps =
|
|
263
|
+
NetworkDeviceMonitorTemplateUtil.rebindMonitorSteps({
|
|
264
|
+
monitorSteps: template.monitorSteps,
|
|
265
|
+
networkDeviceId: DEVICE_ID,
|
|
266
|
+
});
|
|
267
|
+
|
|
268
|
+
expect(
|
|
269
|
+
rebound.data?.monitorStepsInstanceArray[0]?.data?.networkDeviceMonitor
|
|
270
|
+
?.networkDeviceId,
|
|
271
|
+
).toBe(DEVICE_ID.toString());
|
|
272
|
+
// The template itself is not mutated by the rebind.
|
|
273
|
+
expect(step.data?.networkDeviceMonitor?.networkDeviceId).toBeUndefined();
|
|
274
|
+
});
|
|
275
|
+
|
|
276
|
+
/*
|
|
277
|
+
* The template reaches the server as JSON (ModelAPI serializes it) and is
|
|
278
|
+
* read back through MonitorSteps.fromJSON on every use. A shape that does
|
|
279
|
+
* not survive that round trip would be accepted at create and useless
|
|
280
|
+
* afterwards.
|
|
281
|
+
*/
|
|
282
|
+
test("survives a JSON round trip with its criteria and actions intact", () => {
|
|
283
|
+
const template: MonitorTemplate = buildTemplate();
|
|
284
|
+
const json: JSONObject = template.monitorSteps!.toJSON();
|
|
285
|
+
const restored: MonitorSteps = MonitorSteps.fromJSON(json);
|
|
286
|
+
|
|
287
|
+
expect(restored.data?.defaultMonitorStatusId?.toString()).toBe(
|
|
288
|
+
ONLINE_STATUS_ID.toString(),
|
|
289
|
+
);
|
|
290
|
+
|
|
291
|
+
const restoredCriteria: Array<MonitorCriteriaInstance> =
|
|
292
|
+
restored.data?.monitorStepsInstanceArray[0]?.data?.monitorCriteria?.data
|
|
293
|
+
?.monitorCriteriaInstanceArray || [];
|
|
294
|
+
|
|
295
|
+
expect(restoredCriteria).toHaveLength(
|
|
296
|
+
NetworkDeviceAlertPackUtil.getPackItems().length,
|
|
297
|
+
);
|
|
298
|
+
|
|
299
|
+
for (const criteriaInstance of restoredCriteria) {
|
|
300
|
+
const incidents: number = criteriaInstance.data?.incidents.length || 0;
|
|
301
|
+
const alerts: number = criteriaInstance.data?.alerts.length || 0;
|
|
302
|
+
|
|
303
|
+
expect(incidents + alerts).toBeGreaterThan(0);
|
|
304
|
+
}
|
|
305
|
+
});
|
|
306
|
+
|
|
307
|
+
test("builds fresh ids on every call, so two projects never share a criteria id", () => {
|
|
308
|
+
const first: Array<MonitorCriteriaInstance> = criteriaOf(buildTemplate());
|
|
309
|
+
const second: Array<MonitorCriteriaInstance> = criteriaOf(buildTemplate());
|
|
310
|
+
|
|
311
|
+
const firstIds: Set<string> = new Set<string>(
|
|
312
|
+
first.map((criteriaInstance: MonitorCriteriaInstance): string => {
|
|
313
|
+
return criteriaInstance.data!.id;
|
|
314
|
+
}),
|
|
315
|
+
);
|
|
316
|
+
|
|
317
|
+
for (const criteriaInstance of second) {
|
|
318
|
+
expect(firstIds.has(criteriaInstance.data!.id)).toBe(false);
|
|
319
|
+
}
|
|
320
|
+
});
|
|
321
|
+
});
|
|
322
|
+
|
|
323
|
+
describe("NetworkAlertPolicyBootstrapUtil.buildRecommendedPolicy", () => {
|
|
324
|
+
test("is an enabled, unscoped policy on the template in the project", () => {
|
|
325
|
+
const policy: NetworkAlertPolicy =
|
|
326
|
+
NetworkAlertPolicyBootstrapUtil.buildRecommendedPolicy({
|
|
327
|
+
projectId: PROJECT_ID,
|
|
328
|
+
monitorTemplateId: TEMPLATE_ID,
|
|
329
|
+
});
|
|
330
|
+
|
|
331
|
+
expect(policy.name).toBe(RECOMMENDED_POLICY_NAME);
|
|
332
|
+
expect(policy.projectId?.toString()).toBe(PROJECT_ID.toString());
|
|
333
|
+
expect(policy.monitorTemplateId?.toString()).toBe(TEMPLATE_ID.toString());
|
|
334
|
+
expect(policy.isEnabled).toBe(true);
|
|
335
|
+
expect(policy.description).toBeTruthy();
|
|
336
|
+
expect(NetworkAlertPolicyScopeUtil.isUnscoped(policy.scope)).toBe(true);
|
|
337
|
+
expect(NetworkAlertPolicyScopeUtil.describe(policy.scope)).toBe(
|
|
338
|
+
"All devices",
|
|
339
|
+
);
|
|
340
|
+
});
|
|
341
|
+
|
|
342
|
+
/*
|
|
343
|
+
* The policy's description is what an operator reads on the settings page
|
|
344
|
+
* against a policy that covers everything, and four of the pack's five
|
|
345
|
+
* items read an SNMP walk. A device with no credentials is pinged rather
|
|
346
|
+
* than walked, so on it those four are never evaluated — describing the
|
|
347
|
+
* pack without that caveat promises interface and walk alerting that a
|
|
348
|
+
* ping-only estate will never see.
|
|
349
|
+
*/
|
|
350
|
+
test("its description says a ping-only device only gets the reachability item", () => {
|
|
351
|
+
const policy: NetworkAlertPolicy =
|
|
352
|
+
NetworkAlertPolicyBootstrapUtil.buildRecommendedPolicy({
|
|
353
|
+
projectId: PROJECT_ID,
|
|
354
|
+
monitorTemplateId: TEMPLATE_ID,
|
|
355
|
+
});
|
|
356
|
+
|
|
357
|
+
expect(policy.description).toContain("pinged rather than walked");
|
|
358
|
+
expect(policy.description).toContain("only the reachability item can fire");
|
|
359
|
+
});
|
|
360
|
+
});
|
|
361
|
+
|
|
362
|
+
describe("NetworkAlertPolicyBootstrapUtil.isRecommendedTemplate / findRecommendedTemplate", () => {
|
|
363
|
+
test("recognises the template it built, and only by its marker", () => {
|
|
364
|
+
expect(
|
|
365
|
+
NetworkAlertPolicyBootstrapUtil.isRecommendedTemplate(buildTemplate()),
|
|
366
|
+
).toBe(true);
|
|
367
|
+
|
|
368
|
+
const renamed: MonitorTemplate = buildTemplate();
|
|
369
|
+
renamed.templateName = "Our alert pack";
|
|
370
|
+
expect(NetworkAlertPolicyBootstrapUtil.isRecommendedTemplate(renamed)).toBe(
|
|
371
|
+
true,
|
|
372
|
+
);
|
|
373
|
+
|
|
374
|
+
const sameNameNoMarker: MonitorTemplate = new MonitorTemplate();
|
|
375
|
+
sameNameNoMarker.templateName = RECOMMENDED_TEMPLATE_NAME;
|
|
376
|
+
sameNameNoMarker.templateDescription = "Hand made.";
|
|
377
|
+
expect(
|
|
378
|
+
NetworkAlertPolicyBootstrapUtil.isRecommendedTemplate(sameNameNoMarker),
|
|
379
|
+
).toBe(false);
|
|
380
|
+
|
|
381
|
+
expect(NetworkAlertPolicyBootstrapUtil.isRecommendedTemplate(null)).toBe(
|
|
382
|
+
false,
|
|
383
|
+
);
|
|
384
|
+
expect(
|
|
385
|
+
NetworkAlertPolicyBootstrapUtil.isRecommendedTemplate(
|
|
386
|
+
new MonitorTemplate(),
|
|
387
|
+
),
|
|
388
|
+
).toBe(false);
|
|
389
|
+
});
|
|
390
|
+
|
|
391
|
+
test("finds the first marked template in a list, and null when there is none", () => {
|
|
392
|
+
const plain: MonitorTemplate = new MonitorTemplate();
|
|
393
|
+
plain.templateDescription = "Reachability only.";
|
|
394
|
+
|
|
395
|
+
const marked: MonitorTemplate = buildTemplate();
|
|
396
|
+
const alsoMarked: MonitorTemplate = buildTemplate();
|
|
397
|
+
|
|
398
|
+
expect(
|
|
399
|
+
NetworkAlertPolicyBootstrapUtil.findRecommendedTemplate([
|
|
400
|
+
plain,
|
|
401
|
+
marked,
|
|
402
|
+
alsoMarked,
|
|
403
|
+
]),
|
|
404
|
+
).toBe(marked);
|
|
405
|
+
|
|
406
|
+
expect(
|
|
407
|
+
NetworkAlertPolicyBootstrapUtil.findRecommendedTemplate([plain]),
|
|
408
|
+
).toBeNull();
|
|
409
|
+
|
|
410
|
+
expect(
|
|
411
|
+
NetworkAlertPolicyBootstrapUtil.findRecommendedTemplate([]),
|
|
412
|
+
).toBeNull();
|
|
413
|
+
});
|
|
414
|
+
|
|
415
|
+
/*
|
|
416
|
+
* An operator may rewrite the prose; the marker sits on its own line at
|
|
417
|
+
* the end so it survives an edit to the sentence above it.
|
|
418
|
+
*/
|
|
419
|
+
test("the marker sits on its own last line of the description", () => {
|
|
420
|
+
const description: string =
|
|
421
|
+
NetworkAlertPolicyBootstrapUtil.buildRecommendedTemplateDescription();
|
|
422
|
+
|
|
423
|
+
const lines: Array<string> = description.trim().split("\n");
|
|
424
|
+
|
|
425
|
+
expect(lines[lines.length - 1]).toBe(RECOMMENDED_TEMPLATE_MARKER);
|
|
426
|
+
});
|
|
427
|
+
});
|
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
import DeviceReachabilityUtil, {
|
|
2
|
+
NetworkDeviceReachability,
|
|
3
|
+
} from "../../../Utils/NetworkDevice/DeviceReachabilityUtil";
|
|
4
|
+
import NetworkDeviceMonitoringMethod from "../../../Types/NetworkDevice/NetworkDeviceMonitoringMethod";
|
|
5
|
+
import MonitorService from "../../../Server/Services/MonitorService";
|
|
6
|
+
import NetworkDeviceService from "../../../Server/Services/NetworkDeviceService";
|
|
7
|
+
import NetworkSiteService from "../../../Server/Services/NetworkSiteService";
|
|
8
|
+
import Monitor from "../../../Models/DatabaseModels/Monitor";
|
|
9
|
+
import NetworkDevice from "../../../Models/DatabaseModels/NetworkDevice";
|
|
10
|
+
import ObjectID from "../../../Types/ObjectID";
|
|
11
|
+
import { afterEach, describe, expect, test } from "@jest/globals";
|
|
12
|
+
|
|
13
|
+
/*
|
|
14
|
+
* A monitor-backed NetworkDevice is judged on two surfaces by two rules:
|
|
15
|
+
*
|
|
16
|
+
* - the pill (and the site rollup, the topology node, the Overview hero)
|
|
17
|
+
* reads the stamped MonitorStatus row through DeviceReachabilityUtil,
|
|
18
|
+
* which looks ONLY at `isOfflineState`;
|
|
19
|
+
* - the device list's summary tiles and Status facet count and filter in
|
|
20
|
+
* SQL over `isReachable`, which the server now stamps from the same
|
|
21
|
+
* monitor as `!isOfflineState`.
|
|
22
|
+
*
|
|
23
|
+
* Two rules over the same fact can only stay honest if they are the same
|
|
24
|
+
* rule. MonitorStatus is a ladder, not a pair — a "Degraded" row is neither
|
|
25
|
+
* operational nor offline — so the rung where they could most easily
|
|
26
|
+
* diverge is the middle one: read the operational flag on one side and the
|
|
27
|
+
* offline flag on the other and a degraded-but-reachable device is green in
|
|
28
|
+
* the pill and red in the tiles. What is pinned here is that, for every
|
|
29
|
+
* rung and for "no status yet", the boolean the server writes into
|
|
30
|
+
* `isReachable` is exactly the verdict the pill renders.
|
|
31
|
+
*/
|
|
32
|
+
|
|
33
|
+
interface LadderRung {
|
|
34
|
+
name: string;
|
|
35
|
+
isOperationalState: boolean;
|
|
36
|
+
isOfflineState: boolean;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
// The three rungs a MonitorStatus row can occupy, as the model flags them.
|
|
40
|
+
const LADDER: Array<LadderRung> = [
|
|
41
|
+
{ name: "Operational", isOperationalState: true, isOfflineState: false },
|
|
42
|
+
{ name: "Degraded", isOperationalState: false, isOfflineState: false },
|
|
43
|
+
{ name: "Offline", isOperationalState: false, isOfflineState: true },
|
|
44
|
+
];
|
|
45
|
+
|
|
46
|
+
function pillVerdict(
|
|
47
|
+
monitorStatusIsOffline: boolean | undefined,
|
|
48
|
+
): NetworkDeviceReachability {
|
|
49
|
+
return DeviceReachabilityUtil.getStatus({
|
|
50
|
+
monitoringMethod: NetworkDeviceMonitoringMethod.Monitor,
|
|
51
|
+
monitorStatusIsOffline: monitorStatusIsOffline,
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
describe("the pill's rule for a monitor-backed device", () => {
|
|
56
|
+
test.each(LADDER)(
|
|
57
|
+
"$name: reachable exactly when the row is not offline",
|
|
58
|
+
(rung: LadderRung) => {
|
|
59
|
+
const isUp: boolean =
|
|
60
|
+
pillVerdict(rung.isOfflineState) === NetworkDeviceReachability.Up;
|
|
61
|
+
|
|
62
|
+
expect(isUp).toBe(!rung.isOfflineState);
|
|
63
|
+
},
|
|
64
|
+
);
|
|
65
|
+
|
|
66
|
+
/*
|
|
67
|
+
* The rung that tells the two flags apart. Its operational flag is false,
|
|
68
|
+
* and if either side read that flag this device would be Down there.
|
|
69
|
+
*/
|
|
70
|
+
test("Degraded is Up, so the operational flag is not what decides", () => {
|
|
71
|
+
const degraded: LadderRung = LADDER.find((rung: LadderRung) => {
|
|
72
|
+
return rung.name === "Degraded";
|
|
73
|
+
})!;
|
|
74
|
+
|
|
75
|
+
expect(degraded.isOperationalState).toBe(false);
|
|
76
|
+
expect(pillVerdict(degraded.isOfflineState)).toBe(
|
|
77
|
+
NetworkDeviceReachability.Up,
|
|
78
|
+
);
|
|
79
|
+
});
|
|
80
|
+
|
|
81
|
+
test("Offline is Down", () => {
|
|
82
|
+
expect(pillVerdict(true)).toBe(NetworkDeviceReachability.Down);
|
|
83
|
+
});
|
|
84
|
+
|
|
85
|
+
/*
|
|
86
|
+
* No status yet — nothing bound, or bound and never evaluated — is a real
|
|
87
|
+
* Pending, and the server stamps NULL for it, which is what the tiles
|
|
88
|
+
* count as Pending too.
|
|
89
|
+
*/
|
|
90
|
+
test("no status at all is Pending", () => {
|
|
91
|
+
expect(pillVerdict(undefined)).toBe(NetworkDeviceReachability.Pending);
|
|
92
|
+
expect(pillVerdict(null as unknown as undefined)).toBe(
|
|
93
|
+
NetworkDeviceReachability.Pending,
|
|
94
|
+
);
|
|
95
|
+
});
|
|
96
|
+
});
|
|
97
|
+
|
|
98
|
+
/*
|
|
99
|
+
* The same ladder through the server. refreshStampedMonitorStatus is what
|
|
100
|
+
* writes `isReachable` for a monitor-backed device; drive it with a monitor
|
|
101
|
+
* on each rung and check the boolean it writes against the pill's verdict
|
|
102
|
+
* for that rung. The seams are the three it touches: read the device, read
|
|
103
|
+
* the monitor, write the columns.
|
|
104
|
+
*/
|
|
105
|
+
describe("the value the server stamps into isReachable", () => {
|
|
106
|
+
const DEVICE_ID: ObjectID = new ObjectID(
|
|
107
|
+
"aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa",
|
|
108
|
+
);
|
|
109
|
+
const PROJECT_ID: ObjectID = new ObjectID(
|
|
110
|
+
"bbbbbbbb-bbbb-4bbb-8bbb-bbbbbbbbbbbb",
|
|
111
|
+
);
|
|
112
|
+
const MONITOR_ID: ObjectID = new ObjectID(
|
|
113
|
+
"cccccccc-cccc-4ccc-8ccc-cccccccccccc",
|
|
114
|
+
);
|
|
115
|
+
|
|
116
|
+
afterEach(() => {
|
|
117
|
+
jest.restoreAllMocks();
|
|
118
|
+
});
|
|
119
|
+
|
|
120
|
+
async function stampedIsReachable(
|
|
121
|
+
monitor: Monitor | null,
|
|
122
|
+
): Promise<boolean | null | undefined> {
|
|
123
|
+
jest.spyOn(NetworkDeviceService, "findOneById").mockResolvedValue({
|
|
124
|
+
id: DEVICE_ID,
|
|
125
|
+
_id: DEVICE_ID.toString(),
|
|
126
|
+
projectId: PROJECT_ID,
|
|
127
|
+
monitoringMethod: NetworkDeviceMonitoringMethod.Monitor,
|
|
128
|
+
monitorId: MONITOR_ID,
|
|
129
|
+
// A stale value on every column, so the write is never skipped.
|
|
130
|
+
currentMonitorStatusId: ObjectID.generate(),
|
|
131
|
+
isReachable: undefined,
|
|
132
|
+
} as unknown as NetworkDevice);
|
|
133
|
+
jest.spyOn(MonitorService, "findOneBy").mockResolvedValue(monitor);
|
|
134
|
+
jest
|
|
135
|
+
.spyOn(NetworkSiteService, "recomputeRollupForSiteAndAncestors")
|
|
136
|
+
.mockResolvedValue(undefined as never);
|
|
137
|
+
|
|
138
|
+
const update: jest.SpyInstance = jest
|
|
139
|
+
.spyOn(NetworkDeviceService, "updateColumnsByIdWithoutHooks")
|
|
140
|
+
.mockResolvedValue(undefined as never);
|
|
141
|
+
|
|
142
|
+
await NetworkDeviceService.refreshStampedMonitorStatus({
|
|
143
|
+
deviceId: DEVICE_ID,
|
|
144
|
+
clearWhenNotMonitorBacked: false,
|
|
145
|
+
});
|
|
146
|
+
|
|
147
|
+
expect(update).toHaveBeenCalledTimes(1);
|
|
148
|
+
|
|
149
|
+
return (
|
|
150
|
+
update.mock.calls[0]![0].data as unknown as {
|
|
151
|
+
isReachable: boolean | null | undefined;
|
|
152
|
+
}
|
|
153
|
+
).isReachable;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
test.each(LADDER)(
|
|
157
|
+
"$name: equals the pill's verdict",
|
|
158
|
+
async (rung: LadderRung) => {
|
|
159
|
+
const stamped: boolean | null | undefined = await stampedIsReachable({
|
|
160
|
+
id: MONITOR_ID,
|
|
161
|
+
_id: MONITOR_ID.toString(),
|
|
162
|
+
currentMonitorStatusId: ObjectID.generate(),
|
|
163
|
+
currentMonitorStatus: {
|
|
164
|
+
isOperationalState: rung.isOperationalState,
|
|
165
|
+
isOfflineState: rung.isOfflineState,
|
|
166
|
+
},
|
|
167
|
+
} as unknown as Monitor);
|
|
168
|
+
|
|
169
|
+
expect(stamped).toBe(
|
|
170
|
+
pillVerdict(rung.isOfflineState) === NetworkDeviceReachability.Up,
|
|
171
|
+
);
|
|
172
|
+
},
|
|
173
|
+
);
|
|
174
|
+
|
|
175
|
+
test("no status: NULL, which is the pill's Pending", async () => {
|
|
176
|
+
const stamped: boolean | null | undefined = await stampedIsReachable({
|
|
177
|
+
id: MONITOR_ID,
|
|
178
|
+
_id: MONITOR_ID.toString(),
|
|
179
|
+
currentMonitorStatusId: undefined,
|
|
180
|
+
} as unknown as Monitor);
|
|
181
|
+
|
|
182
|
+
expect(stamped).toBeNull();
|
|
183
|
+
expect(pillVerdict(undefined)).toBe(NetworkDeviceReachability.Pending);
|
|
184
|
+
});
|
|
185
|
+
});
|