@oneuptime/common 12.0.31 → 12.0.33
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Models/AnalyticsModels/Span.ts +14 -0
- package/Models/DatabaseModels/AlertState.ts +0 -2
- package/Models/DatabaseModels/Domain.ts +1 -1
- package/Models/DatabaseModels/EnterpriseLicense.ts +56 -0
- package/Models/DatabaseModels/Incident.ts +1 -1
- package/Models/DatabaseModels/IncidentTemplate.ts +1 -1
- package/Models/DatabaseModels/Index.ts +12 -0
- package/Models/DatabaseModels/MetricType.ts +0 -2
- package/Models/DatabaseModels/Monitor.ts +76 -0
- package/Models/DatabaseModels/MonitorStatusTimeline.ts +0 -2
- package/Models/DatabaseModels/MonitorTest.ts +0 -2
- package/Models/DatabaseModels/NetworkAlertPolicy.ts +690 -0
- package/Models/DatabaseModels/NetworkDevice.ts +297 -3
- package/Models/DatabaseModels/NetworkDeviceOidTemplate.ts +3 -1
- package/Models/DatabaseModels/NetworkDeviceRole.ts +648 -0
- package/Models/DatabaseModels/NetworkSite.ts +201 -2
- package/Models/DatabaseModels/NetworkSiteType.ts +102 -3
- package/Models/DatabaseModels/NetworkSnmpCredentialProfile.ts +841 -0
- package/Models/DatabaseModels/ScheduledMaintenance.ts +1 -1
- package/Models/DatabaseModels/ScheduledMaintenanceTemplate.ts +1 -1
- package/Models/DatabaseModels/StatusPageAnnouncement.ts +0 -2
- package/Models/DatabaseModels/StatusPageAnnouncementTemplate.ts +0 -2
- package/Models/DatabaseModels/StatusPagePrivateUser.ts +0 -2
- package/Models/DatabaseModels/StatusPageResource.ts +0 -2
- package/Models/DatabaseModels/StatusPageSubscriber.ts +0 -2
- package/Models/DatabaseModels/TelemetryException.ts +119 -0
- package/Models/DatabaseModels/UserNotificationEmailRollupBatch.ts +334 -0
- package/Models/DatabaseModels/UserNotificationEmailRollupItem.ts +370 -0
- package/Models/DatabaseModels/UserNotificationEmailRollupSetting.ts +282 -0
- package/Server/API/EnterpriseLicenseAPI.ts +391 -64
- package/Server/API/LlmProviderAPI.ts +137 -22
- package/Server/EnvironmentConfig.ts +14 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1790700000000-AddNetworkSiteTypeParentHierarchy.ts +55 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1790800000000-AddNetworkDeviceRoleTable.ts +72 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1790900000000-AddEnterpriseLicenseUsageProvenance.ts +31 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1790900000000-AddTelemetryExceptionErrorClass.ts +124 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1791000000000-AddUserNotificationEmailRollup.ts +132 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1791100000000-AddUserNotificationEmailRollupSetting.ts +79 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1791200000000-AddNetworkSnmpCredentialProfilesAndAlertPolicies.ts +191 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +14 -0
- package/Server/Infrastructure/QueueWorker.ts +38 -8
- package/Server/Middleware/BearerTokenAuthorization.ts +12 -0
- package/Server/Middleware/ProjectAuthorization.ts +11 -0
- package/Server/Middleware/SCIMAuthorization.ts +12 -0
- package/Server/Middleware/TelemetryIngest.ts +11 -0
- package/Server/Services/AIBillingService.ts +101 -27
- package/Server/Services/DatabaseService.ts +39 -9
- package/Server/Services/EnterpriseLicenseInstanceService.ts +197 -0
- package/Server/Services/EnterpriseLicenseService.ts +55 -0
- package/Server/Services/Index.ts +12 -0
- package/Server/Services/MonitorService.ts +143 -21
- package/Server/Services/MonitorStatusTimelineService.ts +150 -8
- package/Server/Services/MonitorTemplateService.ts +217 -1
- package/Server/Services/NetworkAlertPolicyEngineService.ts +2159 -0
- package/Server/Services/NetworkAlertPolicyService.ts +944 -0
- package/Server/Services/NetworkDeviceAutoImportRuleEngineService.ts +9 -10
- package/Server/Services/NetworkDeviceAutoImportRuleService.ts +60 -15
- package/Server/Services/NetworkDeviceRoleService.ts +90 -0
- package/Server/Services/NetworkDeviceService.ts +1032 -73
- package/Server/Services/NetworkSiteService.ts +1502 -129
- package/Server/Services/NetworkSiteTypeService.ts +1216 -0
- package/Server/Services/NetworkSnmpCredentialProfileService.ts +238 -0
- package/Server/Services/NotificationService.ts +118 -28
- package/Server/Services/ProjectService.ts +186 -44
- package/Server/Services/StatusPagePrivateUserService.ts +103 -3
- package/Server/Services/UserNotificationEmailRollupBatchService.ts +78 -0
- package/Server/Services/UserNotificationEmailRollupItemService.ts +79 -0
- package/Server/Services/UserNotificationEmailRollupSettingService.ts +113 -0
- package/Server/Services/UserNotificationSettingService.ts +62 -31
- package/Server/Services/UserService.ts +95 -0
- package/Server/Types/Database/QueryHelper.ts +2 -2
- package/Server/Utils/AI/Chat/ObservabilityChatPrompt.ts +14 -3
- package/Server/Utils/AI/SRE/Insights/Detectors/ExceptionSpikeDetector.ts +10 -0
- package/Server/Utils/AI/SRE/Insights/Detectors/NewExceptionDetector.ts +10 -0
- package/Server/Utils/AI/SRE/Insights/InsightTriageRunner.ts +62 -1
- package/Server/Utils/AI/Toolbox/AlertTools.ts +15 -1
- package/Server/Utils/Billing/BillingFailureNoticeThrottle.ts +80 -0
- package/Server/Utils/DataSource/HttpFetch.ts +9 -2
- package/Server/Utils/EmailRollup/EmailRollupConstants.ts +98 -0
- package/Server/Utils/EmailRollup/EmailRollupFlushRunner.ts +872 -0
- package/Server/Utils/EmailRollup/EmailRollupRenderer.ts +781 -0
- package/Server/Utils/EmailRollup/EmailRollupWriter.ts +368 -0
- package/Server/Utils/LLM/LLMService.ts +78 -0
- package/Server/Utils/LogRedaction.ts +8 -0
- package/Server/Utils/Logger.ts +79 -1
- package/Server/Utils/Monitor/Criteria/DatabaseMonitorCriteria.ts +190 -0
- package/Server/Utils/Monitor/Criteria/EvaluateOverTime.ts +9 -2
- package/Server/Utils/Monitor/Criteria/SnmpMonitorCriteria.ts +61 -1
- package/Server/Utils/Monitor/MonitorCriteriaDataExtractor.ts +14 -0
- package/Server/Utils/Monitor/MonitorCriteriaEvaluator.ts +49 -0
- package/Server/Utils/Monitor/MonitorCriteriaObservationBuilder.ts +255 -4
- package/Server/Utils/Monitor/MonitorMetricUtil.ts +41 -0
- package/Server/Utils/Monitor/MonitorTemplateUtil.ts +43 -0
- package/Server/Utils/Monitor/NetworkDeviceHydrationUtil.ts +499 -19
- package/Server/Utils/Monitor/NetworkDeviceMetricUtil.ts +66 -10
- package/Server/Utils/Monitor/NetworkDeviceWalkUtil.ts +238 -44
- package/Server/Utils/Monitor/NetworkInventoryUtil.ts +146 -39
- package/Server/Utils/NetworkDevice/DeviceHealthAggregation.ts +31 -18
- package/Server/Utils/NetworkSite/NetworkSiteHierarchyLock.ts +213 -0
- package/Server/Utils/OutboundUserAgent.ts +152 -0
- package/Server/Utils/StartServer.ts +51 -19
- package/Server/Utils/Telemetry/CaptureSpan.ts +32 -8
- package/Server/Utils/Telemetry/ErrorClassResolver.ts +120 -0
- package/Server/Utils/Telemetry/SpanUtil.ts +33 -0
- package/Server/Utils/Telemetry.ts +198 -51
- package/Server/Views/Partials/SensitiveUrlToken.ejs +140 -0
- package/Tests/App/Dashboard/AddNeighborToMonitoringModal.test.tsx +158 -27
- package/Tests/App/Dashboard/AskAiSuggestedPrompts.test.ts +279 -0
- package/Tests/App/Dashboard/DashboardChartWidgetZoom.test.tsx +35 -8
- package/Tests/App/Dashboard/DashboardCommandPalette.test.tsx +107 -3
- package/Tests/App/Dashboard/DashboardEditPermissions.test.tsx +517 -0
- package/Tests/App/Dashboard/DashboardVariablesDiscard.test.tsx +26 -0
- package/Tests/App/Dashboard/DashboardWideChartZoom.test.tsx +401 -0
- package/Tests/App/Dashboard/DeviceStatusHero.test.tsx +588 -0
- package/Tests/App/Dashboard/DiscoveryScanWizardValidation.test.tsx +18 -9
- package/Tests/App/Dashboard/MonitorCreateFromMonitorBackedDevice.test.tsx +632 -0
- package/Tests/App/Dashboard/MonitorRecommendationCreateProgress.test.tsx +682 -0
- package/Tests/App/Dashboard/MonitorTemplateColumnAndFacet.test.tsx +318 -0
- package/Tests/App/Dashboard/MonitorTypePicker.test.tsx +4 -2
- package/Tests/App/Dashboard/NetworkDeviceBulkDelete.test.tsx +357 -0
- package/Tests/App/Dashboard/NetworkDeviceCreateFormMonitorBinding.test.tsx +676 -0
- package/Tests/App/Dashboard/NetworkDeviceCreateFormPingMonitor.test.tsx +791 -0
- package/Tests/App/Dashboard/NetworkDeviceCreateFormProbeAndSnmp.test.tsx +833 -0
- package/Tests/App/Dashboard/NetworkDeviceCriteriaFilter.test.ts +161 -0
- package/Tests/App/Dashboard/NetworkDeviceSettingsMonitoringSection.test.tsx +458 -0
- package/Tests/App/Dashboard/NetworkSideMenu.test.tsx +626 -0
- package/Tests/App/Dashboard/PingMonitorProvisioning.test.ts +368 -0
- package/Tests/App/Dashboard/RecommendationCard.test.tsx +796 -0
- package/Tests/App/Dashboard/RecommendationToolbar.test.tsx +519 -0
- package/Tests/App/Dashboard/RecommendationsList.test.tsx +661 -0
- package/Tests/App/Dashboard/SideMenuHarness.tsx +11 -3
- package/Tests/App/Dashboard/UseBulkCreatePingMonitors.test.tsx +899 -0
- package/Tests/App/Dashboard/UseBulkSnmpCredentialProfileActions.test.tsx +732 -0
- package/Tests/App/SensitiveUrlTokenBootstrap.test.ts +256 -0
- package/Tests/App/StatusPage/StatusPageIndexPageRobotsMeta.test.ts +11 -1
- package/Tests/App/StatusPage/StatusPageLoginCodeBootstrap.test.ts +9 -4
- package/Tests/Models/DatabaseModels/ModelRegistryInvariants.test.ts +115 -41
- package/Tests/Models/NetworkSiteHierarchy.test.ts +41 -4
- package/Tests/Server/API/EnterpriseLicenseReportUserCount.test.ts +951 -7
- package/Tests/Server/API/LlmProviderConnectionTest.test.ts +522 -0
- package/Tests/Server/Infrastructure/Postgres/NetworkDeviceRoleTableMigration.test.ts +476 -0
- package/Tests/Server/Infrastructure/Postgres/NetworkSnmpCredentialProfilesAndAlertPoliciesMigration.test.ts +854 -0
- package/Tests/Server/Infrastructure/Postgres/SchemaMigrationsOrdering.test.ts +18 -0
- package/Tests/Server/Infrastructure/Postgres/UserNotificationEmailRollupTableMigration.test.ts +535 -0
- package/Tests/Server/Services/AIChatPrivacyPin.test.ts +560 -0
- package/Tests/Server/Services/BillingRechargeOwnerEmailGuards.test.ts +783 -0
- package/Tests/Server/Services/DatabaseServiceGenerateSlug.test.ts +215 -0
- package/Tests/Server/Services/EnterpriseLicenseInstanceServiceDeletionUsage.test.ts +707 -0
- package/Tests/Server/Services/EnterpriseLicenseServiceUsageAggregationLock.test.ts +329 -0
- package/Tests/Server/Services/MonitorServiceDeleteNetworkDeviceCleanup.test.ts +294 -0
- package/Tests/Server/Services/MonitorStatusBridgeProbePath.test.ts +802 -0
- package/Tests/Server/Services/MonitorStatusTimelineService.test.ts +72 -2
- package/Tests/Server/Services/NetworkAlertPolicyEngineHooks.test.ts +752 -0
- package/Tests/Server/Services/NetworkAlertPolicyEngineService.test.ts +1849 -0
- package/Tests/Server/Services/NetworkAlertPolicyModel.test.ts +1793 -0
- package/Tests/Server/Services/NetworkDeviceAutoImportRuleEngineService.test.ts +47 -4
- package/Tests/Server/Services/NetworkDeviceAutoImportRuleService.test.ts +97 -12
- package/Tests/Server/Services/NetworkDeviceAutoMonitorLifecycle.test.ts +148 -3
- package/Tests/Server/Services/NetworkDeviceMonitorBindingUpdateGuard.test.ts +514 -0
- package/Tests/Server/Services/NetworkDeviceMonitorStatusStamp.test.ts +447 -58
- package/Tests/Server/Services/NetworkDeviceMonitoringMethodTransition.test.ts +739 -0
- package/Tests/Server/Services/NetworkDevicePollingTenancy.test.ts +501 -0
- package/Tests/Server/Services/NetworkDeviceRoleModel.test.ts +672 -0
- package/Tests/Server/Services/NetworkDeviceRuleEngines.test.ts +1 -1
- package/Tests/Server/Services/NetworkDeviceSiteDefaultProbe.test.ts +432 -0
- package/Tests/Server/Services/NetworkSiteMonitoringDefaults.test.ts +498 -0
- package/Tests/Server/Services/NetworkSiteRollupPolicyAndMaintenance.test.ts +337 -55
- package/Tests/Server/Services/NetworkSiteService.test.ts +1868 -131
- package/Tests/Server/Services/NetworkSiteTypeService.test.ts +1109 -0
- package/Tests/Server/Services/NetworkSnmpCredentialProfileModel.test.ts +926 -0
- package/Tests/Server/Services/NetworkSnmpCredentialProfileService.test.ts +796 -0
- package/Tests/Server/Services/ProjectServiceCreateSubscriptionStarted.test.ts +67 -4
- package/Tests/Server/Services/ProjectServiceNetworkSiteTypeDefaults.test.ts +214 -0
- package/Tests/Server/Services/ScheduledMaintenanceSubscriberEndTime.test.ts +369 -0
- package/Tests/Server/Services/StatusPagePrivateUserEmailChangePasswordResetExpiry.test.ts +269 -0
- package/Tests/Server/Services/UserEmailChangePasswordResetExpiry.test.ts +472 -0
- package/Tests/Server/Services/UserNotificationEmailRollupModels.test.ts +569 -0
- package/Tests/Server/Services/UserNotificationEmailRollupSettingModel.test.ts +314 -0
- package/Tests/Server/Services/UserNotificationEmailRollupSettingService.test.ts +409 -0
- package/Tests/Server/Services/UserNotificationSettingMonitorDefaults.test.ts +248 -0
- package/Tests/Server/Services/UserNotificationSettingRollupRouting.test.ts +856 -0
- package/Tests/Server/Services/UserNotificationSettingWorkspaceChannels.test.ts +145 -3
- package/Tests/Server/Types/Database/Permissions/DashboardAccessPermission.test.ts +321 -0
- package/Tests/Server/Types/Database/QueryHelperOperators.test.ts +17 -0
- package/Tests/Server/Utils/AI/AlertMonitorFilters.test.ts +124 -0
- package/Tests/Server/Utils/AI/Insights/InsightTriageRunner.test.ts +208 -0
- package/Tests/Server/Utils/AI/LLMServiceToolCalling.test.ts +235 -0
- package/Tests/Server/Utils/AI/ObservabilityChatPrompt.test.ts +253 -0
- package/Tests/Server/Utils/BasicCron.test.ts +283 -0
- package/Tests/Server/Utils/Captcha.test.ts +422 -0
- package/Tests/Server/Utils/DataSource/HttpFetch.test.ts +96 -2
- package/Tests/Server/Utils/Database/MigrationFailureLog.test.ts +466 -0
- package/Tests/Server/Utils/EmailRollup/EmailRollupFlushRunnerBehaviour.test.ts +1096 -0
- package/Tests/Server/Utils/EmailRollup/EmailRollupFlushRunnerClaim.test.ts +466 -0
- package/Tests/Server/Utils/EmailRollup/EmailRollupRenderer.test.ts +1428 -0
- package/Tests/Server/Utils/EmailRollup/EmailRollupTestHarness.ts +752 -0
- package/Tests/Server/Utils/EmailRollup/EmailRollupWriter.test.ts +864 -0
- package/Tests/Server/Utils/IncomingCallPhoneNumber.test.ts +174 -0
- package/Tests/Server/Utils/LoggerFaultDemotion.test.ts +346 -0
- package/Tests/Server/Utils/Monitor/Criteria/DatabaseMonitorCriteria.test.ts +633 -0
- package/Tests/Server/Utils/Monitor/Criteria/SnmpMonitorCriteria.test.ts +196 -0
- package/Tests/Server/Utils/Monitor/DatabaseMetricWrite.test.ts +367 -0
- package/Tests/Server/Utils/Monitor/MonitorCriteriaObservationBuilderUnits.test.ts +100 -0
- package/Tests/Server/Utils/Monitor/MonitorStepResourceIdentity.test.ts +5 -0
- package/Tests/Server/Utils/Monitor/NetworkDeviceHydrationUtil.test.ts +512 -31
- package/Tests/Server/Utils/Monitor/NetworkDeviceMetricUtil.test.ts +252 -0
- package/Tests/Server/Utils/Monitor/NetworkDeviceWalkUtil.test.ts +479 -42
- package/Tests/Server/Utils/Monitor/NetworkInventoryUtil.test.ts +351 -5
- package/Tests/Server/Utils/NetworkDevice/DeviceHealthAggregation.test.ts +136 -12
- package/Tests/Server/Utils/NetworkSite/NetworkSiteHierarchyLock.test.ts +306 -0
- package/Tests/Server/Utils/OutboundUserAgent.test.ts +266 -0
- package/Tests/Server/Utils/SecurityEvent/ThreatIntel/TaxiiClientUserAgent.test.ts +141 -0
- package/Tests/Server/Utils/Telemetry/ErrorClassResolver.test.ts +298 -0
- package/Tests/Server/Utils/Telemetry.test.ts +456 -66
- package/Tests/Types/Monitor/DatabaseMetricCatalog.test.ts +388 -0
- package/Tests/Types/Monitor/MonitorStepDatabaseMonitor.test.ts +243 -0
- package/Tests/Types/Monitor/MonitorStepDefaultTelemetryConfig.test.ts +1 -0
- package/Tests/Types/Monitor/MonitorType.test.ts +1 -0
- package/Tests/Types/Monitor/MonitorTypeKeywords.test.ts +16 -7
- package/Tests/Types/Monitor/NetworkDeviceAlertPack.test.ts +60 -0
- package/Tests/Types/NetworkDevice/DefaultNetworkDeviceRole.test.ts +417 -0
- package/Tests/Types/NetworkDevice/NetworkAlertPolicyScope.test.ts +655 -0
- package/Tests/Types/NetworkDevice/NetworkDeviceMonitoringMethod.test.ts +115 -26
- package/Tests/Types/NetworkSite/DefaultNetworkSiteType.test.ts +39 -0
- package/Tests/Types/NotificationSetting/NotificationEmailRollupPolicy.test.ts +299 -0
- package/Tests/Types/Telemetry/ErrorClass.test.ts +483 -0
- package/Tests/UI/Components/BasicRadioButtons.test.tsx +336 -0
- package/Tests/UI/Components/Charts/ChartClickDoubleClickDisambiguation.test.tsx +221 -0
- package/Tests/UI/Components/Charts/ChartDoubleClickReset.test.tsx +220 -0
- package/Tests/UI/Components/ModelTable/BaseModelTableBulkDelete.test.tsx +751 -0
- package/Tests/UI/Components/ModelTable/BaseModelTableColumnCustomization.test.tsx +475 -43
- package/Tests/UI/Components/ModelTable/ColumnPreference.test.ts +89 -0
- package/Tests/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.test.ts +15 -0
- package/Tests/UI/Components/NavBarCommandKGating.test.tsx +103 -8
- package/Tests/UI/Components/ProgressBar.test.tsx +38 -2
- package/Tests/UI/Components/SideMenuItem.test.tsx +256 -4
- package/Tests/UI/Components/SideMenuSection.test.tsx +310 -0
- package/Tests/UI/Components/SideOverSubmitState.test.tsx +335 -0
- package/Tests/UI/Utils/PageScrollLock.test.tsx +377 -0
- package/Tests/UI/Utils/PermissionGate.test.ts +78 -0
- package/Tests/UI/Utils/SensitiveUrlToken.test.ts +140 -0
- package/Tests/UI/Utils/TableColumnsToCsv.test.ts +30 -0
- package/Tests/UI/Utils/UseDashboardTimeRangeZoom.test.tsx +187 -0
- package/Tests/Utils/Dashboard/DashboardResourceListSharedArgs.test.ts +302 -0
- package/Tests/Utils/Dashboard/DashboardTimeRangeZoom.test.ts +242 -0
- package/Tests/Utils/EnterpriseLicenseSeats.test.ts +69 -0
- package/Tests/Utils/EnterpriseLicenseSync.test.ts +7 -1
- package/Tests/Utils/EnterpriseLicenseUsage.test.ts +433 -2
- package/Tests/Utils/Monitor/MonitorMetricType.test.ts +280 -1
- package/Tests/Utils/Monitor/MonitorSummarySnapshotUtil.test.ts +1 -0
- package/Tests/Utils/Monitor/NetworkDeviceRoleCatalog.test.ts +981 -0
- package/Tests/Utils/Monitor/NetworkTopologyRoleCatalog.test.ts +865 -0
- package/Tests/Utils/Monitor/NetworkTopologyUtil.test.ts +38 -0
- package/Tests/Utils/NetworkDevice/DeviceHealthStateUtil.test.ts +284 -23
- package/Tests/Utils/NetworkDevice/DeviceReachabilityUtil.test.ts +177 -0
- package/Tests/Utils/NetworkDevice/DeviceRoleKeyUtil.test.ts +538 -0
- package/Tests/Utils/NetworkDevice/MonitoringMethodThreadedClassifiers.test.ts +992 -0
- package/Tests/Utils/NetworkDevice/NetworkAlertPolicyBootstrapUtil.test.ts +427 -0
- package/Tests/Utils/NetworkDevice/ReachabilityStampConsistency.test.ts +185 -0
- package/Tests/Utils/NetworkDevice/SnmpCredentialUtil.test.ts +268 -0
- package/Tests/Utils/NetworkDiscovery/AutoImportRuleMatcher.test.ts +55 -5
- package/Tests/Utils/NetworkDiscovery/DiscoveredDeviceBuilder.test.ts +98 -21
- package/Tests/Utils/NetworkDiscovery/DiscoveryImportEligibility.test.ts +98 -20
- package/Tests/Utils/NetworkDiscovery/DiscoveryReverseDnsChain.test.ts +8 -7
- package/Tests/Utils/NetworkDiscovery/PingMonitorBuilderForAddress.test.ts +274 -0
- package/Tests/Utils/NetworkSite/SiteStatusRollupUtil.test.ts +230 -51
- package/Tests/Utils/NetworkSite/TypeHierarchyUtil.test.ts +209 -0
- package/Tests/Utils/Slo/SloEvaluation.test.ts +171 -0
- package/Tests/Utils/Slug.test.ts +61 -1
- package/Tests/Utils/Telemetry/CaptureSpanExportGating.test.ts +145 -0
- package/Tests/jest.setup.ts +19 -0
- package/Types/AI/ExceptionAIClassification.ts +10 -24
- package/Types/Email/EmailTemplateType.ts +2 -0
- package/Types/EnterpriseLicense/EnterpriseLicenseInstanceSummary.ts +5 -0
- package/Types/EnterpriseLicense/EnterpriseLicenseUsageSnapshot.ts +13 -0
- package/Types/EnterpriseLicense/EnterpriseLicenseUserCountSource.ts +6 -0
- package/Types/Exception/ApiException.ts +10 -0
- package/Types/Exception/BadDataException.ts +11 -0
- package/Types/Exception/BadRequestException.ts +11 -0
- package/Types/Exception/Exception.ts +65 -0
- package/Types/Exception/ForbiddenException.ts +10 -0
- package/Types/Exception/NotAuthenticatedException.ts +10 -0
- package/Types/Exception/NotAuthorizedException.ts +10 -0
- package/Types/Exception/NotFoundException.ts +11 -0
- package/Types/Exception/PayloadTooLargeException.ts +11 -0
- package/Types/Exception/PaymentRequiredException.ts +10 -0
- package/Types/Exception/ServiceUnavailableException.ts +10 -0
- package/Types/Exception/SsoAuthorizationException.ts +10 -0
- package/Types/Exception/TenantNotFoundException.ts +11 -0
- package/Types/Exception/TimeoutException.ts +10 -0
- package/Types/Exception/TooManyRequestsException.ts +10 -0
- package/Types/Exception/UnableToReachServer.ts +10 -0
- package/Types/Exception/WebsiteRequestException.ts +10 -0
- package/Types/Monitor/CriteriaFilter.ts +60 -2
- package/Types/Monitor/DatabaseMetricCatalog.ts +693 -0
- package/Types/Monitor/DatabaseMonitor/DatabaseMonitorResponse.ts +83 -0
- package/Types/Monitor/MonitorCriteriaInstance.ts +76 -0
- package/Types/Monitor/MonitorMetricType.ts +71 -0
- package/Types/Monitor/MonitorStep.ts +76 -0
- package/Types/Monitor/MonitorStepDatabaseMonitor.ts +171 -0
- package/Types/Monitor/MonitorStepSqlMonitor.ts +2 -20
- package/Types/Monitor/MonitorType.ts +47 -1
- package/Types/Monitor/SnmpMonitor/NetworkDeviceAlertPack.ts +22 -1
- package/Types/Monitor/SnmpMonitor/NetworkTopology.ts +61 -0
- package/Types/Monitor/SqlConnectionConfig.ts +31 -0
- package/Types/NetworkDevice/DefaultNetworkDeviceRole.ts +145 -0
- package/Types/NetworkDevice/NetworkAlertPolicyScope.ts +343 -0
- package/Types/NetworkDevice/NetworkDeviceMonitoringMethod.ts +42 -22
- package/Types/NetworkSite/DefaultNetworkSiteTypeHierarchy.ts +30 -0
- package/Types/NotificationSetting/NotificationEmailRollupCategory.ts +255 -0
- package/Types/NotificationSetting/NotificationEmailRollupPolicy.ts +104 -0
- package/Types/Permission.ts +135 -0
- package/Types/Probe/ProbeMonitorResponse.ts +16 -0
- package/Types/Telemetry/ErrorClass.ts +274 -0
- package/Types/Telemetry/UnitOfWork.ts +59 -0
- package/UI/Components/Charts/Area/AreaChart.tsx +7 -0
- package/UI/Components/Charts/Bar/BarChart.tsx +6 -0
- package/UI/Components/Charts/ChartGroup/ChartGroup.tsx +9 -1
- package/UI/Components/Charts/ChartLibrary/AreaChart/AreaChart.tsx +97 -35
- package/UI/Components/Charts/ChartLibrary/BarChart/BarChart.tsx +14 -0
- package/UI/Components/Charts/ChartLibrary/LineChart/LineChart.tsx +97 -35
- package/UI/Components/Charts/ChartLibrary/Utils/DoubleClick.ts +13 -0
- package/UI/Components/Charts/Line/LineChart.tsx +7 -0
- package/UI/Components/CommandPalette/CommandPalette.tsx +2 -8
- package/UI/Components/EditionLabel/EditionLabel.tsx +4 -0
- package/UI/Components/Modal/Modal.tsx +2 -8
- package/UI/Components/ModelTable/BaseModelTable.tsx +50 -15
- package/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.ts +44 -0
- package/UI/Components/Navbar/NavBar.tsx +62 -13
- package/UI/Components/Navbar/NavBarMenuModal.tsx +7 -2
- package/UI/Components/ProgressBar/ProgressBar.tsx +12 -1
- package/UI/Components/RadioButtons/BasicRadioButtons.tsx +37 -7
- package/UI/Components/SideMenu/CountModelSideMenuItem.tsx +2 -0
- package/UI/Components/SideMenu/SideMenu.tsx +135 -7
- package/UI/Components/SideMenu/SideMenuItem.tsx +80 -85
- package/UI/Components/SideMenu/SideMenuSection.tsx +69 -25
- package/UI/Components/SideOver/SideOver.tsx +21 -20
- package/UI/Utils/PageScrollLock.ts +79 -3
- package/UI/Utils/PermissionGate.ts +61 -0
- package/UI/Utils/SensitiveUrlToken.ts +112 -0
- package/UI/Utils/TestLLMProvider.ts +11 -0
- package/UI/Utils/UseDashboardTimeRangeZoom.ts +77 -0
- package/Utils/Dashboard/DashboardTimeRangeZoom.ts +118 -0
- package/Utils/EnterpriseLicense/EnterpriseLicenseSeats.ts +16 -0
- package/Utils/EnterpriseLicense/EnterpriseLicenseUsage.ts +191 -11
- package/Utils/Monitor/MonitorMetricType.ts +153 -1
- package/Utils/Monitor/NetworkDeviceRoleCatalog.ts +232 -0
- package/Utils/Monitor/NetworkDeviceRoleUtil.ts +2 -1
- package/Utils/Monitor/NetworkTopologyUtil.ts +139 -36
- package/Utils/NetworkDevice/DeviceHealthStateUtil.ts +65 -14
- package/Utils/NetworkDevice/DeviceReachabilityUtil.ts +43 -14
- package/Utils/NetworkDevice/DeviceRoleKeyUtil.ts +137 -0
- package/Utils/NetworkDevice/NetworkAlertPolicyBootstrapUtil.ts +247 -0
- package/Utils/NetworkDevice/SnmpCredentialUtil.ts +68 -0
- package/Utils/NetworkDiscovery/AutoImportRuleMatcher.ts +15 -7
- package/Utils/NetworkDiscovery/DiscoveredDeviceBuilder.ts +52 -17
- package/Utils/NetworkDiscovery/DiscoveryImportEligibility.ts +55 -23
- package/Utils/NetworkDiscovery/PingMonitorBuilder.ts +115 -13
- package/Utils/NetworkSite/SiteStatusRollupUtil.ts +66 -20
- package/Utils/NetworkSite/TypeHierarchyUtil.ts +313 -0
- package/Utils/Rules/RulePatternMatchUtil.ts +1 -1
- package/Utils/Slug.ts +34 -1
- package/build/dist/Models/AnalyticsModels/Span.js +14 -0
- package/build/dist/Models/AnalyticsModels/Span.js.map +1 -1
- package/build/dist/Models/DatabaseModels/AlertState.js +0 -2
- package/build/dist/Models/DatabaseModels/AlertState.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Domain.js +1 -1
- package/build/dist/Models/DatabaseModels/Domain.js.map +1 -1
- package/build/dist/Models/DatabaseModels/EnterpriseLicense.js +59 -0
- package/build/dist/Models/DatabaseModels/EnterpriseLicense.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Incident.js +1 -1
- package/build/dist/Models/DatabaseModels/Incident.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncidentTemplate.js +1 -1
- package/build/dist/Models/DatabaseModels/IncidentTemplate.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Index.js +12 -0
- package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
- package/build/dist/Models/DatabaseModels/MetricType.js +0 -2
- package/build/dist/Models/DatabaseModels/MetricType.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Monitor.js +75 -0
- package/build/dist/Models/DatabaseModels/Monitor.js.map +1 -1
- package/build/dist/Models/DatabaseModels/MonitorStatusTimeline.js +0 -2
- package/build/dist/Models/DatabaseModels/MonitorStatusTimeline.js.map +1 -1
- package/build/dist/Models/DatabaseModels/MonitorTest.js +0 -2
- package/build/dist/Models/DatabaseModels/MonitorTest.js.map +1 -1
- package/build/dist/Models/DatabaseModels/NetworkAlertPolicy.js +713 -0
- package/build/dist/Models/DatabaseModels/NetworkAlertPolicy.js.map +1 -0
- package/build/dist/Models/DatabaseModels/NetworkDevice.js +304 -4
- package/build/dist/Models/DatabaseModels/NetworkDevice.js.map +1 -1
- package/build/dist/Models/DatabaseModels/NetworkDeviceOidTemplate.js +3 -1
- package/build/dist/Models/DatabaseModels/NetworkDeviceOidTemplate.js.map +1 -1
- package/build/dist/Models/DatabaseModels/NetworkDeviceRole.js +677 -0
- package/build/dist/Models/DatabaseModels/NetworkDeviceRole.js.map +1 -0
- package/build/dist/Models/DatabaseModels/NetworkSite.js +200 -2
- package/build/dist/Models/DatabaseModels/NetworkSite.js.map +1 -1
- package/build/dist/Models/DatabaseModels/NetworkSiteType.js +102 -3
- package/build/dist/Models/DatabaseModels/NetworkSiteType.js.map +1 -1
- package/build/dist/Models/DatabaseModels/NetworkSnmpCredentialProfile.js +878 -0
- package/build/dist/Models/DatabaseModels/NetworkSnmpCredentialProfile.js.map +1 -0
- package/build/dist/Models/DatabaseModels/ScheduledMaintenance.js +1 -1
- package/build/dist/Models/DatabaseModels/ScheduledMaintenance.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ScheduledMaintenanceTemplate.js +1 -1
- package/build/dist/Models/DatabaseModels/ScheduledMaintenanceTemplate.js.map +1 -1
- package/build/dist/Models/DatabaseModels/StatusPageAnnouncement.js +0 -2
- package/build/dist/Models/DatabaseModels/StatusPageAnnouncement.js.map +1 -1
- package/build/dist/Models/DatabaseModels/StatusPageAnnouncementTemplate.js +0 -2
- package/build/dist/Models/DatabaseModels/StatusPageAnnouncementTemplate.js.map +1 -1
- package/build/dist/Models/DatabaseModels/StatusPagePrivateUser.js +0 -2
- package/build/dist/Models/DatabaseModels/StatusPagePrivateUser.js.map +1 -1
- package/build/dist/Models/DatabaseModels/StatusPageResource.js +0 -2
- package/build/dist/Models/DatabaseModels/StatusPageResource.js.map +1 -1
- package/build/dist/Models/DatabaseModels/StatusPageSubscriber.js +0 -2
- package/build/dist/Models/DatabaseModels/StatusPageSubscriber.js.map +1 -1
- package/build/dist/Models/DatabaseModels/TelemetryException.js +123 -0
- package/build/dist/Models/DatabaseModels/TelemetryException.js.map +1 -1
- package/build/dist/Models/DatabaseModels/UserNotificationEmailRollupBatch.js +363 -0
- package/build/dist/Models/DatabaseModels/UserNotificationEmailRollupBatch.js.map +1 -0
- package/build/dist/Models/DatabaseModels/UserNotificationEmailRollupItem.js +402 -0
- package/build/dist/Models/DatabaseModels/UserNotificationEmailRollupItem.js.map +1 -0
- package/build/dist/Models/DatabaseModels/UserNotificationEmailRollupSetting.js +296 -0
- package/build/dist/Models/DatabaseModels/UserNotificationEmailRollupSetting.js.map +1 -0
- package/build/dist/Server/API/EnterpriseLicenseAPI.js +273 -60
- package/build/dist/Server/API/EnterpriseLicenseAPI.js.map +1 -1
- package/build/dist/Server/API/LlmProviderAPI.js +108 -13
- package/build/dist/Server/API/LlmProviderAPI.js.map +1 -1
- package/build/dist/Server/EnvironmentConfig.js +12 -0
- package/build/dist/Server/EnvironmentConfig.js.map +1 -1
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790700000000-AddNetworkSiteTypeParentHierarchy.js +24 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790700000000-AddNetworkSiteTypeParentHierarchy.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790800000000-AddNetworkDeviceRoleTable.js +39 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790800000000-AddNetworkDeviceRoleTable.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790900000000-AddEnterpriseLicenseUsageProvenance.js +16 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790900000000-AddEnterpriseLicenseUsageProvenance.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790900000000-AddTelemetryExceptionErrorClass.js +111 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790900000000-AddTelemetryExceptionErrorClass.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791000000000-AddUserNotificationEmailRollup.js +77 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791000000000-AddUserNotificationEmailRollup.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791100000000-AddUserNotificationEmailRollupSetting.js +50 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791100000000-AddUserNotificationEmailRollupSetting.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791200000000-AddNetworkSnmpCredentialProfilesAndAlertPolicies.js +83 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791200000000-AddNetworkSnmpCredentialProfilesAndAlertPolicies.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +14 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
- package/build/dist/Server/Infrastructure/QueueWorker.js +33 -5
- package/build/dist/Server/Infrastructure/QueueWorker.js.map +1 -1
- package/build/dist/Server/Middleware/BearerTokenAuthorization.js +12 -0
- package/build/dist/Server/Middleware/BearerTokenAuthorization.js.map +1 -1
- package/build/dist/Server/Middleware/ProjectAuthorization.js +11 -0
- package/build/dist/Server/Middleware/ProjectAuthorization.js.map +1 -1
- package/build/dist/Server/Middleware/SCIMAuthorization.js +12 -0
- package/build/dist/Server/Middleware/SCIMAuthorization.js.map +1 -1
- package/build/dist/Server/Middleware/TelemetryIngest.js +11 -0
- package/build/dist/Server/Middleware/TelemetryIngest.js.map +1 -1
- package/build/dist/Server/Services/AIBillingService.js +70 -16
- package/build/dist/Server/Services/AIBillingService.js.map +1 -1
- package/build/dist/Server/Services/DatabaseService.js +31 -5
- package/build/dist/Server/Services/DatabaseService.js.map +1 -1
- package/build/dist/Server/Services/EnterpriseLicenseInstanceService.js +167 -0
- package/build/dist/Server/Services/EnterpriseLicenseInstanceService.js.map +1 -1
- package/build/dist/Server/Services/EnterpriseLicenseService.js +39 -0
- package/build/dist/Server/Services/EnterpriseLicenseService.js.map +1 -1
- package/build/dist/Server/Services/Index.js +12 -0
- package/build/dist/Server/Services/Index.js.map +1 -1
- package/build/dist/Server/Services/MonitorService.js +119 -21
- package/build/dist/Server/Services/MonitorService.js.map +1 -1
- package/build/dist/Server/Services/MonitorStatusTimelineService.js +127 -8
- package/build/dist/Server/Services/MonitorStatusTimelineService.js.map +1 -1
- package/build/dist/Server/Services/MonitorTemplateService.js +162 -0
- package/build/dist/Server/Services/MonitorTemplateService.js.map +1 -1
- package/build/dist/Server/Services/NetworkAlertPolicyEngineService.js +1683 -0
- package/build/dist/Server/Services/NetworkAlertPolicyEngineService.js.map +1 -0
- package/build/dist/Server/Services/NetworkAlertPolicyService.js +732 -0
- package/build/dist/Server/Services/NetworkAlertPolicyService.js.map +1 -0
- package/build/dist/Server/Services/NetworkDeviceAutoImportRuleEngineService.js +10 -9
- package/build/dist/Server/Services/NetworkDeviceAutoImportRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/NetworkDeviceAutoImportRuleService.js +54 -11
- package/build/dist/Server/Services/NetworkDeviceAutoImportRuleService.js.map +1 -1
- package/build/dist/Server/Services/NetworkDeviceRoleService.js +70 -0
- package/build/dist/Server/Services/NetworkDeviceRoleService.js.map +1 -0
- package/build/dist/Server/Services/NetworkDeviceService.js +841 -70
- package/build/dist/Server/Services/NetworkDeviceService.js.map +1 -1
- package/build/dist/Server/Services/NetworkSiteService.js +1145 -107
- package/build/dist/Server/Services/NetworkSiteService.js.map +1 -1
- package/build/dist/Server/Services/NetworkSiteTypeService.js +863 -0
- package/build/dist/Server/Services/NetworkSiteTypeService.js.map +1 -1
- package/build/dist/Server/Services/NetworkSnmpCredentialProfileService.js +217 -0
- package/build/dist/Server/Services/NetworkSnmpCredentialProfileService.js.map +1 -0
- package/build/dist/Server/Services/NotificationService.js +80 -17
- package/build/dist/Server/Services/NotificationService.js.map +1 -1
- package/build/dist/Server/Services/ProjectService.js +131 -30
- package/build/dist/Server/Services/ProjectService.js.map +1 -1
- package/build/dist/Server/Services/StatusPagePrivateUserService.js +92 -2
- package/build/dist/Server/Services/StatusPagePrivateUserService.js.map +1 -1
- package/build/dist/Server/Services/UserNotificationEmailRollupBatchService.js +76 -0
- package/build/dist/Server/Services/UserNotificationEmailRollupBatchService.js.map +1 -0
- package/build/dist/Server/Services/UserNotificationEmailRollupItemService.js +77 -0
- package/build/dist/Server/Services/UserNotificationEmailRollupItemService.js.map +1 -0
- package/build/dist/Server/Services/UserNotificationEmailRollupSettingService.js +111 -0
- package/build/dist/Server/Services/UserNotificationEmailRollupSettingService.js.map +1 -0
- package/build/dist/Server/Services/UserNotificationSettingService.js +46 -21
- package/build/dist/Server/Services/UserNotificationSettingService.js.map +1 -1
- package/build/dist/Server/Services/UserService.js +90 -0
- package/build/dist/Server/Services/UserService.js.map +1 -1
- package/build/dist/Server/Types/Database/QueryHelper.js +1 -1
- package/build/dist/Server/Types/Database/QueryHelper.js.map +1 -1
- package/build/dist/Server/Utils/AI/Chat/ObservabilityChatPrompt.js +14 -3
- package/build/dist/Server/Utils/AI/Chat/ObservabilityChatPrompt.js.map +1 -1
- package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/ExceptionSpikeDetector.js +10 -0
- package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/ExceptionSpikeDetector.js.map +1 -1
- package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/NewExceptionDetector.js +10 -0
- package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/NewExceptionDetector.js.map +1 -1
- package/build/dist/Server/Utils/AI/SRE/Insights/InsightTriageRunner.js +54 -1
- package/build/dist/Server/Utils/AI/SRE/Insights/InsightTriageRunner.js.map +1 -1
- package/build/dist/Server/Utils/AI/Toolbox/AlertTools.js +18 -4
- package/build/dist/Server/Utils/AI/Toolbox/AlertTools.js.map +1 -1
- package/build/dist/Server/Utils/Billing/BillingFailureNoticeThrottle.js +59 -0
- package/build/dist/Server/Utils/Billing/BillingFailureNoticeThrottle.js.map +1 -0
- package/build/dist/Server/Utils/DataSource/HttpFetch.js +2 -1
- package/build/dist/Server/Utils/DataSource/HttpFetch.js.map +1 -1
- package/build/dist/Server/Utils/EmailRollup/EmailRollupConstants.js +91 -0
- package/build/dist/Server/Utils/EmailRollup/EmailRollupConstants.js.map +1 -0
- package/build/dist/Server/Utils/EmailRollup/EmailRollupFlushRunner.js +691 -0
- package/build/dist/Server/Utils/EmailRollup/EmailRollupFlushRunner.js.map +1 -0
- package/build/dist/Server/Utils/EmailRollup/EmailRollupRenderer.js +497 -0
- package/build/dist/Server/Utils/EmailRollup/EmailRollupRenderer.js.map +1 -0
- package/build/dist/Server/Utils/EmailRollup/EmailRollupWriter.js +257 -0
- package/build/dist/Server/Utils/EmailRollup/EmailRollupWriter.js.map +1 -0
- package/build/dist/Server/Utils/LLM/LLMService.js +64 -1
- package/build/dist/Server/Utils/LLM/LLMService.js.map +1 -1
- package/build/dist/Server/Utils/LogRedaction.js +8 -0
- package/build/dist/Server/Utils/LogRedaction.js.map +1 -1
- package/build/dist/Server/Utils/Logger.js +63 -1
- package/build/dist/Server/Utils/Logger.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/Criteria/DatabaseMonitorCriteria.js +141 -0
- package/build/dist/Server/Utils/Monitor/Criteria/DatabaseMonitorCriteria.js.map +1 -0
- package/build/dist/Server/Utils/Monitor/Criteria/EvaluateOverTime.js +8 -1
- package/build/dist/Server/Utils/Monitor/Criteria/EvaluateOverTime.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/Criteria/SnmpMonitorCriteria.js +51 -1
- package/build/dist/Server/Utils/Monitor/Criteria/SnmpMonitorCriteria.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaDataExtractor.js +7 -0
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaDataExtractor.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js +37 -0
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaObservationBuilder.js +158 -6
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaObservationBuilder.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorMetricUtil.js +33 -0
- package/build/dist/Server/Utils/Monitor/MonitorMetricUtil.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorTemplateUtil.js +32 -0
- package/build/dist/Server/Utils/Monitor/MonitorTemplateUtil.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/NetworkDeviceHydrationUtil.js +330 -21
- package/build/dist/Server/Utils/Monitor/NetworkDeviceHydrationUtil.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/NetworkDeviceMetricUtil.js +55 -10
- package/build/dist/Server/Utils/Monitor/NetworkDeviceMetricUtil.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/NetworkDeviceWalkUtil.js +178 -49
- package/build/dist/Server/Utils/Monitor/NetworkDeviceWalkUtil.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/NetworkInventoryUtil.js +119 -29
- package/build/dist/Server/Utils/Monitor/NetworkInventoryUtil.js.map +1 -1
- package/build/dist/Server/Utils/NetworkDevice/DeviceHealthAggregation.js +30 -17
- package/build/dist/Server/Utils/NetworkDevice/DeviceHealthAggregation.js.map +1 -1
- package/build/dist/Server/Utils/NetworkSite/NetworkSiteHierarchyLock.js +158 -0
- package/build/dist/Server/Utils/NetworkSite/NetworkSiteHierarchyLock.js.map +1 -0
- package/build/dist/Server/Utils/OutboundUserAgent.js +123 -0
- package/build/dist/Server/Utils/OutboundUserAgent.js.map +1 -0
- package/build/dist/Server/Utils/StartServer.js +38 -14
- package/build/dist/Server/Utils/StartServer.js.map +1 -1
- package/build/dist/Server/Utils/Telemetry/CaptureSpan.js +28 -8
- package/build/dist/Server/Utils/Telemetry/CaptureSpan.js.map +1 -1
- package/build/dist/Server/Utils/Telemetry/ErrorClassResolver.js +95 -0
- package/build/dist/Server/Utils/Telemetry/ErrorClassResolver.js.map +1 -0
- package/build/dist/Server/Utils/Telemetry/SpanUtil.js +29 -0
- package/build/dist/Server/Utils/Telemetry/SpanUtil.js.map +1 -1
- package/build/dist/Server/Utils/Telemetry.js +162 -46
- package/build/dist/Server/Utils/Telemetry.js.map +1 -1
- package/build/dist/Types/AI/ExceptionAIClassification.js +10 -24
- package/build/dist/Types/AI/ExceptionAIClassification.js.map +1 -1
- package/build/dist/Types/Email/EmailTemplateType.js +1 -0
- package/build/dist/Types/Email/EmailTemplateType.js.map +1 -1
- package/build/dist/Types/EnterpriseLicense/EnterpriseLicenseUsageSnapshot.js +2 -0
- package/build/dist/Types/EnterpriseLicense/EnterpriseLicenseUsageSnapshot.js.map +1 -0
- package/build/dist/Types/EnterpriseLicense/EnterpriseLicenseUserCountSource.js +7 -0
- package/build/dist/Types/EnterpriseLicense/EnterpriseLicenseUserCountSource.js.map +1 -0
- package/build/dist/Types/Exception/ApiException.js +9 -0
- package/build/dist/Types/Exception/ApiException.js.map +1 -1
- package/build/dist/Types/Exception/BadDataException.js +10 -0
- package/build/dist/Types/Exception/BadDataException.js.map +1 -1
- package/build/dist/Types/Exception/BadRequestException.js +10 -0
- package/build/dist/Types/Exception/BadRequestException.js.map +1 -1
- package/build/dist/Types/Exception/Exception.js +56 -0
- package/build/dist/Types/Exception/Exception.js.map +1 -1
- package/build/dist/Types/Exception/ForbiddenException.js +9 -0
- package/build/dist/Types/Exception/ForbiddenException.js.map +1 -1
- package/build/dist/Types/Exception/NotAuthenticatedException.js +9 -0
- package/build/dist/Types/Exception/NotAuthenticatedException.js.map +1 -1
- package/build/dist/Types/Exception/NotAuthorizedException.js +9 -0
- package/build/dist/Types/Exception/NotAuthorizedException.js.map +1 -1
- package/build/dist/Types/Exception/NotFoundException.js +10 -0
- package/build/dist/Types/Exception/NotFoundException.js.map +1 -1
- package/build/dist/Types/Exception/PayloadTooLargeException.js +10 -0
- package/build/dist/Types/Exception/PayloadTooLargeException.js.map +1 -1
- package/build/dist/Types/Exception/PaymentRequiredException.js +9 -0
- package/build/dist/Types/Exception/PaymentRequiredException.js.map +1 -1
- package/build/dist/Types/Exception/ServiceUnavailableException.js +9 -0
- package/build/dist/Types/Exception/ServiceUnavailableException.js.map +1 -1
- package/build/dist/Types/Exception/SsoAuthorizationException.js +9 -0
- package/build/dist/Types/Exception/SsoAuthorizationException.js.map +1 -1
- package/build/dist/Types/Exception/TenantNotFoundException.js +10 -0
- package/build/dist/Types/Exception/TenantNotFoundException.js.map +1 -1
- package/build/dist/Types/Exception/TimeoutException.js +9 -0
- package/build/dist/Types/Exception/TimeoutException.js.map +1 -1
- package/build/dist/Types/Exception/TooManyRequestsException.js +9 -0
- package/build/dist/Types/Exception/TooManyRequestsException.js.map +1 -1
- package/build/dist/Types/Exception/UnableToReachServer.js +9 -0
- package/build/dist/Types/Exception/UnableToReachServer.js.map +1 -1
- package/build/dist/Types/Exception/WebsiteRequestException.js +9 -0
- package/build/dist/Types/Exception/WebsiteRequestException.js.map +1 -1
- package/build/dist/Types/Monitor/CriteriaFilter.js +45 -2
- package/build/dist/Types/Monitor/CriteriaFilter.js.map +1 -1
- package/build/dist/Types/Monitor/DatabaseMetricCatalog.js +594 -0
- package/build/dist/Types/Monitor/DatabaseMetricCatalog.js.map +1 -0
- package/build/dist/Types/Monitor/DatabaseMonitor/DatabaseMonitorResponse.js +21 -0
- package/build/dist/Types/Monitor/DatabaseMonitor/DatabaseMonitorResponse.js.map +1 -0
- package/build/dist/Types/Monitor/MonitorCriteriaInstance.js +70 -0
- package/build/dist/Types/Monitor/MonitorCriteriaInstance.js.map +1 -1
- package/build/dist/Types/Monitor/MonitorMetricType.js +61 -0
- package/build/dist/Types/Monitor/MonitorMetricType.js.map +1 -1
- package/build/dist/Types/Monitor/MonitorStep.js +54 -0
- package/build/dist/Types/Monitor/MonitorStep.js.map +1 -1
- package/build/dist/Types/Monitor/MonitorStepDatabaseMonitor.js +122 -0
- package/build/dist/Types/Monitor/MonitorStepDatabaseMonitor.js.map +1 -0
- package/build/dist/Types/Monitor/MonitorStepSqlMonitor.js.map +1 -1
- package/build/dist/Types/Monitor/MonitorType.js +45 -1
- package/build/dist/Types/Monitor/MonitorType.js.map +1 -1
- package/build/dist/Types/Monitor/SnmpMonitor/NetworkDeviceAlertPack.js +21 -1
- package/build/dist/Types/Monitor/SnmpMonitor/NetworkDeviceAlertPack.js.map +1 -1
- package/build/dist/Types/Monitor/SqlConnectionConfig.js +2 -0
- package/build/dist/Types/Monitor/SqlConnectionConfig.js.map +1 -0
- package/build/dist/Types/NetworkDevice/DefaultNetworkDeviceRole.js +105 -0
- package/build/dist/Types/NetworkDevice/DefaultNetworkDeviceRole.js.map +1 -0
- package/build/dist/Types/NetworkDevice/NetworkAlertPolicyScope.js +172 -0
- package/build/dist/Types/NetworkDevice/NetworkAlertPolicyScope.js.map +1 -0
- package/build/dist/Types/NetworkDevice/NetworkDeviceMonitoringMethod.js +40 -22
- package/build/dist/Types/NetworkDevice/NetworkDeviceMonitoringMethod.js.map +1 -1
- package/build/dist/Types/NetworkSite/DefaultNetworkSiteTypeHierarchy.js +26 -0
- package/build/dist/Types/NetworkSite/DefaultNetworkSiteTypeHierarchy.js.map +1 -0
- package/build/dist/Types/NotificationSetting/NotificationEmailRollupCategory.js +186 -0
- package/build/dist/Types/NotificationSetting/NotificationEmailRollupCategory.js.map +1 -0
- package/build/dist/Types/NotificationSetting/NotificationEmailRollupPolicy.js +87 -0
- package/build/dist/Types/NotificationSetting/NotificationEmailRollupPolicy.js.map +1 -0
- package/build/dist/Types/Permission.js +120 -0
- package/build/dist/Types/Permission.js.map +1 -1
- package/build/dist/Types/Telemetry/ErrorClass.js +216 -0
- package/build/dist/Types/Telemetry/ErrorClass.js.map +1 -0
- package/build/dist/Types/Telemetry/UnitOfWork.js +59 -0
- package/build/dist/Types/Telemetry/UnitOfWork.js.map +1 -0
- package/build/dist/UI/Components/Charts/Area/AreaChart.js +1 -1
- package/build/dist/UI/Components/Charts/Area/AreaChart.js.map +1 -1
- package/build/dist/UI/Components/Charts/Bar/BarChart.js +1 -1
- package/build/dist/UI/Components/Charts/Bar/BarChart.js.map +1 -1
- package/build/dist/UI/Components/Charts/ChartGroup/ChartGroup.js +6 -1
- package/build/dist/UI/Components/Charts/ChartGroup/ChartGroup.js.map +1 -1
- package/build/dist/UI/Components/Charts/ChartLibrary/AreaChart/AreaChart.js +79 -31
- package/build/dist/UI/Components/Charts/ChartLibrary/AreaChart/AreaChart.js.map +1 -1
- package/build/dist/UI/Components/Charts/ChartLibrary/BarChart/BarChart.js +7 -1
- package/build/dist/UI/Components/Charts/ChartLibrary/BarChart/BarChart.js.map +1 -1
- package/build/dist/UI/Components/Charts/ChartLibrary/LineChart/LineChart.js +79 -31
- package/build/dist/UI/Components/Charts/ChartLibrary/LineChart/LineChart.js.map +1 -1
- package/build/dist/UI/Components/Charts/ChartLibrary/Utils/DoubleClick.js +14 -0
- package/build/dist/UI/Components/Charts/ChartLibrary/Utils/DoubleClick.js.map +1 -0
- package/build/dist/UI/Components/Charts/Line/LineChart.js +1 -1
- package/build/dist/UI/Components/Charts/Line/LineChart.js.map +1 -1
- package/build/dist/UI/Components/CommandPalette/CommandPalette.js +2 -7
- package/build/dist/UI/Components/CommandPalette/CommandPalette.js.map +1 -1
- package/build/dist/UI/Components/EditionLabel/EditionLabel.js +3 -0
- package/build/dist/UI/Components/EditionLabel/EditionLabel.js.map +1 -1
- package/build/dist/UI/Components/Modal/Modal.js +2 -7
- package/build/dist/UI/Components/Modal/Modal.js.map +1 -1
- package/build/dist/UI/Components/ModelTable/BaseModelTable.js +39 -13
- package/build/dist/UI/Components/ModelTable/BaseModelTable.js.map +1 -1
- package/build/dist/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.js +39 -0
- package/build/dist/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.js.map +1 -1
- package/build/dist/UI/Components/Navbar/NavBar.js +44 -9
- package/build/dist/UI/Components/Navbar/NavBar.js.map +1 -1
- package/build/dist/UI/Components/Navbar/NavBarMenuModal.js +2 -2
- package/build/dist/UI/Components/Navbar/NavBarMenuModal.js.map +1 -1
- package/build/dist/UI/Components/ProgressBar/ProgressBar.js +12 -1
- package/build/dist/UI/Components/ProgressBar/ProgressBar.js.map +1 -1
- package/build/dist/UI/Components/RadioButtons/BasicRadioButtons.js +6 -6
- package/build/dist/UI/Components/RadioButtons/BasicRadioButtons.js.map +1 -1
- package/build/dist/UI/Components/SideMenu/CountModelSideMenuItem.js +1 -1
- package/build/dist/UI/Components/SideMenu/CountModelSideMenuItem.js.map +1 -1
- package/build/dist/UI/Components/SideMenu/SideMenu.js +76 -11
- package/build/dist/UI/Components/SideMenu/SideMenu.js.map +1 -1
- package/build/dist/UI/Components/SideMenu/SideMenuItem.js +50 -54
- package/build/dist/UI/Components/SideMenu/SideMenuItem.js.map +1 -1
- package/build/dist/UI/Components/SideMenu/SideMenuSection.js +32 -9
- package/build/dist/UI/Components/SideMenu/SideMenuSection.js.map +1 -1
- package/build/dist/UI/Components/SideOver/SideOver.js +5 -20
- package/build/dist/UI/Components/SideOver/SideOver.js.map +1 -1
- package/build/dist/UI/Utils/PageScrollLock.js +31 -3
- package/build/dist/UI/Utils/PageScrollLock.js.map +1 -1
- package/build/dist/UI/Utils/PermissionGate.js +42 -1
- package/build/dist/UI/Utils/PermissionGate.js.map +1 -1
- package/build/dist/UI/Utils/SensitiveUrlToken.js +97 -0
- package/build/dist/UI/Utils/SensitiveUrlToken.js.map +1 -0
- package/build/dist/UI/Utils/TestLLMProvider.js +4 -5
- package/build/dist/UI/Utils/TestLLMProvider.js.map +1 -1
- package/build/dist/UI/Utils/UseDashboardTimeRangeZoom.js +42 -0
- package/build/dist/UI/Utils/UseDashboardTimeRangeZoom.js.map +1 -0
- package/build/dist/Utils/Dashboard/DashboardTimeRangeZoom.js +74 -0
- package/build/dist/Utils/Dashboard/DashboardTimeRangeZoom.js.map +1 -0
- package/build/dist/Utils/EnterpriseLicense/EnterpriseLicenseSeats.js +15 -0
- package/build/dist/Utils/EnterpriseLicense/EnterpriseLicenseSeats.js.map +1 -1
- package/build/dist/Utils/EnterpriseLicense/EnterpriseLicenseUsage.js +111 -9
- package/build/dist/Utils/EnterpriseLicense/EnterpriseLicenseUsage.js.map +1 -1
- package/build/dist/Utils/Monitor/MonitorMetricType.js +109 -1
- package/build/dist/Utils/Monitor/MonitorMetricType.js.map +1 -1
- package/build/dist/Utils/Monitor/NetworkDeviceRoleCatalog.js +126 -0
- package/build/dist/Utils/Monitor/NetworkDeviceRoleCatalog.js.map +1 -0
- package/build/dist/Utils/Monitor/NetworkDeviceRoleUtil.js +2 -1
- package/build/dist/Utils/Monitor/NetworkDeviceRoleUtil.js.map +1 -1
- package/build/dist/Utils/Monitor/NetworkTopologyUtil.js +75 -35
- package/build/dist/Utils/Monitor/NetworkTopologyUtil.js.map +1 -1
- package/build/dist/Utils/NetworkDevice/DeviceHealthStateUtil.js +27 -7
- package/build/dist/Utils/NetworkDevice/DeviceHealthStateUtil.js.map +1 -1
- package/build/dist/Utils/NetworkDevice/DeviceReachabilityUtil.js +7 -5
- package/build/dist/Utils/NetworkDevice/DeviceReachabilityUtil.js.map +1 -1
- package/build/dist/Utils/NetworkDevice/DeviceRoleKeyUtil.js +114 -0
- package/build/dist/Utils/NetworkDevice/DeviceRoleKeyUtil.js.map +1 -0
- package/build/dist/Utils/NetworkDevice/NetworkAlertPolicyBootstrapUtil.js +180 -0
- package/build/dist/Utils/NetworkDevice/NetworkAlertPolicyBootstrapUtil.js.map +1 -0
- package/build/dist/Utils/NetworkDevice/SnmpCredentialUtil.js +12 -0
- package/build/dist/Utils/NetworkDevice/SnmpCredentialUtil.js.map +1 -0
- package/build/dist/Utils/NetworkDiscovery/AutoImportRuleMatcher.js +15 -5
- package/build/dist/Utils/NetworkDiscovery/AutoImportRuleMatcher.js.map +1 -1
- package/build/dist/Utils/NetworkDiscovery/DiscoveredDeviceBuilder.js +44 -15
- package/build/dist/Utils/NetworkDiscovery/DiscoveredDeviceBuilder.js.map +1 -1
- package/build/dist/Utils/NetworkDiscovery/DiscoveryImportEligibility.js +52 -23
- package/build/dist/Utils/NetworkDiscovery/DiscoveryImportEligibility.js.map +1 -1
- package/build/dist/Utils/NetworkDiscovery/PingMonitorBuilder.js +85 -13
- package/build/dist/Utils/NetworkDiscovery/PingMonitorBuilder.js.map +1 -1
- package/build/dist/Utils/NetworkSite/SiteStatusRollupUtil.js +30 -15
- package/build/dist/Utils/NetworkSite/SiteStatusRollupUtil.js.map +1 -1
- package/build/dist/Utils/NetworkSite/TypeHierarchyUtil.js +191 -0
- package/build/dist/Utils/NetworkSite/TypeHierarchyUtil.js.map +1 -0
- package/build/dist/Utils/Rules/RulePatternMatchUtil.js +1 -1
- package/build/dist/Utils/Slug.js +31 -1
- package/build/dist/Utils/Slug.js.map +1 -1
- package/package.json +2 -2
|
@@ -41,6 +41,7 @@ import useChartAnnotations, {
|
|
|
41
41
|
UseChartAnnotationsResult,
|
|
42
42
|
} from "../Annotations/UseChartAnnotations";
|
|
43
43
|
import { cx } from "../Utils/Cx";
|
|
44
|
+
import { DOUBLE_CLICK_DISAMBIGUATION_MS } from "../Utils/DoubleClick";
|
|
44
45
|
import { getYAxisDomain } from "../Utils/GetYAxisDomain";
|
|
45
46
|
import { hasOnlyOneValueForKey } from "../Utils/HasOnlyOneValueForKey";
|
|
46
47
|
import {
|
|
@@ -643,6 +644,15 @@ interface LineChartProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
|
643
644
|
formattedExemplarPoints?: Array<FormattedExemplarPoint> | undefined;
|
|
644
645
|
onExemplarClick?: ((exemplar: ExemplarPoint) => void) | undefined;
|
|
645
646
|
onTimeRangeSelect?: ((startTime: Date, endTime: Date) => void) | undefined;
|
|
647
|
+
/**
|
|
648
|
+
* Double-click on the plot surface: the counterpart to drag-to-select,
|
|
649
|
+
* for undoing the zoom it produced. Supplying it makes single clicks
|
|
650
|
+
* wait DOUBLE_CLICK_DISAMBIGUATION_MS before they act, so a double-click
|
|
651
|
+
* cannot also fire the bucket-click path twice on its way past — hosts
|
|
652
|
+
* that have nothing to reset should leave it undefined and keep clicks
|
|
653
|
+
* instant.
|
|
654
|
+
*/
|
|
655
|
+
onTimeRangeReset?: (() => void) | undefined;
|
|
646
656
|
/**
|
|
647
657
|
* Plain click on a time bucket (the plot background — dot/legend clicks
|
|
648
658
|
* and drag-selections never reach this). [bucketStart, bucketEnd) uses
|
|
@@ -702,6 +712,7 @@ const LineChart: React.ForwardRefExoticComponent<
|
|
|
702
712
|
formattedTimeReferenceLines,
|
|
703
713
|
formattedReferenceRegions,
|
|
704
714
|
onTimeRangeSelect,
|
|
715
|
+
onTimeRangeReset,
|
|
705
716
|
onBucketClick,
|
|
706
717
|
ghostCategories,
|
|
707
718
|
...other
|
|
@@ -732,9 +743,26 @@ const LineChart: React.ForwardRefExoticComponent<
|
|
|
732
743
|
React.useRef<number | null>(null);
|
|
733
744
|
const suppressNextClickRef: React.MutableRefObject<boolean> =
|
|
734
745
|
React.useRef<boolean>(false);
|
|
746
|
+
const hasOnTimeRangeReset: boolean = Boolean(onTimeRangeReset);
|
|
747
|
+
/*
|
|
748
|
+
* A pending single-click, held open long enough for a second click to
|
|
749
|
+
* cancel it. Only armed when onTimeRangeReset is supplied.
|
|
750
|
+
*/
|
|
751
|
+
const pendingClickTimeoutRef: React.MutableRefObject<ReturnType<
|
|
752
|
+
typeof setTimeout
|
|
753
|
+
> | null> = React.useRef<ReturnType<typeof setTimeout> | null>(null);
|
|
735
754
|
const categoryColors: Map<string, ChartColorValue> =
|
|
736
755
|
constructCategoryColors(categories, colors);
|
|
737
756
|
|
|
757
|
+
React.useEffect(() => {
|
|
758
|
+
return () => {
|
|
759
|
+
if (pendingClickTimeoutRef.current !== null) {
|
|
760
|
+
clearTimeout(pendingClickTimeoutRef.current);
|
|
761
|
+
pendingClickTimeoutRef.current = null;
|
|
762
|
+
}
|
|
763
|
+
};
|
|
764
|
+
}, []);
|
|
765
|
+
|
|
738
766
|
/*
|
|
739
767
|
* Annotations are drawn onto the categorical axis, so the layer needs
|
|
740
768
|
* the same x values recharts is drawing — not the source dates.
|
|
@@ -978,6 +1006,51 @@ const LineChart: React.ForwardRefExoticComponent<
|
|
|
978
1006
|
onTimeRangeSelect(startDate, endDate);
|
|
979
1007
|
}
|
|
980
1008
|
|
|
1009
|
+
/*
|
|
1010
|
+
* The plain-click path, split out so it can either run inline (no
|
|
1011
|
+
* reset handler) or be deferred behind the double-click window.
|
|
1012
|
+
*/
|
|
1013
|
+
function handleChartClick(chartState: RangeSelectionChartState): void {
|
|
1014
|
+
/*
|
|
1015
|
+
* A click while a legend/dot selection is active keeps its
|
|
1016
|
+
* long-standing meaning — clear the selection — and never
|
|
1017
|
+
* also pins a bucket.
|
|
1018
|
+
*/
|
|
1019
|
+
if (hasOnValueChange && (activeLegend || activeDot)) {
|
|
1020
|
+
setActiveDot(undefined);
|
|
1021
|
+
setActiveLegend(undefined);
|
|
1022
|
+
onValueChange?.(null);
|
|
1023
|
+
return;
|
|
1024
|
+
}
|
|
1025
|
+
if (!onBucketClick) {
|
|
1026
|
+
return;
|
|
1027
|
+
}
|
|
1028
|
+
const rowIndex: number | null = getRowIndexFromChartState(chartState);
|
|
1029
|
+
if (rowIndex === null) {
|
|
1030
|
+
return;
|
|
1031
|
+
}
|
|
1032
|
+
const bucketStart: Date | null = getBucketDateAtIndex(rowIndex);
|
|
1033
|
+
if (!bucketStart) {
|
|
1034
|
+
return;
|
|
1035
|
+
}
|
|
1036
|
+
/*
|
|
1037
|
+
* Cover the full bucket: width from adjacent row dates, the
|
|
1038
|
+
* same derivation drag-to-select uses.
|
|
1039
|
+
*/
|
|
1040
|
+
const adjacentBucketDate: Date | null =
|
|
1041
|
+
rowIndex > 0
|
|
1042
|
+
? getBucketDateAtIndex(rowIndex - 1)
|
|
1043
|
+
: getBucketDateAtIndex(rowIndex + 1);
|
|
1044
|
+
const clickedBucketWidthInMs: number = adjacentBucketDate
|
|
1045
|
+
? Math.abs(bucketStart.getTime() - adjacentBucketDate.getTime())
|
|
1046
|
+
: 0;
|
|
1047
|
+
onBucketClick(
|
|
1048
|
+
bucketStart,
|
|
1049
|
+
new Date(bucketStart.getTime() + clickedBucketWidthInMs),
|
|
1050
|
+
(data[rowIndex] || {}) as Record<string, number | string>,
|
|
1051
|
+
);
|
|
1052
|
+
}
|
|
1053
|
+
|
|
981
1054
|
return (
|
|
982
1055
|
<div
|
|
983
1056
|
ref={ref}
|
|
@@ -1016,46 +1089,35 @@ const LineChart: React.ForwardRefExoticComponent<
|
|
|
1016
1089
|
if (suppressNextClickRef.current) {
|
|
1017
1090
|
return;
|
|
1018
1091
|
}
|
|
1019
|
-
|
|
1020
|
-
|
|
1021
|
-
* long-standing meaning — clear the selection — and never
|
|
1022
|
-
* also pins a bucket.
|
|
1023
|
-
*/
|
|
1024
|
-
if (hasOnValueChange && (activeLegend || activeDot)) {
|
|
1025
|
-
setActiveDot(undefined);
|
|
1026
|
-
setActiveLegend(undefined);
|
|
1027
|
-
onValueChange?.(null);
|
|
1028
|
-
return;
|
|
1029
|
-
}
|
|
1030
|
-
if (!onBucketClick) {
|
|
1031
|
-
return;
|
|
1032
|
-
}
|
|
1033
|
-
const rowIndex: number | null =
|
|
1034
|
-
getRowIndexFromChartState(chartState);
|
|
1035
|
-
if (rowIndex === null) {
|
|
1036
|
-
return;
|
|
1037
|
-
}
|
|
1038
|
-
const bucketStart: Date | null = getBucketDateAtIndex(rowIndex);
|
|
1039
|
-
if (!bucketStart) {
|
|
1092
|
+
if (!hasOnTimeRangeReset) {
|
|
1093
|
+
handleChartClick(chartState);
|
|
1040
1094
|
return;
|
|
1041
1095
|
}
|
|
1042
1096
|
/*
|
|
1043
|
-
*
|
|
1044
|
-
*
|
|
1097
|
+
* Reset is on, so hold the click open: both clicks of a
|
|
1098
|
+
* double-click arrive before dblclick does, and neither
|
|
1099
|
+
* may pin a bucket. The second click re-arms the timer,
|
|
1100
|
+
* dblclick clears it.
|
|
1045
1101
|
*/
|
|
1046
|
-
|
|
1047
|
-
|
|
1048
|
-
|
|
1049
|
-
|
|
1050
|
-
|
|
1051
|
-
|
|
1052
|
-
|
|
1053
|
-
onBucketClick(
|
|
1054
|
-
bucketStart,
|
|
1055
|
-
new Date(bucketStart.getTime() + bucketWidthInMs),
|
|
1056
|
-
(data[rowIndex] || {}) as Record<string, number | string>,
|
|
1057
|
-
);
|
|
1102
|
+
if (pendingClickTimeoutRef.current !== null) {
|
|
1103
|
+
clearTimeout(pendingClickTimeoutRef.current);
|
|
1104
|
+
}
|
|
1105
|
+
pendingClickTimeoutRef.current = setTimeout(() => {
|
|
1106
|
+
pendingClickTimeoutRef.current = null;
|
|
1107
|
+
handleChartClick(chartState);
|
|
1108
|
+
}, DOUBLE_CLICK_DISAMBIGUATION_MS);
|
|
1058
1109
|
}}
|
|
1110
|
+
{...(hasOnTimeRangeReset
|
|
1111
|
+
? {
|
|
1112
|
+
onDoubleClick: () => {
|
|
1113
|
+
if (pendingClickTimeoutRef.current !== null) {
|
|
1114
|
+
clearTimeout(pendingClickTimeoutRef.current);
|
|
1115
|
+
pendingClickTimeoutRef.current = null;
|
|
1116
|
+
}
|
|
1117
|
+
onTimeRangeReset?.();
|
|
1118
|
+
},
|
|
1119
|
+
}
|
|
1120
|
+
: {})}
|
|
1059
1121
|
margin={{
|
|
1060
1122
|
/*
|
|
1061
1123
|
* Tick labels are 10px font with a translate(0, 6) — they
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* How long a chart holds a single click open, waiting to see whether it is
|
|
3
|
+
* really the first half of a double-click.
|
|
4
|
+
*
|
|
5
|
+
* Charts that accept `onTimeRangeReset` have to tell a bucket click apart
|
|
6
|
+
* from a reset gesture, and the browser delivers BOTH clicks of a
|
|
7
|
+
* double-click before it delivers `dblclick` — so the only way a
|
|
8
|
+
* double-click can avoid also pinning a bucket twice is for the click path
|
|
9
|
+
* to wait. Kept just above the ~200ms most platforms use as their
|
|
10
|
+
* double-click threshold, and short enough that a real single click still
|
|
11
|
+
* feels immediate. Charts with no reset handler skip the wait entirely.
|
|
12
|
+
*/
|
|
13
|
+
export const DOUBLE_CLICK_DISAMBIGUATION_MS: number = 250;
|
|
@@ -62,6 +62,12 @@ export interface ComponentProps {
|
|
|
62
62
|
* buckets calls back with the [start, end) of the selected time range.
|
|
63
63
|
*/
|
|
64
64
|
onTimeRangeSelect?: ((startTime: Date, endTime: Date) => void) | undefined;
|
|
65
|
+
/*
|
|
66
|
+
* Double-click on the plot: undoes whatever drag-to-select produced.
|
|
67
|
+
* Supply it only when a reset is actually possible — see ChartLibrary
|
|
68
|
+
* onTimeRangeReset for why an idle handler costs click latency.
|
|
69
|
+
*/
|
|
70
|
+
onTimeRangeReset?: (() => void) | undefined;
|
|
65
71
|
// Plain click on a bucket — see ChartLibrary onBucketClick.
|
|
66
72
|
onBucketClick?:
|
|
67
73
|
| ((
|
|
@@ -221,6 +227,7 @@ const LineChartElement: FunctionComponent<LineInternalProps> = (
|
|
|
221
227
|
}
|
|
222
228
|
onExemplarClick={props.onExemplarClick}
|
|
223
229
|
onTimeRangeSelect={props.onTimeRangeSelect}
|
|
230
|
+
onTimeRangeReset={props.onTimeRangeReset}
|
|
224
231
|
onBucketClick={props.onBucketClick}
|
|
225
232
|
ghostCategories={props.ghostSeriesNames}
|
|
226
233
|
/>
|
|
@@ -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;
|
|
@@ -201,6 +201,13 @@ export enum ModalTableBulkDefaultActions {
|
|
|
201
201
|
export interface BulkActionProps<T extends BaseModel | AnalyticsBaseModel> {
|
|
202
202
|
buttons: Array<BulkActionButtonSchema<T> | ModalTableBulkDefaultActions>;
|
|
203
203
|
matchBulkSelectedItemByField?: keyof T | undefined; // which field to use to match selected items. For exmaple this could be '_id'
|
|
204
|
+
/**
|
|
205
|
+
* Appended to the bulk Delete confirmation, for a surface where deleting the
|
|
206
|
+
* selected rows also removes records the user did not select, or where a
|
|
207
|
+
* reversible alternative exists. The default sentence only says the deletion
|
|
208
|
+
* cannot be undone - it cannot know what else goes with it.
|
|
209
|
+
*/
|
|
210
|
+
deleteConfirmationWarning?: string | undefined;
|
|
204
211
|
}
|
|
205
212
|
|
|
206
213
|
export interface BaseTableProps<
|
|
@@ -2923,7 +2930,12 @@ const BaseModelTable: <TBaseModel extends BaseModel | AnalyticsBaseModel>(
|
|
|
2923
2930
|
items.length === 1
|
|
2924
2931
|
? props.singularName || model.singularName || "item"
|
|
2925
2932
|
: props.pluralName || model.pluralName || "items";
|
|
2926
|
-
|
|
2933
|
+
|
|
2934
|
+
const warning: string = props.bulkActions?.deleteConfirmationWarning
|
|
2935
|
+
? ` ${props.bulkActions.deleteConfirmationWarning}`
|
|
2936
|
+
: "";
|
|
2937
|
+
|
|
2938
|
+
return `Are you sure you want to delete ${items.length} ${itemLabel}? This action cannot be undone.${warning}`;
|
|
2927
2939
|
},
|
|
2928
2940
|
confirmTitle: (items: Array<TBaseModel>) => {
|
|
2929
2941
|
const itemLabel: string =
|
|
@@ -2946,26 +2958,41 @@ const BaseModelTable: <TBaseModel extends BaseModel | AnalyticsBaseModel>(
|
|
|
2946
2958
|
const failedItems: Array<BulkActionFailed<TBaseModel>> = [];
|
|
2947
2959
|
|
|
2948
2960
|
for (let i: number = 0; i < items.length; i++) {
|
|
2949
|
-
|
|
2950
|
-
|
|
2951
|
-
|
|
2952
|
-
|
|
2961
|
+
const item: TBaseModel = items[i]!;
|
|
2962
|
+
|
|
2963
|
+
// remove items from inProgressItems
|
|
2964
|
+
inProgressItems.splice(inProgressItems.indexOf(item), 1);
|
|
2953
2965
|
|
|
2966
|
+
try {
|
|
2954
2967
|
await props.callbacks.deleteItem(item);
|
|
2955
2968
|
successItems.push(item);
|
|
2956
|
-
|
|
2957
|
-
onProgressInfo({
|
|
2958
|
-
inProgressItems: inProgressItems,
|
|
2959
|
-
successItems: successItems,
|
|
2960
|
-
failed: failedItems,
|
|
2961
|
-
totalItems: items,
|
|
2962
|
-
});
|
|
2963
2969
|
} catch (err) {
|
|
2964
2970
|
failedItems.push({
|
|
2965
|
-
item:
|
|
2971
|
+
item: item,
|
|
2966
2972
|
failedMessage: API.getFriendlyMessage(err),
|
|
2967
2973
|
});
|
|
2968
2974
|
}
|
|
2975
|
+
|
|
2976
|
+
/*
|
|
2977
|
+
* Reported after a failure as well as after a success. This used to
|
|
2978
|
+
* sit inside the `try`, so a row that failed moved neither the
|
|
2979
|
+
* progress bar nor the failure list until some later row succeeded
|
|
2980
|
+
* - and a run whose trailing rows all failed (or one where every
|
|
2981
|
+
* row failed, which is what a permission or constraint problem
|
|
2982
|
+
* looks like) ended with the modal still showing the counts from
|
|
2983
|
+
* before them. Deleting hundreds of rows at once is exactly where
|
|
2984
|
+
* partial failure is expected, so it has to be visible.
|
|
2985
|
+
*
|
|
2986
|
+
* Copies, not the live arrays: the progress info goes into React
|
|
2987
|
+
* state, and pushing into the same array reference leaves the
|
|
2988
|
+
* previous render's snapshot mutated underneath it.
|
|
2989
|
+
*/
|
|
2990
|
+
onProgressInfo({
|
|
2991
|
+
inProgressItems: [...inProgressItems],
|
|
2992
|
+
successItems: [...successItems],
|
|
2993
|
+
failed: [...failedItems],
|
|
2994
|
+
totalItems: items,
|
|
2995
|
+
});
|
|
2969
2996
|
}
|
|
2970
2997
|
|
|
2971
2998
|
onBulkActionEnd();
|
|
@@ -3116,9 +3143,17 @@ const BaseModelTable: <TBaseModel extends BaseModel | AnalyticsBaseModel>(
|
|
|
3116
3143
|
},
|
|
3117
3144
|
);
|
|
3118
3145
|
|
|
3146
|
+
/*
|
|
3147
|
+
* On a table that already offers bulk actions the gate decides on
|
|
3148
|
+
* its own, because there is no selection column left to grow: the
|
|
3149
|
+
* row checkboxes are already there. That covers the locked case, and
|
|
3150
|
+
* it also covers a master admin - allowed everything by the gate, but
|
|
3151
|
+
* holding no project permission for `userCanDelete` to find, so the
|
|
3152
|
+
* Delete they are entitled to used to be missing from a menu whose
|
|
3153
|
+
* every other action worked (issue #3559).
|
|
3154
|
+
*/
|
|
3119
3155
|
const canAutoInjectDelete: boolean =
|
|
3120
|
-
userCanDelete ||
|
|
3121
|
-
(bulkDeleteGate.disabled && sourceButtons.length > 0);
|
|
3156
|
+
userCanDelete || (bulkDeleteGate.show && sourceButtons.length > 0);
|
|
3122
3157
|
|
|
3123
3158
|
if (canAutoInjectDelete && !alreadyHasDeleteAction) {
|
|
3124
3159
|
sourceButtons.push(ModalTableBulkDefaultActions.Delete);
|
|
@@ -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",
|
|
@@ -66,11 +66,11 @@ export interface ComponentProps {
|
|
|
66
66
|
link: URL;
|
|
67
67
|
};
|
|
68
68
|
/*
|
|
69
|
-
* When true,
|
|
70
|
-
*
|
|
71
|
-
*
|
|
72
|
-
*
|
|
73
|
-
* shortcut.
|
|
69
|
+
* When true, Cmd/Ctrl+K never opens or toggles the products menu — for apps
|
|
70
|
+
* where another surface (e.g. a command palette) owns that shortcut. The
|
|
71
|
+
* menu itself stays usable via its trigger button; if it is already open,
|
|
72
|
+
* the owner's chord dismisses it without consuming the event. Defaults to
|
|
73
|
+
* false so existing consumers keep the products shortcut.
|
|
74
74
|
*/
|
|
75
75
|
disableCommandKShortcut?: boolean | undefined;
|
|
76
76
|
className?: string;
|
|
@@ -85,6 +85,22 @@ export interface ComponentProps {
|
|
|
85
85
|
const MOBILE_MENU_BOTTOM_GAP_IN_PX: number = 16;
|
|
86
86
|
const MOBILE_MENU_MIN_HEIGHT_IN_PX: number = 160;
|
|
87
87
|
|
|
88
|
+
/*
|
|
89
|
+
* Keep the products-menu shortcut and the dashboard command palette on the
|
|
90
|
+
* same definition of Cmd/Ctrl+K. In particular, modified chords such as
|
|
91
|
+
* Cmd+Shift+K must be left alone for the browser or another feature.
|
|
92
|
+
*/
|
|
93
|
+
const isCommandKShortcut: (event: KeyboardEvent) => boolean = (
|
|
94
|
+
event: KeyboardEvent,
|
|
95
|
+
): boolean => {
|
|
96
|
+
return (
|
|
97
|
+
(event.metaKey || event.ctrlKey) &&
|
|
98
|
+
!event.shiftKey &&
|
|
99
|
+
!event.altKey &&
|
|
100
|
+
event.key.toLowerCase() === "k"
|
|
101
|
+
);
|
|
102
|
+
};
|
|
103
|
+
|
|
88
104
|
const Navbar: FunctionComponent<ComponentProps> = (
|
|
89
105
|
props: ComponentProps,
|
|
90
106
|
): ReactElement => {
|
|
@@ -96,6 +112,9 @@ const Navbar: FunctionComponent<ComponentProps> = (
|
|
|
96
112
|
const [mobileMenuMaxHeight, setMobileMenuMaxHeight] = useState<
|
|
97
113
|
number | undefined
|
|
98
114
|
>(undefined);
|
|
115
|
+
const hasMoreMenu: boolean = Boolean(
|
|
116
|
+
!props.children && props.moreMenuItems && props.moreMenuItems.length > 0,
|
|
117
|
+
);
|
|
99
118
|
|
|
100
119
|
// Use the existing outside click hook for mobile menu
|
|
101
120
|
const {
|
|
@@ -173,27 +192,56 @@ const Navbar: FunctionComponent<ComponentProps> = (
|
|
|
173
192
|
|
|
174
193
|
// Open/close the products menu with Cmd/Ctrl + K from anywhere.
|
|
175
194
|
useEffect(() => {
|
|
176
|
-
if (props.disableCommandKShortcut) {
|
|
177
|
-
// Another surface
|
|
195
|
+
if (props.disableCommandKShortcut || !hasMoreMenu) {
|
|
196
|
+
// Another surface owns Cmd/Ctrl+K, or there is no products menu to open.
|
|
178
197
|
return;
|
|
179
198
|
}
|
|
180
199
|
|
|
181
200
|
const handleGlobalKeyDown: (event: KeyboardEvent) => void = (
|
|
182
201
|
event: KeyboardEvent,
|
|
183
202
|
): void => {
|
|
184
|
-
if ((event
|
|
185
|
-
|
|
186
|
-
setIsMoreMenuVisible((visible: boolean) => {
|
|
187
|
-
return !visible;
|
|
188
|
-
});
|
|
203
|
+
if (!isCommandKShortcut(event) || event.defaultPrevented) {
|
|
204
|
+
return;
|
|
189
205
|
}
|
|
206
|
+
|
|
207
|
+
event.preventDefault();
|
|
208
|
+
setIsMoreMenuVisible((visible: boolean) => {
|
|
209
|
+
return !visible;
|
|
210
|
+
});
|
|
190
211
|
};
|
|
191
212
|
|
|
192
213
|
document.addEventListener("keydown", handleGlobalKeyDown);
|
|
193
214
|
return () => {
|
|
194
215
|
document.removeEventListener("keydown", handleGlobalKeyDown);
|
|
195
216
|
};
|
|
196
|
-
}, [props.disableCommandKShortcut]);
|
|
217
|
+
}, [hasMoreMenu, props.disableCommandKShortcut]);
|
|
218
|
+
|
|
219
|
+
/*
|
|
220
|
+
* When the dashboard has surrendered Cmd/Ctrl+K to its command palette, an
|
|
221
|
+
* already-open products modal must get out of the way before the palette
|
|
222
|
+
* opens. This close-only listener deliberately does not prevent or stop the
|
|
223
|
+
* event: the real shortcut owner still needs to receive the same keydown.
|
|
224
|
+
* It also ignores defaultPrevented so the result is deterministic regardless
|
|
225
|
+
* of which document listener React registered first.
|
|
226
|
+
*/
|
|
227
|
+
useEffect(() => {
|
|
228
|
+
if (!props.disableCommandKShortcut || !hasMoreMenu || !isMoreMenuVisible) {
|
|
229
|
+
return;
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
const closeProductsOnCommandK: (event: KeyboardEvent) => void = (
|
|
233
|
+
event: KeyboardEvent,
|
|
234
|
+
): void => {
|
|
235
|
+
if (isCommandKShortcut(event)) {
|
|
236
|
+
setIsMoreMenuVisible(false);
|
|
237
|
+
}
|
|
238
|
+
};
|
|
239
|
+
|
|
240
|
+
document.addEventListener("keydown", closeProductsOnCommandK);
|
|
241
|
+
return () => {
|
|
242
|
+
document.removeEventListener("keydown", closeProductsOnCommandK);
|
|
243
|
+
};
|
|
244
|
+
}, [hasMoreMenu, isMoreMenuVisible, props.disableCommandKShortcut]);
|
|
197
245
|
|
|
198
246
|
// More menu open/close.
|
|
199
247
|
const openMoreMenu: () => void = (): void => {
|
|
@@ -488,6 +536,7 @@ const Navbar: FunctionComponent<ComponentProps> = (
|
|
|
488
536
|
footer={props.moreMenuFooter}
|
|
489
537
|
searchPlaceholder={props.moreMenuSearchPlaceholder}
|
|
490
538
|
noResultsText={props.moreMenuNoResultsText}
|
|
539
|
+
showCommandKShortcutHint={!props.disableCommandKShortcut}
|
|
491
540
|
keyboardHint={props.moreMenuKeyboardHint}
|
|
492
541
|
recentLabel={props.moreMenuRecentLabel}
|
|
493
542
|
onClose={closeMoreMenu}
|
|
@@ -129,6 +129,11 @@ export interface ComponentProps {
|
|
|
129
129
|
| undefined;
|
|
130
130
|
searchPlaceholder?: string | undefined;
|
|
131
131
|
noResultsText?: string | undefined;
|
|
132
|
+
/*
|
|
133
|
+
* Defaults to visible for direct/legacy consumers. Dashboard hides it when
|
|
134
|
+
* its command palette owns Cmd/Ctrl+K instead of this products menu.
|
|
135
|
+
*/
|
|
136
|
+
showCommandKShortcutHint?: boolean | undefined;
|
|
132
137
|
keyboardHint?: string | undefined;
|
|
133
138
|
recentLabel?: string | undefined;
|
|
134
139
|
onClose: () => void;
|
|
@@ -502,14 +507,14 @@ const NavBarMenuModal: FunctionComponent<ComponentProps> = (
|
|
|
502
507
|
>
|
|
503
508
|
<Icon icon={IconProp.Close} className="h-4 w-4" />
|
|
504
509
|
</button>
|
|
505
|
-
) : (
|
|
510
|
+
) : props.showCommandKShortcutHint !== false ? (
|
|
506
511
|
/* OS-appropriate hint: ⌘ K on a Mac, Ctrl K elsewhere. */
|
|
507
512
|
<KeyboardShortcut
|
|
508
513
|
keys={[KeyboardKey.Mod, "K"]}
|
|
509
514
|
size={KeyboardShortcutSize.Small}
|
|
510
515
|
className="hidden sm:inline-flex"
|
|
511
516
|
/>
|
|
512
|
-
)}
|
|
517
|
+
) : null}
|
|
513
518
|
</div>
|
|
514
519
|
|
|
515
520
|
{/* Body */}
|
|
@@ -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}
|