@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
|
@@ -63,7 +63,9 @@ jest.mock(
|
|
|
63
63
|
);
|
|
64
64
|
|
|
65
65
|
import useEventTimeReferenceLines, {
|
|
66
|
+
EVENT_MARKER_TITLE_MAX_LENGTH,
|
|
66
67
|
EventTimeReferenceLines,
|
|
68
|
+
truncateEventMarkerTitle,
|
|
67
69
|
} from "../../../../App/FeatureSet/Dashboard/src/Components/Metrics/Utils/UseEventTimeReferenceLines";
|
|
68
70
|
import ChartTimeReferenceLineProps from "../../../UI/Components/Charts/Types/TimeReferenceLineProps";
|
|
69
71
|
import InBetween from "../../../Types/BaseDatabase/InBetween";
|
|
@@ -100,6 +102,8 @@ function Probe(props: {
|
|
|
100
102
|
data-color={line.color}
|
|
101
103
|
data-dash={line.strokeDasharray || "solid"}
|
|
102
104
|
data-clickable={line.onClick ? "yes" : "no"}
|
|
105
|
+
data-kind={line.kind || "none"}
|
|
106
|
+
data-subtitle={line.subtitle || ""}
|
|
103
107
|
>
|
|
104
108
|
{line.label}
|
|
105
109
|
</div>
|
|
@@ -194,6 +198,127 @@ describe("useEventTimeReferenceLines", () => {
|
|
|
194
198
|
expect(deploy.dataset["clickable"]).toBe("no");
|
|
195
199
|
});
|
|
196
200
|
|
|
201
|
+
test("markers carry the kind and subtitle the rail chip reads", async () => {
|
|
202
|
+
/*
|
|
203
|
+
* `kind` is what lets a chip holding a deploy AND an incident paint
|
|
204
|
+
* itself as the incident; `subtitle` is the card's second line. Both
|
|
205
|
+
* are additions — the label strings the surfaces reverse-engineer are
|
|
206
|
+
* deliberately unchanged.
|
|
207
|
+
*/
|
|
208
|
+
getListMock.mockImplementation((args: { modelType: { name: string } }) => {
|
|
209
|
+
if (args.modelType.name === "Incident") {
|
|
210
|
+
return Promise.resolve({
|
|
211
|
+
data: [
|
|
212
|
+
{
|
|
213
|
+
id: new ObjectID("11111111-0000-4000-8000-000000000001"),
|
|
214
|
+
createdAt: "2026-08-20T10:10:00.000Z",
|
|
215
|
+
title: "API is down",
|
|
216
|
+
incidentSeverity: { name: "Sev1", color: "#123456" },
|
|
217
|
+
},
|
|
218
|
+
],
|
|
219
|
+
});
|
|
220
|
+
}
|
|
221
|
+
return Promise.resolve({
|
|
222
|
+
data: [
|
|
223
|
+
{
|
|
224
|
+
id: new ObjectID("22222222-0000-4000-8000-000000000002"),
|
|
225
|
+
createdAt: "2026-08-20T10:20:00.000Z",
|
|
226
|
+
title: "High latency",
|
|
227
|
+
alertSeverity: { name: "Warning" },
|
|
228
|
+
},
|
|
229
|
+
],
|
|
230
|
+
});
|
|
231
|
+
});
|
|
232
|
+
analyticsGetListMock.mockResolvedValue({
|
|
233
|
+
data: [
|
|
234
|
+
{
|
|
235
|
+
time: "2026-08-20T10:03:00.000Z",
|
|
236
|
+
title: "v2.31.0",
|
|
237
|
+
eventType: "deployment",
|
|
238
|
+
},
|
|
239
|
+
],
|
|
240
|
+
});
|
|
241
|
+
|
|
242
|
+
render(<Probe enabled={true} window={WINDOW} />);
|
|
243
|
+
|
|
244
|
+
await waitFor(() => {
|
|
245
|
+
expect(screen.getByTestId("marker-count").textContent).toBe("3");
|
|
246
|
+
});
|
|
247
|
+
|
|
248
|
+
const markers: Array<HTMLElement> = screen.getAllByTestId("marker");
|
|
249
|
+
const byLabel: (needle: string) => HTMLElement = (
|
|
250
|
+
needle: string,
|
|
251
|
+
): HTMLElement => {
|
|
252
|
+
const found: HTMLElement | undefined = markers.find(
|
|
253
|
+
(marker: HTMLElement) => {
|
|
254
|
+
return (marker.textContent || "").includes(needle);
|
|
255
|
+
},
|
|
256
|
+
);
|
|
257
|
+
if (!found) {
|
|
258
|
+
throw new Error(`no marker containing ${needle}`);
|
|
259
|
+
}
|
|
260
|
+
return found;
|
|
261
|
+
};
|
|
262
|
+
|
|
263
|
+
const incident: HTMLElement = byLabel("Incident: API is down");
|
|
264
|
+
expect(incident.dataset["kind"]).toBe("incident");
|
|
265
|
+
expect(incident.dataset["subtitle"]).toBe("Incident · Sev1");
|
|
266
|
+
|
|
267
|
+
const alert: HTMLElement = byLabel("Alert: High latency");
|
|
268
|
+
expect(alert.dataset["kind"]).toBe("alert");
|
|
269
|
+
expect(alert.dataset["subtitle"]).toBe("Alert · Warning");
|
|
270
|
+
|
|
271
|
+
const deploy: HTMLElement = byLabel("Deploy: v2.31.0");
|
|
272
|
+
expect(deploy.dataset["kind"]).toBe("change");
|
|
273
|
+
expect(deploy.dataset["subtitle"]).toBe("Change event");
|
|
274
|
+
});
|
|
275
|
+
|
|
276
|
+
test("a severity with no name still names the marker's kind", async () => {
|
|
277
|
+
getListMock.mockImplementation((args: { modelType: { name: string } }) => {
|
|
278
|
+
if (args.modelType.name === "Incident") {
|
|
279
|
+
return Promise.resolve({
|
|
280
|
+
data: [
|
|
281
|
+
{
|
|
282
|
+
id: new ObjectID("11111111-0000-4000-8000-000000000001"),
|
|
283
|
+
createdAt: "2026-08-20T10:10:00.000Z",
|
|
284
|
+
title: "API is down",
|
|
285
|
+
incidentSeverity: undefined,
|
|
286
|
+
},
|
|
287
|
+
],
|
|
288
|
+
});
|
|
289
|
+
}
|
|
290
|
+
return Promise.resolve({ data: [] });
|
|
291
|
+
});
|
|
292
|
+
analyticsGetListMock.mockResolvedValue({ data: [] });
|
|
293
|
+
|
|
294
|
+
render(<Probe enabled={true} window={WINDOW} />);
|
|
295
|
+
|
|
296
|
+
await waitFor(() => {
|
|
297
|
+
expect(screen.getByTestId("marker-count").textContent).toBe("1");
|
|
298
|
+
});
|
|
299
|
+
|
|
300
|
+
const marker: HTMLElement = screen.getAllByTestId("marker")[0]!;
|
|
301
|
+
expect(marker.dataset["kind"]).toBe("incident");
|
|
302
|
+
expect(marker.dataset["subtitle"]).toBe("Incident");
|
|
303
|
+
});
|
|
304
|
+
|
|
305
|
+
test("a long title keeps enough of itself to be recognisable", () => {
|
|
306
|
+
/*
|
|
307
|
+
* The cap exists so a card listing a dozen clustered events stays
|
|
308
|
+
* scannable, not because the label has to fit inside the plot any
|
|
309
|
+
* more — it is generous now, and only bites well past a real title.
|
|
310
|
+
*/
|
|
311
|
+
const ordinary: string = "Checkout API p99 latency breached its SLO";
|
|
312
|
+
expect(truncateEventMarkerTitle(ordinary)).toBe(ordinary);
|
|
313
|
+
|
|
314
|
+
const overlong: string = "x".repeat(EVENT_MARKER_TITLE_MAX_LENGTH + 20);
|
|
315
|
+
const truncated: string = truncateEventMarkerTitle(overlong);
|
|
316
|
+
expect(truncated.endsWith("…")).toBe(true);
|
|
317
|
+
expect(truncated.length).toBeLessThanOrEqual(
|
|
318
|
+
EVENT_MARKER_TITLE_MAX_LENGTH + 1,
|
|
319
|
+
);
|
|
320
|
+
});
|
|
321
|
+
|
|
197
322
|
test("one source failing never takes the others down", async () => {
|
|
198
323
|
getListMock.mockImplementation((args: { modelType: { name: string } }) => {
|
|
199
324
|
if (args.modelType.name === "Incident") {
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import "@testing-library/jest-dom";
|
|
2
|
+
import { render, screen } from "@testing-library/react";
|
|
3
|
+
import React from "react";
|
|
4
|
+
import { describe, expect, jest, test } from "@jest/globals";
|
|
5
|
+
|
|
6
|
+
/*
|
|
7
|
+
* The shape esbuild's file-loader actually hands these components: the imported
|
|
8
|
+
* asset inlined as a "data:" URL (Common/UI/esbuild-config.js,
|
|
9
|
+
* createFileLoaderPlugin). Every existing suite that mocks an .svg mocks it as
|
|
10
|
+
* a plain path like "/blank-profile.svg" — which is exactly the shape that does
|
|
11
|
+
* NOT reproduce this bug, and why the whole test suite stayed green while every
|
|
12
|
+
* dashboard and admin page threw on first render.
|
|
13
|
+
*
|
|
14
|
+
* The "//" in the base64 payload is deliberate. Route collapses /+ into a
|
|
15
|
+
* single /, so the tempting "just let Route accept data: URLs" fix would
|
|
16
|
+
* silently corrupt the image — this payload makes that fix fail here too.
|
|
17
|
+
*
|
|
18
|
+
* ONE constant and ONE jest.mock for both assets on purpose: Common's
|
|
19
|
+
* jest.config.json maps every .svg to Tests/__mocks__/styleMock.js, so two
|
|
20
|
+
* jest.mock() calls naming two different .svg paths resolve to the same module
|
|
21
|
+
* and only the last factory would ever register.
|
|
22
|
+
*/
|
|
23
|
+
const ASSET_DATA_URL: string = "data:image/svg+xml;base64,////bG9nbw==";
|
|
24
|
+
|
|
25
|
+
jest.mock("../../../UI/Images/logos/OneUptimeSVG/3-transparent.svg", () => {
|
|
26
|
+
return ASSET_DATA_URL;
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
import DashboardLogo from "../../../../App/FeatureSet/Dashboard/src/Components/Header/Logo";
|
|
30
|
+
import AdminDashboardLogo from "../../../../App/FeatureSet/AdminDashboard/src/Components/Header/Logo";
|
|
31
|
+
import Image from "../../../UI/Components/Image/Image";
|
|
32
|
+
|
|
33
|
+
/*
|
|
34
|
+
* Regression cover for the crash that blocked every release from 2026-08-31.
|
|
35
|
+
*
|
|
36
|
+
* b2d2da71e8 taught Route to reject scheme-prefixed strings — correctly, it
|
|
37
|
+
* guards an open-redirect. But these components were laundering an <img> src
|
|
38
|
+
* through Route.fromString() purely to satisfy Image's prop type, and an
|
|
39
|
+
* esbuild-inlined asset src is always "data:"-prefixed. So Route threw during
|
|
40
|
+
* render, React unwound to the error boundary, and the dashboard never painted.
|
|
41
|
+
*
|
|
42
|
+
* An image src is not a Route. What these pin is that the header renders the
|
|
43
|
+
* asset straight through as an <img src>, with no Route in the path.
|
|
44
|
+
*/
|
|
45
|
+
describe("header image assets", () => {
|
|
46
|
+
test("the dashboard logo renders the inlined asset as its src", () => {
|
|
47
|
+
render(
|
|
48
|
+
<DashboardLogo
|
|
49
|
+
onClick={() => {
|
|
50
|
+
// no-op: the click target is not what regressed.
|
|
51
|
+
}}
|
|
52
|
+
/>,
|
|
53
|
+
);
|
|
54
|
+
|
|
55
|
+
const logo: HTMLElement = screen.getByAltText("OneUptime");
|
|
56
|
+
expect(logo).toHaveAttribute("src", ASSET_DATA_URL);
|
|
57
|
+
});
|
|
58
|
+
|
|
59
|
+
test("the admin dashboard logo renders the inlined asset as its src", () => {
|
|
60
|
+
render(
|
|
61
|
+
<AdminDashboardLogo
|
|
62
|
+
onClick={() => {
|
|
63
|
+
// no-op
|
|
64
|
+
}}
|
|
65
|
+
/>,
|
|
66
|
+
);
|
|
67
|
+
|
|
68
|
+
const logo: HTMLElement = screen.getByAltText("OneUptime");
|
|
69
|
+
expect(logo).toHaveAttribute("src", ASSET_DATA_URL);
|
|
70
|
+
});
|
|
71
|
+
|
|
72
|
+
/*
|
|
73
|
+
* Straight at the type misuse rather than at one component: any scheme-
|
|
74
|
+
* prefixed src has to survive <Image>. Before the fix this threw inside
|
|
75
|
+
* Route.fromString at the call sites; now the string reaches <img> untouched.
|
|
76
|
+
*/
|
|
77
|
+
test("Image passes a data: URL through to src without validating it", () => {
|
|
78
|
+
render(<Image imageUrl={ASSET_DATA_URL} alt="asset" />);
|
|
79
|
+
|
|
80
|
+
expect(screen.getByAltText("asset")).toHaveAttribute("src", ASSET_DATA_URL);
|
|
81
|
+
});
|
|
82
|
+
|
|
83
|
+
/*
|
|
84
|
+
* An empty src must not fall through to the `file` branch and throw
|
|
85
|
+
* "file or imageUrl required" — it renders an empty <img>, keeping the node
|
|
86
|
+
* (and its test id) in the DOM.
|
|
87
|
+
*/
|
|
88
|
+
test("an empty src renders an image rather than throwing", () => {
|
|
89
|
+
render(<Image imageUrl="" alt="empty" data-testid="empty-image" />);
|
|
90
|
+
|
|
91
|
+
expect(screen.getByTestId("empty-image")).toHaveAttribute("src", "");
|
|
92
|
+
});
|
|
93
|
+
});
|
|
@@ -80,11 +80,17 @@ jest.mock("../../../UI/Utils/User", () => {
|
|
|
80
80
|
type CapturedTableProps = {
|
|
81
81
|
columns?: Array<CapturedColumn> | undefined;
|
|
82
82
|
query?: Record<string, unknown> | undefined;
|
|
83
|
+
userPreferencesKey?: string | undefined;
|
|
84
|
+
disableColumnCustomization?: boolean | undefined;
|
|
83
85
|
};
|
|
84
86
|
|
|
85
87
|
type CapturedColumn = {
|
|
86
88
|
title: string;
|
|
87
89
|
field?: Record<string, unknown> | undefined;
|
|
90
|
+
isHiddenByDefault?: boolean | undefined;
|
|
91
|
+
isNotCustomizable?: boolean | undefined;
|
|
92
|
+
hideOnMobile?: boolean | undefined;
|
|
93
|
+
disableCsvExport?: boolean | undefined;
|
|
88
94
|
getElement?: ((item: Monitor) => ReactElement) | undefined;
|
|
89
95
|
getExportValue?: ((item: Monitor) => string) | undefined;
|
|
90
96
|
};
|
|
@@ -196,6 +202,16 @@ import {
|
|
|
196
202
|
MONITOR_TEMPLATE_FACET_QUERY_FIELD,
|
|
197
203
|
} from "../../../../App/FeatureSet/Dashboard/src/Components/Monitor/MonitorFacets";
|
|
198
204
|
import { ResourceFacet } from "../../../../App/FeatureSet/Dashboard/src/Components/ResourceOwners/ResourceFacet";
|
|
205
|
+
import Columns from "../../../UI/Components/ModelTable/Columns";
|
|
206
|
+
import {
|
|
207
|
+
ColumnPreference,
|
|
208
|
+
CustomizableColumn,
|
|
209
|
+
applyColumnPreference,
|
|
210
|
+
getColumnBaseId,
|
|
211
|
+
getColumnIds,
|
|
212
|
+
getCustomizableColumns,
|
|
213
|
+
} from "../../../UI/Components/ModelTable/ColumnPreference";
|
|
214
|
+
import Column from "../../../UI/Components/ModelTable/Column";
|
|
199
215
|
import Monitor from "../../../Models/DatabaseModels/Monitor";
|
|
200
216
|
import MonitorTemplate from "../../../Models/DatabaseModels/MonitorTemplate";
|
|
201
217
|
import Includes from "../../../Types/BaseDatabase/Includes";
|
|
@@ -372,6 +388,235 @@ describe("the Template column on the monitor list", () => {
|
|
|
372
388
|
});
|
|
373
389
|
});
|
|
374
390
|
|
|
391
|
+
/*
|
|
392
|
+
* Issue #3491 shipped the column switched on, which put a stripe of "—" down
|
|
393
|
+
* the middle of every monitor list: most monitors are not created from a
|
|
394
|
+
* template, and the ones that are still only need the answer occasionally.
|
|
395
|
+
* It is now off by default and turned on from the Customize Columns picker.
|
|
396
|
+
* "Hidden" and "reachable" have to hold together — a column hidden on a table
|
|
397
|
+
* with no picker is a column nobody can get back — so these run the real
|
|
398
|
+
* ColumnPreference rules over the column set the table actually declares,
|
|
399
|
+
* rather than reading the flag on its own.
|
|
400
|
+
*/
|
|
401
|
+
describe("the Template column's place in a first-time viewer's table", () => {
|
|
402
|
+
type DeclaredColumnsFunction = () => Columns<Monitor>;
|
|
403
|
+
|
|
404
|
+
const declaredColumns: DeclaredColumnsFunction = (): Columns<Monitor> => {
|
|
405
|
+
return (capturedTableProps?.columns || []) as unknown as Columns<Monitor>;
|
|
406
|
+
};
|
|
407
|
+
|
|
408
|
+
type TemplateColumnIdFunction = () => string;
|
|
409
|
+
|
|
410
|
+
const templateColumnId: TemplateColumnIdFunction = (): string => {
|
|
411
|
+
const columns: Columns<Monitor> = declaredColumns();
|
|
412
|
+
|
|
413
|
+
const index: number = columns.findIndex((column: { title: string }) => {
|
|
414
|
+
return column.title === "Template";
|
|
415
|
+
});
|
|
416
|
+
|
|
417
|
+
return getColumnIds<Monitor>(columns)[index] as string;
|
|
418
|
+
};
|
|
419
|
+
|
|
420
|
+
type VisibleTitlesFunction = (
|
|
421
|
+
preference: ColumnPreference | null,
|
|
422
|
+
) => Array<string>;
|
|
423
|
+
|
|
424
|
+
const visibleTitles: VisibleTitlesFunction = (
|
|
425
|
+
preference: ColumnPreference | null,
|
|
426
|
+
): Array<string> => {
|
|
427
|
+
return applyColumnPreference<Monitor>({
|
|
428
|
+
columns: declaredColumns(),
|
|
429
|
+
preference,
|
|
430
|
+
}).map((column: { title: string }) => {
|
|
431
|
+
return column.title;
|
|
432
|
+
});
|
|
433
|
+
};
|
|
434
|
+
|
|
435
|
+
/*
|
|
436
|
+
* The flag only means something if the table persists a layout: without a
|
|
437
|
+
* `userPreferencesKey` the picker is never rendered (see
|
|
438
|
+
* BaseModelTable.isColumnCustomizationEnabled), so a hidden-by-default
|
|
439
|
+
* column would be a column nobody could ever get back.
|
|
440
|
+
*/
|
|
441
|
+
test("is switchable back on, because the table has a column picker", async () => {
|
|
442
|
+
const props: CapturedTableProps = await renderTable({
|
|
443
|
+
projectId: PROJECT_ID,
|
|
444
|
+
});
|
|
445
|
+
|
|
446
|
+
expect(props.userPreferencesKey).toBeTruthy();
|
|
447
|
+
expect(props.disableColumnCustomization).toBeFalsy();
|
|
448
|
+
expect(columnTitled("Template")!.isNotCustomizable).toBeFalsy();
|
|
449
|
+
});
|
|
450
|
+
|
|
451
|
+
test("is not rendered for a viewer with no stored layout", async () => {
|
|
452
|
+
await renderTable({ projectId: PROJECT_ID });
|
|
453
|
+
|
|
454
|
+
const titles: Array<string> = visibleTitles(null);
|
|
455
|
+
|
|
456
|
+
expect(titles).not.toContain("Template");
|
|
457
|
+
// Not because the table came back empty.
|
|
458
|
+
expect(titles).toContain("Name");
|
|
459
|
+
expect(titles).toContain("Monitor Status");
|
|
460
|
+
expect(titles).toContain("Labels");
|
|
461
|
+
});
|
|
462
|
+
|
|
463
|
+
test("is offered by the picker, switched off", async () => {
|
|
464
|
+
await renderTable({ projectId: PROJECT_ID });
|
|
465
|
+
|
|
466
|
+
const entry: CustomizableColumn<Monitor> | undefined =
|
|
467
|
+
getCustomizableColumns<Monitor>({
|
|
468
|
+
columns: declaredColumns(),
|
|
469
|
+
preference: null,
|
|
470
|
+
}).find((candidate: CustomizableColumn<Monitor>) => {
|
|
471
|
+
return candidate.column.title === "Template";
|
|
472
|
+
});
|
|
473
|
+
|
|
474
|
+
expect(entry).toBeDefined();
|
|
475
|
+
expect(entry!.isVisible).toBe(false);
|
|
476
|
+
expect(entry!.isPinned).toBe(false);
|
|
477
|
+
/*
|
|
478
|
+
* Off, not gone: the picker must not offer to remove a column the table
|
|
479
|
+
* ships, because nothing would put it back.
|
|
480
|
+
*/
|
|
481
|
+
expect(entry!.isRemovable).toBe(false);
|
|
482
|
+
});
|
|
483
|
+
|
|
484
|
+
test("stays on for a viewer who already switched it on", async () => {
|
|
485
|
+
await renderTable({ projectId: PROJECT_ID });
|
|
486
|
+
|
|
487
|
+
const preference: ColumnPreference = {
|
|
488
|
+
order: [templateColumnId()],
|
|
489
|
+
hidden: [],
|
|
490
|
+
};
|
|
491
|
+
|
|
492
|
+
expect(visibleTitles(preference)).toContain("Template");
|
|
493
|
+
});
|
|
494
|
+
|
|
495
|
+
/*
|
|
496
|
+
* The id a viewer's "switch Template on" is stored under is the column's
|
|
497
|
+
* first field key, and getColumnIds breaks ties on that key with a title
|
|
498
|
+
* slug and then a POSITIONAL suffix. So the day someone adds a second column
|
|
499
|
+
* keyed on `monitorTemplate` - a "Template Version" column is entirely
|
|
500
|
+
* plausible - this column's persisted id changes under everyone who had it
|
|
501
|
+
* on, their stored entry stops matching, and the column falls back to its
|
|
502
|
+
* declared default, which is now off. Nobody would report that as a bug;
|
|
503
|
+
* they would just never see the column again.
|
|
504
|
+
*/
|
|
505
|
+
test("has an id no other column competes for, so a stored layout keeps meaning it", async () => {
|
|
506
|
+
await renderTable({ projectId: PROJECT_ID });
|
|
507
|
+
|
|
508
|
+
const columns: Columns<Monitor> = declaredColumns();
|
|
509
|
+
const ids: Array<string> = getColumnIds<Monitor>(columns);
|
|
510
|
+
|
|
511
|
+
const baseIds: Array<string> = columns.map((column: Column<Monitor>) => {
|
|
512
|
+
return getColumnBaseId<Monitor>(column);
|
|
513
|
+
});
|
|
514
|
+
|
|
515
|
+
// Nothing had to be disambiguated, so no id depends on declaration order.
|
|
516
|
+
expect(ids).toEqual(baseIds);
|
|
517
|
+
|
|
518
|
+
expect(
|
|
519
|
+
ids.filter((id: string) => {
|
|
520
|
+
return id === templateColumnId();
|
|
521
|
+
}),
|
|
522
|
+
).toHaveLength(1);
|
|
523
|
+
|
|
524
|
+
/*
|
|
525
|
+
* Titles are the first tie-breaker, so two columns sharing one would push
|
|
526
|
+
* the tie down to position - and the picker would show the viewer two rows
|
|
527
|
+
* they cannot tell apart either.
|
|
528
|
+
*/
|
|
529
|
+
const titles: Array<string> = columns.map((column: Column<Monitor>) => {
|
|
530
|
+
return column.title;
|
|
531
|
+
});
|
|
532
|
+
|
|
533
|
+
expect(new Set(titles).size).toBe(titles.length);
|
|
534
|
+
});
|
|
535
|
+
|
|
536
|
+
/*
|
|
537
|
+
* The upgrade path almost every real viewer takes: they arranged this table
|
|
538
|
+
* before the Template column existed, so their stored `order` simply has no
|
|
539
|
+
* entry for it and it has to stay off rather than appear uninvited. The
|
|
540
|
+
* generic rule is pinned in ColumnPreference's own tests; this pins it
|
|
541
|
+
* against the ids MonitorTable actually declares, so that giving the column
|
|
542
|
+
* an explicit `id` - which those generic tests would not notice - cannot
|
|
543
|
+
* quietly change what an existing layout resolves to.
|
|
544
|
+
*/
|
|
545
|
+
test("stays off for a viewer whose layout predates the column", async () => {
|
|
546
|
+
await renderTable({ projectId: PROJECT_ID });
|
|
547
|
+
|
|
548
|
+
const templateId: string = templateColumnId();
|
|
549
|
+
|
|
550
|
+
const preference: ColumnPreference = {
|
|
551
|
+
order: getColumnIds<Monitor>(declaredColumns()).filter((id: string) => {
|
|
552
|
+
return id !== templateId;
|
|
553
|
+
}),
|
|
554
|
+
hidden: [],
|
|
555
|
+
};
|
|
556
|
+
|
|
557
|
+
const titles: Array<string> = visibleTitles(preference);
|
|
558
|
+
|
|
559
|
+
expect(titles).not.toContain("Template");
|
|
560
|
+
// The rest of their arrangement survived, so this is not an empty result.
|
|
561
|
+
expect(titles).toContain("Name");
|
|
562
|
+
expect(titles).toContain("Labels");
|
|
563
|
+
});
|
|
564
|
+
|
|
565
|
+
/*
|
|
566
|
+
* `hideOnMobile` is enforced at render (Table/TableHeader and Table/TableRow
|
|
567
|
+
* drop the column outright) while the picker knows nothing about it, so a
|
|
568
|
+
* column carrying both flags is a dead control on a phone: the viewer ticks
|
|
569
|
+
* it, the shown-columns count goes up, and no column arrives. For a column
|
|
570
|
+
* that is hidden by default that is also a one-way door, since the picker is
|
|
571
|
+
* the only route back. Stated over the whole set so the next author cannot
|
|
572
|
+
* reintroduce the pair on a different column.
|
|
573
|
+
*/
|
|
574
|
+
test("no column the picker can switch on is one the phone would throw away", async () => {
|
|
575
|
+
await renderTable({ projectId: PROJECT_ID });
|
|
576
|
+
|
|
577
|
+
const columns: Columns<Monitor> = declaredColumns();
|
|
578
|
+
|
|
579
|
+
/*
|
|
580
|
+
* An invariant over an empty set holds for the wrong reason, and this one
|
|
581
|
+
* is read off captured props - so prove the column it exists for is in
|
|
582
|
+
* there before believing the result.
|
|
583
|
+
*/
|
|
584
|
+
expect(
|
|
585
|
+
columns.map((column: Column<Monitor>) => {
|
|
586
|
+
return column.title;
|
|
587
|
+
}),
|
|
588
|
+
).toContain("Template");
|
|
589
|
+
|
|
590
|
+
const unreachable: Array<string> = columns
|
|
591
|
+
.filter((column: Column<Monitor>) => {
|
|
592
|
+
return (
|
|
593
|
+
Boolean(column.isHiddenByDefault) && Boolean(column.hideOnMobile)
|
|
594
|
+
);
|
|
595
|
+
})
|
|
596
|
+
.map((column: Column<Monitor>) => {
|
|
597
|
+
return column.title;
|
|
598
|
+
});
|
|
599
|
+
|
|
600
|
+
expect(unreachable).toEqual([]);
|
|
601
|
+
});
|
|
602
|
+
|
|
603
|
+
/*
|
|
604
|
+
* The default monitors CSV no longer carries a Template column, and it
|
|
605
|
+
* matters *why*: exports follow what is on screen (BaseModelTable attaches
|
|
606
|
+
* export keys only while walking the columns it is about to render), so the
|
|
607
|
+
* column leaves the CSV purely by being switched off, and comes back the
|
|
608
|
+
* moment the viewer switches it on. Someone chasing "the export lost the
|
|
609
|
+
* template" could reach for `disableCsvExport` or teach the exporter about
|
|
610
|
+
* visibility; both would break the column for the viewers who did switch it
|
|
611
|
+
* on. This records which lever is the real one.
|
|
612
|
+
*/
|
|
613
|
+
test("does not opt out of the CSV", async () => {
|
|
614
|
+
await renderTable({ projectId: PROJECT_ID });
|
|
615
|
+
|
|
616
|
+
expect(columnTitled("Template")!.disableCsvExport).toBeFalsy();
|
|
617
|
+
});
|
|
618
|
+
});
|
|
619
|
+
|
|
375
620
|
describe("the Template chip in the monitor list's filter bar", () => {
|
|
376
621
|
test("is one of the chips the bar is given", async () => {
|
|
377
622
|
await renderTable({ projectId: PROJECT_ID });
|
|
@@ -503,3 +748,76 @@ describe("the same table scoped to one template", () => {
|
|
|
503
748
|
expect(facetKeyed("monitorType")).toBeDefined();
|
|
504
749
|
});
|
|
505
750
|
});
|
|
751
|
+
|
|
752
|
+
/*
|
|
753
|
+
* The two tables above are the same component with different column sets, and
|
|
754
|
+
* a saved layout records only the columns the picker was showing. Put those
|
|
755
|
+
* two facts together over one shared storage key and the template page becomes
|
|
756
|
+
* a trap: a viewer who tidies the Linked Monitors table writes a layout with
|
|
757
|
+
* no "monitorTemplate" entry in either `order` or `hidden`, and back on the
|
|
758
|
+
* monitors list a column named in neither list falls back to its declared
|
|
759
|
+
* default - which is now hidden. Their earlier "switch Template on" is gone,
|
|
760
|
+
* with no action that looks like it touched the monitors list.
|
|
761
|
+
*
|
|
762
|
+
* ModelTable is stubbed here, so no Save can be driven; what can be pinned is
|
|
763
|
+
* the precondition, and the precondition is what has to stay false.
|
|
764
|
+
*/
|
|
765
|
+
describe("the layout key each monitor table saves under", () => {
|
|
766
|
+
type ColumnIdsOfFunction = (props: CapturedTableProps) => Array<string>;
|
|
767
|
+
|
|
768
|
+
const columnIdsOf: ColumnIdsOfFunction = (
|
|
769
|
+
props: CapturedTableProps,
|
|
770
|
+
): Array<string> => {
|
|
771
|
+
return getColumnIds<Monitor>(
|
|
772
|
+
(props.columns || []) as unknown as Columns<Monitor>,
|
|
773
|
+
);
|
|
774
|
+
};
|
|
775
|
+
|
|
776
|
+
test("cannot let the template page overwrite the monitor list's layout", async () => {
|
|
777
|
+
const unscoped: CapturedTableProps = await renderTable({
|
|
778
|
+
projectId: PROJECT_ID,
|
|
779
|
+
});
|
|
780
|
+
|
|
781
|
+
const unscopedKey: string | undefined = unscoped.userPreferencesKey;
|
|
782
|
+
const unscopedIds: Array<string> = columnIdsOf(unscoped);
|
|
783
|
+
|
|
784
|
+
/*
|
|
785
|
+
* A second render rather than a rerender: the two pages mount the table
|
|
786
|
+
* independently, and a stale capture would make this test agree with
|
|
787
|
+
* itself.
|
|
788
|
+
*/
|
|
789
|
+
cleanup();
|
|
790
|
+
capturedTableProps = null;
|
|
791
|
+
|
|
792
|
+
const scoped: CapturedTableProps = await renderTable({
|
|
793
|
+
projectId: PROJECT_ID,
|
|
794
|
+
monitorTemplateId: TEMPLATE_ID,
|
|
795
|
+
});
|
|
796
|
+
|
|
797
|
+
const scopedKey: string | undefined = scoped.userPreferencesKey;
|
|
798
|
+
const scopedIds: Array<string> = columnIdsOf(scoped);
|
|
799
|
+
|
|
800
|
+
/*
|
|
801
|
+
* The invariant, stated so that either fix satisfies it: keep the two
|
|
802
|
+
* tables on separate keys, or make them offer the same columns. Only
|
|
803
|
+
* "shared key AND different columns" loses a viewer's choice.
|
|
804
|
+
*/
|
|
805
|
+
const sharesKey: boolean = unscopedKey === scopedKey;
|
|
806
|
+
const offersSameColumns: boolean =
|
|
807
|
+
[...unscopedIds].sort().join(",") === [...scopedIds].sort().join(",");
|
|
808
|
+
|
|
809
|
+
expect(sharesKey && !offersSameColumns).toBe(false);
|
|
810
|
+
|
|
811
|
+
/*
|
|
812
|
+
* And the arrangement that satisfies it today, recorded so a rename of
|
|
813
|
+
* either key is a deliberate act - changing the unscoped key silently
|
|
814
|
+
* resets every existing viewer's monitor list layout.
|
|
815
|
+
*/
|
|
816
|
+
expect(unscopedKey).toBe("monitors-table");
|
|
817
|
+
expect(scopedKey).toBe("monitor-template-monitors-table");
|
|
818
|
+
|
|
819
|
+
// The half of the invariant that is genuinely false, so it is the keys doing the work.
|
|
820
|
+
expect(unscopedIds).toContain("monitorTemplate");
|
|
821
|
+
expect(scopedIds).not.toContain("monitorTemplate");
|
|
822
|
+
});
|
|
823
|
+
});
|