@oneuptime/common 12.0.32 → 12.0.33
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Models/AnalyticsModels/Span.ts +14 -0
- package/Models/DatabaseModels/EnterpriseLicense.ts +56 -0
- package/Models/DatabaseModels/Index.ts +10 -0
- package/Models/DatabaseModels/Monitor.ts +76 -0
- package/Models/DatabaseModels/NetworkAlertPolicy.ts +690 -0
- package/Models/DatabaseModels/NetworkDevice.ts +176 -1
- package/Models/DatabaseModels/NetworkSite.ts +201 -2
- package/Models/DatabaseModels/NetworkSiteType.ts +102 -3
- package/Models/DatabaseModels/NetworkSnmpCredentialProfile.ts +841 -0
- package/Models/DatabaseModels/TelemetryException.ts +119 -0
- package/Models/DatabaseModels/UserNotificationEmailRollupBatch.ts +334 -0
- package/Models/DatabaseModels/UserNotificationEmailRollupItem.ts +370 -0
- package/Models/DatabaseModels/UserNotificationEmailRollupSetting.ts +282 -0
- package/Server/API/EnterpriseLicenseAPI.ts +391 -64
- package/Server/API/LlmProviderAPI.ts +137 -22
- package/Server/EnvironmentConfig.ts +14 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1790700000000-AddNetworkSiteTypeParentHierarchy.ts +55 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1790900000000-AddEnterpriseLicenseUsageProvenance.ts +31 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1790900000000-AddTelemetryExceptionErrorClass.ts +124 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1791000000000-AddUserNotificationEmailRollup.ts +132 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1791100000000-AddUserNotificationEmailRollupSetting.ts +79 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1791200000000-AddNetworkSnmpCredentialProfilesAndAlertPolicies.ts +191 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +12 -0
- package/Server/Infrastructure/QueueWorker.ts +38 -8
- package/Server/Middleware/BearerTokenAuthorization.ts +12 -0
- package/Server/Middleware/ProjectAuthorization.ts +11 -0
- package/Server/Middleware/SCIMAuthorization.ts +12 -0
- package/Server/Middleware/TelemetryIngest.ts +11 -0
- package/Server/Services/AIBillingService.ts +101 -27
- package/Server/Services/EnterpriseLicenseInstanceService.ts +197 -0
- package/Server/Services/EnterpriseLicenseService.ts +55 -0
- package/Server/Services/Index.ts +10 -0
- package/Server/Services/MonitorService.ts +143 -21
- package/Server/Services/MonitorStatusTimelineService.ts +150 -8
- package/Server/Services/MonitorTemplateService.ts +217 -1
- package/Server/Services/NetworkAlertPolicyEngineService.ts +2159 -0
- package/Server/Services/NetworkAlertPolicyService.ts +944 -0
- package/Server/Services/NetworkDeviceAutoImportRuleEngineService.ts +9 -10
- package/Server/Services/NetworkDeviceAutoImportRuleService.ts +60 -15
- package/Server/Services/NetworkDeviceService.ts +1032 -73
- package/Server/Services/NetworkSiteService.ts +1502 -129
- package/Server/Services/NetworkSiteTypeService.ts +1216 -0
- package/Server/Services/NetworkSnmpCredentialProfileService.ts +238 -0
- package/Server/Services/NotificationService.ts +118 -28
- package/Server/Services/ProjectService.ts +105 -48
- package/Server/Services/StatusPagePrivateUserService.ts +103 -3
- package/Server/Services/UserNotificationEmailRollupBatchService.ts +78 -0
- package/Server/Services/UserNotificationEmailRollupItemService.ts +79 -0
- package/Server/Services/UserNotificationEmailRollupSettingService.ts +113 -0
- package/Server/Services/UserNotificationSettingService.ts +62 -25
- package/Server/Services/UserService.ts +95 -0
- package/Server/Types/Database/QueryHelper.ts +2 -2
- package/Server/Utils/AI/Chat/ObservabilityChatPrompt.ts +14 -3
- package/Server/Utils/AI/SRE/Insights/Detectors/ExceptionSpikeDetector.ts +10 -0
- package/Server/Utils/AI/SRE/Insights/Detectors/NewExceptionDetector.ts +10 -0
- package/Server/Utils/AI/SRE/Insights/InsightTriageRunner.ts +62 -1
- package/Server/Utils/AI/Toolbox/AlertTools.ts +15 -1
- package/Server/Utils/Billing/BillingFailureNoticeThrottle.ts +80 -0
- package/Server/Utils/DataSource/HttpFetch.ts +9 -2
- package/Server/Utils/EmailRollup/EmailRollupConstants.ts +98 -0
- package/Server/Utils/EmailRollup/EmailRollupFlushRunner.ts +872 -0
- package/Server/Utils/EmailRollup/EmailRollupRenderer.ts +781 -0
- package/Server/Utils/EmailRollup/EmailRollupWriter.ts +368 -0
- package/Server/Utils/LLM/LLMService.ts +78 -0
- package/Server/Utils/LogRedaction.ts +8 -0
- package/Server/Utils/Logger.ts +79 -1
- package/Server/Utils/Monitor/Criteria/DatabaseMonitorCriteria.ts +190 -0
- package/Server/Utils/Monitor/Criteria/EvaluateOverTime.ts +9 -2
- package/Server/Utils/Monitor/Criteria/SnmpMonitorCriteria.ts +61 -1
- package/Server/Utils/Monitor/MonitorCriteriaDataExtractor.ts +14 -0
- package/Server/Utils/Monitor/MonitorCriteriaEvaluator.ts +49 -0
- package/Server/Utils/Monitor/MonitorCriteriaObservationBuilder.ts +255 -4
- package/Server/Utils/Monitor/MonitorMetricUtil.ts +41 -0
- package/Server/Utils/Monitor/MonitorTemplateUtil.ts +43 -0
- package/Server/Utils/Monitor/NetworkDeviceHydrationUtil.ts +499 -19
- package/Server/Utils/Monitor/NetworkDeviceMetricUtil.ts +66 -10
- package/Server/Utils/Monitor/NetworkDeviceWalkUtil.ts +238 -44
- package/Server/Utils/Monitor/NetworkInventoryUtil.ts +146 -39
- package/Server/Utils/NetworkDevice/DeviceHealthAggregation.ts +31 -18
- package/Server/Utils/NetworkSite/NetworkSiteHierarchyLock.ts +213 -0
- package/Server/Utils/OutboundUserAgent.ts +152 -0
- package/Server/Utils/StartServer.ts +51 -19
- package/Server/Utils/Telemetry/CaptureSpan.ts +32 -8
- package/Server/Utils/Telemetry/ErrorClassResolver.ts +120 -0
- package/Server/Utils/Telemetry/SpanUtil.ts +33 -0
- package/Server/Utils/Telemetry.ts +198 -51
- package/Server/Views/Partials/SensitiveUrlToken.ejs +140 -0
- package/Tests/App/Dashboard/AddNeighborToMonitoringModal.test.tsx +134 -33
- package/Tests/App/Dashboard/AskAiSuggestedPrompts.test.ts +279 -0
- package/Tests/App/Dashboard/DashboardEditPermissions.test.tsx +517 -0
- package/Tests/App/Dashboard/DashboardVariablesDiscard.test.tsx +26 -0
- package/Tests/App/Dashboard/DeviceStatusHero.test.tsx +588 -0
- package/Tests/App/Dashboard/DiscoveryScanWizardValidation.test.tsx +18 -9
- package/Tests/App/Dashboard/MonitorCreateFromMonitorBackedDevice.test.tsx +632 -0
- package/Tests/App/Dashboard/MonitorRecommendationCreateProgress.test.tsx +682 -0
- package/Tests/App/Dashboard/MonitorTypePicker.test.tsx +4 -2
- package/Tests/App/Dashboard/NetworkDeviceCreateFormMonitorBinding.test.tsx +676 -0
- package/Tests/App/Dashboard/NetworkDeviceCreateFormPingMonitor.test.tsx +791 -0
- package/Tests/App/Dashboard/NetworkDeviceCreateFormProbeAndSnmp.test.tsx +833 -0
- package/Tests/App/Dashboard/NetworkDeviceCriteriaFilter.test.ts +161 -0
- package/Tests/App/Dashboard/NetworkDeviceSettingsMonitoringSection.test.tsx +458 -0
- package/Tests/App/Dashboard/NetworkSideMenu.test.tsx +41 -5
- package/Tests/App/Dashboard/PingMonitorProvisioning.test.ts +368 -0
- package/Tests/App/Dashboard/RecommendationCard.test.tsx +796 -0
- package/Tests/App/Dashboard/RecommendationToolbar.test.tsx +519 -0
- package/Tests/App/Dashboard/RecommendationsList.test.tsx +661 -0
- package/Tests/App/Dashboard/UseBulkCreatePingMonitors.test.tsx +899 -0
- package/Tests/App/Dashboard/UseBulkSnmpCredentialProfileActions.test.tsx +732 -0
- package/Tests/App/SensitiveUrlTokenBootstrap.test.ts +256 -0
- package/Tests/App/StatusPage/StatusPageIndexPageRobotsMeta.test.ts +11 -1
- package/Tests/App/StatusPage/StatusPageLoginCodeBootstrap.test.ts +9 -4
- package/Tests/Models/NetworkSiteHierarchy.test.ts +41 -4
- package/Tests/Server/API/EnterpriseLicenseReportUserCount.test.ts +951 -7
- package/Tests/Server/API/LlmProviderConnectionTest.test.ts +522 -0
- package/Tests/Server/Infrastructure/Postgres/NetworkSnmpCredentialProfilesAndAlertPoliciesMigration.test.ts +854 -0
- package/Tests/Server/Infrastructure/Postgres/SchemaMigrationsOrdering.test.ts +18 -0
- package/Tests/Server/Infrastructure/Postgres/UserNotificationEmailRollupTableMigration.test.ts +535 -0
- package/Tests/Server/Services/AIChatPrivacyPin.test.ts +560 -0
- package/Tests/Server/Services/BillingRechargeOwnerEmailGuards.test.ts +783 -0
- package/Tests/Server/Services/EnterpriseLicenseInstanceServiceDeletionUsage.test.ts +707 -0
- package/Tests/Server/Services/EnterpriseLicenseServiceUsageAggregationLock.test.ts +329 -0
- package/Tests/Server/Services/MonitorServiceDeleteNetworkDeviceCleanup.test.ts +294 -0
- package/Tests/Server/Services/MonitorStatusBridgeProbePath.test.ts +802 -0
- package/Tests/Server/Services/MonitorStatusTimelineService.test.ts +72 -2
- package/Tests/Server/Services/NetworkAlertPolicyEngineHooks.test.ts +752 -0
- package/Tests/Server/Services/NetworkAlertPolicyEngineService.test.ts +1849 -0
- package/Tests/Server/Services/NetworkAlertPolicyModel.test.ts +1793 -0
- package/Tests/Server/Services/NetworkDeviceAutoImportRuleEngineService.test.ts +47 -4
- package/Tests/Server/Services/NetworkDeviceAutoImportRuleService.test.ts +97 -12
- package/Tests/Server/Services/NetworkDeviceAutoMonitorLifecycle.test.ts +148 -3
- package/Tests/Server/Services/NetworkDeviceMonitorBindingUpdateGuard.test.ts +514 -0
- package/Tests/Server/Services/NetworkDeviceMonitorStatusStamp.test.ts +447 -58
- package/Tests/Server/Services/NetworkDeviceMonitoringMethodTransition.test.ts +739 -0
- package/Tests/Server/Services/NetworkDevicePollingTenancy.test.ts +501 -0
- package/Tests/Server/Services/NetworkDeviceSiteDefaultProbe.test.ts +432 -0
- package/Tests/Server/Services/NetworkSiteMonitoringDefaults.test.ts +498 -0
- package/Tests/Server/Services/NetworkSiteRollupPolicyAndMaintenance.test.ts +337 -55
- package/Tests/Server/Services/NetworkSiteService.test.ts +1868 -131
- package/Tests/Server/Services/NetworkSiteTypeService.test.ts +1109 -0
- package/Tests/Server/Services/NetworkSnmpCredentialProfileModel.test.ts +926 -0
- package/Tests/Server/Services/NetworkSnmpCredentialProfileService.test.ts +796 -0
- package/Tests/Server/Services/ProjectServiceNetworkSiteTypeDefaults.test.ts +214 -0
- package/Tests/Server/Services/StatusPagePrivateUserEmailChangePasswordResetExpiry.test.ts +269 -0
- package/Tests/Server/Services/UserEmailChangePasswordResetExpiry.test.ts +472 -0
- package/Tests/Server/Services/UserNotificationEmailRollupModels.test.ts +569 -0
- package/Tests/Server/Services/UserNotificationEmailRollupSettingModel.test.ts +314 -0
- package/Tests/Server/Services/UserNotificationEmailRollupSettingService.test.ts +409 -0
- package/Tests/Server/Services/UserNotificationSettingRollupRouting.test.ts +856 -0
- package/Tests/Server/Services/UserNotificationSettingWorkspaceChannels.test.ts +102 -1
- package/Tests/Server/Types/Database/Permissions/DashboardAccessPermission.test.ts +321 -0
- package/Tests/Server/Types/Database/QueryHelperOperators.test.ts +17 -0
- package/Tests/Server/Utils/AI/AlertMonitorFilters.test.ts +124 -0
- package/Tests/Server/Utils/AI/Insights/InsightTriageRunner.test.ts +208 -0
- package/Tests/Server/Utils/AI/LLMServiceToolCalling.test.ts +235 -0
- package/Tests/Server/Utils/AI/ObservabilityChatPrompt.test.ts +253 -0
- package/Tests/Server/Utils/Captcha.test.ts +422 -0
- package/Tests/Server/Utils/DataSource/HttpFetch.test.ts +96 -2
- package/Tests/Server/Utils/Database/MigrationFailureLog.test.ts +466 -0
- package/Tests/Server/Utils/EmailRollup/EmailRollupFlushRunnerBehaviour.test.ts +1096 -0
- package/Tests/Server/Utils/EmailRollup/EmailRollupFlushRunnerClaim.test.ts +466 -0
- package/Tests/Server/Utils/EmailRollup/EmailRollupRenderer.test.ts +1428 -0
- package/Tests/Server/Utils/EmailRollup/EmailRollupTestHarness.ts +752 -0
- package/Tests/Server/Utils/EmailRollup/EmailRollupWriter.test.ts +864 -0
- package/Tests/Server/Utils/LoggerFaultDemotion.test.ts +346 -0
- package/Tests/Server/Utils/Monitor/Criteria/DatabaseMonitorCriteria.test.ts +633 -0
- package/Tests/Server/Utils/Monitor/Criteria/SnmpMonitorCriteria.test.ts +196 -0
- package/Tests/Server/Utils/Monitor/DatabaseMetricWrite.test.ts +367 -0
- package/Tests/Server/Utils/Monitor/MonitorCriteriaObservationBuilderUnits.test.ts +100 -0
- package/Tests/Server/Utils/Monitor/MonitorStepResourceIdentity.test.ts +5 -0
- package/Tests/Server/Utils/Monitor/NetworkDeviceHydrationUtil.test.ts +512 -31
- package/Tests/Server/Utils/Monitor/NetworkDeviceMetricUtil.test.ts +252 -0
- package/Tests/Server/Utils/Monitor/NetworkDeviceWalkUtil.test.ts +479 -42
- package/Tests/Server/Utils/Monitor/NetworkInventoryUtil.test.ts +351 -5
- package/Tests/Server/Utils/NetworkDevice/DeviceHealthAggregation.test.ts +136 -12
- package/Tests/Server/Utils/NetworkSite/NetworkSiteHierarchyLock.test.ts +306 -0
- package/Tests/Server/Utils/OutboundUserAgent.test.ts +266 -0
- package/Tests/Server/Utils/SecurityEvent/ThreatIntel/TaxiiClientUserAgent.test.ts +141 -0
- package/Tests/Server/Utils/Telemetry/ErrorClassResolver.test.ts +298 -0
- package/Tests/Server/Utils/Telemetry.test.ts +456 -66
- package/Tests/Types/Monitor/DatabaseMetricCatalog.test.ts +388 -0
- package/Tests/Types/Monitor/MonitorStepDatabaseMonitor.test.ts +243 -0
- package/Tests/Types/Monitor/MonitorStepDefaultTelemetryConfig.test.ts +1 -0
- package/Tests/Types/Monitor/MonitorType.test.ts +1 -0
- package/Tests/Types/Monitor/MonitorTypeKeywords.test.ts +16 -7
- package/Tests/Types/Monitor/NetworkDeviceAlertPack.test.ts +60 -0
- package/Tests/Types/NetworkDevice/NetworkAlertPolicyScope.test.ts +655 -0
- package/Tests/Types/NetworkDevice/NetworkDeviceMonitoringMethod.test.ts +115 -26
- package/Tests/Types/NetworkSite/DefaultNetworkSiteType.test.ts +39 -0
- package/Tests/Types/NotificationSetting/NotificationEmailRollupPolicy.test.ts +299 -0
- package/Tests/Types/Telemetry/ErrorClass.test.ts +483 -0
- package/Tests/UI/Components/BasicRadioButtons.test.tsx +336 -0
- package/Tests/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.test.ts +15 -0
- package/Tests/UI/Components/ProgressBar.test.tsx +38 -2
- package/Tests/UI/Components/SideMenuItem.test.tsx +226 -4
- package/Tests/UI/Components/SideMenuSection.test.tsx +310 -0
- package/Tests/UI/Components/SideOverSubmitState.test.tsx +335 -0
- package/Tests/UI/Utils/PageScrollLock.test.tsx +377 -0
- package/Tests/UI/Utils/PermissionGate.test.ts +78 -0
- package/Tests/UI/Utils/SensitiveUrlToken.test.ts +140 -0
- package/Tests/Utils/EnterpriseLicenseSeats.test.ts +69 -0
- package/Tests/Utils/EnterpriseLicenseSync.test.ts +7 -1
- package/Tests/Utils/EnterpriseLicenseUsage.test.ts +433 -2
- package/Tests/Utils/Monitor/MonitorMetricType.test.ts +280 -1
- package/Tests/Utils/Monitor/MonitorSummarySnapshotUtil.test.ts +1 -0
- package/Tests/Utils/Monitor/NetworkTopologyUtil.test.ts +38 -0
- package/Tests/Utils/NetworkDevice/DeviceHealthStateUtil.test.ts +284 -23
- package/Tests/Utils/NetworkDevice/DeviceReachabilityUtil.test.ts +177 -0
- package/Tests/Utils/NetworkDevice/MonitoringMethodThreadedClassifiers.test.ts +992 -0
- package/Tests/Utils/NetworkDevice/NetworkAlertPolicyBootstrapUtil.test.ts +427 -0
- package/Tests/Utils/NetworkDevice/ReachabilityStampConsistency.test.ts +185 -0
- package/Tests/Utils/NetworkDevice/SnmpCredentialUtil.test.ts +268 -0
- package/Tests/Utils/NetworkDiscovery/AutoImportRuleMatcher.test.ts +55 -5
- package/Tests/Utils/NetworkDiscovery/DiscoveredDeviceBuilder.test.ts +98 -21
- package/Tests/Utils/NetworkDiscovery/DiscoveryImportEligibility.test.ts +98 -20
- package/Tests/Utils/NetworkDiscovery/DiscoveryReverseDnsChain.test.ts +8 -7
- package/Tests/Utils/NetworkDiscovery/PingMonitorBuilderForAddress.test.ts +274 -0
- package/Tests/Utils/NetworkSite/SiteStatusRollupUtil.test.ts +230 -51
- package/Tests/Utils/NetworkSite/TypeHierarchyUtil.test.ts +209 -0
- package/Tests/Utils/Telemetry/CaptureSpanExportGating.test.ts +145 -0
- package/Types/AI/ExceptionAIClassification.ts +10 -24
- package/Types/Email/EmailTemplateType.ts +2 -0
- package/Types/EnterpriseLicense/EnterpriseLicenseInstanceSummary.ts +5 -0
- package/Types/EnterpriseLicense/EnterpriseLicenseUsageSnapshot.ts +13 -0
- package/Types/EnterpriseLicense/EnterpriseLicenseUserCountSource.ts +6 -0
- package/Types/Exception/ApiException.ts +10 -0
- package/Types/Exception/BadDataException.ts +11 -0
- package/Types/Exception/BadRequestException.ts +11 -0
- package/Types/Exception/Exception.ts +65 -0
- package/Types/Exception/ForbiddenException.ts +10 -0
- package/Types/Exception/NotAuthenticatedException.ts +10 -0
- package/Types/Exception/NotAuthorizedException.ts +10 -0
- package/Types/Exception/NotFoundException.ts +11 -0
- package/Types/Exception/PayloadTooLargeException.ts +11 -0
- package/Types/Exception/PaymentRequiredException.ts +10 -0
- package/Types/Exception/ServiceUnavailableException.ts +10 -0
- package/Types/Exception/SsoAuthorizationException.ts +10 -0
- package/Types/Exception/TenantNotFoundException.ts +11 -0
- package/Types/Exception/TimeoutException.ts +10 -0
- package/Types/Exception/TooManyRequestsException.ts +10 -0
- package/Types/Exception/UnableToReachServer.ts +10 -0
- package/Types/Exception/WebsiteRequestException.ts +10 -0
- package/Types/Monitor/CriteriaFilter.ts +60 -2
- package/Types/Monitor/DatabaseMetricCatalog.ts +693 -0
- package/Types/Monitor/DatabaseMonitor/DatabaseMonitorResponse.ts +83 -0
- package/Types/Monitor/MonitorCriteriaInstance.ts +76 -0
- package/Types/Monitor/MonitorMetricType.ts +71 -0
- package/Types/Monitor/MonitorStep.ts +76 -0
- package/Types/Monitor/MonitorStepDatabaseMonitor.ts +171 -0
- package/Types/Monitor/MonitorStepSqlMonitor.ts +2 -20
- package/Types/Monitor/MonitorType.ts +47 -1
- package/Types/Monitor/SnmpMonitor/NetworkDeviceAlertPack.ts +22 -1
- package/Types/Monitor/SqlConnectionConfig.ts +31 -0
- package/Types/NetworkDevice/NetworkAlertPolicyScope.ts +343 -0
- package/Types/NetworkDevice/NetworkDeviceMonitoringMethod.ts +42 -22
- package/Types/NetworkSite/DefaultNetworkSiteTypeHierarchy.ts +30 -0
- package/Types/NotificationSetting/NotificationEmailRollupCategory.ts +255 -0
- package/Types/NotificationSetting/NotificationEmailRollupPolicy.ts +104 -0
- package/Types/Permission.ts +90 -0
- package/Types/Probe/ProbeMonitorResponse.ts +16 -0
- package/Types/Telemetry/ErrorClass.ts +274 -0
- package/Types/Telemetry/UnitOfWork.ts +59 -0
- package/UI/Components/CommandPalette/CommandPalette.tsx +2 -8
- package/UI/Components/EditionLabel/EditionLabel.tsx +4 -0
- package/UI/Components/Modal/Modal.tsx +2 -8
- package/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.ts +44 -0
- package/UI/Components/ProgressBar/ProgressBar.tsx +12 -1
- package/UI/Components/RadioButtons/BasicRadioButtons.tsx +37 -7
- package/UI/Components/SideMenu/SideMenu.tsx +123 -5
- package/UI/Components/SideMenu/SideMenuItem.tsx +76 -84
- package/UI/Components/SideMenu/SideMenuSection.tsx +55 -23
- package/UI/Components/SideOver/SideOver.tsx +21 -20
- package/UI/Utils/PageScrollLock.ts +79 -3
- package/UI/Utils/PermissionGate.ts +61 -0
- package/UI/Utils/SensitiveUrlToken.ts +112 -0
- package/UI/Utils/TestLLMProvider.ts +11 -0
- package/Utils/EnterpriseLicense/EnterpriseLicenseSeats.ts +16 -0
- package/Utils/EnterpriseLicense/EnterpriseLicenseUsage.ts +191 -11
- package/Utils/Monitor/MonitorMetricType.ts +153 -1
- package/Utils/Monitor/NetworkTopologyUtil.ts +23 -3
- package/Utils/NetworkDevice/DeviceHealthStateUtil.ts +65 -14
- package/Utils/NetworkDevice/DeviceReachabilityUtil.ts +43 -14
- package/Utils/NetworkDevice/NetworkAlertPolicyBootstrapUtil.ts +247 -0
- package/Utils/NetworkDevice/SnmpCredentialUtil.ts +68 -0
- package/Utils/NetworkDiscovery/AutoImportRuleMatcher.ts +15 -7
- package/Utils/NetworkDiscovery/DiscoveredDeviceBuilder.ts +52 -17
- package/Utils/NetworkDiscovery/DiscoveryImportEligibility.ts +55 -23
- package/Utils/NetworkDiscovery/PingMonitorBuilder.ts +115 -13
- package/Utils/NetworkSite/SiteStatusRollupUtil.ts +66 -20
- package/Utils/NetworkSite/TypeHierarchyUtil.ts +313 -0
- package/build/dist/Models/AnalyticsModels/Span.js +14 -0
- package/build/dist/Models/AnalyticsModels/Span.js.map +1 -1
- package/build/dist/Models/DatabaseModels/EnterpriseLicense.js +59 -0
- package/build/dist/Models/DatabaseModels/EnterpriseLicense.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Index.js +10 -0
- package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Monitor.js +75 -0
- package/build/dist/Models/DatabaseModels/Monitor.js.map +1 -1
- package/build/dist/Models/DatabaseModels/NetworkAlertPolicy.js +713 -0
- package/build/dist/Models/DatabaseModels/NetworkAlertPolicy.js.map +1 -0
- package/build/dist/Models/DatabaseModels/NetworkDevice.js +180 -1
- package/build/dist/Models/DatabaseModels/NetworkDevice.js.map +1 -1
- package/build/dist/Models/DatabaseModels/NetworkSite.js +200 -2
- package/build/dist/Models/DatabaseModels/NetworkSite.js.map +1 -1
- package/build/dist/Models/DatabaseModels/NetworkSiteType.js +102 -3
- package/build/dist/Models/DatabaseModels/NetworkSiteType.js.map +1 -1
- package/build/dist/Models/DatabaseModels/NetworkSnmpCredentialProfile.js +878 -0
- package/build/dist/Models/DatabaseModels/NetworkSnmpCredentialProfile.js.map +1 -0
- package/build/dist/Models/DatabaseModels/TelemetryException.js +123 -0
- package/build/dist/Models/DatabaseModels/TelemetryException.js.map +1 -1
- package/build/dist/Models/DatabaseModels/UserNotificationEmailRollupBatch.js +363 -0
- package/build/dist/Models/DatabaseModels/UserNotificationEmailRollupBatch.js.map +1 -0
- package/build/dist/Models/DatabaseModels/UserNotificationEmailRollupItem.js +402 -0
- package/build/dist/Models/DatabaseModels/UserNotificationEmailRollupItem.js.map +1 -0
- package/build/dist/Models/DatabaseModels/UserNotificationEmailRollupSetting.js +296 -0
- package/build/dist/Models/DatabaseModels/UserNotificationEmailRollupSetting.js.map +1 -0
- package/build/dist/Server/API/EnterpriseLicenseAPI.js +273 -60
- package/build/dist/Server/API/EnterpriseLicenseAPI.js.map +1 -1
- package/build/dist/Server/API/LlmProviderAPI.js +108 -13
- package/build/dist/Server/API/LlmProviderAPI.js.map +1 -1
- package/build/dist/Server/EnvironmentConfig.js +12 -0
- package/build/dist/Server/EnvironmentConfig.js.map +1 -1
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790700000000-AddNetworkSiteTypeParentHierarchy.js +24 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790700000000-AddNetworkSiteTypeParentHierarchy.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790900000000-AddEnterpriseLicenseUsageProvenance.js +16 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790900000000-AddEnterpriseLicenseUsageProvenance.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790900000000-AddTelemetryExceptionErrorClass.js +111 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790900000000-AddTelemetryExceptionErrorClass.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791000000000-AddUserNotificationEmailRollup.js +77 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791000000000-AddUserNotificationEmailRollup.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791100000000-AddUserNotificationEmailRollupSetting.js +50 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791100000000-AddUserNotificationEmailRollupSetting.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791200000000-AddNetworkSnmpCredentialProfilesAndAlertPolicies.js +83 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791200000000-AddNetworkSnmpCredentialProfilesAndAlertPolicies.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +12 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
- package/build/dist/Server/Infrastructure/QueueWorker.js +33 -5
- package/build/dist/Server/Infrastructure/QueueWorker.js.map +1 -1
- package/build/dist/Server/Middleware/BearerTokenAuthorization.js +12 -0
- package/build/dist/Server/Middleware/BearerTokenAuthorization.js.map +1 -1
- package/build/dist/Server/Middleware/ProjectAuthorization.js +11 -0
- package/build/dist/Server/Middleware/ProjectAuthorization.js.map +1 -1
- package/build/dist/Server/Middleware/SCIMAuthorization.js +12 -0
- package/build/dist/Server/Middleware/SCIMAuthorization.js.map +1 -1
- package/build/dist/Server/Middleware/TelemetryIngest.js +11 -0
- package/build/dist/Server/Middleware/TelemetryIngest.js.map +1 -1
- package/build/dist/Server/Services/AIBillingService.js +70 -16
- package/build/dist/Server/Services/AIBillingService.js.map +1 -1
- package/build/dist/Server/Services/EnterpriseLicenseInstanceService.js +167 -0
- package/build/dist/Server/Services/EnterpriseLicenseInstanceService.js.map +1 -1
- package/build/dist/Server/Services/EnterpriseLicenseService.js +39 -0
- package/build/dist/Server/Services/EnterpriseLicenseService.js.map +1 -1
- package/build/dist/Server/Services/Index.js +10 -0
- package/build/dist/Server/Services/Index.js.map +1 -1
- package/build/dist/Server/Services/MonitorService.js +119 -21
- package/build/dist/Server/Services/MonitorService.js.map +1 -1
- package/build/dist/Server/Services/MonitorStatusTimelineService.js +127 -8
- package/build/dist/Server/Services/MonitorStatusTimelineService.js.map +1 -1
- package/build/dist/Server/Services/MonitorTemplateService.js +162 -0
- package/build/dist/Server/Services/MonitorTemplateService.js.map +1 -1
- package/build/dist/Server/Services/NetworkAlertPolicyEngineService.js +1683 -0
- package/build/dist/Server/Services/NetworkAlertPolicyEngineService.js.map +1 -0
- package/build/dist/Server/Services/NetworkAlertPolicyService.js +732 -0
- package/build/dist/Server/Services/NetworkAlertPolicyService.js.map +1 -0
- package/build/dist/Server/Services/NetworkDeviceAutoImportRuleEngineService.js +10 -9
- package/build/dist/Server/Services/NetworkDeviceAutoImportRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/NetworkDeviceAutoImportRuleService.js +54 -11
- package/build/dist/Server/Services/NetworkDeviceAutoImportRuleService.js.map +1 -1
- package/build/dist/Server/Services/NetworkDeviceService.js +841 -70
- package/build/dist/Server/Services/NetworkDeviceService.js.map +1 -1
- package/build/dist/Server/Services/NetworkSiteService.js +1145 -107
- package/build/dist/Server/Services/NetworkSiteService.js.map +1 -1
- package/build/dist/Server/Services/NetworkSiteTypeService.js +863 -0
- package/build/dist/Server/Services/NetworkSiteTypeService.js.map +1 -1
- package/build/dist/Server/Services/NetworkSnmpCredentialProfileService.js +217 -0
- package/build/dist/Server/Services/NetworkSnmpCredentialProfileService.js.map +1 -0
- package/build/dist/Server/Services/NotificationService.js +80 -17
- package/build/dist/Server/Services/NotificationService.js.map +1 -1
- package/build/dist/Server/Services/ProjectService.js +66 -30
- package/build/dist/Server/Services/ProjectService.js.map +1 -1
- package/build/dist/Server/Services/StatusPagePrivateUserService.js +92 -2
- package/build/dist/Server/Services/StatusPagePrivateUserService.js.map +1 -1
- package/build/dist/Server/Services/UserNotificationEmailRollupBatchService.js +76 -0
- package/build/dist/Server/Services/UserNotificationEmailRollupBatchService.js.map +1 -0
- package/build/dist/Server/Services/UserNotificationEmailRollupItemService.js +77 -0
- package/build/dist/Server/Services/UserNotificationEmailRollupItemService.js.map +1 -0
- package/build/dist/Server/Services/UserNotificationEmailRollupSettingService.js +111 -0
- package/build/dist/Server/Services/UserNotificationEmailRollupSettingService.js.map +1 -0
- package/build/dist/Server/Services/UserNotificationSettingService.js +46 -20
- package/build/dist/Server/Services/UserNotificationSettingService.js.map +1 -1
- package/build/dist/Server/Services/UserService.js +90 -0
- package/build/dist/Server/Services/UserService.js.map +1 -1
- package/build/dist/Server/Types/Database/QueryHelper.js +1 -1
- package/build/dist/Server/Types/Database/QueryHelper.js.map +1 -1
- package/build/dist/Server/Utils/AI/Chat/ObservabilityChatPrompt.js +14 -3
- package/build/dist/Server/Utils/AI/Chat/ObservabilityChatPrompt.js.map +1 -1
- package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/ExceptionSpikeDetector.js +10 -0
- package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/ExceptionSpikeDetector.js.map +1 -1
- package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/NewExceptionDetector.js +10 -0
- package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/NewExceptionDetector.js.map +1 -1
- package/build/dist/Server/Utils/AI/SRE/Insights/InsightTriageRunner.js +54 -1
- package/build/dist/Server/Utils/AI/SRE/Insights/InsightTriageRunner.js.map +1 -1
- package/build/dist/Server/Utils/AI/Toolbox/AlertTools.js +18 -4
- package/build/dist/Server/Utils/AI/Toolbox/AlertTools.js.map +1 -1
- package/build/dist/Server/Utils/Billing/BillingFailureNoticeThrottle.js +59 -0
- package/build/dist/Server/Utils/Billing/BillingFailureNoticeThrottle.js.map +1 -0
- package/build/dist/Server/Utils/DataSource/HttpFetch.js +2 -1
- package/build/dist/Server/Utils/DataSource/HttpFetch.js.map +1 -1
- package/build/dist/Server/Utils/EmailRollup/EmailRollupConstants.js +91 -0
- package/build/dist/Server/Utils/EmailRollup/EmailRollupConstants.js.map +1 -0
- package/build/dist/Server/Utils/EmailRollup/EmailRollupFlushRunner.js +691 -0
- package/build/dist/Server/Utils/EmailRollup/EmailRollupFlushRunner.js.map +1 -0
- package/build/dist/Server/Utils/EmailRollup/EmailRollupRenderer.js +497 -0
- package/build/dist/Server/Utils/EmailRollup/EmailRollupRenderer.js.map +1 -0
- package/build/dist/Server/Utils/EmailRollup/EmailRollupWriter.js +257 -0
- package/build/dist/Server/Utils/EmailRollup/EmailRollupWriter.js.map +1 -0
- package/build/dist/Server/Utils/LLM/LLMService.js +64 -1
- package/build/dist/Server/Utils/LLM/LLMService.js.map +1 -1
- package/build/dist/Server/Utils/LogRedaction.js +8 -0
- package/build/dist/Server/Utils/LogRedaction.js.map +1 -1
- package/build/dist/Server/Utils/Logger.js +63 -1
- package/build/dist/Server/Utils/Logger.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/Criteria/DatabaseMonitorCriteria.js +141 -0
- package/build/dist/Server/Utils/Monitor/Criteria/DatabaseMonitorCriteria.js.map +1 -0
- package/build/dist/Server/Utils/Monitor/Criteria/EvaluateOverTime.js +8 -1
- package/build/dist/Server/Utils/Monitor/Criteria/EvaluateOverTime.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/Criteria/SnmpMonitorCriteria.js +51 -1
- package/build/dist/Server/Utils/Monitor/Criteria/SnmpMonitorCriteria.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaDataExtractor.js +7 -0
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaDataExtractor.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js +37 -0
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaObservationBuilder.js +158 -6
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaObservationBuilder.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorMetricUtil.js +33 -0
- package/build/dist/Server/Utils/Monitor/MonitorMetricUtil.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorTemplateUtil.js +32 -0
- package/build/dist/Server/Utils/Monitor/MonitorTemplateUtil.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/NetworkDeviceHydrationUtil.js +330 -21
- package/build/dist/Server/Utils/Monitor/NetworkDeviceHydrationUtil.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/NetworkDeviceMetricUtil.js +55 -10
- package/build/dist/Server/Utils/Monitor/NetworkDeviceMetricUtil.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/NetworkDeviceWalkUtil.js +178 -49
- package/build/dist/Server/Utils/Monitor/NetworkDeviceWalkUtil.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/NetworkInventoryUtil.js +119 -29
- package/build/dist/Server/Utils/Monitor/NetworkInventoryUtil.js.map +1 -1
- package/build/dist/Server/Utils/NetworkDevice/DeviceHealthAggregation.js +30 -17
- package/build/dist/Server/Utils/NetworkDevice/DeviceHealthAggregation.js.map +1 -1
- package/build/dist/Server/Utils/NetworkSite/NetworkSiteHierarchyLock.js +158 -0
- package/build/dist/Server/Utils/NetworkSite/NetworkSiteHierarchyLock.js.map +1 -0
- package/build/dist/Server/Utils/OutboundUserAgent.js +123 -0
- package/build/dist/Server/Utils/OutboundUserAgent.js.map +1 -0
- package/build/dist/Server/Utils/StartServer.js +38 -14
- package/build/dist/Server/Utils/StartServer.js.map +1 -1
- package/build/dist/Server/Utils/Telemetry/CaptureSpan.js +28 -8
- package/build/dist/Server/Utils/Telemetry/CaptureSpan.js.map +1 -1
- package/build/dist/Server/Utils/Telemetry/ErrorClassResolver.js +95 -0
- package/build/dist/Server/Utils/Telemetry/ErrorClassResolver.js.map +1 -0
- package/build/dist/Server/Utils/Telemetry/SpanUtil.js +29 -0
- package/build/dist/Server/Utils/Telemetry/SpanUtil.js.map +1 -1
- package/build/dist/Server/Utils/Telemetry.js +162 -46
- package/build/dist/Server/Utils/Telemetry.js.map +1 -1
- package/build/dist/Types/AI/ExceptionAIClassification.js +10 -24
- package/build/dist/Types/AI/ExceptionAIClassification.js.map +1 -1
- package/build/dist/Types/Email/EmailTemplateType.js +1 -0
- package/build/dist/Types/Email/EmailTemplateType.js.map +1 -1
- package/build/dist/Types/EnterpriseLicense/EnterpriseLicenseUsageSnapshot.js +2 -0
- package/build/dist/Types/EnterpriseLicense/EnterpriseLicenseUsageSnapshot.js.map +1 -0
- package/build/dist/Types/EnterpriseLicense/EnterpriseLicenseUserCountSource.js +7 -0
- package/build/dist/Types/EnterpriseLicense/EnterpriseLicenseUserCountSource.js.map +1 -0
- package/build/dist/Types/Exception/ApiException.js +9 -0
- package/build/dist/Types/Exception/ApiException.js.map +1 -1
- package/build/dist/Types/Exception/BadDataException.js +10 -0
- package/build/dist/Types/Exception/BadDataException.js.map +1 -1
- package/build/dist/Types/Exception/BadRequestException.js +10 -0
- package/build/dist/Types/Exception/BadRequestException.js.map +1 -1
- package/build/dist/Types/Exception/Exception.js +56 -0
- package/build/dist/Types/Exception/Exception.js.map +1 -1
- package/build/dist/Types/Exception/ForbiddenException.js +9 -0
- package/build/dist/Types/Exception/ForbiddenException.js.map +1 -1
- package/build/dist/Types/Exception/NotAuthenticatedException.js +9 -0
- package/build/dist/Types/Exception/NotAuthenticatedException.js.map +1 -1
- package/build/dist/Types/Exception/NotAuthorizedException.js +9 -0
- package/build/dist/Types/Exception/NotAuthorizedException.js.map +1 -1
- package/build/dist/Types/Exception/NotFoundException.js +10 -0
- package/build/dist/Types/Exception/NotFoundException.js.map +1 -1
- package/build/dist/Types/Exception/PayloadTooLargeException.js +10 -0
- package/build/dist/Types/Exception/PayloadTooLargeException.js.map +1 -1
- package/build/dist/Types/Exception/PaymentRequiredException.js +9 -0
- package/build/dist/Types/Exception/PaymentRequiredException.js.map +1 -1
- package/build/dist/Types/Exception/ServiceUnavailableException.js +9 -0
- package/build/dist/Types/Exception/ServiceUnavailableException.js.map +1 -1
- package/build/dist/Types/Exception/SsoAuthorizationException.js +9 -0
- package/build/dist/Types/Exception/SsoAuthorizationException.js.map +1 -1
- package/build/dist/Types/Exception/TenantNotFoundException.js +10 -0
- package/build/dist/Types/Exception/TenantNotFoundException.js.map +1 -1
- package/build/dist/Types/Exception/TimeoutException.js +9 -0
- package/build/dist/Types/Exception/TimeoutException.js.map +1 -1
- package/build/dist/Types/Exception/TooManyRequestsException.js +9 -0
- package/build/dist/Types/Exception/TooManyRequestsException.js.map +1 -1
- package/build/dist/Types/Exception/UnableToReachServer.js +9 -0
- package/build/dist/Types/Exception/UnableToReachServer.js.map +1 -1
- package/build/dist/Types/Exception/WebsiteRequestException.js +9 -0
- package/build/dist/Types/Exception/WebsiteRequestException.js.map +1 -1
- package/build/dist/Types/Monitor/CriteriaFilter.js +45 -2
- package/build/dist/Types/Monitor/CriteriaFilter.js.map +1 -1
- package/build/dist/Types/Monitor/DatabaseMetricCatalog.js +594 -0
- package/build/dist/Types/Monitor/DatabaseMetricCatalog.js.map +1 -0
- package/build/dist/Types/Monitor/DatabaseMonitor/DatabaseMonitorResponse.js +21 -0
- package/build/dist/Types/Monitor/DatabaseMonitor/DatabaseMonitorResponse.js.map +1 -0
- package/build/dist/Types/Monitor/MonitorCriteriaInstance.js +70 -0
- package/build/dist/Types/Monitor/MonitorCriteriaInstance.js.map +1 -1
- package/build/dist/Types/Monitor/MonitorMetricType.js +61 -0
- package/build/dist/Types/Monitor/MonitorMetricType.js.map +1 -1
- package/build/dist/Types/Monitor/MonitorStep.js +54 -0
- package/build/dist/Types/Monitor/MonitorStep.js.map +1 -1
- package/build/dist/Types/Monitor/MonitorStepDatabaseMonitor.js +122 -0
- package/build/dist/Types/Monitor/MonitorStepDatabaseMonitor.js.map +1 -0
- package/build/dist/Types/Monitor/MonitorStepSqlMonitor.js.map +1 -1
- package/build/dist/Types/Monitor/MonitorType.js +45 -1
- package/build/dist/Types/Monitor/MonitorType.js.map +1 -1
- package/build/dist/Types/Monitor/SnmpMonitor/NetworkDeviceAlertPack.js +21 -1
- package/build/dist/Types/Monitor/SnmpMonitor/NetworkDeviceAlertPack.js.map +1 -1
- package/build/dist/Types/Monitor/SqlConnectionConfig.js +2 -0
- package/build/dist/Types/Monitor/SqlConnectionConfig.js.map +1 -0
- package/build/dist/Types/NetworkDevice/NetworkAlertPolicyScope.js +172 -0
- package/build/dist/Types/NetworkDevice/NetworkAlertPolicyScope.js.map +1 -0
- package/build/dist/Types/NetworkDevice/NetworkDeviceMonitoringMethod.js +40 -22
- package/build/dist/Types/NetworkDevice/NetworkDeviceMonitoringMethod.js.map +1 -1
- package/build/dist/Types/NetworkSite/DefaultNetworkSiteTypeHierarchy.js +26 -0
- package/build/dist/Types/NetworkSite/DefaultNetworkSiteTypeHierarchy.js.map +1 -0
- package/build/dist/Types/NotificationSetting/NotificationEmailRollupCategory.js +186 -0
- package/build/dist/Types/NotificationSetting/NotificationEmailRollupCategory.js.map +1 -0
- package/build/dist/Types/NotificationSetting/NotificationEmailRollupPolicy.js +87 -0
- package/build/dist/Types/NotificationSetting/NotificationEmailRollupPolicy.js.map +1 -0
- package/build/dist/Types/Permission.js +80 -0
- package/build/dist/Types/Permission.js.map +1 -1
- package/build/dist/Types/Telemetry/ErrorClass.js +216 -0
- package/build/dist/Types/Telemetry/ErrorClass.js.map +1 -0
- package/build/dist/Types/Telemetry/UnitOfWork.js +59 -0
- package/build/dist/Types/Telemetry/UnitOfWork.js.map +1 -0
- package/build/dist/UI/Components/CommandPalette/CommandPalette.js +2 -7
- package/build/dist/UI/Components/CommandPalette/CommandPalette.js.map +1 -1
- package/build/dist/UI/Components/EditionLabel/EditionLabel.js +3 -0
- package/build/dist/UI/Components/EditionLabel/EditionLabel.js.map +1 -1
- package/build/dist/UI/Components/Modal/Modal.js +2 -7
- package/build/dist/UI/Components/Modal/Modal.js.map +1 -1
- package/build/dist/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.js +39 -0
- package/build/dist/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.js.map +1 -1
- package/build/dist/UI/Components/ProgressBar/ProgressBar.js +12 -1
- package/build/dist/UI/Components/ProgressBar/ProgressBar.js.map +1 -1
- package/build/dist/UI/Components/RadioButtons/BasicRadioButtons.js +6 -6
- package/build/dist/UI/Components/RadioButtons/BasicRadioButtons.js.map +1 -1
- package/build/dist/UI/Components/SideMenu/SideMenu.js +67 -5
- package/build/dist/UI/Components/SideMenu/SideMenu.js.map +1 -1
- package/build/dist/UI/Components/SideMenu/SideMenuItem.js +49 -53
- package/build/dist/UI/Components/SideMenu/SideMenuItem.js.map +1 -1
- package/build/dist/UI/Components/SideMenu/SideMenuSection.js +25 -7
- package/build/dist/UI/Components/SideMenu/SideMenuSection.js.map +1 -1
- package/build/dist/UI/Components/SideOver/SideOver.js +5 -20
- package/build/dist/UI/Components/SideOver/SideOver.js.map +1 -1
- package/build/dist/UI/Utils/PageScrollLock.js +31 -3
- package/build/dist/UI/Utils/PageScrollLock.js.map +1 -1
- package/build/dist/UI/Utils/PermissionGate.js +42 -1
- package/build/dist/UI/Utils/PermissionGate.js.map +1 -1
- package/build/dist/UI/Utils/SensitiveUrlToken.js +97 -0
- package/build/dist/UI/Utils/SensitiveUrlToken.js.map +1 -0
- package/build/dist/UI/Utils/TestLLMProvider.js +4 -5
- package/build/dist/UI/Utils/TestLLMProvider.js.map +1 -1
- package/build/dist/Utils/EnterpriseLicense/EnterpriseLicenseSeats.js +15 -0
- package/build/dist/Utils/EnterpriseLicense/EnterpriseLicenseSeats.js.map +1 -1
- package/build/dist/Utils/EnterpriseLicense/EnterpriseLicenseUsage.js +111 -9
- package/build/dist/Utils/EnterpriseLicense/EnterpriseLicenseUsage.js.map +1 -1
- package/build/dist/Utils/Monitor/MonitorMetricType.js +109 -1
- package/build/dist/Utils/Monitor/MonitorMetricType.js.map +1 -1
- package/build/dist/Utils/Monitor/NetworkTopologyUtil.js +8 -3
- package/build/dist/Utils/Monitor/NetworkTopologyUtil.js.map +1 -1
- package/build/dist/Utils/NetworkDevice/DeviceHealthStateUtil.js +27 -7
- package/build/dist/Utils/NetworkDevice/DeviceHealthStateUtil.js.map +1 -1
- package/build/dist/Utils/NetworkDevice/DeviceReachabilityUtil.js +7 -5
- package/build/dist/Utils/NetworkDevice/DeviceReachabilityUtil.js.map +1 -1
- package/build/dist/Utils/NetworkDevice/NetworkAlertPolicyBootstrapUtil.js +180 -0
- package/build/dist/Utils/NetworkDevice/NetworkAlertPolicyBootstrapUtil.js.map +1 -0
- package/build/dist/Utils/NetworkDevice/SnmpCredentialUtil.js +12 -0
- package/build/dist/Utils/NetworkDevice/SnmpCredentialUtil.js.map +1 -0
- package/build/dist/Utils/NetworkDiscovery/AutoImportRuleMatcher.js +15 -5
- package/build/dist/Utils/NetworkDiscovery/AutoImportRuleMatcher.js.map +1 -1
- package/build/dist/Utils/NetworkDiscovery/DiscoveredDeviceBuilder.js +44 -15
- package/build/dist/Utils/NetworkDiscovery/DiscoveredDeviceBuilder.js.map +1 -1
- package/build/dist/Utils/NetworkDiscovery/DiscoveryImportEligibility.js +52 -23
- package/build/dist/Utils/NetworkDiscovery/DiscoveryImportEligibility.js.map +1 -1
- package/build/dist/Utils/NetworkDiscovery/PingMonitorBuilder.js +85 -13
- package/build/dist/Utils/NetworkDiscovery/PingMonitorBuilder.js.map +1 -1
- package/build/dist/Utils/NetworkSite/SiteStatusRollupUtil.js +30 -15
- package/build/dist/Utils/NetworkSite/SiteStatusRollupUtil.js.map +1 -1
- package/build/dist/Utils/NetworkSite/TypeHierarchyUtil.js +191 -0
- package/build/dist/Utils/NetworkSite/TypeHierarchyUtil.js.map +1 -0
- package/package.json +2 -2
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import DeviceReachabilityUtil, {
|
|
2
2
|
NetworkDeviceReachability,
|
|
3
3
|
} from "./DeviceReachabilityUtil";
|
|
4
|
+
import { NetworkDeviceMonitoringMethodUtil } from "../../Types/NetworkDevice/NetworkDeviceMonitoringMethod";
|
|
4
5
|
|
|
5
6
|
/*
|
|
6
7
|
* The one place that decides how healthy a single NetworkDevice is, and how
|
|
@@ -15,10 +16,12 @@ import DeviceReachabilityUtil, {
|
|
|
15
16
|
*
|
|
16
17
|
* So the rule moves here, and both halves read it:
|
|
17
18
|
*
|
|
18
|
-
* status — a
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
19
|
+
* status — for a MONITOR-BACKED device the stamped monitor status is the
|
|
20
|
+
* verdict; for a probe-polled device the shared reachability
|
|
21
|
+
* rule (the OUTCOME of the last poll, never its age) decides and
|
|
22
|
+
* the stamp is informational only (see the input docs); a device
|
|
23
|
+
* nothing has ever polled — or a monitor-backed device nothing
|
|
24
|
+
* has yet reported on — is `unknown` rather than a failure.
|
|
22
25
|
* degraded — an up device with dark ports. A switch that answers every
|
|
23
26
|
* poll while three of its interfaces are down is not down, but
|
|
24
27
|
* it is exactly what somebody is looking for.
|
|
@@ -55,9 +58,18 @@ export type NetworkDeviceHealthState =
|
|
|
55
58
|
* The columns the classifier reads. Every caller selects exactly these.
|
|
56
59
|
*
|
|
57
60
|
* `monitorStatusIsOffline` is the OFFLINE end of the device's stamped
|
|
58
|
-
* MonitorStatus row — `undefined` when
|
|
59
|
-
*
|
|
60
|
-
*
|
|
61
|
+
* MonitorStatus row — `undefined` when nothing has stamped one, which is
|
|
62
|
+
* what sends the decision down to reachability.
|
|
63
|
+
*
|
|
64
|
+
* It is CONSULTED ONLY FOR A MONITOR-BACKED DEVICE (monitoringMethod
|
|
65
|
+
* "Monitor"). A probe-polled device can carry a stamp too — a Network
|
|
66
|
+
* Device monitor watching its walk writes one, and an "interface down →
|
|
67
|
+
* Offline" criterion will happily stamp Offline on a switch that answers
|
|
68
|
+
* every ping — but its health source is the poll: `isReachable` is what its
|
|
69
|
+
* pill, the summary tiles and the Status chip all read, and a classifier
|
|
70
|
+
* that let the stamp outrank it would colour the site card and the map red
|
|
71
|
+
* over a device whose own row reads Up. So for a probe-polled device the
|
|
72
|
+
* stamp stays informational and reachability decides.
|
|
61
73
|
*
|
|
62
74
|
* The offline end and not the operational end, because MonitorStatus is a
|
|
63
75
|
* ladder rather than a pair: the seeded rows run Operational (1) ...
|
|
@@ -74,6 +86,24 @@ export interface DeviceHealthStateInput {
|
|
|
74
86
|
lastPolledAt?: Date | string | null | undefined;
|
|
75
87
|
lastSeenAt?: Date | string | null | undefined;
|
|
76
88
|
pollingIntervalInMinutes?: number | null | undefined;
|
|
89
|
+
/*
|
|
90
|
+
* How this device's health is established. NULL, empty and anything
|
|
91
|
+
* unrecognised read as Probe — see NetworkDeviceMonitoringMethodUtil.parse,
|
|
92
|
+
* which is why an omitted value keeps every existing caller on the poll
|
|
93
|
+
* rule unchanged.
|
|
94
|
+
*
|
|
95
|
+
* Load-bearing twice. It decides whether `monitorStatusIsOffline` above is
|
|
96
|
+
* read at all (only for a monitor-backed device). And when a monitor-backed
|
|
97
|
+
* device has NO stamped status to read — nothing bound yet, or bound and
|
|
98
|
+
* never evaluated — the shared rule answers Pending ("unknown" here)
|
|
99
|
+
* rather than falling through to the poll columns, which on such a device
|
|
100
|
+
* are either NULL or, worse, the last thing a probe found before it
|
|
101
|
+
* stopped asking: a device switched from Probe to Monitor keeps its old
|
|
102
|
+
* lastSeenAt until the switch-over clears it, and a caller that dropped
|
|
103
|
+
* this field would let that months-old timestamp call the device "down" on
|
|
104
|
+
* the site card while its own row in the device list reads Pending.
|
|
105
|
+
*/
|
|
106
|
+
monitoringMethod?: string | null | undefined;
|
|
77
107
|
interfacesDown?: number | null | undefined;
|
|
78
108
|
}
|
|
79
109
|
|
|
@@ -96,11 +126,13 @@ export interface DeviceHealthCounts {
|
|
|
96
126
|
/**
|
|
97
127
|
* The state of one device.
|
|
98
128
|
*
|
|
99
|
-
* Order is load-bearing.
|
|
100
|
-
* system of record and beats everything;
|
|
101
|
-
*
|
|
102
|
-
*
|
|
103
|
-
*
|
|
129
|
+
* Order is load-bearing. On a monitor-backed device the stamped monitor
|
|
130
|
+
* status is the operator's own system of record and beats everything; on a
|
|
131
|
+
* probe-polled one the poll's outcome does (the stamp is informational —
|
|
132
|
+
* see the input docs); then hard-down beats everything else, because a
|
|
133
|
+
* device that does not answer has interface counts that are by definition
|
|
134
|
+
* stale; then — and only for a device known to be up — dark ports make it
|
|
135
|
+
* degraded.
|
|
104
136
|
*
|
|
105
137
|
* Note what this means for a device stamped "Degraded": the ladder does not
|
|
106
138
|
* call it offline, so it is up, and it lands in "degraded" only if it also
|
|
@@ -119,9 +151,19 @@ export function deviceHealthState(
|
|
|
119
151
|
|
|
120
152
|
let isUp: boolean;
|
|
121
153
|
|
|
154
|
+
/*
|
|
155
|
+
* The stamp is read for a monitor-backed device and nothing else. The
|
|
156
|
+
* shared reachability rule below applies the same gate, so the two
|
|
157
|
+
* branches cannot be reached with different ideas of what kind of device
|
|
158
|
+
* this is.
|
|
159
|
+
*/
|
|
160
|
+
const isMonitorBacked: boolean =
|
|
161
|
+
NetworkDeviceMonitoringMethodUtil.isMonitorBacked(device.monitoringMethod);
|
|
162
|
+
|
|
122
163
|
if (
|
|
123
|
-
|
|
124
|
-
device.monitorStatusIsOffline ===
|
|
164
|
+
isMonitorBacked &&
|
|
165
|
+
(device.monitorStatusIsOffline === true ||
|
|
166
|
+
device.monitorStatusIsOffline === false)
|
|
125
167
|
) {
|
|
126
168
|
// Anything the ladder does not call OFFLINE is up. See the input docs.
|
|
127
169
|
isUp = !device.monitorStatusIsOffline;
|
|
@@ -133,6 +175,15 @@ export function deviceHealthState(
|
|
|
133
175
|
lastPolledAt: device.lastPolledAt,
|
|
134
176
|
lastSeenAt: device.lastSeenAt,
|
|
135
177
|
pollingIntervalInMinutes: device.pollingIntervalInMinutes,
|
|
178
|
+
/*
|
|
179
|
+
* Carried so the shared rule knows whether the poll columns above
|
|
180
|
+
* mean anything. A monitor-backed device only reaches this branch
|
|
181
|
+
* with NO stamped status (the one above took every stamped one),
|
|
182
|
+
* so for it this is exactly the "Pending" case — see the input
|
|
183
|
+
* docs. A probe-polled device always reaches it, stamp or no
|
|
184
|
+
* stamp, and is judged by its poll.
|
|
185
|
+
*/
|
|
186
|
+
monitoringMethod: device.monitoringMethod,
|
|
136
187
|
},
|
|
137
188
|
now,
|
|
138
189
|
);
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import OneUptimeDate from "../../Types/Date";
|
|
2
2
|
import { NetworkDeviceMonitoringMethodUtil } from "../../Types/NetworkDevice/NetworkDeviceMonitoringMethod";
|
|
3
|
+
import ObjectID from "../../Types/ObjectID";
|
|
3
4
|
|
|
4
5
|
/*
|
|
5
6
|
* The one place that decides whether a NetworkDevice is reachable.
|
|
@@ -21,13 +22,15 @@ import { NetworkDeviceMonitoringMethodUtil } from "../../Types/NetworkDevice/Net
|
|
|
21
22
|
* window.
|
|
22
23
|
*
|
|
23
24
|
* So reachability is now the OUTCOME of the most recent poll —
|
|
24
|
-
* NetworkDevice.isReachable, stamped by the
|
|
25
|
-
*
|
|
26
|
-
*
|
|
25
|
+
* NetworkDevice.isReachable, stamped by the poll pipeline on every ingested
|
|
26
|
+
* poll (a ping, plus the SNMP walk on a device that has credentials; the
|
|
27
|
+
* device is reachable when either answers) — and freshness is only a
|
|
28
|
+
* backstop for "the polling pipeline itself stopped", measured generously
|
|
29
|
+
* against the device's own interval.
|
|
27
30
|
*
|
|
28
31
|
* All of which is about a device that gets POLLED. A monitor-backed device
|
|
29
|
-
* (monitoringMethod "Monitor") is never polled at all: no probe, no
|
|
30
|
-
*
|
|
32
|
+
* (monitoringMethod "Monitor") is never polled at all: no probe, no ping,
|
|
33
|
+
* no walk. Every poll column on such a row is NULL forever, so
|
|
31
34
|
* the rule above can only ever answer "Pending" for it — which is
|
|
32
35
|
* OneUptime/oneuptime#3392, a correctly bound ping-only device stuck on
|
|
33
36
|
* Pending. Its health comes from the Monitor bound to it, stamped onto
|
|
@@ -69,12 +72,13 @@ export const DEVICE_MIN_STALE_WINDOW_IN_MINUTES: number = 60;
|
|
|
69
72
|
// The columns this util reads. Every caller selects exactly these.
|
|
70
73
|
export interface DeviceReachabilityInput {
|
|
71
74
|
/*
|
|
72
|
-
* Outcome of the most recent poll: true = the device answered,
|
|
73
|
-
*
|
|
74
|
-
*
|
|
75
|
+
* Outcome of the most recent poll: true = the device answered (ping, or
|
|
76
|
+
* the SNMP walk — either is enough), false = the probe could not reach it
|
|
77
|
+
* by any means, null/undefined = never polled, or a row written before
|
|
78
|
+
* this column existed.
|
|
75
79
|
*/
|
|
76
80
|
isReachable?: boolean | null | undefined;
|
|
77
|
-
// When the probe last ATTEMPTED a
|
|
81
|
+
// When the probe last ATTEMPTED a poll, whatever the outcome.
|
|
78
82
|
lastPolledAt?: Date | string | null | undefined;
|
|
79
83
|
// When the device last ANSWERED one.
|
|
80
84
|
lastSeenAt?: Date | string | null | undefined;
|
|
@@ -82,7 +86,7 @@ export interface DeviceReachabilityInput {
|
|
|
82
86
|
pollingIntervalInMinutes?: number | null | undefined;
|
|
83
87
|
/*
|
|
84
88
|
* How this device's health is established. NULL, empty and anything
|
|
85
|
-
* unrecognised read as
|
|
89
|
+
* unrecognised read as Probe — see NetworkDeviceMonitoringMethodUtil.parse,
|
|
86
90
|
* which is why an omitted value keeps every existing caller on the poll
|
|
87
91
|
* rule unchanged.
|
|
88
92
|
*/
|
|
@@ -102,6 +106,31 @@ export interface DeviceReachabilityInput {
|
|
|
102
106
|
* way for the same reason.
|
|
103
107
|
*/
|
|
104
108
|
monitorStatusIsOffline?: boolean | null | undefined;
|
|
109
|
+
|
|
110
|
+
/*
|
|
111
|
+
* QUALIFIER inputs. None of the four below moves the Up / Down / Pending
|
|
112
|
+
* verdict — the rule above is deliberately decided by `isReachable` alone,
|
|
113
|
+
* so the pill, the summary tiles and the Status chip (all SQL over that one
|
|
114
|
+
* column) can never disagree. They ride on the same input so a surface can
|
|
115
|
+
* hand its whole row over once and put the second, explanatory pill
|
|
116
|
+
* ("SNMP failing", "No probe") beside the verdict; see the predicates in
|
|
117
|
+
* the dashboard's DeviceStatusUtil.
|
|
118
|
+
*
|
|
119
|
+
* `isSnmpReachable`: the outcome of the last SNMP WALK, separate from the
|
|
120
|
+
* ping — false is a device that answers ping but not SNMP (credentials, or
|
|
121
|
+
* SNMP disabled on the box), NULL is "no walk was attempted": no usable
|
|
122
|
+
* credentials, or never polled.
|
|
123
|
+
*/
|
|
124
|
+
isSnmpReachable?: boolean | null | undefined;
|
|
125
|
+
// When the last SUCCESSFUL walk completed; only moves on a success.
|
|
126
|
+
lastSnmpSeenAt?: Date | string | null | undefined;
|
|
127
|
+
/*
|
|
128
|
+
* Which probe polls the device, and whether it is allowed to. A probe-polled
|
|
129
|
+
* device with no probe, or with polling switched off, can never be polled
|
|
130
|
+
* and is Pending for as long as that stays true.
|
|
131
|
+
*/
|
|
132
|
+
probeId?: ObjectID | string | null | undefined;
|
|
133
|
+
isPollingEnabled?: boolean | null | undefined;
|
|
105
134
|
}
|
|
106
135
|
|
|
107
136
|
export interface DeviceReachabilityResult {
|
|
@@ -119,10 +148,10 @@ export interface DeviceReachabilityResult {
|
|
|
119
148
|
// Latest of lastPolledAt / lastSeenAt; null when neither is set.
|
|
120
149
|
lastContactAt: Date | null;
|
|
121
150
|
/*
|
|
122
|
-
* True when this verdict came from the bound Monitor rather than from
|
|
123
|
-
*
|
|
124
|
-
* what actually decided the answer — "the last
|
|
125
|
-
*
|
|
151
|
+
* True when this verdict came from the bound Monitor rather than from a
|
|
152
|
+
* probe's poll. Carried so a surface can word its pill and its tooltip for
|
|
153
|
+
* what actually decided the answer — "the last poll reached this device"
|
|
154
|
+
* is a lie on a device nothing polls.
|
|
126
155
|
*/
|
|
127
156
|
isMonitorBacked: boolean;
|
|
128
157
|
}
|
|
@@ -0,0 +1,247 @@
|
|
|
1
|
+
import MonitorTemplate from "../../Models/DatabaseModels/MonitorTemplate";
|
|
2
|
+
import NetworkAlertPolicy from "../../Models/DatabaseModels/NetworkAlertPolicy";
|
|
3
|
+
import { CriteriaAlert } from "../../Types/Monitor/CriteriaAlert";
|
|
4
|
+
import { CriteriaIncident } from "../../Types/Monitor/CriteriaIncident";
|
|
5
|
+
import MonitorCriteria from "../../Types/Monitor/MonitorCriteria";
|
|
6
|
+
import MonitorCriteriaInstance from "../../Types/Monitor/MonitorCriteriaInstance";
|
|
7
|
+
import MonitorStep from "../../Types/Monitor/MonitorStep";
|
|
8
|
+
import { MonitorStepNetworkDeviceMonitorUtil } from "../../Types/Monitor/MonitorStepNetworkDeviceMonitor";
|
|
9
|
+
import MonitorSteps from "../../Types/Monitor/MonitorSteps";
|
|
10
|
+
import MonitorType from "../../Types/Monitor/MonitorType";
|
|
11
|
+
import NetworkDeviceAlertPackUtil from "../../Types/Monitor/SnmpMonitor/NetworkDeviceAlertPack";
|
|
12
|
+
import { NetworkAlertPolicyScopeUtil } from "../../Types/NetworkDevice/NetworkAlertPolicyScope";
|
|
13
|
+
import ObjectID from "../../Types/ObjectID";
|
|
14
|
+
|
|
15
|
+
/*
|
|
16
|
+
* The "one click to alerting" path for network devices.
|
|
17
|
+
*
|
|
18
|
+
* An alert policy is only useful once it has a Network Device monitor
|
|
19
|
+
* template to clone, and building one by hand means walking the monitor
|
|
20
|
+
* template form: pick the type, add a step, add five criteria, fill in a
|
|
21
|
+
* severity and a status on each. Most operators want exactly the Recommended
|
|
22
|
+
* Alert Pack (NetworkDeviceAlertPack) on every device, so this util builds
|
|
23
|
+
* that template and the policy that applies it to the whole project, and the
|
|
24
|
+
* settings page find-or-creates the pair from its empty state.
|
|
25
|
+
*
|
|
26
|
+
* FIND-OR-CREATE BY MARKER. The template carries RECOMMENDED_TEMPLATE_MARKER
|
|
27
|
+
* in its description. The name is what an operator renames; the marker is
|
|
28
|
+
* what the bootstrap looks for, so clicking "create the recommended policy"
|
|
29
|
+
* twice — or after the recommended policy was deleted and its template kept
|
|
30
|
+
* — reuses the template instead of minting a second one, and instead of
|
|
31
|
+
* tripping the policy service's "another policy already uses this template"
|
|
32
|
+
* refusal on a duplicate nobody meant to make.
|
|
33
|
+
*
|
|
34
|
+
* WHY THE ITEMS ARE FILLED IN HERE. NetworkDeviceAlertPackUtil deliberately
|
|
35
|
+
* leaves severities and on-call policies for the user to complete on the
|
|
36
|
+
* monitor form. A policy's monitors are never opened in that form — the
|
|
37
|
+
* engine clones them — so a criteria whose `createIncidents` is on but whose
|
|
38
|
+
* `incidents` list is empty would clone into monitors that fire nothing.
|
|
39
|
+
* Every incident-creating item therefore gets one CriteriaIncident and every
|
|
40
|
+
* alert-creating item one CriteriaAlert, both auto-resolving, at the
|
|
41
|
+
* project's lowest-order severity (PingMonitorSeedIds resolves that).
|
|
42
|
+
*
|
|
43
|
+
* NO DEVICE ON THE TEMPLATE STEP. A Network Device step names the device it
|
|
44
|
+
* watches; a template step is a placeholder the engine rebinds per device
|
|
45
|
+
* (NetworkDeviceMonitorTemplateUtil.rebindMonitorSteps), which requires the
|
|
46
|
+
* `networkDeviceMonitor` block to exist and ignores what id it holds. The
|
|
47
|
+
* step is built with the block present and the id unset, which the
|
|
48
|
+
* template's reference validator skips rather than rejects.
|
|
49
|
+
*
|
|
50
|
+
* Pure: no database, no permissions. The caller persists both rows through
|
|
51
|
+
* ModelAPI / the services so tenancy, billing and the policy engine's hooks
|
|
52
|
+
* all run.
|
|
53
|
+
*/
|
|
54
|
+
|
|
55
|
+
export const RECOMMENDED_TEMPLATE_MARKER: string =
|
|
56
|
+
"[oneuptime:network-alert-pack:v1]";
|
|
57
|
+
|
|
58
|
+
export const RECOMMENDED_TEMPLATE_NAME: string =
|
|
59
|
+
"Network device alert pack (recommended)";
|
|
60
|
+
|
|
61
|
+
export const RECOMMENDED_POLICY_NAME: string = "Alert on every device";
|
|
62
|
+
|
|
63
|
+
export interface RecommendedMonitorTemplateSeedIds {
|
|
64
|
+
projectId: ObjectID;
|
|
65
|
+
incidentSeverityId: ObjectID;
|
|
66
|
+
alertSeverityId: ObjectID;
|
|
67
|
+
onlineMonitorStatusId: ObjectID;
|
|
68
|
+
offlineMonitorStatusId: ObjectID;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
export interface RecommendedPolicySeedIds {
|
|
72
|
+
projectId: ObjectID;
|
|
73
|
+
monitorTemplateId: ObjectID;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
/*
|
|
77
|
+
* The slice of a MonitorTemplate the marker check reads. Kept to one
|
|
78
|
+
* optional field so a caller that listed templates with a narrow `select`
|
|
79
|
+
* can still ask.
|
|
80
|
+
*/
|
|
81
|
+
export interface RecommendedTemplateCandidate {
|
|
82
|
+
templateDescription?: string | undefined;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
export default class NetworkAlertPolicyBootstrapUtil {
|
|
86
|
+
/**
|
|
87
|
+
* The template every device's monitor is cloned from: a Network Device
|
|
88
|
+
* template whose single step carries the Recommended Alert Pack, with an
|
|
89
|
+
* incident or an alert filled in on every item.
|
|
90
|
+
*/
|
|
91
|
+
public static buildRecommendedMonitorTemplate(
|
|
92
|
+
data: RecommendedMonitorTemplateSeedIds,
|
|
93
|
+
): MonitorTemplate {
|
|
94
|
+
const criteriaInstances: Array<MonitorCriteriaInstance> =
|
|
95
|
+
NetworkDeviceAlertPackUtil.buildCriteriaInstances({
|
|
96
|
+
downMonitorStatusId: data.offlineMonitorStatusId,
|
|
97
|
+
});
|
|
98
|
+
|
|
99
|
+
for (const criteriaInstance of criteriaInstances) {
|
|
100
|
+
NetworkAlertPolicyBootstrapUtil.fillCriteriaActions({
|
|
101
|
+
criteriaInstance: criteriaInstance,
|
|
102
|
+
incidentSeverityId: data.incidentSeverityId,
|
|
103
|
+
alertSeverityId: data.alertSeverityId,
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
const monitorCriteria: MonitorCriteria = new MonitorCriteria();
|
|
108
|
+
monitorCriteria.data = {
|
|
109
|
+
monitorCriteriaInstanceArray: criteriaInstances,
|
|
110
|
+
};
|
|
111
|
+
|
|
112
|
+
const monitorStep: MonitorStep = new MonitorStep();
|
|
113
|
+
monitorStep.data!.networkDeviceMonitor =
|
|
114
|
+
MonitorStepNetworkDeviceMonitorUtil.getDefault();
|
|
115
|
+
monitorStep.data!.monitorCriteria = monitorCriteria;
|
|
116
|
+
|
|
117
|
+
const monitorSteps: MonitorSteps = new MonitorSteps();
|
|
118
|
+
monitorSteps.data = {
|
|
119
|
+
monitorStepsInstanceArray: [monitorStep],
|
|
120
|
+
/*
|
|
121
|
+
* Where the monitor goes when no pack item matches — the device is
|
|
122
|
+
* reachable, its walk succeeds, its interfaces are up. Without this a
|
|
123
|
+
* monitor that once went Offline would never come back.
|
|
124
|
+
*/
|
|
125
|
+
defaultMonitorStatusId: new ObjectID(
|
|
126
|
+
data.onlineMonitorStatusId.toString(),
|
|
127
|
+
),
|
|
128
|
+
};
|
|
129
|
+
|
|
130
|
+
const template: MonitorTemplate = new MonitorTemplate();
|
|
131
|
+
template.projectId = new ObjectID(data.projectId.toString());
|
|
132
|
+
template.templateName = RECOMMENDED_TEMPLATE_NAME;
|
|
133
|
+
template.templateDescription =
|
|
134
|
+
NetworkAlertPolicyBootstrapUtil.buildRecommendedTemplateDescription();
|
|
135
|
+
template.monitorType = MonitorType.NetworkDevice;
|
|
136
|
+
template.monitorSteps = monitorSteps;
|
|
137
|
+
/*
|
|
138
|
+
* Left blank on purpose: a policy's monitors are named after the device
|
|
139
|
+
* alone, and a default monitor name would become a suffix on every one
|
|
140
|
+
* of them (the auto-import precedent, issue #3486).
|
|
141
|
+
*/
|
|
142
|
+
template.monitorDescription =
|
|
143
|
+
"Provisioned by a Network Alert Policy. Edit the policy's template to change what this monitor alerts on; it is re-synced from the template, so edits made here are overwritten.";
|
|
144
|
+
|
|
145
|
+
return template;
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
/**
|
|
149
|
+
* The policy that applies the template to every device in the project.
|
|
150
|
+
* Unscoped on purpose — that is what "recommended" means here, and the
|
|
151
|
+
* settings table says "All devices" against it so nobody misreads the
|
|
152
|
+
* reach.
|
|
153
|
+
*/
|
|
154
|
+
public static buildRecommendedPolicy(
|
|
155
|
+
data: RecommendedPolicySeedIds,
|
|
156
|
+
): NetworkAlertPolicy {
|
|
157
|
+
const policy: NetworkAlertPolicy = new NetworkAlertPolicy();
|
|
158
|
+
policy.projectId = new ObjectID(data.projectId.toString());
|
|
159
|
+
policy.name = RECOMMENDED_POLICY_NAME;
|
|
160
|
+
policy.description =
|
|
161
|
+
"Every probe-polled device in the project gets a Network Device monitor cloned from the recommended alert pack: an incident when it stops answering ping and SNMP or an interface goes down, and an alert when its SNMP walk fails, an interface saturates or an interface logs errors. A device with no SNMP credentials is pinged rather than walked, so only the reachability item can fire on it until credentials are set. Narrow the scope to sites, roles or labels to cover fewer devices.";
|
|
162
|
+
policy.isEnabled = true;
|
|
163
|
+
policy.monitorTemplateId = new ObjectID(data.monitorTemplateId.toString());
|
|
164
|
+
policy.scope = NetworkAlertPolicyScopeUtil.normalize({});
|
|
165
|
+
|
|
166
|
+
return policy;
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
/** Whether a template is the one this util minted, by its marker. */
|
|
170
|
+
public static isRecommendedTemplate(
|
|
171
|
+
template: RecommendedTemplateCandidate | null | undefined,
|
|
172
|
+
): boolean {
|
|
173
|
+
return (template?.templateDescription || "").includes(
|
|
174
|
+
RECOMMENDED_TEMPLATE_MARKER,
|
|
175
|
+
);
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
/**
|
|
179
|
+
* The recommended template among a project's templates, or null. The
|
|
180
|
+
* first marked one wins so a project that somehow holds two keeps reusing
|
|
181
|
+
* the same one rather than alternating.
|
|
182
|
+
*/
|
|
183
|
+
public static findRecommendedTemplate<
|
|
184
|
+
TTemplate extends RecommendedTemplateCandidate,
|
|
185
|
+
>(templates: Array<TTemplate>): TTemplate | null {
|
|
186
|
+
for (const template of templates) {
|
|
187
|
+
if (NetworkAlertPolicyBootstrapUtil.isRecommendedTemplate(template)) {
|
|
188
|
+
return template;
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
return null;
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
/**
|
|
196
|
+
* The description the marker lives in. The marker is on its own line at
|
|
197
|
+
* the end so an operator can rewrite the prose above it without losing
|
|
198
|
+
* the tag that makes the template findable.
|
|
199
|
+
*/
|
|
200
|
+
public static buildRecommendedTemplateDescription(): string {
|
|
201
|
+
return `The Recommended Alert Pack for network devices: an incident when a device stops answering ping and SNMP or an interface goes down, an alert when the SNMP walk fails, an interface runs above 80% utilization or an interface logs errors. Created by the "Create the recommended policy" action under Network > Settings > Alert Policies; edit the criteria here and every monitor the policy provisions follows. Keep the marker below so the action can find this template again.\n\n${RECOMMENDED_TEMPLATE_MARKER}`;
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
/*
|
|
205
|
+
* One CriteriaIncident on an incident-creating item, one CriteriaAlert on
|
|
206
|
+
* an alert-creating one, titled after the pack item so the incident an
|
|
207
|
+
* operator is paged with reads "Device unreachable", not "Criteria 1".
|
|
208
|
+
*/
|
|
209
|
+
private static fillCriteriaActions(data: {
|
|
210
|
+
criteriaInstance: MonitorCriteriaInstance;
|
|
211
|
+
incidentSeverityId: ObjectID;
|
|
212
|
+
alertSeverityId: ObjectID;
|
|
213
|
+
}): void {
|
|
214
|
+
const criteriaData: MonitorCriteriaInstance["data"] =
|
|
215
|
+
data.criteriaInstance.data;
|
|
216
|
+
|
|
217
|
+
if (!criteriaData) {
|
|
218
|
+
return;
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
if (criteriaData.createIncidents) {
|
|
222
|
+
const incident: CriteriaIncident = {
|
|
223
|
+
id: ObjectID.generate().toString(),
|
|
224
|
+
title: criteriaData.name,
|
|
225
|
+
description: criteriaData.description,
|
|
226
|
+
incidentSeverityId: new ObjectID(data.incidentSeverityId.toString()),
|
|
227
|
+
autoResolveIncident: true,
|
|
228
|
+
onCallPolicyIds: [],
|
|
229
|
+
};
|
|
230
|
+
|
|
231
|
+
criteriaData.incidents = [incident];
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
if (criteriaData.createAlerts) {
|
|
235
|
+
const alert: CriteriaAlert = {
|
|
236
|
+
id: ObjectID.generate().toString(),
|
|
237
|
+
title: criteriaData.name,
|
|
238
|
+
description: criteriaData.description,
|
|
239
|
+
alertSeverityId: new ObjectID(data.alertSeverityId.toString()),
|
|
240
|
+
autoResolveAlert: true,
|
|
241
|
+
onCallPolicyIds: [],
|
|
242
|
+
};
|
|
243
|
+
|
|
244
|
+
criteriaData.alerts = [alert];
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { SnmpVersionUtil } from "../../Types/Monitor/SnmpMonitor/SnmpVersion";
|
|
2
|
+
|
|
3
|
+
/*
|
|
4
|
+
* "Does this row carry enough to open an SNMP session with?"
|
|
5
|
+
*
|
|
6
|
+
* The question is asked of three different rows in turn at poll time - the
|
|
7
|
+
* device's own snmp* columns, the profile the device points at, and the
|
|
8
|
+
* profile the device's site points at - and the first row that answers yes is
|
|
9
|
+
* the one the device is walked with. A device with no usable set anywhere is
|
|
10
|
+
* pinged and never walked. So this function is the resolution order's
|
|
11
|
+
* predicate, and it is deliberately shaped to accept ANY object carrying the
|
|
12
|
+
* three fields it reads rather than a NetworkDevice or a
|
|
13
|
+
* NetworkSnmpCredentialProfile specifically: the caller hands it whichever
|
|
14
|
+
* row it is looking at and gets the same answer for each.
|
|
15
|
+
*
|
|
16
|
+
* "Usable" is the minimum an SNMP session needs to be attempted, not a
|
|
17
|
+
* guarantee it will succeed:
|
|
18
|
+
*
|
|
19
|
+
* - v1 / v2c: a non-empty community string. There is nothing else to send.
|
|
20
|
+
* - v3: a non-empty security name (username). Auth and privacy keys are
|
|
21
|
+
* legitimately absent at noAuthNoPriv, so their absence must not make a
|
|
22
|
+
* v3 row unusable; a wrong key at a higher level is the device's error to
|
|
23
|
+
* report, not this function's to predict.
|
|
24
|
+
*
|
|
25
|
+
* Whitespace-only values count as empty. A community string of " " is what
|
|
26
|
+
* a form submits when an operator clears the field without the browser
|
|
27
|
+
* sending null, and it is not a credential anything will accept.
|
|
28
|
+
*
|
|
29
|
+
* The version is read through SnmpVersionUtil.parse, never compared as raw
|
|
30
|
+
* text, for the reason that module documents: the stored spelling is "V3"
|
|
31
|
+
* and the enum's is "3", and a raw comparison sends a v3 row down the v2c
|
|
32
|
+
* branch. parse() treats a missing or unrecognised version as v2c, which is
|
|
33
|
+
* also the column default on both the device and the profile - so a row with
|
|
34
|
+
* a community string and no version at all is usable, exactly as it would be
|
|
35
|
+
* polled.
|
|
36
|
+
*/
|
|
37
|
+
|
|
38
|
+
/*
|
|
39
|
+
* `| undefined` is spelled out on each field because the repo compiles with
|
|
40
|
+
* exactOptionalPropertyTypes: a caller building the carrier from a row it
|
|
41
|
+
* only partially selected (`{ snmpVersion: row.snmpVersion }`) hands over an
|
|
42
|
+
* explicit undefined, and that must type-check as readily as an omitted key.
|
|
43
|
+
*/
|
|
44
|
+
export interface SnmpCredentialCarrier {
|
|
45
|
+
snmpVersion?: string | null | undefined;
|
|
46
|
+
snmpCommunityString?: string | null | undefined;
|
|
47
|
+
snmpV3Username?: string | null | undefined;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
export type HasUsableCredentialsFunction = (
|
|
51
|
+
carrier: SnmpCredentialCarrier,
|
|
52
|
+
) => boolean;
|
|
53
|
+
|
|
54
|
+
function isNonEmpty(value: string | null | undefined): boolean {
|
|
55
|
+
return typeof value === "string" && value.trim().length > 0;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
export const hasUsableCredentials: HasUsableCredentialsFunction = (
|
|
59
|
+
carrier: SnmpCredentialCarrier,
|
|
60
|
+
): boolean => {
|
|
61
|
+
if (SnmpVersionUtil.isV3(carrier.snmpVersion)) {
|
|
62
|
+
return isNonEmpty(carrier.snmpV3Username);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
return isNonEmpty(carrier.snmpCommunityString);
|
|
66
|
+
};
|
|
67
|
+
|
|
68
|
+
export default hasUsableCredentials;
|
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
import { DiscoveredNetworkDevice } from "../../Models/DatabaseModels/NetworkDeviceDiscoveryScan";
|
|
2
|
-
import NetworkDeviceMonitoringMethod from "../../Types/NetworkDevice/NetworkDeviceMonitoringMethod";
|
|
3
2
|
import ObjectID from "../../Types/ObjectID";
|
|
4
3
|
import CidrMatchUtil from "../NetworkSite/CidrMatchUtil";
|
|
5
4
|
import RulePatternMatchUtil from "../Rules/RulePatternMatchUtil";
|
|
6
|
-
import {
|
|
5
|
+
import { isPingOnlyDiscoveredHost } from "./DiscoveryImportEligibility";
|
|
7
6
|
import ScanTargetUtil from "./ScanTargetUtil";
|
|
8
7
|
|
|
9
8
|
/*
|
|
@@ -134,12 +133,21 @@ export function matchesOidPattern(
|
|
|
134
133
|
}
|
|
135
134
|
|
|
136
135
|
export class AutoImportRuleMatcher {
|
|
137
|
-
|
|
136
|
+
/*
|
|
137
|
+
* True when the host answered ping but not SNMP.
|
|
138
|
+
*
|
|
139
|
+
* Asked of the host's own SNMP answer (`isPingOnlyDiscoveredHost`), NOT of
|
|
140
|
+
* the method it would import under. Under ping-first polling EVERY
|
|
141
|
+
* discovered host imports as a Probe device, so
|
|
142
|
+
* `monitoringMethodForDiscoveredHost` is a constant — routing this gate
|
|
143
|
+
* through it made `isPingOnlyHost` permanently false and silently opened
|
|
144
|
+
* the default-closed gate below: one SNMP credential typo would have
|
|
145
|
+
* imported a whole subnet of half-identified hosts through rules that never
|
|
146
|
+
* opted in. How a host is MONITORED and what it ANSWERED are two different
|
|
147
|
+
* questions now, and this one is the second.
|
|
148
|
+
*/
|
|
138
149
|
private static isPingOnlyHost(host: DiscoveredNetworkDevice): boolean {
|
|
139
|
-
return (
|
|
140
|
-
monitoringMethodForDiscoveredHost(host) ===
|
|
141
|
-
NetworkDeviceMonitoringMethod.Monitor
|
|
142
|
-
);
|
|
150
|
+
return isPingOnlyDiscoveredHost(host);
|
|
143
151
|
}
|
|
144
152
|
|
|
145
153
|
/*
|