@oneuptime/common 12.0.32 → 12.0.33
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Models/AnalyticsModels/Span.ts +14 -0
- package/Models/DatabaseModels/EnterpriseLicense.ts +56 -0
- package/Models/DatabaseModels/Index.ts +10 -0
- package/Models/DatabaseModels/Monitor.ts +76 -0
- package/Models/DatabaseModels/NetworkAlertPolicy.ts +690 -0
- package/Models/DatabaseModels/NetworkDevice.ts +176 -1
- package/Models/DatabaseModels/NetworkSite.ts +201 -2
- package/Models/DatabaseModels/NetworkSiteType.ts +102 -3
- package/Models/DatabaseModels/NetworkSnmpCredentialProfile.ts +841 -0
- package/Models/DatabaseModels/TelemetryException.ts +119 -0
- package/Models/DatabaseModels/UserNotificationEmailRollupBatch.ts +334 -0
- package/Models/DatabaseModels/UserNotificationEmailRollupItem.ts +370 -0
- package/Models/DatabaseModels/UserNotificationEmailRollupSetting.ts +282 -0
- package/Server/API/EnterpriseLicenseAPI.ts +391 -64
- package/Server/API/LlmProviderAPI.ts +137 -22
- package/Server/EnvironmentConfig.ts +14 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1790700000000-AddNetworkSiteTypeParentHierarchy.ts +55 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1790900000000-AddEnterpriseLicenseUsageProvenance.ts +31 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1790900000000-AddTelemetryExceptionErrorClass.ts +124 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1791000000000-AddUserNotificationEmailRollup.ts +132 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1791100000000-AddUserNotificationEmailRollupSetting.ts +79 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1791200000000-AddNetworkSnmpCredentialProfilesAndAlertPolicies.ts +191 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +12 -0
- package/Server/Infrastructure/QueueWorker.ts +38 -8
- package/Server/Middleware/BearerTokenAuthorization.ts +12 -0
- package/Server/Middleware/ProjectAuthorization.ts +11 -0
- package/Server/Middleware/SCIMAuthorization.ts +12 -0
- package/Server/Middleware/TelemetryIngest.ts +11 -0
- package/Server/Services/AIBillingService.ts +101 -27
- package/Server/Services/EnterpriseLicenseInstanceService.ts +197 -0
- package/Server/Services/EnterpriseLicenseService.ts +55 -0
- package/Server/Services/Index.ts +10 -0
- package/Server/Services/MonitorService.ts +143 -21
- package/Server/Services/MonitorStatusTimelineService.ts +150 -8
- package/Server/Services/MonitorTemplateService.ts +217 -1
- package/Server/Services/NetworkAlertPolicyEngineService.ts +2159 -0
- package/Server/Services/NetworkAlertPolicyService.ts +944 -0
- package/Server/Services/NetworkDeviceAutoImportRuleEngineService.ts +9 -10
- package/Server/Services/NetworkDeviceAutoImportRuleService.ts +60 -15
- package/Server/Services/NetworkDeviceService.ts +1032 -73
- package/Server/Services/NetworkSiteService.ts +1502 -129
- package/Server/Services/NetworkSiteTypeService.ts +1216 -0
- package/Server/Services/NetworkSnmpCredentialProfileService.ts +238 -0
- package/Server/Services/NotificationService.ts +118 -28
- package/Server/Services/ProjectService.ts +105 -48
- package/Server/Services/StatusPagePrivateUserService.ts +103 -3
- package/Server/Services/UserNotificationEmailRollupBatchService.ts +78 -0
- package/Server/Services/UserNotificationEmailRollupItemService.ts +79 -0
- package/Server/Services/UserNotificationEmailRollupSettingService.ts +113 -0
- package/Server/Services/UserNotificationSettingService.ts +62 -25
- package/Server/Services/UserService.ts +95 -0
- package/Server/Types/Database/QueryHelper.ts +2 -2
- package/Server/Utils/AI/Chat/ObservabilityChatPrompt.ts +14 -3
- package/Server/Utils/AI/SRE/Insights/Detectors/ExceptionSpikeDetector.ts +10 -0
- package/Server/Utils/AI/SRE/Insights/Detectors/NewExceptionDetector.ts +10 -0
- package/Server/Utils/AI/SRE/Insights/InsightTriageRunner.ts +62 -1
- package/Server/Utils/AI/Toolbox/AlertTools.ts +15 -1
- package/Server/Utils/Billing/BillingFailureNoticeThrottle.ts +80 -0
- package/Server/Utils/DataSource/HttpFetch.ts +9 -2
- package/Server/Utils/EmailRollup/EmailRollupConstants.ts +98 -0
- package/Server/Utils/EmailRollup/EmailRollupFlushRunner.ts +872 -0
- package/Server/Utils/EmailRollup/EmailRollupRenderer.ts +781 -0
- package/Server/Utils/EmailRollup/EmailRollupWriter.ts +368 -0
- package/Server/Utils/LLM/LLMService.ts +78 -0
- package/Server/Utils/LogRedaction.ts +8 -0
- package/Server/Utils/Logger.ts +79 -1
- package/Server/Utils/Monitor/Criteria/DatabaseMonitorCriteria.ts +190 -0
- package/Server/Utils/Monitor/Criteria/EvaluateOverTime.ts +9 -2
- package/Server/Utils/Monitor/Criteria/SnmpMonitorCriteria.ts +61 -1
- package/Server/Utils/Monitor/MonitorCriteriaDataExtractor.ts +14 -0
- package/Server/Utils/Monitor/MonitorCriteriaEvaluator.ts +49 -0
- package/Server/Utils/Monitor/MonitorCriteriaObservationBuilder.ts +255 -4
- package/Server/Utils/Monitor/MonitorMetricUtil.ts +41 -0
- package/Server/Utils/Monitor/MonitorTemplateUtil.ts +43 -0
- package/Server/Utils/Monitor/NetworkDeviceHydrationUtil.ts +499 -19
- package/Server/Utils/Monitor/NetworkDeviceMetricUtil.ts +66 -10
- package/Server/Utils/Monitor/NetworkDeviceWalkUtil.ts +238 -44
- package/Server/Utils/Monitor/NetworkInventoryUtil.ts +146 -39
- package/Server/Utils/NetworkDevice/DeviceHealthAggregation.ts +31 -18
- package/Server/Utils/NetworkSite/NetworkSiteHierarchyLock.ts +213 -0
- package/Server/Utils/OutboundUserAgent.ts +152 -0
- package/Server/Utils/StartServer.ts +51 -19
- package/Server/Utils/Telemetry/CaptureSpan.ts +32 -8
- package/Server/Utils/Telemetry/ErrorClassResolver.ts +120 -0
- package/Server/Utils/Telemetry/SpanUtil.ts +33 -0
- package/Server/Utils/Telemetry.ts +198 -51
- package/Server/Views/Partials/SensitiveUrlToken.ejs +140 -0
- package/Tests/App/Dashboard/AddNeighborToMonitoringModal.test.tsx +134 -33
- package/Tests/App/Dashboard/AskAiSuggestedPrompts.test.ts +279 -0
- package/Tests/App/Dashboard/DashboardEditPermissions.test.tsx +517 -0
- package/Tests/App/Dashboard/DashboardVariablesDiscard.test.tsx +26 -0
- package/Tests/App/Dashboard/DeviceStatusHero.test.tsx +588 -0
- package/Tests/App/Dashboard/DiscoveryScanWizardValidation.test.tsx +18 -9
- package/Tests/App/Dashboard/MonitorCreateFromMonitorBackedDevice.test.tsx +632 -0
- package/Tests/App/Dashboard/MonitorRecommendationCreateProgress.test.tsx +682 -0
- package/Tests/App/Dashboard/MonitorTypePicker.test.tsx +4 -2
- package/Tests/App/Dashboard/NetworkDeviceCreateFormMonitorBinding.test.tsx +676 -0
- package/Tests/App/Dashboard/NetworkDeviceCreateFormPingMonitor.test.tsx +791 -0
- package/Tests/App/Dashboard/NetworkDeviceCreateFormProbeAndSnmp.test.tsx +833 -0
- package/Tests/App/Dashboard/NetworkDeviceCriteriaFilter.test.ts +161 -0
- package/Tests/App/Dashboard/NetworkDeviceSettingsMonitoringSection.test.tsx +458 -0
- package/Tests/App/Dashboard/NetworkSideMenu.test.tsx +41 -5
- package/Tests/App/Dashboard/PingMonitorProvisioning.test.ts +368 -0
- package/Tests/App/Dashboard/RecommendationCard.test.tsx +796 -0
- package/Tests/App/Dashboard/RecommendationToolbar.test.tsx +519 -0
- package/Tests/App/Dashboard/RecommendationsList.test.tsx +661 -0
- package/Tests/App/Dashboard/UseBulkCreatePingMonitors.test.tsx +899 -0
- package/Tests/App/Dashboard/UseBulkSnmpCredentialProfileActions.test.tsx +732 -0
- package/Tests/App/SensitiveUrlTokenBootstrap.test.ts +256 -0
- package/Tests/App/StatusPage/StatusPageIndexPageRobotsMeta.test.ts +11 -1
- package/Tests/App/StatusPage/StatusPageLoginCodeBootstrap.test.ts +9 -4
- package/Tests/Models/NetworkSiteHierarchy.test.ts +41 -4
- package/Tests/Server/API/EnterpriseLicenseReportUserCount.test.ts +951 -7
- package/Tests/Server/API/LlmProviderConnectionTest.test.ts +522 -0
- package/Tests/Server/Infrastructure/Postgres/NetworkSnmpCredentialProfilesAndAlertPoliciesMigration.test.ts +854 -0
- package/Tests/Server/Infrastructure/Postgres/SchemaMigrationsOrdering.test.ts +18 -0
- package/Tests/Server/Infrastructure/Postgres/UserNotificationEmailRollupTableMigration.test.ts +535 -0
- package/Tests/Server/Services/AIChatPrivacyPin.test.ts +560 -0
- package/Tests/Server/Services/BillingRechargeOwnerEmailGuards.test.ts +783 -0
- package/Tests/Server/Services/EnterpriseLicenseInstanceServiceDeletionUsage.test.ts +707 -0
- package/Tests/Server/Services/EnterpriseLicenseServiceUsageAggregationLock.test.ts +329 -0
- package/Tests/Server/Services/MonitorServiceDeleteNetworkDeviceCleanup.test.ts +294 -0
- package/Tests/Server/Services/MonitorStatusBridgeProbePath.test.ts +802 -0
- package/Tests/Server/Services/MonitorStatusTimelineService.test.ts +72 -2
- package/Tests/Server/Services/NetworkAlertPolicyEngineHooks.test.ts +752 -0
- package/Tests/Server/Services/NetworkAlertPolicyEngineService.test.ts +1849 -0
- package/Tests/Server/Services/NetworkAlertPolicyModel.test.ts +1793 -0
- package/Tests/Server/Services/NetworkDeviceAutoImportRuleEngineService.test.ts +47 -4
- package/Tests/Server/Services/NetworkDeviceAutoImportRuleService.test.ts +97 -12
- package/Tests/Server/Services/NetworkDeviceAutoMonitorLifecycle.test.ts +148 -3
- package/Tests/Server/Services/NetworkDeviceMonitorBindingUpdateGuard.test.ts +514 -0
- package/Tests/Server/Services/NetworkDeviceMonitorStatusStamp.test.ts +447 -58
- package/Tests/Server/Services/NetworkDeviceMonitoringMethodTransition.test.ts +739 -0
- package/Tests/Server/Services/NetworkDevicePollingTenancy.test.ts +501 -0
- package/Tests/Server/Services/NetworkDeviceSiteDefaultProbe.test.ts +432 -0
- package/Tests/Server/Services/NetworkSiteMonitoringDefaults.test.ts +498 -0
- package/Tests/Server/Services/NetworkSiteRollupPolicyAndMaintenance.test.ts +337 -55
- package/Tests/Server/Services/NetworkSiteService.test.ts +1868 -131
- package/Tests/Server/Services/NetworkSiteTypeService.test.ts +1109 -0
- package/Tests/Server/Services/NetworkSnmpCredentialProfileModel.test.ts +926 -0
- package/Tests/Server/Services/NetworkSnmpCredentialProfileService.test.ts +796 -0
- package/Tests/Server/Services/ProjectServiceNetworkSiteTypeDefaults.test.ts +214 -0
- package/Tests/Server/Services/StatusPagePrivateUserEmailChangePasswordResetExpiry.test.ts +269 -0
- package/Tests/Server/Services/UserEmailChangePasswordResetExpiry.test.ts +472 -0
- package/Tests/Server/Services/UserNotificationEmailRollupModels.test.ts +569 -0
- package/Tests/Server/Services/UserNotificationEmailRollupSettingModel.test.ts +314 -0
- package/Tests/Server/Services/UserNotificationEmailRollupSettingService.test.ts +409 -0
- package/Tests/Server/Services/UserNotificationSettingRollupRouting.test.ts +856 -0
- package/Tests/Server/Services/UserNotificationSettingWorkspaceChannels.test.ts +102 -1
- package/Tests/Server/Types/Database/Permissions/DashboardAccessPermission.test.ts +321 -0
- package/Tests/Server/Types/Database/QueryHelperOperators.test.ts +17 -0
- package/Tests/Server/Utils/AI/AlertMonitorFilters.test.ts +124 -0
- package/Tests/Server/Utils/AI/Insights/InsightTriageRunner.test.ts +208 -0
- package/Tests/Server/Utils/AI/LLMServiceToolCalling.test.ts +235 -0
- package/Tests/Server/Utils/AI/ObservabilityChatPrompt.test.ts +253 -0
- package/Tests/Server/Utils/Captcha.test.ts +422 -0
- package/Tests/Server/Utils/DataSource/HttpFetch.test.ts +96 -2
- package/Tests/Server/Utils/Database/MigrationFailureLog.test.ts +466 -0
- package/Tests/Server/Utils/EmailRollup/EmailRollupFlushRunnerBehaviour.test.ts +1096 -0
- package/Tests/Server/Utils/EmailRollup/EmailRollupFlushRunnerClaim.test.ts +466 -0
- package/Tests/Server/Utils/EmailRollup/EmailRollupRenderer.test.ts +1428 -0
- package/Tests/Server/Utils/EmailRollup/EmailRollupTestHarness.ts +752 -0
- package/Tests/Server/Utils/EmailRollup/EmailRollupWriter.test.ts +864 -0
- package/Tests/Server/Utils/LoggerFaultDemotion.test.ts +346 -0
- package/Tests/Server/Utils/Monitor/Criteria/DatabaseMonitorCriteria.test.ts +633 -0
- package/Tests/Server/Utils/Monitor/Criteria/SnmpMonitorCriteria.test.ts +196 -0
- package/Tests/Server/Utils/Monitor/DatabaseMetricWrite.test.ts +367 -0
- package/Tests/Server/Utils/Monitor/MonitorCriteriaObservationBuilderUnits.test.ts +100 -0
- package/Tests/Server/Utils/Monitor/MonitorStepResourceIdentity.test.ts +5 -0
- package/Tests/Server/Utils/Monitor/NetworkDeviceHydrationUtil.test.ts +512 -31
- package/Tests/Server/Utils/Monitor/NetworkDeviceMetricUtil.test.ts +252 -0
- package/Tests/Server/Utils/Monitor/NetworkDeviceWalkUtil.test.ts +479 -42
- package/Tests/Server/Utils/Monitor/NetworkInventoryUtil.test.ts +351 -5
- package/Tests/Server/Utils/NetworkDevice/DeviceHealthAggregation.test.ts +136 -12
- package/Tests/Server/Utils/NetworkSite/NetworkSiteHierarchyLock.test.ts +306 -0
- package/Tests/Server/Utils/OutboundUserAgent.test.ts +266 -0
- package/Tests/Server/Utils/SecurityEvent/ThreatIntel/TaxiiClientUserAgent.test.ts +141 -0
- package/Tests/Server/Utils/Telemetry/ErrorClassResolver.test.ts +298 -0
- package/Tests/Server/Utils/Telemetry.test.ts +456 -66
- package/Tests/Types/Monitor/DatabaseMetricCatalog.test.ts +388 -0
- package/Tests/Types/Monitor/MonitorStepDatabaseMonitor.test.ts +243 -0
- package/Tests/Types/Monitor/MonitorStepDefaultTelemetryConfig.test.ts +1 -0
- package/Tests/Types/Monitor/MonitorType.test.ts +1 -0
- package/Tests/Types/Monitor/MonitorTypeKeywords.test.ts +16 -7
- package/Tests/Types/Monitor/NetworkDeviceAlertPack.test.ts +60 -0
- package/Tests/Types/NetworkDevice/NetworkAlertPolicyScope.test.ts +655 -0
- package/Tests/Types/NetworkDevice/NetworkDeviceMonitoringMethod.test.ts +115 -26
- package/Tests/Types/NetworkSite/DefaultNetworkSiteType.test.ts +39 -0
- package/Tests/Types/NotificationSetting/NotificationEmailRollupPolicy.test.ts +299 -0
- package/Tests/Types/Telemetry/ErrorClass.test.ts +483 -0
- package/Tests/UI/Components/BasicRadioButtons.test.tsx +336 -0
- package/Tests/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.test.ts +15 -0
- package/Tests/UI/Components/ProgressBar.test.tsx +38 -2
- package/Tests/UI/Components/SideMenuItem.test.tsx +226 -4
- package/Tests/UI/Components/SideMenuSection.test.tsx +310 -0
- package/Tests/UI/Components/SideOverSubmitState.test.tsx +335 -0
- package/Tests/UI/Utils/PageScrollLock.test.tsx +377 -0
- package/Tests/UI/Utils/PermissionGate.test.ts +78 -0
- package/Tests/UI/Utils/SensitiveUrlToken.test.ts +140 -0
- package/Tests/Utils/EnterpriseLicenseSeats.test.ts +69 -0
- package/Tests/Utils/EnterpriseLicenseSync.test.ts +7 -1
- package/Tests/Utils/EnterpriseLicenseUsage.test.ts +433 -2
- package/Tests/Utils/Monitor/MonitorMetricType.test.ts +280 -1
- package/Tests/Utils/Monitor/MonitorSummarySnapshotUtil.test.ts +1 -0
- package/Tests/Utils/Monitor/NetworkTopologyUtil.test.ts +38 -0
- package/Tests/Utils/NetworkDevice/DeviceHealthStateUtil.test.ts +284 -23
- package/Tests/Utils/NetworkDevice/DeviceReachabilityUtil.test.ts +177 -0
- package/Tests/Utils/NetworkDevice/MonitoringMethodThreadedClassifiers.test.ts +992 -0
- package/Tests/Utils/NetworkDevice/NetworkAlertPolicyBootstrapUtil.test.ts +427 -0
- package/Tests/Utils/NetworkDevice/ReachabilityStampConsistency.test.ts +185 -0
- package/Tests/Utils/NetworkDevice/SnmpCredentialUtil.test.ts +268 -0
- package/Tests/Utils/NetworkDiscovery/AutoImportRuleMatcher.test.ts +55 -5
- package/Tests/Utils/NetworkDiscovery/DiscoveredDeviceBuilder.test.ts +98 -21
- package/Tests/Utils/NetworkDiscovery/DiscoveryImportEligibility.test.ts +98 -20
- package/Tests/Utils/NetworkDiscovery/DiscoveryReverseDnsChain.test.ts +8 -7
- package/Tests/Utils/NetworkDiscovery/PingMonitorBuilderForAddress.test.ts +274 -0
- package/Tests/Utils/NetworkSite/SiteStatusRollupUtil.test.ts +230 -51
- package/Tests/Utils/NetworkSite/TypeHierarchyUtil.test.ts +209 -0
- package/Tests/Utils/Telemetry/CaptureSpanExportGating.test.ts +145 -0
- package/Types/AI/ExceptionAIClassification.ts +10 -24
- package/Types/Email/EmailTemplateType.ts +2 -0
- package/Types/EnterpriseLicense/EnterpriseLicenseInstanceSummary.ts +5 -0
- package/Types/EnterpriseLicense/EnterpriseLicenseUsageSnapshot.ts +13 -0
- package/Types/EnterpriseLicense/EnterpriseLicenseUserCountSource.ts +6 -0
- package/Types/Exception/ApiException.ts +10 -0
- package/Types/Exception/BadDataException.ts +11 -0
- package/Types/Exception/BadRequestException.ts +11 -0
- package/Types/Exception/Exception.ts +65 -0
- package/Types/Exception/ForbiddenException.ts +10 -0
- package/Types/Exception/NotAuthenticatedException.ts +10 -0
- package/Types/Exception/NotAuthorizedException.ts +10 -0
- package/Types/Exception/NotFoundException.ts +11 -0
- package/Types/Exception/PayloadTooLargeException.ts +11 -0
- package/Types/Exception/PaymentRequiredException.ts +10 -0
- package/Types/Exception/ServiceUnavailableException.ts +10 -0
- package/Types/Exception/SsoAuthorizationException.ts +10 -0
- package/Types/Exception/TenantNotFoundException.ts +11 -0
- package/Types/Exception/TimeoutException.ts +10 -0
- package/Types/Exception/TooManyRequestsException.ts +10 -0
- package/Types/Exception/UnableToReachServer.ts +10 -0
- package/Types/Exception/WebsiteRequestException.ts +10 -0
- package/Types/Monitor/CriteriaFilter.ts +60 -2
- package/Types/Monitor/DatabaseMetricCatalog.ts +693 -0
- package/Types/Monitor/DatabaseMonitor/DatabaseMonitorResponse.ts +83 -0
- package/Types/Monitor/MonitorCriteriaInstance.ts +76 -0
- package/Types/Monitor/MonitorMetricType.ts +71 -0
- package/Types/Monitor/MonitorStep.ts +76 -0
- package/Types/Monitor/MonitorStepDatabaseMonitor.ts +171 -0
- package/Types/Monitor/MonitorStepSqlMonitor.ts +2 -20
- package/Types/Monitor/MonitorType.ts +47 -1
- package/Types/Monitor/SnmpMonitor/NetworkDeviceAlertPack.ts +22 -1
- package/Types/Monitor/SqlConnectionConfig.ts +31 -0
- package/Types/NetworkDevice/NetworkAlertPolicyScope.ts +343 -0
- package/Types/NetworkDevice/NetworkDeviceMonitoringMethod.ts +42 -22
- package/Types/NetworkSite/DefaultNetworkSiteTypeHierarchy.ts +30 -0
- package/Types/NotificationSetting/NotificationEmailRollupCategory.ts +255 -0
- package/Types/NotificationSetting/NotificationEmailRollupPolicy.ts +104 -0
- package/Types/Permission.ts +90 -0
- package/Types/Probe/ProbeMonitorResponse.ts +16 -0
- package/Types/Telemetry/ErrorClass.ts +274 -0
- package/Types/Telemetry/UnitOfWork.ts +59 -0
- package/UI/Components/CommandPalette/CommandPalette.tsx +2 -8
- package/UI/Components/EditionLabel/EditionLabel.tsx +4 -0
- package/UI/Components/Modal/Modal.tsx +2 -8
- package/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.ts +44 -0
- package/UI/Components/ProgressBar/ProgressBar.tsx +12 -1
- package/UI/Components/RadioButtons/BasicRadioButtons.tsx +37 -7
- package/UI/Components/SideMenu/SideMenu.tsx +123 -5
- package/UI/Components/SideMenu/SideMenuItem.tsx +76 -84
- package/UI/Components/SideMenu/SideMenuSection.tsx +55 -23
- package/UI/Components/SideOver/SideOver.tsx +21 -20
- package/UI/Utils/PageScrollLock.ts +79 -3
- package/UI/Utils/PermissionGate.ts +61 -0
- package/UI/Utils/SensitiveUrlToken.ts +112 -0
- package/UI/Utils/TestLLMProvider.ts +11 -0
- package/Utils/EnterpriseLicense/EnterpriseLicenseSeats.ts +16 -0
- package/Utils/EnterpriseLicense/EnterpriseLicenseUsage.ts +191 -11
- package/Utils/Monitor/MonitorMetricType.ts +153 -1
- package/Utils/Monitor/NetworkTopologyUtil.ts +23 -3
- package/Utils/NetworkDevice/DeviceHealthStateUtil.ts +65 -14
- package/Utils/NetworkDevice/DeviceReachabilityUtil.ts +43 -14
- package/Utils/NetworkDevice/NetworkAlertPolicyBootstrapUtil.ts +247 -0
- package/Utils/NetworkDevice/SnmpCredentialUtil.ts +68 -0
- package/Utils/NetworkDiscovery/AutoImportRuleMatcher.ts +15 -7
- package/Utils/NetworkDiscovery/DiscoveredDeviceBuilder.ts +52 -17
- package/Utils/NetworkDiscovery/DiscoveryImportEligibility.ts +55 -23
- package/Utils/NetworkDiscovery/PingMonitorBuilder.ts +115 -13
- package/Utils/NetworkSite/SiteStatusRollupUtil.ts +66 -20
- package/Utils/NetworkSite/TypeHierarchyUtil.ts +313 -0
- package/build/dist/Models/AnalyticsModels/Span.js +14 -0
- package/build/dist/Models/AnalyticsModels/Span.js.map +1 -1
- package/build/dist/Models/DatabaseModels/EnterpriseLicense.js +59 -0
- package/build/dist/Models/DatabaseModels/EnterpriseLicense.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Index.js +10 -0
- package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Monitor.js +75 -0
- package/build/dist/Models/DatabaseModels/Monitor.js.map +1 -1
- package/build/dist/Models/DatabaseModels/NetworkAlertPolicy.js +713 -0
- package/build/dist/Models/DatabaseModels/NetworkAlertPolicy.js.map +1 -0
- package/build/dist/Models/DatabaseModels/NetworkDevice.js +180 -1
- package/build/dist/Models/DatabaseModels/NetworkDevice.js.map +1 -1
- package/build/dist/Models/DatabaseModels/NetworkSite.js +200 -2
- package/build/dist/Models/DatabaseModels/NetworkSite.js.map +1 -1
- package/build/dist/Models/DatabaseModels/NetworkSiteType.js +102 -3
- package/build/dist/Models/DatabaseModels/NetworkSiteType.js.map +1 -1
- package/build/dist/Models/DatabaseModels/NetworkSnmpCredentialProfile.js +878 -0
- package/build/dist/Models/DatabaseModels/NetworkSnmpCredentialProfile.js.map +1 -0
- package/build/dist/Models/DatabaseModels/TelemetryException.js +123 -0
- package/build/dist/Models/DatabaseModels/TelemetryException.js.map +1 -1
- package/build/dist/Models/DatabaseModels/UserNotificationEmailRollupBatch.js +363 -0
- package/build/dist/Models/DatabaseModels/UserNotificationEmailRollupBatch.js.map +1 -0
- package/build/dist/Models/DatabaseModels/UserNotificationEmailRollupItem.js +402 -0
- package/build/dist/Models/DatabaseModels/UserNotificationEmailRollupItem.js.map +1 -0
- package/build/dist/Models/DatabaseModels/UserNotificationEmailRollupSetting.js +296 -0
- package/build/dist/Models/DatabaseModels/UserNotificationEmailRollupSetting.js.map +1 -0
- package/build/dist/Server/API/EnterpriseLicenseAPI.js +273 -60
- package/build/dist/Server/API/EnterpriseLicenseAPI.js.map +1 -1
- package/build/dist/Server/API/LlmProviderAPI.js +108 -13
- package/build/dist/Server/API/LlmProviderAPI.js.map +1 -1
- package/build/dist/Server/EnvironmentConfig.js +12 -0
- package/build/dist/Server/EnvironmentConfig.js.map +1 -1
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790700000000-AddNetworkSiteTypeParentHierarchy.js +24 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790700000000-AddNetworkSiteTypeParentHierarchy.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790900000000-AddEnterpriseLicenseUsageProvenance.js +16 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790900000000-AddEnterpriseLicenseUsageProvenance.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790900000000-AddTelemetryExceptionErrorClass.js +111 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790900000000-AddTelemetryExceptionErrorClass.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791000000000-AddUserNotificationEmailRollup.js +77 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791000000000-AddUserNotificationEmailRollup.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791100000000-AddUserNotificationEmailRollupSetting.js +50 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791100000000-AddUserNotificationEmailRollupSetting.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791200000000-AddNetworkSnmpCredentialProfilesAndAlertPolicies.js +83 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791200000000-AddNetworkSnmpCredentialProfilesAndAlertPolicies.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +12 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
- package/build/dist/Server/Infrastructure/QueueWorker.js +33 -5
- package/build/dist/Server/Infrastructure/QueueWorker.js.map +1 -1
- package/build/dist/Server/Middleware/BearerTokenAuthorization.js +12 -0
- package/build/dist/Server/Middleware/BearerTokenAuthorization.js.map +1 -1
- package/build/dist/Server/Middleware/ProjectAuthorization.js +11 -0
- package/build/dist/Server/Middleware/ProjectAuthorization.js.map +1 -1
- package/build/dist/Server/Middleware/SCIMAuthorization.js +12 -0
- package/build/dist/Server/Middleware/SCIMAuthorization.js.map +1 -1
- package/build/dist/Server/Middleware/TelemetryIngest.js +11 -0
- package/build/dist/Server/Middleware/TelemetryIngest.js.map +1 -1
- package/build/dist/Server/Services/AIBillingService.js +70 -16
- package/build/dist/Server/Services/AIBillingService.js.map +1 -1
- package/build/dist/Server/Services/EnterpriseLicenseInstanceService.js +167 -0
- package/build/dist/Server/Services/EnterpriseLicenseInstanceService.js.map +1 -1
- package/build/dist/Server/Services/EnterpriseLicenseService.js +39 -0
- package/build/dist/Server/Services/EnterpriseLicenseService.js.map +1 -1
- package/build/dist/Server/Services/Index.js +10 -0
- package/build/dist/Server/Services/Index.js.map +1 -1
- package/build/dist/Server/Services/MonitorService.js +119 -21
- package/build/dist/Server/Services/MonitorService.js.map +1 -1
- package/build/dist/Server/Services/MonitorStatusTimelineService.js +127 -8
- package/build/dist/Server/Services/MonitorStatusTimelineService.js.map +1 -1
- package/build/dist/Server/Services/MonitorTemplateService.js +162 -0
- package/build/dist/Server/Services/MonitorTemplateService.js.map +1 -1
- package/build/dist/Server/Services/NetworkAlertPolicyEngineService.js +1683 -0
- package/build/dist/Server/Services/NetworkAlertPolicyEngineService.js.map +1 -0
- package/build/dist/Server/Services/NetworkAlertPolicyService.js +732 -0
- package/build/dist/Server/Services/NetworkAlertPolicyService.js.map +1 -0
- package/build/dist/Server/Services/NetworkDeviceAutoImportRuleEngineService.js +10 -9
- package/build/dist/Server/Services/NetworkDeviceAutoImportRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/NetworkDeviceAutoImportRuleService.js +54 -11
- package/build/dist/Server/Services/NetworkDeviceAutoImportRuleService.js.map +1 -1
- package/build/dist/Server/Services/NetworkDeviceService.js +841 -70
- package/build/dist/Server/Services/NetworkDeviceService.js.map +1 -1
- package/build/dist/Server/Services/NetworkSiteService.js +1145 -107
- package/build/dist/Server/Services/NetworkSiteService.js.map +1 -1
- package/build/dist/Server/Services/NetworkSiteTypeService.js +863 -0
- package/build/dist/Server/Services/NetworkSiteTypeService.js.map +1 -1
- package/build/dist/Server/Services/NetworkSnmpCredentialProfileService.js +217 -0
- package/build/dist/Server/Services/NetworkSnmpCredentialProfileService.js.map +1 -0
- package/build/dist/Server/Services/NotificationService.js +80 -17
- package/build/dist/Server/Services/NotificationService.js.map +1 -1
- package/build/dist/Server/Services/ProjectService.js +66 -30
- package/build/dist/Server/Services/ProjectService.js.map +1 -1
- package/build/dist/Server/Services/StatusPagePrivateUserService.js +92 -2
- package/build/dist/Server/Services/StatusPagePrivateUserService.js.map +1 -1
- package/build/dist/Server/Services/UserNotificationEmailRollupBatchService.js +76 -0
- package/build/dist/Server/Services/UserNotificationEmailRollupBatchService.js.map +1 -0
- package/build/dist/Server/Services/UserNotificationEmailRollupItemService.js +77 -0
- package/build/dist/Server/Services/UserNotificationEmailRollupItemService.js.map +1 -0
- package/build/dist/Server/Services/UserNotificationEmailRollupSettingService.js +111 -0
- package/build/dist/Server/Services/UserNotificationEmailRollupSettingService.js.map +1 -0
- package/build/dist/Server/Services/UserNotificationSettingService.js +46 -20
- package/build/dist/Server/Services/UserNotificationSettingService.js.map +1 -1
- package/build/dist/Server/Services/UserService.js +90 -0
- package/build/dist/Server/Services/UserService.js.map +1 -1
- package/build/dist/Server/Types/Database/QueryHelper.js +1 -1
- package/build/dist/Server/Types/Database/QueryHelper.js.map +1 -1
- package/build/dist/Server/Utils/AI/Chat/ObservabilityChatPrompt.js +14 -3
- package/build/dist/Server/Utils/AI/Chat/ObservabilityChatPrompt.js.map +1 -1
- package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/ExceptionSpikeDetector.js +10 -0
- package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/ExceptionSpikeDetector.js.map +1 -1
- package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/NewExceptionDetector.js +10 -0
- package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/NewExceptionDetector.js.map +1 -1
- package/build/dist/Server/Utils/AI/SRE/Insights/InsightTriageRunner.js +54 -1
- package/build/dist/Server/Utils/AI/SRE/Insights/InsightTriageRunner.js.map +1 -1
- package/build/dist/Server/Utils/AI/Toolbox/AlertTools.js +18 -4
- package/build/dist/Server/Utils/AI/Toolbox/AlertTools.js.map +1 -1
- package/build/dist/Server/Utils/Billing/BillingFailureNoticeThrottle.js +59 -0
- package/build/dist/Server/Utils/Billing/BillingFailureNoticeThrottle.js.map +1 -0
- package/build/dist/Server/Utils/DataSource/HttpFetch.js +2 -1
- package/build/dist/Server/Utils/DataSource/HttpFetch.js.map +1 -1
- package/build/dist/Server/Utils/EmailRollup/EmailRollupConstants.js +91 -0
- package/build/dist/Server/Utils/EmailRollup/EmailRollupConstants.js.map +1 -0
- package/build/dist/Server/Utils/EmailRollup/EmailRollupFlushRunner.js +691 -0
- package/build/dist/Server/Utils/EmailRollup/EmailRollupFlushRunner.js.map +1 -0
- package/build/dist/Server/Utils/EmailRollup/EmailRollupRenderer.js +497 -0
- package/build/dist/Server/Utils/EmailRollup/EmailRollupRenderer.js.map +1 -0
- package/build/dist/Server/Utils/EmailRollup/EmailRollupWriter.js +257 -0
- package/build/dist/Server/Utils/EmailRollup/EmailRollupWriter.js.map +1 -0
- package/build/dist/Server/Utils/LLM/LLMService.js +64 -1
- package/build/dist/Server/Utils/LLM/LLMService.js.map +1 -1
- package/build/dist/Server/Utils/LogRedaction.js +8 -0
- package/build/dist/Server/Utils/LogRedaction.js.map +1 -1
- package/build/dist/Server/Utils/Logger.js +63 -1
- package/build/dist/Server/Utils/Logger.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/Criteria/DatabaseMonitorCriteria.js +141 -0
- package/build/dist/Server/Utils/Monitor/Criteria/DatabaseMonitorCriteria.js.map +1 -0
- package/build/dist/Server/Utils/Monitor/Criteria/EvaluateOverTime.js +8 -1
- package/build/dist/Server/Utils/Monitor/Criteria/EvaluateOverTime.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/Criteria/SnmpMonitorCriteria.js +51 -1
- package/build/dist/Server/Utils/Monitor/Criteria/SnmpMonitorCriteria.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaDataExtractor.js +7 -0
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaDataExtractor.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js +37 -0
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaObservationBuilder.js +158 -6
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaObservationBuilder.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorMetricUtil.js +33 -0
- package/build/dist/Server/Utils/Monitor/MonitorMetricUtil.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorTemplateUtil.js +32 -0
- package/build/dist/Server/Utils/Monitor/MonitorTemplateUtil.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/NetworkDeviceHydrationUtil.js +330 -21
- package/build/dist/Server/Utils/Monitor/NetworkDeviceHydrationUtil.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/NetworkDeviceMetricUtil.js +55 -10
- package/build/dist/Server/Utils/Monitor/NetworkDeviceMetricUtil.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/NetworkDeviceWalkUtil.js +178 -49
- package/build/dist/Server/Utils/Monitor/NetworkDeviceWalkUtil.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/NetworkInventoryUtil.js +119 -29
- package/build/dist/Server/Utils/Monitor/NetworkInventoryUtil.js.map +1 -1
- package/build/dist/Server/Utils/NetworkDevice/DeviceHealthAggregation.js +30 -17
- package/build/dist/Server/Utils/NetworkDevice/DeviceHealthAggregation.js.map +1 -1
- package/build/dist/Server/Utils/NetworkSite/NetworkSiteHierarchyLock.js +158 -0
- package/build/dist/Server/Utils/NetworkSite/NetworkSiteHierarchyLock.js.map +1 -0
- package/build/dist/Server/Utils/OutboundUserAgent.js +123 -0
- package/build/dist/Server/Utils/OutboundUserAgent.js.map +1 -0
- package/build/dist/Server/Utils/StartServer.js +38 -14
- package/build/dist/Server/Utils/StartServer.js.map +1 -1
- package/build/dist/Server/Utils/Telemetry/CaptureSpan.js +28 -8
- package/build/dist/Server/Utils/Telemetry/CaptureSpan.js.map +1 -1
- package/build/dist/Server/Utils/Telemetry/ErrorClassResolver.js +95 -0
- package/build/dist/Server/Utils/Telemetry/ErrorClassResolver.js.map +1 -0
- package/build/dist/Server/Utils/Telemetry/SpanUtil.js +29 -0
- package/build/dist/Server/Utils/Telemetry/SpanUtil.js.map +1 -1
- package/build/dist/Server/Utils/Telemetry.js +162 -46
- package/build/dist/Server/Utils/Telemetry.js.map +1 -1
- package/build/dist/Types/AI/ExceptionAIClassification.js +10 -24
- package/build/dist/Types/AI/ExceptionAIClassification.js.map +1 -1
- package/build/dist/Types/Email/EmailTemplateType.js +1 -0
- package/build/dist/Types/Email/EmailTemplateType.js.map +1 -1
- package/build/dist/Types/EnterpriseLicense/EnterpriseLicenseUsageSnapshot.js +2 -0
- package/build/dist/Types/EnterpriseLicense/EnterpriseLicenseUsageSnapshot.js.map +1 -0
- package/build/dist/Types/EnterpriseLicense/EnterpriseLicenseUserCountSource.js +7 -0
- package/build/dist/Types/EnterpriseLicense/EnterpriseLicenseUserCountSource.js.map +1 -0
- package/build/dist/Types/Exception/ApiException.js +9 -0
- package/build/dist/Types/Exception/ApiException.js.map +1 -1
- package/build/dist/Types/Exception/BadDataException.js +10 -0
- package/build/dist/Types/Exception/BadDataException.js.map +1 -1
- package/build/dist/Types/Exception/BadRequestException.js +10 -0
- package/build/dist/Types/Exception/BadRequestException.js.map +1 -1
- package/build/dist/Types/Exception/Exception.js +56 -0
- package/build/dist/Types/Exception/Exception.js.map +1 -1
- package/build/dist/Types/Exception/ForbiddenException.js +9 -0
- package/build/dist/Types/Exception/ForbiddenException.js.map +1 -1
- package/build/dist/Types/Exception/NotAuthenticatedException.js +9 -0
- package/build/dist/Types/Exception/NotAuthenticatedException.js.map +1 -1
- package/build/dist/Types/Exception/NotAuthorizedException.js +9 -0
- package/build/dist/Types/Exception/NotAuthorizedException.js.map +1 -1
- package/build/dist/Types/Exception/NotFoundException.js +10 -0
- package/build/dist/Types/Exception/NotFoundException.js.map +1 -1
- package/build/dist/Types/Exception/PayloadTooLargeException.js +10 -0
- package/build/dist/Types/Exception/PayloadTooLargeException.js.map +1 -1
- package/build/dist/Types/Exception/PaymentRequiredException.js +9 -0
- package/build/dist/Types/Exception/PaymentRequiredException.js.map +1 -1
- package/build/dist/Types/Exception/ServiceUnavailableException.js +9 -0
- package/build/dist/Types/Exception/ServiceUnavailableException.js.map +1 -1
- package/build/dist/Types/Exception/SsoAuthorizationException.js +9 -0
- package/build/dist/Types/Exception/SsoAuthorizationException.js.map +1 -1
- package/build/dist/Types/Exception/TenantNotFoundException.js +10 -0
- package/build/dist/Types/Exception/TenantNotFoundException.js.map +1 -1
- package/build/dist/Types/Exception/TimeoutException.js +9 -0
- package/build/dist/Types/Exception/TimeoutException.js.map +1 -1
- package/build/dist/Types/Exception/TooManyRequestsException.js +9 -0
- package/build/dist/Types/Exception/TooManyRequestsException.js.map +1 -1
- package/build/dist/Types/Exception/UnableToReachServer.js +9 -0
- package/build/dist/Types/Exception/UnableToReachServer.js.map +1 -1
- package/build/dist/Types/Exception/WebsiteRequestException.js +9 -0
- package/build/dist/Types/Exception/WebsiteRequestException.js.map +1 -1
- package/build/dist/Types/Monitor/CriteriaFilter.js +45 -2
- package/build/dist/Types/Monitor/CriteriaFilter.js.map +1 -1
- package/build/dist/Types/Monitor/DatabaseMetricCatalog.js +594 -0
- package/build/dist/Types/Monitor/DatabaseMetricCatalog.js.map +1 -0
- package/build/dist/Types/Monitor/DatabaseMonitor/DatabaseMonitorResponse.js +21 -0
- package/build/dist/Types/Monitor/DatabaseMonitor/DatabaseMonitorResponse.js.map +1 -0
- package/build/dist/Types/Monitor/MonitorCriteriaInstance.js +70 -0
- package/build/dist/Types/Monitor/MonitorCriteriaInstance.js.map +1 -1
- package/build/dist/Types/Monitor/MonitorMetricType.js +61 -0
- package/build/dist/Types/Monitor/MonitorMetricType.js.map +1 -1
- package/build/dist/Types/Monitor/MonitorStep.js +54 -0
- package/build/dist/Types/Monitor/MonitorStep.js.map +1 -1
- package/build/dist/Types/Monitor/MonitorStepDatabaseMonitor.js +122 -0
- package/build/dist/Types/Monitor/MonitorStepDatabaseMonitor.js.map +1 -0
- package/build/dist/Types/Monitor/MonitorStepSqlMonitor.js.map +1 -1
- package/build/dist/Types/Monitor/MonitorType.js +45 -1
- package/build/dist/Types/Monitor/MonitorType.js.map +1 -1
- package/build/dist/Types/Monitor/SnmpMonitor/NetworkDeviceAlertPack.js +21 -1
- package/build/dist/Types/Monitor/SnmpMonitor/NetworkDeviceAlertPack.js.map +1 -1
- package/build/dist/Types/Monitor/SqlConnectionConfig.js +2 -0
- package/build/dist/Types/Monitor/SqlConnectionConfig.js.map +1 -0
- package/build/dist/Types/NetworkDevice/NetworkAlertPolicyScope.js +172 -0
- package/build/dist/Types/NetworkDevice/NetworkAlertPolicyScope.js.map +1 -0
- package/build/dist/Types/NetworkDevice/NetworkDeviceMonitoringMethod.js +40 -22
- package/build/dist/Types/NetworkDevice/NetworkDeviceMonitoringMethod.js.map +1 -1
- package/build/dist/Types/NetworkSite/DefaultNetworkSiteTypeHierarchy.js +26 -0
- package/build/dist/Types/NetworkSite/DefaultNetworkSiteTypeHierarchy.js.map +1 -0
- package/build/dist/Types/NotificationSetting/NotificationEmailRollupCategory.js +186 -0
- package/build/dist/Types/NotificationSetting/NotificationEmailRollupCategory.js.map +1 -0
- package/build/dist/Types/NotificationSetting/NotificationEmailRollupPolicy.js +87 -0
- package/build/dist/Types/NotificationSetting/NotificationEmailRollupPolicy.js.map +1 -0
- package/build/dist/Types/Permission.js +80 -0
- package/build/dist/Types/Permission.js.map +1 -1
- package/build/dist/Types/Telemetry/ErrorClass.js +216 -0
- package/build/dist/Types/Telemetry/ErrorClass.js.map +1 -0
- package/build/dist/Types/Telemetry/UnitOfWork.js +59 -0
- package/build/dist/Types/Telemetry/UnitOfWork.js.map +1 -0
- package/build/dist/UI/Components/CommandPalette/CommandPalette.js +2 -7
- package/build/dist/UI/Components/CommandPalette/CommandPalette.js.map +1 -1
- package/build/dist/UI/Components/EditionLabel/EditionLabel.js +3 -0
- package/build/dist/UI/Components/EditionLabel/EditionLabel.js.map +1 -1
- package/build/dist/UI/Components/Modal/Modal.js +2 -7
- package/build/dist/UI/Components/Modal/Modal.js.map +1 -1
- package/build/dist/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.js +39 -0
- package/build/dist/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.js.map +1 -1
- package/build/dist/UI/Components/ProgressBar/ProgressBar.js +12 -1
- package/build/dist/UI/Components/ProgressBar/ProgressBar.js.map +1 -1
- package/build/dist/UI/Components/RadioButtons/BasicRadioButtons.js +6 -6
- package/build/dist/UI/Components/RadioButtons/BasicRadioButtons.js.map +1 -1
- package/build/dist/UI/Components/SideMenu/SideMenu.js +67 -5
- package/build/dist/UI/Components/SideMenu/SideMenu.js.map +1 -1
- package/build/dist/UI/Components/SideMenu/SideMenuItem.js +49 -53
- package/build/dist/UI/Components/SideMenu/SideMenuItem.js.map +1 -1
- package/build/dist/UI/Components/SideMenu/SideMenuSection.js +25 -7
- package/build/dist/UI/Components/SideMenu/SideMenuSection.js.map +1 -1
- package/build/dist/UI/Components/SideOver/SideOver.js +5 -20
- package/build/dist/UI/Components/SideOver/SideOver.js.map +1 -1
- package/build/dist/UI/Utils/PageScrollLock.js +31 -3
- package/build/dist/UI/Utils/PageScrollLock.js.map +1 -1
- package/build/dist/UI/Utils/PermissionGate.js +42 -1
- package/build/dist/UI/Utils/PermissionGate.js.map +1 -1
- package/build/dist/UI/Utils/SensitiveUrlToken.js +97 -0
- package/build/dist/UI/Utils/SensitiveUrlToken.js.map +1 -0
- package/build/dist/UI/Utils/TestLLMProvider.js +4 -5
- package/build/dist/UI/Utils/TestLLMProvider.js.map +1 -1
- package/build/dist/Utils/EnterpriseLicense/EnterpriseLicenseSeats.js +15 -0
- package/build/dist/Utils/EnterpriseLicense/EnterpriseLicenseSeats.js.map +1 -1
- package/build/dist/Utils/EnterpriseLicense/EnterpriseLicenseUsage.js +111 -9
- package/build/dist/Utils/EnterpriseLicense/EnterpriseLicenseUsage.js.map +1 -1
- package/build/dist/Utils/Monitor/MonitorMetricType.js +109 -1
- package/build/dist/Utils/Monitor/MonitorMetricType.js.map +1 -1
- package/build/dist/Utils/Monitor/NetworkTopologyUtil.js +8 -3
- package/build/dist/Utils/Monitor/NetworkTopologyUtil.js.map +1 -1
- package/build/dist/Utils/NetworkDevice/DeviceHealthStateUtil.js +27 -7
- package/build/dist/Utils/NetworkDevice/DeviceHealthStateUtil.js.map +1 -1
- package/build/dist/Utils/NetworkDevice/DeviceReachabilityUtil.js +7 -5
- package/build/dist/Utils/NetworkDevice/DeviceReachabilityUtil.js.map +1 -1
- package/build/dist/Utils/NetworkDevice/NetworkAlertPolicyBootstrapUtil.js +180 -0
- package/build/dist/Utils/NetworkDevice/NetworkAlertPolicyBootstrapUtil.js.map +1 -0
- package/build/dist/Utils/NetworkDevice/SnmpCredentialUtil.js +12 -0
- package/build/dist/Utils/NetworkDevice/SnmpCredentialUtil.js.map +1 -0
- package/build/dist/Utils/NetworkDiscovery/AutoImportRuleMatcher.js +15 -5
- package/build/dist/Utils/NetworkDiscovery/AutoImportRuleMatcher.js.map +1 -1
- package/build/dist/Utils/NetworkDiscovery/DiscoveredDeviceBuilder.js +44 -15
- package/build/dist/Utils/NetworkDiscovery/DiscoveredDeviceBuilder.js.map +1 -1
- package/build/dist/Utils/NetworkDiscovery/DiscoveryImportEligibility.js +52 -23
- package/build/dist/Utils/NetworkDiscovery/DiscoveryImportEligibility.js.map +1 -1
- package/build/dist/Utils/NetworkDiscovery/PingMonitorBuilder.js +85 -13
- package/build/dist/Utils/NetworkDiscovery/PingMonitorBuilder.js.map +1 -1
- package/build/dist/Utils/NetworkSite/SiteStatusRollupUtil.js +30 -15
- package/build/dist/Utils/NetworkSite/SiteStatusRollupUtil.js.map +1 -1
- package/build/dist/Utils/NetworkSite/TypeHierarchyUtil.js +191 -0
- package/build/dist/Utils/NetworkSite/TypeHierarchyUtil.js.map +1 -0
- package/package.json +2 -2
|
@@ -5,7 +5,10 @@ import ObjectID from "../../Types/ObjectID";
|
|
|
5
5
|
import SnmpScanConfigUtil, {
|
|
6
6
|
DiscoveryScanSnmpConfig,
|
|
7
7
|
} from "./SnmpScanConfigUtil";
|
|
8
|
-
import {
|
|
8
|
+
import {
|
|
9
|
+
isPingOnlyDiscoveredHost,
|
|
10
|
+
monitoringMethodForDiscoveredHost,
|
|
11
|
+
} from "./DiscoveryImportEligibility";
|
|
9
12
|
import { normalizeReverseDnsName } from "./ReverseDnsNameUtil";
|
|
10
13
|
|
|
11
14
|
/*
|
|
@@ -167,7 +170,8 @@ export function buildFallbackDeviceName(host: DiscoveredNetworkDevice): string {
|
|
|
167
170
|
}
|
|
168
171
|
|
|
169
172
|
/*
|
|
170
|
-
* The scan columns the builder copies onto
|
|
173
|
+
* The scan columns the builder copies onto a device: the probe onto every
|
|
174
|
+
* device, the credentials onto the ones that answered SNMP. The
|
|
171
175
|
* NetworkDeviceDiscoveryScan model satisfies this structurally, so both the
|
|
172
176
|
* dashboard (holding a scan model) and the rule engine (holding a scan row it
|
|
173
177
|
* selected itself) can pass their scan straight in.
|
|
@@ -177,7 +181,7 @@ export function buildFallbackDeviceName(host: DiscoveredNetworkDevice): string {
|
|
|
177
181
|
* (and are still mirrored from the list's first entry). Neither is read
|
|
178
182
|
* directly here — SnmpScanConfigUtil reconciles the two — but BOTH have to be
|
|
179
183
|
* SELECTED by every caller, or the credentials silently arrive undefined and
|
|
180
|
-
* the device is created
|
|
184
|
+
* the device is created as a ping-only one. That is what
|
|
181
185
|
* Common/Tests/Server/Services/AutoImportScanCredentialSelect.test.ts pins.
|
|
182
186
|
*/
|
|
183
187
|
export interface DiscoveredDeviceScanSource {
|
|
@@ -197,11 +201,18 @@ export interface DiscoveredDeviceScanSource {
|
|
|
197
201
|
/**
|
|
198
202
|
* The NetworkDevice a discovered host imports as.
|
|
199
203
|
*
|
|
200
|
-
*
|
|
201
|
-
*
|
|
202
|
-
*
|
|
203
|
-
*
|
|
204
|
-
*
|
|
204
|
+
* Every host becomes a Probe device polled by the scan's probe — the probe
|
|
205
|
+
* that just proved the host answers, so the one that can keep asking. An
|
|
206
|
+
* SNMP-reachable host also carries the credential set that answered it, so
|
|
207
|
+
* its first poll walks it for interfaces, inventory and health. A ping-only
|
|
208
|
+
* host carries no credentials at all: the probe pings it and nothing more, it
|
|
209
|
+
* has a status from its first poll, and adding credentials later on its
|
|
210
|
+
* Settings page is what turns the walk on.
|
|
211
|
+
*
|
|
212
|
+
* (It used to import as a monitor-backed device with no probe and polling
|
|
213
|
+
* off, which left it on "Pending" until an operator hand-bound a Ping monitor
|
|
214
|
+
* — issue #3447. Reachability is a built-in capability of every probe-polled
|
|
215
|
+
* device now, so that dead end is gone.)
|
|
205
216
|
*
|
|
206
217
|
* The caller supplies the name (normally `buildDeviceName(host)`) so the
|
|
207
218
|
* name-collision retry can rebuild the same device under
|
|
@@ -263,12 +274,41 @@ export function buildNetworkDeviceFromDiscoveredHost(data: {
|
|
|
263
274
|
monitoringMethodForDiscoveredHost(host);
|
|
264
275
|
device.monitoringMethod = monitoringMethod;
|
|
265
276
|
|
|
266
|
-
|
|
277
|
+
/*
|
|
278
|
+
* The scan's probe, on EVERY device. It is the probe that just reached this
|
|
279
|
+
* host — over ping at the very least — so it is the one that can keep
|
|
280
|
+
* polling it. Written explicitly rather than left to the column default:
|
|
281
|
+
* a Probe device with no probe is claimed by nothing and never polls, which
|
|
282
|
+
* is the "Pending forever" the whole change exists to end.
|
|
283
|
+
*/
|
|
284
|
+
if (data.scan.probeId) {
|
|
285
|
+
// Re-wrapped: the scan may hold a serialized id rather than an ObjectID.
|
|
286
|
+
device.probeId = new ObjectID(data.scan.probeId.toString());
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
/*
|
|
290
|
+
* Polling on, for both kinds of host. The column defaults to true, but this
|
|
291
|
+
* function is the recipe both import paths share and "the probe polls this
|
|
292
|
+
* device" is the whole point of it, so the recipe says so itself rather
|
|
293
|
+
* than trusting a default that a ping-only host used to override to false.
|
|
294
|
+
*/
|
|
295
|
+
device.isPollingEnabled = true;
|
|
296
|
+
|
|
297
|
+
if (isPingOnlyDiscoveredHost(host)) {
|
|
267
298
|
/*
|
|
268
|
-
* A ping-only host
|
|
269
|
-
*
|
|
299
|
+
* A ping-only host carries NO credentials, decided BEFORE any config is
|
|
300
|
+
* looked up: `snmpConfigId` and `snmpReachable` are two fields of the
|
|
301
|
+
* same probe-written jsonb row, and nothing enforces that a ping-only row
|
|
302
|
+
* leaves the first one unset. A device that answered nothing but a ping
|
|
303
|
+
* must not import carrying a community string it rejected — it would be
|
|
304
|
+
* walked with it on every poll and read as an SNMP failure rather than
|
|
305
|
+
* as the credential-less device it is. The probe pings it and nothing
|
|
306
|
+
* more until credentials are added on its Settings page.
|
|
307
|
+
*
|
|
308
|
+
* The OID template and the vendor-template auto-apply stay off too: both
|
|
309
|
+
* key off SNMP data — a polled sysObjectID, a walked OID list — that
|
|
310
|
+
* this host did not supply and will not until it has credentials.
|
|
270
311
|
*/
|
|
271
|
-
device.isPollingEnabled = false;
|
|
272
312
|
return device;
|
|
273
313
|
}
|
|
274
314
|
|
|
@@ -280,11 +320,6 @@ export function buildNetworkDeviceFromDiscoveredHost(data: {
|
|
|
280
320
|
device.autoApplyVendorHealthTemplate = true;
|
|
281
321
|
}
|
|
282
322
|
|
|
283
|
-
if (data.scan.probeId) {
|
|
284
|
-
// Re-wrapped: the scan may hold a serialized id rather than an ObjectID.
|
|
285
|
-
device.probeId = new ObjectID(data.scan.probeId.toString());
|
|
286
|
-
}
|
|
287
|
-
|
|
288
323
|
/*
|
|
289
324
|
* THE credential set that answered this host, not the scan's first one.
|
|
290
325
|
*
|
|
@@ -4,10 +4,19 @@ import NetworkDeviceMonitoringMethod from "../../Types/NetworkDevice/NetworkDevi
|
|
|
4
4
|
/*
|
|
5
5
|
* Pure, react-free import rule for discovery scan results.
|
|
6
6
|
*
|
|
7
|
-
* Every host the sweep found alive is importable
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
7
|
+
* Every host the sweep found alive is importable, and every one of them
|
|
8
|
+
* imports as a probe-polled device: the scan's probe pings it on its schedule,
|
|
9
|
+
* and walks it over SNMP as well when it has credentials. What differs between
|
|
10
|
+
* a host that answered SNMP and one that only answered ping is therefore not
|
|
11
|
+
* HOW it is monitored but WHAT rides along — the SNMP host carries the scan's
|
|
12
|
+
* credential set that answered it, the ping-only host carries none and is
|
|
13
|
+
* simply pinged until somebody adds credentials.
|
|
14
|
+
*
|
|
15
|
+
* That is a change from the SNMP-first era, when a ping-only host had to
|
|
16
|
+
* import as a monitor-backed device with no probe and polling off, and read
|
|
17
|
+
* "Pending" until an operator hand-bound a Ping monitor to it (issue #3447).
|
|
18
|
+
* Reachability is a built-in capability of every probe-polled device now, so
|
|
19
|
+
* the ping-only host gets a status from its first poll like any other.
|
|
11
20
|
*
|
|
12
21
|
* Ping-only hosts used to be refused outright, on the reasoning that they
|
|
13
22
|
* would turn up as ARP/FDB endpoints once their switch was monitored. That is
|
|
@@ -20,33 +29,56 @@ import NetworkDeviceMonitoringMethod from "../../Types/NetworkDevice/NetworkDevi
|
|
|
20
29
|
* because the dashboard's Review dialog and the server-side auto-import rule
|
|
21
30
|
* engine both decide "how does this host import" through it, and the two must
|
|
22
31
|
* never disagree: the group a host is shown under in the dialog and the
|
|
23
|
-
*
|
|
32
|
+
* device a rule imports it as are the same decision.
|
|
24
33
|
*/
|
|
25
34
|
|
|
35
|
+
/**
|
|
36
|
+
* True when the host answered ping but not SNMP — the "No SNMP" group in the
|
|
37
|
+
* Review dialog, and the host that imports with no credentials.
|
|
38
|
+
*
|
|
39
|
+
* Only an EXPLICIT snmpReachable === false is ping-only: scans stored before
|
|
40
|
+
* the field existed carry undefined, and every host on those scans answered
|
|
41
|
+
* SNMP (ping-only sweeps did not exist yet), so legacy rows keep importing
|
|
42
|
+
* with the scan's credentials.
|
|
43
|
+
*
|
|
44
|
+
* Nullish hosts read as NOT ping-only rather than throwing. `discoveredDevices`
|
|
45
|
+
* is jsonb written verbatim from the probe's payload and the only guard on it
|
|
46
|
+
* (DiscoveryScanOutcome.getDiscoveredHosts) checks that the VALUE is an array
|
|
47
|
+
* — never that its elements are objects. A single null element used to take
|
|
48
|
+
* the whole page down from inside a table cell or a modal body, where a thrown
|
|
49
|
+
* TypeError has nowhere useful to go. Every other kind of junk element (a
|
|
50
|
+
* number, a string, {}) already read as an SNMP host; null is simply
|
|
51
|
+
* consistent with them.
|
|
52
|
+
*/
|
|
53
|
+
export function isPingOnlyDiscoveredHost(
|
|
54
|
+
host: DiscoveredNetworkDevice | null | undefined,
|
|
55
|
+
): boolean {
|
|
56
|
+
return host?.snmpReachable === false;
|
|
57
|
+
}
|
|
58
|
+
|
|
26
59
|
/**
|
|
27
60
|
* Which monitoring method a discovered host should be imported under.
|
|
28
61
|
*
|
|
29
|
-
*
|
|
30
|
-
*
|
|
31
|
-
*
|
|
32
|
-
*
|
|
62
|
+
* Probe, for every host. Under ping-first polling there is no discovered host
|
|
63
|
+
* a probe cannot monitor: the scan's probe just proved the host answers ping,
|
|
64
|
+
* and that is all a probe-polled device needs to have a status. SNMP is an
|
|
65
|
+
* enrichment layered on top when the host answered it, and
|
|
66
|
+
* `buildNetworkDeviceFromDiscoveredHost` decides that by
|
|
67
|
+
* `isPingOnlyDiscoveredHost`, not by this function.
|
|
68
|
+
*
|
|
69
|
+
* `Monitor` — a bound monitor's status IS the device's status — is an override
|
|
70
|
+
* an operator chooses on a device's Settings page for gear a probe cannot
|
|
71
|
+
* reach at all. Discovery never has grounds to choose it: every host it offers
|
|
72
|
+
* was reached by the probe that found it.
|
|
73
|
+
*
|
|
74
|
+
* Kept as a function, with the host as its argument, because it is the one
|
|
75
|
+
* seam through which the dialog and the rule engine ask the question, and a
|
|
76
|
+
* future rule that DID need to look at the host would land here.
|
|
33
77
|
*/
|
|
34
78
|
export function monitoringMethodForDiscoveredHost(
|
|
35
|
-
|
|
79
|
+
_host: DiscoveredNetworkDevice | null | undefined,
|
|
36
80
|
): NetworkDeviceMonitoringMethod {
|
|
37
|
-
|
|
38
|
-
* Nullish hosts read as SNMP rather than throwing. `discoveredDevices` is
|
|
39
|
-
* jsonb written verbatim from the probe's payload and the only guard on it
|
|
40
|
-
* (DiscoveryScanOutcome.getDiscoveredHosts) checks that the VALUE is an
|
|
41
|
-
* array — never that its elements are objects. A single null element used
|
|
42
|
-
* to take the whole page down from inside a table cell or a modal body,
|
|
43
|
-
* where a thrown TypeError has nowhere useful to go. Every other kind of
|
|
44
|
-
* junk element (a number, a string, {}) already read as SNMP; null is now
|
|
45
|
-
* simply consistent with them.
|
|
46
|
-
*/
|
|
47
|
-
return host?.snmpReachable === false
|
|
48
|
-
? NetworkDeviceMonitoringMethod.Monitor
|
|
49
|
-
: NetworkDeviceMonitoringMethod.Snmp;
|
|
81
|
+
return NetworkDeviceMonitoringMethod.Probe;
|
|
50
82
|
}
|
|
51
83
|
|
|
52
84
|
/** True when the discovered host can be imported as a Network Device. */
|
|
@@ -93,6 +93,41 @@ export interface BuildPingMonitorData {
|
|
|
93
93
|
seedIds: MonitorCriteriaSeedIds;
|
|
94
94
|
}
|
|
95
95
|
|
|
96
|
+
/**
|
|
97
|
+
* Where a Ping monitor is being built FROM. The sentence it writes into the
|
|
98
|
+
* monitor's description is the only thing that differs, and it matters: an
|
|
99
|
+
* operator reading the monitor list months later should be told whether a
|
|
100
|
+
* scan, a form, or a bulk action put it there.
|
|
101
|
+
*/
|
|
102
|
+
export enum PingMonitorOrigin {
|
|
103
|
+
// A host that answered a discovery sweep's ping but not its SNMP probe.
|
|
104
|
+
DiscoveryImport = "DiscoveryImport",
|
|
105
|
+
// The device create form, with "create a Ping monitor" ticked.
|
|
106
|
+
DeviceCreateForm = "DeviceCreateForm",
|
|
107
|
+
// The "Create Ping Monitor" button on a device's Overview or Monitors page.
|
|
108
|
+
DevicePage = "DevicePage",
|
|
109
|
+
// The device list's bulk "Create Ping Monitors" action.
|
|
110
|
+
BulkAction = "BulkAction",
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
export interface BuildPingMonitorForAddressData {
|
|
114
|
+
projectId: ObjectID;
|
|
115
|
+
/*
|
|
116
|
+
* The device's address as recorded on the device — an IP or a hostname.
|
|
117
|
+
* NetworkDevice.hostname is free text and required, so this is never empty
|
|
118
|
+
* for a real device; it is still validated because the bulk action and the
|
|
119
|
+
* create form both hand over whatever the operator typed.
|
|
120
|
+
*/
|
|
121
|
+
address: string;
|
|
122
|
+
/*
|
|
123
|
+
* The name of the NetworkDevice this monitor will be bound to, so the two
|
|
124
|
+
* read as a pair in a monitor list that also contains unrelated monitors.
|
|
125
|
+
*/
|
|
126
|
+
deviceName: string;
|
|
127
|
+
seedIds: MonitorCriteriaSeedIds;
|
|
128
|
+
origin: PingMonitorOrigin;
|
|
129
|
+
}
|
|
130
|
+
|
|
96
131
|
/**
|
|
97
132
|
* The monitor's name: "Ping <device name>", clamped to the column.
|
|
98
133
|
*
|
|
@@ -157,24 +192,54 @@ function suppressIncidentCreation(step: MonitorStep): void {
|
|
|
157
192
|
}
|
|
158
193
|
|
|
159
194
|
/**
|
|
160
|
-
*
|
|
161
|
-
*
|
|
195
|
+
* The sentence a provisioned monitor carries so its origin is legible later.
|
|
196
|
+
* Exported so the surfaces that build one can be tested against the exact
|
|
197
|
+
* wording rather than a paraphrase.
|
|
198
|
+
*/
|
|
199
|
+
export function buildPingMonitorDescription(data: {
|
|
200
|
+
address: string;
|
|
201
|
+
origin: PingMonitorOrigin;
|
|
202
|
+
}): string {
|
|
203
|
+
const reachability: string = `Reachability for ${data.address}`;
|
|
204
|
+
|
|
205
|
+
switch (data.origin) {
|
|
206
|
+
case PingMonitorOrigin.DiscoveryImport:
|
|
207
|
+
return `${reachability}, created when this device was imported from a network discovery scan. The device answered ping but not SNMP, so this monitor is what reports whether it is up.`;
|
|
208
|
+
case PingMonitorOrigin.DeviceCreateForm:
|
|
209
|
+
return `${reachability}, created with this network device. The device is monitor-backed — nothing polls it over SNMP — so this monitor is what reports whether it is up.`;
|
|
210
|
+
case PingMonitorOrigin.BulkAction:
|
|
211
|
+
return `${reachability}, created by the device list's "Create Ping Monitors" action. The device is monitor-backed — nothing polls it over SNMP — so this monitor is what reports whether it is up.`;
|
|
212
|
+
case PingMonitorOrigin.DevicePage:
|
|
213
|
+
default:
|
|
214
|
+
return `${reachability}, created from this network device's page. The device is monitor-backed — nothing polls it over SNMP — so this monitor is what reports whether it is up.`;
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
/**
|
|
219
|
+
* One device address -> the Ping monitor that will report the device's
|
|
220
|
+
* health once bound to it through `NetworkDevice.monitorId`.
|
|
162
221
|
*
|
|
163
|
-
*
|
|
164
|
-
*
|
|
165
|
-
*
|
|
166
|
-
*
|
|
167
|
-
*
|
|
168
|
-
*
|
|
222
|
+
* This is the shape every provisioning surface shares: discovery import, the
|
|
223
|
+
* device create form, the "Create Ping Monitor" button on a device's page and
|
|
224
|
+
* the bulk action on the device list. They differ only in where the address
|
|
225
|
+
* and the name come from and in the origin sentence; the monitor itself —
|
|
226
|
+
* type, interval, criteria, incident suppression — is identical, which is
|
|
227
|
+
* what lets an operator treat every provisioned monitor the same way.
|
|
228
|
+
*
|
|
229
|
+
* Order of operations is the caller's: discovery creates the monitor FIRST
|
|
230
|
+
* and then the device carrying its id (so the create-time stamp resolves the
|
|
231
|
+
* pill immediately), while the create form and the bulk action create or
|
|
232
|
+
* already have the device and bind afterwards — which re-stamps through
|
|
233
|
+
* `NetworkDeviceService.onUpdateSuccess`, so the pill resolves just the same.
|
|
169
234
|
*/
|
|
170
|
-
export function
|
|
171
|
-
data:
|
|
235
|
+
export function buildPingMonitorForAddress(
|
|
236
|
+
data: BuildPingMonitorForAddressData,
|
|
172
237
|
): Monitor {
|
|
173
|
-
const address: string = (data.
|
|
238
|
+
const address: string = (data.address || "").trim();
|
|
174
239
|
|
|
175
240
|
if (!address) {
|
|
176
241
|
throw new Error(
|
|
177
|
-
"A
|
|
242
|
+
"A device needs an address before a Ping monitor can be built for it.",
|
|
178
243
|
);
|
|
179
244
|
}
|
|
180
245
|
|
|
@@ -182,7 +247,10 @@ export function buildPingMonitorForDiscoveredHost(
|
|
|
182
247
|
|
|
183
248
|
monitor.projectId = new ObjectID(data.projectId.toString());
|
|
184
249
|
monitor.name = buildPingMonitorName(data.deviceName);
|
|
185
|
-
monitor.description =
|
|
250
|
+
monitor.description = buildPingMonitorDescription({
|
|
251
|
+
address: address,
|
|
252
|
+
origin: data.origin,
|
|
253
|
+
});
|
|
186
254
|
monitor.monitorType = MonitorType.Ping;
|
|
187
255
|
monitor.monitoringInterval = PING_MONITOR_INTERVAL;
|
|
188
256
|
|
|
@@ -213,3 +281,37 @@ export function buildPingMonitorForDiscoveredHost(
|
|
|
213
281
|
|
|
214
282
|
return monitor;
|
|
215
283
|
}
|
|
284
|
+
|
|
285
|
+
/**
|
|
286
|
+
* One ping-only discovered host -> the Ping monitor that will report its
|
|
287
|
+
* health once bound to the device through `NetworkDevice.monitorId`.
|
|
288
|
+
*
|
|
289
|
+
* The caller creates this monitor FIRST, then creates the device carrying the
|
|
290
|
+
* new monitor's id: `NetworkDeviceService.onCreateSuccess` stamps the
|
|
291
|
+
* monitor's current status onto the device at bind time, so the device's
|
|
292
|
+
* status pill resolves on the first render rather than waiting for the
|
|
293
|
+
* monitor's next status CHANGE (which on a healthy network may never come —
|
|
294
|
+
* that was OneUptime/oneuptime#3392).
|
|
295
|
+
*
|
|
296
|
+
* A thin adapter over `buildPingMonitorForAddress`: the only thing a
|
|
297
|
+
* discovered host contributes is its address.
|
|
298
|
+
*/
|
|
299
|
+
export function buildPingMonitorForDiscoveredHost(
|
|
300
|
+
data: BuildPingMonitorData,
|
|
301
|
+
): Monitor {
|
|
302
|
+
const address: string = (data.host?.ipAddress || "").trim();
|
|
303
|
+
|
|
304
|
+
if (!address) {
|
|
305
|
+
throw new Error(
|
|
306
|
+
"A discovered host needs an address before a Ping monitor can be built for it.",
|
|
307
|
+
);
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
return buildPingMonitorForAddress({
|
|
311
|
+
projectId: data.projectId,
|
|
312
|
+
address: address,
|
|
313
|
+
deviceName: data.deviceName,
|
|
314
|
+
seedIds: data.seedIds,
|
|
315
|
+
origin: PingMonitorOrigin.DiscoveryImport,
|
|
316
|
+
});
|
|
317
|
+
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import DeviceReachabilityUtil, {
|
|
2
2
|
NetworkDeviceReachability,
|
|
3
3
|
} from "../NetworkDevice/DeviceReachabilityUtil";
|
|
4
|
+
import { NetworkDeviceMonitoringMethodUtil } from "../../Types/NetworkDevice/NetworkDeviceMonitoringMethod";
|
|
4
5
|
import SiteHealthRollupPolicy, {
|
|
5
6
|
DefaultSiteOfflineThresholdPercent,
|
|
6
7
|
} from "../../Types/NetworkSite/SiteHealthRollupPolicy";
|
|
@@ -25,14 +26,26 @@ import SiteHealthRollupPolicy, {
|
|
|
25
26
|
*
|
|
26
27
|
* Both policies agree on which devices get a vote at all: a device that has
|
|
27
28
|
* never reported anything is not evidence of an outage and is skipped by
|
|
28
|
-
* each of them.
|
|
29
|
+
* each of them. And both agree on what a device's vote IS: for a
|
|
30
|
+
* monitor-backed device the stamped MonitorStatus, for a probe-polled one
|
|
31
|
+
* the outcome of its last poll — the stamp on a probe-polled device is
|
|
32
|
+
* informational (see the field docs), the same precedence the device list
|
|
33
|
+
* pill, the site card and the map apply.
|
|
29
34
|
*/
|
|
30
35
|
|
|
31
36
|
// One device's health inputs, denormalized by the rollup engine.
|
|
32
37
|
export interface DeviceHealthState {
|
|
33
38
|
/*
|
|
34
39
|
* The MonitorStatus stamped by the monitor bridge (string form). When set
|
|
35
|
-
* together with its priority, it is the
|
|
40
|
+
* together with its priority ON A MONITOR-BACKED DEVICE, it is the
|
|
41
|
+
* device's authoritative status.
|
|
42
|
+
*
|
|
43
|
+
* A probe-polled device can carry one too — a Network Device monitor
|
|
44
|
+
* watching its walk stamps it, and an "interface down → Offline" criterion
|
|
45
|
+
* will stamp Offline on a switch that answers every ping. Its health
|
|
46
|
+
* source is the poll (`isReachable`, which is what its own pill reads), so
|
|
47
|
+
* the stamp is ignored here for it, or one dark port would turn a site of
|
|
48
|
+
* answering devices offline while every row under it reads Up.
|
|
36
49
|
*/
|
|
37
50
|
currentMonitorStatusId?: string | null | undefined;
|
|
38
51
|
// Priority of that status row; missing when the row no longer exists.
|
|
@@ -50,16 +63,32 @@ export interface DeviceHealthState {
|
|
|
50
63
|
*/
|
|
51
64
|
monitorStatusIsOperational?: boolean | null | undefined;
|
|
52
65
|
/*
|
|
53
|
-
* The
|
|
54
|
-
* DeviceReachabilityUtil rule: the OUTCOME of the last poll,
|
|
55
|
-
* of the last success. Rolling a site up from
|
|
56
|
-
* turned "the probe is behind on a 900-device
|
|
57
|
-
* over devices that were all answering.
|
|
66
|
+
* The poll verdict for probe-polled devices, resolved by the shared
|
|
67
|
+
* DeviceReachabilityUtil rule: the OUTCOME of the last poll (ping, or the
|
|
68
|
+
* SNMP walk), not the age of the last success. Rolling a site up from
|
|
69
|
+
* freshness alone is what turned "the probe is behind on a 900-device
|
|
70
|
+
* fleet" into a red site card over devices that were all answering.
|
|
58
71
|
*/
|
|
59
72
|
isReachable?: boolean | null | undefined;
|
|
60
73
|
lastPolledAt?: Date | null | undefined;
|
|
61
74
|
lastSeenAt?: Date | null | undefined;
|
|
62
75
|
pollingIntervalInMinutes?: number | null | undefined;
|
|
76
|
+
/*
|
|
77
|
+
* How this device's health is established. NULL, empty and anything
|
|
78
|
+
* unrecognised read as Probe — see NetworkDeviceMonitoringMethodUtil.parse,
|
|
79
|
+
* which is why an omitted value keeps every existing caller on the poll
|
|
80
|
+
* rule unchanged.
|
|
81
|
+
*
|
|
82
|
+
* Load-bearing twice. It decides whether the stamped status above is the
|
|
83
|
+
* device's vote at all (only for a monitor-backed device). And a
|
|
84
|
+
* monitor-backed device (monitoringMethod "Monitor") that has no stamp
|
|
85
|
+
* yet — or whose stamped row could not be resolved — has poll columns
|
|
86
|
+
* that mean nothing (NULL, or the last thing a probe found before it
|
|
87
|
+
* stopped asking). The shared rule reads it as Pending and both policies
|
|
88
|
+
* skip it, exactly as they skip a never-polled probe device, rather than
|
|
89
|
+
* letting a months-old lastSeenAt cast a vote against the site.
|
|
90
|
+
*/
|
|
91
|
+
monitoringMethod?: string | null | undefined;
|
|
63
92
|
/*
|
|
64
93
|
* How many real devices this entry stands for.
|
|
65
94
|
*
|
|
@@ -118,13 +147,13 @@ export class SiteStatusRollupUtil {
|
|
|
118
147
|
* operational/offline rows) - the caller treats null as "leave the site's
|
|
119
148
|
* status untouched".
|
|
120
149
|
*
|
|
121
|
-
* Per device: a stamped monitor status (with a
|
|
122
|
-
* otherwise the device's
|
|
123
|
-
* isOperationalState row and Down to its
|
|
124
|
-
* that has never been polled contributes
|
|
125
|
-
* evidence of an outage, and counting it as
|
|
126
|
-
* for as long as it took the first
|
|
127
|
-
* first contributor (stable).
|
|
150
|
+
* Per device: on a monitor-backed device a stamped monitor status (with a
|
|
151
|
+
* known priority) is the vote; otherwise the device's poll reachability
|
|
152
|
+
* maps Up to the project's isOperationalState row and Down to its
|
|
153
|
+
* isOfflineState row. A device that has never been polled contributes
|
|
154
|
+
* nothing at all - it is not evidence of an outage, and counting it as
|
|
155
|
+
* one used to pin a site red for as long as it took the first poll to
|
|
156
|
+
* land. Priority ties keep the first contributor (stable).
|
|
128
157
|
*/
|
|
129
158
|
public static worstStatus(data: {
|
|
130
159
|
deviceStates: Array<DeviceHealthState>;
|
|
@@ -148,6 +177,7 @@ export class SiteStatusRollupUtil {
|
|
|
148
177
|
let candidate: RollupStatusOption | null = null;
|
|
149
178
|
|
|
150
179
|
if (
|
|
180
|
+
SiteStatusRollupUtil.isStampAuthoritative(device) &&
|
|
151
181
|
device.currentMonitorStatusId &&
|
|
152
182
|
typeof device.monitorStatusPriority === "number" &&
|
|
153
183
|
Number.isFinite(device.monitorStatusPriority)
|
|
@@ -200,12 +230,12 @@ export class SiteStatusRollupUtil {
|
|
|
200
230
|
* How the subtree splits between operational and not, in DEVICES rather
|
|
201
231
|
* than in buckets.
|
|
202
232
|
*
|
|
203
|
-
* A device counts as non-operational when its stamped
|
|
204
|
-
* the operational one
|
|
205
|
-
* reachability is Down. Never-reported devices are excluded from both
|
|
206
|
-
* numerator and the denominator, so a region half-way through its
|
|
207
|
-
* discovery walk is scored on the half that has answered rather
|
|
208
|
-
* marked down for the half that has not.
|
|
233
|
+
* A monitor-backed device counts as non-operational when its stamped
|
|
234
|
+
* MonitorStatus is not the operational one; a probe-polled device when its
|
|
235
|
+
* poll reachability is Down. Never-reported devices are excluded from both
|
|
236
|
+
* the numerator and the denominator, so a region half-way through its
|
|
237
|
+
* first discovery walk is scored on the half that has answered rather
|
|
238
|
+
* than marked down for the half that has not.
|
|
209
239
|
*/
|
|
210
240
|
public static deviceHealthShare(data: {
|
|
211
241
|
deviceStates: Array<DeviceHealthState>;
|
|
@@ -238,6 +268,7 @@ export class SiteStatusRollupUtil {
|
|
|
238
268
|
const count: number = SiteStatusRollupUtil.deviceCountOf(device);
|
|
239
269
|
|
|
240
270
|
if (
|
|
271
|
+
SiteStatusRollupUtil.isStampAuthoritative(device) &&
|
|
241
272
|
device.currentMonitorStatusId &&
|
|
242
273
|
typeof device.monitorStatusIsOperational === "boolean"
|
|
243
274
|
) {
|
|
@@ -415,6 +446,19 @@ export class SiteStatusRollupUtil {
|
|
|
415
446
|
return Math.floor(value);
|
|
416
447
|
}
|
|
417
448
|
|
|
449
|
+
/*
|
|
450
|
+
* Whether this device's stamped MonitorStatus is its vote — true only for
|
|
451
|
+
* a monitor-backed device. One gate for both policies, so the same fleet
|
|
452
|
+
* cannot read differently depending on which one a site uses; and the
|
|
453
|
+
* same gate DeviceHealthStateUtil and the topology map apply, so the site
|
|
454
|
+
* card, the map and this rollup describe one network.
|
|
455
|
+
*/
|
|
456
|
+
private static isStampAuthoritative(device: DeviceHealthState): boolean {
|
|
457
|
+
return NetworkDeviceMonitoringMethodUtil.isMonitorBacked(
|
|
458
|
+
device.monitoringMethod,
|
|
459
|
+
);
|
|
460
|
+
}
|
|
461
|
+
|
|
418
462
|
private static deviceCountOf(device: DeviceHealthState): number {
|
|
419
463
|
if (
|
|
420
464
|
typeof device.deviceCount !== "number" ||
|
|
@@ -436,6 +480,8 @@ export class SiteStatusRollupUtil {
|
|
|
436
480
|
lastPolledAt: device.lastPolledAt,
|
|
437
481
|
lastSeenAt: device.lastSeenAt,
|
|
438
482
|
pollingIntervalInMinutes: device.pollingIntervalInMinutes,
|
|
483
|
+
// See the field docs: decides whether the columns above mean anything.
|
|
484
|
+
monitoringMethod: device.monitoringMethod,
|
|
439
485
|
},
|
|
440
486
|
now,
|
|
441
487
|
);
|