@oneuptime/common 12.0.29 → 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 +13 -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/OnCallDutyPolicySchedule.ts +43 -0
- package/Models/DatabaseModels/OnCallDutyPolicyScheduleCalendarFeed.ts +662 -0
- package/Models/DatabaseModels/ProjectOnCallCalendarFeed.ts +584 -0
- package/Models/DatabaseModels/ThreatIntelFeed.ts +16 -5
- package/Models/DatabaseModels/UserOnCallCalendarFeed.ts +546 -0
- package/Models/DatabaseModels/UserOnCallShiftReminder.ts +231 -0
- package/Models/DatabaseModels/UserOnCallShiftReminderLog.ts +331 -0
- package/Server/API/GlobalConfigAPI.ts +362 -183
- package/Server/API/OnCallCalendarAPI.ts +2194 -0
- package/Server/API/TelemetryAPI.ts +42 -4
- package/Server/EnvironmentConfig.ts +250 -0
- package/Server/Infrastructure/OnCallCalendarFeedCache.ts +1050 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1790400000000-AddOnCallCalendarFeeds.ts +253 -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 +6 -0
- package/Server/Middleware/MultipartFormData.ts +118 -32
- package/Server/Middleware/OnCallCalendarFeedRateLimit.ts +487 -0
- 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 +14 -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/OnCallDutyPolicyEscalationRuleScheduleService.ts +32 -0
- package/Server/Services/OnCallDutyPolicyLabelRuleEngineService.ts +9 -1
- package/Server/Services/OnCallDutyPolicyOwnerRuleEngineService.ts +9 -1
- package/Server/Services/OnCallDutyPolicyScheduleCalendarFeedService.ts +260 -0
- package/Server/Services/OnCallDutyPolicyScheduleLabelRuleEngineService.ts +9 -1
- package/Server/Services/OnCallDutyPolicyScheduleLayerService.ts +70 -3
- package/Server/Services/OnCallDutyPolicyScheduleLayerUserService.ts +138 -3
- package/Server/Services/OnCallDutyPolicyScheduleOwnerRuleEngineService.ts +9 -1
- package/Server/Services/OnCallDutyPolicyScheduleService.ts +1465 -134
- package/Server/Services/OnCallDutyPolicyUserOverrideService.ts +167 -31
- package/Server/Services/PodmanHostLabelRuleEngineService.ts +9 -1
- package/Server/Services/PodmanHostOwnerRuleEngineService.ts +9 -1
- package/Server/Services/ProjectOnCallCalendarFeedService.ts +192 -0
- 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/TeamMemberService.ts +489 -1
- package/Server/Services/TeamService.ts +50 -0
- package/Server/Services/TelemetrySourceMapService.ts +266 -23
- package/Server/Services/UserNotificationSettingService.ts +44 -1
- package/Server/Services/UserOnCallCalendarFeedService.ts +159 -0
- package/Server/Services/UserOnCallShiftReminderLogService.ts +151 -0
- package/Server/Services/UserOnCallShiftReminderService.ts +112 -0
- 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/OnCall/CalendarFeedToken.ts +241 -0
- package/Server/Utils/OnCall/OnCallCalendarFeedRenderer.ts +1488 -0
- package/Server/Utils/OnCall/OnCallCalendarFeedUrls.ts +230 -0
- package/Server/Utils/OnCall/OnCallShiftChangeListeners.ts +227 -0
- package/Server/Utils/OnCall/OnCallShiftMaterializer.ts +1127 -0
- package/Server/Utils/OnCall/OnCallShiftReminderListener.ts +174 -0
- package/Server/Utils/OnCall/OnCallShiftReminderRunner.ts +2584 -0
- package/Server/Utils/Response.ts +134 -0
- package/Server/Utils/Rules/RuleEngineRuleRead.ts +48 -0
- package/Server/Utils/StartServer.ts +10 -0
- package/Server/Utils/Telemetry/AppMetrics.ts +51 -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/OnCallCalendarFeedLinks.test.tsx +229 -0
- package/Tests/App/Dashboard/OnCallCalendarFeedPlanGate.test.tsx +489 -0
- package/Tests/App/Dashboard/OnCallCalendarFeedSideMenus.test.tsx +149 -0
- package/Tests/App/Dashboard/OnCallCalendarFeedUtil.test.ts +855 -0
- package/Tests/App/Dashboard/OnCallPersonalCalendarFeed.test.tsx +1209 -0
- package/Tests/App/Dashboard/OnCallReadinessSurfaces.test.tsx +3 -3
- package/Tests/App/Dashboard/OnCallSharedCalendarFeedCard.test.tsx +1019 -0
- package/Tests/App/Dashboard/OnCallShiftRemindersAndUpcomingShifts.test.tsx +655 -0
- package/Tests/App/Dashboard/UserElementEmail.test.tsx +12 -4
- package/Tests/App/Dashboard/UserEmailCallSites.test.tsx +1 -1
- package/Tests/App/Dashboard/UserSettingsSetupChecklistModel.test.ts +73 -0
- package/Tests/Models/DatabaseModels/DomainRoleTierCoverage.test.ts +14 -0
- package/Tests/Models/DatabaseModels/ModelRegistryInvariants.test.ts +469 -0
- package/Tests/Models/OnCallCalendarFeedModels.test.ts +642 -0
- package/Tests/Models/OnCallDutyPolicyScheduleCalendarFeed.test.ts +288 -0
- package/Tests/Models/OnCallDutyPolicyScheduleShiftConfigVersion.test.ts +88 -0
- package/Tests/Models/SecurityDomainAccessControl.test.ts +429 -0
- package/Tests/Models/UserOnCallShiftReminderModels.test.ts +368 -0
- package/Tests/Server/API/GlobalConfigLicense.test.ts +657 -0
- package/Tests/Server/API/Helpers.ts +8 -0
- package/Tests/Server/API/OnCallCalendarAPI.test.ts +4461 -0
- package/Tests/Server/API/SecurityEventAttributesAPI.test.ts +84 -6
- package/Tests/Server/API/TelemetryResolveStackTraceAPI.test.ts +805 -0
- package/Tests/Server/EnvironmentConfigOnCallCalendarFeed.test.ts +357 -0
- package/Tests/Server/Infrastructure/OnCallCalendarFeedCache.test.ts +1589 -0
- package/Tests/Server/Infrastructure/Postgres/AddOnCallCalendarFeedsMigration.test.ts +394 -0
- package/Tests/Server/Middleware/IdentityRateLimit.test.ts +1144 -0
- package/Tests/Server/Middleware/MultipartFormData.test.ts +618 -3
- package/Tests/Server/Middleware/OnCallCalendarFeedRateLimit.test.ts +1365 -0
- package/Tests/Server/Services/FeedRetentionConsistency.test.ts +70 -0
- 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/OnCallCalendarFeedServices.test.ts +1103 -0
- package/Tests/Server/Services/OnCallDutyPolicyScheduleResolver.test.ts +1037 -0
- package/Tests/Server/Services/OnCallShiftConfigPropagation.test.ts +1270 -0
- package/Tests/Server/Services/RuleEngineRuleFetchLimit.test.ts +239 -0
- package/Tests/Server/Services/TeamDeleteMemberCleanup.test.ts +156 -0
- package/Tests/Server/Services/TeamMemberOnCallCleanup.test.ts +755 -0
- package/Tests/Server/Services/TelemetrySourceMapService.test.ts +1210 -2
- package/Tests/Server/Services/UserNotificationSettingShiftReminderDefaults.test.ts +267 -0
- package/Tests/Server/Services/UserOnCallShiftReminderServices.test.ts +583 -0
- 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/OnCallCalendarFeedPermissions.test.ts +254 -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/OnCall/CalendarFeedToken.test.ts +467 -0
- package/Tests/Server/Utils/OnCall/OnCallCalendarFeedRenderer.test.ts +2142 -0
- package/Tests/Server/Utils/OnCall/OnCallCalendarFeedUrls.test.ts +278 -0
- package/Tests/Server/Utils/OnCall/OnCallResolverTestHarness.ts +440 -0
- package/Tests/Server/Utils/OnCall/OnCallShiftChangeListeners.test.ts +314 -0
- package/Tests/Server/Utils/OnCall/OnCallShiftMaterializer.test.ts +1502 -0
- package/Tests/Server/Utils/OnCall/OnCallShiftReminderListener.test.ts +491 -0
- package/Tests/Server/Utils/OnCall/OnCallShiftReminderRunner.test.ts +3088 -0
- package/Tests/Server/Utils/OnCall/OnCallShiftReminderTestHarness.ts +910 -0
- package/Tests/Server/Utils/OpenAPISpec.test.ts +536 -0
- package/Tests/Server/Utils/ResponseSendCalendarResponse.test.ts +561 -0
- package/Tests/Server/Utils/Rules/RuleEngineRuleRead.test.ts +115 -0
- package/Tests/Server/Utils/StackTraceParser.test.ts +610 -0
- package/Tests/Server/Utils/StartServerEncryptionSecretWarning.test.ts +64 -0
- package/Tests/Server/Utils/Telemetry/AppMetrics.test.ts +29 -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/Calendar/ICalendar.test.ts +488 -0
- package/Tests/Types/Monitor/SnmpMonitor/SnmpOidListUtil.test.ts +454 -0
- package/Tests/Types/NotificationSetting/NotificationSettingEventType.test.ts +53 -0
- package/Tests/Types/OnCallDutyPolicy/CalendarFeedTestFixtures.ts +310 -0
- package/Tests/Types/OnCallDutyPolicy/CalendarFeedWindow.test.ts +205 -0
- package/Tests/Types/OnCallDutyPolicy/LayerUtilLayerMetaAndIterationCap.test.ts +458 -0
- package/Tests/Types/OnCallDutyPolicy/MaterializedShift.test.ts +197 -0
- package/Tests/Types/OnCallDutyPolicy/OnCallCalendarFeedUtil.test.ts +1986 -0
- package/Tests/Types/OnCallDutyPolicy/ScheduleShiftUtilGroupKey.test.ts +678 -0
- package/Tests/Types/OnCallDutyPolicy/ShiftSeamUtil.test.ts +417 -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/UI/Utils/Breadcrumb/fixtures/RealBreadcrumbTrails.ts +10 -0
- package/Tests/UI/Utils/Breadcrumb/fixtures/RealRoutePatterns.ts +2 -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/Calendar/ICalendar.ts +442 -0
- package/Types/Date.ts +39 -0
- package/Types/Email/EmailTemplateType.ts +2 -0
- package/Types/Monitor/SnmpMonitor/SnmpOidListUtil.ts +333 -0
- package/Types/NotificationSetting/NotificationSettingEventType.ts +4 -0
- package/Types/OnCallDutyPolicy/CalendarFeedWindow.ts +140 -0
- package/Types/OnCallDutyPolicy/Layer.ts +190 -35
- package/Types/OnCallDutyPolicy/MaterializedShift.ts +274 -0
- package/Types/OnCallDutyPolicy/OnCallCalendarFeedUtil.ts +1415 -0
- package/Types/OnCallDutyPolicy/ScheduleShiftUtil.ts +159 -4
- package/Types/OnCallDutyPolicy/ShiftSeamUtil.ts +106 -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 +13 -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/OnCallDutyPolicySchedule.js +44 -0
- package/build/dist/Models/DatabaseModels/OnCallDutyPolicySchedule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/OnCallDutyPolicyScheduleCalendarFeed.js +699 -0
- package/build/dist/Models/DatabaseModels/OnCallDutyPolicyScheduleCalendarFeed.js.map +1 -0
- package/build/dist/Models/DatabaseModels/ProjectOnCallCalendarFeed.js +620 -0
- package/build/dist/Models/DatabaseModels/ProjectOnCallCalendarFeed.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/Models/DatabaseModels/UserOnCallCalendarFeed.js +585 -0
- package/build/dist/Models/DatabaseModels/UserOnCallCalendarFeed.js.map +1 -0
- package/build/dist/Models/DatabaseModels/UserOnCallShiftReminder.js +247 -0
- package/build/dist/Models/DatabaseModels/UserOnCallShiftReminder.js.map +1 -0
- package/build/dist/Models/DatabaseModels/UserOnCallShiftReminderLog.js +355 -0
- package/build/dist/Models/DatabaseModels/UserOnCallShiftReminderLog.js.map +1 -0
- package/build/dist/Server/API/GlobalConfigAPI.js +293 -176
- package/build/dist/Server/API/GlobalConfigAPI.js.map +1 -1
- package/build/dist/Server/API/OnCallCalendarAPI.js +1371 -0
- package/build/dist/Server/API/OnCallCalendarAPI.js.map +1 -0
- 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 +185 -0
- package/build/dist/Server/EnvironmentConfig.js.map +1 -1
- package/build/dist/Server/Infrastructure/OnCallCalendarFeedCache.js +663 -0
- package/build/dist/Server/Infrastructure/OnCallCalendarFeedCache.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790400000000-AddOnCallCalendarFeeds.js +103 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790400000000-AddOnCallCalendarFeeds.js.map +1 -0
- 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 +6 -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/Middleware/OnCallCalendarFeedRateLimit.js +342 -0
- package/build/dist/Server/Middleware/OnCallCalendarFeedRateLimit.js.map +1 -0
- 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 +14 -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/OnCallDutyPolicyEscalationRuleScheduleService.js +20 -0
- package/build/dist/Server/Services/OnCallDutyPolicyEscalationRuleScheduleService.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/OnCallDutyPolicyScheduleCalendarFeedService.js +219 -0
- package/build/dist/Server/Services/OnCallDutyPolicyScheduleCalendarFeedService.js.map +1 -0
- package/build/dist/Server/Services/OnCallDutyPolicyScheduleLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/OnCallDutyPolicyScheduleLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/OnCallDutyPolicyScheduleLayerService.js +47 -3
- package/build/dist/Server/Services/OnCallDutyPolicyScheduleLayerService.js.map +1 -1
- package/build/dist/Server/Services/OnCallDutyPolicyScheduleLayerUserService.js +112 -3
- package/build/dist/Server/Services/OnCallDutyPolicyScheduleLayerUserService.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/OnCallDutyPolicyScheduleService.js +955 -9
- package/build/dist/Server/Services/OnCallDutyPolicyScheduleService.js.map +1 -1
- package/build/dist/Server/Services/OnCallDutyPolicyUserOverrideService.js +93 -6
- package/build/dist/Server/Services/OnCallDutyPolicyUserOverrideService.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/ProjectOnCallCalendarFeedService.js +157 -0
- package/build/dist/Server/Services/ProjectOnCallCalendarFeedService.js.map +1 -0
- 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/TeamMemberService.js +396 -1
- package/build/dist/Server/Services/TeamMemberService.js.map +1 -1
- package/build/dist/Server/Services/TeamService.js +43 -0
- package/build/dist/Server/Services/TeamService.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/UserNotificationSettingService.js +26 -1
- package/build/dist/Server/Services/UserNotificationSettingService.js.map +1 -1
- package/build/dist/Server/Services/UserOnCallCalendarFeedService.js +140 -0
- package/build/dist/Server/Services/UserOnCallCalendarFeedService.js.map +1 -0
- package/build/dist/Server/Services/UserOnCallShiftReminderLogService.js +116 -0
- package/build/dist/Server/Services/UserOnCallShiftReminderLogService.js.map +1 -0
- package/build/dist/Server/Services/UserOnCallShiftReminderService.js +92 -0
- package/build/dist/Server/Services/UserOnCallShiftReminderService.js.map +1 -0
- 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/OnCall/CalendarFeedToken.js +161 -0
- package/build/dist/Server/Utils/OnCall/CalendarFeedToken.js.map +1 -0
- package/build/dist/Server/Utils/OnCall/OnCallCalendarFeedRenderer.js +983 -0
- package/build/dist/Server/Utils/OnCall/OnCallCalendarFeedRenderer.js.map +1 -0
- package/build/dist/Server/Utils/OnCall/OnCallCalendarFeedUrls.js +155 -0
- package/build/dist/Server/Utils/OnCall/OnCallCalendarFeedUrls.js.map +1 -0
- package/build/dist/Server/Utils/OnCall/OnCallShiftChangeListeners.js +145 -0
- package/build/dist/Server/Utils/OnCall/OnCallShiftChangeListeners.js.map +1 -0
- package/build/dist/Server/Utils/OnCall/OnCallShiftMaterializer.js +752 -0
- package/build/dist/Server/Utils/OnCall/OnCallShiftMaterializer.js.map +1 -0
- package/build/dist/Server/Utils/OnCall/OnCallShiftReminderListener.js +92 -0
- package/build/dist/Server/Utils/OnCall/OnCallShiftReminderListener.js.map +1 -0
- package/build/dist/Server/Utils/OnCall/OnCallShiftReminderRunner.js +1786 -0
- package/build/dist/Server/Utils/OnCall/OnCallShiftReminderRunner.js.map +1 -0
- package/build/dist/Server/Utils/Response.js +97 -0
- package/build/dist/Server/Utils/Response.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/StartServer.js +9 -1
- package/build/dist/Server/Utils/StartServer.js.map +1 -1
- package/build/dist/Server/Utils/Telemetry/AppMetrics.js +41 -0
- package/build/dist/Server/Utils/Telemetry/AppMetrics.js.map +1 -1
- 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/Calendar/ICalendar.js +290 -0
- package/build/dist/Types/Calendar/ICalendar.js.map +1 -0
- package/build/dist/Types/Date.js +27 -0
- package/build/dist/Types/Date.js.map +1 -1
- package/build/dist/Types/Email/EmailTemplateType.js +2 -0
- package/build/dist/Types/Email/EmailTemplateType.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/NotificationSetting/NotificationSettingEventType.js +3 -0
- package/build/dist/Types/NotificationSetting/NotificationSettingEventType.js.map +1 -1
- package/build/dist/Types/OnCallDutyPolicy/CalendarFeedWindow.js +97 -0
- package/build/dist/Types/OnCallDutyPolicy/CalendarFeedWindow.js.map +1 -0
- package/build/dist/Types/OnCallDutyPolicy/Layer.js +113 -19
- package/build/dist/Types/OnCallDutyPolicy/Layer.js.map +1 -1
- package/build/dist/Types/OnCallDutyPolicy/MaterializedShift.js +134 -0
- package/build/dist/Types/OnCallDutyPolicy/MaterializedShift.js.map +1 -0
- package/build/dist/Types/OnCallDutyPolicy/OnCallCalendarFeedUtil.js +800 -0
- package/build/dist/Types/OnCallDutyPolicy/OnCallCalendarFeedUtil.js.map +1 -0
- package/build/dist/Types/OnCallDutyPolicy/ScheduleShiftUtil.js +97 -3
- package/build/dist/Types/OnCallDutyPolicy/ScheduleShiftUtil.js.map +1 -1
- package/build/dist/Types/OnCallDutyPolicy/ShiftSeamUtil.js +77 -0
- package/build/dist/Types/OnCallDutyPolicy/ShiftSeamUtil.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
|
@@ -1,18 +1,262 @@
|
|
|
1
|
-
/** @timezone
|
|
1
|
+
/** @timezone UTC */
|
|
2
2
|
|
|
3
|
+
import { afterEach, describe, expect, test } from "@jest/globals";
|
|
4
|
+
import OneUptimeDate from "../../../Types/Date";
|
|
5
|
+
import Timezone from "../../../Types/Timezone";
|
|
6
|
+
import XAxisMaxMin from "../../../UI/Components/Charts/Types/XAxis/XAxisMaxMin";
|
|
7
|
+
import XAxisPrecision from "../../../UI/Components/Charts/Types/XAxis/XAxisPrecision";
|
|
3
8
|
import XAxisUtil from "../../../UI/Components/Charts/Utils/XAxis";
|
|
4
9
|
|
|
5
|
-
|
|
6
|
-
|
|
10
|
+
/*
|
|
11
|
+
* A chart's x-axis label is the IDENTITY of its bucket, not decoration:
|
|
12
|
+
* DataPointUtil places a series row by finding the first row whose label
|
|
13
|
+
* matches, TimeAnnotationUtil resolves an event marker the same way, and
|
|
14
|
+
* recharts' categorical scale resolves no category at all once its domain
|
|
15
|
+
* holds a duplicate.
|
|
16
|
+
*
|
|
17
|
+
* These tests hold the property that makes all three safe — inside any one
|
|
18
|
+
* window, no two ticks may share a label — and the corollary that a window
|
|
19
|
+
* short enough not to need help keeps its short labels.
|
|
20
|
+
*/
|
|
21
|
+
|
|
22
|
+
const HOUR_IN_MS: number = 60 * 60 * 1000;
|
|
23
|
+
|
|
24
|
+
const WINDOW_START: Date = new Date("2026-03-02T00:00:00.000Z");
|
|
25
|
+
|
|
26
|
+
function windowOf(
|
|
27
|
+
hours: number,
|
|
28
|
+
start: Date = WINDOW_START,
|
|
29
|
+
): {
|
|
30
|
+
xAxisMin: XAxisMaxMin;
|
|
31
|
+
xAxisMax: XAxisMaxMin;
|
|
32
|
+
} {
|
|
33
|
+
return {
|
|
34
|
+
xAxisMin: start,
|
|
35
|
+
xAxisMax: new Date(start.getTime() + hours * HOUR_IN_MS),
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
function labelsFor(bounds: {
|
|
40
|
+
xAxisMin: XAxisMaxMin;
|
|
41
|
+
xAxisMax: XAxisMaxMin;
|
|
42
|
+
}): Array<string> {
|
|
43
|
+
const formatter: (value: Date) => string = XAxisUtil.getFormatter(bounds);
|
|
44
|
+
return XAxisUtil.getPrecisionIntervals(bounds).map((interval: Date) => {
|
|
45
|
+
return formatter(interval);
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
afterEach((): void => {
|
|
50
|
+
OneUptimeDate.setUserTimezone(null);
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
describe("XAxisUtil label uniqueness", () => {
|
|
54
|
+
test("a 24 hour window labels every one of its 97 ticks distinctly", () => {
|
|
55
|
+
/*
|
|
56
|
+
* The reported bug. A 24h window sits on the fifteen-minute tier and
|
|
57
|
+
* spans 97 interval starts, but a bare "HH:mm" only has 96 readings in
|
|
58
|
+
* a day — the first and last tick both read "00:00", so the last
|
|
59
|
+
* bucket's data and annotations were folded onto the first.
|
|
60
|
+
*/
|
|
61
|
+
const bounds: ReturnType<typeof windowOf> = windowOf(24);
|
|
62
|
+
|
|
63
|
+
expect(XAxisUtil.getPrecision(bounds)).toBe(
|
|
64
|
+
XAxisPrecision.EVERY_FIFTEEN_MINUTES,
|
|
65
|
+
);
|
|
66
|
+
|
|
67
|
+
const labels: Array<string> = labelsFor(bounds);
|
|
68
|
+
|
|
69
|
+
expect(labels).toHaveLength(97);
|
|
70
|
+
expect(new Set(labels).size).toBe(97);
|
|
71
|
+
});
|
|
72
|
+
|
|
73
|
+
test("a 48 hour window labels every one of its 97 ticks distinctly", () => {
|
|
74
|
+
/*
|
|
75
|
+
* The severe case. A 48h window sits on the thirty-minute tier: 97
|
|
76
|
+
* interval starts over a bare "HH:mm" that has only 48 readings, so
|
|
77
|
+
* every label appeared exactly twice and the whole of day two merged
|
|
78
|
+
* onto day one.
|
|
79
|
+
*/
|
|
80
|
+
const bounds: ReturnType<typeof windowOf> = windowOf(48);
|
|
81
|
+
|
|
82
|
+
expect(XAxisUtil.getPrecision(bounds)).toBe(
|
|
83
|
+
XAxisPrecision.EVERY_THIRTY_MINUTES,
|
|
84
|
+
);
|
|
85
|
+
|
|
86
|
+
const labels: Array<string> = labelsFor(bounds);
|
|
87
|
+
|
|
88
|
+
expect(labels).toHaveLength(97);
|
|
89
|
+
expect(new Set(labels).size).toBe(97);
|
|
90
|
+
});
|
|
91
|
+
|
|
92
|
+
test.each([
|
|
93
|
+
["6 hours", 6, 73],
|
|
94
|
+
["12 hours", 12, 145],
|
|
95
|
+
["13 hours", 13, 53],
|
|
96
|
+
["23 hours", 23, 93],
|
|
97
|
+
["24 hours", 24, 97],
|
|
98
|
+
["36 hours", 36, 73],
|
|
99
|
+
["48 hours", 48, 97],
|
|
100
|
+
["72 hours", 72, 145],
|
|
101
|
+
["5 days", 120, 121],
|
|
102
|
+
])(
|
|
103
|
+
"%s: no two ticks share a label",
|
|
104
|
+
(_name: string, hours: number, expectedTicks: number): void => {
|
|
105
|
+
const labels: Array<string> = labelsFor(windowOf(hours));
|
|
106
|
+
|
|
107
|
+
expect(labels).toHaveLength(expectedTicks);
|
|
108
|
+
expect(new Set(labels).size).toBe(labels.length);
|
|
109
|
+
},
|
|
110
|
+
);
|
|
111
|
+
|
|
112
|
+
test("no window across three days repeats a label, at any tier", () => {
|
|
113
|
+
/*
|
|
114
|
+
* The property itself, swept rather than sampled — including windows
|
|
115
|
+
* that start off a clean boundary, which is what a live "last N hours"
|
|
116
|
+
* range always does.
|
|
117
|
+
*/
|
|
118
|
+
const start: Date = new Date("2026-03-02T07:23:00.000Z");
|
|
119
|
+
const repeating: Array<string> = [];
|
|
120
|
+
|
|
121
|
+
for (let minutes: number = 15; minutes <= 3 * 24 * 60; minutes += 97) {
|
|
122
|
+
const bounds: { xAxisMin: XAxisMaxMin; xAxisMax: XAxisMaxMin } = {
|
|
123
|
+
xAxisMin: start,
|
|
124
|
+
xAxisMax: new Date(start.getTime() + minutes * 60 * 1000),
|
|
125
|
+
};
|
|
126
|
+
const labels: Array<string> = labelsFor(bounds);
|
|
127
|
+
if (new Set(labels).size !== labels.length) {
|
|
128
|
+
repeating.push(
|
|
129
|
+
`${minutes}min: ${labels.length} ticks, ${new Set(labels).size} distinct`,
|
|
130
|
+
);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
expect(repeating).toEqual([]);
|
|
135
|
+
});
|
|
136
|
+
});
|
|
137
|
+
|
|
138
|
+
describe("XAxisUtil label verbosity", () => {
|
|
139
|
+
test("a window that cannot wrap the clock keeps its bare time labels", () => {
|
|
140
|
+
/*
|
|
141
|
+
* The date is bought at the cost of nearly tripling the label width,
|
|
142
|
+
* so it is only spent where a bare reading would be ambiguous. 23h is
|
|
143
|
+
* the last window that cannot repeat one.
|
|
144
|
+
*/
|
|
145
|
+
const labels: Array<string> = labelsFor(windowOf(23));
|
|
146
|
+
|
|
147
|
+
expect(labels[0]).toBe("00:00");
|
|
148
|
+
expect(labels[labels.length - 1]).toBe("23:00");
|
|
149
|
+
});
|
|
150
|
+
|
|
151
|
+
test("a window that can wrap the clock says which day each tick is", () => {
|
|
152
|
+
const labels: Array<string> = labelsFor(windowOf(48));
|
|
153
|
+
|
|
154
|
+
expect(labels[0]).toBe("02 Mar, 00:00");
|
|
155
|
+
expect(labels[labels.length - 1]).toBe("04 Mar, 00:00");
|
|
156
|
+
// The same clock reading on the two days is now two different labels.
|
|
157
|
+
expect(labels).toContain("03 Mar, 00:00");
|
|
158
|
+
});
|
|
159
|
+
|
|
160
|
+
test("the day-qualified form matches the shape the hourly tier already uses", () => {
|
|
161
|
+
/*
|
|
162
|
+
* EVERY_HOUR and every coarser tier have carried "DD MMM, HH:00" for
|
|
163
|
+
* this same reason all along, so the finer tiers borrow its shape
|
|
164
|
+
* rather than inventing one.
|
|
165
|
+
*/
|
|
166
|
+
const hourly: Array<string> = labelsFor(windowOf(5 * 24));
|
|
167
|
+
const subHourly: Array<string> = labelsFor(windowOf(48));
|
|
168
|
+
|
|
169
|
+
expect(hourly[0]).toBe("02 Mar, 00:00");
|
|
170
|
+
expect(subHourly[0]).toBe("02 Mar, 00:00");
|
|
171
|
+
});
|
|
172
|
+
});
|
|
173
|
+
|
|
174
|
+
describe("XAxisUtil labels across a daylight saving transition", () => {
|
|
175
|
+
/*
|
|
176
|
+
* The browser reports UTC here (see the docblock) while the user has
|
|
177
|
+
* configured London — the normal case for anyone who has set a timezone,
|
|
178
|
+
* and the one where a transition in the configured zone is invisible to
|
|
179
|
+
* the interval walker.
|
|
180
|
+
*/
|
|
181
|
+
|
|
182
|
+
test("clocks going back do not give two ticks the same label", () => {
|
|
183
|
+
/*
|
|
184
|
+
* On 2026-10-25 London runs 01:00-01:59 BST and then 01:00-01:59 GMT.
|
|
185
|
+
* A four hour window is nowhere near long enough to wrap the clock,
|
|
186
|
+
* but the replayed hour repeated twelve five-minute labels — and the
|
|
187
|
+
* date does not settle it either, since both readings are on the 25th.
|
|
188
|
+
*/
|
|
189
|
+
OneUptimeDate.setUserTimezone("Europe/London" as Timezone);
|
|
190
|
+
|
|
191
|
+
const bounds: ReturnType<typeof windowOf> = windowOf(
|
|
192
|
+
4,
|
|
193
|
+
new Date("2026-10-25T00:00:00.000Z"),
|
|
194
|
+
);
|
|
195
|
+
const labels: Array<string> = labelsFor(bounds);
|
|
196
|
+
|
|
197
|
+
expect(new Set(labels).size).toBe(labels.length);
|
|
198
|
+
expect(labels).toContain("25 Oct, 01:00 BST");
|
|
199
|
+
expect(labels).toContain("25 Oct, 01:00 GMT");
|
|
200
|
+
});
|
|
201
|
+
|
|
202
|
+
test("clocks going forward stay on the plain form", () => {
|
|
203
|
+
/*
|
|
204
|
+
* A spring-forward skips an hour rather than replaying one, so it
|
|
205
|
+
* cannot produce a duplicate and must not cost the axis any width.
|
|
206
|
+
*/
|
|
207
|
+
OneUptimeDate.setUserTimezone("Europe/London" as Timezone);
|
|
208
|
+
|
|
209
|
+
const bounds: ReturnType<typeof windowOf> = windowOf(
|
|
210
|
+
4,
|
|
211
|
+
new Date("2026-03-29T00:00:00.000Z"),
|
|
212
|
+
);
|
|
213
|
+
const labels: Array<string> = labelsFor(bounds);
|
|
214
|
+
|
|
215
|
+
expect(new Set(labels).size).toBe(labels.length);
|
|
216
|
+
for (const label of labels) {
|
|
217
|
+
expect(label).toMatch(/^\d{2}:\d{2}$/);
|
|
218
|
+
}
|
|
219
|
+
});
|
|
220
|
+
|
|
221
|
+
test("an ordinary window in the same zone is untouched", () => {
|
|
222
|
+
OneUptimeDate.setUserTimezone("Europe/London" as Timezone);
|
|
223
|
+
|
|
224
|
+
const labels: Array<string> = labelsFor(
|
|
225
|
+
windowOf(6, new Date("2026-06-01T00:00:00.000Z")),
|
|
226
|
+
);
|
|
227
|
+
|
|
228
|
+
expect(new Set(labels).size).toBe(labels.length);
|
|
229
|
+
expect(labels[0]).toBe("01:00");
|
|
230
|
+
});
|
|
231
|
+
});
|
|
232
|
+
|
|
233
|
+
describe("XAxisUtil formats in the configured timezone", () => {
|
|
234
|
+
test("past-day labels read in local BST time instead of UTC", () => {
|
|
235
|
+
OneUptimeDate.setUserTimezone("Europe/London" as Timezone);
|
|
236
|
+
|
|
7
237
|
const formatter: (value: Date) => string = XAxisUtil.getFormatter({
|
|
8
238
|
xAxisMin: new Date("2026-04-06T14:00:00.000Z"),
|
|
9
239
|
xAxisMax: new Date("2026-04-07T14:00:00.000Z"),
|
|
10
240
|
});
|
|
11
241
|
|
|
12
242
|
/*
|
|
13
|
-
* A 24h window
|
|
14
|
-
*
|
|
243
|
+
* A 24h window uses the fifteen-minute tier, and is exactly long
|
|
244
|
+
* enough to wrap the clock — so the label carries its day. 07:30 UTC
|
|
245
|
+
* is 08:30 BST on the 7th.
|
|
15
246
|
*/
|
|
247
|
+
expect(formatter(new Date("2026-04-07T07:30:00.000Z"))).toBe(
|
|
248
|
+
"07 Apr, 08:30",
|
|
249
|
+
);
|
|
250
|
+
});
|
|
251
|
+
|
|
252
|
+
test("a window too short to wrap still reads in local BST time", () => {
|
|
253
|
+
OneUptimeDate.setUserTimezone("Europe/London" as Timezone);
|
|
254
|
+
|
|
255
|
+
const formatter: (value: Date) => string = XAxisUtil.getFormatter({
|
|
256
|
+
xAxisMin: new Date("2026-04-07T02:00:00.000Z"),
|
|
257
|
+
xAxisMax: new Date("2026-04-07T14:00:00.000Z"),
|
|
258
|
+
});
|
|
259
|
+
|
|
16
260
|
expect(formatter(new Date("2026-04-07T07:30:00.000Z"))).toBe("08:30");
|
|
17
261
|
});
|
|
18
262
|
|
|
@@ -28,4 +272,25 @@ describe("XAxisUtil", () => {
|
|
|
28
272
|
|
|
29
273
|
expect(originalDate.toISOString()).toBe("2026-04-07T07:30:45.000Z");
|
|
30
274
|
});
|
|
275
|
+
|
|
276
|
+
test("the weekly tier reads its day and its month in the same zone", () => {
|
|
277
|
+
/*
|
|
278
|
+
* These used to be mixed inside one label — the day came from the
|
|
279
|
+
* browser's clock and the month from the configured one — so a tick
|
|
280
|
+
* near midnight could report a day from one date and a month from
|
|
281
|
+
* another.
|
|
282
|
+
*/
|
|
283
|
+
OneUptimeDate.setUserTimezone("Pacific/Auckland" as Timezone);
|
|
284
|
+
|
|
285
|
+
const formatter: (value: Date) => string = XAxisUtil.getFormatter({
|
|
286
|
+
xAxisMin: new Date("2026-01-01T00:00:00.000Z"),
|
|
287
|
+
xAxisMax: new Date("2026-03-01T00:00:00.000Z"),
|
|
288
|
+
});
|
|
289
|
+
|
|
290
|
+
/*
|
|
291
|
+
* 31 Jan 23:00 UTC is already 1 Feb in Auckland (UTC+13). Both halves
|
|
292
|
+
* of the label have to agree on that.
|
|
293
|
+
*/
|
|
294
|
+
expect(formatter(new Date("2026-01-31T23:00:00.000Z"))).toBe("01 Feb");
|
|
295
|
+
});
|
|
31
296
|
});
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
/** @timezone Europe/London */
|
|
2
|
+
|
|
3
|
+
import { describe, expect, test } from "@jest/globals";
|
|
4
|
+
import XAxisMaxMin from "../../../UI/Components/Charts/Types/XAxis/XAxisMaxMin";
|
|
5
|
+
import XAxisUtil from "../../../UI/Components/Charts/Utils/XAxis";
|
|
6
|
+
|
|
7
|
+
/*
|
|
8
|
+
* The daylight-saving half of the label-uniqueness property, in the OTHER
|
|
9
|
+
* of the two configurations it has to hold in.
|
|
10
|
+
*
|
|
11
|
+
* OneUptimeDate.getCurrentTimezone() is `userTimezone || moment.tz.guess()`,
|
|
12
|
+
* so a user who has never opened User Settings reads dates in the zone the
|
|
13
|
+
* browser reports — the configured and browser zones are the SAME. That is
|
|
14
|
+
* this file (the docblock sets both to London). XAxis.test.ts covers the
|
|
15
|
+
* other configuration, where a user has picked a zone the browser does not
|
|
16
|
+
* report.
|
|
17
|
+
*
|
|
18
|
+
* The two behave differently and both need holding: the interval walker
|
|
19
|
+
* steps in browser wall-clock time, so when the zones agree it walks
|
|
20
|
+
* straight over the repeated hour and never emits it twice, while when
|
|
21
|
+
* they differ the transition is invisible to it and the hour is emitted
|
|
22
|
+
* twice over.
|
|
23
|
+
*/
|
|
24
|
+
|
|
25
|
+
const WINDOW_START: Date = new Date("2026-10-25T00:00:00.000Z");
|
|
26
|
+
|
|
27
|
+
/*
|
|
28
|
+
* London's 2026 fall-back: 02:00 BST becomes 01:00 GMT, so 01:00-01:59
|
|
29
|
+
* is a wall-clock reading that names two different instants that day.
|
|
30
|
+
*/
|
|
31
|
+
const FOUR_HOURS_ACROSS_THE_FALL_BACK: {
|
|
32
|
+
xAxisMin: XAxisMaxMin;
|
|
33
|
+
xAxisMax: XAxisMaxMin;
|
|
34
|
+
} = {
|
|
35
|
+
xAxisMin: WINDOW_START,
|
|
36
|
+
xAxisMax: new Date(WINDOW_START.getTime() + 4 * 60 * 60 * 1000),
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
function labelsFor(bounds: {
|
|
40
|
+
xAxisMin: XAxisMaxMin;
|
|
41
|
+
xAxisMax: XAxisMaxMin;
|
|
42
|
+
}): Array<string> {
|
|
43
|
+
const formatter: (value: Date) => string = XAxisUtil.getFormatter(bounds);
|
|
44
|
+
return XAxisUtil.getPrecisionIntervals(bounds).map((interval: Date) => {
|
|
45
|
+
return formatter(interval);
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/** The zone London is really in at `date`, straight from the platform. */
|
|
50
|
+
function actualZoneAbbr(date: Date): string {
|
|
51
|
+
return (
|
|
52
|
+
new Intl.DateTimeFormat("en-GB", {
|
|
53
|
+
timeZone: "Europe/London",
|
|
54
|
+
timeZoneName: "short",
|
|
55
|
+
})
|
|
56
|
+
.formatToParts(date)
|
|
57
|
+
.find((part: Intl.DateTimeFormatPart): boolean => {
|
|
58
|
+
return part.type === "timeZoneName";
|
|
59
|
+
})?.value || ""
|
|
60
|
+
);
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
describe("a fall-back window when the browser and configured zones agree", () => {
|
|
64
|
+
test("no two ticks share a label", () => {
|
|
65
|
+
const labels: Array<string> = labelsFor(FOUR_HOURS_ACROSS_THE_FALL_BACK);
|
|
66
|
+
|
|
67
|
+
expect(new Set(labels).size).toBe(labels.length);
|
|
68
|
+
});
|
|
69
|
+
|
|
70
|
+
test("every tick names the zone it is really in", () => {
|
|
71
|
+
/*
|
|
72
|
+
* The labels carry a zone abbreviation here, and an abbreviation that
|
|
73
|
+
* lied would be worse than none — a reader would take an instant for
|
|
74
|
+
* one an hour away. Checked against the platform's own answer rather
|
|
75
|
+
* than against our formatter.
|
|
76
|
+
*/
|
|
77
|
+
const intervals: Array<Date> = XAxisUtil.getPrecisionIntervals(
|
|
78
|
+
FOUR_HOURS_ACROSS_THE_FALL_BACK,
|
|
79
|
+
);
|
|
80
|
+
const labels: Array<string> = labelsFor(FOUR_HOURS_ACROSS_THE_FALL_BACK);
|
|
81
|
+
|
|
82
|
+
for (let index: number = 0; index < intervals.length; index++) {
|
|
83
|
+
expect(labels[index]).toContain(actualZoneAbbr(intervals[index]!));
|
|
84
|
+
}
|
|
85
|
+
});
|
|
86
|
+
|
|
87
|
+
test("the transition reads straight through, BST into GMT", () => {
|
|
88
|
+
const labels: Array<string> = labelsFor(FOUR_HOURS_ACROSS_THE_FALL_BACK);
|
|
89
|
+
|
|
90
|
+
/*
|
|
91
|
+
* Stepping wall-clock minutes in the browser's own zone walks over the
|
|
92
|
+
* repeated hour rather than through it, so the axis never holds both
|
|
93
|
+
* 01:30s. It still says which side of the change each tick is on.
|
|
94
|
+
*/
|
|
95
|
+
expect(labels).toContain("25 Oct, 01:55 BST");
|
|
96
|
+
expect(labels).toContain("25 Oct, 02:00 GMT");
|
|
97
|
+
expect(labels).not.toContain("25 Oct, 01:00 GMT");
|
|
98
|
+
});
|
|
99
|
+
|
|
100
|
+
test("an ordinary window in the same zone keeps its bare labels", () => {
|
|
101
|
+
// No transition, well under a day: nothing to disambiguate, nothing spent.
|
|
102
|
+
const summer: Date = new Date("2026-06-01T00:00:00.000Z");
|
|
103
|
+
const labels: Array<string> = labelsFor({
|
|
104
|
+
xAxisMin: summer,
|
|
105
|
+
xAxisMax: new Date(summer.getTime() + 6 * 60 * 60 * 1000),
|
|
106
|
+
});
|
|
107
|
+
|
|
108
|
+
expect(new Set(labels).size).toBe(labels.length);
|
|
109
|
+
for (const label of labels) {
|
|
110
|
+
expect(label).toMatch(/^\d{2}:\d{2}$/);
|
|
111
|
+
}
|
|
112
|
+
});
|
|
113
|
+
});
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
import { describe, expect, test } from "@jest/globals";
|
|
2
|
+
import {
|
|
3
|
+
StyleRule,
|
|
4
|
+
declaredValue,
|
|
5
|
+
rulesFor,
|
|
6
|
+
selectorsDeclaring,
|
|
7
|
+
} from "./ThemeStylesheet";
|
|
8
|
+
|
|
9
|
+
/*
|
|
10
|
+
* https://github.com/OneUptime/oneuptime/issues/3528: a black box around the
|
|
11
|
+
* graphs.
|
|
12
|
+
*
|
|
13
|
+
* recharts leaves its accessibility layer on, so the root <svg> of every
|
|
14
|
+
* chart carries tabindex="0", and the annotation layer gives the same to the
|
|
15
|
+
* <g> elements it draws for event chips and highlighted windows. Chrome's SVG
|
|
16
|
+
* user-agent stylesheet rings a focused <svg> on plain :focus rather than on
|
|
17
|
+
* :focus-visible the way it treats focusable HTML, so a mouse press inside a
|
|
18
|
+
* chart -- dragging out a zoom range on the Logs and Traces volume charts,
|
|
19
|
+
* clicking an event marker -- paints a hard black rectangle over the data.
|
|
20
|
+
*
|
|
21
|
+
* The fix is four lines of CSS, which is exactly why it needs cover: nothing
|
|
22
|
+
* else in the build would notice a reformat that dropped the descendant
|
|
23
|
+
* selector, or a reorder that let the user-agent ring back in. The rules
|
|
24
|
+
* carry no !important and no extra specificity, so their contract is a
|
|
25
|
+
* cascade contract, and that is what is asserted here rather than the literal
|
|
26
|
+
* text of the file.
|
|
27
|
+
*
|
|
28
|
+
* ChartFocusRingCoverage.test.tsx holds the other half: that the selectors
|
|
29
|
+
* written here still reach the elements recharts actually renders.
|
|
30
|
+
*/
|
|
31
|
+
|
|
32
|
+
// The chart surface and the focusable shapes drawn inside it.
|
|
33
|
+
const POINTER_FOCUS_SELECTORS: Array<string> = [
|
|
34
|
+
".recharts-surface:focus",
|
|
35
|
+
".recharts-surface [tabindex]:focus",
|
|
36
|
+
];
|
|
37
|
+
|
|
38
|
+
const KEYBOARD_FOCUS_SELECTORS: Array<string> = [
|
|
39
|
+
".recharts-surface:focus-visible",
|
|
40
|
+
".recharts-surface [tabindex]:focus-visible",
|
|
41
|
+
];
|
|
42
|
+
|
|
43
|
+
describe("Chart focus rings", () => {
|
|
44
|
+
test.each(POINTER_FOCUS_SELECTORS)(
|
|
45
|
+
"%s drops the user-agent focus ring",
|
|
46
|
+
(selector: string) => {
|
|
47
|
+
expect(declaredValue(selector, "outline")).toBe("none");
|
|
48
|
+
},
|
|
49
|
+
);
|
|
50
|
+
|
|
51
|
+
test.each(KEYBOARD_FOCUS_SELECTORS)(
|
|
52
|
+
"%s draws a ring a keyboard reader can see",
|
|
53
|
+
(selector: string) => {
|
|
54
|
+
const outline: string | undefined = declaredValue(selector, "outline");
|
|
55
|
+
|
|
56
|
+
expect(outline).toBeDefined();
|
|
57
|
+
expect(outline).not.toBe("none");
|
|
58
|
+
// Themed, so the ring is legible on the dark canvas as well as the light one.
|
|
59
|
+
expect(outline).toContain("var(--ou-chart-focus-ring)");
|
|
60
|
+
},
|
|
61
|
+
);
|
|
62
|
+
|
|
63
|
+
/*
|
|
64
|
+
* A ring flush against the plot edge reads as a border on the chart itself.
|
|
65
|
+
* The offset is what makes it read as focus.
|
|
66
|
+
*/
|
|
67
|
+
test.each(KEYBOARD_FOCUS_SELECTORS)(
|
|
68
|
+
"%s holds the ring off the plot",
|
|
69
|
+
(selector: string) => {
|
|
70
|
+
expect(declaredValue(selector, "outline-offset")).toBe("2px");
|
|
71
|
+
},
|
|
72
|
+
);
|
|
73
|
+
|
|
74
|
+
/*
|
|
75
|
+
* :focus and :focus-visible weigh the same, so the keyboard ring only
|
|
76
|
+
* survives while it is declared later in the file. Reordering the two blocks
|
|
77
|
+
* would leave keyboard users with no focus indicator at all, and no other
|
|
78
|
+
* assertion here would fail.
|
|
79
|
+
*/
|
|
80
|
+
test("the keyboard ring is declared after the ring it restores", () => {
|
|
81
|
+
const sourceOrder: (selectors: Array<string>) => Array<number> = (
|
|
82
|
+
selectors: Array<string>,
|
|
83
|
+
): Array<number> => {
|
|
84
|
+
return selectors.flatMap((selector: string): Array<number> => {
|
|
85
|
+
return rulesFor(selector).map((rule: StyleRule): number => {
|
|
86
|
+
return rule.index;
|
|
87
|
+
});
|
|
88
|
+
});
|
|
89
|
+
};
|
|
90
|
+
|
|
91
|
+
const pointerRuleIndexes: Array<number> = sourceOrder(
|
|
92
|
+
POINTER_FOCUS_SELECTORS,
|
|
93
|
+
);
|
|
94
|
+
const keyboardRuleIndexes: Array<number> = sourceOrder(
|
|
95
|
+
KEYBOARD_FOCUS_SELECTORS,
|
|
96
|
+
);
|
|
97
|
+
|
|
98
|
+
// Ordering says nothing if one side of it went missing.
|
|
99
|
+
expect(pointerRuleIndexes.length).toBe(POINTER_FOCUS_SELECTORS.length);
|
|
100
|
+
expect(keyboardRuleIndexes.length).toBe(KEYBOARD_FOCUS_SELECTORS.length);
|
|
101
|
+
|
|
102
|
+
expect(Math.min(...keyboardRuleIndexes)).toBeGreaterThan(
|
|
103
|
+
Math.max(...pointerRuleIndexes),
|
|
104
|
+
);
|
|
105
|
+
});
|
|
106
|
+
|
|
107
|
+
/*
|
|
108
|
+
* Neither rule is fought over by anything else in the sheet, so neither
|
|
109
|
+
* needs !important to win. If one ever appears here it means something else
|
|
110
|
+
* started competing for the same property, and the pair above stopped being
|
|
111
|
+
* the whole story.
|
|
112
|
+
*/
|
|
113
|
+
test.each([...POINTER_FOCUS_SELECTORS, ...KEYBOARD_FOCUS_SELECTORS])(
|
|
114
|
+
"%s wins on the cascade alone",
|
|
115
|
+
(selector: string) => {
|
|
116
|
+
expect(declaredValue(selector, "outline")).not.toContain("!important");
|
|
117
|
+
},
|
|
118
|
+
);
|
|
119
|
+
|
|
120
|
+
describe("the accent the ring is drawn in", () => {
|
|
121
|
+
test.each([":root", "html.dark"])("%s defines it", (selector: string) => {
|
|
122
|
+
expect(declaredValue(selector, "--ou-chart-focus-ring")).toMatch(
|
|
123
|
+
/^#[0-9a-f]{6}$/i,
|
|
124
|
+
);
|
|
125
|
+
});
|
|
126
|
+
|
|
127
|
+
/*
|
|
128
|
+
* A single value cannot clear both canvases. Light and dark carry their
|
|
129
|
+
* own, the way every other --ou-chart-* token in the sheet does.
|
|
130
|
+
*/
|
|
131
|
+
test("light and dark do not share one value", () => {
|
|
132
|
+
expect(declaredValue(":root", "--ou-chart-focus-ring")).not.toBe(
|
|
133
|
+
declaredValue("html.dark", "--ou-chart-focus-ring"),
|
|
134
|
+
);
|
|
135
|
+
});
|
|
136
|
+
});
|
|
137
|
+
|
|
138
|
+
/*
|
|
139
|
+
* The fix is deliberately narrow: it silences the ring on charts, and
|
|
140
|
+
* nothing else. A blanket `:focus { outline: none }` would take the focus
|
|
141
|
+
* indicator off the whole dashboard, which is the usual way this class of
|
|
142
|
+
* bug gets "fixed" and is far worse than the black box.
|
|
143
|
+
*/
|
|
144
|
+
test("nothing outside the charts had its focus ring silenced", () => {
|
|
145
|
+
const silenced: Array<string> = selectorsDeclaring("outline", "none");
|
|
146
|
+
|
|
147
|
+
expect(silenced.length).toBeGreaterThan(0);
|
|
148
|
+
|
|
149
|
+
for (const selector of silenced) {
|
|
150
|
+
expect(selector.startsWith(".recharts-surface")).toBe(true);
|
|
151
|
+
}
|
|
152
|
+
});
|
|
153
|
+
});
|