@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
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import EnterpriseLicenseUserCountSource from "../../Types/EnterpriseLicense/EnterpriseLicenseUserCountSource";
|
|
2
2
|
|
|
3
3
|
/*
|
|
4
4
|
* Usage reported by one self-hosted instance of an enterprise license.
|
|
@@ -7,11 +7,37 @@ import OneUptimeDate from "../../Types/Date";
|
|
|
7
7
|
* on staging, production and gov-cloud consumes a single seat.
|
|
8
8
|
*/
|
|
9
9
|
export interface EnterpriseLicenseInstanceUsage {
|
|
10
|
+
/*
|
|
11
|
+
* Registration is the initial communication until the instance sends its
|
|
12
|
+
* first usage report.
|
|
13
|
+
*/
|
|
14
|
+
createdAt?: Date | undefined;
|
|
10
15
|
userCount?: number | undefined;
|
|
11
16
|
userEmailHashes?: Array<string> | undefined;
|
|
12
17
|
lastReportedAt?: Date | undefined;
|
|
13
18
|
}
|
|
14
19
|
|
|
20
|
+
export interface EffectiveEnterpriseLicenseUserCountOptions {
|
|
21
|
+
instances: Array<EnterpriseLicenseInstanceUsage>;
|
|
22
|
+
storedUserCount?: number | null | undefined;
|
|
23
|
+
storedUserCountUpdatedAt?: Date | undefined;
|
|
24
|
+
storedUserCountSource?: EnterpriseLicenseUserCountSource | undefined;
|
|
25
|
+
legacyUserCount?: number | null | undefined;
|
|
26
|
+
legacyUserCountUpdatedAt?: Date | undefined;
|
|
27
|
+
/*
|
|
28
|
+
* Callers that just replaced/deleted modern rows know the stored aggregate
|
|
29
|
+
* came from those rows. They can suppress the one-time compatibility path
|
|
30
|
+
* for license records created before dedicated legacy fields existed.
|
|
31
|
+
*/
|
|
32
|
+
allowStoredUserCountAsLegacyFallback?: boolean | undefined;
|
|
33
|
+
now: Date;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
export interface EffectiveEnterpriseLicenseUserCount {
|
|
37
|
+
userCount: number | null;
|
|
38
|
+
source: EnterpriseLicenseUserCountSource | null;
|
|
39
|
+
}
|
|
40
|
+
|
|
15
41
|
export default class EnterpriseLicenseUsageUtil {
|
|
16
42
|
/*
|
|
17
43
|
* How many days before a license expires that expiry reminder emails
|
|
@@ -41,11 +67,11 @@ export default class EnterpriseLicenseUsageUtil {
|
|
|
41
67
|
)}`;
|
|
42
68
|
}
|
|
43
69
|
/*
|
|
44
|
-
*
|
|
45
|
-
*
|
|
46
|
-
*
|
|
70
|
+
* An instance is inactive once it has gone this many complete days without
|
|
71
|
+
* communicating with oneuptime.com. Inactive instances stay visible, but
|
|
72
|
+
* their users no longer consume seats.
|
|
47
73
|
*/
|
|
48
|
-
public static readonly InstanceUsageFreshnessInDays: number =
|
|
74
|
+
public static readonly InstanceUsageFreshnessInDays: number = 7;
|
|
49
75
|
|
|
50
76
|
// SHA-256 hex digest.
|
|
51
77
|
private static readonly emailHashRegex: RegExp = /^[a-f0-9]{64}$/;
|
|
@@ -136,17 +162,171 @@ export default class EnterpriseLicenseUsageUtil {
|
|
|
136
162
|
instance: EnterpriseLicenseInstanceUsage,
|
|
137
163
|
now: Date,
|
|
138
164
|
): boolean {
|
|
139
|
-
|
|
140
|
-
|
|
165
|
+
const lastCommunicatedAt: Date | undefined =
|
|
166
|
+
this.getInstanceLastCommunicatedAt(instance);
|
|
167
|
+
|
|
168
|
+
if (!lastCommunicatedAt) {
|
|
141
169
|
return false;
|
|
142
170
|
}
|
|
143
171
|
|
|
144
|
-
const
|
|
145
|
-
|
|
146
|
-
|
|
172
|
+
const inactiveAfterInMilliseconds: number =
|
|
173
|
+
this.InstanceUsageFreshnessInDays * 24 * 60 * 60 * 1000;
|
|
174
|
+
const staleBefore: number = now.getTime() - inactiveAfterInMilliseconds;
|
|
175
|
+
|
|
176
|
+
/*
|
|
177
|
+
* Strictly greater than: at the exact seven-day boundary the instance has
|
|
178
|
+
* gone a full week without communicating and must already be inactive.
|
|
179
|
+
* Elapsed milliseconds are intentional; a daylight-saving transition
|
|
180
|
+
* must not shorten or extend the week.
|
|
181
|
+
*/
|
|
182
|
+
return lastCommunicatedAt.getTime() > staleBefore;
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
public static getInstanceLastCommunicatedAt(
|
|
186
|
+
instance: EnterpriseLicenseInstanceUsage,
|
|
187
|
+
): Date | undefined {
|
|
188
|
+
return instance.lastReportedAt || instance.createdAt;
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
/* A registration is active, but only a real report is modern seat data. */
|
|
192
|
+
public static hasActiveReportedInstanceUsage(
|
|
193
|
+
instances: Array<EnterpriseLicenseInstanceUsage>,
|
|
194
|
+
now: Date,
|
|
195
|
+
): boolean {
|
|
196
|
+
return instances.some(
|
|
197
|
+
(instance: EnterpriseLicenseInstanceUsage): boolean => {
|
|
198
|
+
return (
|
|
199
|
+
Boolean(instance.lastReportedAt) &&
|
|
200
|
+
this.isInstanceCountedTowardsUsage(instance, now)
|
|
201
|
+
);
|
|
202
|
+
},
|
|
147
203
|
);
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
public static isTimestampWithinUsageWindow(
|
|
207
|
+
timestamp: Date | undefined,
|
|
208
|
+
now: Date,
|
|
209
|
+
): boolean {
|
|
210
|
+
return timestamp
|
|
211
|
+
? this.isInstanceCountedTowardsUsage({ lastReportedAt: timestamp }, now)
|
|
212
|
+
: false;
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
public static hasReportedInstanceUsage(
|
|
216
|
+
instances: Array<EnterpriseLicenseInstanceUsage>,
|
|
217
|
+
): boolean {
|
|
218
|
+
return instances.some(
|
|
219
|
+
(instance: EnterpriseLicenseInstanceUsage): boolean => {
|
|
220
|
+
return Boolean(instance.lastReportedAt);
|
|
221
|
+
},
|
|
222
|
+
);
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
/*
|
|
226
|
+
* Choose between modern per-instance reports and a separately persisted
|
|
227
|
+
* legacy license-wide heartbeat. The stored count fallback exists only for
|
|
228
|
+
* records written before those dedicated legacy columns were introduced;
|
|
229
|
+
* seeing any historical modern report proves that aggregate is not legacy.
|
|
230
|
+
* Once every authoritative communication timestamp is a week old, usage is
|
|
231
|
+
* zero.
|
|
232
|
+
*/
|
|
233
|
+
public static getEffectiveUserCount(
|
|
234
|
+
options: EffectiveEnterpriseLicenseUserCountOptions,
|
|
235
|
+
): number | null {
|
|
236
|
+
return this.getEffectiveUserCountAndSource(options).userCount;
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
public static getEffectiveUserCountAndSource(
|
|
240
|
+
options: EffectiveEnterpriseLicenseUserCountOptions,
|
|
241
|
+
): EffectiveEnterpriseLicenseUserCount {
|
|
242
|
+
if (this.hasActiveReportedInstanceUsage(options.instances, options.now)) {
|
|
243
|
+
return {
|
|
244
|
+
userCount: this.getUniqueUserCount(options.instances, options.now),
|
|
245
|
+
source: EnterpriseLicenseUserCountSource.Instance,
|
|
246
|
+
};
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
if (
|
|
250
|
+
this.isTimestampWithinUsageWindow(
|
|
251
|
+
options.legacyUserCountUpdatedAt,
|
|
252
|
+
options.now,
|
|
253
|
+
)
|
|
254
|
+
) {
|
|
255
|
+
return {
|
|
256
|
+
userCount: options.legacyUserCount ?? null,
|
|
257
|
+
source: EnterpriseLicenseUserCountSource.Legacy,
|
|
258
|
+
};
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
const hasRecentRegistration: boolean = options.instances.some(
|
|
262
|
+
(instance: EnterpriseLicenseInstanceUsage): boolean => {
|
|
263
|
+
return (
|
|
264
|
+
!instance.lastReportedAt &&
|
|
265
|
+
this.isInstanceCountedTowardsUsage(instance, options.now)
|
|
266
|
+
);
|
|
267
|
+
},
|
|
268
|
+
);
|
|
269
|
+
const hasRecentLegacyReport: boolean = options.storedUserCountUpdatedAt
|
|
270
|
+
? this.isTimestampWithinUsageWindow(
|
|
271
|
+
options.storedUserCountUpdatedAt,
|
|
272
|
+
options.now,
|
|
273
|
+
)
|
|
274
|
+
: false;
|
|
275
|
+
const isExplicitLegacyFallback: boolean =
|
|
276
|
+
options.storedUserCountSource ===
|
|
277
|
+
EnterpriseLicenseUserCountSource.Legacy &&
|
|
278
|
+
!options.legacyUserCountUpdatedAt &&
|
|
279
|
+
hasRecentLegacyReport;
|
|
280
|
+
const canUseCompatibilityFallback: boolean =
|
|
281
|
+
options.allowStoredUserCountAsLegacyFallback !== false &&
|
|
282
|
+
options.storedUserCountSource !==
|
|
283
|
+
EnterpriseLicenseUserCountSource.Instance &&
|
|
284
|
+
!options.legacyUserCountUpdatedAt &&
|
|
285
|
+
!this.hasReportedInstanceUsage(options.instances);
|
|
286
|
+
|
|
287
|
+
if (
|
|
288
|
+
isExplicitLegacyFallback ||
|
|
289
|
+
(canUseCompatibilityFallback &&
|
|
290
|
+
(hasRecentRegistration || hasRecentLegacyReport))
|
|
291
|
+
) {
|
|
292
|
+
return {
|
|
293
|
+
userCount: options.storedUserCount ?? null,
|
|
294
|
+
source: EnterpriseLicenseUserCountSource.Legacy,
|
|
295
|
+
};
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
if (
|
|
299
|
+
options.instances.length === 0 &&
|
|
300
|
+
(options.storedUserCount === undefined ||
|
|
301
|
+
options.storedUserCount === null) &&
|
|
302
|
+
!options.storedUserCountUpdatedAt &&
|
|
303
|
+
(options.legacyUserCount === undefined ||
|
|
304
|
+
options.legacyUserCount === null) &&
|
|
305
|
+
!options.legacyUserCountUpdatedAt &&
|
|
306
|
+
!options.storedUserCountSource
|
|
307
|
+
) {
|
|
308
|
+
return {
|
|
309
|
+
userCount: null,
|
|
310
|
+
source: null,
|
|
311
|
+
};
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
let inactiveUsageSource: EnterpriseLicenseUserCountSource | null =
|
|
315
|
+
options.storedUserCountSource || null;
|
|
316
|
+
|
|
317
|
+
if (
|
|
318
|
+
!inactiveUsageSource &&
|
|
319
|
+
this.hasReportedInstanceUsage(options.instances)
|
|
320
|
+
) {
|
|
321
|
+
inactiveUsageSource = EnterpriseLicenseUserCountSource.Instance;
|
|
322
|
+
} else if (!inactiveUsageSource && options.legacyUserCountUpdatedAt) {
|
|
323
|
+
inactiveUsageSource = EnterpriseLicenseUserCountSource.Legacy;
|
|
324
|
+
}
|
|
148
325
|
|
|
149
|
-
return
|
|
326
|
+
return {
|
|
327
|
+
userCount: 0,
|
|
328
|
+
source: inactiveUsageSource,
|
|
329
|
+
};
|
|
150
330
|
}
|
|
151
331
|
|
|
152
332
|
/*
|
|
@@ -1,5 +1,16 @@
|
|
|
1
1
|
import AggregationType from "../../Types/BaseDatabase/AggregationType";
|
|
2
|
-
import { CheckOn } from "../../Types/Monitor/CriteriaFilter";
|
|
2
|
+
import { CheckOn, CriteriaFilter } from "../../Types/Monitor/CriteriaFilter";
|
|
3
|
+
import {
|
|
4
|
+
DatabaseMetricCategory,
|
|
5
|
+
DatabaseMetricDefinition,
|
|
6
|
+
getAllDatabaseMetrics,
|
|
7
|
+
getDatabaseMetricByMetricType,
|
|
8
|
+
getDatabaseMetricCategoryDescription,
|
|
9
|
+
getDatabaseMetricCategoryOrder,
|
|
10
|
+
getDatabaseMetricsByCategory,
|
|
11
|
+
getDatabaseMetricsForEngine,
|
|
12
|
+
} from "../../Types/Monitor/DatabaseMetricCatalog";
|
|
13
|
+
import SqlDatabaseType from "../../Types/Monitor/SqlDatabaseType";
|
|
3
14
|
import MonitorMetricType from "../../Types/Monitor/MonitorMetricType";
|
|
4
15
|
import MonitorType, {
|
|
5
16
|
MonitorTypeHelper,
|
|
@@ -20,6 +31,19 @@ class MonitorMetricTypeUtil {
|
|
|
20
31
|
public static getAggregationTypeByMonitorMetricType(
|
|
21
32
|
monitorMetricType: MonitorMetricType,
|
|
22
33
|
): AggregationType {
|
|
34
|
+
/*
|
|
35
|
+
* Database Health series carry their own aggregation in the catalog, so
|
|
36
|
+
* they resolve here instead of adding ~40 cases to this switch (and to
|
|
37
|
+
* the four other switches in this file). The catalog is the one place a
|
|
38
|
+
* new database metric has to be declared.
|
|
39
|
+
*/
|
|
40
|
+
const databaseMetric: DatabaseMetricDefinition | null =
|
|
41
|
+
getDatabaseMetricByMetricType(monitorMetricType);
|
|
42
|
+
|
|
43
|
+
if (databaseMetric) {
|
|
44
|
+
return databaseMetric.defaultAggregation;
|
|
45
|
+
}
|
|
46
|
+
|
|
23
47
|
switch (monitorMetricType) {
|
|
24
48
|
case MonitorMetricType.ResponseTime:
|
|
25
49
|
return AggregationType.Avg;
|
|
@@ -275,6 +299,22 @@ class MonitorMetricTypeUtil {
|
|
|
275
299
|
];
|
|
276
300
|
}
|
|
277
301
|
|
|
302
|
+
if (monitorType === MonitorType.Database) {
|
|
303
|
+
/*
|
|
304
|
+
* Availability first, then every catalog series in category order.
|
|
305
|
+
* Engine filtering happens in getDatabaseMetricCategories, which is
|
|
306
|
+
* the only caller that knows which engine the monitor points at - this
|
|
307
|
+
* list is the full capability set for the monitor type.
|
|
308
|
+
*/
|
|
309
|
+
return [
|
|
310
|
+
MonitorMetricType.IsOnline,
|
|
311
|
+
MonitorMetricType.ResponseTime,
|
|
312
|
+
...getAllDatabaseMetrics().map((metric: DatabaseMetricDefinition) => {
|
|
313
|
+
return metric.metricType;
|
|
314
|
+
}),
|
|
315
|
+
];
|
|
316
|
+
}
|
|
317
|
+
|
|
278
318
|
if (
|
|
279
319
|
monitorType === MonitorType.DNS ||
|
|
280
320
|
monitorType === MonitorType.DNSSEC ||
|
|
@@ -308,6 +348,14 @@ class MonitorMetricTypeUtil {
|
|
|
308
348
|
*/
|
|
309
349
|
public static getMonitorMetricCategoriesByMonitorType(
|
|
310
350
|
monitorType: MonitorType,
|
|
351
|
+
/*
|
|
352
|
+
* Database Health only. When the caller knows which engine the monitor
|
|
353
|
+
* is pointed at, pass it and the cards drop the series that engine can
|
|
354
|
+
* never write - so a MySQL monitor does not show a permanently empty
|
|
355
|
+
* "Transaction ID Used" chart. Omitting it shows the full capability
|
|
356
|
+
* set, which is the right fallback when the engine is not loaded yet.
|
|
357
|
+
*/
|
|
358
|
+
databaseType?: SqlDatabaseType | undefined,
|
|
311
359
|
): Array<MonitorMetricCategory> {
|
|
312
360
|
if (monitorType === MonitorType.Server) {
|
|
313
361
|
return [
|
|
@@ -375,6 +423,10 @@ class MonitorMetricTypeUtil {
|
|
|
375
423
|
];
|
|
376
424
|
}
|
|
377
425
|
|
|
426
|
+
if (monitorType === MonitorType.Database) {
|
|
427
|
+
return this.getDatabaseMetricCategories(databaseType);
|
|
428
|
+
}
|
|
429
|
+
|
|
378
430
|
if (monitorType === MonitorType.NetworkDevice) {
|
|
379
431
|
return [
|
|
380
432
|
{
|
|
@@ -423,6 +475,13 @@ class MonitorMetricTypeUtil {
|
|
|
423
475
|
return "Total Connection Time (DNS + TCP)";
|
|
424
476
|
}
|
|
425
477
|
|
|
478
|
+
const databaseMetric: DatabaseMetricDefinition | null =
|
|
479
|
+
getDatabaseMetricByMetricType(monitorMetricType);
|
|
480
|
+
|
|
481
|
+
if (databaseMetric) {
|
|
482
|
+
return databaseMetric.friendlyName;
|
|
483
|
+
}
|
|
484
|
+
|
|
426
485
|
switch (monitorMetricType) {
|
|
427
486
|
case MonitorMetricType.ResponseTime:
|
|
428
487
|
return "Response Time";
|
|
@@ -534,6 +593,13 @@ class MonitorMetricTypeUtil {
|
|
|
534
593
|
public static getLegendUnitByMonitorMetricType(
|
|
535
594
|
monitorMetricType: MonitorMetricType,
|
|
536
595
|
): string {
|
|
596
|
+
const databaseMetric: DatabaseMetricDefinition | null =
|
|
597
|
+
getDatabaseMetricByMetricType(monitorMetricType);
|
|
598
|
+
|
|
599
|
+
if (databaseMetric) {
|
|
600
|
+
return databaseMetric.unit;
|
|
601
|
+
}
|
|
602
|
+
|
|
537
603
|
switch (monitorMetricType) {
|
|
538
604
|
case MonitorMetricType.ResponseTime:
|
|
539
605
|
return "ms";
|
|
@@ -619,6 +685,13 @@ class MonitorMetricTypeUtil {
|
|
|
619
685
|
return "Total time spent resolving the hostname (when needed) and establishing the TCP connection.";
|
|
620
686
|
}
|
|
621
687
|
|
|
688
|
+
const databaseMetric: DatabaseMetricDefinition | null =
|
|
689
|
+
getDatabaseMetricByMetricType(monitorMetricType);
|
|
690
|
+
|
|
691
|
+
if (databaseMetric) {
|
|
692
|
+
return databaseMetric.description;
|
|
693
|
+
}
|
|
694
|
+
|
|
622
695
|
switch (monitorMetricType) {
|
|
623
696
|
case MonitorMetricType.ResponseTime:
|
|
624
697
|
return "Response time is the time taken for a server to respond to a request. It is the sum of the time spent waiting to establish the connection, the time spent waiting for the request to be processed, and the time spent waiting for the response to be sent.";
|
|
@@ -714,6 +787,85 @@ class MonitorMetricTypeUtil {
|
|
|
714
787
|
return "";
|
|
715
788
|
}
|
|
716
789
|
}
|
|
790
|
+
|
|
791
|
+
/**
|
|
792
|
+
* One card per catalog category, in the order an operator walks them
|
|
793
|
+
* during an incident. When `databaseType` is given, a category whose
|
|
794
|
+
* metrics are all unsupported on that engine is dropped entirely rather
|
|
795
|
+
* than rendered as a card of empty charts.
|
|
796
|
+
*/
|
|
797
|
+
public static getDatabaseMetricCategories(
|
|
798
|
+
databaseType?: SqlDatabaseType | undefined,
|
|
799
|
+
): Array<MonitorMetricCategory> {
|
|
800
|
+
const supported: Array<MonitorMetricType> | null = databaseType
|
|
801
|
+
? getDatabaseMetricsForEngine(databaseType).map(
|
|
802
|
+
(metric: DatabaseMetricDefinition) => {
|
|
803
|
+
return metric.metricType;
|
|
804
|
+
},
|
|
805
|
+
)
|
|
806
|
+
: null;
|
|
807
|
+
|
|
808
|
+
const categories: Array<MonitorMetricCategory> = [];
|
|
809
|
+
|
|
810
|
+
for (const category of getDatabaseMetricCategoryOrder()) {
|
|
811
|
+
const metrics: Array<MonitorMetricType> = getDatabaseMetricsByCategory(
|
|
812
|
+
category,
|
|
813
|
+
)
|
|
814
|
+
.filter((metric: DatabaseMetricDefinition) => {
|
|
815
|
+
return !supported || supported.includes(metric.metricType);
|
|
816
|
+
})
|
|
817
|
+
.map((metric: DatabaseMetricDefinition) => {
|
|
818
|
+
return metric.metricType;
|
|
819
|
+
});
|
|
820
|
+
|
|
821
|
+
/*
|
|
822
|
+
* Availability additionally carries the shared probe series, so it is
|
|
823
|
+
* never empty even if every catalog metric in it were filtered out.
|
|
824
|
+
*/
|
|
825
|
+
if (category === DatabaseMetricCategory.Availability) {
|
|
826
|
+
metrics.unshift(
|
|
827
|
+
MonitorMetricType.IsOnline,
|
|
828
|
+
MonitorMetricType.ResponseTime,
|
|
829
|
+
);
|
|
830
|
+
}
|
|
831
|
+
|
|
832
|
+
if (metrics.length === 0) {
|
|
833
|
+
continue;
|
|
834
|
+
}
|
|
835
|
+
|
|
836
|
+
categories.push({
|
|
837
|
+
title: category,
|
|
838
|
+
description: getDatabaseMetricCategoryDescription(category),
|
|
839
|
+
metrics: metrics,
|
|
840
|
+
});
|
|
841
|
+
}
|
|
842
|
+
|
|
843
|
+
return categories;
|
|
844
|
+
}
|
|
845
|
+
|
|
846
|
+
/**
|
|
847
|
+
* The metric series a criteria filter reads.
|
|
848
|
+
*
|
|
849
|
+
* Database Health filters name their series in
|
|
850
|
+
* databaseMonitorOptions.metricType rather than in the CheckOn itself, so
|
|
851
|
+
* resolving from the CheckOn alone would return null and silently turn
|
|
852
|
+
* "evaluate over time" into an instantaneous comparison. Callers that hold
|
|
853
|
+
* the whole filter - EvaluateOverTime does - must use this instead of
|
|
854
|
+
* getMonitorMetricTypeByCheckOnOrNull.
|
|
855
|
+
*/
|
|
856
|
+
public static getMonitorMetricTypeByCriteriaFilterOrNull(
|
|
857
|
+
criteriaFilter: CriteriaFilter,
|
|
858
|
+
): MonitorMetricType | null {
|
|
859
|
+
if (criteriaFilter.checkOn === CheckOn.DatabaseMetric) {
|
|
860
|
+
return criteriaFilter.databaseMonitorOptions?.metricType || null;
|
|
861
|
+
}
|
|
862
|
+
|
|
863
|
+
if (criteriaFilter.checkOn === CheckOn.DatabaseIsOnline) {
|
|
864
|
+
return MonitorMetricType.IsOnline;
|
|
865
|
+
}
|
|
866
|
+
|
|
867
|
+
return this.getMonitorMetricTypeByCheckOnOrNull(criteriaFilter.checkOn);
|
|
868
|
+
}
|
|
717
869
|
}
|
|
718
870
|
|
|
719
871
|
export default MonitorMetricTypeUtil;
|
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
import {
|
|
2
|
+
NetworkTopologyDeviceRole,
|
|
3
|
+
NetworkTopologyNode,
|
|
4
|
+
NetworkTopologyNodeShape,
|
|
5
|
+
} from "../../Types/Monitor/SnmpMonitor/NetworkTopology";
|
|
6
|
+
|
|
7
|
+
/*
|
|
8
|
+
* The project's configured device roles, reduced to what the topology needs.
|
|
9
|
+
*
|
|
10
|
+
* WHY THIS EXISTS. Roles are rows now (NetworkDeviceRole), which means the
|
|
11
|
+
* label a role is drawn with, the silhouette it uses, whether it sits at the
|
|
12
|
+
* core and whether it is worth walking with SNMP are all per-project answers.
|
|
13
|
+
* None of them can be compiled into the client any more.
|
|
14
|
+
*
|
|
15
|
+
* The client is NOT given the table to look things up in, though. The topology
|
|
16
|
+
* builder stamps the four answers onto each node as it builds it, so every
|
|
17
|
+
* consumer downstream - the shape module, three layouts, the legend, the
|
|
18
|
+
* detail panel, the accessible label - keeps its current pure signature and
|
|
19
|
+
* needs no catalogue threaded through it. This module is the one place that
|
|
20
|
+
* turns rows into that stamp.
|
|
21
|
+
*
|
|
22
|
+
* Pure and dependency-free so it runs identically on the server, in the
|
|
23
|
+
* builder, and in the unit tests.
|
|
24
|
+
*/
|
|
25
|
+
|
|
26
|
+
/** One configured role, as the topology builder needs it. */
|
|
27
|
+
export interface TopologyDeviceRoleInput {
|
|
28
|
+
id?: string | undefined;
|
|
29
|
+
key: string;
|
|
30
|
+
name: string;
|
|
31
|
+
topologyShape?: string | undefined;
|
|
32
|
+
isCoreLayer?: boolean | undefined;
|
|
33
|
+
isSnmpWalkable?: boolean | undefined;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/** What gets stamped onto a node. Every field optional - see stampForRoleKey. */
|
|
37
|
+
export interface TopologyNodeRoleStamp {
|
|
38
|
+
roleId?: string | undefined;
|
|
39
|
+
roleKey?: string | undefined;
|
|
40
|
+
roleLabel?: string | undefined;
|
|
41
|
+
roleShape?: NetworkTopologyNodeShape | undefined;
|
|
42
|
+
isCoreLayerRole?: boolean | undefined;
|
|
43
|
+
isSnmpWalkableRole?: boolean | undefined;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/*
|
|
47
|
+
* The silhouettes the renderer can actually draw. A row's topologyShape is a
|
|
48
|
+
* free-text column - the geometry lives in the client and adding a shape must
|
|
49
|
+
* not need a migration - so a value that is not one of these is dropped rather
|
|
50
|
+
* than passed through to a renderer that would have no path for it.
|
|
51
|
+
*/
|
|
52
|
+
const KNOWN_SHAPES: ReadonlySet<string> = new Set<string>([
|
|
53
|
+
"circle",
|
|
54
|
+
"rounded-square",
|
|
55
|
+
"diamond",
|
|
56
|
+
"triangle",
|
|
57
|
+
"hexagon",
|
|
58
|
+
"tower",
|
|
59
|
+
"cylinder",
|
|
60
|
+
"rect",
|
|
61
|
+
]);
|
|
62
|
+
|
|
63
|
+
export type NormalizeRoleKeyFunction = (
|
|
64
|
+
value: string | undefined | null,
|
|
65
|
+
) => string | undefined;
|
|
66
|
+
|
|
67
|
+
/*
|
|
68
|
+
* Keys are matched case- and whitespace-insensitively, the same way
|
|
69
|
+
* parseDeviceRoleOverride reads the stored column, so a hand-edited or
|
|
70
|
+
* imported "Router " still finds the Router row.
|
|
71
|
+
*/
|
|
72
|
+
export const normalizeRoleKey: NormalizeRoleKeyFunction = (
|
|
73
|
+
value: string | undefined | null,
|
|
74
|
+
): string | undefined => {
|
|
75
|
+
const normalized: string = (value || "").trim().toLowerCase();
|
|
76
|
+
return normalized || undefined;
|
|
77
|
+
};
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* Index the project's roles for lookup by key.
|
|
81
|
+
*
|
|
82
|
+
* Later rows do not overwrite earlier ones on a key clash. The key is unique
|
|
83
|
+
* per project in the database, so a clash here means the caller passed rows
|
|
84
|
+
* from more than one project, and quietly taking the last one would draw the
|
|
85
|
+
* wrong project's shapes.
|
|
86
|
+
*/
|
|
87
|
+
export type BuildRoleIndexFunction = (
|
|
88
|
+
roles: ReadonlyArray<TopologyDeviceRoleInput>,
|
|
89
|
+
) => Map<string, TopologyDeviceRoleInput>;
|
|
90
|
+
|
|
91
|
+
export const buildDeviceRoleIndex: BuildRoleIndexFunction = (
|
|
92
|
+
roles: ReadonlyArray<TopologyDeviceRoleInput>,
|
|
93
|
+
): Map<string, TopologyDeviceRoleInput> => {
|
|
94
|
+
const index: Map<string, TopologyDeviceRoleInput> = new Map<
|
|
95
|
+
string,
|
|
96
|
+
TopologyDeviceRoleInput
|
|
97
|
+
>();
|
|
98
|
+
|
|
99
|
+
for (const role of roles) {
|
|
100
|
+
const key: string | undefined = normalizeRoleKey(role.key);
|
|
101
|
+
if (!key || index.has(key)) {
|
|
102
|
+
continue;
|
|
103
|
+
}
|
|
104
|
+
index.set(key, role);
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
return index;
|
|
108
|
+
};
|
|
109
|
+
|
|
110
|
+
export type StampForRoleKeyFunction = (
|
|
111
|
+
roleKey: string | undefined,
|
|
112
|
+
index: Map<string, TopologyDeviceRoleInput>,
|
|
113
|
+
) => TopologyNodeRoleStamp;
|
|
114
|
+
|
|
115
|
+
/**
|
|
116
|
+
* The stamp for one role key.
|
|
117
|
+
*
|
|
118
|
+
* Returns an EMPTY object when the project has no row for the key - which is
|
|
119
|
+
* the normal case for a project that has not been backfilled yet, and the
|
|
120
|
+
* permanent case for a project that deleted a seeded role the classifier can
|
|
121
|
+
* still produce. Every field a node does not get falls back to the built-in
|
|
122
|
+
* behaviour on the client, so an empty stamp draws exactly the map that was
|
|
123
|
+
* drawn before roles were configurable.
|
|
124
|
+
*
|
|
125
|
+
* The one field always present when a row IS found is `roleKey`, because the
|
|
126
|
+
* legend groups by it and a group with no key cannot be grouped.
|
|
127
|
+
*/
|
|
128
|
+
export const stampForRoleKey: StampForRoleKeyFunction = (
|
|
129
|
+
roleKey: string | undefined,
|
|
130
|
+
index: Map<string, TopologyDeviceRoleInput>,
|
|
131
|
+
): TopologyNodeRoleStamp => {
|
|
132
|
+
const normalized: string | undefined = normalizeRoleKey(roleKey);
|
|
133
|
+
if (!normalized) {
|
|
134
|
+
return {};
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
const role: TopologyDeviceRoleInput | undefined = index.get(normalized);
|
|
138
|
+
if (!role) {
|
|
139
|
+
return {};
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
const stamp: TopologyNodeRoleStamp = {
|
|
143
|
+
roleKey: role.key,
|
|
144
|
+
};
|
|
145
|
+
|
|
146
|
+
if (role.id) {
|
|
147
|
+
stamp.roleId = role.id;
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
if (role.name) {
|
|
151
|
+
stamp.roleLabel = role.name;
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
if (role.topologyShape && KNOWN_SHAPES.has(role.topologyShape)) {
|
|
155
|
+
stamp.roleShape = role.topologyShape as NetworkTopologyNodeShape;
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
if (role.isCoreLayer !== undefined) {
|
|
159
|
+
stamp.isCoreLayerRole = Boolean(role.isCoreLayer);
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
if (role.isSnmpWalkable !== undefined) {
|
|
163
|
+
stamp.isSnmpWalkableRole = Boolean(role.isSnmpWalkable);
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
return stamp;
|
|
167
|
+
};
|
|
168
|
+
|
|
169
|
+
export type RoleKeyForNodeFunction = (
|
|
170
|
+
assignedRoleKey: string | undefined,
|
|
171
|
+
classifiedRole: NetworkTopologyDeviceRole,
|
|
172
|
+
) => string | undefined;
|
|
173
|
+
|
|
174
|
+
/**
|
|
175
|
+
* Which key a node's presentation should come from.
|
|
176
|
+
*
|
|
177
|
+
* The operator's assignment wins, exactly as it does for `role` itself. With
|
|
178
|
+
* no assignment the classifier's answer is used, so a project that renamed
|
|
179
|
+
* "Router" to "Edge Router" sees the new name on devices it never had to
|
|
180
|
+
* touch. "unknown" is not a key any row holds and is deliberately not looked
|
|
181
|
+
* up: it is the classifier declining to answer, and a neutral node is the
|
|
182
|
+
* honest drawing of that.
|
|
183
|
+
*/
|
|
184
|
+
export const roleKeyForNode: RoleKeyForNodeFunction = (
|
|
185
|
+
assignedRoleKey: string | undefined,
|
|
186
|
+
classifiedRole: NetworkTopologyDeviceRole,
|
|
187
|
+
): string | undefined => {
|
|
188
|
+
const assigned: string | undefined = normalizeRoleKey(assignedRoleKey);
|
|
189
|
+
if (assigned) {
|
|
190
|
+
return assigned;
|
|
191
|
+
}
|
|
192
|
+
if (classifiedRole === "unknown") {
|
|
193
|
+
return undefined;
|
|
194
|
+
}
|
|
195
|
+
return classifiedRole;
|
|
196
|
+
};
|
|
197
|
+
|
|
198
|
+
export type ApplyRoleStampFunction = (
|
|
199
|
+
node: NetworkTopologyNode,
|
|
200
|
+
stamp: TopologyNodeRoleStamp,
|
|
201
|
+
) => void;
|
|
202
|
+
|
|
203
|
+
/**
|
|
204
|
+
* Copy a stamp onto a node, omitting the fields it does not carry.
|
|
205
|
+
*
|
|
206
|
+
* Assigning undefined rather than omitting would break the payload's own
|
|
207
|
+
* contract - "absent means fall back" - for any consumer that checks with
|
|
208
|
+
* `in` or serialises the node, so absent stays absent.
|
|
209
|
+
*/
|
|
210
|
+
export const applyRoleStamp: ApplyRoleStampFunction = (
|
|
211
|
+
node: NetworkTopologyNode,
|
|
212
|
+
stamp: TopologyNodeRoleStamp,
|
|
213
|
+
): void => {
|
|
214
|
+
if (stamp.roleId !== undefined) {
|
|
215
|
+
node.roleId = stamp.roleId;
|
|
216
|
+
}
|
|
217
|
+
if (stamp.roleKey !== undefined) {
|
|
218
|
+
node.roleKey = stamp.roleKey;
|
|
219
|
+
}
|
|
220
|
+
if (stamp.roleLabel !== undefined) {
|
|
221
|
+
node.roleLabel = stamp.roleLabel;
|
|
222
|
+
}
|
|
223
|
+
if (stamp.roleShape !== undefined) {
|
|
224
|
+
node.roleShape = stamp.roleShape;
|
|
225
|
+
}
|
|
226
|
+
if (stamp.isCoreLayerRole !== undefined) {
|
|
227
|
+
node.isCoreLayerRole = stamp.isCoreLayerRole;
|
|
228
|
+
}
|
|
229
|
+
if (stamp.isSnmpWalkableRole !== undefined) {
|
|
230
|
+
node.isSnmpWalkableRole = stamp.isSnmpWalkableRole;
|
|
231
|
+
}
|
|
232
|
+
};
|
|
@@ -538,7 +538,8 @@ export function labelForDeviceRole(
|
|
|
538
538
|
* The classifier above is evidence-driven, and its evidence is SNMP: a
|
|
539
539
|
* device nothing walks — a ping-only device imported by discovery, say —
|
|
540
540
|
* offers it a hostname and nothing else, so it comes back "unknown" and
|
|
541
|
-
* stays there forever.
|
|
541
|
+
* stays there forever. The role an operator ASSIGNED the device
|
|
542
|
+
* (NetworkDevice.networkDeviceRole, whose key is what arrives here) is them saying
|
|
542
543
|
* what the box actually is, and it is the only statement about a role that
|
|
543
544
|
* is not an inference, so it outranks everything the classifier can find.
|
|
544
545
|
*
|