@oneuptime/common 12.0.30 → 12.0.32
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/AlertState.ts +0 -2
- package/Models/DatabaseModels/DetectionRule.ts +16 -5
- package/Models/DatabaseModels/Domain.ts +1 -1
- package/Models/DatabaseModels/GoogleSecOpsConnection.ts +14 -5
- package/Models/DatabaseModels/Incident.ts +1 -1
- package/Models/DatabaseModels/IncidentSeverity.ts +44 -0
- package/Models/DatabaseModels/IncidentTemplate.ts +1 -1
- package/Models/DatabaseModels/Index.ts +4 -0
- package/Models/DatabaseModels/MetricType.ts +0 -2
- package/Models/DatabaseModels/MonitorStatusTimeline.ts +0 -2
- package/Models/DatabaseModels/MonitorTest.ts +0 -2
- package/Models/DatabaseModels/NetworkDevice.ts +234 -5
- package/Models/DatabaseModels/NetworkDeviceAutoImportRule.ts +88 -0
- package/Models/DatabaseModels/NetworkDeviceDiscoveryScan.ts +22 -0
- package/Models/DatabaseModels/NetworkDeviceOidTemplate.ts +501 -0
- package/Models/DatabaseModels/NetworkDeviceRole.ts +648 -0
- package/Models/DatabaseModels/ScheduledMaintenance.ts +1 -1
- package/Models/DatabaseModels/ScheduledMaintenanceTemplate.ts +1 -1
- package/Models/DatabaseModels/StatusPageAnnouncement.ts +0 -2
- package/Models/DatabaseModels/StatusPageAnnouncementTemplate.ts +0 -2
- package/Models/DatabaseModels/StatusPagePrivateUser.ts +0 -2
- package/Models/DatabaseModels/StatusPageResource.ts +0 -2
- package/Models/DatabaseModels/StatusPageSubscriber.ts +0 -2
- package/Models/DatabaseModels/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/1790800000000-AddNetworkDeviceRoleTable.ts +72 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +6 -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/DatabaseService.ts +39 -9
- 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 +4 -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/NetworkDeviceRoleService.ts +90 -0
- 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/ProjectService.ts +85 -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/TelemetrySourceMapService.ts +266 -23
- package/Server/Services/UserNotificationSettingService.ts +0 -6
- 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/AddNeighborToMonitoringModal.test.tsx +31 -1
- package/Tests/App/Dashboard/DashboardChartWidgetZoom.test.tsx +35 -8
- package/Tests/App/Dashboard/DashboardCommandPalette.test.tsx +107 -3
- package/Tests/App/Dashboard/DashboardWideChartZoom.test.tsx +401 -0
- package/Tests/App/Dashboard/EventOverlayHook.test.tsx +125 -0
- package/Tests/App/Dashboard/HeaderImageAssets.test.tsx +93 -0
- package/Tests/App/Dashboard/MonitorTemplateColumnAndFacet.test.tsx +318 -0
- package/Tests/App/Dashboard/NetworkDeviceBulkDelete.test.tsx +357 -0
- package/Tests/App/Dashboard/NetworkSideMenu.test.tsx +590 -0
- package/Tests/App/Dashboard/OnCallReadinessSurfaces.test.tsx +3 -3
- package/Tests/App/Dashboard/SideMenuHarness.tsx +11 -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 +543 -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/Infrastructure/Postgres/NetworkDeviceRoleTableMigration.test.ts +476 -0
- package/Tests/Server/Middleware/IdentityRateLimit.test.ts +1144 -0
- package/Tests/Server/Middleware/MultipartFormData.test.ts +618 -3
- package/Tests/Server/Services/DatabaseServiceGenerateSlug.test.ts +215 -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/NetworkDeviceRoleModel.test.ts +672 -0
- package/Tests/Server/Services/NetworkDeviceRuleEngines.test.ts +1 -1
- package/Tests/Server/Services/ProjectServiceCreateSubscriptionStarted.test.ts +67 -4
- package/Tests/Server/Services/RuleEngineRuleFetchLimit.test.ts +239 -0
- package/Tests/Server/Services/ScheduledMaintenanceSubscriberEndTime.test.ts +369 -0
- package/Tests/Server/Services/TelemetrySourceMapService.test.ts +1210 -2
- package/Tests/Server/Services/UserNotificationSettingMonitorDefaults.test.ts +248 -0
- package/Tests/Server/Services/UserNotificationSettingWorkspaceChannels.test.ts +43 -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/BasicCron.test.ts +283 -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/IncomingCallPhoneNumber.test.ts +174 -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/NetworkDevice/DefaultNetworkDeviceRole.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/ChartClickDoubleClickDisambiguation.test.tsx +221 -0
- package/Tests/UI/Components/Charts/ChartDoubleClickReset.test.tsx +220 -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/BaseModelTableBulkDelete.test.tsx +751 -0
- package/Tests/UI/Components/ModelTable/BaseModelTableColumnCustomization.test.tsx +475 -43
- package/Tests/UI/Components/ModelTable/BaseModelTableDeleteAndEmptyStates.test.tsx +341 -0
- package/Tests/UI/Components/ModelTable/ColumnPreference.test.ts +89 -0
- package/Tests/UI/Components/NavBarCommandKGating.test.tsx +103 -8
- package/Tests/UI/Components/OrderedStatesList.test.tsx +5 -5
- package/Tests/UI/Components/PendingProjectInvitations.test.tsx +1 -1
- package/Tests/UI/Components/SideMenuItem.test.tsx +30 -0
- 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/TableColumnsToCsv.test.ts +30 -0
- package/Tests/UI/Utils/UseDashboardTimeRangeZoom.test.tsx +187 -0
- package/Tests/Utils/Dashboard/DashboardResourceListSharedArgs.test.ts +302 -0
- package/Tests/Utils/Dashboard/DashboardTimeRangeZoom.test.ts +242 -0
- package/Tests/Utils/EnterpriseLicenseSeats.test.ts +507 -0
- package/Tests/Utils/Monitor/NetworkDeviceRoleCatalog.test.ts +981 -0
- package/Tests/Utils/Monitor/NetworkTopologyRoleCatalog.test.ts +865 -0
- package/Tests/Utils/NetworkDevice/DeviceRoleKeyUtil.test.ts +538 -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/Tests/Utils/Slo/SloEvaluation.test.ts +171 -0
- package/Tests/Utils/Slug.test.ts +61 -1
- package/Tests/jest.setup.ts +19 -0
- package/Types/Date.ts +39 -0
- package/Types/Monitor/SnmpMonitor/NetworkTopology.ts +61 -0
- package/Types/Monitor/SnmpMonitor/SnmpOidListUtil.ts +333 -0
- package/Types/NetworkDevice/DefaultNetworkDeviceRole.ts +145 -0
- package/Types/Permission.ts +141 -0
- package/Types/Rum/SessionReplay.ts +21 -0
- package/Types/Telemetry/SourceMap.ts +8 -0
- package/UI/Components/Charts/Area/AreaChart.tsx +7 -0
- package/UI/Components/Charts/Bar/BarChart.tsx +6 -0
- package/UI/Components/Charts/ChartGroup/ChartGroup.tsx +9 -1
- package/UI/Components/Charts/ChartLibrary/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 +554 -545
- package/UI/Components/Charts/ChartLibrary/BarChart/BarChart.tsx +337 -371
- package/UI/Components/Charts/ChartLibrary/LineChart/LineChart.tsx +549 -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/ChartLibrary/Utils/DoubleClick.ts +13 -0
- package/UI/Components/Charts/Line/LineChart.tsx +7 -0
- 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 +200 -39
- package/UI/Components/Navbar/NavBar.tsx +62 -13
- package/UI/Components/Navbar/NavBarMenuModal.tsx +7 -2
- package/UI/Components/SideMenu/CountModelSideMenuItem.tsx +2 -0
- package/UI/Components/SideMenu/SideMenu.tsx +12 -2
- package/UI/Components/SideMenu/SideMenuItem.tsx +4 -1
- package/UI/Components/SideMenu/SideMenuSection.tsx +14 -2
- package/UI/Components/Table/TableHeader.tsx +64 -48
- package/UI/Components/Table/TableRow.tsx +13 -3
- package/UI/Styles/Theme.css +38 -0
- package/UI/Utils/UseDashboardTimeRangeZoom.ts +77 -0
- package/Utils/Dashboard/DashboardTimeRangeZoom.ts +118 -0
- package/Utils/EnterpriseLicense/EnterpriseLicenseSeats.ts +271 -0
- package/Utils/Monitor/NetworkDeviceRoleCatalog.ts +232 -0
- package/Utils/Monitor/NetworkDeviceRoleUtil.ts +2 -1
- package/Utils/Monitor/NetworkTopologyUtil.ts +116 -33
- package/Utils/NetworkDevice/DeviceRoleKeyUtil.ts +137 -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/Utils/Rules/RulePatternMatchUtil.ts +1 -1
- package/Utils/Slug.ts +34 -1
- 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/AlertState.js +0 -2
- package/build/dist/Models/DatabaseModels/AlertState.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/Domain.js +1 -1
- package/build/dist/Models/DatabaseModels/Domain.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/Incident.js +1 -1
- package/build/dist/Models/DatabaseModels/Incident.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/IncidentTemplate.js +1 -1
- package/build/dist/Models/DatabaseModels/IncidentTemplate.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Index.js +4 -0
- package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
- package/build/dist/Models/DatabaseModels/MetricType.js +0 -2
- package/build/dist/Models/DatabaseModels/MetricType.js.map +1 -1
- package/build/dist/Models/DatabaseModels/MonitorStatusTimeline.js +0 -2
- package/build/dist/Models/DatabaseModels/MonitorStatusTimeline.js.map +1 -1
- package/build/dist/Models/DatabaseModels/MonitorTest.js +0 -2
- package/build/dist/Models/DatabaseModels/MonitorTest.js.map +1 -1
- package/build/dist/Models/DatabaseModels/NetworkDevice.js +239 -6
- 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 +521 -0
- package/build/dist/Models/DatabaseModels/NetworkDeviceOidTemplate.js.map +1 -0
- package/build/dist/Models/DatabaseModels/NetworkDeviceRole.js +677 -0
- package/build/dist/Models/DatabaseModels/NetworkDeviceRole.js.map +1 -0
- package/build/dist/Models/DatabaseModels/ScheduledMaintenance.js +1 -1
- package/build/dist/Models/DatabaseModels/ScheduledMaintenance.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ScheduledMaintenanceTemplate.js +1 -1
- package/build/dist/Models/DatabaseModels/ScheduledMaintenanceTemplate.js.map +1 -1
- package/build/dist/Models/DatabaseModels/StatusPageAnnouncement.js +0 -2
- package/build/dist/Models/DatabaseModels/StatusPageAnnouncement.js.map +1 -1
- package/build/dist/Models/DatabaseModels/StatusPageAnnouncementTemplate.js +0 -2
- package/build/dist/Models/DatabaseModels/StatusPageAnnouncementTemplate.js.map +1 -1
- package/build/dist/Models/DatabaseModels/StatusPagePrivateUser.js +0 -2
- package/build/dist/Models/DatabaseModels/StatusPagePrivateUser.js.map +1 -1
- package/build/dist/Models/DatabaseModels/StatusPageResource.js +0 -2
- package/build/dist/Models/DatabaseModels/StatusPageResource.js.map +1 -1
- package/build/dist/Models/DatabaseModels/StatusPageSubscriber.js +0 -2
- package/build/dist/Models/DatabaseModels/StatusPageSubscriber.js.map +1 -1
- package/build/dist/Models/DatabaseModels/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/1790800000000-AddNetworkDeviceRoleTable.js +39 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790800000000-AddNetworkDeviceRoleTable.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/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/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/DatabaseService.js +31 -5
- package/build/dist/Server/Services/DatabaseService.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 +4 -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/NetworkDeviceRoleService.js +70 -0
- package/build/dist/Server/Services/NetworkDeviceRoleService.js.map +1 -0
- 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/ProjectService.js +65 -0
- package/build/dist/Server/Services/ProjectService.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/UserNotificationSettingService.js +0 -1
- package/build/dist/Server/Services/UserNotificationSettingService.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/NetworkDevice/DefaultNetworkDeviceRole.js +105 -0
- package/build/dist/Types/NetworkDevice/DefaultNetworkDeviceRole.js.map +1 -0
- package/build/dist/Types/Permission.js +126 -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/Area/AreaChart.js +1 -1
- package/build/dist/UI/Components/Charts/Area/AreaChart.js.map +1 -1
- package/build/dist/UI/Components/Charts/Bar/BarChart.js +1 -1
- package/build/dist/UI/Components/Charts/Bar/BarChart.js.map +1 -1
- package/build/dist/UI/Components/Charts/ChartGroup/ChartGroup.js +6 -1
- package/build/dist/UI/Components/Charts/ChartGroup/ChartGroup.js.map +1 -1
- package/build/dist/UI/Components/Charts/ChartLibrary/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 +262 -234
- package/build/dist/UI/Components/Charts/ChartLibrary/AreaChart/AreaChart.js.map +1 -1
- package/build/dist/UI/Components/Charts/ChartLibrary/BarChart/BarChart.js +146 -153
- package/build/dist/UI/Components/Charts/ChartLibrary/BarChart/BarChart.js.map +1 -1
- package/build/dist/UI/Components/Charts/ChartLibrary/LineChart/LineChart.js +261 -233
- package/build/dist/UI/Components/Charts/ChartLibrary/LineChart/LineChart.js.map +1 -1
- package/build/dist/UI/Components/Charts/ChartLibrary/Utils/DoubleClick.js +14 -0
- package/build/dist/UI/Components/Charts/ChartLibrary/Utils/DoubleClick.js.map +1 -0
- package/build/dist/UI/Components/Charts/Line/LineChart.js +1 -1
- package/build/dist/UI/Components/Charts/Line/LineChart.js.map +1 -1
- package/build/dist/UI/Components/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 +143 -36
- package/build/dist/UI/Components/ModelTable/BaseModelTable.js.map +1 -1
- package/build/dist/UI/Components/Navbar/NavBar.js +44 -9
- package/build/dist/UI/Components/Navbar/NavBar.js.map +1 -1
- package/build/dist/UI/Components/Navbar/NavBarMenuModal.js +2 -2
- package/build/dist/UI/Components/Navbar/NavBarMenuModal.js.map +1 -1
- package/build/dist/UI/Components/SideMenu/CountModelSideMenuItem.js +1 -1
- package/build/dist/UI/Components/SideMenu/CountModelSideMenuItem.js.map +1 -1
- package/build/dist/UI/Components/SideMenu/SideMenu.js +9 -6
- package/build/dist/UI/Components/SideMenu/SideMenu.js.map +1 -1
- package/build/dist/UI/Components/SideMenu/SideMenuItem.js +1 -1
- package/build/dist/UI/Components/SideMenu/SideMenuItem.js.map +1 -1
- package/build/dist/UI/Components/SideMenu/SideMenuSection.js +7 -2
- package/build/dist/UI/Components/SideMenu/SideMenuSection.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/UI/Utils/UseDashboardTimeRangeZoom.js +42 -0
- package/build/dist/UI/Utils/UseDashboardTimeRangeZoom.js.map +1 -0
- package/build/dist/Utils/Dashboard/DashboardTimeRangeZoom.js +74 -0
- package/build/dist/Utils/Dashboard/DashboardTimeRangeZoom.js.map +1 -0
- package/build/dist/Utils/EnterpriseLicense/EnterpriseLicenseSeats.js +153 -0
- package/build/dist/Utils/EnterpriseLicense/EnterpriseLicenseSeats.js.map +1 -0
- package/build/dist/Utils/Monitor/NetworkDeviceRoleCatalog.js +126 -0
- package/build/dist/Utils/Monitor/NetworkDeviceRoleCatalog.js.map +1 -0
- package/build/dist/Utils/Monitor/NetworkDeviceRoleUtil.js +2 -1
- package/build/dist/Utils/Monitor/NetworkDeviceRoleUtil.js.map +1 -1
- package/build/dist/Utils/Monitor/NetworkTopologyUtil.js +67 -32
- package/build/dist/Utils/Monitor/NetworkTopologyUtil.js.map +1 -1
- package/build/dist/Utils/NetworkDevice/DeviceRoleKeyUtil.js +114 -0
- package/build/dist/Utils/NetworkDevice/DeviceRoleKeyUtil.js.map +1 -0
- package/build/dist/Utils/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/build/dist/Utils/Rules/RulePatternMatchUtil.js +1 -1
- package/build/dist/Utils/Slug.js +31 -1
- package/build/dist/Utils/Slug.js.map +1 -1
- package/jest.config.json +1 -0
- package/package.json +2 -2
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
import "@testing-library/jest-dom";
|
|
2
|
+
import { afterEach, describe, expect, jest, test } from "@jest/globals";
|
|
3
|
+
import { cleanup, fireEvent, render, screen } from "@testing-library/react";
|
|
4
|
+
import * as React from "react";
|
|
5
|
+
import Table from "../../../UI/Components/Table/Table";
|
|
6
|
+
import Columns from "../../../UI/Components/Table/Types/Columns";
|
|
7
|
+
import FieldType from "../../../UI/Components/Types/FieldType";
|
|
8
|
+
import SortOrder from "../../../Types/BaseDatabase/SortOrder";
|
|
9
|
+
|
|
10
|
+
/*
|
|
11
|
+
* Two things a table owes anyone not driving it with a mouse on a wide screen.
|
|
12
|
+
*
|
|
13
|
+
* Sorting was mouse-only: the handler sat on the <th>, which is not focusable
|
|
14
|
+
* and does not answer Enter or Space, even though aria-sort was already
|
|
15
|
+
* telling assistive technology the column WAS sortable. It sits on a button
|
|
16
|
+
* inside the header cell now.
|
|
17
|
+
*
|
|
18
|
+
* And `hideOnMobile` - about 200 column declarations across the product say
|
|
19
|
+
* it - was honoured by the header, the skeleton rows, and the desktop row, but
|
|
20
|
+
* not by the mobile card, which is the one layout it exists for.
|
|
21
|
+
*/
|
|
22
|
+
|
|
23
|
+
jest.mock("react-i18next", () => {
|
|
24
|
+
return {
|
|
25
|
+
useTranslation: () => {
|
|
26
|
+
return {
|
|
27
|
+
t: (key: string, opts?: { defaultValue?: string }): string => {
|
|
28
|
+
return opts?.defaultValue ?? key;
|
|
29
|
+
},
|
|
30
|
+
};
|
|
31
|
+
},
|
|
32
|
+
};
|
|
33
|
+
});
|
|
34
|
+
|
|
35
|
+
interface Row {
|
|
36
|
+
_id?: string | undefined;
|
|
37
|
+
name?: string | undefined;
|
|
38
|
+
status?: string | undefined;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
const columns: Columns<Row> = [
|
|
42
|
+
{ title: "Name", type: FieldType.Text, key: "name" },
|
|
43
|
+
{ title: "Status", type: FieldType.Text, key: "status", hideOnMobile: true },
|
|
44
|
+
// No key, so this one is not sortable and must stay a plain cell.
|
|
45
|
+
{ title: "Notes", type: FieldType.Text },
|
|
46
|
+
];
|
|
47
|
+
|
|
48
|
+
const data: Array<Row> = [
|
|
49
|
+
{ _id: "1", name: "Alpha", status: "Up" },
|
|
50
|
+
{ _id: "2", name: "Beta", status: "Down" },
|
|
51
|
+
];
|
|
52
|
+
|
|
53
|
+
interface RenderTableOptions {
|
|
54
|
+
sortBy?: keyof Row | null | undefined;
|
|
55
|
+
sortOrder?: SortOrder | undefined;
|
|
56
|
+
onSortChanged?:
|
|
57
|
+
| ((sortBy: keyof Row | null, sortOrder: SortOrder) => void)
|
|
58
|
+
| undefined;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
type RenderTableFunction = (options?: RenderTableOptions | undefined) => void;
|
|
62
|
+
|
|
63
|
+
const renderTable: RenderTableFunction = (
|
|
64
|
+
options?: RenderTableOptions | undefined,
|
|
65
|
+
): void => {
|
|
66
|
+
render(
|
|
67
|
+
<Table<Row>
|
|
68
|
+
id="test-table"
|
|
69
|
+
data={data}
|
|
70
|
+
columns={columns}
|
|
71
|
+
currentPageNumber={1}
|
|
72
|
+
totalItemsCount={data.length}
|
|
73
|
+
itemsOnPage={10}
|
|
74
|
+
error=""
|
|
75
|
+
isLoading={false}
|
|
76
|
+
singularLabel="Monitor"
|
|
77
|
+
pluralLabel="Monitors"
|
|
78
|
+
sortOrder={options?.sortOrder ?? SortOrder.Ascending}
|
|
79
|
+
sortBy={options?.sortBy ?? null}
|
|
80
|
+
onSortChanged={options?.onSortChanged ?? (() => {})}
|
|
81
|
+
onNavigateToPage={() => {}}
|
|
82
|
+
/>,
|
|
83
|
+
);
|
|
84
|
+
};
|
|
85
|
+
|
|
86
|
+
/*
|
|
87
|
+
* The table decides mobile vs desktop from window.innerWidth at mount
|
|
88
|
+
* (< 768 = mobile). jsdom defaults to 1024, so desktop is the baseline and
|
|
89
|
+
* mobile tests must set the width BEFORE rendering.
|
|
90
|
+
*/
|
|
91
|
+
const setViewportWidth: (width: number) => void = (width: number): void => {
|
|
92
|
+
Object.defineProperty(window, "innerWidth", {
|
|
93
|
+
configurable: true,
|
|
94
|
+
writable: true,
|
|
95
|
+
value: width,
|
|
96
|
+
});
|
|
97
|
+
};
|
|
98
|
+
|
|
99
|
+
afterEach(() => {
|
|
100
|
+
cleanup();
|
|
101
|
+
setViewportWidth(1024);
|
|
102
|
+
});
|
|
103
|
+
|
|
104
|
+
describe("sortable column headers", () => {
|
|
105
|
+
test("a sortable header is a real button, so it is focusable", () => {
|
|
106
|
+
renderTable();
|
|
107
|
+
|
|
108
|
+
const sortButton: HTMLElement = screen.getByRole("button", {
|
|
109
|
+
name: "Name",
|
|
110
|
+
});
|
|
111
|
+
|
|
112
|
+
expect(sortButton.tagName).toBe("BUTTON");
|
|
113
|
+
expect(sortButton).toHaveAttribute("type", "button");
|
|
114
|
+
|
|
115
|
+
sortButton.focus();
|
|
116
|
+
expect(sortButton).toHaveFocus();
|
|
117
|
+
});
|
|
118
|
+
|
|
119
|
+
test("activating the header button sorts the column", () => {
|
|
120
|
+
const sortCalls: Array<[keyof Row | null, SortOrder]> = [];
|
|
121
|
+
|
|
122
|
+
renderTable({
|
|
123
|
+
onSortChanged: (sortBy: keyof Row | null, sortOrder: SortOrder) => {
|
|
124
|
+
sortCalls.push([sortBy, sortOrder]);
|
|
125
|
+
},
|
|
126
|
+
});
|
|
127
|
+
|
|
128
|
+
fireEvent.click(screen.getByRole("button", { name: "Name" }));
|
|
129
|
+
|
|
130
|
+
expect(sortCalls).toEqual([["name", SortOrder.Descending]]);
|
|
131
|
+
});
|
|
132
|
+
|
|
133
|
+
test("the sort direction still round-trips", () => {
|
|
134
|
+
const sortCalls: Array<[keyof Row | null, SortOrder]> = [];
|
|
135
|
+
|
|
136
|
+
renderTable({
|
|
137
|
+
sortBy: "name",
|
|
138
|
+
sortOrder: SortOrder.Descending,
|
|
139
|
+
onSortChanged: (sortBy: keyof Row | null, sortOrder: SortOrder) => {
|
|
140
|
+
sortCalls.push([sortBy, sortOrder]);
|
|
141
|
+
},
|
|
142
|
+
});
|
|
143
|
+
|
|
144
|
+
fireEvent.click(screen.getByRole("button", { name: /Name/ }));
|
|
145
|
+
|
|
146
|
+
expect(sortCalls).toEqual([["name", SortOrder.Ascending]]);
|
|
147
|
+
});
|
|
148
|
+
|
|
149
|
+
test("a column that cannot be sorted gets no button", () => {
|
|
150
|
+
renderTable();
|
|
151
|
+
|
|
152
|
+
expect(
|
|
153
|
+
screen.queryByRole("button", { name: "Notes" }),
|
|
154
|
+
).not.toBeInTheDocument();
|
|
155
|
+
expect(screen.getByText("Notes")).toBeInTheDocument();
|
|
156
|
+
});
|
|
157
|
+
|
|
158
|
+
test("the header still announces sort state to assistive technology", () => {
|
|
159
|
+
renderTable({ sortBy: "name", sortOrder: SortOrder.Ascending });
|
|
160
|
+
|
|
161
|
+
const headers: Array<HTMLElement> = screen.getAllByRole("columnheader");
|
|
162
|
+
const nameHeader: HTMLElement | undefined = headers.find(
|
|
163
|
+
(header: HTMLElement) => {
|
|
164
|
+
return header.textContent?.includes("Name");
|
|
165
|
+
},
|
|
166
|
+
);
|
|
167
|
+
|
|
168
|
+
expect(nameHeader).toHaveAttribute("aria-sort", "ascending");
|
|
169
|
+
});
|
|
170
|
+
});
|
|
171
|
+
|
|
172
|
+
describe("hideOnMobile columns", () => {
|
|
173
|
+
test("the mobile card leaves out columns marked hideOnMobile", () => {
|
|
174
|
+
setViewportWidth(375);
|
|
175
|
+
renderTable();
|
|
176
|
+
|
|
177
|
+
// "Name" is shown on every breakpoint.
|
|
178
|
+
expect(screen.getAllByText("Alpha").length).toBeGreaterThan(0);
|
|
179
|
+
|
|
180
|
+
/*
|
|
181
|
+
* "Status" is hideOnMobile. Its header is already filtered out on mobile;
|
|
182
|
+
* the row used to render it anyway, which is the regression this pins.
|
|
183
|
+
*/
|
|
184
|
+
expect(screen.queryByText("Up")).not.toBeInTheDocument();
|
|
185
|
+
expect(screen.queryByText("Down")).not.toBeInTheDocument();
|
|
186
|
+
});
|
|
187
|
+
|
|
188
|
+
test("the desktop row is untouched", () => {
|
|
189
|
+
setViewportWidth(1280);
|
|
190
|
+
renderTable();
|
|
191
|
+
|
|
192
|
+
expect(screen.getByText("Up")).toBeInTheDocument();
|
|
193
|
+
expect(screen.getByText("Down")).toBeInTheDocument();
|
|
194
|
+
});
|
|
195
|
+
});
|
|
@@ -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
|
+
});
|