@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,274 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* The fault domain of a thrown value: whose problem is it?
|
|
3
|
+
*
|
|
4
|
+
* This is the canonical vocabulary for the whole platform. It was originally
|
|
5
|
+
* introduced as `ExceptionAIClassification` — an after-the-fact LLM verdict on
|
|
6
|
+
* an already-ingested exception group — but the same five values are what the
|
|
7
|
+
* emitting code needs in order to decide, at the moment an error is thrown,
|
|
8
|
+
* whether it is worth waking anyone up. That file now re-exports this one so
|
|
9
|
+
* there is exactly ONE answer to "what kind of failure is this" in the
|
|
10
|
+
* codebase, with several possible sources (declared > human > AI > default).
|
|
11
|
+
*
|
|
12
|
+
* - CodeFault: a defect in the monitored code — the only class the automatic
|
|
13
|
+
* fix lane opens pull requests for. This is the BASE DEFAULT on purpose:
|
|
14
|
+
* forgetting to classify an exception must leave it noisy, never silent.
|
|
15
|
+
* - UserError: expected consequence of invalid end-user input (bad
|
|
16
|
+
* parameters, malformed values). The right change, if any, is earlier
|
|
17
|
+
* validation and clearer error UX — routed to a human, never auto-fixed.
|
|
18
|
+
* - ExpectedDenial: an intentional check doing its job (auth failure,
|
|
19
|
+
* plan/paywall denial, scanner/fuzzer probe tripping validation).
|
|
20
|
+
* Never auto-fixed; optionally auto-archived.
|
|
21
|
+
* - Infrastructure: environmental conditions (timeouts, connection resets,
|
|
22
|
+
* resource exhaustion) where a code "fix" is usually tuning — routed to a
|
|
23
|
+
* human. NOTE: this stays an Issue. It is a real failure, just not one to
|
|
24
|
+
* auto-fix.
|
|
25
|
+
* - Unknown: triage could not decide — treated conservatively (no automatic
|
|
26
|
+
* fix, and still shown).
|
|
27
|
+
*/
|
|
28
|
+
enum ErrorClass {
|
|
29
|
+
CodeFault = "code-fault",
|
|
30
|
+
UserError = "user-error",
|
|
31
|
+
ExpectedDenial = "expected-denial",
|
|
32
|
+
Infrastructure = "infrastructure",
|
|
33
|
+
Unknown = "unknown",
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/*
|
|
37
|
+
* The classes that do NOT warrant an Issue. Everything else — including
|
|
38
|
+
* Infrastructure and Unknown — stays loud.
|
|
39
|
+
*
|
|
40
|
+
* Exported as the single list so the emit path, the ingest path, the Issues
|
|
41
|
+
* list default scope and the AI detectors can never drift apart on which
|
|
42
|
+
* classes are suppressed.
|
|
43
|
+
*/
|
|
44
|
+
export const NON_ACTIONABLE_ERROR_CLASSES: ReadonlyArray<ErrorClass> = [
|
|
45
|
+
ErrorClass.UserError,
|
|
46
|
+
ErrorClass.ExpectedDenial,
|
|
47
|
+
];
|
|
48
|
+
|
|
49
|
+
export function isNonActionableErrorClass(value: unknown): boolean {
|
|
50
|
+
return NON_ACTIONABLE_ERROR_CLASSES.includes(value as ErrorClass);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* Every value the enum can take, for validating strings that arrive from
|
|
55
|
+
* outside (an OTLP attribute, a database column written by an older release).
|
|
56
|
+
*/
|
|
57
|
+
export function toErrorClass(value: unknown): ErrorClass | null {
|
|
58
|
+
if (typeof value !== "string") {
|
|
59
|
+
return null;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
const match: ErrorClass | undefined = Object.values(ErrorClass).find(
|
|
63
|
+
(candidate: ErrorClass) => {
|
|
64
|
+
return candidate === value;
|
|
65
|
+
},
|
|
66
|
+
);
|
|
67
|
+
|
|
68
|
+
return match ?? null;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/*
|
|
72
|
+
* `Symbol.for` rather than `Symbol()`: Common/ ships its own node_modules and
|
|
73
|
+
* is consumed by App/, Probe/, Runner/ and others, so this module can be
|
|
74
|
+
* instantiated more than once in a single process. A unique symbol would not
|
|
75
|
+
* match across those instances and a tag written by one copy would be
|
|
76
|
+
* invisible to another. The global symbol registry is keyed by string, so all
|
|
77
|
+
* copies agree.
|
|
78
|
+
*/
|
|
79
|
+
const ERROR_CLASS_SYMBOL: symbol = Symbol.for("oneuptime.error.class");
|
|
80
|
+
const ERROR_CLASS_AUTHORITATIVE_SYMBOL: symbol = Symbol.for(
|
|
81
|
+
"oneuptime.error.class.authoritative",
|
|
82
|
+
);
|
|
83
|
+
const ERROR_REPORTED_SYMBOL: symbol = Symbol.for("oneuptime.error.reported");
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* A fault domain plus how much to trust it.
|
|
87
|
+
*
|
|
88
|
+
* `authoritative: false` is a CLASS-LEVEL default — "BadDataException usually
|
|
89
|
+
* means the caller sent something wrong". It is a generalisation, so it is
|
|
90
|
+
* subject to the unit-of-work promotion: outside an HTTP request there is no
|
|
91
|
+
* caller, and the generalisation does not hold.
|
|
92
|
+
*
|
|
93
|
+
* `authoritative: true` is a SITE-LEVEL declaration — a developer looked at
|
|
94
|
+
* one specific throw or one specific log line and said what it is. That is a
|
|
95
|
+
* deliberate, reviewable judgment about a single place in the code, so it is
|
|
96
|
+
* never second-guessed. This is what lets a probe report "the endpoint we were
|
|
97
|
+
* asked to check is down" as a non-defect even though a probe check has no
|
|
98
|
+
* HTTP request around it.
|
|
99
|
+
*/
|
|
100
|
+
export interface DeclaredErrorClass {
|
|
101
|
+
errorClass: ErrorClass;
|
|
102
|
+
authoritative: boolean;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
type Taggable = { [key: symbol]: unknown };
|
|
106
|
+
|
|
107
|
+
function canTag(value: unknown): value is Taggable {
|
|
108
|
+
return (
|
|
109
|
+
value !== null && (typeof value === "object" || typeof value === "function")
|
|
110
|
+
);
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
/**
|
|
114
|
+
* Attach a fault domain to a thrown value.
|
|
115
|
+
*
|
|
116
|
+
* `enumerable: false` keeps it invisible to `JSON.stringify`,
|
|
117
|
+
* `Logger.redactBody` and `Telemetry.getExceptionAttributes`, so tagging can
|
|
118
|
+
* never change what a log line or a span attribute bag looks like.
|
|
119
|
+
*
|
|
120
|
+
* Never throws: this runs from the `Exception` constructor and from catch
|
|
121
|
+
* blocks, where a frozen object or a hostile Proxy must not take down the
|
|
122
|
+
* error path. Returns the value so it can be tagged inline.
|
|
123
|
+
*/
|
|
124
|
+
export function tagErrorClass<T>(
|
|
125
|
+
value: T,
|
|
126
|
+
errorClass: ErrorClass,
|
|
127
|
+
authoritative: boolean = false,
|
|
128
|
+
): T {
|
|
129
|
+
if (!canTag(value)) {
|
|
130
|
+
return value;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
try {
|
|
134
|
+
Object.defineProperty(value, ERROR_CLASS_SYMBOL, {
|
|
135
|
+
value: errorClass,
|
|
136
|
+
enumerable: false,
|
|
137
|
+
writable: true,
|
|
138
|
+
configurable: true,
|
|
139
|
+
});
|
|
140
|
+
|
|
141
|
+
if (authoritative) {
|
|
142
|
+
Object.defineProperty(value, ERROR_CLASS_AUTHORITATIVE_SYMBOL, {
|
|
143
|
+
value: true,
|
|
144
|
+
enumerable: false,
|
|
145
|
+
writable: true,
|
|
146
|
+
configurable: true,
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
} catch {
|
|
150
|
+
// Frozen / sealed / exotic object — the resolver falls back to CodeFault.
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
return value;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
/**
|
|
157
|
+
* Declare the fault domain for ONE specific throw or log line, overriding the
|
|
158
|
+
* class-level default and exempting it from the unit-of-work promotion.
|
|
159
|
+
*/
|
|
160
|
+
export function tagErrorClassAuthoritative<T>(
|
|
161
|
+
value: T,
|
|
162
|
+
errorClass: ErrorClass,
|
|
163
|
+
): T {
|
|
164
|
+
return tagErrorClass(value, errorClass, true);
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
/**
|
|
168
|
+
* Read the fault domain a thrown value declared for itself, or null when it
|
|
169
|
+
* declared none.
|
|
170
|
+
*
|
|
171
|
+
* A null return is meaningful and must stay distinct from
|
|
172
|
+
* `ErrorClass.Unknown`: "nobody predicted this" is the strongest possible
|
|
173
|
+
* signal that it is a bug, whereas Unknown means "we looked and could not
|
|
174
|
+
* tell". Callers turn null into CodeFault.
|
|
175
|
+
*
|
|
176
|
+
* Also duck-types off a plain `errorClass` property so an error crossing a
|
|
177
|
+
* process or module boundary (where the symbol is lost) can still declare
|
|
178
|
+
* itself.
|
|
179
|
+
*/
|
|
180
|
+
export function declaredErrorClass(value: unknown): DeclaredErrorClass | null {
|
|
181
|
+
if (!canTag(value)) {
|
|
182
|
+
return null;
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
try {
|
|
186
|
+
const authoritative: boolean =
|
|
187
|
+
value[ERROR_CLASS_AUTHORITATIVE_SYMBOL] === true;
|
|
188
|
+
|
|
189
|
+
const tagged: ErrorClass | null = toErrorClass(value[ERROR_CLASS_SYMBOL]);
|
|
190
|
+
|
|
191
|
+
if (tagged !== null) {
|
|
192
|
+
return { errorClass: tagged, authoritative: authoritative };
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
/*
|
|
196
|
+
* Duck-type off a plain property too, so an error that crossed a process
|
|
197
|
+
* or module boundary (where the symbol is lost) can still declare itself.
|
|
198
|
+
* A property survives serialization, so treat it as a deliberate
|
|
199
|
+
* declaration.
|
|
200
|
+
*/
|
|
201
|
+
const ducked: ErrorClass | null = toErrorClass(
|
|
202
|
+
(value as { errorClass?: unknown }).errorClass,
|
|
203
|
+
);
|
|
204
|
+
|
|
205
|
+
if (ducked !== null) {
|
|
206
|
+
return { errorClass: ducked, authoritative: true };
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
return null;
|
|
210
|
+
} catch {
|
|
211
|
+
// Throwing getter on an exotic thrown value.
|
|
212
|
+
return null;
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
/**
|
|
217
|
+
* Mark a thrown value as already reported, returning whether it had ALREADY
|
|
218
|
+
* been marked.
|
|
219
|
+
*
|
|
220
|
+
* This is what stops one thrown error from filing N exception events as it
|
|
221
|
+
* propagates through N `@CaptureSpan` frames. The fingerprint hashes no spanId
|
|
222
|
+
* and no span name, so without this every frame's event lands in the same
|
|
223
|
+
* group and `occuranceCount` jumps by the depth of the call stack — measured
|
|
224
|
+
* at 3 for a create with a missing field and 6 for a permission-denied
|
|
225
|
+
* get-list.
|
|
226
|
+
*
|
|
227
|
+
* Untaggable values (a thrown string, a frozen object) always report `false`,
|
|
228
|
+
* i.e. they are reported every time. Over-reporting is the safe direction.
|
|
229
|
+
*/
|
|
230
|
+
export function markErrorReported(value: unknown): boolean {
|
|
231
|
+
if (!canTag(value)) {
|
|
232
|
+
return false;
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
try {
|
|
236
|
+
const alreadyReported: boolean = value[ERROR_REPORTED_SYMBOL] === true;
|
|
237
|
+
|
|
238
|
+
if (!alreadyReported) {
|
|
239
|
+
Object.defineProperty(value, ERROR_REPORTED_SYMBOL, {
|
|
240
|
+
value: true,
|
|
241
|
+
enumerable: false,
|
|
242
|
+
writable: true,
|
|
243
|
+
configurable: true,
|
|
244
|
+
});
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
return alreadyReported;
|
|
248
|
+
} catch {
|
|
249
|
+
return false;
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
/**
|
|
254
|
+
* Test seam: forget that a value was reported. Only used by tests that reuse
|
|
255
|
+
* one error object across cases.
|
|
256
|
+
*/
|
|
257
|
+
export function clearErrorReported(value: unknown): void {
|
|
258
|
+
if (!canTag(value)) {
|
|
259
|
+
return;
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
try {
|
|
263
|
+
Object.defineProperty(value, ERROR_REPORTED_SYMBOL, {
|
|
264
|
+
value: false,
|
|
265
|
+
enumerable: false,
|
|
266
|
+
writable: true,
|
|
267
|
+
configurable: true,
|
|
268
|
+
});
|
|
269
|
+
} catch {
|
|
270
|
+
// Nothing to clear.
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
export default ErrorClass;
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* What kind of work was in flight when something happened.
|
|
3
|
+
*
|
|
4
|
+
* This is the axis that makes class-based fault classification safe. The same
|
|
5
|
+
* exception class means different things depending on who asked for the work:
|
|
6
|
+
*
|
|
7
|
+
* throw new BadDataException("Monitor type required to create monitor.")
|
|
8
|
+
* -> inside an HTTP request: the caller sent a bad request. Not our bug.
|
|
9
|
+
*
|
|
10
|
+
* throw new BadDataException("No job found with name: " + name)
|
|
11
|
+
* -> inside a cron registration: an internal invariant we violated.
|
|
12
|
+
* Very much our bug.
|
|
13
|
+
*
|
|
14
|
+
* They are indistinguishable at the throw site and perfectly distinguishable
|
|
15
|
+
* by unit of work, so ErrorClassResolver promotes user-error and
|
|
16
|
+
* expected-denial back to code-fault everywhere except an HTTP request.
|
|
17
|
+
*
|
|
18
|
+
* Seed this EXPLICITLY at every entry point. TelemetryContext.runWithContext
|
|
19
|
+
* inherits the enclosing scope's attributes, so an unset value would let a
|
|
20
|
+
* request's "http-request" marker leak into background work started from
|
|
21
|
+
* inside that request.
|
|
22
|
+
*/
|
|
23
|
+
export enum UnitOfWork {
|
|
24
|
+
HttpRequest = "http-request",
|
|
25
|
+
WorkerJob = "worker-job",
|
|
26
|
+
CronJob = "cron-job",
|
|
27
|
+
ProbeCheck = "probe-check",
|
|
28
|
+
Notification = "notification",
|
|
29
|
+
Startup = "startup",
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Which deployment role produced this telemetry.
|
|
34
|
+
*
|
|
35
|
+
* Distinct from UnitOfWork, and distinct from `service.name`: the Helm chart
|
|
36
|
+
* runs the worker as a separate Deployment but from the same image and the
|
|
37
|
+
* same entrypoint (it only flips DISABLE_QUEUE_WORKERS), so worker pods report
|
|
38
|
+
* `service.name = "api"`. Until that changes — which re-keys every worker
|
|
39
|
+
* exception fingerprint and therefore needs its own release — this attribute
|
|
40
|
+
* is how "which component" becomes filterable.
|
|
41
|
+
*/
|
|
42
|
+
export enum TelemetryComponent {
|
|
43
|
+
Api = "api",
|
|
44
|
+
Worker = "worker",
|
|
45
|
+
Cron = "cron",
|
|
46
|
+
Probe = "probe",
|
|
47
|
+
Notification = "notification",
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Ambient TelemetryContext / span attribute keys. String constants rather than
|
|
52
|
+
* inline literals so the emit path, drop filters, dashboards and tests cannot
|
|
53
|
+
* drift apart on spelling.
|
|
54
|
+
*/
|
|
55
|
+
export const UNIT_OF_WORK_ATTRIBUTE_KEY: string = "oneuptime.unit_of_work";
|
|
56
|
+
export const COMPONENT_ATTRIBUTE_KEY: string = "oneuptime.component";
|
|
57
|
+
|
|
58
|
+
/** Span/log attribute carrying the resolved fault domain. */
|
|
59
|
+
export const ERROR_CLASS_ATTRIBUTE_KEY: string = "error.class";
|
|
@@ -8,7 +8,7 @@ import KeyboardKey, {
|
|
|
8
8
|
} from "../KeyboardShortcut/KeyboardKey";
|
|
9
9
|
import IconProp from "../../../Types/Icon/IconProp";
|
|
10
10
|
import useTranslateValue from "../../Utils/Translation";
|
|
11
|
-
import {
|
|
11
|
+
import { usePageScrollLock } from "../../Utils/PageScrollLock";
|
|
12
12
|
import {
|
|
13
13
|
PaletteCommand,
|
|
14
14
|
PaletteSearchProvider,
|
|
@@ -194,13 +194,7 @@ const CommandPalettePanel: FunctionComponent<PanelProps> = (
|
|
|
194
194
|
}, []);
|
|
195
195
|
|
|
196
196
|
// The page behind the palette must not scroll while it is open.
|
|
197
|
-
|
|
198
|
-
lockPageScroll();
|
|
199
|
-
|
|
200
|
-
return () => {
|
|
201
|
-
unlockPageScroll();
|
|
202
|
-
};
|
|
203
|
-
}, []);
|
|
197
|
+
usePageScrollLock(true);
|
|
204
198
|
|
|
205
199
|
useEffect(() => {
|
|
206
200
|
inputRef.current?.focus();
|
|
@@ -92,6 +92,10 @@ const parseLicenseInstances: ParseLicenseInstancesFunction = (
|
|
|
92
92
|
typeof instance["userCount"] === "number"
|
|
93
93
|
? instance["userCount"]
|
|
94
94
|
: null,
|
|
95
|
+
isCountedTowardsUsage:
|
|
96
|
+
typeof instance["isCountedTowardsUsage"] === "boolean"
|
|
97
|
+
? instance["isCountedTowardsUsage"]
|
|
98
|
+
: undefined,
|
|
95
99
|
lastReportedAt:
|
|
96
100
|
typeof instance["lastReportedAt"] === "string"
|
|
97
101
|
? instance["lastReportedAt"]
|
|
@@ -8,7 +8,7 @@ import { VeryLightGray } from "../../../Types/BrandColors";
|
|
|
8
8
|
import IconProp from "../../../Types/Icon/IconProp";
|
|
9
9
|
import useTranslateValue from "../../Utils/Translation";
|
|
10
10
|
import { wasPressConsumedByAnAnchoredPopup } from "../../Types/LayeredDismissal";
|
|
11
|
-
import {
|
|
11
|
+
import { usePageScrollLock } from "../../Utils/PageScrollLock";
|
|
12
12
|
import React, {
|
|
13
13
|
FunctionComponent,
|
|
14
14
|
ReactElement,
|
|
@@ -125,13 +125,7 @@ const Modal: FunctionComponent<ComponentProps> = (
|
|
|
125
125
|
};
|
|
126
126
|
}, []);
|
|
127
127
|
|
|
128
|
-
|
|
129
|
-
lockPageScroll();
|
|
130
|
-
|
|
131
|
-
return () => {
|
|
132
|
-
unlockPageScroll();
|
|
133
|
-
};
|
|
134
|
-
}, []);
|
|
128
|
+
usePageScrollLock(true);
|
|
135
129
|
|
|
136
130
|
useEffect(() => {
|
|
137
131
|
const content: HTMLDivElement | null = contentRef.current;
|
|
@@ -538,6 +538,50 @@ export default class TemplateVariablesCatalog {
|
|
|
538
538
|
],
|
|
539
539
|
};
|
|
540
540
|
|
|
541
|
+
case MonitorType.Database:
|
|
542
|
+
return {
|
|
543
|
+
title: "Database Health",
|
|
544
|
+
variables: [
|
|
545
|
+
{
|
|
546
|
+
key: "isOnline",
|
|
547
|
+
description: "True if the database accepted the connection.",
|
|
548
|
+
},
|
|
549
|
+
{
|
|
550
|
+
key: "responseTimeInMs",
|
|
551
|
+
description: "Time to connect and run the baseline query.",
|
|
552
|
+
},
|
|
553
|
+
{ key: "failureCause", description: "Failure reason." },
|
|
554
|
+
{
|
|
555
|
+
key: "connectionError",
|
|
556
|
+
description:
|
|
557
|
+
"Connection error, when the database was unreachable.",
|
|
558
|
+
},
|
|
559
|
+
{
|
|
560
|
+
key: "engineVersion",
|
|
561
|
+
description: "Version string the database server reported.",
|
|
562
|
+
},
|
|
563
|
+
{
|
|
564
|
+
key: "collectedGroups",
|
|
565
|
+
description: "Metric groups that produced values on this check.",
|
|
566
|
+
},
|
|
567
|
+
{
|
|
568
|
+
key: "unavailableGroups",
|
|
569
|
+
description:
|
|
570
|
+
"Array of {group, reason, message, remediation} for groups that produced nothing.",
|
|
571
|
+
},
|
|
572
|
+
{
|
|
573
|
+
key: "collectionIssueSummary",
|
|
574
|
+
description:
|
|
575
|
+
"One-line summary of the unavailable groups - empty when everything was collected.",
|
|
576
|
+
},
|
|
577
|
+
{
|
|
578
|
+
key: "metrics",
|
|
579
|
+
description:
|
|
580
|
+
"Collected values keyed by metric name. A metric that was not collected is absent.",
|
|
581
|
+
},
|
|
582
|
+
],
|
|
583
|
+
};
|
|
584
|
+
|
|
541
585
|
case MonitorType.ExternalStatusPage:
|
|
542
586
|
return {
|
|
543
587
|
title: "External Status Page",
|
|
@@ -28,7 +28,18 @@ const ProgressBar: FunctionComponent<ComponentProps> = (
|
|
|
28
28
|
let percent: number = 0;
|
|
29
29
|
|
|
30
30
|
try {
|
|
31
|
-
|
|
31
|
+
/*
|
|
32
|
+
* Dividing by zero does not throw in JavaScript — it yields NaN, which
|
|
33
|
+
* the catch below never sees. `Math.ceil(NaN)` is NaN, and NaN then
|
|
34
|
+
* reaches the DOM three times over: as `width: NaN%` (which the browser
|
|
35
|
+
* silently discards, leaving an empty track), as aria-valuenow, and as
|
|
36
|
+
* the visible "NaN%" readout beside the count. Every caller that had
|
|
37
|
+
* noticed guarded its own render on a non-zero total; the ones that had
|
|
38
|
+
* not simply showed it.
|
|
39
|
+
*/
|
|
40
|
+
if (props.totalCount > 0) {
|
|
41
|
+
percent = (props.count * 100) / props.totalCount;
|
|
42
|
+
}
|
|
32
43
|
} catch (err) {
|
|
33
44
|
Logger.error(err as Error);
|
|
34
45
|
// do nothing.
|
|
@@ -55,23 +55,53 @@ const BasicRadioButton: FunctionComponent<ComponentProps> = (
|
|
|
55
55
|
|
|
56
56
|
return (
|
|
57
57
|
<div key={i}>
|
|
58
|
-
|
|
58
|
+
{/*
|
|
59
|
+
* items-start, and the description on its own line.
|
|
60
|
+
*
|
|
61
|
+
* Both spans used to sit inline inside one label, separated
|
|
62
|
+
* by `ml-1 sm:ml-0` — which cancels the only gap between
|
|
63
|
+
* them at every breakpoint from `sm` up, i.e. on every
|
|
64
|
+
* desktop. The result rendered as "Create an alertNotifies
|
|
65
|
+
* the team and runs the on-call policy." Stacking them also
|
|
66
|
+
* lets a long description wrap under the title instead of
|
|
67
|
+
* under the radio.
|
|
68
|
+
*/}
|
|
69
|
+
<div className="flex items-start">
|
|
70
|
+
{/*
|
|
71
|
+
* htmlFor, and an id to point it at.
|
|
72
|
+
*
|
|
73
|
+
* The label was a bare sibling of the input, so nothing
|
|
74
|
+
* tied them together: the radio had no accessible name at
|
|
75
|
+
* all (a screen reader announced "radio button, not
|
|
76
|
+
* checked" and never read "Create an alert"), and the only
|
|
77
|
+
* hit target was the 16px dot — clicking the words did
|
|
78
|
+
* nothing. GroupRadioButtons next door gets this right by
|
|
79
|
+
* wrapping the input; this shape needs the explicit link.
|
|
80
|
+
*/}
|
|
59
81
|
<input
|
|
82
|
+
id={`${id}-${i}`}
|
|
60
83
|
type="radio"
|
|
61
84
|
name={id}
|
|
62
85
|
checked={checked}
|
|
63
86
|
onChange={() => {
|
|
64
87
|
handleChange(radioButton.value);
|
|
65
88
|
}}
|
|
66
|
-
className="h-4 w-4 border-gray-300 text-indigo-600 focus:ring-indigo-600"
|
|
89
|
+
className="mt-1 h-4 w-4 flex-shrink-0 border-gray-300 text-indigo-600 focus:ring-indigo-600"
|
|
67
90
|
/>
|
|
68
|
-
<label
|
|
69
|
-
|
|
91
|
+
<label
|
|
92
|
+
htmlFor={`${id}-${i}`}
|
|
93
|
+
className="ml-3 block cursor-pointer text-sm leading-6 text-gray-900"
|
|
94
|
+
>
|
|
95
|
+
<span className="block font-medium text-gray-900">
|
|
70
96
|
{radioButton.title}
|
|
71
97
|
</span>
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
98
|
+
{radioButton.description ? (
|
|
99
|
+
<span className="mt-0.5 block text-sm leading-5 text-gray-500">
|
|
100
|
+
{radioButton.description}
|
|
101
|
+
</span>
|
|
102
|
+
) : (
|
|
103
|
+
<></>
|
|
104
|
+
)}
|
|
75
105
|
</label>
|
|
76
106
|
</div>
|
|
77
107
|
{checked && radioButton.children}
|
|
@@ -94,6 +94,94 @@ const SideMenu: FunctionComponent<ComponentProps> = (props: ComponentProps) => {
|
|
|
94
94
|
}
|
|
95
95
|
};
|
|
96
96
|
|
|
97
|
+
/*
|
|
98
|
+
* Walks the JSX children of a `<SideMenu>` written in the hand-rolled form
|
|
99
|
+
* and returns whichever entry points at the current page.
|
|
100
|
+
*
|
|
101
|
+
* It matches on the shape of the props rather than on component identity —
|
|
102
|
+
* an element with a `link` is a menu entry, an element with a `title` and
|
|
103
|
+
* children is a section — so it keeps working for the components built on
|
|
104
|
+
* top of SideMenuItem, and simply finds nothing for anything else (a
|
|
105
|
+
* fragment, a comment, a caller's own wrapper div) rather than throwing.
|
|
106
|
+
*/
|
|
107
|
+
type ActiveMenuItem = {
|
|
108
|
+
sectionTitle?: string;
|
|
109
|
+
itemTitle?: string;
|
|
110
|
+
icon?: IconProp;
|
|
111
|
+
};
|
|
112
|
+
|
|
113
|
+
type FindActiveInChildrenFunction = (
|
|
114
|
+
children: ReactElement | Array<ReactElement> | undefined,
|
|
115
|
+
sectionTitle?: string | undefined,
|
|
116
|
+
) => ActiveMenuItem;
|
|
117
|
+
|
|
118
|
+
const findActiveInChildren: FindActiveInChildrenFunction = (
|
|
119
|
+
children: ReactElement | Array<ReactElement> | undefined,
|
|
120
|
+
sectionTitle?: string | undefined,
|
|
121
|
+
): ActiveMenuItem => {
|
|
122
|
+
if (!children) {
|
|
123
|
+
return {};
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
for (const child of React.Children.toArray(children)) {
|
|
127
|
+
if (!React.isValidElement(child)) {
|
|
128
|
+
continue;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
const childProps: {
|
|
132
|
+
link?: Link | undefined;
|
|
133
|
+
activeRoute?: Link["to"] | undefined;
|
|
134
|
+
icon?: IconProp | undefined;
|
|
135
|
+
title?: string | undefined;
|
|
136
|
+
children?: ReactElement | Array<ReactElement> | undefined;
|
|
137
|
+
} = child.props as {
|
|
138
|
+
link?: Link | undefined;
|
|
139
|
+
activeRoute?: Link["to"] | undefined;
|
|
140
|
+
icon?: IconProp | undefined;
|
|
141
|
+
title?: string | undefined;
|
|
142
|
+
children?: ReactElement | Array<ReactElement> | undefined;
|
|
143
|
+
};
|
|
144
|
+
|
|
145
|
+
/*
|
|
146
|
+
* `activeRoute` first, matching the two loops above: an entry whose link
|
|
147
|
+
* carries query state points somewhere the current URL never equals, and
|
|
148
|
+
* declares the route that decides selection separately.
|
|
149
|
+
*/
|
|
150
|
+
const matchRoute: Link["to"] | undefined =
|
|
151
|
+
childProps.activeRoute || childProps.link?.to;
|
|
152
|
+
|
|
153
|
+
if (
|
|
154
|
+
childProps.link &&
|
|
155
|
+
matchRoute &&
|
|
156
|
+
Navigation.isOnThisPage(matchRoute)
|
|
157
|
+
) {
|
|
158
|
+
const result: ActiveMenuItem = { itemTitle: childProps.link.title };
|
|
159
|
+
|
|
160
|
+
if (sectionTitle) {
|
|
161
|
+
result.sectionTitle = sectionTitle;
|
|
162
|
+
}
|
|
163
|
+
if (childProps.icon) {
|
|
164
|
+
result.icon = childProps.icon;
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
return result;
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
if (childProps.children) {
|
|
171
|
+
const nested: ActiveMenuItem = findActiveInChildren(
|
|
172
|
+
childProps.children,
|
|
173
|
+
childProps.title || sectionTitle,
|
|
174
|
+
);
|
|
175
|
+
|
|
176
|
+
if (nested.itemTitle) {
|
|
177
|
+
return nested;
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
return {};
|
|
183
|
+
};
|
|
184
|
+
|
|
97
185
|
// Function to find the active menu item and section - much simpler now!
|
|
98
186
|
const findActiveMenuItem: () => {
|
|
99
187
|
sectionTitle?: string;
|
|
@@ -144,7 +232,23 @@ const SideMenu: FunctionComponent<ComponentProps> = (props: ComponentProps) => {
|
|
|
144
232
|
}
|
|
145
233
|
}
|
|
146
234
|
|
|
147
|
-
|
|
235
|
+
/*
|
|
236
|
+
* ...and finally the hand-written JSX form.
|
|
237
|
+
*
|
|
238
|
+
* Roughly half the menus in the product are written as
|
|
239
|
+
* `<SideMenu><SideMenuSection>…<SideMenuItem/>…` rather than as a
|
|
240
|
+
* `sections` array — including every resource View menu. Neither loop
|
|
241
|
+
* above can see those, so on a phone all of them labelled their toggle
|
|
242
|
+
* with the fallback word "Navigation" instead of the page the user is
|
|
243
|
+
* actually on. The summary is the ONLY thing naming the current page
|
|
244
|
+
* while the menu is closed, which is most of the time on a phone.
|
|
245
|
+
*
|
|
246
|
+
* This reads the same two props off the elements the caller wrote, so it
|
|
247
|
+
* covers SideMenuItem, CountModelSideMenuItem and the per-feature items
|
|
248
|
+
* built on top of them (RecommendationsSideMenuItem) without knowing
|
|
249
|
+
* anything about their types.
|
|
250
|
+
*/
|
|
251
|
+
return findActiveInChildren(props.children);
|
|
148
252
|
};
|
|
149
253
|
|
|
150
254
|
const activeItem: {
|
|
@@ -421,7 +525,15 @@ const SideMenu: FunctionComponent<ComponentProps> = (props: ComponentProps) => {
|
|
|
421
525
|
// Desktop view
|
|
422
526
|
return (
|
|
423
527
|
<aside
|
|
424
|
-
|
|
528
|
+
/*
|
|
529
|
+
* w-56 rather than w-52. Page.tsx lays the menu out beside a
|
|
530
|
+
* `flex-1 min-w-0` content column, so this class is the only thing
|
|
531
|
+
* setting the sidebar's width — and at 208px the longest shipped titles
|
|
532
|
+
* ("Scheduled Maintenance", "Recommendations" beside a badge) were
|
|
533
|
+
* ellipsised on every page that has them. 16px buys those back without
|
|
534
|
+
* taking a visible bite out of the content column.
|
|
535
|
+
*/
|
|
536
|
+
className={`hidden md:block w-56 lg:w-64 flex-shrink-0 mb-10 ${props.className || ""}`}
|
|
425
537
|
role="navigation"
|
|
426
538
|
aria-label="Main navigation"
|
|
427
539
|
>
|
|
@@ -436,11 +548,17 @@ const SideMenu: FunctionComponent<ComponentProps> = (props: ComponentProps) => {
|
|
|
436
548
|
className="sticky"
|
|
437
549
|
style={{ top: "calc(var(--app-header-height, 0px) + 1.5rem)" }}
|
|
438
550
|
>
|
|
551
|
+
{/*
|
|
552
|
+
* rounded-xl and a plain border-gray-200, matching Card and InfoCard.
|
|
553
|
+
* The menu sits directly beside those, and it was the only page-level
|
|
554
|
+
* surface in the product with a 1rem radius and a translucent border —
|
|
555
|
+
* which read as a slightly different shade of white next to them.
|
|
556
|
+
*/}
|
|
439
557
|
<div
|
|
440
558
|
className={`
|
|
441
559
|
flex flex-col
|
|
442
|
-
bg-white rounded-
|
|
443
|
-
border border-gray-200
|
|
560
|
+
bg-white rounded-xl
|
|
561
|
+
border border-gray-200
|
|
444
562
|
shadow-sm
|
|
445
563
|
overflow-hidden
|
|
446
564
|
`}
|
|
@@ -463,7 +581,7 @@ const SideMenu: FunctionComponent<ComponentProps> = (props: ComponentProps) => {
|
|
|
463
581
|
|
|
464
582
|
{/* Menu Content */}
|
|
465
583
|
<nav className="p-2 min-h-0 overflow-y-auto">
|
|
466
|
-
<div className="space-y-
|
|
584
|
+
<div className="space-y-1">{renderMenuContent()}</div>
|
|
467
585
|
</nav>
|
|
468
586
|
|
|
469
587
|
{/* Optional Footer */}
|