@oneuptime/common 12.0.31 → 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/AlertState.ts +0 -2
- package/Models/DatabaseModels/Domain.ts +1 -1
- package/Models/DatabaseModels/EnterpriseLicense.ts +56 -0
- package/Models/DatabaseModels/Incident.ts +1 -1
- package/Models/DatabaseModels/IncidentTemplate.ts +1 -1
- package/Models/DatabaseModels/Index.ts +12 -0
- package/Models/DatabaseModels/MetricType.ts +0 -2
- package/Models/DatabaseModels/Monitor.ts +76 -0
- package/Models/DatabaseModels/MonitorStatusTimeline.ts +0 -2
- package/Models/DatabaseModels/MonitorTest.ts +0 -2
- package/Models/DatabaseModels/NetworkAlertPolicy.ts +690 -0
- package/Models/DatabaseModels/NetworkDevice.ts +297 -3
- package/Models/DatabaseModels/NetworkDeviceOidTemplate.ts +3 -1
- package/Models/DatabaseModels/NetworkDeviceRole.ts +648 -0
- package/Models/DatabaseModels/NetworkSite.ts +201 -2
- package/Models/DatabaseModels/NetworkSiteType.ts +102 -3
- package/Models/DatabaseModels/NetworkSnmpCredentialProfile.ts +841 -0
- package/Models/DatabaseModels/ScheduledMaintenance.ts +1 -1
- package/Models/DatabaseModels/ScheduledMaintenanceTemplate.ts +1 -1
- package/Models/DatabaseModels/StatusPageAnnouncement.ts +0 -2
- package/Models/DatabaseModels/StatusPageAnnouncementTemplate.ts +0 -2
- package/Models/DatabaseModels/StatusPagePrivateUser.ts +0 -2
- package/Models/DatabaseModels/StatusPageResource.ts +0 -2
- package/Models/DatabaseModels/StatusPageSubscriber.ts +0 -2
- 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/1790800000000-AddNetworkDeviceRoleTable.ts +72 -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 +14 -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/DatabaseService.ts +39 -9
- package/Server/Services/EnterpriseLicenseInstanceService.ts +197 -0
- package/Server/Services/EnterpriseLicenseService.ts +55 -0
- package/Server/Services/Index.ts +12 -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/NetworkDeviceRoleService.ts +90 -0
- 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 +186 -44
- 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 -31
- 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 +158 -27
- package/Tests/App/Dashboard/AskAiSuggestedPrompts.test.ts +279 -0
- package/Tests/App/Dashboard/DashboardChartWidgetZoom.test.tsx +35 -8
- package/Tests/App/Dashboard/DashboardCommandPalette.test.tsx +107 -3
- package/Tests/App/Dashboard/DashboardEditPermissions.test.tsx +517 -0
- package/Tests/App/Dashboard/DashboardVariablesDiscard.test.tsx +26 -0
- package/Tests/App/Dashboard/DashboardWideChartZoom.test.tsx +401 -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/MonitorTemplateColumnAndFacet.test.tsx +318 -0
- package/Tests/App/Dashboard/MonitorTypePicker.test.tsx +4 -2
- package/Tests/App/Dashboard/NetworkDeviceBulkDelete.test.tsx +357 -0
- 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 +626 -0
- 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/SideMenuHarness.tsx +11 -3
- 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/DatabaseModels/ModelRegistryInvariants.test.ts +115 -41
- 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/NetworkDeviceRoleTableMigration.test.ts +476 -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/DatabaseServiceGenerateSlug.test.ts +215 -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/NetworkDeviceRoleModel.test.ts +672 -0
- package/Tests/Server/Services/NetworkDeviceRuleEngines.test.ts +1 -1
- 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/ProjectServiceCreateSubscriptionStarted.test.ts +67 -4
- package/Tests/Server/Services/ProjectServiceNetworkSiteTypeDefaults.test.ts +214 -0
- package/Tests/Server/Services/ScheduledMaintenanceSubscriberEndTime.test.ts +369 -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/UserNotificationSettingMonitorDefaults.test.ts +248 -0
- package/Tests/Server/Services/UserNotificationSettingRollupRouting.test.ts +856 -0
- package/Tests/Server/Services/UserNotificationSettingWorkspaceChannels.test.ts +145 -3
- 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/BasicCron.test.ts +283 -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/IncomingCallPhoneNumber.test.ts +174 -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/DefaultNetworkDeviceRole.test.ts +417 -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/Charts/ChartClickDoubleClickDisambiguation.test.tsx +221 -0
- package/Tests/UI/Components/Charts/ChartDoubleClickReset.test.tsx +220 -0
- package/Tests/UI/Components/ModelTable/BaseModelTableBulkDelete.test.tsx +751 -0
- package/Tests/UI/Components/ModelTable/BaseModelTableColumnCustomization.test.tsx +475 -43
- package/Tests/UI/Components/ModelTable/ColumnPreference.test.ts +89 -0
- package/Tests/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.test.ts +15 -0
- package/Tests/UI/Components/NavBarCommandKGating.test.tsx +103 -8
- package/Tests/UI/Components/ProgressBar.test.tsx +38 -2
- package/Tests/UI/Components/SideMenuItem.test.tsx +256 -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/UI/Utils/TableColumnsToCsv.test.ts +30 -0
- package/Tests/UI/Utils/UseDashboardTimeRangeZoom.test.tsx +187 -0
- package/Tests/Utils/Dashboard/DashboardResourceListSharedArgs.test.ts +302 -0
- package/Tests/Utils/Dashboard/DashboardTimeRangeZoom.test.ts +242 -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/NetworkDeviceRoleCatalog.test.ts +981 -0
- package/Tests/Utils/Monitor/NetworkTopologyRoleCatalog.test.ts +865 -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/DeviceRoleKeyUtil.test.ts +538 -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/Slo/SloEvaluation.test.ts +171 -0
- package/Tests/Utils/Slug.test.ts +61 -1
- package/Tests/Utils/Telemetry/CaptureSpanExportGating.test.ts +145 -0
- package/Tests/jest.setup.ts +19 -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/SnmpMonitor/NetworkTopology.ts +61 -0
- package/Types/Monitor/SqlConnectionConfig.ts +31 -0
- package/Types/NetworkDevice/DefaultNetworkDeviceRole.ts +145 -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 +135 -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/Charts/Area/AreaChart.tsx +7 -0
- package/UI/Components/Charts/Bar/BarChart.tsx +6 -0
- package/UI/Components/Charts/ChartGroup/ChartGroup.tsx +9 -1
- package/UI/Components/Charts/ChartLibrary/AreaChart/AreaChart.tsx +97 -35
- package/UI/Components/Charts/ChartLibrary/BarChart/BarChart.tsx +14 -0
- package/UI/Components/Charts/ChartLibrary/LineChart/LineChart.tsx +97 -35
- package/UI/Components/Charts/ChartLibrary/Utils/DoubleClick.ts +13 -0
- package/UI/Components/Charts/Line/LineChart.tsx +7 -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/ModelTable/BaseModelTable.tsx +50 -15
- package/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.ts +44 -0
- package/UI/Components/Navbar/NavBar.tsx +62 -13
- package/UI/Components/Navbar/NavBarMenuModal.tsx +7 -2
- package/UI/Components/ProgressBar/ProgressBar.tsx +12 -1
- package/UI/Components/RadioButtons/BasicRadioButtons.tsx +37 -7
- package/UI/Components/SideMenu/CountModelSideMenuItem.tsx +2 -0
- package/UI/Components/SideMenu/SideMenu.tsx +135 -7
- package/UI/Components/SideMenu/SideMenuItem.tsx +80 -85
- package/UI/Components/SideMenu/SideMenuSection.tsx +69 -25
- 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/UI/Utils/UseDashboardTimeRangeZoom.ts +77 -0
- package/Utils/Dashboard/DashboardTimeRangeZoom.ts +118 -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/NetworkDeviceRoleCatalog.ts +232 -0
- package/Utils/Monitor/NetworkDeviceRoleUtil.ts +2 -1
- package/Utils/Monitor/NetworkTopologyUtil.ts +139 -36
- package/Utils/NetworkDevice/DeviceHealthStateUtil.ts +65 -14
- package/Utils/NetworkDevice/DeviceReachabilityUtil.ts +43 -14
- package/Utils/NetworkDevice/DeviceRoleKeyUtil.ts +137 -0
- 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/Utils/Rules/RulePatternMatchUtil.ts +1 -1
- package/Utils/Slug.ts +34 -1
- package/build/dist/Models/AnalyticsModels/Span.js +14 -0
- package/build/dist/Models/AnalyticsModels/Span.js.map +1 -1
- package/build/dist/Models/DatabaseModels/AlertState.js +0 -2
- package/build/dist/Models/DatabaseModels/AlertState.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Domain.js +1 -1
- package/build/dist/Models/DatabaseModels/Domain.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/Incident.js +1 -1
- package/build/dist/Models/DatabaseModels/Incident.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncidentTemplate.js +1 -1
- package/build/dist/Models/DatabaseModels/IncidentTemplate.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Index.js +12 -0
- package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
- package/build/dist/Models/DatabaseModels/MetricType.js +0 -2
- package/build/dist/Models/DatabaseModels/MetricType.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/MonitorStatusTimeline.js +0 -2
- package/build/dist/Models/DatabaseModels/MonitorStatusTimeline.js.map +1 -1
- package/build/dist/Models/DatabaseModels/MonitorTest.js +0 -2
- package/build/dist/Models/DatabaseModels/MonitorTest.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 +304 -4
- package/build/dist/Models/DatabaseModels/NetworkDevice.js.map +1 -1
- package/build/dist/Models/DatabaseModels/NetworkDeviceOidTemplate.js +3 -1
- package/build/dist/Models/DatabaseModels/NetworkDeviceOidTemplate.js.map +1 -1
- package/build/dist/Models/DatabaseModels/NetworkDeviceRole.js +677 -0
- package/build/dist/Models/DatabaseModels/NetworkDeviceRole.js.map +1 -0
- 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/ScheduledMaintenance.js +1 -1
- package/build/dist/Models/DatabaseModels/ScheduledMaintenance.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ScheduledMaintenanceTemplate.js +1 -1
- package/build/dist/Models/DatabaseModels/ScheduledMaintenanceTemplate.js.map +1 -1
- package/build/dist/Models/DatabaseModels/StatusPageAnnouncement.js +0 -2
- package/build/dist/Models/DatabaseModels/StatusPageAnnouncement.js.map +1 -1
- package/build/dist/Models/DatabaseModels/StatusPageAnnouncementTemplate.js +0 -2
- package/build/dist/Models/DatabaseModels/StatusPageAnnouncementTemplate.js.map +1 -1
- package/build/dist/Models/DatabaseModels/StatusPagePrivateUser.js +0 -2
- package/build/dist/Models/DatabaseModels/StatusPagePrivateUser.js.map +1 -1
- package/build/dist/Models/DatabaseModels/StatusPageResource.js +0 -2
- package/build/dist/Models/DatabaseModels/StatusPageResource.js.map +1 -1
- package/build/dist/Models/DatabaseModels/StatusPageSubscriber.js +0 -2
- package/build/dist/Models/DatabaseModels/StatusPageSubscriber.js.map +1 -1
- 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/1790800000000-AddNetworkDeviceRoleTable.js +39 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790800000000-AddNetworkDeviceRoleTable.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 +14 -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/DatabaseService.js +31 -5
- package/build/dist/Server/Services/DatabaseService.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 +12 -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/NetworkDeviceRoleService.js +70 -0
- package/build/dist/Server/Services/NetworkDeviceRoleService.js.map +1 -0
- 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 +131 -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 -21
- 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/DefaultNetworkDeviceRole.js +105 -0
- package/build/dist/Types/NetworkDevice/DefaultNetworkDeviceRole.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 +120 -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/Charts/Area/AreaChart.js +1 -1
- package/build/dist/UI/Components/Charts/Area/AreaChart.js.map +1 -1
- package/build/dist/UI/Components/Charts/Bar/BarChart.js +1 -1
- package/build/dist/UI/Components/Charts/Bar/BarChart.js.map +1 -1
- package/build/dist/UI/Components/Charts/ChartGroup/ChartGroup.js +6 -1
- package/build/dist/UI/Components/Charts/ChartGroup/ChartGroup.js.map +1 -1
- package/build/dist/UI/Components/Charts/ChartLibrary/AreaChart/AreaChart.js +79 -31
- package/build/dist/UI/Components/Charts/ChartLibrary/AreaChart/AreaChart.js.map +1 -1
- package/build/dist/UI/Components/Charts/ChartLibrary/BarChart/BarChart.js +7 -1
- package/build/dist/UI/Components/Charts/ChartLibrary/BarChart/BarChart.js.map +1 -1
- package/build/dist/UI/Components/Charts/ChartLibrary/LineChart/LineChart.js +79 -31
- package/build/dist/UI/Components/Charts/ChartLibrary/LineChart/LineChart.js.map +1 -1
- package/build/dist/UI/Components/Charts/ChartLibrary/Utils/DoubleClick.js +14 -0
- package/build/dist/UI/Components/Charts/ChartLibrary/Utils/DoubleClick.js.map +1 -0
- package/build/dist/UI/Components/Charts/Line/LineChart.js +1 -1
- package/build/dist/UI/Components/Charts/Line/LineChart.js.map +1 -1
- 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/ModelTable/BaseModelTable.js +39 -13
- package/build/dist/UI/Components/ModelTable/BaseModelTable.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/Navbar/NavBar.js +44 -9
- package/build/dist/UI/Components/Navbar/NavBar.js.map +1 -1
- package/build/dist/UI/Components/Navbar/NavBarMenuModal.js +2 -2
- package/build/dist/UI/Components/Navbar/NavBarMenuModal.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/CountModelSideMenuItem.js +1 -1
- package/build/dist/UI/Components/SideMenu/CountModelSideMenuItem.js.map +1 -1
- package/build/dist/UI/Components/SideMenu/SideMenu.js +76 -11
- package/build/dist/UI/Components/SideMenu/SideMenu.js.map +1 -1
- package/build/dist/UI/Components/SideMenu/SideMenuItem.js +50 -54
- package/build/dist/UI/Components/SideMenu/SideMenuItem.js.map +1 -1
- package/build/dist/UI/Components/SideMenu/SideMenuSection.js +32 -9
- 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/UI/Utils/UseDashboardTimeRangeZoom.js +42 -0
- package/build/dist/UI/Utils/UseDashboardTimeRangeZoom.js.map +1 -0
- package/build/dist/Utils/Dashboard/DashboardTimeRangeZoom.js +74 -0
- package/build/dist/Utils/Dashboard/DashboardTimeRangeZoom.js.map +1 -0
- 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/NetworkDeviceRoleCatalog.js +126 -0
- package/build/dist/Utils/Monitor/NetworkDeviceRoleCatalog.js.map +1 -0
- package/build/dist/Utils/Monitor/NetworkDeviceRoleUtil.js +2 -1
- package/build/dist/Utils/Monitor/NetworkDeviceRoleUtil.js.map +1 -1
- package/build/dist/Utils/Monitor/NetworkTopologyUtil.js +75 -35
- 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/DeviceRoleKeyUtil.js +114 -0
- package/build/dist/Utils/NetworkDevice/DeviceRoleKeyUtil.js.map +1 -0
- 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/build/dist/Utils/Rules/RulePatternMatchUtil.js +1 -1
- package/build/dist/Utils/Slug.js +31 -1
- package/build/dist/Utils/Slug.js.map +1 -1
- package/package.json +2 -2
|
@@ -26,7 +26,7 @@ const PACK: Array<NetworkDeviceAlertPackItem> = [
|
|
|
26
26
|
{
|
|
27
27
|
name: "Device unreachable",
|
|
28
28
|
description:
|
|
29
|
-
"The device stopped answering SNMP — likely down or unreachable.",
|
|
29
|
+
"The device stopped answering ping and SNMP — likely down or unreachable.",
|
|
30
30
|
filters: [
|
|
31
31
|
{
|
|
32
32
|
checkOn: CheckOn.SnmpIsOnline,
|
|
@@ -37,6 +37,27 @@ const PACK: Array<NetworkDeviceAlertPackItem> = [
|
|
|
37
37
|
createIncidents: true,
|
|
38
38
|
createAlerts: false,
|
|
39
39
|
},
|
|
40
|
+
/*
|
|
41
|
+
* An alert, not an incident: the device is still answering ping, so it is
|
|
42
|
+
* not down - but its SNMP walk is failing, which means no interfaces, no
|
|
43
|
+
* inventory and no health OIDs until someone fixes the credentials, the
|
|
44
|
+
* agent or the ACL. Never fires on a device that is only pinged: the
|
|
45
|
+
* criterion is not evaluated at all when no walk ran.
|
|
46
|
+
*/
|
|
47
|
+
{
|
|
48
|
+
name: "SNMP walk failing",
|
|
49
|
+
description:
|
|
50
|
+
"The device answers ping but its SNMP walk is failing — check the credentials, the SNMP agent, or an ACL.",
|
|
51
|
+
filters: [
|
|
52
|
+
{
|
|
53
|
+
checkOn: CheckOn.SnmpWalkIsSucceeding,
|
|
54
|
+
filterType: FilterType.False,
|
|
55
|
+
value: undefined,
|
|
56
|
+
},
|
|
57
|
+
],
|
|
58
|
+
createIncidents: false,
|
|
59
|
+
createAlerts: true,
|
|
60
|
+
},
|
|
40
61
|
{
|
|
41
62
|
name: "Interface down",
|
|
42
63
|
description:
|
|
@@ -57,6 +57,25 @@ export type NetworkTopologyDeviceRole =
|
|
|
57
57
|
| "host"
|
|
58
58
|
| "unknown";
|
|
59
59
|
|
|
60
|
+
/*
|
|
61
|
+
* The silhouette a node is drawn with on the topology map.
|
|
62
|
+
*
|
|
63
|
+
* It lives here, next to the roles, rather than in the renderer that owns
|
|
64
|
+
* the geometry, because a project's device roles are configurable
|
|
65
|
+
* (NetworkDeviceRole) and each one stores the shape it is drawn with. The
|
|
66
|
+
* renderer re-exports this type, so every existing import of it still
|
|
67
|
+
* resolves to exactly this union.
|
|
68
|
+
*/
|
|
69
|
+
export type NetworkTopologyNodeShape =
|
|
70
|
+
| "circle"
|
|
71
|
+
| "rounded-square"
|
|
72
|
+
| "diamond"
|
|
73
|
+
| "triangle"
|
|
74
|
+
| "hexagon"
|
|
75
|
+
| "tower"
|
|
76
|
+
| "cylinder"
|
|
77
|
+
| "rect";
|
|
78
|
+
|
|
60
79
|
/*
|
|
61
80
|
* Why a device is drawn with no links.
|
|
62
81
|
*
|
|
@@ -100,6 +119,48 @@ export interface NetworkTopologyNode {
|
|
|
100
119
|
* name one — readers must treat both the same way.
|
|
101
120
|
*/
|
|
102
121
|
role?: NetworkTopologyDeviceRole | undefined;
|
|
122
|
+
/*
|
|
123
|
+
* The project's OWN role for this node, from the configurable
|
|
124
|
+
* NetworkDeviceRole table (Network > Settings > Device Roles).
|
|
125
|
+
*
|
|
126
|
+
* `role` above is the built-in vocabulary the classifier speaks and can
|
|
127
|
+
* only ever be one of the twelve values in NetworkTopologyDeviceRole.
|
|
128
|
+
* A project may rename those roles or add roles of its own ("PoS
|
|
129
|
+
* Terminal", "SD-WAN Edge"), and neither survives that union — so the
|
|
130
|
+
* four fields here carry the configured answer alongside it.
|
|
131
|
+
*
|
|
132
|
+
* They are additive and every one of them is optional: a payload built
|
|
133
|
+
* before this existed, or for a project with no roles configured, simply
|
|
134
|
+
* omits them and every reader falls back to `role` exactly as before.
|
|
135
|
+
* When present they WIN, because they are what the operator configured.
|
|
136
|
+
*
|
|
137
|
+
* `roleKey` is the role's stable key — the built-in key ("switch") for a
|
|
138
|
+
* built-in role however it has been renamed, or a derived key for a
|
|
139
|
+
* custom one. It is what the legend groups by and what search matches.
|
|
140
|
+
*/
|
|
141
|
+
roleKey?: string | undefined;
|
|
142
|
+
// The configured display name, e.g. "Edge Router" for a renamed "router".
|
|
143
|
+
roleLabel?: string | undefined;
|
|
144
|
+
// The configured silhouette. Falls back to the built-in shape for `role`.
|
|
145
|
+
roleShape?: NetworkTopologyNodeShape | undefined;
|
|
146
|
+
/*
|
|
147
|
+
* Whether devices of this role sit at the top of the network. Load-bearing:
|
|
148
|
+
* the tiered and radial layouts band by it, so a custom role can be placed
|
|
149
|
+
* at core level without the layout having to recognise its name.
|
|
150
|
+
*/
|
|
151
|
+
isCoreLayerRole?: boolean | undefined;
|
|
152
|
+
/*
|
|
153
|
+
* Whether devices of this role are worth walking with SNMP. Read by the
|
|
154
|
+
* adopt-a-neighbour flow to decide whether it opens on SNMP polling or on
|
|
155
|
+
* a monitor.
|
|
156
|
+
*/
|
|
157
|
+
isSnmpWalkableRole?: boolean | undefined;
|
|
158
|
+
/*
|
|
159
|
+
* The NetworkDeviceRole row's id, so a form can preselect the role the map
|
|
160
|
+
* already shows without resolving the key itself. Absent when the project
|
|
161
|
+
* has no row for this role.
|
|
162
|
+
*/
|
|
163
|
+
roleId?: string | undefined;
|
|
103
164
|
interfacesUp?: number | undefined;
|
|
104
165
|
interfacesDown?: number | undefined;
|
|
105
166
|
// Extra device identity for search and the detail panel (managed nodes).
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import SqlDatabaseType from "./SqlDatabaseType";
|
|
2
|
+
|
|
3
|
+
/*
|
|
4
|
+
* The connection half of a SQL-speaking monitor's configuration.
|
|
5
|
+
*
|
|
6
|
+
* Extracted so the SQL Query monitor and the Database Health monitor can
|
|
7
|
+
* share one implementation of the fiddly parts - TLS options, and especially
|
|
8
|
+
* the SQL Server integrated-authentication path, which has to detect the
|
|
9
|
+
* host's ODBC driver and build a connection string by hand. Duplicating that
|
|
10
|
+
* for a second monitor type would guarantee the two drift.
|
|
11
|
+
*
|
|
12
|
+
* Both MonitorStepSqlMonitor and MonitorStepDatabaseMonitor extend this, so
|
|
13
|
+
* anything that only needs to CONNECT should take this type rather than
|
|
14
|
+
* either step type.
|
|
15
|
+
*/
|
|
16
|
+
export default interface SqlConnectionConfig {
|
|
17
|
+
databaseType: SqlDatabaseType;
|
|
18
|
+
host: string;
|
|
19
|
+
port: number;
|
|
20
|
+
databaseName: string;
|
|
21
|
+
username: string;
|
|
22
|
+
// Raw password OR a {{monitorSecrets.name}} reference resolved server-side.
|
|
23
|
+
password: string;
|
|
24
|
+
/*
|
|
25
|
+
* Microsoft SQL Server only: authenticate as the identity the probe runs
|
|
26
|
+
* as (SSPI on Windows, Kerberos elsewhere).
|
|
27
|
+
*/
|
|
28
|
+
useWindowsIntegratedAuthentication: boolean;
|
|
29
|
+
useSsl: boolean;
|
|
30
|
+
rejectUnauthorizedSsl: boolean;
|
|
31
|
+
}
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
import {
|
|
2
|
+
NetworkTopologyDeviceRole,
|
|
3
|
+
NetworkTopologyNodeShape,
|
|
4
|
+
} from "../Monitor/SnmpMonitor/NetworkTopology";
|
|
5
|
+
|
|
6
|
+
/*
|
|
7
|
+
* The device roles seeded into every project.
|
|
8
|
+
*
|
|
9
|
+
* Device roles used to be a fixed union (NetworkTopologyDeviceRole) with the
|
|
10
|
+
* label, the silhouette and the "is this a core device?" flag each hardcoded
|
|
11
|
+
* in a different module. They are now the per-project NetworkDeviceRole
|
|
12
|
+
* lookup table, so a project can rename "Wireless AP" to "Access Point",
|
|
13
|
+
* change what a firewall is drawn as, or add a role of its own.
|
|
14
|
+
*
|
|
15
|
+
* This file is the single source of truth for the DEFAULTS, shared by
|
|
16
|
+
* ProjectService (which seeds new projects) and the BackfillNetworkDeviceRoles
|
|
17
|
+
* data migration (which seeds projects that predate the table), so the two can
|
|
18
|
+
* never disagree about what a fresh project starts with.
|
|
19
|
+
*
|
|
20
|
+
* `key` is deliberately the built-in NetworkTopologyDeviceRole value. The SNMP
|
|
21
|
+
* classifier speaks that vocabulary and always will — it is evidence-driven
|
|
22
|
+
* and cannot invent a project's custom role — so matching its answer back to a
|
|
23
|
+
* configured row is a lookup by this key. That is also why the key is stable
|
|
24
|
+
* and the name is not: renaming a role must not stop the classifier finding it.
|
|
25
|
+
*/
|
|
26
|
+
export interface DefaultNetworkDeviceRole {
|
|
27
|
+
key: NetworkTopologyDeviceRole;
|
|
28
|
+
name: string;
|
|
29
|
+
description: string;
|
|
30
|
+
topologyShape: NetworkTopologyNodeShape;
|
|
31
|
+
isCoreLayer: boolean;
|
|
32
|
+
isSnmpWalkable: boolean;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/*
|
|
36
|
+
* Ordered exactly as the map legend lists them, because the seeded `order`
|
|
37
|
+
* column is this array's index — a fresh project's settings page and its map
|
|
38
|
+
* legend therefore read in the same sequence.
|
|
39
|
+
*
|
|
40
|
+
* The shapes reproduce the renderer's historical SHAPE_BY_ROLE map and the
|
|
41
|
+
* isCoreLayer flags reproduce its CORE_DEVICE_ROLES set, so a project seeded
|
|
42
|
+
* from this list draws exactly the map it drew before roles were configurable.
|
|
43
|
+
*
|
|
44
|
+
* "unknown" is not here on purpose. It is not a role an operator assigns; it
|
|
45
|
+
* is the classifier saying it has no answer, and offering it as a choice would
|
|
46
|
+
* mean "stop classifying this device forever" rather than "I don't know".
|
|
47
|
+
*/
|
|
48
|
+
export const DEFAULT_NETWORK_DEVICE_ROLES: ReadonlyArray<DefaultNetworkDeviceRole> =
|
|
49
|
+
[
|
|
50
|
+
{
|
|
51
|
+
key: "router",
|
|
52
|
+
name: "Router",
|
|
53
|
+
description:
|
|
54
|
+
"Moves traffic between networks. Sits at the top of the topology with the other core devices.",
|
|
55
|
+
topologyShape: "circle",
|
|
56
|
+
isCoreLayer: true,
|
|
57
|
+
isSnmpWalkable: true,
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
key: "switch",
|
|
61
|
+
name: "Switch",
|
|
62
|
+
description:
|
|
63
|
+
"Access or distribution switching. Endpoints hang off it, and it hangs off a core device.",
|
|
64
|
+
topologyShape: "rounded-square",
|
|
65
|
+
isCoreLayer: false,
|
|
66
|
+
isSnmpWalkable: true,
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
key: "firewall",
|
|
70
|
+
name: "Firewall",
|
|
71
|
+
description:
|
|
72
|
+
"Security appliance at a network boundary. Drawn at core level.",
|
|
73
|
+
topologyShape: "diamond",
|
|
74
|
+
isCoreLayer: true,
|
|
75
|
+
isSnmpWalkable: true,
|
|
76
|
+
},
|
|
77
|
+
{
|
|
78
|
+
key: "wirelessAccessPoint",
|
|
79
|
+
name: "Wireless AP",
|
|
80
|
+
description: "Wireless access point serving client devices.",
|
|
81
|
+
topologyShape: "triangle",
|
|
82
|
+
isCoreLayer: false,
|
|
83
|
+
isSnmpWalkable: true,
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
key: "loadBalancer",
|
|
87
|
+
name: "Load balancer",
|
|
88
|
+
description:
|
|
89
|
+
"Distributes traffic across a pool of servers. Drawn at core level.",
|
|
90
|
+
topologyShape: "hexagon",
|
|
91
|
+
isCoreLayer: true,
|
|
92
|
+
isSnmpWalkable: true,
|
|
93
|
+
},
|
|
94
|
+
{
|
|
95
|
+
key: "server",
|
|
96
|
+
name: "Server",
|
|
97
|
+
description: "A general purpose server or compute node.",
|
|
98
|
+
topologyShape: "tower",
|
|
99
|
+
isCoreLayer: false,
|
|
100
|
+
isSnmpWalkable: true,
|
|
101
|
+
},
|
|
102
|
+
{
|
|
103
|
+
key: "storage",
|
|
104
|
+
name: "Storage",
|
|
105
|
+
description: "A NAS, SAN or other storage appliance.",
|
|
106
|
+
topologyShape: "cylinder",
|
|
107
|
+
isCoreLayer: false,
|
|
108
|
+
isSnmpWalkable: true,
|
|
109
|
+
},
|
|
110
|
+
{
|
|
111
|
+
key: "printer",
|
|
112
|
+
name: "Printer",
|
|
113
|
+
description: "A network printer or multifunction device.",
|
|
114
|
+
topologyShape: "rect",
|
|
115
|
+
isCoreLayer: false,
|
|
116
|
+
isSnmpWalkable: false,
|
|
117
|
+
},
|
|
118
|
+
{
|
|
119
|
+
key: "camera",
|
|
120
|
+
name: "Camera",
|
|
121
|
+
description: "An IP camera or other video endpoint.",
|
|
122
|
+
topologyShape: "rect",
|
|
123
|
+
isCoreLayer: false,
|
|
124
|
+
isSnmpWalkable: false,
|
|
125
|
+
},
|
|
126
|
+
{
|
|
127
|
+
key: "phone",
|
|
128
|
+
name: "IP phone",
|
|
129
|
+
description: "A VoIP handset or conference phone.",
|
|
130
|
+
topologyShape: "rect",
|
|
131
|
+
isCoreLayer: false,
|
|
132
|
+
isSnmpWalkable: false,
|
|
133
|
+
},
|
|
134
|
+
{
|
|
135
|
+
key: "host",
|
|
136
|
+
name: "Host",
|
|
137
|
+
description:
|
|
138
|
+
"Anything plugged into an access port that is not one of the roles above.",
|
|
139
|
+
topologyShape: "rect",
|
|
140
|
+
isCoreLayer: false,
|
|
141
|
+
isSnmpWalkable: false,
|
|
142
|
+
},
|
|
143
|
+
];
|
|
144
|
+
|
|
145
|
+
export default DEFAULT_NETWORK_DEVICE_ROLES;
|
|
@@ -0,0 +1,343 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* WHICH devices a Network Alert Policy covers.
|
|
3
|
+
*
|
|
4
|
+
* A policy says "devices like THESE get a Network Device monitor cloned from
|
|
5
|
+
* THIS template" once, and the engine keeps one monitor per matching device
|
|
6
|
+
* from then on. The "like these" half is this object: a set of site ids, a
|
|
7
|
+
* set of device-role ids and a set of label ids, stored as one jsonb column
|
|
8
|
+
* on the policy row rather than as three join tables.
|
|
9
|
+
*
|
|
10
|
+
* jsonb, not join tables, on purpose. The scope is read whole every time the
|
|
11
|
+
* engine asks "does this device match?" and never queried the other way
|
|
12
|
+
* round ("which policies name site X?" is answered by scanning the project's
|
|
13
|
+
* handful of policies, not by an index), so three link tables would buy
|
|
14
|
+
* nothing but three more CRUD surfaces and three more cascade rules to get
|
|
15
|
+
* right. It also lets the dashboard post the whole picker state as one field.
|
|
16
|
+
*
|
|
17
|
+
* The matching rule is the one every filter in this product uses:
|
|
18
|
+
*
|
|
19
|
+
* - AND across kinds: a device must satisfy the site list AND the role list
|
|
20
|
+
* AND the label list.
|
|
21
|
+
* - OR within a kind: "in site A or site B", "carrying label X or label Y".
|
|
22
|
+
* - An EMPTY kind matches everything. Leaving the sites list empty means
|
|
23
|
+
* "any site (including no site)", not "no site".
|
|
24
|
+
*
|
|
25
|
+
* So `{}` — every list empty — is the widest possible scope: every device in
|
|
26
|
+
* the project. That is a legitimate and common policy ("everything gets a
|
|
27
|
+
* reachability monitor"), but it is also the one that provisions the most
|
|
28
|
+
* billable monitors, which is why `isUnscoped` exists as a named question
|
|
29
|
+
* rather than a `length === 0` check scattered over the callers: the settings
|
|
30
|
+
* table, the confirm dialog and the engine all need to say "ALL devices" in
|
|
31
|
+
* the same breath.
|
|
32
|
+
*
|
|
33
|
+
* Everything that reads a scope goes through `normalize` first. The column is
|
|
34
|
+
* jsonb, so a row can hold whatever a client — or a hand-edited API call — put
|
|
35
|
+
* in it: a lone string where an array was expected, nulls, duplicated ids,
|
|
36
|
+
* blank strings from an empty picker. Tolerating all of that in one place
|
|
37
|
+
* means the engine never throws over one bad row and never double-counts a
|
|
38
|
+
* device because a site id was listed twice.
|
|
39
|
+
*/
|
|
40
|
+
export interface NetworkAlertPolicyScope {
|
|
41
|
+
siteIds?: Array<string>;
|
|
42
|
+
networkDeviceRoleIds?: Array<string>;
|
|
43
|
+
labelIds?: Array<string>;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/*
|
|
47
|
+
* The slice of a NetworkDevice the matcher looks at. Kept to plain ids so
|
|
48
|
+
* the engine can feed it rows selected with three columns and a label join,
|
|
49
|
+
* and so a test can build one in a line.
|
|
50
|
+
*/
|
|
51
|
+
export interface NetworkAlertPolicyScopeDevice {
|
|
52
|
+
siteId?: string | null;
|
|
53
|
+
networkDeviceRoleId?: string | null;
|
|
54
|
+
labelIds?: Array<string>;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/*
|
|
58
|
+
* Display names for `describe`, keyed by id. Every map is optional and every
|
|
59
|
+
* lookup may miss: the settings table renders before its lookups resolve,
|
|
60
|
+
* and a scope can name a site that has since been deleted. A missing name
|
|
61
|
+
* falls back to a count ("in 2 sites"), never to the raw id.
|
|
62
|
+
*/
|
|
63
|
+
export interface NetworkAlertPolicyScopeNames {
|
|
64
|
+
sites?: Record<string, string>;
|
|
65
|
+
roles?: Record<string, string>;
|
|
66
|
+
labels?: Record<string, string>;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
/*
|
|
70
|
+
* A normalized scope: every list present, deduplicated, and holding only
|
|
71
|
+
* non-blank strings. What `normalize` returns and what every other method
|
|
72
|
+
* works on internally.
|
|
73
|
+
*/
|
|
74
|
+
interface NormalizedNetworkAlertPolicyScope {
|
|
75
|
+
siteIds: Array<string>;
|
|
76
|
+
networkDeviceRoleIds: Array<string>;
|
|
77
|
+
labelIds: Array<string>;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/*
|
|
81
|
+
* One kind of id, for `describe`. `singular`/`plural` are the nouns; how the
|
|
82
|
+
* clause hangs off "Devices" is decided by the caller — sites are somewhere
|
|
83
|
+
* ("in"), roles and labels are something a device has ("with").
|
|
84
|
+
*/
|
|
85
|
+
interface ScopeKindDescription {
|
|
86
|
+
ids: Array<string>;
|
|
87
|
+
names: Record<string, string> | undefined;
|
|
88
|
+
singular: string;
|
|
89
|
+
plural: string;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
export class NetworkAlertPolicyScopeUtil {
|
|
93
|
+
/*
|
|
94
|
+
* The canonical form of whatever was stored or posted.
|
|
95
|
+
*
|
|
96
|
+
* Accepts anything: `undefined`, `null`, a non-object, an object whose
|
|
97
|
+
* lists are missing, `null`, lone strings, or arrays holding nulls,
|
|
98
|
+
* numbers, blanks and duplicates. Returns three arrays of unique, trimmed,
|
|
99
|
+
* non-empty strings — and nothing else, so a stray property on the stored
|
|
100
|
+
* JSON never round-trips back into the column.
|
|
101
|
+
*/
|
|
102
|
+
public static normalize(raw: unknown): NetworkAlertPolicyScope {
|
|
103
|
+
const source: Record<string, unknown> =
|
|
104
|
+
raw && typeof raw === "object" && !Array.isArray(raw)
|
|
105
|
+
? (raw as Record<string, unknown>)
|
|
106
|
+
: {};
|
|
107
|
+
|
|
108
|
+
return {
|
|
109
|
+
siteIds: NetworkAlertPolicyScopeUtil.readIdList(source["siteIds"]),
|
|
110
|
+
networkDeviceRoleIds: NetworkAlertPolicyScopeUtil.readIdList(
|
|
111
|
+
source["networkDeviceRoleIds"],
|
|
112
|
+
),
|
|
113
|
+
labelIds: NetworkAlertPolicyScopeUtil.readIdList(source["labelIds"]),
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
/*
|
|
118
|
+
* True when the scope names nothing at all — every device in the project.
|
|
119
|
+
*
|
|
120
|
+
* Runs through `normalize` first, so a scope of `{ siteIds: [""] }` or
|
|
121
|
+
* `{ siteIds: null }` reads as unscoped too: a blank picker is an empty
|
|
122
|
+
* picker, and the alternative — a scope that matches nothing because it
|
|
123
|
+
* holds one blank id — would be a policy that silently does nothing.
|
|
124
|
+
*/
|
|
125
|
+
public static isUnscoped(
|
|
126
|
+
scope: NetworkAlertPolicyScope | null | undefined,
|
|
127
|
+
): boolean {
|
|
128
|
+
const normalized: NormalizedNetworkAlertPolicyScope =
|
|
129
|
+
NetworkAlertPolicyScopeUtil.normalize(
|
|
130
|
+
scope,
|
|
131
|
+
) as NormalizedNetworkAlertPolicyScope;
|
|
132
|
+
|
|
133
|
+
return (
|
|
134
|
+
normalized.siteIds.length === 0 &&
|
|
135
|
+
normalized.networkDeviceRoleIds.length === 0 &&
|
|
136
|
+
normalized.labelIds.length === 0
|
|
137
|
+
);
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
/*
|
|
141
|
+
* The matching rule itself: AND across kinds, OR within a kind, an empty
|
|
142
|
+
* kind matches everything.
|
|
143
|
+
*
|
|
144
|
+
* A device with no site never matches a scope that lists sites, and a
|
|
145
|
+
* device with no labels never matches a scope that lists labels — "in site
|
|
146
|
+
* A" cannot be true of a device that is nowhere. The converse is the
|
|
147
|
+
* empty-kind rule: a scope that lists no sites is satisfied by a device
|
|
148
|
+
* with no site.
|
|
149
|
+
*/
|
|
150
|
+
public static matchesDevice(
|
|
151
|
+
scope: NetworkAlertPolicyScope | null | undefined,
|
|
152
|
+
device: NetworkAlertPolicyScopeDevice,
|
|
153
|
+
): boolean {
|
|
154
|
+
const normalized: NormalizedNetworkAlertPolicyScope =
|
|
155
|
+
NetworkAlertPolicyScopeUtil.normalize(
|
|
156
|
+
scope,
|
|
157
|
+
) as NormalizedNetworkAlertPolicyScope;
|
|
158
|
+
|
|
159
|
+
if (
|
|
160
|
+
normalized.siteIds.length > 0 &&
|
|
161
|
+
!NetworkAlertPolicyScopeUtil.listHasId(normalized.siteIds, device.siteId)
|
|
162
|
+
) {
|
|
163
|
+
return false;
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
if (
|
|
167
|
+
normalized.networkDeviceRoleIds.length > 0 &&
|
|
168
|
+
!NetworkAlertPolicyScopeUtil.listHasId(
|
|
169
|
+
normalized.networkDeviceRoleIds,
|
|
170
|
+
device.networkDeviceRoleId,
|
|
171
|
+
)
|
|
172
|
+
) {
|
|
173
|
+
return false;
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
if (normalized.labelIds.length > 0) {
|
|
177
|
+
const deviceLabelIds: Array<string> =
|
|
178
|
+
NetworkAlertPolicyScopeUtil.readIdList(device.labelIds);
|
|
179
|
+
|
|
180
|
+
const hasAnyLabel: boolean = deviceLabelIds.some(
|
|
181
|
+
(labelId: string): boolean => {
|
|
182
|
+
return normalized.labelIds.includes(labelId);
|
|
183
|
+
},
|
|
184
|
+
);
|
|
185
|
+
|
|
186
|
+
if (!hasAnyLabel) {
|
|
187
|
+
return false;
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
return true;
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
/*
|
|
195
|
+
* A sentence for the settings table.
|
|
196
|
+
*
|
|
197
|
+
* {} -> "All devices"
|
|
198
|
+
* { siteIds: [a, b] } -> "Devices in 2 sites"
|
|
199
|
+
* { siteIds: [a], roles: [switch] } -> "Devices in site Warehouse with role Switch"
|
|
200
|
+
* { roles: [switch], labels: [prod] } -> "Devices with role Switch and label Production"
|
|
201
|
+
*
|
|
202
|
+
* A single id whose name is known is named; anything else is counted. The
|
|
203
|
+
* count, never the id: an operator reading "in site 7f3c..." learns
|
|
204
|
+
* nothing, and "in 1 site" at least tells them to open the policy.
|
|
205
|
+
*
|
|
206
|
+
* "All devices" is deliberately blunt. It is the row that provisions a
|
|
207
|
+
* monitor for everything, and the wording should make somebody scanning
|
|
208
|
+
* the table stop on it.
|
|
209
|
+
*/
|
|
210
|
+
public static describe(
|
|
211
|
+
scope: NetworkAlertPolicyScope | null | undefined,
|
|
212
|
+
names: NetworkAlertPolicyScopeNames = {},
|
|
213
|
+
): string {
|
|
214
|
+
const normalized: NormalizedNetworkAlertPolicyScope =
|
|
215
|
+
NetworkAlertPolicyScopeUtil.normalize(
|
|
216
|
+
scope,
|
|
217
|
+
) as NormalizedNetworkAlertPolicyScope;
|
|
218
|
+
|
|
219
|
+
if (NetworkAlertPolicyScopeUtil.isUnscoped(normalized)) {
|
|
220
|
+
return "All devices";
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
let sentence: string = "Devices";
|
|
224
|
+
|
|
225
|
+
if (normalized.siteIds.length > 0) {
|
|
226
|
+
sentence += ` in ${NetworkAlertPolicyScopeUtil.describeKind({
|
|
227
|
+
ids: normalized.siteIds,
|
|
228
|
+
names: names.sites,
|
|
229
|
+
singular: "site",
|
|
230
|
+
plural: "sites",
|
|
231
|
+
})}`;
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
const withClauses: Array<string> = [];
|
|
235
|
+
|
|
236
|
+
if (normalized.networkDeviceRoleIds.length > 0) {
|
|
237
|
+
withClauses.push(
|
|
238
|
+
NetworkAlertPolicyScopeUtil.describeKind({
|
|
239
|
+
ids: normalized.networkDeviceRoleIds,
|
|
240
|
+
names: names.roles,
|
|
241
|
+
singular: "role",
|
|
242
|
+
plural: "roles",
|
|
243
|
+
}),
|
|
244
|
+
);
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
if (normalized.labelIds.length > 0) {
|
|
248
|
+
withClauses.push(
|
|
249
|
+
NetworkAlertPolicyScopeUtil.describeKind({
|
|
250
|
+
ids: normalized.labelIds,
|
|
251
|
+
names: names.labels,
|
|
252
|
+
singular: "label",
|
|
253
|
+
plural: "labels",
|
|
254
|
+
}),
|
|
255
|
+
);
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
if (withClauses.length > 0) {
|
|
259
|
+
sentence += ` with ${withClauses.join(" and ")}`;
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
return sentence;
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
// "site Warehouse" when there is one id and a name for it; "2 sites" else.
|
|
266
|
+
private static describeKind(kind: ScopeKindDescription): string {
|
|
267
|
+
if (kind.ids.length === 1) {
|
|
268
|
+
const name: string = (kind.names?.[kind.ids[0] as string] || "").trim();
|
|
269
|
+
|
|
270
|
+
if (name) {
|
|
271
|
+
return `${kind.singular} ${name}`;
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
return `${kind.ids.length} ${
|
|
276
|
+
kind.ids.length === 1 ? kind.singular : kind.plural
|
|
277
|
+
}`;
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
/*
|
|
281
|
+
* One id list, cleaned. A lone string is one id (a client that sent
|
|
282
|
+
* `siteIds: "abc"` meant `["abc"]`); anything that is not a string or an
|
|
283
|
+
* array yields nothing. Inside an array only non-blank strings and
|
|
284
|
+
* ObjectID-shaped objects (which carry their id under `_id` / `id`) count,
|
|
285
|
+
* trimmed and deduplicated in first-seen order so the stored form is
|
|
286
|
+
* stable across saves.
|
|
287
|
+
*/
|
|
288
|
+
private static readIdList(raw: unknown): Array<string> {
|
|
289
|
+
const candidates: Array<unknown> = Array.isArray(raw)
|
|
290
|
+
? raw
|
|
291
|
+
: raw === undefined || raw === null
|
|
292
|
+
? []
|
|
293
|
+
: [raw];
|
|
294
|
+
|
|
295
|
+
const ids: Array<string> = [];
|
|
296
|
+
|
|
297
|
+
for (const candidate of candidates) {
|
|
298
|
+
const id: string | null = NetworkAlertPolicyScopeUtil.readId(candidate);
|
|
299
|
+
|
|
300
|
+
if (id && !ids.includes(id)) {
|
|
301
|
+
ids.push(id);
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
return ids;
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
private static readId(value: unknown): string | null {
|
|
309
|
+
if (typeof value === "string") {
|
|
310
|
+
const trimmed: string = value.trim();
|
|
311
|
+
|
|
312
|
+
return trimmed || null;
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
if (value && typeof value === "object" && !Array.isArray(value)) {
|
|
316
|
+
const relation: { _id?: unknown; id?: unknown } = value as {
|
|
317
|
+
_id?: unknown;
|
|
318
|
+
id?: unknown;
|
|
319
|
+
};
|
|
320
|
+
|
|
321
|
+
const relationId: unknown = relation._id || relation.id;
|
|
322
|
+
|
|
323
|
+
if (typeof relationId === "string") {
|
|
324
|
+
const trimmed: string = relationId.trim();
|
|
325
|
+
|
|
326
|
+
return trimmed || null;
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
|
|
330
|
+
return null;
|
|
331
|
+
}
|
|
332
|
+
|
|
333
|
+
private static listHasId(
|
|
334
|
+
list: Array<string>,
|
|
335
|
+
id: string | null | undefined,
|
|
336
|
+
): boolean {
|
|
337
|
+
const normalizedId: string | null = NetworkAlertPolicyScopeUtil.readId(id);
|
|
338
|
+
|
|
339
|
+
return normalizedId !== null && list.includes(normalizedId);
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
export default NetworkAlertPolicyScope;
|