@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,682 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* The main entry, not "/extend-expect": the latter no longer ships type
|
|
3
|
+
* declarations, so every jest-dom matcher in this file fails to typecheck and
|
|
4
|
+
* the whole suite is skipped before a single assertion runs.
|
|
5
|
+
*/
|
|
6
|
+
import "@testing-library/jest-dom";
|
|
7
|
+
import { render, RenderResult, screen, within } from "@testing-library/react";
|
|
8
|
+
import React from "react";
|
|
9
|
+
import { describe, expect, test } from "@jest/globals";
|
|
10
|
+
import CreateProgressPanel from "../../../../App/FeatureSet/Dashboard/src/Components/Recommendations/MonitorRecommendationCreateProgress";
|
|
11
|
+
import MonitorRecommendationCreateRunner, {
|
|
12
|
+
MonitorRecommendationCreateItemProgress,
|
|
13
|
+
MonitorRecommendationCreateItemStatus,
|
|
14
|
+
MonitorRecommendationCreateProgress,
|
|
15
|
+
} from "../../../../App/FeatureSet/Dashboard/src/Components/Recommendations/MonitorRecommendationCreateRunner";
|
|
16
|
+
|
|
17
|
+
/*
|
|
18
|
+
* The panel a user stares at for the better part of a minute after pressing
|
|
19
|
+
* Create on a batch of recommendations. Everything asserted here is something
|
|
20
|
+
* that, if it broke, would leave that minute unexplained:
|
|
21
|
+
*
|
|
22
|
+
* - a bar that counts only successes stalls short of the end forever on any
|
|
23
|
+
* run that had a failure, so the panel says "still working" about a batch
|
|
24
|
+
* that finished;
|
|
25
|
+
* - rows that appear one at a time reproduce the original complaint, which
|
|
26
|
+
* was that NOTHING appeared until the first monitor had already landed —
|
|
27
|
+
* the longest silence in the operation was the one right after the click;
|
|
28
|
+
* - a Failed row that does not carry its error message loses that error for
|
|
29
|
+
* good, because the run no longer aborts and nothing else in the app
|
|
30
|
+
* records why one monitor out of eighteen did not get made.
|
|
31
|
+
*
|
|
32
|
+
* The counts below are always derived from the item statuses rather than
|
|
33
|
+
* written out by hand, so a test cannot accidentally assert against a progress
|
|
34
|
+
* shape the runner would never emit.
|
|
35
|
+
*/
|
|
36
|
+
|
|
37
|
+
type MakeItemFunction = (data: {
|
|
38
|
+
recommendationId: string;
|
|
39
|
+
name: string;
|
|
40
|
+
status: MonitorRecommendationCreateItemStatus;
|
|
41
|
+
errorMessage?: string | undefined;
|
|
42
|
+
}) => MonitorRecommendationCreateItemProgress;
|
|
43
|
+
|
|
44
|
+
const makeItem: MakeItemFunction = (data: {
|
|
45
|
+
recommendationId: string;
|
|
46
|
+
name: string;
|
|
47
|
+
status: MonitorRecommendationCreateItemStatus;
|
|
48
|
+
errorMessage?: string | undefined;
|
|
49
|
+
}): MonitorRecommendationCreateItemProgress => {
|
|
50
|
+
return {
|
|
51
|
+
recommendationId: data.recommendationId,
|
|
52
|
+
name: data.name,
|
|
53
|
+
status: data.status,
|
|
54
|
+
errorMessage: data.errorMessage,
|
|
55
|
+
};
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
type CountWithStatusFunction = (
|
|
59
|
+
items: Array<MonitorRecommendationCreateItemProgress>,
|
|
60
|
+
status: MonitorRecommendationCreateItemStatus,
|
|
61
|
+
) => number;
|
|
62
|
+
|
|
63
|
+
const countWithStatus: CountWithStatusFunction = (
|
|
64
|
+
items: Array<MonitorRecommendationCreateItemProgress>,
|
|
65
|
+
status: MonitorRecommendationCreateItemStatus,
|
|
66
|
+
): number => {
|
|
67
|
+
return items.filter(
|
|
68
|
+
(item: MonitorRecommendationCreateItemProgress): boolean => {
|
|
69
|
+
return item.status === status;
|
|
70
|
+
},
|
|
71
|
+
).length;
|
|
72
|
+
};
|
|
73
|
+
|
|
74
|
+
type MakeProgressFunction = (
|
|
75
|
+
items: Array<MonitorRecommendationCreateItemProgress>,
|
|
76
|
+
) => MonitorRecommendationCreateProgress;
|
|
77
|
+
|
|
78
|
+
const makeProgress: MakeProgressFunction = (
|
|
79
|
+
items: Array<MonitorRecommendationCreateItemProgress>,
|
|
80
|
+
): MonitorRecommendationCreateProgress => {
|
|
81
|
+
const createdCount: number = countWithStatus(
|
|
82
|
+
items,
|
|
83
|
+
MonitorRecommendationCreateItemStatus.Created,
|
|
84
|
+
);
|
|
85
|
+
const failedCount: number = countWithStatus(
|
|
86
|
+
items,
|
|
87
|
+
MonitorRecommendationCreateItemStatus.Failed,
|
|
88
|
+
);
|
|
89
|
+
|
|
90
|
+
return {
|
|
91
|
+
items: items,
|
|
92
|
+
totalCount: items.length,
|
|
93
|
+
createdCount: createdCount,
|
|
94
|
+
failedCount: failedCount,
|
|
95
|
+
isComplete: createdCount + failedCount === items.length,
|
|
96
|
+
};
|
|
97
|
+
};
|
|
98
|
+
|
|
99
|
+
type RenderPanelFunction = (
|
|
100
|
+
progress: MonitorRecommendationCreateProgress,
|
|
101
|
+
) => RenderResult;
|
|
102
|
+
|
|
103
|
+
const renderPanel: RenderPanelFunction = (
|
|
104
|
+
progress: MonitorRecommendationCreateProgress,
|
|
105
|
+
): RenderResult => {
|
|
106
|
+
return render(<CreateProgressPanel progress={progress} />);
|
|
107
|
+
};
|
|
108
|
+
|
|
109
|
+
type GetRowFunction = (recommendationId: string) => HTMLElement;
|
|
110
|
+
|
|
111
|
+
const getRow: GetRowFunction = (recommendationId: string): HTMLElement => {
|
|
112
|
+
return screen.getByTestId(
|
|
113
|
+
`monitor-recommendation-create-progress-item-${recommendationId}`,
|
|
114
|
+
);
|
|
115
|
+
};
|
|
116
|
+
|
|
117
|
+
/*
|
|
118
|
+
* The status indicator is the row's first child — a tick, a cross, a spinner
|
|
119
|
+
* or a hollow ring. Comparing its markup rather than a class name is what lets
|
|
120
|
+
* "these four statuses look different from each other" be asserted as one
|
|
121
|
+
* fact, instead of four assertions that could all be satisfied by the same
|
|
122
|
+
* glyph.
|
|
123
|
+
*/
|
|
124
|
+
type GetStatusIndicatorMarkupFunction = (recommendationId: string) => string;
|
|
125
|
+
|
|
126
|
+
const getStatusIndicatorMarkup: GetStatusIndicatorMarkupFunction = (
|
|
127
|
+
recommendationId: string,
|
|
128
|
+
): string => {
|
|
129
|
+
const indicator: Element | null = getRow(recommendationId).firstElementChild;
|
|
130
|
+
|
|
131
|
+
return indicator ? indicator.outerHTML : "";
|
|
132
|
+
};
|
|
133
|
+
|
|
134
|
+
type GetSummaryFunction = () => HTMLElement;
|
|
135
|
+
|
|
136
|
+
const getSummary: GetSummaryFunction = (): HTMLElement => {
|
|
137
|
+
return screen.getByTestId("monitor-recommendation-create-progress-summary");
|
|
138
|
+
};
|
|
139
|
+
|
|
140
|
+
type GetRowNamesFunction = () => Array<string>;
|
|
141
|
+
|
|
142
|
+
const getRowNames: GetRowNamesFunction = (): Array<string> => {
|
|
143
|
+
return screen.getAllByRole("listitem").map((row: HTMLElement): string => {
|
|
144
|
+
return row.textContent || "";
|
|
145
|
+
});
|
|
146
|
+
};
|
|
147
|
+
|
|
148
|
+
describe("MonitorRecommendationCreateProgress", () => {
|
|
149
|
+
describe("the progress bar", () => {
|
|
150
|
+
/*
|
|
151
|
+
* The regression that matters most in this file. The bar is fed
|
|
152
|
+
* created + failed, not created: a batch of four where one has already
|
|
153
|
+
* failed and two have landed is three quarters done. A bar wired to
|
|
154
|
+
* createdCount would read "2 of 4" here and, on a run where anything at
|
|
155
|
+
* all failed, would never reach the end — leaving a finished operation
|
|
156
|
+
* looking like a hung one.
|
|
157
|
+
*/
|
|
158
|
+
test("counts failures as settled work, so a half-failed batch is not stuck short of the end", () => {
|
|
159
|
+
renderPanel(
|
|
160
|
+
makeProgress([
|
|
161
|
+
makeItem({
|
|
162
|
+
recommendationId: "one",
|
|
163
|
+
name: "Node CPU",
|
|
164
|
+
status: MonitorRecommendationCreateItemStatus.Created,
|
|
165
|
+
}),
|
|
166
|
+
makeItem({
|
|
167
|
+
recommendationId: "two",
|
|
168
|
+
name: "Node memory",
|
|
169
|
+
status: MonitorRecommendationCreateItemStatus.Created,
|
|
170
|
+
}),
|
|
171
|
+
makeItem({
|
|
172
|
+
recommendationId: "three",
|
|
173
|
+
name: "Pod restarts",
|
|
174
|
+
status: MonitorRecommendationCreateItemStatus.Failed,
|
|
175
|
+
errorMessage: "Monitor limit reached on this plan.",
|
|
176
|
+
}),
|
|
177
|
+
makeItem({
|
|
178
|
+
recommendationId: "four",
|
|
179
|
+
name: "Disk pressure",
|
|
180
|
+
status: MonitorRecommendationCreateItemStatus.Creating,
|
|
181
|
+
}),
|
|
182
|
+
]),
|
|
183
|
+
);
|
|
184
|
+
|
|
185
|
+
expect(screen.getByTestId("progress-bar-count")).toHaveTextContent(
|
|
186
|
+
"3 of 4 monitors",
|
|
187
|
+
);
|
|
188
|
+
expect(screen.getByRole("progressbar")).toHaveAttribute(
|
|
189
|
+
"aria-valuenow",
|
|
190
|
+
"75",
|
|
191
|
+
);
|
|
192
|
+
|
|
193
|
+
// What the created-only reading would have been.
|
|
194
|
+
expect(screen.getByTestId("progress-bar-count")).not.toHaveTextContent(
|
|
195
|
+
"2 of 4 monitors",
|
|
196
|
+
);
|
|
197
|
+
});
|
|
198
|
+
|
|
199
|
+
test("fills the bar completely once the last item has settled, even though one of them failed", () => {
|
|
200
|
+
renderPanel(
|
|
201
|
+
makeProgress([
|
|
202
|
+
makeItem({
|
|
203
|
+
recommendationId: "one",
|
|
204
|
+
name: "Node CPU",
|
|
205
|
+
status: MonitorRecommendationCreateItemStatus.Created,
|
|
206
|
+
}),
|
|
207
|
+
makeItem({
|
|
208
|
+
recommendationId: "two",
|
|
209
|
+
name: "Node memory",
|
|
210
|
+
status: MonitorRecommendationCreateItemStatus.Created,
|
|
211
|
+
}),
|
|
212
|
+
makeItem({
|
|
213
|
+
recommendationId: "three",
|
|
214
|
+
name: "Pod restarts",
|
|
215
|
+
status: MonitorRecommendationCreateItemStatus.Created,
|
|
216
|
+
}),
|
|
217
|
+
makeItem({
|
|
218
|
+
recommendationId: "four",
|
|
219
|
+
name: "Disk pressure",
|
|
220
|
+
status: MonitorRecommendationCreateItemStatus.Failed,
|
|
221
|
+
errorMessage: "Monitor limit reached on this plan.",
|
|
222
|
+
}),
|
|
223
|
+
]),
|
|
224
|
+
);
|
|
225
|
+
|
|
226
|
+
expect(screen.getByTestId("progress-bar-count")).toHaveTextContent(
|
|
227
|
+
"4 of 4 monitors",
|
|
228
|
+
);
|
|
229
|
+
expect(screen.getByRole("progressbar")).toHaveAttribute(
|
|
230
|
+
"aria-valuenow",
|
|
231
|
+
"100",
|
|
232
|
+
);
|
|
233
|
+
});
|
|
234
|
+
|
|
235
|
+
test("starts empty rather than skipping ahead, so the bar means what it says on the first frame", () => {
|
|
236
|
+
renderPanel(
|
|
237
|
+
makeProgress([
|
|
238
|
+
makeItem({
|
|
239
|
+
recommendationId: "one",
|
|
240
|
+
name: "Node CPU",
|
|
241
|
+
status: MonitorRecommendationCreateItemStatus.Pending,
|
|
242
|
+
}),
|
|
243
|
+
makeItem({
|
|
244
|
+
recommendationId: "two",
|
|
245
|
+
name: "Node memory",
|
|
246
|
+
status: MonitorRecommendationCreateItemStatus.Pending,
|
|
247
|
+
}),
|
|
248
|
+
]),
|
|
249
|
+
);
|
|
250
|
+
|
|
251
|
+
expect(screen.getByTestId("progress-bar-count")).toHaveTextContent(
|
|
252
|
+
"0 of 2 monitors",
|
|
253
|
+
);
|
|
254
|
+
expect(screen.getByRole("progressbar")).toHaveAttribute(
|
|
255
|
+
"aria-valuenow",
|
|
256
|
+
"0",
|
|
257
|
+
);
|
|
258
|
+
});
|
|
259
|
+
});
|
|
260
|
+
|
|
261
|
+
describe("the item list", () => {
|
|
262
|
+
/*
|
|
263
|
+
* The original complaint, in one assertion. Before this panel existed the
|
|
264
|
+
* user saw nothing at all until the first create had come back from the
|
|
265
|
+
* server — several seconds of a button that had visibly been pressed and
|
|
266
|
+
* an interface that had visibly done nothing. Every planned monitor is
|
|
267
|
+
* listed from the first render, Pending ones included.
|
|
268
|
+
*/
|
|
269
|
+
test("lists every planned monitor the instant the batch starts, before a single one has been created", () => {
|
|
270
|
+
const progress: MonitorRecommendationCreateProgress = makeProgress([
|
|
271
|
+
makeItem({
|
|
272
|
+
recommendationId: "one",
|
|
273
|
+
name: "Node CPU is high",
|
|
274
|
+
status: MonitorRecommendationCreateItemStatus.Pending,
|
|
275
|
+
}),
|
|
276
|
+
makeItem({
|
|
277
|
+
recommendationId: "two",
|
|
278
|
+
name: "Node memory is high",
|
|
279
|
+
status: MonitorRecommendationCreateItemStatus.Pending,
|
|
280
|
+
}),
|
|
281
|
+
makeItem({
|
|
282
|
+
recommendationId: "three",
|
|
283
|
+
name: "Pods are restarting",
|
|
284
|
+
status: MonitorRecommendationCreateItemStatus.Pending,
|
|
285
|
+
}),
|
|
286
|
+
]);
|
|
287
|
+
|
|
288
|
+
renderPanel(progress);
|
|
289
|
+
|
|
290
|
+
expect(progress.createdCount).toBe(0);
|
|
291
|
+
expect(screen.getAllByRole("listitem")).toHaveLength(3);
|
|
292
|
+
|
|
293
|
+
expect(getRow("one")).toBeInTheDocument();
|
|
294
|
+
expect(getRow("two")).toBeInTheDocument();
|
|
295
|
+
expect(getRow("three")).toBeInTheDocument();
|
|
296
|
+
|
|
297
|
+
expect(screen.getByText("Node CPU is high")).toBeInTheDocument();
|
|
298
|
+
expect(screen.getByText("Node memory is high")).toBeInTheDocument();
|
|
299
|
+
expect(screen.getByText("Pods are restarting")).toBeInTheDocument();
|
|
300
|
+
});
|
|
301
|
+
|
|
302
|
+
/*
|
|
303
|
+
* The list is the user's map of a sequential run: the row that is spinning
|
|
304
|
+
* has to stay where they last looked, and the rows above it have to be the
|
|
305
|
+
* ones already dealt with. Re-ordering by status would move the whole list
|
|
306
|
+
* under them on every emission.
|
|
307
|
+
*/
|
|
308
|
+
test("keeps the plan's order as items move through their statuses", () => {
|
|
309
|
+
renderPanel(
|
|
310
|
+
makeProgress([
|
|
311
|
+
makeItem({
|
|
312
|
+
recommendationId: "one",
|
|
313
|
+
name: "Node CPU is high",
|
|
314
|
+
status: MonitorRecommendationCreateItemStatus.Created,
|
|
315
|
+
}),
|
|
316
|
+
makeItem({
|
|
317
|
+
recommendationId: "two",
|
|
318
|
+
name: "Node memory is high",
|
|
319
|
+
status: MonitorRecommendationCreateItemStatus.Creating,
|
|
320
|
+
}),
|
|
321
|
+
makeItem({
|
|
322
|
+
recommendationId: "three",
|
|
323
|
+
name: "Pods are restarting",
|
|
324
|
+
status: MonitorRecommendationCreateItemStatus.Pending,
|
|
325
|
+
}),
|
|
326
|
+
]),
|
|
327
|
+
);
|
|
328
|
+
|
|
329
|
+
expect(getRowNames()).toEqual([
|
|
330
|
+
"Node CPU is high",
|
|
331
|
+
"Node memory is high",
|
|
332
|
+
"Pods are restarting",
|
|
333
|
+
]);
|
|
334
|
+
});
|
|
335
|
+
});
|
|
336
|
+
|
|
337
|
+
describe("the status of one row", () => {
|
|
338
|
+
type RenderOneOfEachStatusFunction = () => void;
|
|
339
|
+
|
|
340
|
+
const renderOneOfEachStatus: RenderOneOfEachStatusFunction = (): void => {
|
|
341
|
+
renderPanel(
|
|
342
|
+
makeProgress([
|
|
343
|
+
makeItem({
|
|
344
|
+
recommendationId: "created",
|
|
345
|
+
name: "Node CPU is high",
|
|
346
|
+
status: MonitorRecommendationCreateItemStatus.Created,
|
|
347
|
+
}),
|
|
348
|
+
makeItem({
|
|
349
|
+
recommendationId: "creating",
|
|
350
|
+
name: "Node memory is high",
|
|
351
|
+
status: MonitorRecommendationCreateItemStatus.Creating,
|
|
352
|
+
}),
|
|
353
|
+
makeItem({
|
|
354
|
+
recommendationId: "failed",
|
|
355
|
+
name: "Pods are restarting",
|
|
356
|
+
status: MonitorRecommendationCreateItemStatus.Failed,
|
|
357
|
+
errorMessage: "Monitor limit reached on this plan.",
|
|
358
|
+
}),
|
|
359
|
+
makeItem({
|
|
360
|
+
recommendationId: "pending",
|
|
361
|
+
name: "Disk is filling up",
|
|
362
|
+
status: MonitorRecommendationCreateItemStatus.Pending,
|
|
363
|
+
}),
|
|
364
|
+
]),
|
|
365
|
+
);
|
|
366
|
+
};
|
|
367
|
+
|
|
368
|
+
/*
|
|
369
|
+
* Four statuses, four different-looking rows. Asserted as one set rather
|
|
370
|
+
* than four class checks because the failure worth catching is two
|
|
371
|
+
* statuses collapsing onto the same glyph — a Pending row that renders the
|
|
372
|
+
* same tick as a Created one reads as eighteen finished monitors half a
|
|
373
|
+
* minute before any of them exist.
|
|
374
|
+
*/
|
|
375
|
+
test("gives each of the four statuses its own indicator", () => {
|
|
376
|
+
renderOneOfEachStatus();
|
|
377
|
+
|
|
378
|
+
const markups: Array<string> = [
|
|
379
|
+
getStatusIndicatorMarkup("created"),
|
|
380
|
+
getStatusIndicatorMarkup("creating"),
|
|
381
|
+
getStatusIndicatorMarkup("failed"),
|
|
382
|
+
getStatusIndicatorMarkup("pending"),
|
|
383
|
+
];
|
|
384
|
+
|
|
385
|
+
for (const markup of markups) {
|
|
386
|
+
expect(markup).not.toBe("");
|
|
387
|
+
}
|
|
388
|
+
|
|
389
|
+
expect(new Set<string>(markups).size).toBe(4);
|
|
390
|
+
});
|
|
391
|
+
|
|
392
|
+
test("marks a created row in green and a failed one in red, the two colours a user scans for", () => {
|
|
393
|
+
renderOneOfEachStatus();
|
|
394
|
+
|
|
395
|
+
expect(getStatusIndicatorMarkup("created")).toContain("text-green-500");
|
|
396
|
+
expect(getStatusIndicatorMarkup("failed")).toContain("text-red-500");
|
|
397
|
+
});
|
|
398
|
+
|
|
399
|
+
test("spins the row that is actually in flight, so 'still working' points at one monitor", () => {
|
|
400
|
+
renderOneOfEachStatus();
|
|
401
|
+
|
|
402
|
+
expect(getStatusIndicatorMarkup("creating")).toContain("animate-spin");
|
|
403
|
+
expect(getStatusIndicatorMarkup("created")).not.toContain("animate-spin");
|
|
404
|
+
expect(getStatusIndicatorMarkup("pending")).not.toContain("animate-spin");
|
|
405
|
+
});
|
|
406
|
+
|
|
407
|
+
/*
|
|
408
|
+
* A hollow ring, not a greyed tick: any tick shape at a glance down a list
|
|
409
|
+
* of ticks reads as done, whatever colour it is drawn in.
|
|
410
|
+
*/
|
|
411
|
+
test("draws a queued row as an empty ring rather than a tick in another colour", () => {
|
|
412
|
+
renderOneOfEachStatus();
|
|
413
|
+
|
|
414
|
+
const pendingMarkup: string = getStatusIndicatorMarkup("pending");
|
|
415
|
+
|
|
416
|
+
expect(pendingMarkup).toContain("rounded-full");
|
|
417
|
+
expect(pendingMarkup).not.toContain("<svg");
|
|
418
|
+
});
|
|
419
|
+
|
|
420
|
+
test("dims the name of a queued row and not of one that has landed", () => {
|
|
421
|
+
renderOneOfEachStatus();
|
|
422
|
+
|
|
423
|
+
expect(
|
|
424
|
+
within(getRow("pending")).getByText("Disk is filling up"),
|
|
425
|
+
).toHaveClass("text-gray-400");
|
|
426
|
+
expect(
|
|
427
|
+
within(getRow("created")).getByText("Node CPU is high"),
|
|
428
|
+
).not.toHaveClass("text-gray-400");
|
|
429
|
+
});
|
|
430
|
+
|
|
431
|
+
/*
|
|
432
|
+
* The run no longer aborts on the first rejection, so a batch can finish
|
|
433
|
+
* with three of eighteen missing. This row is the only place the app ever
|
|
434
|
+
* says which three and why — nothing is persisted, and the list reloads
|
|
435
|
+
* behind the panel showing only what did get created.
|
|
436
|
+
*/
|
|
437
|
+
test("a failed row carries its error message, which exists nowhere else", () => {
|
|
438
|
+
renderOneOfEachStatus();
|
|
439
|
+
|
|
440
|
+
expect(
|
|
441
|
+
within(getRow("failed")).getByText(
|
|
442
|
+
"Monitor limit reached on this plan.",
|
|
443
|
+
),
|
|
444
|
+
).toBeInTheDocument();
|
|
445
|
+
});
|
|
446
|
+
|
|
447
|
+
test("does not attach that error to the rows that did not fail", () => {
|
|
448
|
+
renderOneOfEachStatus();
|
|
449
|
+
|
|
450
|
+
expect(getRow("created")).not.toHaveTextContent(
|
|
451
|
+
"Monitor limit reached on this plan.",
|
|
452
|
+
);
|
|
453
|
+
expect(getRow("pending")).not.toHaveTextContent(
|
|
454
|
+
"Monitor limit reached on this plan.",
|
|
455
|
+
);
|
|
456
|
+
});
|
|
457
|
+
|
|
458
|
+
test("reports each failure separately when several of them failed differently", () => {
|
|
459
|
+
renderPanel(
|
|
460
|
+
makeProgress([
|
|
461
|
+
makeItem({
|
|
462
|
+
recommendationId: "one",
|
|
463
|
+
name: "Node CPU is high",
|
|
464
|
+
status: MonitorRecommendationCreateItemStatus.Failed,
|
|
465
|
+
errorMessage: "Monitor limit reached on this plan.",
|
|
466
|
+
}),
|
|
467
|
+
makeItem({
|
|
468
|
+
recommendationId: "two",
|
|
469
|
+
name: "Node memory is high",
|
|
470
|
+
status: MonitorRecommendationCreateItemStatus.Failed,
|
|
471
|
+
errorMessage: "A monitor with this name already exists.",
|
|
472
|
+
}),
|
|
473
|
+
]),
|
|
474
|
+
);
|
|
475
|
+
|
|
476
|
+
expect(getRow("one")).toHaveTextContent(
|
|
477
|
+
"Monitor limit reached on this plan.",
|
|
478
|
+
);
|
|
479
|
+
expect(getRow("two")).toHaveTextContent(
|
|
480
|
+
"A monitor with this name already exists.",
|
|
481
|
+
);
|
|
482
|
+
});
|
|
483
|
+
});
|
|
484
|
+
|
|
485
|
+
describe("the summary line", () => {
|
|
486
|
+
/*
|
|
487
|
+
* The sentence itself lives on the runner, because "which of these numbers
|
|
488
|
+
* is the headline" is a decision rather than a formatting detail. What the
|
|
489
|
+
* panel owes is to render THAT sentence — a panel that rolled its own
|
|
490
|
+
* would drift from it the first time either changed.
|
|
491
|
+
*/
|
|
492
|
+
test("renders the runner's sentence while the batch is still running", () => {
|
|
493
|
+
const progress: MonitorRecommendationCreateProgress = makeProgress([
|
|
494
|
+
makeItem({
|
|
495
|
+
recommendationId: "one",
|
|
496
|
+
name: "Node CPU is high",
|
|
497
|
+
status: MonitorRecommendationCreateItemStatus.Created,
|
|
498
|
+
}),
|
|
499
|
+
makeItem({
|
|
500
|
+
recommendationId: "two",
|
|
501
|
+
name: "Node memory is high",
|
|
502
|
+
status: MonitorRecommendationCreateItemStatus.Creating,
|
|
503
|
+
}),
|
|
504
|
+
]);
|
|
505
|
+
|
|
506
|
+
renderPanel(progress);
|
|
507
|
+
|
|
508
|
+
expect(progress.isComplete).toBe(false);
|
|
509
|
+
expect(getSummary()).toHaveTextContent(
|
|
510
|
+
MonitorRecommendationCreateRunner.getSummaryText(progress),
|
|
511
|
+
);
|
|
512
|
+
});
|
|
513
|
+
|
|
514
|
+
test("renders the runner's sentence once the batch has finished with failures", () => {
|
|
515
|
+
const progress: MonitorRecommendationCreateProgress = makeProgress([
|
|
516
|
+
makeItem({
|
|
517
|
+
recommendationId: "one",
|
|
518
|
+
name: "Node CPU is high",
|
|
519
|
+
status: MonitorRecommendationCreateItemStatus.Created,
|
|
520
|
+
}),
|
|
521
|
+
makeItem({
|
|
522
|
+
recommendationId: "two",
|
|
523
|
+
name: "Node memory is high",
|
|
524
|
+
status: MonitorRecommendationCreateItemStatus.Created,
|
|
525
|
+
}),
|
|
526
|
+
makeItem({
|
|
527
|
+
recommendationId: "three",
|
|
528
|
+
name: "Pods are restarting",
|
|
529
|
+
status: MonitorRecommendationCreateItemStatus.Failed,
|
|
530
|
+
errorMessage: "Monitor limit reached on this plan.",
|
|
531
|
+
}),
|
|
532
|
+
makeItem({
|
|
533
|
+
recommendationId: "four",
|
|
534
|
+
name: "Disk is filling up",
|
|
535
|
+
status: MonitorRecommendationCreateItemStatus.Failed,
|
|
536
|
+
errorMessage: "A monitor with this name already exists.",
|
|
537
|
+
}),
|
|
538
|
+
]);
|
|
539
|
+
|
|
540
|
+
renderPanel(progress);
|
|
541
|
+
|
|
542
|
+
expect(progress.isComplete).toBe(true);
|
|
543
|
+
expect(getSummary()).toHaveTextContent(
|
|
544
|
+
MonitorRecommendationCreateRunner.getSummaryText(progress),
|
|
545
|
+
);
|
|
546
|
+
|
|
547
|
+
/*
|
|
548
|
+
* Pinned separately from the delegation above: the count of failures is
|
|
549
|
+
* the one number a user has to be told, and a summary that rendered the
|
|
550
|
+
* right function but the wrong progress would still satisfy the
|
|
551
|
+
* equality check.
|
|
552
|
+
*/
|
|
553
|
+
expect(getSummary()).toHaveTextContent("2 failed");
|
|
554
|
+
});
|
|
555
|
+
|
|
556
|
+
/*
|
|
557
|
+
* Red is reserved for a finished run that lost something. Colouring the
|
|
558
|
+
* in-progress sentence red would alarm the user in the middle of a run
|
|
559
|
+
* that is going perfectly well; leaving the failed one grey would let a
|
|
560
|
+
* partial failure slide past unnoticed, which is the whole reason the run
|
|
561
|
+
* is allowed to continue past a failure at all.
|
|
562
|
+
*/
|
|
563
|
+
test("styles a finished-with-failures summary as an error", () => {
|
|
564
|
+
renderPanel(
|
|
565
|
+
makeProgress([
|
|
566
|
+
makeItem({
|
|
567
|
+
recommendationId: "one",
|
|
568
|
+
name: "Node CPU is high",
|
|
569
|
+
status: MonitorRecommendationCreateItemStatus.Created,
|
|
570
|
+
}),
|
|
571
|
+
makeItem({
|
|
572
|
+
recommendationId: "two",
|
|
573
|
+
name: "Node memory is high",
|
|
574
|
+
status: MonitorRecommendationCreateItemStatus.Failed,
|
|
575
|
+
errorMessage: "Monitor limit reached on this plan.",
|
|
576
|
+
}),
|
|
577
|
+
]),
|
|
578
|
+
);
|
|
579
|
+
|
|
580
|
+
expect(getSummary()).toHaveClass("text-red-700");
|
|
581
|
+
});
|
|
582
|
+
|
|
583
|
+
test("does not style the in-progress summary as an error", () => {
|
|
584
|
+
renderPanel(
|
|
585
|
+
makeProgress([
|
|
586
|
+
makeItem({
|
|
587
|
+
recommendationId: "one",
|
|
588
|
+
name: "Node CPU is high",
|
|
589
|
+
status: MonitorRecommendationCreateItemStatus.Failed,
|
|
590
|
+
errorMessage: "Monitor limit reached on this plan.",
|
|
591
|
+
}),
|
|
592
|
+
makeItem({
|
|
593
|
+
recommendationId: "two",
|
|
594
|
+
name: "Node memory is high",
|
|
595
|
+
status: MonitorRecommendationCreateItemStatus.Creating,
|
|
596
|
+
}),
|
|
597
|
+
]),
|
|
598
|
+
);
|
|
599
|
+
|
|
600
|
+
expect(getSummary()).not.toHaveClass("text-red-700");
|
|
601
|
+
expect(getSummary()).toHaveClass("text-gray-600");
|
|
602
|
+
});
|
|
603
|
+
|
|
604
|
+
test("does not style a clean finished run as an error", () => {
|
|
605
|
+
renderPanel(
|
|
606
|
+
makeProgress([
|
|
607
|
+
makeItem({
|
|
608
|
+
recommendationId: "one",
|
|
609
|
+
name: "Node CPU is high",
|
|
610
|
+
status: MonitorRecommendationCreateItemStatus.Created,
|
|
611
|
+
}),
|
|
612
|
+
makeItem({
|
|
613
|
+
recommendationId: "two",
|
|
614
|
+
name: "Node memory is high",
|
|
615
|
+
status: MonitorRecommendationCreateItemStatus.Created,
|
|
616
|
+
}),
|
|
617
|
+
]),
|
|
618
|
+
);
|
|
619
|
+
|
|
620
|
+
expect(getSummary()).not.toHaveClass("text-red-700");
|
|
621
|
+
});
|
|
622
|
+
});
|
|
623
|
+
|
|
624
|
+
describe("assistive technology", () => {
|
|
625
|
+
/*
|
|
626
|
+
* The entire content of this panel is a thing that changes on its own
|
|
627
|
+
* while the user does nothing, which is exactly what a live region is
|
|
628
|
+
* for. Without it a screen-reader user presses Create and is told nothing
|
|
629
|
+
* further until they go hunting for the panel — and the one announcement
|
|
630
|
+
* that matters, that two of the eighteen failed, is the one they would
|
|
631
|
+
* never hear.
|
|
632
|
+
*/
|
|
633
|
+
test("announces itself as a live region, because it changes without the user acting", () => {
|
|
634
|
+
renderPanel(
|
|
635
|
+
makeProgress([
|
|
636
|
+
makeItem({
|
|
637
|
+
recommendationId: "one",
|
|
638
|
+
name: "Node CPU is high",
|
|
639
|
+
status: MonitorRecommendationCreateItemStatus.Creating,
|
|
640
|
+
}),
|
|
641
|
+
]),
|
|
642
|
+
);
|
|
643
|
+
|
|
644
|
+
const panel: HTMLElement = screen.getByTestId(
|
|
645
|
+
"monitor-recommendation-create-progress",
|
|
646
|
+
);
|
|
647
|
+
|
|
648
|
+
expect(panel).toHaveAttribute("role", "status");
|
|
649
|
+
expect(panel).toHaveAttribute("aria-live", "polite");
|
|
650
|
+
expect(panel).toContainElement(getSummary());
|
|
651
|
+
});
|
|
652
|
+
});
|
|
653
|
+
|
|
654
|
+
describe("an empty batch", () => {
|
|
655
|
+
/*
|
|
656
|
+
* Reachable in ordinary use: every selected recommendation can be filtered
|
|
657
|
+
* out of the plan before the run starts (a teammate dismissed them, or the
|
|
658
|
+
* monitors already exist), and `getInitialProgress([])` is then handed
|
|
659
|
+
* straight to this panel. The division behind the bar's percentage has a
|
|
660
|
+
* zero denominator here, so the guard being asserted is simply that the
|
|
661
|
+
* panel still renders instead of taking the whole side panel down with it.
|
|
662
|
+
*/
|
|
663
|
+
test("renders a zero-item batch instead of crashing on the empty denominator", () => {
|
|
664
|
+
const progress: MonitorRecommendationCreateProgress = makeProgress([]);
|
|
665
|
+
|
|
666
|
+
expect(() => {
|
|
667
|
+
renderPanel(progress);
|
|
668
|
+
}).not.toThrow();
|
|
669
|
+
|
|
670
|
+
expect(
|
|
671
|
+
screen.getByTestId("monitor-recommendation-create-progress"),
|
|
672
|
+
).toBeInTheDocument();
|
|
673
|
+
expect(screen.getByTestId("progress-bar-count")).toHaveTextContent(
|
|
674
|
+
"0 of 0 monitors",
|
|
675
|
+
);
|
|
676
|
+
expect(screen.queryAllByRole("listitem")).toHaveLength(0);
|
|
677
|
+
expect(getSummary()).toHaveTextContent(
|
|
678
|
+
MonitorRecommendationCreateRunner.getSummaryText(progress),
|
|
679
|
+
);
|
|
680
|
+
});
|
|
681
|
+
});
|
|
682
|
+
});
|
|
@@ -121,7 +121,7 @@ describe("Monitor type picker", () => {
|
|
|
121
121
|
|
|
122
122
|
/*
|
|
123
123
|
* The whole point of the change. Every type used to render at once - nine
|
|
124
|
-
* headings and
|
|
124
|
+
* headings and 31 cards, about six thousand pixels of them.
|
|
125
125
|
*/
|
|
126
126
|
test("the long tail starts folded away behind its headings", () => {
|
|
127
127
|
renderPicker();
|
|
@@ -175,7 +175,9 @@ describe("Monitor type picker", () => {
|
|
|
175
175
|
describe("finding a type by the words a user already knows", () => {
|
|
176
176
|
test.each([
|
|
177
177
|
["k8s", MonitorType.Kubernetes],
|
|
178
|
-
|
|
178
|
+
// An engine name means health series; "query" means the escape hatch.
|
|
179
|
+
["postgres", MonitorType.Database],
|
|
180
|
+
["query", MonitorType.SQLQuery],
|
|
179
181
|
["heartbeat", MonitorType.IncomingRequest],
|
|
180
182
|
["tls", MonitorType.SSLCertificate],
|
|
181
183
|
["snmp", MonitorType.NetworkDevice],
|