@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,83 @@
|
|
|
1
|
+
import ProbeAttempt from "../../Probe/ProbeAttempt";
|
|
2
|
+
import { DatabaseMetricGroup } from "../DatabaseMetricCatalog";
|
|
3
|
+
import MonitorMetricType from "../MonitorMetricType";
|
|
4
|
+
|
|
5
|
+
/*
|
|
6
|
+
* Why a metric group produced nothing. Kept as a closed set so the dashboard
|
|
7
|
+
* can render an actionable message (and, for MissingPermission, the exact
|
|
8
|
+
* GRANT to run) instead of echoing a driver error at the operator.
|
|
9
|
+
*/
|
|
10
|
+
export enum DatabaseMetricGroupUnavailableReason {
|
|
11
|
+
// The monitoring login lacks the grant this group's views need.
|
|
12
|
+
MissingPermission = "MissingPermission",
|
|
13
|
+
/*
|
|
14
|
+
* The engine does not expose this data at all: an older major version, a
|
|
15
|
+
* disabled extension, or a feature the engine simply does not have (there
|
|
16
|
+
* is no deadlock counter in stock MySQL, for instance).
|
|
17
|
+
*/
|
|
18
|
+
NotSupportedByEngine = "NotSupportedByEngine",
|
|
19
|
+
// The group's query exceeded the statement timeout.
|
|
20
|
+
Timeout = "Timeout",
|
|
21
|
+
// Anything else. `message` carries the sanitized detail.
|
|
22
|
+
Error = "Error",
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export interface DatabaseMetricGroupStatus {
|
|
26
|
+
group: DatabaseMetricGroup;
|
|
27
|
+
reason: DatabaseMetricGroupUnavailableReason;
|
|
28
|
+
/*
|
|
29
|
+
* Sanitized, operator-facing explanation. Never contains a DSN, a
|
|
30
|
+
* password, or a raw driver error - SqlMonitor.sanitizeError is applied
|
|
31
|
+
* before anything lands here.
|
|
32
|
+
*/
|
|
33
|
+
message: string;
|
|
34
|
+
/*
|
|
35
|
+
* The grant that would fix it, when we know it (e.g.
|
|
36
|
+
* "GRANT pg_read_all_stats TO monitoring_user"). Rendered verbatim in the
|
|
37
|
+
* monitor's summary view so the fix is copy-pasteable.
|
|
38
|
+
*/
|
|
39
|
+
remediation?: string | undefined;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/*
|
|
43
|
+
* What a probe reports back for one Database Health check.
|
|
44
|
+
*
|
|
45
|
+
* The central contract here is that COLLECTION IS PARTIAL BY DESIGN.
|
|
46
|
+
* `isOnline` answers exactly one question - could we connect and run the
|
|
47
|
+
* baseline probe query - and nothing else in this payload can change it. A
|
|
48
|
+
* login without VIEW SERVER STATE, a replica group that times out, or an
|
|
49
|
+
* engine that has no deadlock counter all produce entries in
|
|
50
|
+
* `unavailableGroups` while the monitor stays online, because the database
|
|
51
|
+
* being monitored is fine; it is our visibility into it that is reduced.
|
|
52
|
+
*
|
|
53
|
+
* No rows of customer data ever appear here. Values are numeric aggregates
|
|
54
|
+
* read from engine catalog views, keyed by the metric series they feed.
|
|
55
|
+
*/
|
|
56
|
+
export default interface DatabaseMonitorResponse {
|
|
57
|
+
isOnline: boolean;
|
|
58
|
+
// Time to connect and run the baseline probe query.
|
|
59
|
+
responseTimeInMs: number;
|
|
60
|
+
failureCause: string;
|
|
61
|
+
/*
|
|
62
|
+
* Collected values, keyed by the series each one writes. A metric absent
|
|
63
|
+
* from this map is simply not written - the engine did not report it,
|
|
64
|
+
* or its group was skipped. Never zero-fill: a missing replication lag
|
|
65
|
+
* and a replication lag of zero mean opposite things.
|
|
66
|
+
*/
|
|
67
|
+
metrics: Partial<Record<MonitorMetricType, number>>;
|
|
68
|
+
// Groups that ran and produced values.
|
|
69
|
+
collectedGroups: Array<DatabaseMetricGroup>;
|
|
70
|
+
// Groups that could not be collected, with the reason and the fix.
|
|
71
|
+
unavailableGroups: Array<DatabaseMetricGroupStatus>;
|
|
72
|
+
/*
|
|
73
|
+
* Engine version string as the server reports it, for the summary view.
|
|
74
|
+
* Also what the collector version-gates on (PostgreSQL moved the
|
|
75
|
+
* checkpoint counters out of pg_stat_bgwriter in 17, for example).
|
|
76
|
+
*/
|
|
77
|
+
engineVersion?: string | undefined;
|
|
78
|
+
// Sanitized connection error, present only when isOnline is false.
|
|
79
|
+
connectionError: string | null;
|
|
80
|
+
isTimeout?: boolean | undefined;
|
|
81
|
+
probeAttempts?: Array<ProbeAttempt> | undefined;
|
|
82
|
+
totalAttempts?: number | undefined;
|
|
83
|
+
}
|
|
@@ -568,6 +568,40 @@ export default class MonitorCriteriaInstance extends DatabaseProperty {
|
|
|
568
568
|
return monitorCriteriaInstance;
|
|
569
569
|
}
|
|
570
570
|
|
|
571
|
+
if (arg.monitorType === MonitorType.Database) {
|
|
572
|
+
const monitorCriteriaInstance: MonitorCriteriaInstance =
|
|
573
|
+
new MonitorCriteriaInstance();
|
|
574
|
+
|
|
575
|
+
/*
|
|
576
|
+
* Online means one thing only: the probe connected and collected. It
|
|
577
|
+
* deliberately does NOT assert anything about the metrics. A database
|
|
578
|
+
* with a 97% cache hit ratio is not "down", and a monitor that treats
|
|
579
|
+
* every threshold as an outage teaches its operators to ignore it.
|
|
580
|
+
* Metric thresholds ship as templates the user opts into instead.
|
|
581
|
+
*/
|
|
582
|
+
monitorCriteriaInstance.data = {
|
|
583
|
+
id: ObjectID.generate().toString(),
|
|
584
|
+
monitorStatusId: arg.monitorStatusId,
|
|
585
|
+
filterCondition: FilterCondition.All,
|
|
586
|
+
filters: [
|
|
587
|
+
{
|
|
588
|
+
checkOn: CheckOn.DatabaseIsOnline,
|
|
589
|
+
filterType: FilterType.True,
|
|
590
|
+
value: undefined,
|
|
591
|
+
},
|
|
592
|
+
],
|
|
593
|
+
incidents: [],
|
|
594
|
+
alerts: [],
|
|
595
|
+
createAlerts: false,
|
|
596
|
+
changeMonitorStatus: true,
|
|
597
|
+
createIncidents: false,
|
|
598
|
+
name: `Check if ${arg.monitorName} is online`,
|
|
599
|
+
description: `This criteria checks if ${arg.monitorName} is reachable and its health metrics were collected`,
|
|
600
|
+
};
|
|
601
|
+
|
|
602
|
+
return monitorCriteriaInstance;
|
|
603
|
+
}
|
|
604
|
+
|
|
571
605
|
if (arg.monitorType === MonitorType.Domain) {
|
|
572
606
|
const monitorCriteriaInstance: MonitorCriteriaInstance =
|
|
573
607
|
new MonitorCriteriaInstance();
|
|
@@ -801,6 +835,48 @@ export default class MonitorCriteriaInstance extends DatabaseProperty {
|
|
|
801
835
|
};
|
|
802
836
|
}
|
|
803
837
|
|
|
838
|
+
if (arg.monitorType === MonitorType.Database) {
|
|
839
|
+
monitorCriteriaInstance.data = {
|
|
840
|
+
id: ObjectID.generate().toString(),
|
|
841
|
+
monitorStatusId: arg.monitorStatusId,
|
|
842
|
+
filterCondition: FilterCondition.Any,
|
|
843
|
+
filters: [
|
|
844
|
+
{
|
|
845
|
+
checkOn: CheckOn.DatabaseIsOnline,
|
|
846
|
+
filterType: FilterType.False,
|
|
847
|
+
value: undefined,
|
|
848
|
+
},
|
|
849
|
+
],
|
|
850
|
+
incidents: [
|
|
851
|
+
{
|
|
852
|
+
title: `${arg.monitorName} is offline`,
|
|
853
|
+
description: `${arg.monitorName} is not reachable, or the health check could not connect.`,
|
|
854
|
+
incidentSeverityId: arg.incidentSeverityId,
|
|
855
|
+
autoResolveIncident: true,
|
|
856
|
+
id: ObjectID.generate().toString(),
|
|
857
|
+
onCallPolicyIds: [],
|
|
858
|
+
},
|
|
859
|
+
],
|
|
860
|
+
changeMonitorStatus: true,
|
|
861
|
+
createIncidents: true,
|
|
862
|
+
createAlerts: false,
|
|
863
|
+
alerts: [
|
|
864
|
+
{
|
|
865
|
+
title: `${arg.monitorName} is offline`,
|
|
866
|
+
description: `${arg.monitorName} is not reachable, or the health check could not connect.`,
|
|
867
|
+
alertSeverityId: arg.alertSeverityId,
|
|
868
|
+
autoResolveAlert: true,
|
|
869
|
+
id: ObjectID.generate().toString(),
|
|
870
|
+
onCallPolicyIds: [],
|
|
871
|
+
},
|
|
872
|
+
],
|
|
873
|
+
name: `Check if ${arg.monitorName} is offline`,
|
|
874
|
+
description: `This criteria checks if ${arg.monitorName} is offline`,
|
|
875
|
+
};
|
|
876
|
+
|
|
877
|
+
return monitorCriteriaInstance;
|
|
878
|
+
}
|
|
879
|
+
|
|
804
880
|
if (arg.monitorType === MonitorType.SQLQuery) {
|
|
805
881
|
monitorCriteriaInstance.data = {
|
|
806
882
|
id: ObjectID.generate().toString(),
|
|
@@ -83,6 +83,77 @@ enum MonitorMetricType {
|
|
|
83
83
|
|
|
84
84
|
HostUptimeSeconds = "oneuptime.monitor.host.uptime.seconds",
|
|
85
85
|
ProcessCountTotal = "oneuptime.monitor.process.count.total",
|
|
86
|
+
|
|
87
|
+
/*
|
|
88
|
+
* Database Health monitor series. A probe connects to PostgreSQL / MySQL /
|
|
89
|
+
* Microsoft SQL Server on a schedule and runs built-in read-only catalog
|
|
90
|
+
* queries; each value below is one normalized series.
|
|
91
|
+
*
|
|
92
|
+
* Not every engine can produce every series - MySQL has no deadlock
|
|
93
|
+
* counter, SQL Server has no fixed connection ceiling by default, and
|
|
94
|
+
* PostgreSQL's I/O timings need track_io_timing on. The authoritative
|
|
95
|
+
* per-engine support matrix lives in DatabaseMetricCatalog.ts, which is
|
|
96
|
+
* also the single source of truth for each series' title, unit,
|
|
97
|
+
* aggregation and display category. Add a member here and an entry there
|
|
98
|
+
* together - a member without a catalog entry is invisible to the UI and
|
|
99
|
+
* fails the metric-invariant tests.
|
|
100
|
+
*/
|
|
101
|
+
DatabaseUptimeSeconds = "oneuptime.monitor.database.uptime.seconds",
|
|
102
|
+
|
|
103
|
+
DatabaseConnectionsTotal = "oneuptime.monitor.database.connections.total",
|
|
104
|
+
DatabaseConnectionsActive = "oneuptime.monitor.database.connections.active",
|
|
105
|
+
DatabaseConnectionsMax = "oneuptime.monitor.database.connections.max",
|
|
106
|
+
DatabaseConnectionsUsedPercent = "oneuptime.monitor.database.connections.used.percent",
|
|
107
|
+
DatabaseConnectionsIdleInTransaction = "oneuptime.monitor.database.connections.idle.in.transaction",
|
|
108
|
+
DatabaseConnectionsAbortedTotal = "oneuptime.monitor.database.connections.aborted.total",
|
|
109
|
+
|
|
110
|
+
DatabaseLongestQuerySeconds = "oneuptime.monitor.database.query.longest.seconds",
|
|
111
|
+
DatabaseLongestTransactionSeconds = "oneuptime.monitor.database.transaction.longest.seconds",
|
|
112
|
+
DatabaseOpenTransactions = "oneuptime.monitor.database.transaction.open.count",
|
|
113
|
+
|
|
114
|
+
DatabaseSessionsBlocked = "oneuptime.monitor.database.sessions.blocked",
|
|
115
|
+
DatabaseLocksWaiting = "oneuptime.monitor.database.locks.waiting",
|
|
116
|
+
DatabaseDeadlocksTotal = "oneuptime.monitor.database.deadlocks.total",
|
|
117
|
+
DatabaseTableLocksWaitedTotal = "oneuptime.monitor.database.table.locks.waited.total",
|
|
118
|
+
|
|
119
|
+
DatabaseTransactionsTotal = "oneuptime.monitor.database.transactions.total",
|
|
120
|
+
DatabaseQueriesTotal = "oneuptime.monitor.database.queries.total",
|
|
121
|
+
DatabaseSlowQueriesTotal = "oneuptime.monitor.database.queries.slow.total",
|
|
122
|
+
DatabaseRollbackPercent = "oneuptime.monitor.database.rollback.percent",
|
|
123
|
+
|
|
124
|
+
DatabaseCacheHitPercent = "oneuptime.monitor.database.cache.hit.percent",
|
|
125
|
+
DatabaseDiskReadsTotal = "oneuptime.monitor.database.disk.reads.total",
|
|
126
|
+
DatabaseDiskWritesTotal = "oneuptime.monitor.database.disk.writes.total",
|
|
127
|
+
DatabaseIoReadTimeMs = "oneuptime.monitor.database.io.read.time.ms",
|
|
128
|
+
DatabaseIoWriteTimeMs = "oneuptime.monitor.database.io.write.time.ms",
|
|
129
|
+
DatabasePageLifeExpectancySeconds = "oneuptime.monitor.database.page.life.expectancy.seconds",
|
|
130
|
+
DatabaseMemoryGrantsPending = "oneuptime.monitor.database.memory.grants.pending",
|
|
131
|
+
|
|
132
|
+
DatabaseSizeBytes = "oneuptime.monitor.database.size.bytes",
|
|
133
|
+
DatabaseTempBytesTotal = "oneuptime.monitor.database.temp.bytes.total",
|
|
134
|
+
DatabaseTempDiskTablesTotal = "oneuptime.monitor.database.temp.disk.tables.total",
|
|
135
|
+
DatabaseLogSpaceUsedPercent = "oneuptime.monitor.database.log.space.used.percent",
|
|
136
|
+
DatabaseTempDbFreeBytes = "oneuptime.monitor.database.tempdb.free.bytes",
|
|
137
|
+
|
|
138
|
+
DatabaseReplicaCount = "oneuptime.monitor.database.replica.count",
|
|
139
|
+
DatabaseReplicationLagSeconds = "oneuptime.monitor.database.replication.lag.seconds",
|
|
140
|
+
DatabaseReplicationLagBytes = "oneuptime.monitor.database.replication.lag.bytes",
|
|
141
|
+
DatabaseIsInRecovery = "oneuptime.monitor.database.is.in.recovery",
|
|
142
|
+
DatabaseReplicationSlotsInactive = "oneuptime.monitor.database.replication.slots.inactive",
|
|
143
|
+
|
|
144
|
+
DatabaseTransactionIdUsedPercent = "oneuptime.monitor.database.transaction.id.used.percent",
|
|
145
|
+
DatabaseDeadTuples = "oneuptime.monitor.database.dead.tuples",
|
|
146
|
+
DatabaseTablesNeverAutovacuumed = "oneuptime.monitor.database.tables.never.autovacuumed",
|
|
147
|
+
DatabaseCheckpointsRequestedTotal = "oneuptime.monitor.database.checkpoints.requested.total",
|
|
148
|
+
DatabaseCheckpointsTimedTotal = "oneuptime.monitor.database.checkpoints.timed.total",
|
|
149
|
+
|
|
150
|
+
/*
|
|
151
|
+
* Meta-series: how many collection groups failed on this check (a missing
|
|
152
|
+
* grant, a disabled extension, a per-group timeout). Lets an operator
|
|
153
|
+
* alert on "I have lost visibility" without the monitor itself going
|
|
154
|
+
* offline, which is what a partial failure must never do.
|
|
155
|
+
*/
|
|
156
|
+
DatabaseMetricGroupsFailed = "oneuptime.monitor.database.metric.groups.failed",
|
|
86
157
|
}
|
|
87
158
|
|
|
88
159
|
export default MonitorMetricType;
|
|
@@ -50,6 +50,9 @@ import MonitorStepDnssecMonitor, {
|
|
|
50
50
|
import MonitorStepSqlMonitor, {
|
|
51
51
|
MonitorStepSqlMonitorUtil,
|
|
52
52
|
} from "./MonitorStepSqlMonitor";
|
|
53
|
+
import MonitorStepDatabaseMonitor, {
|
|
54
|
+
MonitorStepDatabaseMonitorUtil,
|
|
55
|
+
} from "./MonitorStepDatabaseMonitor";
|
|
53
56
|
import SqlDatabaseType from "./SqlDatabaseType";
|
|
54
57
|
import MonitorStepExternalStatusPageMonitor, {
|
|
55
58
|
MonitorStepExternalStatusPageMonitorUtil,
|
|
@@ -204,6 +207,9 @@ export interface MonitorStepType {
|
|
|
204
207
|
// SQL Query monitor
|
|
205
208
|
sqlMonitor?: MonitorStepSqlMonitor | undefined;
|
|
206
209
|
|
|
210
|
+
// Database Health monitor (built-in catalog metrics, no user query)
|
|
211
|
+
databaseMonitor?: MonitorStepDatabaseMonitor | undefined;
|
|
212
|
+
|
|
207
213
|
// External Status Page monitor
|
|
208
214
|
externalStatusPageMonitor?: MonitorStepExternalStatusPageMonitor | undefined;
|
|
209
215
|
|
|
@@ -269,6 +275,7 @@ export default class MonitorStep extends DatabaseProperty {
|
|
|
269
275
|
domainMonitor: undefined,
|
|
270
276
|
dnssecMonitor: undefined,
|
|
271
277
|
sqlMonitor: undefined,
|
|
278
|
+
databaseMonitor: undefined,
|
|
272
279
|
externalStatusPageMonitor: undefined,
|
|
273
280
|
kubernetesMonitor: undefined,
|
|
274
281
|
dockerMonitor: undefined,
|
|
@@ -345,6 +352,16 @@ export default class MonitorStep extends DatabaseProperty {
|
|
|
345
352
|
domainMonitor: undefined,
|
|
346
353
|
dnssecMonitor: undefined,
|
|
347
354
|
sqlMonitor: undefined,
|
|
355
|
+
/*
|
|
356
|
+
* Seeded, unlike sqlMonitor. The SQL form always writes its config
|
|
357
|
+
* because the query field is required; a Database Health step has no
|
|
358
|
+
* required field, so an untouched step would reach the probe with no
|
|
359
|
+
* connection details at all and the monitor would never run.
|
|
360
|
+
*/
|
|
361
|
+
databaseMonitor:
|
|
362
|
+
arg.monitorType === MonitorType.Database
|
|
363
|
+
? MonitorStepDatabaseMonitorUtil.getDefault()
|
|
364
|
+
: undefined,
|
|
348
365
|
externalStatusPageMonitor: undefined,
|
|
349
366
|
kubernetesMonitor: undefined,
|
|
350
367
|
dockerMonitor: undefined,
|
|
@@ -620,6 +637,13 @@ export default class MonitorStep extends DatabaseProperty {
|
|
|
620
637
|
return this;
|
|
621
638
|
}
|
|
622
639
|
|
|
640
|
+
public setDatabaseMonitor(
|
|
641
|
+
databaseMonitor: MonitorStepDatabaseMonitor,
|
|
642
|
+
): MonitorStep {
|
|
643
|
+
this.data!.databaseMonitor = databaseMonitor;
|
|
644
|
+
return this;
|
|
645
|
+
}
|
|
646
|
+
|
|
623
647
|
public setExternalStatusPageMonitor(
|
|
624
648
|
externalStatusPageMonitor: MonitorStepExternalStatusPageMonitor,
|
|
625
649
|
): MonitorStep {
|
|
@@ -876,6 +900,42 @@ export default class MonitorStep extends DatabaseProperty {
|
|
|
876
900
|
}
|
|
877
901
|
}
|
|
878
902
|
|
|
903
|
+
if (monitorType === MonitorType.Database) {
|
|
904
|
+
if (!value.data.databaseMonitor) {
|
|
905
|
+
return "Database monitor configuration is required";
|
|
906
|
+
}
|
|
907
|
+
|
|
908
|
+
if (!value.data.databaseMonitor.host) {
|
|
909
|
+
return "Database host is required";
|
|
910
|
+
}
|
|
911
|
+
|
|
912
|
+
if (!value.data.databaseMonitor.databaseName) {
|
|
913
|
+
return "Database name is required";
|
|
914
|
+
}
|
|
915
|
+
|
|
916
|
+
/*
|
|
917
|
+
* Deliberately no query check - that is the difference between this
|
|
918
|
+
* monitor and the SQL Query monitor. Nor is a metric group required:
|
|
919
|
+
* an empty list is normalized back to every group rather than
|
|
920
|
+
* rejected, so a step can never be saved in a state that silently
|
|
921
|
+
* collects nothing.
|
|
922
|
+
*/
|
|
923
|
+
if (
|
|
924
|
+
value.data.databaseMonitor.useWindowsIntegratedAuthentication &&
|
|
925
|
+
value.data.databaseMonitor.databaseType !==
|
|
926
|
+
SqlDatabaseType.MicrosoftSqlServer
|
|
927
|
+
) {
|
|
928
|
+
return "Windows Integrated Authentication is only supported for Microsoft SQL Server";
|
|
929
|
+
}
|
|
930
|
+
|
|
931
|
+
if (
|
|
932
|
+
!value.data.databaseMonitor.useWindowsIntegratedAuthentication &&
|
|
933
|
+
!value.data.databaseMonitor.username
|
|
934
|
+
) {
|
|
935
|
+
return "Database username is required";
|
|
936
|
+
}
|
|
937
|
+
}
|
|
938
|
+
|
|
879
939
|
if (monitorType === MonitorType.ExternalStatusPage) {
|
|
880
940
|
if (!value.data.externalStatusPageMonitor) {
|
|
881
941
|
return "External status page configuration is required";
|
|
@@ -1049,6 +1109,9 @@ export default class MonitorStep extends DatabaseProperty {
|
|
|
1049
1109
|
sqlMonitor: this.data.sqlMonitor
|
|
1050
1110
|
? MonitorStepSqlMonitorUtil.toJSON(this.data.sqlMonitor)
|
|
1051
1111
|
: undefined,
|
|
1112
|
+
databaseMonitor: this.data.databaseMonitor
|
|
1113
|
+
? MonitorStepDatabaseMonitorUtil.toJSON(this.data.databaseMonitor)
|
|
1114
|
+
: undefined,
|
|
1052
1115
|
externalStatusPageMonitor: this.data.externalStatusPageMonitor
|
|
1053
1116
|
? MonitorStepExternalStatusPageMonitorUtil.toJSON(
|
|
1054
1117
|
this.data.externalStatusPageMonitor,
|
|
@@ -1250,6 +1313,18 @@ export default class MonitorStep extends DatabaseProperty {
|
|
|
1250
1313
|
sqlMonitor: json["sqlMonitor"]
|
|
1251
1314
|
? (json["sqlMonitor"] as JSONObject)
|
|
1252
1315
|
: undefined,
|
|
1316
|
+
/*
|
|
1317
|
+
* Normalized on the way in, like metricMonitor above: the group list
|
|
1318
|
+
* and the timeouts are clamped here so no consumer downstream has to
|
|
1319
|
+
* defend against a step written by an older build or by hand.
|
|
1320
|
+
*/
|
|
1321
|
+
databaseMonitor: json["databaseMonitor"]
|
|
1322
|
+
? MonitorStepDatabaseMonitorUtil.toJSON(
|
|
1323
|
+
MonitorStepDatabaseMonitorUtil.fromJSON(
|
|
1324
|
+
json["databaseMonitor"] as JSONObject,
|
|
1325
|
+
),
|
|
1326
|
+
)
|
|
1327
|
+
: undefined,
|
|
1253
1328
|
externalStatusPageMonitor: json["externalStatusPageMonitor"]
|
|
1254
1329
|
? (json["externalStatusPageMonitor"] as JSONObject)
|
|
1255
1330
|
: undefined,
|
|
@@ -1315,6 +1390,7 @@ export default class MonitorStep extends DatabaseProperty {
|
|
|
1315
1390
|
domainMonitor: Zod.any().optional(),
|
|
1316
1391
|
dnssecMonitor: Zod.any().optional(),
|
|
1317
1392
|
sqlMonitor: Zod.any().optional(),
|
|
1393
|
+
databaseMonitor: Zod.any().optional(),
|
|
1318
1394
|
externalStatusPageMonitor: Zod.any().optional(),
|
|
1319
1395
|
kubernetesMonitor: Zod.any().optional(),
|
|
1320
1396
|
dockerMonitor: Zod.any().optional(),
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
import { JSONObject } from "../JSON";
|
|
2
|
+
import { DatabaseMetricGroup } from "./DatabaseMetricCatalog";
|
|
3
|
+
import {
|
|
4
|
+
clampSqlConnectionTimeoutInMs,
|
|
5
|
+
clampSqlStatementTimeoutInMs,
|
|
6
|
+
} from "./MonitorStepSqlMonitor";
|
|
7
|
+
import SqlConnectionConfig from "./SqlConnectionConfig";
|
|
8
|
+
import SqlDatabaseType from "./SqlDatabaseType";
|
|
9
|
+
|
|
10
|
+
/*
|
|
11
|
+
* Connection + collection configuration for a Database Health monitor.
|
|
12
|
+
*
|
|
13
|
+
* The connection block deliberately mirrors MonitorStepSqlMonitor field for
|
|
14
|
+
* field: the two monitor types point at the same kind of server, and an
|
|
15
|
+
* operator who has configured one should not have to learn a second form.
|
|
16
|
+
* What differs is everything after the connection - there is no user query
|
|
17
|
+
* here. The probe runs built-in read-only catalog queries chosen by engine,
|
|
18
|
+
* grouped so a missing grant degrades one group instead of the monitor.
|
|
19
|
+
*
|
|
20
|
+
* As with the SQL Query monitor, `password` (or any other field) may hold a
|
|
21
|
+
* {{monitorSecrets.name}} reference that the server resolves before the
|
|
22
|
+
* config is handed to a probe. OneUptime never creates those secrets itself.
|
|
23
|
+
*/
|
|
24
|
+
|
|
25
|
+
/*
|
|
26
|
+
* Health queries are introspection, not user workload: they should return in
|
|
27
|
+
* milliseconds against a healthy server. A tighter default than the SQL Query
|
|
28
|
+
* monitor's is deliberate - if pg_stat_activity takes ten seconds, the useful
|
|
29
|
+
* signal is "this server is in trouble", and we want the check to say so
|
|
30
|
+
* rather than to sit and wait.
|
|
31
|
+
*/
|
|
32
|
+
export const DEFAULT_DATABASE_STATEMENT_TIMEOUT_IN_MS: number = 10000;
|
|
33
|
+
export const DEFAULT_DATABASE_CONNECTION_TIMEOUT_IN_MS: number = 10000;
|
|
34
|
+
|
|
35
|
+
/*
|
|
36
|
+
* Every group is on by default. A group whose grant is missing reports itself
|
|
37
|
+
* as unavailable rather than failing the check, so a default-on configuration
|
|
38
|
+
* degrades into "the metrics you are entitled to" instead of an error.
|
|
39
|
+
*/
|
|
40
|
+
export const DEFAULT_DATABASE_METRIC_GROUPS: Array<DatabaseMetricGroup> = [
|
|
41
|
+
DatabaseMetricGroup.Connections,
|
|
42
|
+
DatabaseMetricGroup.Activity,
|
|
43
|
+
DatabaseMetricGroup.Throughput,
|
|
44
|
+
DatabaseMetricGroup.Locks,
|
|
45
|
+
DatabaseMetricGroup.Storage,
|
|
46
|
+
DatabaseMetricGroup.Replication,
|
|
47
|
+
DatabaseMetricGroup.Maintenance,
|
|
48
|
+
];
|
|
49
|
+
|
|
50
|
+
export default interface MonitorStepDatabaseMonitor
|
|
51
|
+
extends SqlConnectionConfig {
|
|
52
|
+
connectionTimeoutInMs: number;
|
|
53
|
+
statementTimeoutInMs: number;
|
|
54
|
+
/*
|
|
55
|
+
* Which collection groups to run. Trimming this list is how an operator
|
|
56
|
+
* opts out of a group they cannot grant, or one whose queries they would
|
|
57
|
+
* rather not pay for on a busy server (Storage is the usual candidate -
|
|
58
|
+
* summing information_schema.TABLES is not free on a large MySQL server).
|
|
59
|
+
*/
|
|
60
|
+
enabledMetricGroups: Array<DatabaseMetricGroup>;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
export class MonitorStepDatabaseMonitorUtil {
|
|
64
|
+
public static getDefault(): MonitorStepDatabaseMonitor {
|
|
65
|
+
return {
|
|
66
|
+
databaseType: SqlDatabaseType.PostgreSQL,
|
|
67
|
+
host: "",
|
|
68
|
+
port: 5432,
|
|
69
|
+
databaseName: "",
|
|
70
|
+
username: "",
|
|
71
|
+
password: "",
|
|
72
|
+
useWindowsIntegratedAuthentication: false,
|
|
73
|
+
useSsl: false,
|
|
74
|
+
rejectUnauthorizedSsl: true,
|
|
75
|
+
connectionTimeoutInMs: DEFAULT_DATABASE_CONNECTION_TIMEOUT_IN_MS,
|
|
76
|
+
statementTimeoutInMs: DEFAULT_DATABASE_STATEMENT_TIMEOUT_IN_MS,
|
|
77
|
+
enabledMetricGroups: [...DEFAULT_DATABASE_METRIC_GROUPS],
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* Keep only recognized groups. An unknown string (an older or newer
|
|
83
|
+
* dashboard, a hand-written API call) is dropped rather than passed to the
|
|
84
|
+
* probe, which would otherwise have to defend against it at collection
|
|
85
|
+
* time. An empty or absent list falls back to every group, because a
|
|
86
|
+
* monitor that silently collects nothing is worse than one that collects
|
|
87
|
+
* what it can.
|
|
88
|
+
*/
|
|
89
|
+
public static sanitizeMetricGroups(
|
|
90
|
+
groups: unknown,
|
|
91
|
+
): Array<DatabaseMetricGroup> {
|
|
92
|
+
if (!Array.isArray(groups)) {
|
|
93
|
+
return [...DEFAULT_DATABASE_METRIC_GROUPS];
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
const validGroups: Array<DatabaseMetricGroup> =
|
|
97
|
+
Object.values(DatabaseMetricGroup);
|
|
98
|
+
|
|
99
|
+
const sanitized: Array<DatabaseMetricGroup> = groups.filter(
|
|
100
|
+
(group: unknown) => {
|
|
101
|
+
return validGroups.includes(group as DatabaseMetricGroup);
|
|
102
|
+
},
|
|
103
|
+
) as Array<DatabaseMetricGroup>;
|
|
104
|
+
|
|
105
|
+
// De-duplicate while preserving the canonical group order.
|
|
106
|
+
const seen: Set<DatabaseMetricGroup> = new Set<DatabaseMetricGroup>(
|
|
107
|
+
sanitized,
|
|
108
|
+
);
|
|
109
|
+
|
|
110
|
+
const ordered: Array<DatabaseMetricGroup> =
|
|
111
|
+
DEFAULT_DATABASE_METRIC_GROUPS.filter((group: DatabaseMetricGroup) => {
|
|
112
|
+
return seen.has(group);
|
|
113
|
+
});
|
|
114
|
+
|
|
115
|
+
if (ordered.length === 0) {
|
|
116
|
+
return [...DEFAULT_DATABASE_METRIC_GROUPS];
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
return ordered;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
public static fromJSON(json: JSONObject): MonitorStepDatabaseMonitor {
|
|
123
|
+
return {
|
|
124
|
+
databaseType:
|
|
125
|
+
(json["databaseType"] as SqlDatabaseType) || SqlDatabaseType.PostgreSQL,
|
|
126
|
+
host: (json["host"] as string) || "",
|
|
127
|
+
port: (json["port"] as number) || 5432,
|
|
128
|
+
databaseName: (json["databaseName"] as string) || "",
|
|
129
|
+
username: (json["username"] as string) || "",
|
|
130
|
+
password: (json["password"] as string) || "",
|
|
131
|
+
useWindowsIntegratedAuthentication: Boolean(
|
|
132
|
+
json["useWindowsIntegratedAuthentication"],
|
|
133
|
+
),
|
|
134
|
+
useSsl: Boolean(json["useSsl"]),
|
|
135
|
+
rejectUnauthorizedSsl:
|
|
136
|
+
json["rejectUnauthorizedSsl"] === undefined ||
|
|
137
|
+
json["rejectUnauthorizedSsl"] === null
|
|
138
|
+
? true
|
|
139
|
+
: Boolean(json["rejectUnauthorizedSsl"]),
|
|
140
|
+
connectionTimeoutInMs: clampSqlConnectionTimeoutInMs(
|
|
141
|
+
(json["connectionTimeoutInMs"] as number) ||
|
|
142
|
+
DEFAULT_DATABASE_CONNECTION_TIMEOUT_IN_MS,
|
|
143
|
+
),
|
|
144
|
+
statementTimeoutInMs: clampSqlStatementTimeoutInMs(
|
|
145
|
+
(json["statementTimeoutInMs"] as number) ||
|
|
146
|
+
DEFAULT_DATABASE_STATEMENT_TIMEOUT_IN_MS,
|
|
147
|
+
),
|
|
148
|
+
enabledMetricGroups: this.sanitizeMetricGroups(
|
|
149
|
+
json["enabledMetricGroups"],
|
|
150
|
+
),
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
public static toJSON(monitor: MonitorStepDatabaseMonitor): JSONObject {
|
|
155
|
+
return {
|
|
156
|
+
databaseType: monitor.databaseType,
|
|
157
|
+
host: monitor.host,
|
|
158
|
+
port: monitor.port,
|
|
159
|
+
databaseName: monitor.databaseName,
|
|
160
|
+
username: monitor.username,
|
|
161
|
+
password: monitor.password,
|
|
162
|
+
useWindowsIntegratedAuthentication:
|
|
163
|
+
monitor.useWindowsIntegratedAuthentication,
|
|
164
|
+
useSsl: monitor.useSsl,
|
|
165
|
+
rejectUnauthorizedSsl: monitor.rejectUnauthorizedSsl,
|
|
166
|
+
connectionTimeoutInMs: monitor.connectionTimeoutInMs,
|
|
167
|
+
statementTimeoutInMs: monitor.statementTimeoutInMs,
|
|
168
|
+
enabledMetricGroups: [...monitor.enabledMetricGroups],
|
|
169
|
+
};
|
|
170
|
+
}
|
|
171
|
+
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { JSONObject } from "../JSON";
|
|
2
|
+
import SqlConnectionConfig from "./SqlConnectionConfig";
|
|
2
3
|
import SqlDatabaseType from "./SqlDatabaseType";
|
|
3
4
|
|
|
4
5
|
/*
|
|
@@ -56,26 +57,7 @@ export const clampSqlMaxRows: (value: number) => number = (
|
|
|
56
57
|
* the config is handed to a probe. OneUptime never creates these secrets for
|
|
57
58
|
* the user; referencing one is the user's choice.
|
|
58
59
|
*/
|
|
59
|
-
export default interface MonitorStepSqlMonitor {
|
|
60
|
-
databaseType: SqlDatabaseType;
|
|
61
|
-
host: string;
|
|
62
|
-
port: number;
|
|
63
|
-
databaseName: string;
|
|
64
|
-
username: string;
|
|
65
|
-
// Raw password OR a {{monitorSecrets.name}} reference resolved server-side.
|
|
66
|
-
password: string;
|
|
67
|
-
/*
|
|
68
|
-
* Microsoft SQL Server only: authenticate with the identity under which the
|
|
69
|
-
* probe is running (SSPI on Windows, Kerberos on Linux/macOS). Username and
|
|
70
|
-
* password are ignored when this is enabled.
|
|
71
|
-
*/
|
|
72
|
-
useWindowsIntegratedAuthentication: boolean;
|
|
73
|
-
useSsl: boolean;
|
|
74
|
-
/*
|
|
75
|
-
* When SSL is on, whether the server certificate chain must validate. Users
|
|
76
|
-
* connecting to a DB with a self-signed cert set this to false.
|
|
77
|
-
*/
|
|
78
|
-
rejectUnauthorizedSsl: boolean;
|
|
60
|
+
export default interface MonitorStepSqlMonitor extends SqlConnectionConfig {
|
|
79
61
|
// The read-only SQL query to run. A single statement is expected.
|
|
80
62
|
query: string;
|
|
81
63
|
connectionTimeoutInMs: number;
|
|
@@ -24,6 +24,18 @@ enum MonitorType {
|
|
|
24
24
|
// Database monitoring — runs a read-only SQL query on a schedule from a probe.
|
|
25
25
|
SQLQuery = "SQL Query",
|
|
26
26
|
|
|
27
|
+
/*
|
|
28
|
+
* Database health monitoring. Where SQLQuery runs the query the user
|
|
29
|
+
* wrote, this runs the queries we wrote: a probe connects to the engine
|
|
30
|
+
* and reads its own catalog views (pg_stat_*, performance_schema,
|
|
31
|
+
* sys.dm_*) to produce connection, throughput, lock, cache, storage and
|
|
32
|
+
* replication series without the user knowing a single system table.
|
|
33
|
+
* The two are deliberately separate types - a health check has no user
|
|
34
|
+
* query, needs different grants, and runs a different number of
|
|
35
|
+
* statements per interval.
|
|
36
|
+
*/
|
|
37
|
+
Database = "Database",
|
|
38
|
+
|
|
27
39
|
// These two monitor types are same but we are keeping them separate for now - this is for marketing purposes
|
|
28
40
|
SyntheticMonitor = "Synthetic Monitor",
|
|
29
41
|
CustomJavaScriptCode = "Custom JavaScript Code",
|
|
@@ -103,7 +115,7 @@ export class MonitorTypeHelper {
|
|
|
103
115
|
},
|
|
104
116
|
{
|
|
105
117
|
label: "Database Monitoring",
|
|
106
|
-
monitorTypes: [MonitorType.SQLQuery],
|
|
118
|
+
monitorTypes: [MonitorType.Database, MonitorType.SQLQuery],
|
|
107
119
|
},
|
|
108
120
|
{
|
|
109
121
|
label: "Synthetic Monitoring",
|
|
@@ -495,6 +507,37 @@ export class MonitorTypeHelper {
|
|
|
495
507
|
"row count",
|
|
496
508
|
],
|
|
497
509
|
},
|
|
510
|
+
{
|
|
511
|
+
monitorType: MonitorType.Database,
|
|
512
|
+
title: "Database Health",
|
|
513
|
+
description:
|
|
514
|
+
"Connections, locks, replication and cache health for PostgreSQL, MySQL and SQL Server.",
|
|
515
|
+
icon: IconProp.Database,
|
|
516
|
+
keywords: [
|
|
517
|
+
"database",
|
|
518
|
+
"db",
|
|
519
|
+
"health",
|
|
520
|
+
"performance",
|
|
521
|
+
"postgres",
|
|
522
|
+
"postgresql",
|
|
523
|
+
"mysql",
|
|
524
|
+
"mariadb",
|
|
525
|
+
"mssql",
|
|
526
|
+
"sql server",
|
|
527
|
+
"connections",
|
|
528
|
+
"replication",
|
|
529
|
+
"replica",
|
|
530
|
+
"lag",
|
|
531
|
+
"locks",
|
|
532
|
+
"deadlock",
|
|
533
|
+
"vacuum",
|
|
534
|
+
"bloat",
|
|
535
|
+
"buffer",
|
|
536
|
+
"cache hit",
|
|
537
|
+
"slow query",
|
|
538
|
+
"wraparound",
|
|
539
|
+
],
|
|
540
|
+
},
|
|
498
541
|
{
|
|
499
542
|
monitorType: MonitorType.SyntheticMonitor,
|
|
500
543
|
title: "Synthetic Monitor",
|
|
@@ -780,6 +823,7 @@ export class MonitorTypeHelper {
|
|
|
780
823
|
monitorType === MonitorType.DNSSEC ||
|
|
781
824
|
monitorType === MonitorType.Domain ||
|
|
782
825
|
monitorType === MonitorType.SQLQuery ||
|
|
826
|
+
monitorType === MonitorType.Database ||
|
|
783
827
|
monitorType === MonitorType.ExternalStatusPage;
|
|
784
828
|
return isProbeableMonitor;
|
|
785
829
|
}
|
|
@@ -808,6 +852,7 @@ export class MonitorTypeHelper {
|
|
|
808
852
|
MonitorType.DNSSEC,
|
|
809
853
|
MonitorType.Domain,
|
|
810
854
|
MonitorType.SQLQuery,
|
|
855
|
+
MonitorType.Database,
|
|
811
856
|
MonitorType.ExternalStatusPage,
|
|
812
857
|
MonitorType.Kubernetes,
|
|
813
858
|
MonitorType.Docker,
|
|
@@ -855,6 +900,7 @@ export class MonitorTypeHelper {
|
|
|
855
900
|
monitorType === MonitorType.DNSSEC ||
|
|
856
901
|
monitorType === MonitorType.Domain ||
|
|
857
902
|
monitorType === MonitorType.SQLQuery ||
|
|
903
|
+
monitorType === MonitorType.Database ||
|
|
858
904
|
monitorType === MonitorType.ExternalStatusPage
|
|
859
905
|
) {
|
|
860
906
|
return true;
|