@oneuptime/common 12.0.30 → 12.0.31
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/SecurityEvent.ts +48 -16
- package/Models/AnalyticsModels/ThreatIntelIndicator.ts +10 -5
- package/Models/DatabaseModels/AlertSeverity.ts +44 -0
- package/Models/DatabaseModels/DetectionRule.ts +16 -5
- package/Models/DatabaseModels/GoogleSecOpsConnection.ts +14 -5
- package/Models/DatabaseModels/IncidentSeverity.ts +44 -0
- package/Models/DatabaseModels/Index.ts +2 -0
- package/Models/DatabaseModels/NetworkDevice.ts +113 -3
- package/Models/DatabaseModels/NetworkDeviceAutoImportRule.ts +88 -0
- package/Models/DatabaseModels/NetworkDeviceDiscoveryScan.ts +22 -0
- package/Models/DatabaseModels/NetworkDeviceOidTemplate.ts +499 -0
- package/Models/DatabaseModels/ThreatIntelFeed.ts +16 -5
- package/Server/API/GlobalConfigAPI.ts +362 -183
- package/Server/API/TelemetryAPI.ts +42 -4
- package/Server/EnvironmentConfig.ts +112 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1790500000000-AddNetworkDeviceOidTemplate.ts +59 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1790600000000-AddAutoImportRuleOidTemplate.ts +25 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +4 -0
- package/Server/Middleware/MultipartFormData.ts +118 -32
- package/Server/Services/AlertEpisodeLabelRuleEngineService.ts +9 -1
- package/Server/Services/AlertEpisodeOnCallRuleEngineService.ts +9 -1
- package/Server/Services/AlertEpisodeOwnerRuleEngineService.ts +9 -1
- package/Server/Services/AlertEpisodePrivacyRuleEngineService.ts +9 -1
- package/Server/Services/AlertGroupingEngineService.ts +9 -1
- package/Server/Services/AlertLabelRuleEngineService.ts +9 -1
- package/Server/Services/AlertOnCallRuleEngineService.ts +9 -1
- package/Server/Services/AlertOwnerRuleEngineService.ts +9 -1
- package/Server/Services/AlertPrivacyRuleEngineService.ts +9 -1
- package/Server/Services/AlertReminderRuleService.ts +9 -1
- package/Server/Services/AutoRemediationRuleEngineService.ts +9 -1
- package/Server/Services/CephClusterLabelRuleEngineService.ts +9 -1
- package/Server/Services/CephClusterOwnerRuleEngineService.ts +9 -1
- package/Server/Services/CloudResourceLabelRuleEngineService.ts +9 -1
- package/Server/Services/CloudResourceOwnerRuleEngineService.ts +9 -1
- package/Server/Services/DashboardLabelRuleEngineService.ts +9 -1
- package/Server/Services/DashboardOwnerRuleEngineService.ts +9 -1
- package/Server/Services/DockerHostLabelRuleEngineService.ts +9 -1
- package/Server/Services/DockerHostOwnerRuleEngineService.ts +9 -1
- package/Server/Services/DockerSwarmClusterLabelRuleEngineService.ts +9 -1
- package/Server/Services/DockerSwarmClusterOwnerRuleEngineService.ts +9 -1
- package/Server/Services/HostLabelRuleEngineService.ts +9 -1
- package/Server/Services/HostOwnerRuleEngineService.ts +9 -1
- package/Server/Services/IncidentEpisodeLabelRuleEngineService.ts +9 -1
- package/Server/Services/IncidentEpisodeOnCallRuleEngineService.ts +9 -1
- package/Server/Services/IncidentEpisodeOwnerRuleEngineService.ts +9 -1
- package/Server/Services/IncidentEpisodePrivacyRuleEngineService.ts +9 -1
- package/Server/Services/IncidentGroupingEngineService.ts +9 -1
- package/Server/Services/IncidentLabelRuleEngineService.ts +9 -1
- package/Server/Services/IncidentOnCallRuleEngineService.ts +9 -1
- package/Server/Services/IncidentOwnerRuleEngineService.ts +9 -1
- package/Server/Services/IncidentPrivacyRuleEngineService.ts +9 -1
- package/Server/Services/IncidentReminderRuleService.ts +9 -1
- package/Server/Services/IncidentSlaRuleService.ts +9 -1
- package/Server/Services/IncomingCallPolicyLabelRuleEngineService.ts +9 -1
- package/Server/Services/IncomingCallPolicyOwnerRuleEngineService.ts +9 -1
- package/Server/Services/Index.ts +2 -0
- package/Server/Services/IoTFleetLabelRuleEngineService.ts +9 -1
- package/Server/Services/IoTFleetOwnerRuleEngineService.ts +9 -1
- package/Server/Services/KubernetesClusterLabelRuleEngineService.ts +9 -1
- package/Server/Services/KubernetesClusterOwnerRuleEngineService.ts +9 -1
- package/Server/Services/KubernetesResourceService.ts +5 -1
- package/Server/Services/MonitorLabelRuleEngineService.ts +9 -1
- package/Server/Services/MonitorOwnerRuleEngineService.ts +9 -1
- package/Server/Services/NetworkDeviceAutoImportRuleEngineService.ts +35 -0
- package/Server/Services/NetworkDeviceAutoImportRuleService.ts +96 -0
- package/Server/Services/NetworkDeviceLabelRuleEngineService.ts +9 -1
- package/Server/Services/NetworkDeviceOidTemplateService.ts +201 -0
- package/Server/Services/NetworkDeviceOwnerRuleEngineService.ts +9 -1
- package/Server/Services/NetworkDeviceService.ts +209 -1
- package/Server/Services/OnCallDutyPolicyLabelRuleEngineService.ts +9 -1
- package/Server/Services/OnCallDutyPolicyOwnerRuleEngineService.ts +9 -1
- package/Server/Services/OnCallDutyPolicyScheduleLabelRuleEngineService.ts +9 -1
- package/Server/Services/OnCallDutyPolicyScheduleOwnerRuleEngineService.ts +9 -1
- package/Server/Services/PodmanHostLabelRuleEngineService.ts +9 -1
- package/Server/Services/PodmanHostOwnerRuleEngineService.ts +9 -1
- package/Server/Services/ProxmoxClusterLabelRuleEngineService.ts +9 -1
- package/Server/Services/ProxmoxClusterOwnerRuleEngineService.ts +9 -1
- package/Server/Services/RumApplicationLabelRuleEngineService.ts +9 -1
- package/Server/Services/RumApplicationOwnerRuleEngineService.ts +9 -1
- package/Server/Services/RunbookLabelRuleEngineService.ts +9 -1
- package/Server/Services/RunbookOwnerRuleEngineService.ts +9 -1
- package/Server/Services/RunbookRuleEngineService.ts +9 -1
- package/Server/Services/ScheduledMaintenanceLabelRuleEngineService.ts +9 -1
- package/Server/Services/ScheduledMaintenanceOwnerRuleEngineService.ts +9 -1
- package/Server/Services/ScheduledMaintenanceReminderRuleService.ts +9 -1
- package/Server/Services/ServerlessFunctionLabelRuleEngineService.ts +9 -1
- package/Server/Services/ServerlessFunctionOwnerRuleEngineService.ts +9 -1
- package/Server/Services/ServiceLabelRuleEngineService.ts +9 -1
- package/Server/Services/ServiceOwnerRuleEngineService.ts +9 -1
- package/Server/Services/StatusPageLabelRuleEngineService.ts +9 -1
- package/Server/Services/StatusPageMonitorRuleEngineService.ts +7 -0
- package/Server/Services/StatusPageOwnerRuleEngineService.ts +9 -1
- package/Server/Services/TelemetrySourceMapService.ts +266 -23
- package/Server/Services/UserService.ts +27 -0
- package/Server/Services/WorkflowLabelRuleEngineService.ts +9 -1
- package/Server/Services/WorkflowOwnerRuleEngineService.ts +9 -1
- package/Server/Utils/EnterpriseLicense/EnterpriseLicenseSeatUtil.ts +186 -0
- package/Server/Utils/Monitor/CapturedMetricAttributeUtil.ts +245 -0
- package/Server/Utils/Monitor/Criteria/SnmpMonitorCriteria.ts +21 -2
- package/Server/Utils/Monitor/MonitorMetricUtil.ts +55 -21
- package/Server/Utils/Monitor/MonitorTemplateUtil.ts +32 -0
- package/Server/Utils/Monitor/NetworkDeviceMetricUtil.ts +15 -2
- package/Server/Utils/Monitor/NetworkDeviceWalkUtil.ts +18 -1
- package/Server/Utils/Monitor/NetworkInventoryUtil.ts +10 -0
- package/Server/Utils/Monitor/SeriesResourceLabels.ts +34 -0
- package/Server/Utils/Rules/RuleEngineRuleRead.ts +48 -0
- package/Server/Utils/Telemetry/ExceptionSanitizer.ts +14 -1
- package/Server/Utils/Telemetry/LogExceptionExtractor.ts +14 -2
- package/Server/Utils/Telemetry/SourceMapResolver.ts +16 -5
- package/Server/Utils/Telemetry/StackTraceParser.ts +399 -0
- package/Tests/App/Dashboard/EventOverlayHook.test.tsx +125 -0
- package/Tests/App/Dashboard/HeaderImageAssets.test.tsx +93 -0
- package/Tests/App/Dashboard/OnCallReadinessSurfaces.test.tsx +3 -3
- package/Tests/App/Dashboard/UserElementEmail.test.tsx +12 -4
- package/Tests/App/Dashboard/UserEmailCallSites.test.tsx +1 -1
- package/Tests/Models/DatabaseModels/DomainRoleTierCoverage.test.ts +14 -0
- package/Tests/Models/DatabaseModels/ModelRegistryInvariants.test.ts +469 -0
- package/Tests/Models/SecurityDomainAccessControl.test.ts +429 -0
- package/Tests/Server/API/GlobalConfigLicense.test.ts +657 -0
- package/Tests/Server/API/SecurityEventAttributesAPI.test.ts +84 -6
- package/Tests/Server/API/TelemetryResolveStackTraceAPI.test.ts +805 -0
- package/Tests/Server/Infrastructure/Postgres/AddOnCallCalendarFeedsMigration.test.ts +32 -7
- package/Tests/Server/Middleware/IdentityRateLimit.test.ts +1144 -0
- package/Tests/Server/Middleware/MultipartFormData.test.ts +618 -3
- package/Tests/Server/Services/MonitorLabelRuleEngineScale.test.ts +520 -0
- package/Tests/Server/Services/NetworkDeviceOidTemplateService.test.ts +332 -0
- package/Tests/Server/Services/NetworkDeviceOidTemplateWriteGuards.test.ts +409 -0
- package/Tests/Server/Services/RuleEngineRuleFetchLimit.test.ts +239 -0
- package/Tests/Server/Services/TelemetrySourceMapService.test.ts +1210 -2
- package/Tests/Server/Services/UserServiceSeatLimit.test.ts +182 -0
- package/Tests/Server/Types/AnalyticsDatabase/SecurityEventModelPermission.test.ts +255 -0
- package/Tests/Server/Types/Database/Permissions/ReadBlockPermission.test.ts +212 -0
- package/Tests/Server/Types/Database/Permissions/SecurityRoleAccess.test.ts +413 -0
- package/Tests/Server/Utils/CodeRepository.test.ts +689 -0
- package/Tests/Server/Utils/EnterpriseLicense/EnterpriseLicenseSeatUtil.test.ts +495 -0
- package/Tests/Server/Utils/ExceptionSanitizer.test.ts +77 -0
- package/Tests/Server/Utils/Monitor/CapturedMetricAttributeUtil.test.ts +284 -0
- package/Tests/Server/Utils/Monitor/MonitorCustomMetricAttributes.test.ts +503 -0
- package/Tests/Server/Utils/Monitor/MonitorTemplatePrototypePollution.test.ts +106 -0
- package/Tests/Server/Utils/Monitor/NetworkDeviceWalkLogWritePath.test.ts +33 -4
- package/Tests/Server/Utils/Monitor/NetworkDeviceWalkUtil.test.ts +14 -4
- package/Tests/Server/Utils/Monitor/NetworkInventoryUtil.test.ts +44 -0
- package/Tests/Server/Utils/OpenAPISpec.test.ts +536 -0
- package/Tests/Server/Utils/Rules/RuleEngineRuleRead.test.ts +115 -0
- package/Tests/Server/Utils/StackTraceParser.test.ts +610 -0
- package/Tests/Server/Utils/Telemetry/LogExceptionExtractor.test.ts +0 -0
- package/Tests/Server/Utils/Telemetry/SourceMapLimits.test.ts +656 -0
- package/Tests/Server/Utils/Telemetry/SourceMapResolver.test.ts +100 -0
- package/Tests/Types/Monitor/SnmpMonitor/SnmpOidListUtil.test.ts +454 -0
- package/Tests/Types/SecurityRolePermissions.test.ts +193 -0
- package/Tests/UI/Components/Charts/AnnotationLayout.test.ts +773 -0
- package/Tests/UI/Components/Charts/ChartAnnotationRail.test.tsx +789 -0
- package/Tests/UI/Components/Charts/ChartBucketIdentity.test.ts +254 -0
- package/Tests/UI/Components/Charts/TimeAnnotation.test.ts +471 -0
- package/Tests/UI/Components/EditionLabelLicenseRefresh.test.tsx +405 -0
- package/Tests/UI/Components/ErrorMessageRefreshControl.test.tsx +83 -0
- package/Tests/UI/Components/MarkdownConverters.test.ts +686 -0
- package/Tests/UI/Components/ModelTable/BaseModelTableDeleteAndEmptyStates.test.tsx +341 -0
- package/Tests/UI/Components/OrderedStatesList.test.tsx +5 -5
- package/Tests/UI/Components/PendingProjectInvitations.test.tsx +1 -1
- package/Tests/UI/Components/TableSortAndMobileColumns.test.tsx +195 -0
- package/Tests/UI/Components/XAxis.test.ts +270 -5
- package/Tests/UI/Components/XAxisDaylightSaving.test.ts +113 -0
- package/Tests/UI/Styles/ChartFocusRing.test.ts +153 -0
- package/Tests/UI/Styles/ChartFocusRingCoverage.test.tsx +377 -0
- package/Tests/UI/Styles/ThemeStylesheet.ts +162 -0
- package/Tests/Utils/EnterpriseLicenseSeats.test.ts +507 -0
- package/Tests/Utils/NetworkDiscovery/DiscoveredDeviceBuilder.test.ts +951 -1
- package/Tests/Utils/NetworkDiscovery/DiscoveredHostUtil.test.ts +238 -0
- package/Tests/Utils/NetworkDiscovery/DiscoveryReverseDnsChain.test.ts +1056 -0
- package/Tests/Utils/NetworkDiscovery/ReverseDnsNameUtil.test.ts +882 -0
- package/Types/Date.ts +39 -0
- package/Types/Monitor/SnmpMonitor/SnmpOidListUtil.ts +333 -0
- package/Types/Permission.ts +96 -0
- package/Types/Rum/SessionReplay.ts +21 -0
- package/Types/Telemetry/SourceMap.ts +8 -0
- package/UI/Components/Charts/ChartLibrary/Annotations/AnnotationHoverCard.tsx +176 -0
- package/UI/Components/Charts/ChartLibrary/Annotations/AnnotationLayout.ts +745 -0
- package/UI/Components/Charts/ChartLibrary/Annotations/ChartAnnotationLayer.tsx +576 -0
- package/UI/Components/Charts/ChartLibrary/Annotations/UseChartAnnotations.tsx +204 -0
- package/UI/Components/Charts/ChartLibrary/AreaChart/AreaChart.tsx +491 -544
- package/UI/Components/Charts/ChartLibrary/BarChart/BarChart.tsx +324 -372
- package/UI/Components/Charts/ChartLibrary/LineChart/LineChart.tsx +487 -540
- package/UI/Components/Charts/ChartLibrary/Types/FormattedReferenceRegion.ts +7 -3
- package/UI/Components/Charts/ChartLibrary/Types/FormattedTimeReferenceLine.ts +14 -3
- package/UI/Components/Charts/Types/ChartEventKind.ts +13 -0
- package/UI/Components/Charts/Types/ReferenceRegionProps.ts +6 -0
- package/UI/Components/Charts/Types/TimeReferenceLineProps.ts +20 -3
- package/UI/Components/Charts/Utils/TimeAnnotation.ts +69 -35
- package/UI/Components/Charts/Utils/XAxis.ts +125 -18
- package/UI/Components/EditionLabel/EditionLabel.tsx +280 -26
- package/UI/Components/ErrorMessage/ErrorMessage.tsx +21 -10
- package/UI/Components/Feed/FeedItem.tsx +4 -5
- package/UI/Components/Header/HeaderIconDropdownButton.tsx +1 -2
- package/UI/Components/Header/UserProfile/UserProfile.tsx +1 -2
- package/UI/Components/Image/Image.tsx +20 -3
- package/UI/Components/Markdown.tsx/MarkdownConverters.ts +0 -0
- package/UI/Components/MemberRoleAssignment/MemberRoleAssignment.tsx +1 -2
- package/UI/Components/ModelTable/BaseModelTable.tsx +150 -24
- package/UI/Components/Table/TableHeader.tsx +64 -48
- package/UI/Components/Table/TableRow.tsx +13 -3
- package/UI/Styles/Theme.css +38 -0
- package/Utils/EnterpriseLicense/EnterpriseLicenseSeats.ts +271 -0
- package/Utils/NetworkDiscovery/AutoImportRuleMatcher.ts +6 -0
- package/Utils/NetworkDiscovery/DiscoveredDeviceBuilder.ts +141 -10
- package/Utils/NetworkDiscovery/DiscoveredHostUtil.ts +55 -3
- package/Utils/NetworkDiscovery/ReverseDnsNameUtil.ts +151 -0
- package/Utils/Rules/RuleEngineLimits.ts +32 -0
- package/build/dist/Models/AnalyticsModels/SecurityEvent.js +48 -16
- package/build/dist/Models/AnalyticsModels/SecurityEvent.js.map +1 -1
- package/build/dist/Models/AnalyticsModels/ThreatIntelIndicator.js +10 -5
- package/build/dist/Models/AnalyticsModels/ThreatIntelIndicator.js.map +1 -1
- package/build/dist/Models/DatabaseModels/AlertSeverity.js +46 -1
- package/build/dist/Models/DatabaseModels/AlertSeverity.js.map +1 -1
- package/build/dist/Models/DatabaseModels/DetectionRule.js +16 -5
- package/build/dist/Models/DatabaseModels/DetectionRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/GoogleSecOpsConnection.js +14 -5
- package/build/dist/Models/DatabaseModels/GoogleSecOpsConnection.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncidentSeverity.js +46 -1
- package/build/dist/Models/DatabaseModels/IncidentSeverity.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Index.js +2 -0
- package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
- package/build/dist/Models/DatabaseModels/NetworkDevice.js +115 -3
- package/build/dist/Models/DatabaseModels/NetworkDevice.js.map +1 -1
- package/build/dist/Models/DatabaseModels/NetworkDeviceAutoImportRule.js +88 -0
- package/build/dist/Models/DatabaseModels/NetworkDeviceAutoImportRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/NetworkDeviceDiscoveryScan.js.map +1 -1
- package/build/dist/Models/DatabaseModels/NetworkDeviceOidTemplate.js +519 -0
- package/build/dist/Models/DatabaseModels/NetworkDeviceOidTemplate.js.map +1 -0
- package/build/dist/Models/DatabaseModels/ThreatIntelFeed.js +16 -5
- package/build/dist/Models/DatabaseModels/ThreatIntelFeed.js.map +1 -1
- package/build/dist/Server/API/GlobalConfigAPI.js +293 -176
- package/build/dist/Server/API/GlobalConfigAPI.js.map +1 -1
- package/build/dist/Server/API/TelemetryAPI.js +31 -3
- package/build/dist/Server/API/TelemetryAPI.js.map +1 -1
- package/build/dist/Server/EnvironmentConfig.js +83 -0
- package/build/dist/Server/EnvironmentConfig.js.map +1 -1
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790500000000-AddNetworkDeviceOidTemplate.js +26 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790500000000-AddNetworkDeviceOidTemplate.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790600000000-AddAutoImportRuleOidTemplate.js +14 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790600000000-AddAutoImportRuleOidTemplate.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +4 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
- package/build/dist/Server/Middleware/MultipartFormData.js +93 -28
- package/build/dist/Server/Middleware/MultipartFormData.js.map +1 -1
- package/build/dist/Server/Services/AlertEpisodeLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/AlertEpisodeLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/AlertEpisodeOnCallRuleEngineService.js +8 -1
- package/build/dist/Server/Services/AlertEpisodeOnCallRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/AlertEpisodeOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/AlertEpisodeOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/AlertEpisodePrivacyRuleEngineService.js +8 -1
- package/build/dist/Server/Services/AlertEpisodePrivacyRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/AlertGroupingEngineService.js +8 -1
- package/build/dist/Server/Services/AlertGroupingEngineService.js.map +1 -1
- package/build/dist/Server/Services/AlertLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/AlertLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/AlertOnCallRuleEngineService.js +8 -1
- package/build/dist/Server/Services/AlertOnCallRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/AlertOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/AlertOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/AlertPrivacyRuleEngineService.js +8 -1
- package/build/dist/Server/Services/AlertPrivacyRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/AlertReminderRuleService.js +8 -1
- package/build/dist/Server/Services/AlertReminderRuleService.js.map +1 -1
- package/build/dist/Server/Services/AutoRemediationRuleEngineService.js +8 -1
- package/build/dist/Server/Services/AutoRemediationRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/CephClusterLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/CephClusterLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/CephClusterOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/CephClusterOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/CloudResourceLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/CloudResourceLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/CloudResourceOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/CloudResourceOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/DashboardLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/DashboardLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/DashboardOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/DashboardOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/DockerHostLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/DockerHostLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/DockerHostOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/DockerHostOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/DockerSwarmClusterLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/DockerSwarmClusterLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/DockerSwarmClusterOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/DockerSwarmClusterOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/HostLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/HostLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/HostOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/HostOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/IncidentEpisodeLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/IncidentEpisodeLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/IncidentEpisodeOnCallRuleEngineService.js +8 -1
- package/build/dist/Server/Services/IncidentEpisodeOnCallRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/IncidentEpisodeOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/IncidentEpisodeOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/IncidentEpisodePrivacyRuleEngineService.js +8 -1
- package/build/dist/Server/Services/IncidentEpisodePrivacyRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/IncidentGroupingEngineService.js +8 -1
- package/build/dist/Server/Services/IncidentGroupingEngineService.js.map +1 -1
- package/build/dist/Server/Services/IncidentLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/IncidentLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/IncidentOnCallRuleEngineService.js +8 -1
- package/build/dist/Server/Services/IncidentOnCallRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/IncidentOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/IncidentOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/IncidentPrivacyRuleEngineService.js +8 -1
- package/build/dist/Server/Services/IncidentPrivacyRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/IncidentReminderRuleService.js +8 -1
- package/build/dist/Server/Services/IncidentReminderRuleService.js.map +1 -1
- package/build/dist/Server/Services/IncidentSlaRuleService.js +8 -1
- package/build/dist/Server/Services/IncidentSlaRuleService.js.map +1 -1
- package/build/dist/Server/Services/IncomingCallPolicyLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/IncomingCallPolicyLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/IncomingCallPolicyOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/IncomingCallPolicyOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/Index.js +2 -0
- package/build/dist/Server/Services/Index.js.map +1 -1
- package/build/dist/Server/Services/IoTFleetLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/IoTFleetLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/IoTFleetOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/IoTFleetOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/KubernetesClusterLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/KubernetesClusterLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/KubernetesClusterOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/KubernetesClusterOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/KubernetesResourceService.js +5 -1
- package/build/dist/Server/Services/KubernetesResourceService.js.map +1 -1
- package/build/dist/Server/Services/MonitorLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/MonitorLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/MonitorOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/MonitorOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/NetworkDeviceAutoImportRuleEngineService.js +30 -21
- package/build/dist/Server/Services/NetworkDeviceAutoImportRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/NetworkDeviceAutoImportRuleService.js +64 -0
- package/build/dist/Server/Services/NetworkDeviceAutoImportRuleService.js.map +1 -1
- package/build/dist/Server/Services/NetworkDeviceLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/NetworkDeviceLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/NetworkDeviceOidTemplateService.js +180 -0
- package/build/dist/Server/Services/NetworkDeviceOidTemplateService.js.map +1 -0
- package/build/dist/Server/Services/NetworkDeviceOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/NetworkDeviceOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/NetworkDeviceService.js +154 -1
- package/build/dist/Server/Services/NetworkDeviceService.js.map +1 -1
- package/build/dist/Server/Services/OnCallDutyPolicyLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/OnCallDutyPolicyLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/OnCallDutyPolicyOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/OnCallDutyPolicyOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/OnCallDutyPolicyScheduleLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/OnCallDutyPolicyScheduleLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/OnCallDutyPolicyScheduleOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/OnCallDutyPolicyScheduleOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/PodmanHostLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/PodmanHostLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/PodmanHostOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/PodmanHostOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/ProxmoxClusterLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/ProxmoxClusterLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/ProxmoxClusterOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/ProxmoxClusterOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/RumApplicationLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/RumApplicationLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/RumApplicationOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/RumApplicationOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/RunbookLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/RunbookLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/RunbookOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/RunbookOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/RunbookRuleEngineService.js +8 -1
- package/build/dist/Server/Services/RunbookRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/ScheduledMaintenanceLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/ScheduledMaintenanceLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/ScheduledMaintenanceOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/ScheduledMaintenanceOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/ScheduledMaintenanceReminderRuleService.js +8 -1
- package/build/dist/Server/Services/ScheduledMaintenanceReminderRuleService.js.map +1 -1
- package/build/dist/Server/Services/ServerlessFunctionLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/ServerlessFunctionLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/ServerlessFunctionOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/ServerlessFunctionOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/ServiceLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/ServiceLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/ServiceOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/ServiceOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/StatusPageLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/StatusPageLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/StatusPageMonitorRuleEngineService.js +6 -0
- package/build/dist/Server/Services/StatusPageMonitorRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/StatusPageOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/StatusPageOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/TelemetrySourceMapService.js +213 -19
- package/build/dist/Server/Services/TelemetrySourceMapService.js.map +1 -1
- package/build/dist/Server/Services/UserService.js +25 -0
- package/build/dist/Server/Services/UserService.js.map +1 -1
- package/build/dist/Server/Services/WorkflowLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/WorkflowLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/WorkflowOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/WorkflowOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Utils/EnterpriseLicense/EnterpriseLicenseSeatUtil.js +145 -0
- package/build/dist/Server/Utils/EnterpriseLicense/EnterpriseLicenseSeatUtil.js.map +1 -0
- package/build/dist/Server/Utils/Monitor/CapturedMetricAttributeUtil.js +201 -0
- package/build/dist/Server/Utils/Monitor/CapturedMetricAttributeUtil.js.map +1 -0
- package/build/dist/Server/Utils/Monitor/Criteria/SnmpMonitorCriteria.js +19 -2
- package/build/dist/Server/Utils/Monitor/Criteria/SnmpMonitorCriteria.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorMetricUtil.js +42 -23
- package/build/dist/Server/Utils/Monitor/MonitorMetricUtil.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorTemplateUtil.js +29 -0
- package/build/dist/Server/Utils/Monitor/MonitorTemplateUtil.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/NetworkDeviceMetricUtil.js +11 -2
- package/build/dist/Server/Utils/Monitor/NetworkDeviceMetricUtil.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/NetworkDeviceWalkUtil.js +16 -1
- package/build/dist/Server/Utils/Monitor/NetworkDeviceWalkUtil.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/NetworkInventoryUtil.js +10 -0
- package/build/dist/Server/Utils/Monitor/NetworkInventoryUtil.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/SeriesResourceLabels.js +33 -0
- package/build/dist/Server/Utils/Monitor/SeriesResourceLabels.js.map +1 -1
- package/build/dist/Server/Utils/Rules/RuleEngineRuleRead.js +37 -0
- package/build/dist/Server/Utils/Rules/RuleEngineRuleRead.js.map +1 -0
- package/build/dist/Server/Utils/Telemetry/ExceptionSanitizer.js +12 -1
- package/build/dist/Server/Utils/Telemetry/ExceptionSanitizer.js.map +1 -1
- package/build/dist/Server/Utils/Telemetry/LogExceptionExtractor.js +14 -2
- package/build/dist/Server/Utils/Telemetry/LogExceptionExtractor.js.map +1 -1
- package/build/dist/Server/Utils/Telemetry/SourceMapResolver.js +15 -5
- package/build/dist/Server/Utils/Telemetry/SourceMapResolver.js.map +1 -1
- package/build/dist/Server/Utils/Telemetry/StackTraceParser.js +307 -0
- package/build/dist/Server/Utils/Telemetry/StackTraceParser.js.map +1 -1
- package/build/dist/Types/Date.js +27 -0
- package/build/dist/Types/Date.js.map +1 -1
- package/build/dist/Types/Monitor/SnmpMonitor/SnmpOidListUtil.js +253 -0
- package/build/dist/Types/Monitor/SnmpMonitor/SnmpOidListUtil.js.map +1 -0
- package/build/dist/Types/Permission.js +86 -0
- package/build/dist/Types/Permission.js.map +1 -1
- package/build/dist/Types/Rum/SessionReplay.js +19 -0
- package/build/dist/Types/Rum/SessionReplay.js.map +1 -1
- package/build/dist/UI/Components/Charts/ChartLibrary/Annotations/AnnotationHoverCard.js +83 -0
- package/build/dist/UI/Components/Charts/ChartLibrary/Annotations/AnnotationHoverCard.js.map +1 -0
- package/build/dist/UI/Components/Charts/ChartLibrary/Annotations/AnnotationLayout.js +531 -0
- package/build/dist/UI/Components/Charts/ChartLibrary/Annotations/AnnotationLayout.js.map +1 -0
- package/build/dist/UI/Components/Charts/ChartLibrary/Annotations/ChartAnnotationLayer.js +264 -0
- package/build/dist/UI/Components/Charts/ChartLibrary/Annotations/ChartAnnotationLayer.js.map +1 -0
- package/build/dist/UI/Components/Charts/ChartLibrary/Annotations/UseChartAnnotations.js +122 -0
- package/build/dist/UI/Components/Charts/ChartLibrary/Annotations/UseChartAnnotations.js.map +1 -0
- package/build/dist/UI/Components/Charts/ChartLibrary/AreaChart/AreaChart.js +213 -233
- package/build/dist/UI/Components/Charts/ChartLibrary/AreaChart/AreaChart.js.map +1 -1
- package/build/dist/UI/Components/Charts/ChartLibrary/BarChart/BarChart.js +139 -152
- package/build/dist/UI/Components/Charts/ChartLibrary/BarChart/BarChart.js.map +1 -1
- package/build/dist/UI/Components/Charts/ChartLibrary/LineChart/LineChart.js +212 -232
- package/build/dist/UI/Components/Charts/ChartLibrary/LineChart/LineChart.js.map +1 -1
- package/build/dist/UI/Components/Charts/Types/ChartEventKind.js +14 -0
- package/build/dist/UI/Components/Charts/Types/ChartEventKind.js.map +1 -0
- package/build/dist/UI/Components/Charts/Utils/TimeAnnotation.js +57 -28
- package/build/dist/UI/Components/Charts/Utils/TimeAnnotation.js.map +1 -1
- package/build/dist/UI/Components/Charts/Utils/XAxis.js +103 -17
- package/build/dist/UI/Components/Charts/Utils/XAxis.js.map +1 -1
- package/build/dist/UI/Components/EditionLabel/EditionLabel.js +198 -23
- package/build/dist/UI/Components/EditionLabel/EditionLabel.js.map +1 -1
- package/build/dist/UI/Components/ErrorMessage/ErrorMessage.js +15 -5
- package/build/dist/UI/Components/ErrorMessage/ErrorMessage.js.map +1 -1
- package/build/dist/UI/Components/Feed/FeedItem.js +4 -5
- package/build/dist/UI/Components/Feed/FeedItem.js.map +1 -1
- package/build/dist/UI/Components/Header/HeaderIconDropdownButton.js +1 -2
- package/build/dist/UI/Components/Header/HeaderIconDropdownButton.js.map +1 -1
- package/build/dist/UI/Components/Header/UserProfile/UserProfile.js.map +1 -1
- package/build/dist/UI/Components/Image/Image.js +6 -1
- package/build/dist/UI/Components/Image/Image.js.map +1 -1
- package/build/dist/UI/Components/Markdown.tsx/MarkdownConverters.js +0 -0
- package/build/dist/UI/Components/Markdown.tsx/MarkdownConverters.js.map +1 -1
- package/build/dist/UI/Components/MemberRoleAssignment/MemberRoleAssignment.js +1 -2
- package/build/dist/UI/Components/MemberRoleAssignment/MemberRoleAssignment.js.map +1 -1
- package/build/dist/UI/Components/ModelTable/BaseModelTable.js +104 -23
- package/build/dist/UI/Components/ModelTable/BaseModelTable.js.map +1 -1
- package/build/dist/UI/Components/Table/TableHeader.js +20 -22
- package/build/dist/UI/Components/Table/TableHeader.js.map +1 -1
- package/build/dist/UI/Components/Table/TableRow.js +13 -4
- package/build/dist/UI/Components/Table/TableRow.js.map +1 -1
- package/build/dist/Utils/EnterpriseLicense/EnterpriseLicenseSeats.js +153 -0
- package/build/dist/Utils/EnterpriseLicense/EnterpriseLicenseSeats.js.map +1 -0
- package/build/dist/Utils/NetworkDiscovery/AutoImportRuleMatcher.js.map +1 -1
- package/build/dist/Utils/NetworkDiscovery/DiscoveredDeviceBuilder.js +127 -7
- package/build/dist/Utils/NetworkDiscovery/DiscoveredDeviceBuilder.js.map +1 -1
- package/build/dist/Utils/NetworkDiscovery/DiscoveredHostUtil.js +50 -3
- package/build/dist/Utils/NetworkDiscovery/DiscoveredHostUtil.js.map +1 -1
- package/build/dist/Utils/NetworkDiscovery/ReverseDnsNameUtil.js +132 -0
- package/build/dist/Utils/NetworkDiscovery/ReverseDnsNameUtil.js.map +1 -0
- package/build/dist/Utils/Rules/RuleEngineLimits.js +31 -0
- package/build/dist/Utils/Rules/RuleEngineLimits.js.map +1 -0
- package/jest.config.json +1 -0
- package/package.json +2 -2
|
@@ -0,0 +1,377 @@
|
|
|
1
|
+
import "@testing-library/jest-dom";
|
|
2
|
+
import { cleanup, render } from "@testing-library/react";
|
|
3
|
+
import React from "react";
|
|
4
|
+
import { afterEach, describe, expect, test } from "@jest/globals";
|
|
5
|
+
import { selectorsDeclaring } from "./ThemeStylesheet";
|
|
6
|
+
|
|
7
|
+
/*
|
|
8
|
+
* ResponsiveContainer measures its parent, which is always 0x0 in jsdom, so
|
|
9
|
+
* the chart renders nothing without a fixed size -- and a chart that renders
|
|
10
|
+
* nothing would pass every assertion in this file for the wrong reason. Same
|
|
11
|
+
* shim as ChartAnnotationRail.test.tsx; recharts is otherwise the real thing
|
|
12
|
+
* here, because what is under test is the DOM recharts actually produces.
|
|
13
|
+
*/
|
|
14
|
+
jest.mock("recharts", () => {
|
|
15
|
+
const actual: Record<string, any> = jest.requireActual("recharts") as Record<
|
|
16
|
+
string,
|
|
17
|
+
any
|
|
18
|
+
>;
|
|
19
|
+
return {
|
|
20
|
+
...actual,
|
|
21
|
+
ResponsiveContainer: ({ children }: { children: React.ReactElement }) => {
|
|
22
|
+
return React.cloneElement(children, { width: 800, height: 400 });
|
|
23
|
+
},
|
|
24
|
+
};
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
import AreaChartElement from "../../../UI/Components/Charts/Area/AreaChart";
|
|
28
|
+
import BarChartElement from "../../../UI/Components/Charts/Bar/BarChart";
|
|
29
|
+
import LineChartElement from "../../../UI/Components/Charts/Line/LineChart";
|
|
30
|
+
import ChartCurve from "../../../UI/Components/Charts/Types/ChartCurve";
|
|
31
|
+
import ChartEventKind from "../../../UI/Components/Charts/Types/ChartEventKind";
|
|
32
|
+
import ChartReferenceRegionProps from "../../../UI/Components/Charts/Types/ReferenceRegionProps";
|
|
33
|
+
import ChartTimeReferenceLineProps from "../../../UI/Components/Charts/Types/TimeReferenceLineProps";
|
|
34
|
+
import DataPoint from "../../../UI/Components/Charts/Types/DataPoint";
|
|
35
|
+
import SeriesPoint from "../../../UI/Components/Charts/Types/SeriesPoints";
|
|
36
|
+
import {
|
|
37
|
+
XAxis as ChartXAxis,
|
|
38
|
+
XAxisAggregateType,
|
|
39
|
+
} from "../../../UI/Components/Charts/Types/XAxis/XAxis";
|
|
40
|
+
import XAxisType from "../../../UI/Components/Charts/Types/XAxis/XAxisType";
|
|
41
|
+
import YAxis, {
|
|
42
|
+
YAxisPrecision,
|
|
43
|
+
} from "../../../UI/Components/Charts/Types/YAxis/YAxis";
|
|
44
|
+
import YAxisType from "../../../UI/Components/Charts/Types/YAxis/YAxisType";
|
|
45
|
+
import LogsHistogram from "../../../UI/Components/LogsViewer/components/LogsHistogram";
|
|
46
|
+
import TelemetryHistogram from "../../../UI/Components/TelemetryViewer/components/TelemetryHistogram";
|
|
47
|
+
import { HistogramBucket as LogsHistogramBucket } from "../../../UI/Components/LogsViewer/types";
|
|
48
|
+
import {
|
|
49
|
+
HistogramBucket as TelemetryHistogramBucket,
|
|
50
|
+
HistogramSeriesOption,
|
|
51
|
+
} from "../../../UI/Components/TelemetryViewer/types";
|
|
52
|
+
|
|
53
|
+
/*
|
|
54
|
+
* The other half of the cover for
|
|
55
|
+
* https://github.com/OneUptime/oneuptime/issues/3528.
|
|
56
|
+
*
|
|
57
|
+
* ChartFocusRing.test.ts pins what the stylesheet declares. This file pins
|
|
58
|
+
* that those declarations still land on something: it renders the real charts
|
|
59
|
+
* with real recharts and checks every element the browser could focus inside
|
|
60
|
+
* a plot against the selectors the shipped Theme.css actually carries.
|
|
61
|
+
*
|
|
62
|
+
* The selectors are read out of the stylesheet rather than restated here on
|
|
63
|
+
* purpose. A recharts upgrade that renamed .recharts-surface, dropped the
|
|
64
|
+
* accessibility layer's tabindex, or moved the annotation shapes out from
|
|
65
|
+
* under the surface would leave the CSS silently covering nothing, and a
|
|
66
|
+
* hardcoded copy of the selector list would keep passing right through it.
|
|
67
|
+
*/
|
|
68
|
+
|
|
69
|
+
const START: Date = new Date("2026-03-02T00:00:00.000Z");
|
|
70
|
+
const END: Date = new Date("2026-03-02T06:00:00.000Z");
|
|
71
|
+
|
|
72
|
+
function minutesIn(minutes: number): Date {
|
|
73
|
+
return new Date(START.getTime() + minutes * 60 * 1000);
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
function buildSeries(): Array<SeriesPoint> {
|
|
77
|
+
const points: Array<DataPoint> = [];
|
|
78
|
+
|
|
79
|
+
for (let index: number = 0; index < 24; index++) {
|
|
80
|
+
points.push({
|
|
81
|
+
x: new Date(START.getTime() + index * 15 * 60 * 1000),
|
|
82
|
+
y: 100 + index,
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
return [{ seriesName: "latency", data: points }];
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
const X_AXIS: ChartXAxis = {
|
|
90
|
+
legend: "Time",
|
|
91
|
+
options: {
|
|
92
|
+
type: XAxisType.Time,
|
|
93
|
+
min: START,
|
|
94
|
+
max: END,
|
|
95
|
+
aggregateType: XAxisAggregateType.Average,
|
|
96
|
+
},
|
|
97
|
+
};
|
|
98
|
+
|
|
99
|
+
const Y_AXIS: YAxis = {
|
|
100
|
+
legend: "ms",
|
|
101
|
+
options: {
|
|
102
|
+
type: YAxisType.Number,
|
|
103
|
+
min: "auto",
|
|
104
|
+
max: "auto",
|
|
105
|
+
precision: YAxisPrecision.NoDecimals,
|
|
106
|
+
formatter: (value: number): string => {
|
|
107
|
+
return `${value} ms`;
|
|
108
|
+
},
|
|
109
|
+
},
|
|
110
|
+
};
|
|
111
|
+
|
|
112
|
+
/*
|
|
113
|
+
* Annotations are passed to every chart that takes them: the event chips and
|
|
114
|
+
* region pills they draw are focusable <g> elements portalled inside the
|
|
115
|
+
* plot, and they are the reason the selector needs its descendant half.
|
|
116
|
+
*/
|
|
117
|
+
const TIME_REFERENCE_LINES: Array<ChartTimeReferenceLineProps> = [
|
|
118
|
+
{
|
|
119
|
+
date: minutesIn(90),
|
|
120
|
+
label: "Incident: API is down",
|
|
121
|
+
kind: ChartEventKind.Incident,
|
|
122
|
+
color: "#f87171",
|
|
123
|
+
},
|
|
124
|
+
];
|
|
125
|
+
|
|
126
|
+
const REFERENCE_REGIONS: Array<ChartReferenceRegionProps> = [
|
|
127
|
+
{
|
|
128
|
+
startDate: minutesIn(180),
|
|
129
|
+
endDate: minutesIn(240),
|
|
130
|
+
label: "Maintenance",
|
|
131
|
+
color: "#60a5fa",
|
|
132
|
+
},
|
|
133
|
+
];
|
|
134
|
+
|
|
135
|
+
function logsBuckets(): Array<LogsHistogramBucket> {
|
|
136
|
+
return [
|
|
137
|
+
{ time: "2026-03-02T00:00:00.000Z", severity: "Error", count: 4 },
|
|
138
|
+
{ time: "2026-03-02T00:05:00.000Z", severity: "Error", count: 9 },
|
|
139
|
+
{ time: "2026-03-02T00:10:00.000Z", severity: "Information", count: 21 },
|
|
140
|
+
];
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
function telemetryBuckets(): Array<TelemetryHistogramBucket> {
|
|
144
|
+
return [
|
|
145
|
+
{ time: "2026-03-02T00:00:00.000Z", series: "Ok", count: 108 },
|
|
146
|
+
{ time: "2026-03-02T00:05:00.000Z", series: "Unset", count: 837 },
|
|
147
|
+
{ time: "2026-03-02T00:10:00.000Z", series: "Ok", count: 42 },
|
|
148
|
+
];
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
const TELEMETRY_SERIES: Array<HistogramSeriesOption> = [
|
|
152
|
+
{ key: "Ok", label: "Ok", color: "#10b981" },
|
|
153
|
+
{ key: "Unset", label: "Unset", color: "#9ca3af" },
|
|
154
|
+
];
|
|
155
|
+
|
|
156
|
+
interface ChartUnderTest {
|
|
157
|
+
name: string;
|
|
158
|
+
render: () => React.ReactElement;
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
/*
|
|
162
|
+
* Every chart in the product that recharts draws. The two histograms are the
|
|
163
|
+
* ones the issue was filed against; the three chart-library charts are the
|
|
164
|
+
* ones the reporter meant by "it happens around all the graphs".
|
|
165
|
+
*/
|
|
166
|
+
const CHARTS: Array<ChartUnderTest> = [
|
|
167
|
+
{
|
|
168
|
+
name: "LineChart",
|
|
169
|
+
render: (): React.ReactElement => {
|
|
170
|
+
return (
|
|
171
|
+
<LineChartElement
|
|
172
|
+
data={buildSeries()}
|
|
173
|
+
xAxis={X_AXIS}
|
|
174
|
+
yAxis={Y_AXIS}
|
|
175
|
+
curve={ChartCurve.MONOTONE}
|
|
176
|
+
heightInPx={400}
|
|
177
|
+
sync={false}
|
|
178
|
+
syncid="focus-ring-test"
|
|
179
|
+
showLegend={true}
|
|
180
|
+
timeReferenceLines={TIME_REFERENCE_LINES}
|
|
181
|
+
referenceRegions={REFERENCE_REGIONS}
|
|
182
|
+
/>
|
|
183
|
+
);
|
|
184
|
+
},
|
|
185
|
+
},
|
|
186
|
+
{
|
|
187
|
+
name: "AreaChart",
|
|
188
|
+
render: (): React.ReactElement => {
|
|
189
|
+
return (
|
|
190
|
+
<AreaChartElement
|
|
191
|
+
data={buildSeries()}
|
|
192
|
+
xAxis={X_AXIS}
|
|
193
|
+
yAxis={Y_AXIS}
|
|
194
|
+
curve={ChartCurve.MONOTONE}
|
|
195
|
+
heightInPx={400}
|
|
196
|
+
sync={false}
|
|
197
|
+
syncid="focus-ring-test"
|
|
198
|
+
showLegend={true}
|
|
199
|
+
timeReferenceLines={TIME_REFERENCE_LINES}
|
|
200
|
+
referenceRegions={REFERENCE_REGIONS}
|
|
201
|
+
/>
|
|
202
|
+
);
|
|
203
|
+
},
|
|
204
|
+
},
|
|
205
|
+
{
|
|
206
|
+
name: "BarChart",
|
|
207
|
+
render: (): React.ReactElement => {
|
|
208
|
+
return (
|
|
209
|
+
<BarChartElement
|
|
210
|
+
data={buildSeries()}
|
|
211
|
+
xAxis={X_AXIS}
|
|
212
|
+
yAxis={Y_AXIS}
|
|
213
|
+
heightInPx={400}
|
|
214
|
+
sync={false}
|
|
215
|
+
syncid="focus-ring-test"
|
|
216
|
+
showLegend={true}
|
|
217
|
+
timeReferenceLines={TIME_REFERENCE_LINES}
|
|
218
|
+
referenceRegions={REFERENCE_REGIONS}
|
|
219
|
+
/>
|
|
220
|
+
);
|
|
221
|
+
},
|
|
222
|
+
},
|
|
223
|
+
{
|
|
224
|
+
name: "LogsHistogram",
|
|
225
|
+
render: (): React.ReactElement => {
|
|
226
|
+
return (
|
|
227
|
+
<LogsHistogram
|
|
228
|
+
buckets={logsBuckets()}
|
|
229
|
+
isLoading={false}
|
|
230
|
+
onTimeRangeSelect={(): void => {}}
|
|
231
|
+
/>
|
|
232
|
+
);
|
|
233
|
+
},
|
|
234
|
+
},
|
|
235
|
+
{
|
|
236
|
+
name: "TelemetryHistogram",
|
|
237
|
+
render: (): React.ReactElement => {
|
|
238
|
+
return (
|
|
239
|
+
<TelemetryHistogram
|
|
240
|
+
buckets={telemetryBuckets()}
|
|
241
|
+
isLoading={false}
|
|
242
|
+
series={TELEMETRY_SERIES}
|
|
243
|
+
title="Traces over time"
|
|
244
|
+
onTimeRangeSelect={(): void => {}}
|
|
245
|
+
/>
|
|
246
|
+
);
|
|
247
|
+
},
|
|
248
|
+
},
|
|
249
|
+
];
|
|
250
|
+
|
|
251
|
+
/** The selectors Theme.css uses to take the user-agent ring off a chart. */
|
|
252
|
+
const NEUTRALIZING_SELECTORS: Array<string> = selectorsDeclaring(
|
|
253
|
+
"outline",
|
|
254
|
+
"none",
|
|
255
|
+
);
|
|
256
|
+
|
|
257
|
+
function surfacesIn(container: HTMLElement): Array<SVGSVGElement> {
|
|
258
|
+
return Array.from(
|
|
259
|
+
container.querySelectorAll("svg.recharts-surface"),
|
|
260
|
+
) as Array<SVGSVGElement>;
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
/*
|
|
264
|
+
* Everything inside a plot that the browser can put focus on -- the surface
|
|
265
|
+
* itself plus any tabindex-carrying shape drawn into it. These are exactly
|
|
266
|
+
* the elements Chrome's SVG user-agent stylesheet would ring.
|
|
267
|
+
*/
|
|
268
|
+
function focusableChartElements(container: HTMLElement): Array<Element> {
|
|
269
|
+
const focusable: Array<Element> = [];
|
|
270
|
+
|
|
271
|
+
for (const surface of surfacesIn(container)) {
|
|
272
|
+
if (surface.hasAttribute("tabindex")) {
|
|
273
|
+
focusable.push(surface);
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
focusable.push(...Array.from(surface.querySelectorAll("[tabindex]")));
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
return focusable;
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
function describeElement(element: Element): string {
|
|
283
|
+
const testId: string | null = element.getAttribute("data-testid");
|
|
284
|
+
|
|
285
|
+
return [
|
|
286
|
+
element.tagName.toLowerCase(),
|
|
287
|
+
element.getAttribute("class") ? `.${element.getAttribute("class")}` : "",
|
|
288
|
+
testId ? `[data-testid="${testId}"]` : "",
|
|
289
|
+
`[tabindex="${element.getAttribute("tabindex")}"]`,
|
|
290
|
+
].join("");
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
afterEach((): void => {
|
|
294
|
+
cleanup();
|
|
295
|
+
});
|
|
296
|
+
|
|
297
|
+
describe("Chart focus ring coverage", () => {
|
|
298
|
+
test("the stylesheet still silences something", () => {
|
|
299
|
+
expect(NEUTRALIZING_SELECTORS.length).toBeGreaterThan(0);
|
|
300
|
+
});
|
|
301
|
+
|
|
302
|
+
describe.each(
|
|
303
|
+
CHARTS.map((chart: ChartUnderTest): [string, ChartUnderTest] => {
|
|
304
|
+
return [chart.name, chart];
|
|
305
|
+
}),
|
|
306
|
+
)("%s", (_name: string, chart: ChartUnderTest) => {
|
|
307
|
+
/*
|
|
308
|
+
* The premise of the whole fix. If recharts ever renames this class or
|
|
309
|
+
* stops handing the plot a tabindex, the CSS becomes dead weight and the
|
|
310
|
+
* rest of these assertions stop meaning anything -- so it fails here
|
|
311
|
+
* first, where the message says why.
|
|
312
|
+
*/
|
|
313
|
+
test("draws a plot the browser can focus, under the class the fix targets", () => {
|
|
314
|
+
const { container } = render(chart.render());
|
|
315
|
+
const surfaces: Array<SVGSVGElement> = surfacesIn(container);
|
|
316
|
+
|
|
317
|
+
expect(surfaces.length).toBeGreaterThan(0);
|
|
318
|
+
|
|
319
|
+
const focusableSurfaces: Array<SVGSVGElement> = surfaces.filter(
|
|
320
|
+
(surface: SVGSVGElement): boolean => {
|
|
321
|
+
return surface.getAttribute("tabindex") === "0";
|
|
322
|
+
},
|
|
323
|
+
);
|
|
324
|
+
|
|
325
|
+
expect(focusableSurfaces.length).toBeGreaterThan(0);
|
|
326
|
+
});
|
|
327
|
+
|
|
328
|
+
/*
|
|
329
|
+
* The assertion the issue is really about: nothing a pointer can land on
|
|
330
|
+
* inside the plot is left to the user-agent ring.
|
|
331
|
+
*/
|
|
332
|
+
test("no focusable element inside the plot is left to the user-agent ring", () => {
|
|
333
|
+
const { container } = render(chart.render());
|
|
334
|
+
const focusable: Array<Element> = focusableChartElements(container);
|
|
335
|
+
|
|
336
|
+
expect(focusable.length).toBeGreaterThan(0);
|
|
337
|
+
|
|
338
|
+
const uncovered: Array<string> = focusable
|
|
339
|
+
.filter((element: Element): boolean => {
|
|
340
|
+
return !NEUTRALIZING_SELECTORS.some((selector: string): boolean => {
|
|
341
|
+
/*
|
|
342
|
+
* Matched without the pseudo-class: jsdom can say whether the
|
|
343
|
+
* element is the surface or sits inside one, which is the part of
|
|
344
|
+
* the selector that decides coverage. Whether :focus is on is the
|
|
345
|
+
* browser's business, and the harness in the pull request covers
|
|
346
|
+
* that end.
|
|
347
|
+
*/
|
|
348
|
+
return element.matches(selector.replace(/:focus(-visible)?/g, ""));
|
|
349
|
+
});
|
|
350
|
+
})
|
|
351
|
+
.map(describeElement);
|
|
352
|
+
|
|
353
|
+
expect(uncovered).toEqual([]);
|
|
354
|
+
});
|
|
355
|
+
});
|
|
356
|
+
|
|
357
|
+
/*
|
|
358
|
+
* The annotation shapes are focusable by design -- they are buttons a
|
|
359
|
+
* reader clicks -- and they were getting boxed one by one on every click.
|
|
360
|
+
* The descendant half of the selector is the only thing covering them, so
|
|
361
|
+
* this asserts they are really there to be covered rather than letting the
|
|
362
|
+
* loop above pass on a chart that happened to draw none.
|
|
363
|
+
*/
|
|
364
|
+
test("the annotation layer really does put focusable shapes inside the plot", () => {
|
|
365
|
+
const { container } = render(CHARTS[0]!.render());
|
|
366
|
+
|
|
367
|
+
const annotationShapes: Array<Element> = focusableChartElements(
|
|
368
|
+
container,
|
|
369
|
+
).filter((element: Element): boolean => {
|
|
370
|
+
return Boolean(
|
|
371
|
+
element.getAttribute("data-testid")?.startsWith("chart-annotation"),
|
|
372
|
+
);
|
|
373
|
+
});
|
|
374
|
+
|
|
375
|
+
expect(annotationShapes.length).toBeGreaterThan(0);
|
|
376
|
+
});
|
|
377
|
+
});
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
import fs from "fs";
|
|
2
|
+
import path from "path";
|
|
3
|
+
|
|
4
|
+
/*
|
|
5
|
+
* A reader for Common/UI/Styles/Theme.css, shared by the suites that hold the
|
|
6
|
+
* stylesheet to a contract.
|
|
7
|
+
*
|
|
8
|
+
* jsdom's CSS engine is not used for this on purpose. Theme.css is written for
|
|
9
|
+
* a real browser -- :is(), color-mix(), space-separated rgb() with a percent
|
|
10
|
+
* alpha -- and jsdom's parser drops what it cannot model, silently, which
|
|
11
|
+
* would turn a missing rule and an unparsed one into the same green test.
|
|
12
|
+
* Reading the file directly keeps a failure meaning what it says.
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
const THEME_STYLESHEET_PATH: string = path.resolve(
|
|
16
|
+
__dirname,
|
|
17
|
+
"..",
|
|
18
|
+
"..",
|
|
19
|
+
"..",
|
|
20
|
+
"UI",
|
|
21
|
+
"Styles",
|
|
22
|
+
"Theme.css",
|
|
23
|
+
);
|
|
24
|
+
|
|
25
|
+
export interface StyleRule {
|
|
26
|
+
/** Normalised, one entry per comma-separated selector in the prelude. */
|
|
27
|
+
selectors: Array<string>;
|
|
28
|
+
declarations: Record<string, string>;
|
|
29
|
+
/** Source order, which decides the winner between equal specificities. */
|
|
30
|
+
index: number;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
function normalizeWhitespace(value: string): string {
|
|
34
|
+
return value.replace(/\s+/g, " ").trim();
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
function parseDeclarations(body: string): Record<string, string> {
|
|
38
|
+
const declarations: Record<string, string> = {};
|
|
39
|
+
|
|
40
|
+
for (const declaration of body.split(";")) {
|
|
41
|
+
const separatorAt: number = declaration.indexOf(":");
|
|
42
|
+
|
|
43
|
+
if (separatorAt === -1) {
|
|
44
|
+
continue;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
const property: string = normalizeWhitespace(
|
|
48
|
+
declaration.slice(0, separatorAt),
|
|
49
|
+
);
|
|
50
|
+
const value: string = normalizeWhitespace(
|
|
51
|
+
declaration.slice(separatorAt + 1),
|
|
52
|
+
);
|
|
53
|
+
|
|
54
|
+
if (property) {
|
|
55
|
+
declarations[property] = value;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
return declarations;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/*
|
|
63
|
+
* Only top-level rules are collected. Everything asserted against this lives
|
|
64
|
+
* at the top level of the sheet; at-rules (@media, @keyframes) are skipped
|
|
65
|
+
* whole so their inner blocks cannot be mistaken for one.
|
|
66
|
+
*/
|
|
67
|
+
export function parseTopLevelRules(css: string): Array<StyleRule> {
|
|
68
|
+
const withoutComments: string = css.replace(/\/\*[\s\S]*?\*\//g, "");
|
|
69
|
+
const rules: Array<StyleRule> = [];
|
|
70
|
+
|
|
71
|
+
let prelude: string = "";
|
|
72
|
+
let body: string = "";
|
|
73
|
+
let depth: number = 0;
|
|
74
|
+
|
|
75
|
+
for (const character of withoutComments) {
|
|
76
|
+
if (character === "{") {
|
|
77
|
+
depth++;
|
|
78
|
+
|
|
79
|
+
if (depth === 1) {
|
|
80
|
+
continue;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
if (character === "}") {
|
|
85
|
+
depth--;
|
|
86
|
+
|
|
87
|
+
if (depth === 0) {
|
|
88
|
+
const selectorText: string = normalizeWhitespace(prelude);
|
|
89
|
+
|
|
90
|
+
if (selectorText && !selectorText.startsWith("@")) {
|
|
91
|
+
rules.push({
|
|
92
|
+
selectors: selectorText.split(",").map(normalizeWhitespace),
|
|
93
|
+
declarations: parseDeclarations(body),
|
|
94
|
+
index: rules.length,
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
prelude = "";
|
|
99
|
+
body = "";
|
|
100
|
+
continue;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
if (depth === 0) {
|
|
105
|
+
prelude += character;
|
|
106
|
+
} else {
|
|
107
|
+
body += character;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
return rules;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
export const THEME_RULES: Array<StyleRule> = parseTopLevelRules(
|
|
115
|
+
fs.readFileSync(THEME_STYLESHEET_PATH, "utf8"),
|
|
116
|
+
);
|
|
117
|
+
|
|
118
|
+
export function rulesFor(selector: string): Array<StyleRule> {
|
|
119
|
+
return THEME_RULES.filter((rule: StyleRule): boolean => {
|
|
120
|
+
return rule.selectors.includes(selector);
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
/*
|
|
125
|
+
* The last declaration wins. Every rule these suites reach for carries no
|
|
126
|
+
* !important and no specificity beyond one class plus one pseudo-class, so
|
|
127
|
+
* source order is the whole tiebreak.
|
|
128
|
+
*/
|
|
129
|
+
export function declaredValue(
|
|
130
|
+
selector: string,
|
|
131
|
+
property: string,
|
|
132
|
+
): string | undefined {
|
|
133
|
+
const matching: Array<StyleRule> = rulesFor(selector).filter(
|
|
134
|
+
(rule: StyleRule): boolean => {
|
|
135
|
+
return rule.declarations[property] !== undefined;
|
|
136
|
+
},
|
|
137
|
+
);
|
|
138
|
+
|
|
139
|
+
return matching[matching.length - 1]?.declarations[property];
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
/**
|
|
143
|
+
* Every selector in the sheet that gives `property` exactly `value` -- the way
|
|
144
|
+
* a suite asks the shipped stylesheet what it actually covers, rather than
|
|
145
|
+
* restating the answer as a literal and testing itself.
|
|
146
|
+
*/
|
|
147
|
+
export function selectorsDeclaring(
|
|
148
|
+
property: string,
|
|
149
|
+
value: string,
|
|
150
|
+
): Array<string> {
|
|
151
|
+
const selectors: Array<string> = [];
|
|
152
|
+
|
|
153
|
+
for (const rule of THEME_RULES) {
|
|
154
|
+
if (rule.declarations[property] !== value) {
|
|
155
|
+
continue;
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
selectors.push(...rule.selectors);
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
return selectors;
|
|
162
|
+
}
|