@oneuptime/common 12.0.32 → 12.0.33
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Models/AnalyticsModels/Span.ts +14 -0
- package/Models/DatabaseModels/EnterpriseLicense.ts +56 -0
- package/Models/DatabaseModels/Index.ts +10 -0
- package/Models/DatabaseModels/Monitor.ts +76 -0
- package/Models/DatabaseModels/NetworkAlertPolicy.ts +690 -0
- package/Models/DatabaseModels/NetworkDevice.ts +176 -1
- package/Models/DatabaseModels/NetworkSite.ts +201 -2
- package/Models/DatabaseModels/NetworkSiteType.ts +102 -3
- package/Models/DatabaseModels/NetworkSnmpCredentialProfile.ts +841 -0
- package/Models/DatabaseModels/TelemetryException.ts +119 -0
- package/Models/DatabaseModels/UserNotificationEmailRollupBatch.ts +334 -0
- package/Models/DatabaseModels/UserNotificationEmailRollupItem.ts +370 -0
- package/Models/DatabaseModels/UserNotificationEmailRollupSetting.ts +282 -0
- package/Server/API/EnterpriseLicenseAPI.ts +391 -64
- package/Server/API/LlmProviderAPI.ts +137 -22
- package/Server/EnvironmentConfig.ts +14 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1790700000000-AddNetworkSiteTypeParentHierarchy.ts +55 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1790900000000-AddEnterpriseLicenseUsageProvenance.ts +31 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1790900000000-AddTelemetryExceptionErrorClass.ts +124 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1791000000000-AddUserNotificationEmailRollup.ts +132 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1791100000000-AddUserNotificationEmailRollupSetting.ts +79 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1791200000000-AddNetworkSnmpCredentialProfilesAndAlertPolicies.ts +191 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +12 -0
- package/Server/Infrastructure/QueueWorker.ts +38 -8
- package/Server/Middleware/BearerTokenAuthorization.ts +12 -0
- package/Server/Middleware/ProjectAuthorization.ts +11 -0
- package/Server/Middleware/SCIMAuthorization.ts +12 -0
- package/Server/Middleware/TelemetryIngest.ts +11 -0
- package/Server/Services/AIBillingService.ts +101 -27
- package/Server/Services/EnterpriseLicenseInstanceService.ts +197 -0
- package/Server/Services/EnterpriseLicenseService.ts +55 -0
- package/Server/Services/Index.ts +10 -0
- package/Server/Services/MonitorService.ts +143 -21
- package/Server/Services/MonitorStatusTimelineService.ts +150 -8
- package/Server/Services/MonitorTemplateService.ts +217 -1
- package/Server/Services/NetworkAlertPolicyEngineService.ts +2159 -0
- package/Server/Services/NetworkAlertPolicyService.ts +944 -0
- package/Server/Services/NetworkDeviceAutoImportRuleEngineService.ts +9 -10
- package/Server/Services/NetworkDeviceAutoImportRuleService.ts +60 -15
- package/Server/Services/NetworkDeviceService.ts +1032 -73
- package/Server/Services/NetworkSiteService.ts +1502 -129
- package/Server/Services/NetworkSiteTypeService.ts +1216 -0
- package/Server/Services/NetworkSnmpCredentialProfileService.ts +238 -0
- package/Server/Services/NotificationService.ts +118 -28
- package/Server/Services/ProjectService.ts +105 -48
- package/Server/Services/StatusPagePrivateUserService.ts +103 -3
- package/Server/Services/UserNotificationEmailRollupBatchService.ts +78 -0
- package/Server/Services/UserNotificationEmailRollupItemService.ts +79 -0
- package/Server/Services/UserNotificationEmailRollupSettingService.ts +113 -0
- package/Server/Services/UserNotificationSettingService.ts +62 -25
- package/Server/Services/UserService.ts +95 -0
- package/Server/Types/Database/QueryHelper.ts +2 -2
- package/Server/Utils/AI/Chat/ObservabilityChatPrompt.ts +14 -3
- package/Server/Utils/AI/SRE/Insights/Detectors/ExceptionSpikeDetector.ts +10 -0
- package/Server/Utils/AI/SRE/Insights/Detectors/NewExceptionDetector.ts +10 -0
- package/Server/Utils/AI/SRE/Insights/InsightTriageRunner.ts +62 -1
- package/Server/Utils/AI/Toolbox/AlertTools.ts +15 -1
- package/Server/Utils/Billing/BillingFailureNoticeThrottle.ts +80 -0
- package/Server/Utils/DataSource/HttpFetch.ts +9 -2
- package/Server/Utils/EmailRollup/EmailRollupConstants.ts +98 -0
- package/Server/Utils/EmailRollup/EmailRollupFlushRunner.ts +872 -0
- package/Server/Utils/EmailRollup/EmailRollupRenderer.ts +781 -0
- package/Server/Utils/EmailRollup/EmailRollupWriter.ts +368 -0
- package/Server/Utils/LLM/LLMService.ts +78 -0
- package/Server/Utils/LogRedaction.ts +8 -0
- package/Server/Utils/Logger.ts +79 -1
- package/Server/Utils/Monitor/Criteria/DatabaseMonitorCriteria.ts +190 -0
- package/Server/Utils/Monitor/Criteria/EvaluateOverTime.ts +9 -2
- package/Server/Utils/Monitor/Criteria/SnmpMonitorCriteria.ts +61 -1
- package/Server/Utils/Monitor/MonitorCriteriaDataExtractor.ts +14 -0
- package/Server/Utils/Monitor/MonitorCriteriaEvaluator.ts +49 -0
- package/Server/Utils/Monitor/MonitorCriteriaObservationBuilder.ts +255 -4
- package/Server/Utils/Monitor/MonitorMetricUtil.ts +41 -0
- package/Server/Utils/Monitor/MonitorTemplateUtil.ts +43 -0
- package/Server/Utils/Monitor/NetworkDeviceHydrationUtil.ts +499 -19
- package/Server/Utils/Monitor/NetworkDeviceMetricUtil.ts +66 -10
- package/Server/Utils/Monitor/NetworkDeviceWalkUtil.ts +238 -44
- package/Server/Utils/Monitor/NetworkInventoryUtil.ts +146 -39
- package/Server/Utils/NetworkDevice/DeviceHealthAggregation.ts +31 -18
- package/Server/Utils/NetworkSite/NetworkSiteHierarchyLock.ts +213 -0
- package/Server/Utils/OutboundUserAgent.ts +152 -0
- package/Server/Utils/StartServer.ts +51 -19
- package/Server/Utils/Telemetry/CaptureSpan.ts +32 -8
- package/Server/Utils/Telemetry/ErrorClassResolver.ts +120 -0
- package/Server/Utils/Telemetry/SpanUtil.ts +33 -0
- package/Server/Utils/Telemetry.ts +198 -51
- package/Server/Views/Partials/SensitiveUrlToken.ejs +140 -0
- package/Tests/App/Dashboard/AddNeighborToMonitoringModal.test.tsx +134 -33
- package/Tests/App/Dashboard/AskAiSuggestedPrompts.test.ts +279 -0
- package/Tests/App/Dashboard/DashboardEditPermissions.test.tsx +517 -0
- package/Tests/App/Dashboard/DashboardVariablesDiscard.test.tsx +26 -0
- package/Tests/App/Dashboard/DeviceStatusHero.test.tsx +588 -0
- package/Tests/App/Dashboard/DiscoveryScanWizardValidation.test.tsx +18 -9
- package/Tests/App/Dashboard/MonitorCreateFromMonitorBackedDevice.test.tsx +632 -0
- package/Tests/App/Dashboard/MonitorRecommendationCreateProgress.test.tsx +682 -0
- package/Tests/App/Dashboard/MonitorTypePicker.test.tsx +4 -2
- package/Tests/App/Dashboard/NetworkDeviceCreateFormMonitorBinding.test.tsx +676 -0
- package/Tests/App/Dashboard/NetworkDeviceCreateFormPingMonitor.test.tsx +791 -0
- package/Tests/App/Dashboard/NetworkDeviceCreateFormProbeAndSnmp.test.tsx +833 -0
- package/Tests/App/Dashboard/NetworkDeviceCriteriaFilter.test.ts +161 -0
- package/Tests/App/Dashboard/NetworkDeviceSettingsMonitoringSection.test.tsx +458 -0
- package/Tests/App/Dashboard/NetworkSideMenu.test.tsx +41 -5
- package/Tests/App/Dashboard/PingMonitorProvisioning.test.ts +368 -0
- package/Tests/App/Dashboard/RecommendationCard.test.tsx +796 -0
- package/Tests/App/Dashboard/RecommendationToolbar.test.tsx +519 -0
- package/Tests/App/Dashboard/RecommendationsList.test.tsx +661 -0
- package/Tests/App/Dashboard/UseBulkCreatePingMonitors.test.tsx +899 -0
- package/Tests/App/Dashboard/UseBulkSnmpCredentialProfileActions.test.tsx +732 -0
- package/Tests/App/SensitiveUrlTokenBootstrap.test.ts +256 -0
- package/Tests/App/StatusPage/StatusPageIndexPageRobotsMeta.test.ts +11 -1
- package/Tests/App/StatusPage/StatusPageLoginCodeBootstrap.test.ts +9 -4
- package/Tests/Models/NetworkSiteHierarchy.test.ts +41 -4
- package/Tests/Server/API/EnterpriseLicenseReportUserCount.test.ts +951 -7
- package/Tests/Server/API/LlmProviderConnectionTest.test.ts +522 -0
- package/Tests/Server/Infrastructure/Postgres/NetworkSnmpCredentialProfilesAndAlertPoliciesMigration.test.ts +854 -0
- package/Tests/Server/Infrastructure/Postgres/SchemaMigrationsOrdering.test.ts +18 -0
- package/Tests/Server/Infrastructure/Postgres/UserNotificationEmailRollupTableMigration.test.ts +535 -0
- package/Tests/Server/Services/AIChatPrivacyPin.test.ts +560 -0
- package/Tests/Server/Services/BillingRechargeOwnerEmailGuards.test.ts +783 -0
- package/Tests/Server/Services/EnterpriseLicenseInstanceServiceDeletionUsage.test.ts +707 -0
- package/Tests/Server/Services/EnterpriseLicenseServiceUsageAggregationLock.test.ts +329 -0
- package/Tests/Server/Services/MonitorServiceDeleteNetworkDeviceCleanup.test.ts +294 -0
- package/Tests/Server/Services/MonitorStatusBridgeProbePath.test.ts +802 -0
- package/Tests/Server/Services/MonitorStatusTimelineService.test.ts +72 -2
- package/Tests/Server/Services/NetworkAlertPolicyEngineHooks.test.ts +752 -0
- package/Tests/Server/Services/NetworkAlertPolicyEngineService.test.ts +1849 -0
- package/Tests/Server/Services/NetworkAlertPolicyModel.test.ts +1793 -0
- package/Tests/Server/Services/NetworkDeviceAutoImportRuleEngineService.test.ts +47 -4
- package/Tests/Server/Services/NetworkDeviceAutoImportRuleService.test.ts +97 -12
- package/Tests/Server/Services/NetworkDeviceAutoMonitorLifecycle.test.ts +148 -3
- package/Tests/Server/Services/NetworkDeviceMonitorBindingUpdateGuard.test.ts +514 -0
- package/Tests/Server/Services/NetworkDeviceMonitorStatusStamp.test.ts +447 -58
- package/Tests/Server/Services/NetworkDeviceMonitoringMethodTransition.test.ts +739 -0
- package/Tests/Server/Services/NetworkDevicePollingTenancy.test.ts +501 -0
- package/Tests/Server/Services/NetworkDeviceSiteDefaultProbe.test.ts +432 -0
- package/Tests/Server/Services/NetworkSiteMonitoringDefaults.test.ts +498 -0
- package/Tests/Server/Services/NetworkSiteRollupPolicyAndMaintenance.test.ts +337 -55
- package/Tests/Server/Services/NetworkSiteService.test.ts +1868 -131
- package/Tests/Server/Services/NetworkSiteTypeService.test.ts +1109 -0
- package/Tests/Server/Services/NetworkSnmpCredentialProfileModel.test.ts +926 -0
- package/Tests/Server/Services/NetworkSnmpCredentialProfileService.test.ts +796 -0
- package/Tests/Server/Services/ProjectServiceNetworkSiteTypeDefaults.test.ts +214 -0
- package/Tests/Server/Services/StatusPagePrivateUserEmailChangePasswordResetExpiry.test.ts +269 -0
- package/Tests/Server/Services/UserEmailChangePasswordResetExpiry.test.ts +472 -0
- package/Tests/Server/Services/UserNotificationEmailRollupModels.test.ts +569 -0
- package/Tests/Server/Services/UserNotificationEmailRollupSettingModel.test.ts +314 -0
- package/Tests/Server/Services/UserNotificationEmailRollupSettingService.test.ts +409 -0
- package/Tests/Server/Services/UserNotificationSettingRollupRouting.test.ts +856 -0
- package/Tests/Server/Services/UserNotificationSettingWorkspaceChannels.test.ts +102 -1
- package/Tests/Server/Types/Database/Permissions/DashboardAccessPermission.test.ts +321 -0
- package/Tests/Server/Types/Database/QueryHelperOperators.test.ts +17 -0
- package/Tests/Server/Utils/AI/AlertMonitorFilters.test.ts +124 -0
- package/Tests/Server/Utils/AI/Insights/InsightTriageRunner.test.ts +208 -0
- package/Tests/Server/Utils/AI/LLMServiceToolCalling.test.ts +235 -0
- package/Tests/Server/Utils/AI/ObservabilityChatPrompt.test.ts +253 -0
- package/Tests/Server/Utils/Captcha.test.ts +422 -0
- package/Tests/Server/Utils/DataSource/HttpFetch.test.ts +96 -2
- package/Tests/Server/Utils/Database/MigrationFailureLog.test.ts +466 -0
- package/Tests/Server/Utils/EmailRollup/EmailRollupFlushRunnerBehaviour.test.ts +1096 -0
- package/Tests/Server/Utils/EmailRollup/EmailRollupFlushRunnerClaim.test.ts +466 -0
- package/Tests/Server/Utils/EmailRollup/EmailRollupRenderer.test.ts +1428 -0
- package/Tests/Server/Utils/EmailRollup/EmailRollupTestHarness.ts +752 -0
- package/Tests/Server/Utils/EmailRollup/EmailRollupWriter.test.ts +864 -0
- package/Tests/Server/Utils/LoggerFaultDemotion.test.ts +346 -0
- package/Tests/Server/Utils/Monitor/Criteria/DatabaseMonitorCriteria.test.ts +633 -0
- package/Tests/Server/Utils/Monitor/Criteria/SnmpMonitorCriteria.test.ts +196 -0
- package/Tests/Server/Utils/Monitor/DatabaseMetricWrite.test.ts +367 -0
- package/Tests/Server/Utils/Monitor/MonitorCriteriaObservationBuilderUnits.test.ts +100 -0
- package/Tests/Server/Utils/Monitor/MonitorStepResourceIdentity.test.ts +5 -0
- package/Tests/Server/Utils/Monitor/NetworkDeviceHydrationUtil.test.ts +512 -31
- package/Tests/Server/Utils/Monitor/NetworkDeviceMetricUtil.test.ts +252 -0
- package/Tests/Server/Utils/Monitor/NetworkDeviceWalkUtil.test.ts +479 -42
- package/Tests/Server/Utils/Monitor/NetworkInventoryUtil.test.ts +351 -5
- package/Tests/Server/Utils/NetworkDevice/DeviceHealthAggregation.test.ts +136 -12
- package/Tests/Server/Utils/NetworkSite/NetworkSiteHierarchyLock.test.ts +306 -0
- package/Tests/Server/Utils/OutboundUserAgent.test.ts +266 -0
- package/Tests/Server/Utils/SecurityEvent/ThreatIntel/TaxiiClientUserAgent.test.ts +141 -0
- package/Tests/Server/Utils/Telemetry/ErrorClassResolver.test.ts +298 -0
- package/Tests/Server/Utils/Telemetry.test.ts +456 -66
- package/Tests/Types/Monitor/DatabaseMetricCatalog.test.ts +388 -0
- package/Tests/Types/Monitor/MonitorStepDatabaseMonitor.test.ts +243 -0
- package/Tests/Types/Monitor/MonitorStepDefaultTelemetryConfig.test.ts +1 -0
- package/Tests/Types/Monitor/MonitorType.test.ts +1 -0
- package/Tests/Types/Monitor/MonitorTypeKeywords.test.ts +16 -7
- package/Tests/Types/Monitor/NetworkDeviceAlertPack.test.ts +60 -0
- package/Tests/Types/NetworkDevice/NetworkAlertPolicyScope.test.ts +655 -0
- package/Tests/Types/NetworkDevice/NetworkDeviceMonitoringMethod.test.ts +115 -26
- package/Tests/Types/NetworkSite/DefaultNetworkSiteType.test.ts +39 -0
- package/Tests/Types/NotificationSetting/NotificationEmailRollupPolicy.test.ts +299 -0
- package/Tests/Types/Telemetry/ErrorClass.test.ts +483 -0
- package/Tests/UI/Components/BasicRadioButtons.test.tsx +336 -0
- package/Tests/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.test.ts +15 -0
- package/Tests/UI/Components/ProgressBar.test.tsx +38 -2
- package/Tests/UI/Components/SideMenuItem.test.tsx +226 -4
- package/Tests/UI/Components/SideMenuSection.test.tsx +310 -0
- package/Tests/UI/Components/SideOverSubmitState.test.tsx +335 -0
- package/Tests/UI/Utils/PageScrollLock.test.tsx +377 -0
- package/Tests/UI/Utils/PermissionGate.test.ts +78 -0
- package/Tests/UI/Utils/SensitiveUrlToken.test.ts +140 -0
- package/Tests/Utils/EnterpriseLicenseSeats.test.ts +69 -0
- package/Tests/Utils/EnterpriseLicenseSync.test.ts +7 -1
- package/Tests/Utils/EnterpriseLicenseUsage.test.ts +433 -2
- package/Tests/Utils/Monitor/MonitorMetricType.test.ts +280 -1
- package/Tests/Utils/Monitor/MonitorSummarySnapshotUtil.test.ts +1 -0
- package/Tests/Utils/Monitor/NetworkTopologyUtil.test.ts +38 -0
- package/Tests/Utils/NetworkDevice/DeviceHealthStateUtil.test.ts +284 -23
- package/Tests/Utils/NetworkDevice/DeviceReachabilityUtil.test.ts +177 -0
- package/Tests/Utils/NetworkDevice/MonitoringMethodThreadedClassifiers.test.ts +992 -0
- package/Tests/Utils/NetworkDevice/NetworkAlertPolicyBootstrapUtil.test.ts +427 -0
- package/Tests/Utils/NetworkDevice/ReachabilityStampConsistency.test.ts +185 -0
- package/Tests/Utils/NetworkDevice/SnmpCredentialUtil.test.ts +268 -0
- package/Tests/Utils/NetworkDiscovery/AutoImportRuleMatcher.test.ts +55 -5
- package/Tests/Utils/NetworkDiscovery/DiscoveredDeviceBuilder.test.ts +98 -21
- package/Tests/Utils/NetworkDiscovery/DiscoveryImportEligibility.test.ts +98 -20
- package/Tests/Utils/NetworkDiscovery/DiscoveryReverseDnsChain.test.ts +8 -7
- package/Tests/Utils/NetworkDiscovery/PingMonitorBuilderForAddress.test.ts +274 -0
- package/Tests/Utils/NetworkSite/SiteStatusRollupUtil.test.ts +230 -51
- package/Tests/Utils/NetworkSite/TypeHierarchyUtil.test.ts +209 -0
- package/Tests/Utils/Telemetry/CaptureSpanExportGating.test.ts +145 -0
- package/Types/AI/ExceptionAIClassification.ts +10 -24
- package/Types/Email/EmailTemplateType.ts +2 -0
- package/Types/EnterpriseLicense/EnterpriseLicenseInstanceSummary.ts +5 -0
- package/Types/EnterpriseLicense/EnterpriseLicenseUsageSnapshot.ts +13 -0
- package/Types/EnterpriseLicense/EnterpriseLicenseUserCountSource.ts +6 -0
- package/Types/Exception/ApiException.ts +10 -0
- package/Types/Exception/BadDataException.ts +11 -0
- package/Types/Exception/BadRequestException.ts +11 -0
- package/Types/Exception/Exception.ts +65 -0
- package/Types/Exception/ForbiddenException.ts +10 -0
- package/Types/Exception/NotAuthenticatedException.ts +10 -0
- package/Types/Exception/NotAuthorizedException.ts +10 -0
- package/Types/Exception/NotFoundException.ts +11 -0
- package/Types/Exception/PayloadTooLargeException.ts +11 -0
- package/Types/Exception/PaymentRequiredException.ts +10 -0
- package/Types/Exception/ServiceUnavailableException.ts +10 -0
- package/Types/Exception/SsoAuthorizationException.ts +10 -0
- package/Types/Exception/TenantNotFoundException.ts +11 -0
- package/Types/Exception/TimeoutException.ts +10 -0
- package/Types/Exception/TooManyRequestsException.ts +10 -0
- package/Types/Exception/UnableToReachServer.ts +10 -0
- package/Types/Exception/WebsiteRequestException.ts +10 -0
- package/Types/Monitor/CriteriaFilter.ts +60 -2
- package/Types/Monitor/DatabaseMetricCatalog.ts +693 -0
- package/Types/Monitor/DatabaseMonitor/DatabaseMonitorResponse.ts +83 -0
- package/Types/Monitor/MonitorCriteriaInstance.ts +76 -0
- package/Types/Monitor/MonitorMetricType.ts +71 -0
- package/Types/Monitor/MonitorStep.ts +76 -0
- package/Types/Monitor/MonitorStepDatabaseMonitor.ts +171 -0
- package/Types/Monitor/MonitorStepSqlMonitor.ts +2 -20
- package/Types/Monitor/MonitorType.ts +47 -1
- package/Types/Monitor/SnmpMonitor/NetworkDeviceAlertPack.ts +22 -1
- package/Types/Monitor/SqlConnectionConfig.ts +31 -0
- package/Types/NetworkDevice/NetworkAlertPolicyScope.ts +343 -0
- package/Types/NetworkDevice/NetworkDeviceMonitoringMethod.ts +42 -22
- package/Types/NetworkSite/DefaultNetworkSiteTypeHierarchy.ts +30 -0
- package/Types/NotificationSetting/NotificationEmailRollupCategory.ts +255 -0
- package/Types/NotificationSetting/NotificationEmailRollupPolicy.ts +104 -0
- package/Types/Permission.ts +90 -0
- package/Types/Probe/ProbeMonitorResponse.ts +16 -0
- package/Types/Telemetry/ErrorClass.ts +274 -0
- package/Types/Telemetry/UnitOfWork.ts +59 -0
- package/UI/Components/CommandPalette/CommandPalette.tsx +2 -8
- package/UI/Components/EditionLabel/EditionLabel.tsx +4 -0
- package/UI/Components/Modal/Modal.tsx +2 -8
- package/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.ts +44 -0
- package/UI/Components/ProgressBar/ProgressBar.tsx +12 -1
- package/UI/Components/RadioButtons/BasicRadioButtons.tsx +37 -7
- package/UI/Components/SideMenu/SideMenu.tsx +123 -5
- package/UI/Components/SideMenu/SideMenuItem.tsx +76 -84
- package/UI/Components/SideMenu/SideMenuSection.tsx +55 -23
- package/UI/Components/SideOver/SideOver.tsx +21 -20
- package/UI/Utils/PageScrollLock.ts +79 -3
- package/UI/Utils/PermissionGate.ts +61 -0
- package/UI/Utils/SensitiveUrlToken.ts +112 -0
- package/UI/Utils/TestLLMProvider.ts +11 -0
- package/Utils/EnterpriseLicense/EnterpriseLicenseSeats.ts +16 -0
- package/Utils/EnterpriseLicense/EnterpriseLicenseUsage.ts +191 -11
- package/Utils/Monitor/MonitorMetricType.ts +153 -1
- package/Utils/Monitor/NetworkTopologyUtil.ts +23 -3
- package/Utils/NetworkDevice/DeviceHealthStateUtil.ts +65 -14
- package/Utils/NetworkDevice/DeviceReachabilityUtil.ts +43 -14
- package/Utils/NetworkDevice/NetworkAlertPolicyBootstrapUtil.ts +247 -0
- package/Utils/NetworkDevice/SnmpCredentialUtil.ts +68 -0
- package/Utils/NetworkDiscovery/AutoImportRuleMatcher.ts +15 -7
- package/Utils/NetworkDiscovery/DiscoveredDeviceBuilder.ts +52 -17
- package/Utils/NetworkDiscovery/DiscoveryImportEligibility.ts +55 -23
- package/Utils/NetworkDiscovery/PingMonitorBuilder.ts +115 -13
- package/Utils/NetworkSite/SiteStatusRollupUtil.ts +66 -20
- package/Utils/NetworkSite/TypeHierarchyUtil.ts +313 -0
- package/build/dist/Models/AnalyticsModels/Span.js +14 -0
- package/build/dist/Models/AnalyticsModels/Span.js.map +1 -1
- package/build/dist/Models/DatabaseModels/EnterpriseLicense.js +59 -0
- package/build/dist/Models/DatabaseModels/EnterpriseLicense.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Index.js +10 -0
- package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Monitor.js +75 -0
- package/build/dist/Models/DatabaseModels/Monitor.js.map +1 -1
- package/build/dist/Models/DatabaseModels/NetworkAlertPolicy.js +713 -0
- package/build/dist/Models/DatabaseModels/NetworkAlertPolicy.js.map +1 -0
- package/build/dist/Models/DatabaseModels/NetworkDevice.js +180 -1
- package/build/dist/Models/DatabaseModels/NetworkDevice.js.map +1 -1
- package/build/dist/Models/DatabaseModels/NetworkSite.js +200 -2
- package/build/dist/Models/DatabaseModels/NetworkSite.js.map +1 -1
- package/build/dist/Models/DatabaseModels/NetworkSiteType.js +102 -3
- package/build/dist/Models/DatabaseModels/NetworkSiteType.js.map +1 -1
- package/build/dist/Models/DatabaseModels/NetworkSnmpCredentialProfile.js +878 -0
- package/build/dist/Models/DatabaseModels/NetworkSnmpCredentialProfile.js.map +1 -0
- package/build/dist/Models/DatabaseModels/TelemetryException.js +123 -0
- package/build/dist/Models/DatabaseModels/TelemetryException.js.map +1 -1
- package/build/dist/Models/DatabaseModels/UserNotificationEmailRollupBatch.js +363 -0
- package/build/dist/Models/DatabaseModels/UserNotificationEmailRollupBatch.js.map +1 -0
- package/build/dist/Models/DatabaseModels/UserNotificationEmailRollupItem.js +402 -0
- package/build/dist/Models/DatabaseModels/UserNotificationEmailRollupItem.js.map +1 -0
- package/build/dist/Models/DatabaseModels/UserNotificationEmailRollupSetting.js +296 -0
- package/build/dist/Models/DatabaseModels/UserNotificationEmailRollupSetting.js.map +1 -0
- package/build/dist/Server/API/EnterpriseLicenseAPI.js +273 -60
- package/build/dist/Server/API/EnterpriseLicenseAPI.js.map +1 -1
- package/build/dist/Server/API/LlmProviderAPI.js +108 -13
- package/build/dist/Server/API/LlmProviderAPI.js.map +1 -1
- package/build/dist/Server/EnvironmentConfig.js +12 -0
- package/build/dist/Server/EnvironmentConfig.js.map +1 -1
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790700000000-AddNetworkSiteTypeParentHierarchy.js +24 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790700000000-AddNetworkSiteTypeParentHierarchy.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790900000000-AddEnterpriseLicenseUsageProvenance.js +16 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790900000000-AddEnterpriseLicenseUsageProvenance.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790900000000-AddTelemetryExceptionErrorClass.js +111 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790900000000-AddTelemetryExceptionErrorClass.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791000000000-AddUserNotificationEmailRollup.js +77 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791000000000-AddUserNotificationEmailRollup.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791100000000-AddUserNotificationEmailRollupSetting.js +50 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791100000000-AddUserNotificationEmailRollupSetting.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791200000000-AddNetworkSnmpCredentialProfilesAndAlertPolicies.js +83 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791200000000-AddNetworkSnmpCredentialProfilesAndAlertPolicies.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +12 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
- package/build/dist/Server/Infrastructure/QueueWorker.js +33 -5
- package/build/dist/Server/Infrastructure/QueueWorker.js.map +1 -1
- package/build/dist/Server/Middleware/BearerTokenAuthorization.js +12 -0
- package/build/dist/Server/Middleware/BearerTokenAuthorization.js.map +1 -1
- package/build/dist/Server/Middleware/ProjectAuthorization.js +11 -0
- package/build/dist/Server/Middleware/ProjectAuthorization.js.map +1 -1
- package/build/dist/Server/Middleware/SCIMAuthorization.js +12 -0
- package/build/dist/Server/Middleware/SCIMAuthorization.js.map +1 -1
- package/build/dist/Server/Middleware/TelemetryIngest.js +11 -0
- package/build/dist/Server/Middleware/TelemetryIngest.js.map +1 -1
- package/build/dist/Server/Services/AIBillingService.js +70 -16
- package/build/dist/Server/Services/AIBillingService.js.map +1 -1
- package/build/dist/Server/Services/EnterpriseLicenseInstanceService.js +167 -0
- package/build/dist/Server/Services/EnterpriseLicenseInstanceService.js.map +1 -1
- package/build/dist/Server/Services/EnterpriseLicenseService.js +39 -0
- package/build/dist/Server/Services/EnterpriseLicenseService.js.map +1 -1
- package/build/dist/Server/Services/Index.js +10 -0
- package/build/dist/Server/Services/Index.js.map +1 -1
- package/build/dist/Server/Services/MonitorService.js +119 -21
- package/build/dist/Server/Services/MonitorService.js.map +1 -1
- package/build/dist/Server/Services/MonitorStatusTimelineService.js +127 -8
- package/build/dist/Server/Services/MonitorStatusTimelineService.js.map +1 -1
- package/build/dist/Server/Services/MonitorTemplateService.js +162 -0
- package/build/dist/Server/Services/MonitorTemplateService.js.map +1 -1
- package/build/dist/Server/Services/NetworkAlertPolicyEngineService.js +1683 -0
- package/build/dist/Server/Services/NetworkAlertPolicyEngineService.js.map +1 -0
- package/build/dist/Server/Services/NetworkAlertPolicyService.js +732 -0
- package/build/dist/Server/Services/NetworkAlertPolicyService.js.map +1 -0
- package/build/dist/Server/Services/NetworkDeviceAutoImportRuleEngineService.js +10 -9
- package/build/dist/Server/Services/NetworkDeviceAutoImportRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/NetworkDeviceAutoImportRuleService.js +54 -11
- package/build/dist/Server/Services/NetworkDeviceAutoImportRuleService.js.map +1 -1
- package/build/dist/Server/Services/NetworkDeviceService.js +841 -70
- package/build/dist/Server/Services/NetworkDeviceService.js.map +1 -1
- package/build/dist/Server/Services/NetworkSiteService.js +1145 -107
- package/build/dist/Server/Services/NetworkSiteService.js.map +1 -1
- package/build/dist/Server/Services/NetworkSiteTypeService.js +863 -0
- package/build/dist/Server/Services/NetworkSiteTypeService.js.map +1 -1
- package/build/dist/Server/Services/NetworkSnmpCredentialProfileService.js +217 -0
- package/build/dist/Server/Services/NetworkSnmpCredentialProfileService.js.map +1 -0
- package/build/dist/Server/Services/NotificationService.js +80 -17
- package/build/dist/Server/Services/NotificationService.js.map +1 -1
- package/build/dist/Server/Services/ProjectService.js +66 -30
- package/build/dist/Server/Services/ProjectService.js.map +1 -1
- package/build/dist/Server/Services/StatusPagePrivateUserService.js +92 -2
- package/build/dist/Server/Services/StatusPagePrivateUserService.js.map +1 -1
- package/build/dist/Server/Services/UserNotificationEmailRollupBatchService.js +76 -0
- package/build/dist/Server/Services/UserNotificationEmailRollupBatchService.js.map +1 -0
- package/build/dist/Server/Services/UserNotificationEmailRollupItemService.js +77 -0
- package/build/dist/Server/Services/UserNotificationEmailRollupItemService.js.map +1 -0
- package/build/dist/Server/Services/UserNotificationEmailRollupSettingService.js +111 -0
- package/build/dist/Server/Services/UserNotificationEmailRollupSettingService.js.map +1 -0
- package/build/dist/Server/Services/UserNotificationSettingService.js +46 -20
- package/build/dist/Server/Services/UserNotificationSettingService.js.map +1 -1
- package/build/dist/Server/Services/UserService.js +90 -0
- package/build/dist/Server/Services/UserService.js.map +1 -1
- package/build/dist/Server/Types/Database/QueryHelper.js +1 -1
- package/build/dist/Server/Types/Database/QueryHelper.js.map +1 -1
- package/build/dist/Server/Utils/AI/Chat/ObservabilityChatPrompt.js +14 -3
- package/build/dist/Server/Utils/AI/Chat/ObservabilityChatPrompt.js.map +1 -1
- package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/ExceptionSpikeDetector.js +10 -0
- package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/ExceptionSpikeDetector.js.map +1 -1
- package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/NewExceptionDetector.js +10 -0
- package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/NewExceptionDetector.js.map +1 -1
- package/build/dist/Server/Utils/AI/SRE/Insights/InsightTriageRunner.js +54 -1
- package/build/dist/Server/Utils/AI/SRE/Insights/InsightTriageRunner.js.map +1 -1
- package/build/dist/Server/Utils/AI/Toolbox/AlertTools.js +18 -4
- package/build/dist/Server/Utils/AI/Toolbox/AlertTools.js.map +1 -1
- package/build/dist/Server/Utils/Billing/BillingFailureNoticeThrottle.js +59 -0
- package/build/dist/Server/Utils/Billing/BillingFailureNoticeThrottle.js.map +1 -0
- package/build/dist/Server/Utils/DataSource/HttpFetch.js +2 -1
- package/build/dist/Server/Utils/DataSource/HttpFetch.js.map +1 -1
- package/build/dist/Server/Utils/EmailRollup/EmailRollupConstants.js +91 -0
- package/build/dist/Server/Utils/EmailRollup/EmailRollupConstants.js.map +1 -0
- package/build/dist/Server/Utils/EmailRollup/EmailRollupFlushRunner.js +691 -0
- package/build/dist/Server/Utils/EmailRollup/EmailRollupFlushRunner.js.map +1 -0
- package/build/dist/Server/Utils/EmailRollup/EmailRollupRenderer.js +497 -0
- package/build/dist/Server/Utils/EmailRollup/EmailRollupRenderer.js.map +1 -0
- package/build/dist/Server/Utils/EmailRollup/EmailRollupWriter.js +257 -0
- package/build/dist/Server/Utils/EmailRollup/EmailRollupWriter.js.map +1 -0
- package/build/dist/Server/Utils/LLM/LLMService.js +64 -1
- package/build/dist/Server/Utils/LLM/LLMService.js.map +1 -1
- package/build/dist/Server/Utils/LogRedaction.js +8 -0
- package/build/dist/Server/Utils/LogRedaction.js.map +1 -1
- package/build/dist/Server/Utils/Logger.js +63 -1
- package/build/dist/Server/Utils/Logger.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/Criteria/DatabaseMonitorCriteria.js +141 -0
- package/build/dist/Server/Utils/Monitor/Criteria/DatabaseMonitorCriteria.js.map +1 -0
- package/build/dist/Server/Utils/Monitor/Criteria/EvaluateOverTime.js +8 -1
- package/build/dist/Server/Utils/Monitor/Criteria/EvaluateOverTime.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/Criteria/SnmpMonitorCriteria.js +51 -1
- package/build/dist/Server/Utils/Monitor/Criteria/SnmpMonitorCriteria.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaDataExtractor.js +7 -0
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaDataExtractor.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js +37 -0
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaObservationBuilder.js +158 -6
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaObservationBuilder.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorMetricUtil.js +33 -0
- package/build/dist/Server/Utils/Monitor/MonitorMetricUtil.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorTemplateUtil.js +32 -0
- package/build/dist/Server/Utils/Monitor/MonitorTemplateUtil.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/NetworkDeviceHydrationUtil.js +330 -21
- package/build/dist/Server/Utils/Monitor/NetworkDeviceHydrationUtil.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/NetworkDeviceMetricUtil.js +55 -10
- package/build/dist/Server/Utils/Monitor/NetworkDeviceMetricUtil.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/NetworkDeviceWalkUtil.js +178 -49
- package/build/dist/Server/Utils/Monitor/NetworkDeviceWalkUtil.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/NetworkInventoryUtil.js +119 -29
- package/build/dist/Server/Utils/Monitor/NetworkInventoryUtil.js.map +1 -1
- package/build/dist/Server/Utils/NetworkDevice/DeviceHealthAggregation.js +30 -17
- package/build/dist/Server/Utils/NetworkDevice/DeviceHealthAggregation.js.map +1 -1
- package/build/dist/Server/Utils/NetworkSite/NetworkSiteHierarchyLock.js +158 -0
- package/build/dist/Server/Utils/NetworkSite/NetworkSiteHierarchyLock.js.map +1 -0
- package/build/dist/Server/Utils/OutboundUserAgent.js +123 -0
- package/build/dist/Server/Utils/OutboundUserAgent.js.map +1 -0
- package/build/dist/Server/Utils/StartServer.js +38 -14
- package/build/dist/Server/Utils/StartServer.js.map +1 -1
- package/build/dist/Server/Utils/Telemetry/CaptureSpan.js +28 -8
- package/build/dist/Server/Utils/Telemetry/CaptureSpan.js.map +1 -1
- package/build/dist/Server/Utils/Telemetry/ErrorClassResolver.js +95 -0
- package/build/dist/Server/Utils/Telemetry/ErrorClassResolver.js.map +1 -0
- package/build/dist/Server/Utils/Telemetry/SpanUtil.js +29 -0
- package/build/dist/Server/Utils/Telemetry/SpanUtil.js.map +1 -1
- package/build/dist/Server/Utils/Telemetry.js +162 -46
- package/build/dist/Server/Utils/Telemetry.js.map +1 -1
- package/build/dist/Types/AI/ExceptionAIClassification.js +10 -24
- package/build/dist/Types/AI/ExceptionAIClassification.js.map +1 -1
- package/build/dist/Types/Email/EmailTemplateType.js +1 -0
- package/build/dist/Types/Email/EmailTemplateType.js.map +1 -1
- package/build/dist/Types/EnterpriseLicense/EnterpriseLicenseUsageSnapshot.js +2 -0
- package/build/dist/Types/EnterpriseLicense/EnterpriseLicenseUsageSnapshot.js.map +1 -0
- package/build/dist/Types/EnterpriseLicense/EnterpriseLicenseUserCountSource.js +7 -0
- package/build/dist/Types/EnterpriseLicense/EnterpriseLicenseUserCountSource.js.map +1 -0
- package/build/dist/Types/Exception/ApiException.js +9 -0
- package/build/dist/Types/Exception/ApiException.js.map +1 -1
- package/build/dist/Types/Exception/BadDataException.js +10 -0
- package/build/dist/Types/Exception/BadDataException.js.map +1 -1
- package/build/dist/Types/Exception/BadRequestException.js +10 -0
- package/build/dist/Types/Exception/BadRequestException.js.map +1 -1
- package/build/dist/Types/Exception/Exception.js +56 -0
- package/build/dist/Types/Exception/Exception.js.map +1 -1
- package/build/dist/Types/Exception/ForbiddenException.js +9 -0
- package/build/dist/Types/Exception/ForbiddenException.js.map +1 -1
- package/build/dist/Types/Exception/NotAuthenticatedException.js +9 -0
- package/build/dist/Types/Exception/NotAuthenticatedException.js.map +1 -1
- package/build/dist/Types/Exception/NotAuthorizedException.js +9 -0
- package/build/dist/Types/Exception/NotAuthorizedException.js.map +1 -1
- package/build/dist/Types/Exception/NotFoundException.js +10 -0
- package/build/dist/Types/Exception/NotFoundException.js.map +1 -1
- package/build/dist/Types/Exception/PayloadTooLargeException.js +10 -0
- package/build/dist/Types/Exception/PayloadTooLargeException.js.map +1 -1
- package/build/dist/Types/Exception/PaymentRequiredException.js +9 -0
- package/build/dist/Types/Exception/PaymentRequiredException.js.map +1 -1
- package/build/dist/Types/Exception/ServiceUnavailableException.js +9 -0
- package/build/dist/Types/Exception/ServiceUnavailableException.js.map +1 -1
- package/build/dist/Types/Exception/SsoAuthorizationException.js +9 -0
- package/build/dist/Types/Exception/SsoAuthorizationException.js.map +1 -1
- package/build/dist/Types/Exception/TenantNotFoundException.js +10 -0
- package/build/dist/Types/Exception/TenantNotFoundException.js.map +1 -1
- package/build/dist/Types/Exception/TimeoutException.js +9 -0
- package/build/dist/Types/Exception/TimeoutException.js.map +1 -1
- package/build/dist/Types/Exception/TooManyRequestsException.js +9 -0
- package/build/dist/Types/Exception/TooManyRequestsException.js.map +1 -1
- package/build/dist/Types/Exception/UnableToReachServer.js +9 -0
- package/build/dist/Types/Exception/UnableToReachServer.js.map +1 -1
- package/build/dist/Types/Exception/WebsiteRequestException.js +9 -0
- package/build/dist/Types/Exception/WebsiteRequestException.js.map +1 -1
- package/build/dist/Types/Monitor/CriteriaFilter.js +45 -2
- package/build/dist/Types/Monitor/CriteriaFilter.js.map +1 -1
- package/build/dist/Types/Monitor/DatabaseMetricCatalog.js +594 -0
- package/build/dist/Types/Monitor/DatabaseMetricCatalog.js.map +1 -0
- package/build/dist/Types/Monitor/DatabaseMonitor/DatabaseMonitorResponse.js +21 -0
- package/build/dist/Types/Monitor/DatabaseMonitor/DatabaseMonitorResponse.js.map +1 -0
- package/build/dist/Types/Monitor/MonitorCriteriaInstance.js +70 -0
- package/build/dist/Types/Monitor/MonitorCriteriaInstance.js.map +1 -1
- package/build/dist/Types/Monitor/MonitorMetricType.js +61 -0
- package/build/dist/Types/Monitor/MonitorMetricType.js.map +1 -1
- package/build/dist/Types/Monitor/MonitorStep.js +54 -0
- package/build/dist/Types/Monitor/MonitorStep.js.map +1 -1
- package/build/dist/Types/Monitor/MonitorStepDatabaseMonitor.js +122 -0
- package/build/dist/Types/Monitor/MonitorStepDatabaseMonitor.js.map +1 -0
- package/build/dist/Types/Monitor/MonitorStepSqlMonitor.js.map +1 -1
- package/build/dist/Types/Monitor/MonitorType.js +45 -1
- package/build/dist/Types/Monitor/MonitorType.js.map +1 -1
- package/build/dist/Types/Monitor/SnmpMonitor/NetworkDeviceAlertPack.js +21 -1
- package/build/dist/Types/Monitor/SnmpMonitor/NetworkDeviceAlertPack.js.map +1 -1
- package/build/dist/Types/Monitor/SqlConnectionConfig.js +2 -0
- package/build/dist/Types/Monitor/SqlConnectionConfig.js.map +1 -0
- package/build/dist/Types/NetworkDevice/NetworkAlertPolicyScope.js +172 -0
- package/build/dist/Types/NetworkDevice/NetworkAlertPolicyScope.js.map +1 -0
- package/build/dist/Types/NetworkDevice/NetworkDeviceMonitoringMethod.js +40 -22
- package/build/dist/Types/NetworkDevice/NetworkDeviceMonitoringMethod.js.map +1 -1
- package/build/dist/Types/NetworkSite/DefaultNetworkSiteTypeHierarchy.js +26 -0
- package/build/dist/Types/NetworkSite/DefaultNetworkSiteTypeHierarchy.js.map +1 -0
- package/build/dist/Types/NotificationSetting/NotificationEmailRollupCategory.js +186 -0
- package/build/dist/Types/NotificationSetting/NotificationEmailRollupCategory.js.map +1 -0
- package/build/dist/Types/NotificationSetting/NotificationEmailRollupPolicy.js +87 -0
- package/build/dist/Types/NotificationSetting/NotificationEmailRollupPolicy.js.map +1 -0
- package/build/dist/Types/Permission.js +80 -0
- package/build/dist/Types/Permission.js.map +1 -1
- package/build/dist/Types/Telemetry/ErrorClass.js +216 -0
- package/build/dist/Types/Telemetry/ErrorClass.js.map +1 -0
- package/build/dist/Types/Telemetry/UnitOfWork.js +59 -0
- package/build/dist/Types/Telemetry/UnitOfWork.js.map +1 -0
- package/build/dist/UI/Components/CommandPalette/CommandPalette.js +2 -7
- package/build/dist/UI/Components/CommandPalette/CommandPalette.js.map +1 -1
- package/build/dist/UI/Components/EditionLabel/EditionLabel.js +3 -0
- package/build/dist/UI/Components/EditionLabel/EditionLabel.js.map +1 -1
- package/build/dist/UI/Components/Modal/Modal.js +2 -7
- package/build/dist/UI/Components/Modal/Modal.js.map +1 -1
- package/build/dist/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.js +39 -0
- package/build/dist/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.js.map +1 -1
- package/build/dist/UI/Components/ProgressBar/ProgressBar.js +12 -1
- package/build/dist/UI/Components/ProgressBar/ProgressBar.js.map +1 -1
- package/build/dist/UI/Components/RadioButtons/BasicRadioButtons.js +6 -6
- package/build/dist/UI/Components/RadioButtons/BasicRadioButtons.js.map +1 -1
- package/build/dist/UI/Components/SideMenu/SideMenu.js +67 -5
- package/build/dist/UI/Components/SideMenu/SideMenu.js.map +1 -1
- package/build/dist/UI/Components/SideMenu/SideMenuItem.js +49 -53
- package/build/dist/UI/Components/SideMenu/SideMenuItem.js.map +1 -1
- package/build/dist/UI/Components/SideMenu/SideMenuSection.js +25 -7
- package/build/dist/UI/Components/SideMenu/SideMenuSection.js.map +1 -1
- package/build/dist/UI/Components/SideOver/SideOver.js +5 -20
- package/build/dist/UI/Components/SideOver/SideOver.js.map +1 -1
- package/build/dist/UI/Utils/PageScrollLock.js +31 -3
- package/build/dist/UI/Utils/PageScrollLock.js.map +1 -1
- package/build/dist/UI/Utils/PermissionGate.js +42 -1
- package/build/dist/UI/Utils/PermissionGate.js.map +1 -1
- package/build/dist/UI/Utils/SensitiveUrlToken.js +97 -0
- package/build/dist/UI/Utils/SensitiveUrlToken.js.map +1 -0
- package/build/dist/UI/Utils/TestLLMProvider.js +4 -5
- package/build/dist/UI/Utils/TestLLMProvider.js.map +1 -1
- package/build/dist/Utils/EnterpriseLicense/EnterpriseLicenseSeats.js +15 -0
- package/build/dist/Utils/EnterpriseLicense/EnterpriseLicenseSeats.js.map +1 -1
- package/build/dist/Utils/EnterpriseLicense/EnterpriseLicenseUsage.js +111 -9
- package/build/dist/Utils/EnterpriseLicense/EnterpriseLicenseUsage.js.map +1 -1
- package/build/dist/Utils/Monitor/MonitorMetricType.js +109 -1
- package/build/dist/Utils/Monitor/MonitorMetricType.js.map +1 -1
- package/build/dist/Utils/Monitor/NetworkTopologyUtil.js +8 -3
- package/build/dist/Utils/Monitor/NetworkTopologyUtil.js.map +1 -1
- package/build/dist/Utils/NetworkDevice/DeviceHealthStateUtil.js +27 -7
- package/build/dist/Utils/NetworkDevice/DeviceHealthStateUtil.js.map +1 -1
- package/build/dist/Utils/NetworkDevice/DeviceReachabilityUtil.js +7 -5
- package/build/dist/Utils/NetworkDevice/DeviceReachabilityUtil.js.map +1 -1
- package/build/dist/Utils/NetworkDevice/NetworkAlertPolicyBootstrapUtil.js +180 -0
- package/build/dist/Utils/NetworkDevice/NetworkAlertPolicyBootstrapUtil.js.map +1 -0
- package/build/dist/Utils/NetworkDevice/SnmpCredentialUtil.js +12 -0
- package/build/dist/Utils/NetworkDevice/SnmpCredentialUtil.js.map +1 -0
- package/build/dist/Utils/NetworkDiscovery/AutoImportRuleMatcher.js +15 -5
- package/build/dist/Utils/NetworkDiscovery/AutoImportRuleMatcher.js.map +1 -1
- package/build/dist/Utils/NetworkDiscovery/DiscoveredDeviceBuilder.js +44 -15
- package/build/dist/Utils/NetworkDiscovery/DiscoveredDeviceBuilder.js.map +1 -1
- package/build/dist/Utils/NetworkDiscovery/DiscoveryImportEligibility.js +52 -23
- package/build/dist/Utils/NetworkDiscovery/DiscoveryImportEligibility.js.map +1 -1
- package/build/dist/Utils/NetworkDiscovery/PingMonitorBuilder.js +85 -13
- package/build/dist/Utils/NetworkDiscovery/PingMonitorBuilder.js.map +1 -1
- package/build/dist/Utils/NetworkSite/SiteStatusRollupUtil.js +30 -15
- package/build/dist/Utils/NetworkSite/SiteStatusRollupUtil.js.map +1 -1
- package/build/dist/Utils/NetworkSite/TypeHierarchyUtil.js +191 -0
- package/build/dist/Utils/NetworkSite/TypeHierarchyUtil.js.map +1 -0
- package/package.json +2 -2
|
@@ -0,0 +1,388 @@
|
|
|
1
|
+
import AggregationType from "../../../Types/BaseDatabase/AggregationType";
|
|
2
|
+
import {
|
|
3
|
+
DatabaseMetricCategory,
|
|
4
|
+
DatabaseMetricDefinition,
|
|
5
|
+
DatabaseMetricGroup,
|
|
6
|
+
getAllDatabaseMetrics,
|
|
7
|
+
getDatabaseMetricById,
|
|
8
|
+
getDatabaseMetricByMetricType,
|
|
9
|
+
getDatabaseMetricCategoryDescription,
|
|
10
|
+
getDatabaseMetricCategoryOrder,
|
|
11
|
+
getDatabaseMetricsByCategory,
|
|
12
|
+
getDatabaseMetricsByGroup,
|
|
13
|
+
getDatabaseMetricsForEngine,
|
|
14
|
+
isDatabaseMetricType,
|
|
15
|
+
} from "../../../Types/Monitor/DatabaseMetricCatalog";
|
|
16
|
+
import MonitorMetricType from "../../../Types/Monitor/MonitorMetricType";
|
|
17
|
+
import SqlDatabaseType, {
|
|
18
|
+
SqlDatabaseTypeUtil,
|
|
19
|
+
} from "../../../Types/Monitor/SqlDatabaseType";
|
|
20
|
+
import { describe, expect, test } from "@jest/globals";
|
|
21
|
+
|
|
22
|
+
/*
|
|
23
|
+
* The catalog is the only place a Database Health metric is declared: title,
|
|
24
|
+
* legend, unit, description, aggregation, display card, collection group and
|
|
25
|
+
* engine support all resolve through it. A row that is malformed here does
|
|
26
|
+
* not throw - it produces a blank chart legend, a chart that is aggregated
|
|
27
|
+
* the wrong way, or a criterion an operator can set but that can never be
|
|
28
|
+
* met. These tests are what turns those into failures.
|
|
29
|
+
*/
|
|
30
|
+
|
|
31
|
+
const DATABASE_METRIC_PREFIX: string = "oneuptime.monitor.database.";
|
|
32
|
+
|
|
33
|
+
const allMetrics: Array<DatabaseMetricDefinition> = getAllDatabaseMetrics();
|
|
34
|
+
const orderedCategories: Array<DatabaseMetricCategory> =
|
|
35
|
+
getDatabaseMetricCategoryOrder();
|
|
36
|
+
const supportedEngines: Array<SqlDatabaseType> =
|
|
37
|
+
SqlDatabaseTypeUtil.getSupportedDatabaseTypes();
|
|
38
|
+
|
|
39
|
+
/*
|
|
40
|
+
* Units are not free text: the summary view and the criteria expectation
|
|
41
|
+
* builder pick a formatter from this value, so an invented unit renders as a
|
|
42
|
+
* raw number with a stray suffix.
|
|
43
|
+
*/
|
|
44
|
+
const KNOWN_UNITS: Array<string> = ["", "%", "s", "ms", "bytes"];
|
|
45
|
+
|
|
46
|
+
describe("DatabaseMetricCatalog", () => {
|
|
47
|
+
test("returns a non-empty catalog", () => {
|
|
48
|
+
expect(allMetrics.length).toBeGreaterThan(0);
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
test("getAllDatabaseMetrics hands back a copy, not the live array", () => {
|
|
52
|
+
const first: Array<DatabaseMetricDefinition> = getAllDatabaseMetrics();
|
|
53
|
+
first.pop();
|
|
54
|
+
expect(getAllDatabaseMetrics().length).toBe(allMetrics.length);
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
test("every definition has the fields the UI renders", () => {
|
|
58
|
+
for (const metric of allMetrics) {
|
|
59
|
+
expect(metric.id.length).toBeGreaterThan(0);
|
|
60
|
+
expect(metric.friendlyName.length).toBeGreaterThan(0);
|
|
61
|
+
expect(metric.description.length).toBeGreaterThan(0);
|
|
62
|
+
expect(metric.metricType.length).toBeGreaterThan(0);
|
|
63
|
+
}
|
|
64
|
+
});
|
|
65
|
+
|
|
66
|
+
test("ids are stable kebab-case identifiers and are unique", () => {
|
|
67
|
+
const ids: Array<string> = allMetrics.map(
|
|
68
|
+
(metric: DatabaseMetricDefinition) => {
|
|
69
|
+
return metric.id;
|
|
70
|
+
},
|
|
71
|
+
);
|
|
72
|
+
|
|
73
|
+
for (const id of ids) {
|
|
74
|
+
expect(id).toMatch(/^database-[a-z0-9-]+$/);
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
expect(new Set(ids).size).toBe(ids.length);
|
|
78
|
+
});
|
|
79
|
+
|
|
80
|
+
test("metric types are unique", () => {
|
|
81
|
+
const metricTypes: Array<MonitorMetricType> = allMetrics.map(
|
|
82
|
+
(metric: DatabaseMetricDefinition) => {
|
|
83
|
+
return metric.metricType;
|
|
84
|
+
},
|
|
85
|
+
);
|
|
86
|
+
|
|
87
|
+
expect(new Set(metricTypes).size).toBe(metricTypes.length);
|
|
88
|
+
});
|
|
89
|
+
|
|
90
|
+
test("every definition uses a declared aggregation, category and group", () => {
|
|
91
|
+
for (const metric of allMetrics) {
|
|
92
|
+
expect(Object.values(AggregationType)).toContain(
|
|
93
|
+
metric.defaultAggregation,
|
|
94
|
+
);
|
|
95
|
+
expect(Object.values(DatabaseMetricCategory)).toContain(metric.category);
|
|
96
|
+
expect(Object.values(DatabaseMetricGroup)).toContain(metric.group);
|
|
97
|
+
}
|
|
98
|
+
});
|
|
99
|
+
|
|
100
|
+
test("every definition uses a unit the formatters understand", () => {
|
|
101
|
+
for (const metric of allMetrics) {
|
|
102
|
+
expect(KNOWN_UNITS).toContain(metric.unit);
|
|
103
|
+
}
|
|
104
|
+
});
|
|
105
|
+
|
|
106
|
+
/*
|
|
107
|
+
* Averaging a counter inside a time bucket produces a number that means
|
|
108
|
+
* nothing. Max returns the latest sample, which the chart differences into
|
|
109
|
+
* a rate. Counters are identified by their description because the series
|
|
110
|
+
* name is not a reliable signal - "connections.total" is a gauge.
|
|
111
|
+
*/
|
|
112
|
+
test("cumulative counters aggregate with Max", () => {
|
|
113
|
+
const counters: Array<DatabaseMetricDefinition> = allMetrics.filter(
|
|
114
|
+
(metric: DatabaseMetricDefinition) => {
|
|
115
|
+
return metric.description.startsWith("Cumulative");
|
|
116
|
+
},
|
|
117
|
+
);
|
|
118
|
+
|
|
119
|
+
// Guards against a wording change quietly emptying the set.
|
|
120
|
+
expect(counters.length).toBeGreaterThanOrEqual(10);
|
|
121
|
+
|
|
122
|
+
for (const counter of counters) {
|
|
123
|
+
expect(counter.defaultAggregation).toBe(AggregationType.Max);
|
|
124
|
+
}
|
|
125
|
+
});
|
|
126
|
+
|
|
127
|
+
/*
|
|
128
|
+
* Open connections is a gauge despite the ".total" suffix its series name
|
|
129
|
+
* inherited. Averaging it is correct; treating it as a counter would chart
|
|
130
|
+
* a meaningless step function.
|
|
131
|
+
*/
|
|
132
|
+
test("open connections is a gauge, not a counter", () => {
|
|
133
|
+
const connections: DatabaseMetricDefinition | null =
|
|
134
|
+
getDatabaseMetricByMetricType(MonitorMetricType.DatabaseConnectionsTotal);
|
|
135
|
+
|
|
136
|
+
expect(connections?.metricType.endsWith(".total")).toBe(true);
|
|
137
|
+
expect(connections?.defaultAggregation).toBe(AggregationType.Avg);
|
|
138
|
+
});
|
|
139
|
+
|
|
140
|
+
test("every definition names at least one engine that can produce it", () => {
|
|
141
|
+
for (const metric of allMetrics) {
|
|
142
|
+
expect(metric.engines.length).toBeGreaterThan(0);
|
|
143
|
+
|
|
144
|
+
for (const engine of metric.engines) {
|
|
145
|
+
expect(supportedEngines).toContain(engine);
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
// A duplicated engine would double a metric in the picker.
|
|
149
|
+
expect(new Set(metric.engines).size).toBe(metric.engines.length);
|
|
150
|
+
}
|
|
151
|
+
});
|
|
152
|
+
});
|
|
153
|
+
|
|
154
|
+
/*
|
|
155
|
+
* The enum carries the series names because MonitorMetricUtil writes rows
|
|
156
|
+
* keyed by MonitorMetricType; the catalog carries everything else. A member
|
|
157
|
+
* added to one and not the other fails silently - a series with no title and
|
|
158
|
+
* no description, or a catalog row that never gets written.
|
|
159
|
+
*/
|
|
160
|
+
describe("catalog and MonitorMetricType do not drift apart", () => {
|
|
161
|
+
test("every database series in the enum has a catalog definition", () => {
|
|
162
|
+
const undeclared: Array<string> = Object.values(MonitorMetricType).filter(
|
|
163
|
+
(metricType: MonitorMetricType) => {
|
|
164
|
+
return (
|
|
165
|
+
metricType.startsWith(DATABASE_METRIC_PREFIX) &&
|
|
166
|
+
getDatabaseMetricByMetricType(metricType) === null
|
|
167
|
+
);
|
|
168
|
+
},
|
|
169
|
+
);
|
|
170
|
+
|
|
171
|
+
expect(undeclared).toEqual([]);
|
|
172
|
+
});
|
|
173
|
+
|
|
174
|
+
test("every catalog definition points at a database series in the enum", () => {
|
|
175
|
+
const enumValues: Array<string> = Object.values(MonitorMetricType);
|
|
176
|
+
|
|
177
|
+
for (const metric of allMetrics) {
|
|
178
|
+
expect(enumValues).toContain(metric.metricType);
|
|
179
|
+
expect(metric.metricType.startsWith(DATABASE_METRIC_PREFIX)).toBe(true);
|
|
180
|
+
}
|
|
181
|
+
});
|
|
182
|
+
|
|
183
|
+
/*
|
|
184
|
+
* isDatabaseMetricType gates a prelude in front of five metadata switches
|
|
185
|
+
* in MonitorMetricTypeUtil. If a shared probe series ever matched, the
|
|
186
|
+
* catalog would hijack the title and unit of every monitor type that uses
|
|
187
|
+
* it, not just Database Health.
|
|
188
|
+
*/
|
|
189
|
+
test("shared probe series are not database metrics", () => {
|
|
190
|
+
for (const metric of allMetrics) {
|
|
191
|
+
expect(isDatabaseMetricType(metric.metricType)).toBe(true);
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
for (const shared of [
|
|
195
|
+
MonitorMetricType.IsOnline,
|
|
196
|
+
MonitorMetricType.ResponseTime,
|
|
197
|
+
MonitorMetricType.CPUUsagePercent,
|
|
198
|
+
MonitorMetricType.ExecutionTime,
|
|
199
|
+
]) {
|
|
200
|
+
expect(isDatabaseMetricType(shared)).toBe(false);
|
|
201
|
+
}
|
|
202
|
+
});
|
|
203
|
+
});
|
|
204
|
+
|
|
205
|
+
describe("categories", () => {
|
|
206
|
+
test("the display order lists every category exactly once", () => {
|
|
207
|
+
expect(new Set(orderedCategories).size).toBe(orderedCategories.length);
|
|
208
|
+
expect([...orderedCategories].sort()).toEqual(
|
|
209
|
+
Object.values(DatabaseMetricCategory).sort(),
|
|
210
|
+
);
|
|
211
|
+
});
|
|
212
|
+
|
|
213
|
+
test("every category has at least one metric and a description", () => {
|
|
214
|
+
for (const category of orderedCategories) {
|
|
215
|
+
expect(getDatabaseMetricsByCategory(category).length).toBeGreaterThan(0);
|
|
216
|
+
expect(
|
|
217
|
+
getDatabaseMetricCategoryDescription(category).length,
|
|
218
|
+
).toBeGreaterThan(0);
|
|
219
|
+
}
|
|
220
|
+
});
|
|
221
|
+
|
|
222
|
+
test("getDatabaseMetricsByCategory returns only that category", () => {
|
|
223
|
+
for (const category of orderedCategories) {
|
|
224
|
+
for (const metric of getDatabaseMetricsByCategory(category)) {
|
|
225
|
+
expect(metric.category).toBe(category);
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
});
|
|
229
|
+
|
|
230
|
+
test("an unknown category has no description rather than undefined", () => {
|
|
231
|
+
expect(
|
|
232
|
+
getDatabaseMetricCategoryDescription(
|
|
233
|
+
"Not A Category" as DatabaseMetricCategory,
|
|
234
|
+
),
|
|
235
|
+
).toBe("");
|
|
236
|
+
});
|
|
237
|
+
});
|
|
238
|
+
|
|
239
|
+
/*
|
|
240
|
+
* Groups are the unit of graceful degradation: the probe runs one query per
|
|
241
|
+
* group and reports a group it could not read. A group with no metrics would
|
|
242
|
+
* be a degradation notice an operator can do nothing with.
|
|
243
|
+
*/
|
|
244
|
+
describe("collection groups", () => {
|
|
245
|
+
test("every declared group has at least one metric", () => {
|
|
246
|
+
for (const group of Object.values(DatabaseMetricGroup)) {
|
|
247
|
+
expect(getDatabaseMetricsByGroup(group).length).toBeGreaterThan(0);
|
|
248
|
+
}
|
|
249
|
+
});
|
|
250
|
+
|
|
251
|
+
test("getDatabaseMetricsByGroup returns only that group", () => {
|
|
252
|
+
for (const group of Object.values(DatabaseMetricGroup)) {
|
|
253
|
+
for (const metric of getDatabaseMetricsByGroup(group)) {
|
|
254
|
+
expect(metric.group).toBe(group);
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
});
|
|
258
|
+
|
|
259
|
+
test("grouping partitions the catalog", () => {
|
|
260
|
+
const grouped: number = Object.values(DatabaseMetricGroup).reduce(
|
|
261
|
+
(total: number, group: DatabaseMetricGroup) => {
|
|
262
|
+
return total + getDatabaseMetricsByGroup(group).length;
|
|
263
|
+
},
|
|
264
|
+
0,
|
|
265
|
+
);
|
|
266
|
+
|
|
267
|
+
expect(grouped).toBe(allMetrics.length);
|
|
268
|
+
});
|
|
269
|
+
});
|
|
270
|
+
|
|
271
|
+
describe("lookups", () => {
|
|
272
|
+
test("getDatabaseMetricByMetricType round-trips every definition", () => {
|
|
273
|
+
for (const metric of allMetrics) {
|
|
274
|
+
expect(getDatabaseMetricByMetricType(metric.metricType)).toEqual(metric);
|
|
275
|
+
}
|
|
276
|
+
});
|
|
277
|
+
|
|
278
|
+
test("getDatabaseMetricById round-trips every definition", () => {
|
|
279
|
+
for (const metric of allMetrics) {
|
|
280
|
+
expect(getDatabaseMetricById(metric.id)).toEqual(metric);
|
|
281
|
+
}
|
|
282
|
+
});
|
|
283
|
+
|
|
284
|
+
/*
|
|
285
|
+
* Null rather than undefined: DatabaseMonitorCriteria returns early on a
|
|
286
|
+
* null definition, which is how a criterion naming a metric that no longer
|
|
287
|
+
* exists stops evaluating instead of throwing on every check.
|
|
288
|
+
*/
|
|
289
|
+
test("unknown keys resolve to null", () => {
|
|
290
|
+
expect(getDatabaseMetricById("does-not-exist")).toBeNull();
|
|
291
|
+
expect(getDatabaseMetricById("")).toBeNull();
|
|
292
|
+
expect(
|
|
293
|
+
getDatabaseMetricByMetricType("not.a.series" as MonitorMetricType),
|
|
294
|
+
).toBeNull();
|
|
295
|
+
});
|
|
296
|
+
});
|
|
297
|
+
|
|
298
|
+
/*
|
|
299
|
+
* Engine support is verified against live servers (PostgreSQL 15.18, MySQL
|
|
300
|
+
* 8.4.11, SQL Server 2022), not inferred from documentation. The picker
|
|
301
|
+
* builds from these lists, so a wrong entry offers an operator a threshold on
|
|
302
|
+
* a series their engine will never write - a criterion that sits permanently
|
|
303
|
+
* unmet and looks like a working alert.
|
|
304
|
+
*/
|
|
305
|
+
describe("engine support", () => {
|
|
306
|
+
test("every supported engine can produce some metric", () => {
|
|
307
|
+
for (const engine of supportedEngines) {
|
|
308
|
+
const metrics: Array<DatabaseMetricDefinition> =
|
|
309
|
+
getDatabaseMetricsForEngine(engine);
|
|
310
|
+
|
|
311
|
+
expect(metrics.length).toBeGreaterThan(0);
|
|
312
|
+
|
|
313
|
+
for (const metric of metrics) {
|
|
314
|
+
expect(metric.engines).toContain(engine);
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
});
|
|
318
|
+
|
|
319
|
+
test("no metric is stranded with no engine that can write it", () => {
|
|
320
|
+
const reachable: Set<MonitorMetricType> = new Set<MonitorMetricType>();
|
|
321
|
+
|
|
322
|
+
for (const engine of supportedEngines) {
|
|
323
|
+
for (const metric of getDatabaseMetricsForEngine(engine)) {
|
|
324
|
+
reachable.add(metric.metricType);
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
expect(reachable.size).toBe(allMetrics.length);
|
|
329
|
+
});
|
|
330
|
+
|
|
331
|
+
test("PostgreSQL-only maintenance metrics are absent from MySQL", () => {
|
|
332
|
+
const mysql: Array<MonitorMetricType> = getDatabaseMetricsForEngine(
|
|
333
|
+
SqlDatabaseType.MySQL,
|
|
334
|
+
).map((metric: DatabaseMetricDefinition) => {
|
|
335
|
+
return metric.metricType;
|
|
336
|
+
});
|
|
337
|
+
|
|
338
|
+
expect(mysql).not.toContain(
|
|
339
|
+
MonitorMetricType.DatabaseTransactionIdUsedPercent,
|
|
340
|
+
);
|
|
341
|
+
expect(mysql).not.toContain(MonitorMetricType.DatabaseDeadTuples);
|
|
342
|
+
expect(mysql).toContain(MonitorMetricType.DatabaseTempDiskTablesTotal);
|
|
343
|
+
});
|
|
344
|
+
|
|
345
|
+
// Stock MySQL exposes no deadlock counter at all.
|
|
346
|
+
test("deadlocks are PostgreSQL and SQL Server only", () => {
|
|
347
|
+
const deadlocks: DatabaseMetricDefinition | null =
|
|
348
|
+
getDatabaseMetricByMetricType(MonitorMetricType.DatabaseDeadlocksTotal);
|
|
349
|
+
|
|
350
|
+
expect(deadlocks?.engines).toEqual([
|
|
351
|
+
SqlDatabaseType.PostgreSQL,
|
|
352
|
+
SqlDatabaseType.MicrosoftSqlServer,
|
|
353
|
+
]);
|
|
354
|
+
});
|
|
355
|
+
|
|
356
|
+
/*
|
|
357
|
+
* SQL Server's `user connections` setting defaults to 0, meaning
|
|
358
|
+
* unlimited, so a percentage of the ceiling has no denominator there.
|
|
359
|
+
*/
|
|
360
|
+
test("the connection ceiling and its percentage skip SQL Server", () => {
|
|
361
|
+
for (const metricType of [
|
|
362
|
+
MonitorMetricType.DatabaseConnectionsMax,
|
|
363
|
+
MonitorMetricType.DatabaseConnectionsUsedPercent,
|
|
364
|
+
]) {
|
|
365
|
+
expect(getDatabaseMetricByMetricType(metricType)?.engines).not.toContain(
|
|
366
|
+
SqlDatabaseType.MicrosoftSqlServer,
|
|
367
|
+
);
|
|
368
|
+
}
|
|
369
|
+
});
|
|
370
|
+
|
|
371
|
+
/*
|
|
372
|
+
* The degradation counter is produced by the collector, not read from the
|
|
373
|
+
* engine, so it must survive on every engine - it is the series an
|
|
374
|
+
* operator alerts on to notice they have lost visibility.
|
|
375
|
+
*/
|
|
376
|
+
test("the failed-group counter is available on every engine", () => {
|
|
377
|
+
const failed: DatabaseMetricDefinition | null =
|
|
378
|
+
getDatabaseMetricByMetricType(
|
|
379
|
+
MonitorMetricType.DatabaseMetricGroupsFailed,
|
|
380
|
+
);
|
|
381
|
+
|
|
382
|
+
expect(failed).not.toBeNull();
|
|
383
|
+
|
|
384
|
+
for (const engine of supportedEngines) {
|
|
385
|
+
expect(failed?.engines).toContain(engine);
|
|
386
|
+
}
|
|
387
|
+
});
|
|
388
|
+
});
|
|
@@ -0,0 +1,243 @@
|
|
|
1
|
+
import { DatabaseMetricGroup } from "../../../Types/Monitor/DatabaseMetricCatalog";
|
|
2
|
+
import { JSONObject } from "../../../Types/JSON";
|
|
3
|
+
import MonitorStepDatabaseMonitor, {
|
|
4
|
+
DEFAULT_DATABASE_CONNECTION_TIMEOUT_IN_MS,
|
|
5
|
+
DEFAULT_DATABASE_METRIC_GROUPS,
|
|
6
|
+
DEFAULT_DATABASE_STATEMENT_TIMEOUT_IN_MS,
|
|
7
|
+
MonitorStepDatabaseMonitorUtil,
|
|
8
|
+
} from "../../../Types/Monitor/MonitorStepDatabaseMonitor";
|
|
9
|
+
import {
|
|
10
|
+
MAX_SQL_CONNECTION_TIMEOUT_IN_MS,
|
|
11
|
+
MAX_SQL_STATEMENT_TIMEOUT_IN_MS,
|
|
12
|
+
} from "../../../Types/Monitor/MonitorStepSqlMonitor";
|
|
13
|
+
import SqlDatabaseType from "../../../Types/Monitor/SqlDatabaseType";
|
|
14
|
+
import { describe, expect, test } from "@jest/globals";
|
|
15
|
+
|
|
16
|
+
describe("MonitorStepDatabaseMonitorUtil", () => {
|
|
17
|
+
describe("getDefault", () => {
|
|
18
|
+
test("starts on PostgreSQL with its own port and validated TLS", () => {
|
|
19
|
+
const config: MonitorStepDatabaseMonitor =
|
|
20
|
+
MonitorStepDatabaseMonitorUtil.getDefault();
|
|
21
|
+
|
|
22
|
+
expect(config.databaseType).toBe(SqlDatabaseType.PostgreSQL);
|
|
23
|
+
expect(config.port).toBe(5432);
|
|
24
|
+
// Opting out of chain validation must be a decision, never a default.
|
|
25
|
+
expect(config.rejectUnauthorizedSsl).toBe(true);
|
|
26
|
+
expect(config.useWindowsIntegratedAuthentication).toBe(false);
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
test("collects every metric group by default", () => {
|
|
30
|
+
/*
|
|
31
|
+
* Safe to default on only because a group the login cannot read
|
|
32
|
+
* reports itself unavailable instead of failing the check. If that
|
|
33
|
+
* contract ever changes, this default has to change with it.
|
|
34
|
+
*/
|
|
35
|
+
const config: MonitorStepDatabaseMonitor =
|
|
36
|
+
MonitorStepDatabaseMonitorUtil.getDefault();
|
|
37
|
+
|
|
38
|
+
expect(config.enabledMetricGroups).toEqual(
|
|
39
|
+
DEFAULT_DATABASE_METRIC_GROUPS,
|
|
40
|
+
);
|
|
41
|
+
expect(config.enabledMetricGroups).toHaveLength(
|
|
42
|
+
Object.values(DatabaseMetricGroup).length,
|
|
43
|
+
);
|
|
44
|
+
});
|
|
45
|
+
|
|
46
|
+
test("returns a fresh group array each time", () => {
|
|
47
|
+
// A shared array would let one monitor's edit reconfigure every other.
|
|
48
|
+
const first: MonitorStepDatabaseMonitor =
|
|
49
|
+
MonitorStepDatabaseMonitorUtil.getDefault();
|
|
50
|
+
const second: MonitorStepDatabaseMonitor =
|
|
51
|
+
MonitorStepDatabaseMonitorUtil.getDefault();
|
|
52
|
+
|
|
53
|
+
first.enabledMetricGroups.pop();
|
|
54
|
+
|
|
55
|
+
expect(second.enabledMetricGroups).toEqual(
|
|
56
|
+
DEFAULT_DATABASE_METRIC_GROUPS,
|
|
57
|
+
);
|
|
58
|
+
expect(DEFAULT_DATABASE_METRIC_GROUPS).toHaveLength(
|
|
59
|
+
Object.values(DatabaseMetricGroup).length,
|
|
60
|
+
);
|
|
61
|
+
});
|
|
62
|
+
|
|
63
|
+
test("defaults to a tighter statement timeout than a user query would get", () => {
|
|
64
|
+
/*
|
|
65
|
+
* Health queries are introspection and should return in milliseconds.
|
|
66
|
+
* If pg_stat_activity takes ten seconds the useful signal is "this
|
|
67
|
+
* server is in trouble", not a longer wait.
|
|
68
|
+
*/
|
|
69
|
+
const config: MonitorStepDatabaseMonitor =
|
|
70
|
+
MonitorStepDatabaseMonitorUtil.getDefault();
|
|
71
|
+
|
|
72
|
+
expect(config.statementTimeoutInMs).toBe(
|
|
73
|
+
DEFAULT_DATABASE_STATEMENT_TIMEOUT_IN_MS,
|
|
74
|
+
);
|
|
75
|
+
expect(config.statementTimeoutInMs).toBeLessThan(
|
|
76
|
+
MAX_SQL_STATEMENT_TIMEOUT_IN_MS,
|
|
77
|
+
);
|
|
78
|
+
expect(config.connectionTimeoutInMs).toBe(
|
|
79
|
+
DEFAULT_DATABASE_CONNECTION_TIMEOUT_IN_MS,
|
|
80
|
+
);
|
|
81
|
+
});
|
|
82
|
+
});
|
|
83
|
+
|
|
84
|
+
describe("sanitizeMetricGroups", () => {
|
|
85
|
+
test("keeps recognized groups and drops anything else", () => {
|
|
86
|
+
expect(
|
|
87
|
+
MonitorStepDatabaseMonitorUtil.sanitizeMetricGroups([
|
|
88
|
+
DatabaseMetricGroup.Locks,
|
|
89
|
+
"Telepathy",
|
|
90
|
+
DatabaseMetricGroup.Storage,
|
|
91
|
+
42,
|
|
92
|
+
null,
|
|
93
|
+
]),
|
|
94
|
+
// Canonical order, not input order: Locks precedes Storage.
|
|
95
|
+
).toEqual([DatabaseMetricGroup.Locks, DatabaseMetricGroup.Storage]);
|
|
96
|
+
});
|
|
97
|
+
|
|
98
|
+
test("normalizes to the canonical order regardless of input order", () => {
|
|
99
|
+
// Keeps the config form and the collector iterating in one order.
|
|
100
|
+
expect(
|
|
101
|
+
MonitorStepDatabaseMonitorUtil.sanitizeMetricGroups([
|
|
102
|
+
DatabaseMetricGroup.Maintenance,
|
|
103
|
+
DatabaseMetricGroup.Connections,
|
|
104
|
+
]),
|
|
105
|
+
).toEqual([
|
|
106
|
+
DatabaseMetricGroup.Connections,
|
|
107
|
+
DatabaseMetricGroup.Maintenance,
|
|
108
|
+
]);
|
|
109
|
+
});
|
|
110
|
+
|
|
111
|
+
test("de-duplicates repeated groups", () => {
|
|
112
|
+
expect(
|
|
113
|
+
MonitorStepDatabaseMonitorUtil.sanitizeMetricGroups([
|
|
114
|
+
DatabaseMetricGroup.Locks,
|
|
115
|
+
DatabaseMetricGroup.Locks,
|
|
116
|
+
]),
|
|
117
|
+
).toEqual([DatabaseMetricGroup.Locks]);
|
|
118
|
+
});
|
|
119
|
+
|
|
120
|
+
test.each([
|
|
121
|
+
["an empty list", []],
|
|
122
|
+
["a list of only unknown values", ["nope", "also-nope"]],
|
|
123
|
+
["a non-array", "Locks"],
|
|
124
|
+
["undefined", undefined],
|
|
125
|
+
["null", null],
|
|
126
|
+
])("falls back to every group for %s", (_label: string, input: unknown) => {
|
|
127
|
+
/*
|
|
128
|
+
* A monitor that silently collects nothing is worse than one that
|
|
129
|
+
* collects what it can, so an unusable list means "everything"
|
|
130
|
+
* rather than "nothing".
|
|
131
|
+
*/
|
|
132
|
+
expect(
|
|
133
|
+
MonitorStepDatabaseMonitorUtil.sanitizeMetricGroups(input),
|
|
134
|
+
).toEqual(DEFAULT_DATABASE_METRIC_GROUPS);
|
|
135
|
+
});
|
|
136
|
+
});
|
|
137
|
+
|
|
138
|
+
describe("fromJSON", () => {
|
|
139
|
+
test("round-trips a full configuration through toJSON", () => {
|
|
140
|
+
const config: MonitorStepDatabaseMonitor = {
|
|
141
|
+
...MonitorStepDatabaseMonitorUtil.getDefault(),
|
|
142
|
+
databaseType: SqlDatabaseType.MicrosoftSqlServer,
|
|
143
|
+
host: "sql.internal",
|
|
144
|
+
port: 1433,
|
|
145
|
+
databaseName: "orders",
|
|
146
|
+
username: "monitoring",
|
|
147
|
+
password: "{{monitorSecrets.dbPassword}}",
|
|
148
|
+
useSsl: true,
|
|
149
|
+
enabledMetricGroups: [
|
|
150
|
+
DatabaseMetricGroup.Connections,
|
|
151
|
+
DatabaseMetricGroup.Replication,
|
|
152
|
+
],
|
|
153
|
+
};
|
|
154
|
+
|
|
155
|
+
const restored: MonitorStepDatabaseMonitor =
|
|
156
|
+
MonitorStepDatabaseMonitorUtil.fromJSON(
|
|
157
|
+
MonitorStepDatabaseMonitorUtil.toJSON(config),
|
|
158
|
+
);
|
|
159
|
+
|
|
160
|
+
expect(restored).toEqual(config);
|
|
161
|
+
});
|
|
162
|
+
|
|
163
|
+
test("preserves a monitor-secret reference verbatim", () => {
|
|
164
|
+
/*
|
|
165
|
+
* The server resolves {{monitorSecrets.name}} on the way to the probe.
|
|
166
|
+
* Any mangling here turns into an authentication failure that looks
|
|
167
|
+
* like a wrong password.
|
|
168
|
+
*/
|
|
169
|
+
const restored: MonitorStepDatabaseMonitor =
|
|
170
|
+
MonitorStepDatabaseMonitorUtil.fromJSON({
|
|
171
|
+
host: "db.internal",
|
|
172
|
+
password: "{{monitorSecrets.dbPassword}}",
|
|
173
|
+
} as JSONObject);
|
|
174
|
+
|
|
175
|
+
expect(restored.password).toBe("{{monitorSecrets.dbPassword}}");
|
|
176
|
+
});
|
|
177
|
+
|
|
178
|
+
test("clamps timeouts to the shared SQL ceilings", () => {
|
|
179
|
+
const restored: MonitorStepDatabaseMonitor =
|
|
180
|
+
MonitorStepDatabaseMonitorUtil.fromJSON({
|
|
181
|
+
statementTimeoutInMs: 999999,
|
|
182
|
+
connectionTimeoutInMs: 999999,
|
|
183
|
+
} as JSONObject);
|
|
184
|
+
|
|
185
|
+
expect(restored.statementTimeoutInMs).toBe(
|
|
186
|
+
MAX_SQL_STATEMENT_TIMEOUT_IN_MS,
|
|
187
|
+
);
|
|
188
|
+
expect(restored.connectionTimeoutInMs).toBe(
|
|
189
|
+
MAX_SQL_CONNECTION_TIMEOUT_IN_MS,
|
|
190
|
+
);
|
|
191
|
+
});
|
|
192
|
+
|
|
193
|
+
test("falls back to safe values for an empty payload", () => {
|
|
194
|
+
const restored: MonitorStepDatabaseMonitor =
|
|
195
|
+
MonitorStepDatabaseMonitorUtil.fromJSON({});
|
|
196
|
+
|
|
197
|
+
expect(restored.databaseType).toBe(SqlDatabaseType.PostgreSQL);
|
|
198
|
+
expect(restored.rejectUnauthorizedSsl).toBe(true);
|
|
199
|
+
expect(restored.enabledMetricGroups).toEqual(
|
|
200
|
+
DEFAULT_DATABASE_METRIC_GROUPS,
|
|
201
|
+
);
|
|
202
|
+
});
|
|
203
|
+
|
|
204
|
+
test("treats an explicitly false rejectUnauthorizedSsl as a real choice", () => {
|
|
205
|
+
/*
|
|
206
|
+
* Distinguishing "absent" from "false" matters: absent must default to
|
|
207
|
+
* validating the chain, but a user who turned validation off for a
|
|
208
|
+
* self-signed certificate must keep that setting.
|
|
209
|
+
*/
|
|
210
|
+
expect(
|
|
211
|
+
MonitorStepDatabaseMonitorUtil.fromJSON({
|
|
212
|
+
rejectUnauthorizedSsl: false,
|
|
213
|
+
} as JSONObject).rejectUnauthorizedSsl,
|
|
214
|
+
).toBe(false);
|
|
215
|
+
|
|
216
|
+
expect(
|
|
217
|
+
MonitorStepDatabaseMonitorUtil.fromJSON({}).rejectUnauthorizedSsl,
|
|
218
|
+
).toBe(true);
|
|
219
|
+
});
|
|
220
|
+
|
|
221
|
+
test("normalizes an unusable group list rather than trusting it", () => {
|
|
222
|
+
expect(
|
|
223
|
+
MonitorStepDatabaseMonitorUtil.fromJSON({
|
|
224
|
+
enabledMetricGroups: ["Locks", "not-a-group"],
|
|
225
|
+
} as JSONObject).enabledMetricGroups,
|
|
226
|
+
).toEqual([DatabaseMetricGroup.Locks]);
|
|
227
|
+
});
|
|
228
|
+
});
|
|
229
|
+
|
|
230
|
+
describe("toJSON", () => {
|
|
231
|
+
test("copies the group array instead of aliasing it", () => {
|
|
232
|
+
const config: MonitorStepDatabaseMonitor =
|
|
233
|
+
MonitorStepDatabaseMonitorUtil.getDefault();
|
|
234
|
+
|
|
235
|
+
const json: JSONObject = MonitorStepDatabaseMonitorUtil.toJSON(config);
|
|
236
|
+
(json["enabledMetricGroups"] as Array<DatabaseMetricGroup>).pop();
|
|
237
|
+
|
|
238
|
+
expect(config.enabledMetricGroups).toEqual(
|
|
239
|
+
DEFAULT_DATABASE_METRIC_GROUPS,
|
|
240
|
+
);
|
|
241
|
+
});
|
|
242
|
+
});
|
|
243
|
+
});
|
|
@@ -113,6 +113,7 @@ describe("MonitorStep.getDefaultMonitorStep telemetry sub-config seeding", () =>
|
|
|
113
113
|
MonitorType.SyntheticMonitor,
|
|
114
114
|
MonitorType.CustomJavaScriptCode,
|
|
115
115
|
MonitorType.SQLQuery,
|
|
116
|
+
MonitorType.Database,
|
|
116
117
|
MonitorType.Manual,
|
|
117
118
|
MonitorType.Profiles,
|
|
118
119
|
MonitorType.Kubernetes,
|
|
@@ -124,6 +124,7 @@ describe("MonitorTypeHelper", () => {
|
|
|
124
124
|
MonitorType.DNSSEC,
|
|
125
125
|
MonitorType.Domain,
|
|
126
126
|
MonitorType.ExternalStatusPage,
|
|
127
|
+
MonitorType.Database,
|
|
127
128
|
])("returns true for %s", (monitorType: MonitorType) => {
|
|
128
129
|
expect(MonitorTypeHelper.isProbableMonitor(monitorType)).toBe(true);
|
|
129
130
|
});
|
|
@@ -12,7 +12,7 @@ import {
|
|
|
12
12
|
} from "../../../UI/Components/CardSelect/CardSelect";
|
|
13
13
|
|
|
14
14
|
/*
|
|
15
|
-
* The monitor type picker offers
|
|
15
|
+
* The monitor type picker offers 31 types. Whether someone finds the right one
|
|
16
16
|
* comes down to whether the words they already use - "k8s", "postgres",
|
|
17
17
|
* "heartbeat", "tls" - are attached to the card, because none of them appear
|
|
18
18
|
* in its title or its copy. These are the searches this catalog promises to
|
|
@@ -192,8 +192,8 @@ describe("MonitorType keywords", () => {
|
|
|
192
192
|
describe("card copy is scannable", () => {
|
|
193
193
|
/*
|
|
194
194
|
* Every description used to open with "This monitor type lets you
|
|
195
|
-
* monitor", so the first five words of
|
|
196
|
-
* carried nothing. Reading the grid meant skipping them
|
|
195
|
+
* monitor", so the first five words of every card were identical and
|
|
196
|
+
* carried nothing. Reading the grid meant skipping them on every card.
|
|
197
197
|
*/
|
|
198
198
|
test("no description opens with the old boilerplate", () => {
|
|
199
199
|
for (const props of allProps) {
|
|
@@ -230,10 +230,19 @@ describe("MonitorType keywords", () => {
|
|
|
230
230
|
["k8s", MonitorType.Kubernetes],
|
|
231
231
|
["kubernetes", MonitorType.Kubernetes],
|
|
232
232
|
["eks", MonitorType.Kubernetes],
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
233
|
+
/*
|
|
234
|
+
* Both database cards answer to the engine names. Someone typing an
|
|
235
|
+
* engine into a monitoring product wants its health series, not the
|
|
236
|
+
* escape hatch for a query they have to write themselves - so the
|
|
237
|
+
* engine words rank Database Health first, and SQL Query keeps the
|
|
238
|
+
* searches that describe what only it does.
|
|
239
|
+
*/
|
|
240
|
+
["postgres", MonitorType.Database],
|
|
241
|
+
["postgresql", MonitorType.Database],
|
|
242
|
+
["mysql", MonitorType.Database],
|
|
243
|
+
["database", MonitorType.Database],
|
|
244
|
+
["query", MonitorType.SQLQuery],
|
|
245
|
+
["row count", MonitorType.SQLQuery],
|
|
237
246
|
["heartbeat", MonitorType.IncomingRequest],
|
|
238
247
|
["cron", MonitorType.IncomingRequest],
|
|
239
248
|
["webhook", MonitorType.IncomingRequest],
|