@oneuptime/common 12.0.30 → 12.0.31
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Models/AnalyticsModels/SecurityEvent.ts +48 -16
- package/Models/AnalyticsModels/ThreatIntelIndicator.ts +10 -5
- package/Models/DatabaseModels/AlertSeverity.ts +44 -0
- package/Models/DatabaseModels/DetectionRule.ts +16 -5
- package/Models/DatabaseModels/GoogleSecOpsConnection.ts +14 -5
- package/Models/DatabaseModels/IncidentSeverity.ts +44 -0
- package/Models/DatabaseModels/Index.ts +2 -0
- package/Models/DatabaseModels/NetworkDevice.ts +113 -3
- package/Models/DatabaseModels/NetworkDeviceAutoImportRule.ts +88 -0
- package/Models/DatabaseModels/NetworkDeviceDiscoveryScan.ts +22 -0
- package/Models/DatabaseModels/NetworkDeviceOidTemplate.ts +499 -0
- package/Models/DatabaseModels/ThreatIntelFeed.ts +16 -5
- package/Server/API/GlobalConfigAPI.ts +362 -183
- package/Server/API/TelemetryAPI.ts +42 -4
- package/Server/EnvironmentConfig.ts +112 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1790500000000-AddNetworkDeviceOidTemplate.ts +59 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1790600000000-AddAutoImportRuleOidTemplate.ts +25 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +4 -0
- package/Server/Middleware/MultipartFormData.ts +118 -32
- package/Server/Services/AlertEpisodeLabelRuleEngineService.ts +9 -1
- package/Server/Services/AlertEpisodeOnCallRuleEngineService.ts +9 -1
- package/Server/Services/AlertEpisodeOwnerRuleEngineService.ts +9 -1
- package/Server/Services/AlertEpisodePrivacyRuleEngineService.ts +9 -1
- package/Server/Services/AlertGroupingEngineService.ts +9 -1
- package/Server/Services/AlertLabelRuleEngineService.ts +9 -1
- package/Server/Services/AlertOnCallRuleEngineService.ts +9 -1
- package/Server/Services/AlertOwnerRuleEngineService.ts +9 -1
- package/Server/Services/AlertPrivacyRuleEngineService.ts +9 -1
- package/Server/Services/AlertReminderRuleService.ts +9 -1
- package/Server/Services/AutoRemediationRuleEngineService.ts +9 -1
- package/Server/Services/CephClusterLabelRuleEngineService.ts +9 -1
- package/Server/Services/CephClusterOwnerRuleEngineService.ts +9 -1
- package/Server/Services/CloudResourceLabelRuleEngineService.ts +9 -1
- package/Server/Services/CloudResourceOwnerRuleEngineService.ts +9 -1
- package/Server/Services/DashboardLabelRuleEngineService.ts +9 -1
- package/Server/Services/DashboardOwnerRuleEngineService.ts +9 -1
- package/Server/Services/DockerHostLabelRuleEngineService.ts +9 -1
- package/Server/Services/DockerHostOwnerRuleEngineService.ts +9 -1
- package/Server/Services/DockerSwarmClusterLabelRuleEngineService.ts +9 -1
- package/Server/Services/DockerSwarmClusterOwnerRuleEngineService.ts +9 -1
- package/Server/Services/HostLabelRuleEngineService.ts +9 -1
- package/Server/Services/HostOwnerRuleEngineService.ts +9 -1
- package/Server/Services/IncidentEpisodeLabelRuleEngineService.ts +9 -1
- package/Server/Services/IncidentEpisodeOnCallRuleEngineService.ts +9 -1
- package/Server/Services/IncidentEpisodeOwnerRuleEngineService.ts +9 -1
- package/Server/Services/IncidentEpisodePrivacyRuleEngineService.ts +9 -1
- package/Server/Services/IncidentGroupingEngineService.ts +9 -1
- package/Server/Services/IncidentLabelRuleEngineService.ts +9 -1
- package/Server/Services/IncidentOnCallRuleEngineService.ts +9 -1
- package/Server/Services/IncidentOwnerRuleEngineService.ts +9 -1
- package/Server/Services/IncidentPrivacyRuleEngineService.ts +9 -1
- package/Server/Services/IncidentReminderRuleService.ts +9 -1
- package/Server/Services/IncidentSlaRuleService.ts +9 -1
- package/Server/Services/IncomingCallPolicyLabelRuleEngineService.ts +9 -1
- package/Server/Services/IncomingCallPolicyOwnerRuleEngineService.ts +9 -1
- package/Server/Services/Index.ts +2 -0
- package/Server/Services/IoTFleetLabelRuleEngineService.ts +9 -1
- package/Server/Services/IoTFleetOwnerRuleEngineService.ts +9 -1
- package/Server/Services/KubernetesClusterLabelRuleEngineService.ts +9 -1
- package/Server/Services/KubernetesClusterOwnerRuleEngineService.ts +9 -1
- package/Server/Services/KubernetesResourceService.ts +5 -1
- package/Server/Services/MonitorLabelRuleEngineService.ts +9 -1
- package/Server/Services/MonitorOwnerRuleEngineService.ts +9 -1
- package/Server/Services/NetworkDeviceAutoImportRuleEngineService.ts +35 -0
- package/Server/Services/NetworkDeviceAutoImportRuleService.ts +96 -0
- package/Server/Services/NetworkDeviceLabelRuleEngineService.ts +9 -1
- package/Server/Services/NetworkDeviceOidTemplateService.ts +201 -0
- package/Server/Services/NetworkDeviceOwnerRuleEngineService.ts +9 -1
- package/Server/Services/NetworkDeviceService.ts +209 -1
- package/Server/Services/OnCallDutyPolicyLabelRuleEngineService.ts +9 -1
- package/Server/Services/OnCallDutyPolicyOwnerRuleEngineService.ts +9 -1
- package/Server/Services/OnCallDutyPolicyScheduleLabelRuleEngineService.ts +9 -1
- package/Server/Services/OnCallDutyPolicyScheduleOwnerRuleEngineService.ts +9 -1
- package/Server/Services/PodmanHostLabelRuleEngineService.ts +9 -1
- package/Server/Services/PodmanHostOwnerRuleEngineService.ts +9 -1
- package/Server/Services/ProxmoxClusterLabelRuleEngineService.ts +9 -1
- package/Server/Services/ProxmoxClusterOwnerRuleEngineService.ts +9 -1
- package/Server/Services/RumApplicationLabelRuleEngineService.ts +9 -1
- package/Server/Services/RumApplicationOwnerRuleEngineService.ts +9 -1
- package/Server/Services/RunbookLabelRuleEngineService.ts +9 -1
- package/Server/Services/RunbookOwnerRuleEngineService.ts +9 -1
- package/Server/Services/RunbookRuleEngineService.ts +9 -1
- package/Server/Services/ScheduledMaintenanceLabelRuleEngineService.ts +9 -1
- package/Server/Services/ScheduledMaintenanceOwnerRuleEngineService.ts +9 -1
- package/Server/Services/ScheduledMaintenanceReminderRuleService.ts +9 -1
- package/Server/Services/ServerlessFunctionLabelRuleEngineService.ts +9 -1
- package/Server/Services/ServerlessFunctionOwnerRuleEngineService.ts +9 -1
- package/Server/Services/ServiceLabelRuleEngineService.ts +9 -1
- package/Server/Services/ServiceOwnerRuleEngineService.ts +9 -1
- package/Server/Services/StatusPageLabelRuleEngineService.ts +9 -1
- package/Server/Services/StatusPageMonitorRuleEngineService.ts +7 -0
- package/Server/Services/StatusPageOwnerRuleEngineService.ts +9 -1
- package/Server/Services/TelemetrySourceMapService.ts +266 -23
- package/Server/Services/UserService.ts +27 -0
- package/Server/Services/WorkflowLabelRuleEngineService.ts +9 -1
- package/Server/Services/WorkflowOwnerRuleEngineService.ts +9 -1
- package/Server/Utils/EnterpriseLicense/EnterpriseLicenseSeatUtil.ts +186 -0
- package/Server/Utils/Monitor/CapturedMetricAttributeUtil.ts +245 -0
- package/Server/Utils/Monitor/Criteria/SnmpMonitorCriteria.ts +21 -2
- package/Server/Utils/Monitor/MonitorMetricUtil.ts +55 -21
- package/Server/Utils/Monitor/MonitorTemplateUtil.ts +32 -0
- package/Server/Utils/Monitor/NetworkDeviceMetricUtil.ts +15 -2
- package/Server/Utils/Monitor/NetworkDeviceWalkUtil.ts +18 -1
- package/Server/Utils/Monitor/NetworkInventoryUtil.ts +10 -0
- package/Server/Utils/Monitor/SeriesResourceLabels.ts +34 -0
- package/Server/Utils/Rules/RuleEngineRuleRead.ts +48 -0
- package/Server/Utils/Telemetry/ExceptionSanitizer.ts +14 -1
- package/Server/Utils/Telemetry/LogExceptionExtractor.ts +14 -2
- package/Server/Utils/Telemetry/SourceMapResolver.ts +16 -5
- package/Server/Utils/Telemetry/StackTraceParser.ts +399 -0
- package/Tests/App/Dashboard/EventOverlayHook.test.tsx +125 -0
- package/Tests/App/Dashboard/HeaderImageAssets.test.tsx +93 -0
- package/Tests/App/Dashboard/OnCallReadinessSurfaces.test.tsx +3 -3
- package/Tests/App/Dashboard/UserElementEmail.test.tsx +12 -4
- package/Tests/App/Dashboard/UserEmailCallSites.test.tsx +1 -1
- package/Tests/Models/DatabaseModels/DomainRoleTierCoverage.test.ts +14 -0
- package/Tests/Models/DatabaseModels/ModelRegistryInvariants.test.ts +469 -0
- package/Tests/Models/SecurityDomainAccessControl.test.ts +429 -0
- package/Tests/Server/API/GlobalConfigLicense.test.ts +657 -0
- package/Tests/Server/API/SecurityEventAttributesAPI.test.ts +84 -6
- package/Tests/Server/API/TelemetryResolveStackTraceAPI.test.ts +805 -0
- package/Tests/Server/Infrastructure/Postgres/AddOnCallCalendarFeedsMigration.test.ts +32 -7
- package/Tests/Server/Middleware/IdentityRateLimit.test.ts +1144 -0
- package/Tests/Server/Middleware/MultipartFormData.test.ts +618 -3
- package/Tests/Server/Services/MonitorLabelRuleEngineScale.test.ts +520 -0
- package/Tests/Server/Services/NetworkDeviceOidTemplateService.test.ts +332 -0
- package/Tests/Server/Services/NetworkDeviceOidTemplateWriteGuards.test.ts +409 -0
- package/Tests/Server/Services/RuleEngineRuleFetchLimit.test.ts +239 -0
- package/Tests/Server/Services/TelemetrySourceMapService.test.ts +1210 -2
- package/Tests/Server/Services/UserServiceSeatLimit.test.ts +182 -0
- package/Tests/Server/Types/AnalyticsDatabase/SecurityEventModelPermission.test.ts +255 -0
- package/Tests/Server/Types/Database/Permissions/ReadBlockPermission.test.ts +212 -0
- package/Tests/Server/Types/Database/Permissions/SecurityRoleAccess.test.ts +413 -0
- package/Tests/Server/Utils/CodeRepository.test.ts +689 -0
- package/Tests/Server/Utils/EnterpriseLicense/EnterpriseLicenseSeatUtil.test.ts +495 -0
- package/Tests/Server/Utils/ExceptionSanitizer.test.ts +77 -0
- package/Tests/Server/Utils/Monitor/CapturedMetricAttributeUtil.test.ts +284 -0
- package/Tests/Server/Utils/Monitor/MonitorCustomMetricAttributes.test.ts +503 -0
- package/Tests/Server/Utils/Monitor/MonitorTemplatePrototypePollution.test.ts +106 -0
- package/Tests/Server/Utils/Monitor/NetworkDeviceWalkLogWritePath.test.ts +33 -4
- package/Tests/Server/Utils/Monitor/NetworkDeviceWalkUtil.test.ts +14 -4
- package/Tests/Server/Utils/Monitor/NetworkInventoryUtil.test.ts +44 -0
- package/Tests/Server/Utils/OpenAPISpec.test.ts +536 -0
- package/Tests/Server/Utils/Rules/RuleEngineRuleRead.test.ts +115 -0
- package/Tests/Server/Utils/StackTraceParser.test.ts +610 -0
- package/Tests/Server/Utils/Telemetry/LogExceptionExtractor.test.ts +0 -0
- package/Tests/Server/Utils/Telemetry/SourceMapLimits.test.ts +656 -0
- package/Tests/Server/Utils/Telemetry/SourceMapResolver.test.ts +100 -0
- package/Tests/Types/Monitor/SnmpMonitor/SnmpOidListUtil.test.ts +454 -0
- package/Tests/Types/SecurityRolePermissions.test.ts +193 -0
- package/Tests/UI/Components/Charts/AnnotationLayout.test.ts +773 -0
- package/Tests/UI/Components/Charts/ChartAnnotationRail.test.tsx +789 -0
- package/Tests/UI/Components/Charts/ChartBucketIdentity.test.ts +254 -0
- package/Tests/UI/Components/Charts/TimeAnnotation.test.ts +471 -0
- package/Tests/UI/Components/EditionLabelLicenseRefresh.test.tsx +405 -0
- package/Tests/UI/Components/ErrorMessageRefreshControl.test.tsx +83 -0
- package/Tests/UI/Components/MarkdownConverters.test.ts +686 -0
- package/Tests/UI/Components/ModelTable/BaseModelTableDeleteAndEmptyStates.test.tsx +341 -0
- package/Tests/UI/Components/OrderedStatesList.test.tsx +5 -5
- package/Tests/UI/Components/PendingProjectInvitations.test.tsx +1 -1
- package/Tests/UI/Components/TableSortAndMobileColumns.test.tsx +195 -0
- package/Tests/UI/Components/XAxis.test.ts +270 -5
- package/Tests/UI/Components/XAxisDaylightSaving.test.ts +113 -0
- package/Tests/UI/Styles/ChartFocusRing.test.ts +153 -0
- package/Tests/UI/Styles/ChartFocusRingCoverage.test.tsx +377 -0
- package/Tests/UI/Styles/ThemeStylesheet.ts +162 -0
- package/Tests/Utils/EnterpriseLicenseSeats.test.ts +507 -0
- package/Tests/Utils/NetworkDiscovery/DiscoveredDeviceBuilder.test.ts +951 -1
- package/Tests/Utils/NetworkDiscovery/DiscoveredHostUtil.test.ts +238 -0
- package/Tests/Utils/NetworkDiscovery/DiscoveryReverseDnsChain.test.ts +1056 -0
- package/Tests/Utils/NetworkDiscovery/ReverseDnsNameUtil.test.ts +882 -0
- package/Types/Date.ts +39 -0
- package/Types/Monitor/SnmpMonitor/SnmpOidListUtil.ts +333 -0
- package/Types/Permission.ts +96 -0
- package/Types/Rum/SessionReplay.ts +21 -0
- package/Types/Telemetry/SourceMap.ts +8 -0
- package/UI/Components/Charts/ChartLibrary/Annotations/AnnotationHoverCard.tsx +176 -0
- package/UI/Components/Charts/ChartLibrary/Annotations/AnnotationLayout.ts +745 -0
- package/UI/Components/Charts/ChartLibrary/Annotations/ChartAnnotationLayer.tsx +576 -0
- package/UI/Components/Charts/ChartLibrary/Annotations/UseChartAnnotations.tsx +204 -0
- package/UI/Components/Charts/ChartLibrary/AreaChart/AreaChart.tsx +491 -544
- package/UI/Components/Charts/ChartLibrary/BarChart/BarChart.tsx +324 -372
- package/UI/Components/Charts/ChartLibrary/LineChart/LineChart.tsx +487 -540
- package/UI/Components/Charts/ChartLibrary/Types/FormattedReferenceRegion.ts +7 -3
- package/UI/Components/Charts/ChartLibrary/Types/FormattedTimeReferenceLine.ts +14 -3
- package/UI/Components/Charts/Types/ChartEventKind.ts +13 -0
- package/UI/Components/Charts/Types/ReferenceRegionProps.ts +6 -0
- package/UI/Components/Charts/Types/TimeReferenceLineProps.ts +20 -3
- package/UI/Components/Charts/Utils/TimeAnnotation.ts +69 -35
- package/UI/Components/Charts/Utils/XAxis.ts +125 -18
- package/UI/Components/EditionLabel/EditionLabel.tsx +280 -26
- package/UI/Components/ErrorMessage/ErrorMessage.tsx +21 -10
- package/UI/Components/Feed/FeedItem.tsx +4 -5
- package/UI/Components/Header/HeaderIconDropdownButton.tsx +1 -2
- package/UI/Components/Header/UserProfile/UserProfile.tsx +1 -2
- package/UI/Components/Image/Image.tsx +20 -3
- package/UI/Components/Markdown.tsx/MarkdownConverters.ts +0 -0
- package/UI/Components/MemberRoleAssignment/MemberRoleAssignment.tsx +1 -2
- package/UI/Components/ModelTable/BaseModelTable.tsx +150 -24
- package/UI/Components/Table/TableHeader.tsx +64 -48
- package/UI/Components/Table/TableRow.tsx +13 -3
- package/UI/Styles/Theme.css +38 -0
- package/Utils/EnterpriseLicense/EnterpriseLicenseSeats.ts +271 -0
- package/Utils/NetworkDiscovery/AutoImportRuleMatcher.ts +6 -0
- package/Utils/NetworkDiscovery/DiscoveredDeviceBuilder.ts +141 -10
- package/Utils/NetworkDiscovery/DiscoveredHostUtil.ts +55 -3
- package/Utils/NetworkDiscovery/ReverseDnsNameUtil.ts +151 -0
- package/Utils/Rules/RuleEngineLimits.ts +32 -0
- package/build/dist/Models/AnalyticsModels/SecurityEvent.js +48 -16
- package/build/dist/Models/AnalyticsModels/SecurityEvent.js.map +1 -1
- package/build/dist/Models/AnalyticsModels/ThreatIntelIndicator.js +10 -5
- package/build/dist/Models/AnalyticsModels/ThreatIntelIndicator.js.map +1 -1
- package/build/dist/Models/DatabaseModels/AlertSeverity.js +46 -1
- package/build/dist/Models/DatabaseModels/AlertSeverity.js.map +1 -1
- package/build/dist/Models/DatabaseModels/DetectionRule.js +16 -5
- package/build/dist/Models/DatabaseModels/DetectionRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/GoogleSecOpsConnection.js +14 -5
- package/build/dist/Models/DatabaseModels/GoogleSecOpsConnection.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncidentSeverity.js +46 -1
- package/build/dist/Models/DatabaseModels/IncidentSeverity.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Index.js +2 -0
- package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
- package/build/dist/Models/DatabaseModels/NetworkDevice.js +115 -3
- package/build/dist/Models/DatabaseModels/NetworkDevice.js.map +1 -1
- package/build/dist/Models/DatabaseModels/NetworkDeviceAutoImportRule.js +88 -0
- package/build/dist/Models/DatabaseModels/NetworkDeviceAutoImportRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/NetworkDeviceDiscoveryScan.js.map +1 -1
- package/build/dist/Models/DatabaseModels/NetworkDeviceOidTemplate.js +519 -0
- package/build/dist/Models/DatabaseModels/NetworkDeviceOidTemplate.js.map +1 -0
- package/build/dist/Models/DatabaseModels/ThreatIntelFeed.js +16 -5
- package/build/dist/Models/DatabaseModels/ThreatIntelFeed.js.map +1 -1
- package/build/dist/Server/API/GlobalConfigAPI.js +293 -176
- package/build/dist/Server/API/GlobalConfigAPI.js.map +1 -1
- package/build/dist/Server/API/TelemetryAPI.js +31 -3
- package/build/dist/Server/API/TelemetryAPI.js.map +1 -1
- package/build/dist/Server/EnvironmentConfig.js +83 -0
- package/build/dist/Server/EnvironmentConfig.js.map +1 -1
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790500000000-AddNetworkDeviceOidTemplate.js +26 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790500000000-AddNetworkDeviceOidTemplate.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790600000000-AddAutoImportRuleOidTemplate.js +14 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790600000000-AddAutoImportRuleOidTemplate.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +4 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
- package/build/dist/Server/Middleware/MultipartFormData.js +93 -28
- package/build/dist/Server/Middleware/MultipartFormData.js.map +1 -1
- package/build/dist/Server/Services/AlertEpisodeLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/AlertEpisodeLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/AlertEpisodeOnCallRuleEngineService.js +8 -1
- package/build/dist/Server/Services/AlertEpisodeOnCallRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/AlertEpisodeOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/AlertEpisodeOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/AlertEpisodePrivacyRuleEngineService.js +8 -1
- package/build/dist/Server/Services/AlertEpisodePrivacyRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/AlertGroupingEngineService.js +8 -1
- package/build/dist/Server/Services/AlertGroupingEngineService.js.map +1 -1
- package/build/dist/Server/Services/AlertLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/AlertLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/AlertOnCallRuleEngineService.js +8 -1
- package/build/dist/Server/Services/AlertOnCallRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/AlertOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/AlertOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/AlertPrivacyRuleEngineService.js +8 -1
- package/build/dist/Server/Services/AlertPrivacyRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/AlertReminderRuleService.js +8 -1
- package/build/dist/Server/Services/AlertReminderRuleService.js.map +1 -1
- package/build/dist/Server/Services/AutoRemediationRuleEngineService.js +8 -1
- package/build/dist/Server/Services/AutoRemediationRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/CephClusterLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/CephClusterLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/CephClusterOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/CephClusterOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/CloudResourceLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/CloudResourceLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/CloudResourceOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/CloudResourceOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/DashboardLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/DashboardLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/DashboardOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/DashboardOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/DockerHostLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/DockerHostLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/DockerHostOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/DockerHostOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/DockerSwarmClusterLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/DockerSwarmClusterLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/DockerSwarmClusterOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/DockerSwarmClusterOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/HostLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/HostLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/HostOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/HostOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/IncidentEpisodeLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/IncidentEpisodeLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/IncidentEpisodeOnCallRuleEngineService.js +8 -1
- package/build/dist/Server/Services/IncidentEpisodeOnCallRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/IncidentEpisodeOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/IncidentEpisodeOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/IncidentEpisodePrivacyRuleEngineService.js +8 -1
- package/build/dist/Server/Services/IncidentEpisodePrivacyRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/IncidentGroupingEngineService.js +8 -1
- package/build/dist/Server/Services/IncidentGroupingEngineService.js.map +1 -1
- package/build/dist/Server/Services/IncidentLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/IncidentLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/IncidentOnCallRuleEngineService.js +8 -1
- package/build/dist/Server/Services/IncidentOnCallRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/IncidentOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/IncidentOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/IncidentPrivacyRuleEngineService.js +8 -1
- package/build/dist/Server/Services/IncidentPrivacyRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/IncidentReminderRuleService.js +8 -1
- package/build/dist/Server/Services/IncidentReminderRuleService.js.map +1 -1
- package/build/dist/Server/Services/IncidentSlaRuleService.js +8 -1
- package/build/dist/Server/Services/IncidentSlaRuleService.js.map +1 -1
- package/build/dist/Server/Services/IncomingCallPolicyLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/IncomingCallPolicyLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/IncomingCallPolicyOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/IncomingCallPolicyOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/Index.js +2 -0
- package/build/dist/Server/Services/Index.js.map +1 -1
- package/build/dist/Server/Services/IoTFleetLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/IoTFleetLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/IoTFleetOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/IoTFleetOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/KubernetesClusterLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/KubernetesClusterLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/KubernetesClusterOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/KubernetesClusterOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/KubernetesResourceService.js +5 -1
- package/build/dist/Server/Services/KubernetesResourceService.js.map +1 -1
- package/build/dist/Server/Services/MonitorLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/MonitorLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/MonitorOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/MonitorOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/NetworkDeviceAutoImportRuleEngineService.js +30 -21
- package/build/dist/Server/Services/NetworkDeviceAutoImportRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/NetworkDeviceAutoImportRuleService.js +64 -0
- package/build/dist/Server/Services/NetworkDeviceAutoImportRuleService.js.map +1 -1
- package/build/dist/Server/Services/NetworkDeviceLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/NetworkDeviceLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/NetworkDeviceOidTemplateService.js +180 -0
- package/build/dist/Server/Services/NetworkDeviceOidTemplateService.js.map +1 -0
- package/build/dist/Server/Services/NetworkDeviceOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/NetworkDeviceOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/NetworkDeviceService.js +154 -1
- package/build/dist/Server/Services/NetworkDeviceService.js.map +1 -1
- package/build/dist/Server/Services/OnCallDutyPolicyLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/OnCallDutyPolicyLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/OnCallDutyPolicyOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/OnCallDutyPolicyOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/OnCallDutyPolicyScheduleLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/OnCallDutyPolicyScheduleLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/OnCallDutyPolicyScheduleOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/OnCallDutyPolicyScheduleOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/PodmanHostLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/PodmanHostLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/PodmanHostOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/PodmanHostOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/ProxmoxClusterLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/ProxmoxClusterLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/ProxmoxClusterOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/ProxmoxClusterOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/RumApplicationLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/RumApplicationLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/RumApplicationOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/RumApplicationOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/RunbookLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/RunbookLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/RunbookOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/RunbookOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/RunbookRuleEngineService.js +8 -1
- package/build/dist/Server/Services/RunbookRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/ScheduledMaintenanceLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/ScheduledMaintenanceLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/ScheduledMaintenanceOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/ScheduledMaintenanceOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/ScheduledMaintenanceReminderRuleService.js +8 -1
- package/build/dist/Server/Services/ScheduledMaintenanceReminderRuleService.js.map +1 -1
- package/build/dist/Server/Services/ServerlessFunctionLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/ServerlessFunctionLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/ServerlessFunctionOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/ServerlessFunctionOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/ServiceLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/ServiceLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/ServiceOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/ServiceOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/StatusPageLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/StatusPageLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/StatusPageMonitorRuleEngineService.js +6 -0
- package/build/dist/Server/Services/StatusPageMonitorRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/StatusPageOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/StatusPageOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/TelemetrySourceMapService.js +213 -19
- package/build/dist/Server/Services/TelemetrySourceMapService.js.map +1 -1
- package/build/dist/Server/Services/UserService.js +25 -0
- package/build/dist/Server/Services/UserService.js.map +1 -1
- package/build/dist/Server/Services/WorkflowLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/WorkflowLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/WorkflowOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/WorkflowOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Utils/EnterpriseLicense/EnterpriseLicenseSeatUtil.js +145 -0
- package/build/dist/Server/Utils/EnterpriseLicense/EnterpriseLicenseSeatUtil.js.map +1 -0
- package/build/dist/Server/Utils/Monitor/CapturedMetricAttributeUtil.js +201 -0
- package/build/dist/Server/Utils/Monitor/CapturedMetricAttributeUtil.js.map +1 -0
- package/build/dist/Server/Utils/Monitor/Criteria/SnmpMonitorCriteria.js +19 -2
- package/build/dist/Server/Utils/Monitor/Criteria/SnmpMonitorCriteria.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorMetricUtil.js +42 -23
- package/build/dist/Server/Utils/Monitor/MonitorMetricUtil.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorTemplateUtil.js +29 -0
- package/build/dist/Server/Utils/Monitor/MonitorTemplateUtil.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/NetworkDeviceMetricUtil.js +11 -2
- package/build/dist/Server/Utils/Monitor/NetworkDeviceMetricUtil.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/NetworkDeviceWalkUtil.js +16 -1
- package/build/dist/Server/Utils/Monitor/NetworkDeviceWalkUtil.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/NetworkInventoryUtil.js +10 -0
- package/build/dist/Server/Utils/Monitor/NetworkInventoryUtil.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/SeriesResourceLabels.js +33 -0
- package/build/dist/Server/Utils/Monitor/SeriesResourceLabels.js.map +1 -1
- package/build/dist/Server/Utils/Rules/RuleEngineRuleRead.js +37 -0
- package/build/dist/Server/Utils/Rules/RuleEngineRuleRead.js.map +1 -0
- package/build/dist/Server/Utils/Telemetry/ExceptionSanitizer.js +12 -1
- package/build/dist/Server/Utils/Telemetry/ExceptionSanitizer.js.map +1 -1
- package/build/dist/Server/Utils/Telemetry/LogExceptionExtractor.js +14 -2
- package/build/dist/Server/Utils/Telemetry/LogExceptionExtractor.js.map +1 -1
- package/build/dist/Server/Utils/Telemetry/SourceMapResolver.js +15 -5
- package/build/dist/Server/Utils/Telemetry/SourceMapResolver.js.map +1 -1
- package/build/dist/Server/Utils/Telemetry/StackTraceParser.js +307 -0
- package/build/dist/Server/Utils/Telemetry/StackTraceParser.js.map +1 -1
- package/build/dist/Types/Date.js +27 -0
- package/build/dist/Types/Date.js.map +1 -1
- package/build/dist/Types/Monitor/SnmpMonitor/SnmpOidListUtil.js +253 -0
- package/build/dist/Types/Monitor/SnmpMonitor/SnmpOidListUtil.js.map +1 -0
- package/build/dist/Types/Permission.js +86 -0
- package/build/dist/Types/Permission.js.map +1 -1
- package/build/dist/Types/Rum/SessionReplay.js +19 -0
- package/build/dist/Types/Rum/SessionReplay.js.map +1 -1
- package/build/dist/UI/Components/Charts/ChartLibrary/Annotations/AnnotationHoverCard.js +83 -0
- package/build/dist/UI/Components/Charts/ChartLibrary/Annotations/AnnotationHoverCard.js.map +1 -0
- package/build/dist/UI/Components/Charts/ChartLibrary/Annotations/AnnotationLayout.js +531 -0
- package/build/dist/UI/Components/Charts/ChartLibrary/Annotations/AnnotationLayout.js.map +1 -0
- package/build/dist/UI/Components/Charts/ChartLibrary/Annotations/ChartAnnotationLayer.js +264 -0
- package/build/dist/UI/Components/Charts/ChartLibrary/Annotations/ChartAnnotationLayer.js.map +1 -0
- package/build/dist/UI/Components/Charts/ChartLibrary/Annotations/UseChartAnnotations.js +122 -0
- package/build/dist/UI/Components/Charts/ChartLibrary/Annotations/UseChartAnnotations.js.map +1 -0
- package/build/dist/UI/Components/Charts/ChartLibrary/AreaChart/AreaChart.js +213 -233
- package/build/dist/UI/Components/Charts/ChartLibrary/AreaChart/AreaChart.js.map +1 -1
- package/build/dist/UI/Components/Charts/ChartLibrary/BarChart/BarChart.js +139 -152
- package/build/dist/UI/Components/Charts/ChartLibrary/BarChart/BarChart.js.map +1 -1
- package/build/dist/UI/Components/Charts/ChartLibrary/LineChart/LineChart.js +212 -232
- package/build/dist/UI/Components/Charts/ChartLibrary/LineChart/LineChart.js.map +1 -1
- package/build/dist/UI/Components/Charts/Types/ChartEventKind.js +14 -0
- package/build/dist/UI/Components/Charts/Types/ChartEventKind.js.map +1 -0
- package/build/dist/UI/Components/Charts/Utils/TimeAnnotation.js +57 -28
- package/build/dist/UI/Components/Charts/Utils/TimeAnnotation.js.map +1 -1
- package/build/dist/UI/Components/Charts/Utils/XAxis.js +103 -17
- package/build/dist/UI/Components/Charts/Utils/XAxis.js.map +1 -1
- package/build/dist/UI/Components/EditionLabel/EditionLabel.js +198 -23
- package/build/dist/UI/Components/EditionLabel/EditionLabel.js.map +1 -1
- package/build/dist/UI/Components/ErrorMessage/ErrorMessage.js +15 -5
- package/build/dist/UI/Components/ErrorMessage/ErrorMessage.js.map +1 -1
- package/build/dist/UI/Components/Feed/FeedItem.js +4 -5
- package/build/dist/UI/Components/Feed/FeedItem.js.map +1 -1
- package/build/dist/UI/Components/Header/HeaderIconDropdownButton.js +1 -2
- package/build/dist/UI/Components/Header/HeaderIconDropdownButton.js.map +1 -1
- package/build/dist/UI/Components/Header/UserProfile/UserProfile.js.map +1 -1
- package/build/dist/UI/Components/Image/Image.js +6 -1
- package/build/dist/UI/Components/Image/Image.js.map +1 -1
- package/build/dist/UI/Components/Markdown.tsx/MarkdownConverters.js +0 -0
- package/build/dist/UI/Components/Markdown.tsx/MarkdownConverters.js.map +1 -1
- package/build/dist/UI/Components/MemberRoleAssignment/MemberRoleAssignment.js +1 -2
- package/build/dist/UI/Components/MemberRoleAssignment/MemberRoleAssignment.js.map +1 -1
- package/build/dist/UI/Components/ModelTable/BaseModelTable.js +104 -23
- package/build/dist/UI/Components/ModelTable/BaseModelTable.js.map +1 -1
- package/build/dist/UI/Components/Table/TableHeader.js +20 -22
- package/build/dist/UI/Components/Table/TableHeader.js.map +1 -1
- package/build/dist/UI/Components/Table/TableRow.js +13 -4
- package/build/dist/UI/Components/Table/TableRow.js.map +1 -1
- package/build/dist/Utils/EnterpriseLicense/EnterpriseLicenseSeats.js +153 -0
- package/build/dist/Utils/EnterpriseLicense/EnterpriseLicenseSeats.js.map +1 -0
- package/build/dist/Utils/NetworkDiscovery/AutoImportRuleMatcher.js.map +1 -1
- package/build/dist/Utils/NetworkDiscovery/DiscoveredDeviceBuilder.js +127 -7
- package/build/dist/Utils/NetworkDiscovery/DiscoveredDeviceBuilder.js.map +1 -1
- package/build/dist/Utils/NetworkDiscovery/DiscoveredHostUtil.js +50 -3
- package/build/dist/Utils/NetworkDiscovery/DiscoveredHostUtil.js.map +1 -1
- package/build/dist/Utils/NetworkDiscovery/ReverseDnsNameUtil.js +132 -0
- package/build/dist/Utils/NetworkDiscovery/ReverseDnsNameUtil.js.map +1 -0
- package/build/dist/Utils/Rules/RuleEngineLimits.js +31 -0
- package/build/dist/Utils/Rules/RuleEngineLimits.js.map +1 -0
- package/jest.config.json +1 -0
- package/package.json +2 -2
|
@@ -32,6 +32,7 @@ import {
|
|
|
32
32
|
BulkActionOnClickProps,
|
|
33
33
|
} from "../BulkUpdate/BulkUpdateForm";
|
|
34
34
|
import Button, { ButtonSize, ButtonStyleType } from "../Button/Button";
|
|
35
|
+
import CopyTextButton from "../CopyTextButton/CopyTextButton";
|
|
35
36
|
import MoreMenu from "../MoreMenu/MoreMenu";
|
|
36
37
|
import MoreMenuItem from "../MoreMenu/MoreMenuItem";
|
|
37
38
|
import Card, {
|
|
@@ -418,6 +419,72 @@ export enum ModalType {
|
|
|
418
419
|
Edit,
|
|
419
420
|
}
|
|
420
421
|
|
|
422
|
+
/*
|
|
423
|
+
* The fields a row is worth naming itself by, in the order a human would pick
|
|
424
|
+
* one. `title` is not decoration here: incidents, alerts and scheduled
|
|
425
|
+
* maintenance key on `title` rather than `name`, and those are exactly the
|
|
426
|
+
* tables where deleting the row next to the one you meant hurts most.
|
|
427
|
+
*
|
|
428
|
+
* Only the fields the table already selected are present on the row, so this
|
|
429
|
+
* reads whatever is there and gives up quietly rather than guessing.
|
|
430
|
+
*/
|
|
431
|
+
const ITEM_LABEL_FIELDS: Array<string> = [
|
|
432
|
+
"name",
|
|
433
|
+
"title",
|
|
434
|
+
"slug",
|
|
435
|
+
"email",
|
|
436
|
+
"username",
|
|
437
|
+
"domain",
|
|
438
|
+
];
|
|
439
|
+
|
|
440
|
+
type ReadLabelFieldFunction = (value: unknown) => string;
|
|
441
|
+
|
|
442
|
+
/*
|
|
443
|
+
* Some of these fields arrive as objects with a meaningful toString - Name,
|
|
444
|
+
* Email, ObjectID all define one. Anything that does not is skipped rather
|
|
445
|
+
* than rendered as "[object Object]".
|
|
446
|
+
*/
|
|
447
|
+
const readLabelField: ReadLabelFieldFunction = (value: unknown): string => {
|
|
448
|
+
if (typeof value === "string") {
|
|
449
|
+
return value.trim();
|
|
450
|
+
}
|
|
451
|
+
|
|
452
|
+
if (value === null || value === undefined) {
|
|
453
|
+
return "";
|
|
454
|
+
}
|
|
455
|
+
|
|
456
|
+
const text: string = String(value);
|
|
457
|
+
|
|
458
|
+
return text === "[object Object]" ? "" : text.trim();
|
|
459
|
+
};
|
|
460
|
+
|
|
461
|
+
type GetItemLabelFunction = (item: unknown) => string;
|
|
462
|
+
|
|
463
|
+
/*
|
|
464
|
+
* Every per-row Delete in the product opened the same dialog: "Are you sure
|
|
465
|
+
* you want to delete this monitor?" - a sentence equally true of the row that
|
|
466
|
+
* was clicked and of the twenty either side of it. That is precisely the
|
|
467
|
+
* moment a user wants to be told which one, and the one moment the dialog
|
|
468
|
+
* would not say.
|
|
469
|
+
*/
|
|
470
|
+
const getItemLabel: GetItemLabelFunction = (item: unknown): string => {
|
|
471
|
+
if (!item || typeof item !== "object") {
|
|
472
|
+
return "";
|
|
473
|
+
}
|
|
474
|
+
|
|
475
|
+
const record: Record<string, unknown> = item as Record<string, unknown>;
|
|
476
|
+
|
|
477
|
+
for (const field of ITEM_LABEL_FIELDS) {
|
|
478
|
+
const label: string = readLabelField(record[field]);
|
|
479
|
+
|
|
480
|
+
if (label) {
|
|
481
|
+
return label;
|
|
482
|
+
}
|
|
483
|
+
}
|
|
484
|
+
|
|
485
|
+
return "";
|
|
486
|
+
};
|
|
487
|
+
|
|
421
488
|
const BaseModelTable: <TBaseModel extends BaseModel | AnalyticsBaseModel>(
|
|
422
489
|
props: ComponentProps<TBaseModel>,
|
|
423
490
|
) => ReactElement = <TBaseModel extends BaseModel | AnalyticsBaseModel>(
|
|
@@ -2921,6 +2988,54 @@ const BaseModelTable: <TBaseModel extends BaseModel | AnalyticsBaseModel>(
|
|
|
2921
2988
|
return isSearchActive() ? false : isLoading;
|
|
2922
2989
|
};
|
|
2923
2990
|
|
|
2991
|
+
type HasFilterAppliedFunction = (
|
|
2992
|
+
dataToCheck: FilterData<TBaseModel>,
|
|
2993
|
+
) => boolean;
|
|
2994
|
+
|
|
2995
|
+
/*
|
|
2996
|
+
* Lifted out of the onFilterChanged callback below, which is where this test
|
|
2997
|
+
* used to live inline. Two definitions of "a filter is applied" in one
|
|
2998
|
+
* component is exactly the kind of thing that drifts apart.
|
|
2999
|
+
*/
|
|
3000
|
+
const hasFilterApplied: HasFilterAppliedFunction = (
|
|
3001
|
+
dataToCheck: FilterData<TBaseModel>,
|
|
3002
|
+
): boolean => {
|
|
3003
|
+
for (const key in dataToCheck) {
|
|
3004
|
+
if (dataToCheck[key]) {
|
|
3005
|
+
return true;
|
|
3006
|
+
}
|
|
3007
|
+
}
|
|
3008
|
+
|
|
3009
|
+
return false;
|
|
3010
|
+
};
|
|
3011
|
+
|
|
3012
|
+
type GetNoItemsMessageFunction = () => string | ReactElement;
|
|
3013
|
+
|
|
3014
|
+
/*
|
|
3015
|
+
* An empty table has two quite different causes and used to have one
|
|
3016
|
+
* sentence for both. A monitors table with nothing in it said "No monitor"
|
|
3017
|
+
* - ungrammatical, and worse, it said the same thing after a search that
|
|
3018
|
+
* matched nothing, so a typo in the search box looked exactly like an empty
|
|
3019
|
+
* project. A caller's own noItemsMessage is deliberately overridden while a
|
|
3020
|
+
* search or filter is active: those are usually "create your first X"
|
|
3021
|
+
* panels, and offering one to someone whose search just missed is wrong.
|
|
3022
|
+
*/
|
|
3023
|
+
const getNoItemsMessage: GetNoItemsMessageFunction = ():
|
|
3024
|
+
| string
|
|
3025
|
+
| ReactElement => {
|
|
3026
|
+
const plural: string = (
|
|
3027
|
+
props.pluralName ||
|
|
3028
|
+
model.pluralName ||
|
|
3029
|
+
"items"
|
|
3030
|
+
).toLocaleLowerCase();
|
|
3031
|
+
|
|
3032
|
+
if (isSearchActive() || hasFilterApplied(filterData)) {
|
|
3033
|
+
return `${tx("No")} ${plural} ${tx("match your search or filters.")}`;
|
|
3034
|
+
}
|
|
3035
|
+
|
|
3036
|
+
return props.noItemsMessage || `${tx("No")} ${plural} ${tx("yet.")}`;
|
|
3037
|
+
};
|
|
3038
|
+
|
|
2924
3039
|
const getTable: GetReactElementFunction = (): ReactElement => {
|
|
2925
3040
|
return (
|
|
2926
3041
|
<Table
|
|
@@ -2929,17 +3044,8 @@ const BaseModelTable: <TBaseModel extends BaseModel | AnalyticsBaseModel>(
|
|
|
2929
3044
|
setTableView(null);
|
|
2930
3045
|
|
|
2931
3046
|
// check if there's anything in the filter data and update the isFilterApplied prop.
|
|
2932
|
-
let isFilterApplied: boolean = false;
|
|
2933
|
-
|
|
2934
|
-
for (const key in filterData) {
|
|
2935
|
-
if (filterData[key]) {
|
|
2936
|
-
isFilterApplied = true;
|
|
2937
|
-
break;
|
|
2938
|
-
}
|
|
2939
|
-
}
|
|
2940
|
-
|
|
2941
3047
|
if (props.onFilterApplied) {
|
|
2942
|
-
props.onFilterApplied(
|
|
3048
|
+
props.onFilterApplied(hasFilterApplied(filterData));
|
|
2943
3049
|
}
|
|
2944
3050
|
}}
|
|
2945
3051
|
filterData={filterData}
|
|
@@ -3127,9 +3233,8 @@ const BaseModelTable: <TBaseModel extends BaseModel | AnalyticsBaseModel>(
|
|
|
3127
3233
|
matchBulkSelectedItemByField={matchBulkSelectedItemByField || "_id"}
|
|
3128
3234
|
bulkItemToString={(item: TBaseModel) => {
|
|
3129
3235
|
const label: string = props.singularName || item.singularName || "";
|
|
3130
|
-
|
|
3131
|
-
|
|
3132
|
-
"";
|
|
3236
|
+
// Same deriver the delete confirmation uses, so the two cannot drift.
|
|
3237
|
+
const name: string = getItemLabel(item);
|
|
3133
3238
|
if (name) {
|
|
3134
3239
|
return label ? `${label}: ${name}` : name;
|
|
3135
3240
|
}
|
|
@@ -3200,7 +3305,7 @@ const BaseModelTable: <TBaseModel extends BaseModel | AnalyticsBaseModel>(
|
|
|
3200
3305
|
|
|
3201
3306
|
setItemsOnPage(newItemsOnPage);
|
|
3202
3307
|
}}
|
|
3203
|
-
noItemsMessage={
|
|
3308
|
+
noItemsMessage={getNoItemsMessage()}
|
|
3204
3309
|
onRefreshClick={async () => {
|
|
3205
3310
|
await fetchItems();
|
|
3206
3311
|
}}
|
|
@@ -3256,7 +3361,7 @@ const BaseModelTable: <TBaseModel extends BaseModel | AnalyticsBaseModel>(
|
|
|
3256
3361
|
shouldAddItemInTheEnd={
|
|
3257
3362
|
props.orderedStatesListProps.shouldAddItemInTheEnd
|
|
3258
3363
|
}
|
|
3259
|
-
noItemsMessage={
|
|
3364
|
+
noItemsMessage={getNoItemsMessage()}
|
|
3260
3365
|
onRefreshClick={async () => {
|
|
3261
3366
|
await fetchItems();
|
|
3262
3367
|
}}
|
|
@@ -3343,7 +3448,7 @@ const BaseModelTable: <TBaseModel extends BaseModel | AnalyticsBaseModel>(
|
|
|
3343
3448
|
|
|
3344
3449
|
setItemsOnPage(newItemsOnPage);
|
|
3345
3450
|
}}
|
|
3346
|
-
noItemsMessage={
|
|
3451
|
+
noItemsMessage={getNoItemsMessage()}
|
|
3347
3452
|
onRefreshClick={async () => {
|
|
3348
3453
|
await fetchItems();
|
|
3349
3454
|
}}
|
|
@@ -4498,11 +4603,18 @@ const BaseModelTable: <TBaseModel extends BaseModel | AnalyticsBaseModel>(
|
|
|
4498
4603
|
{showDeleteConfirmModal && (
|
|
4499
4604
|
<ConfirmModal
|
|
4500
4605
|
title={`Delete ${props.singularName || model.singularName}`}
|
|
4501
|
-
description={
|
|
4502
|
-
|
|
4503
|
-
|
|
4504
|
-
|
|
4505
|
-
|
|
4606
|
+
description={((): string => {
|
|
4607
|
+
const label: string = (
|
|
4608
|
+
props.singularName ||
|
|
4609
|
+
model.singularName ||
|
|
4610
|
+
"item"
|
|
4611
|
+
).toLowerCase();
|
|
4612
|
+
const name: string = getItemLabel(currentDeleteableItem);
|
|
4613
|
+
|
|
4614
|
+
return `Are you sure you want to delete ${
|
|
4615
|
+
name ? `"${name}"` : `this ${label}`
|
|
4616
|
+
}? This action cannot be undone.`;
|
|
4617
|
+
})()}
|
|
4506
4618
|
onClose={() => {
|
|
4507
4619
|
setShowDeleteConfirmModal(false);
|
|
4508
4620
|
}}
|
|
@@ -4535,10 +4647,24 @@ const BaseModelTable: <TBaseModel extends BaseModel | AnalyticsBaseModel>(
|
|
|
4535
4647
|
description={
|
|
4536
4648
|
<div>
|
|
4537
4649
|
<span>
|
|
4538
|
-
ID of this {props.singularName || model.singularName || ""}:
|
|
4539
|
-
{viewId}
|
|
4650
|
+
ID of this {props.singularName || model.singularName || ""}:
|
|
4540
4651
|
</span>
|
|
4541
|
-
|
|
4652
|
+
{/*
|
|
4653
|
+
* Handing over the id is the entire point of this dialog, and it
|
|
4654
|
+
* used to be inline prose the user had to select by hand - an
|
|
4655
|
+
* awkward drag over a 36-character UUID, and easy to clip a
|
|
4656
|
+
* character. It gets its own row and a copy button now.
|
|
4657
|
+
*/}
|
|
4658
|
+
<div className="mt-2 flex items-center gap-2 rounded-md border border-gray-200 bg-gray-50 px-3 py-2">
|
|
4659
|
+
<code className="flex-1 break-all font-mono text-xs text-gray-800">
|
|
4660
|
+
{viewId}
|
|
4661
|
+
</code>
|
|
4662
|
+
<CopyTextButton
|
|
4663
|
+
textToBeCopied={viewId || ""}
|
|
4664
|
+
size="sm"
|
|
4665
|
+
title="Copy ID to clipboard"
|
|
4666
|
+
/>
|
|
4667
|
+
</div>
|
|
4542
4668
|
<br />
|
|
4543
4669
|
|
|
4544
4670
|
<span>
|
|
@@ -6,6 +6,7 @@ import Columns from "./Types/Columns";
|
|
|
6
6
|
import SortOrder, {
|
|
7
7
|
SortOrderToAriaSortMap,
|
|
8
8
|
} from "../../../Types/BaseDatabase/SortOrder";
|
|
9
|
+
import { VoidFunction } from "../../../Types/FunctionTypes";
|
|
9
10
|
import GenericObject from "../../../Types/GenericObject";
|
|
10
11
|
import IconProp from "../../../Types/Icon/IconProp";
|
|
11
12
|
import useTranslateValue from "../../Utils/Translation";
|
|
@@ -113,60 +114,75 @@ const TableHeader: TableHeaderFunction = <T extends GenericObject>(
|
|
|
113
114
|
? "none"
|
|
114
115
|
: undefined;
|
|
115
116
|
|
|
117
|
+
const sortColumn: VoidFunction = (): void => {
|
|
118
|
+
if (!column.key || !canSort) {
|
|
119
|
+
return;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
const sortOrder: SortOrder =
|
|
123
|
+
props.sortOrder === SortOrder.Ascending
|
|
124
|
+
? SortOrder.Descending
|
|
125
|
+
: SortOrder.Ascending;
|
|
126
|
+
|
|
127
|
+
props.onSortChanged(column.key, sortOrder);
|
|
128
|
+
};
|
|
129
|
+
|
|
130
|
+
const contentClassName: string = `flex w-full px-6 py-3 ${
|
|
131
|
+
column.type === FieldType.Actions
|
|
132
|
+
? "justify-end"
|
|
133
|
+
: "justify-start"
|
|
134
|
+
}`;
|
|
135
|
+
|
|
136
|
+
const headerContent: ReactElement = (
|
|
137
|
+
<>
|
|
138
|
+
{translateString(column.title) ?? column.title}
|
|
139
|
+
{canSort &&
|
|
140
|
+
props.sortBy === column.key &&
|
|
141
|
+
props.sortOrder === SortOrder.Ascending && (
|
|
142
|
+
<Icon
|
|
143
|
+
icon={IconProp.ChevronUp}
|
|
144
|
+
thick={ThickProp.Thick}
|
|
145
|
+
className="ml-2 p-1 flex-none rounded bg-gray-200 text-gray-500 group-hover:bg-gray-300 h-4 w-4"
|
|
146
|
+
/>
|
|
147
|
+
)}
|
|
148
|
+
{canSort &&
|
|
149
|
+
props.sortBy === column.key &&
|
|
150
|
+
props.sortOrder === SortOrder.Descending && (
|
|
151
|
+
<Icon
|
|
152
|
+
icon={IconProp.ChevronDown}
|
|
153
|
+
thick={ThickProp.Thick}
|
|
154
|
+
className="ml-2 p-1 flex-none rounded bg-gray-200 text-gray-500 group-hover:bg-gray-300 h-4 w-4"
|
|
155
|
+
/>
|
|
156
|
+
)}
|
|
157
|
+
</>
|
|
158
|
+
);
|
|
159
|
+
|
|
116
160
|
return (
|
|
117
161
|
<th
|
|
118
162
|
key={i}
|
|
119
163
|
scope="col"
|
|
120
164
|
aria-sort={ariaSort}
|
|
121
|
-
className=
|
|
122
|
-
canSort ? "cursor-pointer" : ""
|
|
123
|
-
}`}
|
|
124
|
-
onClick={() => {
|
|
125
|
-
if (!column.key) {
|
|
126
|
-
return;
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
if (!canSort) {
|
|
130
|
-
return;
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
const sortOrder: SortOrder =
|
|
134
|
-
props.sortOrder === SortOrder.Ascending
|
|
135
|
-
? SortOrder.Descending
|
|
136
|
-
: SortOrder.Ascending;
|
|
137
|
-
|
|
138
|
-
const currentSortColumn: keyof T = column.key;
|
|
139
|
-
|
|
140
|
-
props.onSortChanged(currentSortColumn, sortOrder);
|
|
141
|
-
}}
|
|
165
|
+
className="text-left text-sm font-semibold text-gray-900"
|
|
142
166
|
>
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
{
|
|
161
|
-
|
|
162
|
-
props.sortOrder === SortOrder.Descending && (
|
|
163
|
-
<Icon
|
|
164
|
-
icon={IconProp.ChevronDown}
|
|
165
|
-
thick={ThickProp.Thick}
|
|
166
|
-
className="ml-2 p-1 flex-none rounded bg-gray-200 text-gray-500 group-hover:bg-gray-300 h-4 w-4"
|
|
167
|
-
/>
|
|
168
|
-
)}
|
|
169
|
-
</div>
|
|
167
|
+
{/*
|
|
168
|
+
* The sort handler used to sit on the <th> itself, which is
|
|
169
|
+
* not focusable and does not answer Enter or Space - so
|
|
170
|
+
* sorting any table in the product was mouse-only, even though
|
|
171
|
+
* aria-sort was already announcing the column as sortable. The
|
|
172
|
+
* padding moves onto the button so the clickable area is the
|
|
173
|
+
* whole cell, exactly as before.
|
|
174
|
+
*/}
|
|
175
|
+
{canSort ? (
|
|
176
|
+
<button
|
|
177
|
+
type="button"
|
|
178
|
+
onClick={sortColumn}
|
|
179
|
+
className={`${contentClassName} cursor-pointer text-left font-semibold text-gray-900 focus:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-indigo-500`}
|
|
180
|
+
>
|
|
181
|
+
{headerContent}
|
|
182
|
+
</button>
|
|
183
|
+
) : (
|
|
184
|
+
<div className={contentClassName}>{headerContent}</div>
|
|
185
|
+
)}
|
|
170
186
|
</th>
|
|
171
187
|
);
|
|
172
188
|
})}
|
|
@@ -95,10 +95,20 @@ const TableRow: TableRowFunction = <T extends GenericObject>(
|
|
|
95
95
|
};
|
|
96
96
|
}, []);
|
|
97
97
|
|
|
98
|
+
/*
|
|
99
|
+
* The local isMobile state above starts false and is only corrected inside
|
|
100
|
+
* an effect, i.e. after the first paint. TableBody already knows which
|
|
101
|
+
* layout it is mounting and says so explicitly, so prefer what it passed:
|
|
102
|
+
* without this, a mobile card renders its hideOnMobile columns for one frame
|
|
103
|
+
* and then drops them, which is a visible jump on exactly the narrow screens
|
|
104
|
+
* the flag exists to protect.
|
|
105
|
+
*/
|
|
106
|
+
const isMobileView: boolean = props.isMobile ?? isMobile;
|
|
107
|
+
|
|
98
108
|
// The columns this row will actually put on screen.
|
|
99
109
|
const renderedColumns: Array<Column<T>> = (props.columns || []).filter(
|
|
100
110
|
(column: Column<T>) => {
|
|
101
|
-
return !(column.hideOnMobile &&
|
|
111
|
+
return !(column.hideOnMobile && isMobileView);
|
|
102
112
|
},
|
|
103
113
|
);
|
|
104
114
|
|
|
@@ -175,7 +185,7 @@ const TableRow: TableRowFunction = <T extends GenericObject>(
|
|
|
175
185
|
)}
|
|
176
186
|
|
|
177
187
|
<div className="space-y-3">
|
|
178
|
-
{
|
|
188
|
+
{renderedColumns.map((column: Column<T>, i: number) => {
|
|
179
189
|
if (column.type === FieldType.Actions) {
|
|
180
190
|
return (
|
|
181
191
|
<div key={i} className="flex flex-wrap gap-2">
|
|
@@ -520,7 +530,7 @@ const TableRow: TableRowFunction = <T extends GenericObject>(
|
|
|
520
530
|
}
|
|
521
531
|
|
|
522
532
|
// Hide button on mobile if hideOnMobile is true
|
|
523
|
-
if (button.hideOnMobile &&
|
|
533
|
+
if (button.hideOnMobile && isMobileView) {
|
|
524
534
|
return <div key={i}></div>;
|
|
525
535
|
}
|
|
526
536
|
|
package/UI/Styles/Theme.css
CHANGED
|
@@ -24,6 +24,7 @@
|
|
|
24
24
|
--ou-chart-cursor: #d1d5db;
|
|
25
25
|
--ou-chart-track: #eef2f7;
|
|
26
26
|
--ou-chart-marker-ring: #ffffff;
|
|
27
|
+
--ou-chart-focus-ring: #4f46e5;
|
|
27
28
|
--ou-flow-mask: rgb(241 245 249 / 70%);
|
|
28
29
|
--ou-accent-soft: #eef2ff;
|
|
29
30
|
--ou-accent-muted: #e0e7ff;
|
|
@@ -73,6 +74,7 @@ html.dark {
|
|
|
73
74
|
--ou-chart-cursor: #64748b;
|
|
74
75
|
--ou-chart-track: #334155;
|
|
75
76
|
--ou-chart-marker-ring: #172033;
|
|
77
|
+
--ou-chart-focus-ring: #818cf8;
|
|
76
78
|
--ou-flow-mask: rgb(15 23 42 / 72%);
|
|
77
79
|
--ou-accent-soft: #1e1b4b;
|
|
78
80
|
--ou-accent-muted: #312e81;
|
|
@@ -1350,6 +1352,42 @@ html.dark ::backdrop {
|
|
|
1350
1352
|
background-color: var(--ou-background-primary);
|
|
1351
1353
|
}
|
|
1352
1354
|
|
|
1355
|
+
/*
|
|
1356
|
+
* Chart focus rings. Both themes -- the black box this replaces was never a
|
|
1357
|
+
* dark-mode-only problem.
|
|
1358
|
+
*
|
|
1359
|
+
* recharts leaves its accessibility layer on by default, which puts
|
|
1360
|
+
* tabindex="0" on the root <svg> of every chart. Chrome's SVG user-agent
|
|
1361
|
+
* stylesheet rings a focused <svg> on plain :focus -- not on :focus-visible,
|
|
1362
|
+
* the way it treats focusable HTML -- so simply pressing the mouse inside a
|
|
1363
|
+
* chart paints a hard black rectangle around the entire plot. Dragging out a
|
|
1364
|
+
* zoom range on the Logs and Traces volume charts lands focus there every
|
|
1365
|
+
* time, which is how https://github.com/OneUptime/oneuptime/issues/3528 was
|
|
1366
|
+
* reported: a black box around the graph, over the data, for the rest of the
|
|
1367
|
+
* session.
|
|
1368
|
+
*
|
|
1369
|
+
* Dropping the ring and stopping there would take a real affordance with it:
|
|
1370
|
+
* arrow keys walk the tooltip across a focused chart. So it is drawn again
|
|
1371
|
+
* for :focus-visible only, in the app's own accent, which is what a reader
|
|
1372
|
+
* who arrived by keyboard gets and a reader who arrived by mouse does not.
|
|
1373
|
+
*
|
|
1374
|
+
* The descendant half covers the focusable <g> elements the annotation layer
|
|
1375
|
+
* draws inside the plot: event chips and highlighted windows are clickable by
|
|
1376
|
+
* design, so a pointer lands on them routinely, and each one was getting
|
|
1377
|
+
* boxed the same way.
|
|
1378
|
+
*/
|
|
1379
|
+
.recharts-surface:focus,
|
|
1380
|
+
.recharts-surface [tabindex]:focus {
|
|
1381
|
+
outline: none;
|
|
1382
|
+
}
|
|
1383
|
+
|
|
1384
|
+
.recharts-surface:focus-visible,
|
|
1385
|
+
.recharts-surface [tabindex]:focus-visible {
|
|
1386
|
+
outline: 2px solid var(--ou-chart-focus-ring);
|
|
1387
|
+
outline-offset: 2px;
|
|
1388
|
+
border-radius: 6px;
|
|
1389
|
+
}
|
|
1390
|
+
|
|
1353
1391
|
/*
|
|
1354
1392
|
* Motion. Tailwind here is the Play-CDN runtime configured inline per app, so
|
|
1355
1393
|
* a new animate-* utility name would silently generate nothing unless its
|