@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
|
@@ -47,6 +47,7 @@ const DOMAIN_PREFIXES: Array<[string, string]> = [
|
|
|
47
47
|
["Monitor", "Monitor"],
|
|
48
48
|
["Workflow", "Workflow"],
|
|
49
49
|
["Runbook", "Runbook"],
|
|
50
|
+
["Security", "Security"],
|
|
50
51
|
];
|
|
51
52
|
|
|
52
53
|
/*
|
|
@@ -63,6 +64,19 @@ const DOMAIN_BY_MODEL: Record<string, string> = {
|
|
|
63
64
|
LogSavedView: "Telemetry",
|
|
64
65
|
MetricSavedView: "Telemetry",
|
|
65
66
|
TraceSavedView: "Telemetry",
|
|
67
|
+
|
|
68
|
+
/*
|
|
69
|
+
* The whole SIEM, and not one table of it is named for its domain: a Sigma
|
|
70
|
+
* rule, a TAXII subscription and a Chronicle connector. They shipped reading
|
|
71
|
+
* through the Telemetry tiers because they arrived beside logs and traces in
|
|
72
|
+
* ClickHouse, which made "can read every log in the project" and "can read the
|
|
73
|
+
* security events" one decision. Splitting them is what the Security tiers are
|
|
74
|
+
* for, and naming the three models here is what keeps a fourth from quietly
|
|
75
|
+
* shipping back under Telemetry.
|
|
76
|
+
*/
|
|
77
|
+
DetectionRule: "Security",
|
|
78
|
+
ThreatIntelFeed: "Security",
|
|
79
|
+
GoogleSecOpsConnection: "Security",
|
|
66
80
|
};
|
|
67
81
|
|
|
68
82
|
/*
|
|
@@ -0,0 +1,543 @@
|
|
|
1
|
+
import AllModelTypes from "../../../Models/DatabaseModels/Index";
|
|
2
|
+
import AllAnalyticsModelTypes from "../../../Models/AnalyticsModels/Index";
|
|
3
|
+
import BaseModel from "../../../Models/DatabaseModels/DatabaseBaseModel/DatabaseBaseModel";
|
|
4
|
+
import AnalyticsBaseModel from "../../../Models/AnalyticsModels/AnalyticsBaseModel/AnalyticsBaseModel";
|
|
5
|
+
import { describe, expect, it } from "@jest/globals";
|
|
6
|
+
|
|
7
|
+
/*
|
|
8
|
+
* Registry-wide identity invariants.
|
|
9
|
+
*
|
|
10
|
+
* Every entity in the product is declared once, in a decorator block, and
|
|
11
|
+
* added to Models/DatabaseModels/Index.ts by hand. New entities are almost
|
|
12
|
+
* always written by copying the closest existing one, which makes the
|
|
13
|
+
* failure mode here a very specific and very quiet kind: a value that was
|
|
14
|
+
* meant to be changed during the copy and was not.
|
|
15
|
+
*
|
|
16
|
+
* What makes that worth a sweep rather than a review checklist is that the
|
|
17
|
+
* two identity values below are read at runtime by machinery that has no way
|
|
18
|
+
* to notice a collision:
|
|
19
|
+
*
|
|
20
|
+
* - `tableName` is the Postgres table the entity is persisted to. Two models
|
|
21
|
+
* naming one table are two different shapes writing to the same rows.
|
|
22
|
+
* - `crudApiPath` is the route BaseAPI registers CRUD under. Two models
|
|
23
|
+
* naming one path means whichever registers second shadows the first, and
|
|
24
|
+
* an entire entity's API silently answers as another entity.
|
|
25
|
+
*
|
|
26
|
+
* Neither produces an error at startup. Both produce a product that is wrong
|
|
27
|
+
* in a way that looks like a data bug from the outside.
|
|
28
|
+
*
|
|
29
|
+
* The remaining assertions cover the values the generated OpenAPI document
|
|
30
|
+
* and the dashboard read off a model -- a documented model with no
|
|
31
|
+
* description, or no display name, is a hole in the published API reference
|
|
32
|
+
* rather than a crash, which is exactly why nobody notices it.
|
|
33
|
+
*
|
|
34
|
+
* Sweeping every model rather than asserting on a list is the point: a
|
|
35
|
+
* mis-copied value in a model nobody is looking at fails here rather than in
|
|
36
|
+
* production.
|
|
37
|
+
*/
|
|
38
|
+
|
|
39
|
+
type ModelType = { new (): BaseModel };
|
|
40
|
+
type AnalyticsModelType = { new (): AnalyticsBaseModel };
|
|
41
|
+
|
|
42
|
+
const MODEL_TYPES: Array<ModelType> = AllModelTypes as Array<ModelType>;
|
|
43
|
+
|
|
44
|
+
const ANALYTICS_MODEL_TYPES: Array<AnalyticsModelType> =
|
|
45
|
+
AllAnalyticsModelTypes as unknown as Array<AnalyticsModelType>;
|
|
46
|
+
|
|
47
|
+
/*
|
|
48
|
+
* A flat snapshot of the declarations, NOT the model instances.
|
|
49
|
+
*
|
|
50
|
+
* The first version of this file kept all 416 constructed models alive for the
|
|
51
|
+
* lifetime of the file, which is a large object graph resident in a Jest
|
|
52
|
+
* worker whose heap ceiling is deliberately tight (see the note in
|
|
53
|
+
* .github/workflows/test.common.yaml: 2 workers x 4 GB, live set peaking near
|
|
54
|
+
* 3.5 GB). This file shares a shard with the isolated-vm SSRF suite, which
|
|
55
|
+
* needs CPU and memory of its own and reports starvation as a script timeout
|
|
56
|
+
* rather than as an out-of-memory.
|
|
57
|
+
*
|
|
58
|
+
* Every assertion below is about scalar declarations, so the instances exist
|
|
59
|
+
* only long enough to read those off and are collectable immediately after.
|
|
60
|
+
*/
|
|
61
|
+
interface RegisteredModel {
|
|
62
|
+
className: string;
|
|
63
|
+
tableName: string | null;
|
|
64
|
+
crudApiPath: string | null;
|
|
65
|
+
singularName: string | null;
|
|
66
|
+
pluralName: string | null;
|
|
67
|
+
enableDocumentation: boolean;
|
|
68
|
+
tableDescription: string | null;
|
|
69
|
+
slugifyColumn: string | null;
|
|
70
|
+
saveSlugToColumn: string | null;
|
|
71
|
+
columns: Array<string>;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
const REGISTERED_MODELS: Array<RegisteredModel> = MODEL_TYPES.map(
|
|
75
|
+
(ModelClass: ModelType): RegisteredModel => {
|
|
76
|
+
const model: BaseModel = new ModelClass();
|
|
77
|
+
|
|
78
|
+
return {
|
|
79
|
+
className: ModelClass.name,
|
|
80
|
+
tableName: model.tableName,
|
|
81
|
+
crudApiPath: model.crudApiPath ? model.crudApiPath.toString() : null,
|
|
82
|
+
singularName: model.singularName,
|
|
83
|
+
pluralName: model.pluralName,
|
|
84
|
+
enableDocumentation: Boolean(model.enableDocumentation),
|
|
85
|
+
tableDescription: model.tableDescription,
|
|
86
|
+
slugifyColumn: model.slugifyColumn,
|
|
87
|
+
saveSlugToColumn: model.saveSlugToColumn,
|
|
88
|
+
columns: model.getTableColumns().columns,
|
|
89
|
+
};
|
|
90
|
+
},
|
|
91
|
+
);
|
|
92
|
+
|
|
93
|
+
/*
|
|
94
|
+
* Collect every class name that claims `key`, so a failure names both sides of
|
|
95
|
+
* the collision rather than only reporting that a count was wrong.
|
|
96
|
+
*/
|
|
97
|
+
const groupBy: (
|
|
98
|
+
keyOf: (entry: RegisteredModel) => string | null,
|
|
99
|
+
) => Array<string> = (
|
|
100
|
+
keyOf: (entry: RegisteredModel) => string | null,
|
|
101
|
+
): Array<string> => {
|
|
102
|
+
const claimants: Map<string, Array<string>> = new Map();
|
|
103
|
+
|
|
104
|
+
for (const entry of REGISTERED_MODELS) {
|
|
105
|
+
const key: string | null = keyOf(entry);
|
|
106
|
+
|
|
107
|
+
if (!key) {
|
|
108
|
+
continue;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
claimants.set(key, [...(claimants.get(key) || []), entry.className]);
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
return Array.from(claimants.entries())
|
|
115
|
+
.filter((pair: [string, Array<string>]) => {
|
|
116
|
+
return pair[1].length > 1;
|
|
117
|
+
})
|
|
118
|
+
.map((pair: [string, Array<string>]) => {
|
|
119
|
+
return `${pair[0]}: ${pair[1].join(", ")}`;
|
|
120
|
+
})
|
|
121
|
+
.sort();
|
|
122
|
+
};
|
|
123
|
+
|
|
124
|
+
describe("Database model registry", () => {
|
|
125
|
+
it("registers at least one model", () => {
|
|
126
|
+
/*
|
|
127
|
+
* Guards every sweep below. An Index.ts that resolved to an empty array
|
|
128
|
+
* would make each of them pass vacuously.
|
|
129
|
+
*/
|
|
130
|
+
expect(REGISTERED_MODELS.length).toBeGreaterThan(0);
|
|
131
|
+
});
|
|
132
|
+
|
|
133
|
+
it("gives every model a table name", () => {
|
|
134
|
+
const missing: Array<string> = REGISTERED_MODELS.filter(
|
|
135
|
+
(entry: RegisteredModel) => {
|
|
136
|
+
return !entry.tableName;
|
|
137
|
+
},
|
|
138
|
+
).map((entry: RegisteredModel) => {
|
|
139
|
+
return entry.className;
|
|
140
|
+
});
|
|
141
|
+
|
|
142
|
+
expect(missing).toEqual([]);
|
|
143
|
+
});
|
|
144
|
+
|
|
145
|
+
/*
|
|
146
|
+
* The collision that persists two different shapes into one set of rows.
|
|
147
|
+
*/
|
|
148
|
+
it("gives every model its own table", () => {
|
|
149
|
+
expect(
|
|
150
|
+
groupBy((entry: RegisteredModel) => {
|
|
151
|
+
return entry.tableName;
|
|
152
|
+
}),
|
|
153
|
+
).toEqual([]);
|
|
154
|
+
});
|
|
155
|
+
|
|
156
|
+
/*
|
|
157
|
+
* The collision where one entity's whole API answers as another's, because
|
|
158
|
+
* BaseAPI registers both under the same route and the second wins.
|
|
159
|
+
*/
|
|
160
|
+
it("gives every model its own CRUD path", () => {
|
|
161
|
+
expect(
|
|
162
|
+
groupBy((entry: RegisteredModel) => {
|
|
163
|
+
return entry.crudApiPath;
|
|
164
|
+
}),
|
|
165
|
+
).toEqual([]);
|
|
166
|
+
});
|
|
167
|
+
|
|
168
|
+
it("gives every model a singular and a plural display name", () => {
|
|
169
|
+
const missing: Array<string> = REGISTERED_MODELS.filter(
|
|
170
|
+
(entry: RegisteredModel) => {
|
|
171
|
+
return !entry.singularName || !entry.pluralName;
|
|
172
|
+
},
|
|
173
|
+
).map((entry: RegisteredModel) => {
|
|
174
|
+
return entry.className;
|
|
175
|
+
});
|
|
176
|
+
|
|
177
|
+
expect(missing).toEqual([]);
|
|
178
|
+
});
|
|
179
|
+
|
|
180
|
+
/*
|
|
181
|
+
* The description is what the generated OpenAPI document publishes as the
|
|
182
|
+
* tag description for the entity. A documented model without one ships a
|
|
183
|
+
* section of the public API reference with no explanation of what it is.
|
|
184
|
+
*/
|
|
185
|
+
it("describes every model it publishes documentation for", () => {
|
|
186
|
+
const undescribed: Array<string> = REGISTERED_MODELS.filter(
|
|
187
|
+
(entry: RegisteredModel) => {
|
|
188
|
+
return entry.enableDocumentation && !entry.tableDescription;
|
|
189
|
+
},
|
|
190
|
+
).map((entry: RegisteredModel) => {
|
|
191
|
+
return entry.className;
|
|
192
|
+
});
|
|
193
|
+
|
|
194
|
+
expect(undescribed).toEqual([]);
|
|
195
|
+
});
|
|
196
|
+
|
|
197
|
+
/*
|
|
198
|
+
* `enableDocumentation` alone publishes nothing: OpenAPIUtil skips any model
|
|
199
|
+
* with no `crudApiPath`, so the pair disagreeing is a model that believes it
|
|
200
|
+
* is documented and is absent from the document.
|
|
201
|
+
*/
|
|
202
|
+
it("gives every documented model a CRUD path to document", () => {
|
|
203
|
+
const undocumentable: Array<string> = REGISTERED_MODELS.filter(
|
|
204
|
+
(entry: RegisteredModel) => {
|
|
205
|
+
return entry.enableDocumentation && !entry.crudApiPath;
|
|
206
|
+
},
|
|
207
|
+
).map((entry: RegisteredModel) => {
|
|
208
|
+
return entry.className;
|
|
209
|
+
});
|
|
210
|
+
|
|
211
|
+
expect(undocumentable).toEqual([]);
|
|
212
|
+
});
|
|
213
|
+
|
|
214
|
+
/*
|
|
215
|
+
* Slug generation reads the source column and writes the destination one BY
|
|
216
|
+
* NAME at save time (DatabaseService.generateSlug), off an object rather
|
|
217
|
+
* than through the schema -- so a name that matches no declared column is a
|
|
218
|
+
* silent misfire rather than an error.
|
|
219
|
+
*
|
|
220
|
+
* Both halves misfire differently:
|
|
221
|
+
*
|
|
222
|
+
* - A source that does not exist reads `undefined`, and Slug.getSlug(null)
|
|
223
|
+
* answers with a slug built from Faker.generateName(). The row still gets
|
|
224
|
+
* a unique, non-null slug, so nothing fails -- the slug is simply a
|
|
225
|
+
* random pair of words instead of the object's own name. Incident was the
|
|
226
|
+
* clearest case: it slugified "name" while its title column is `title`,
|
|
227
|
+
* and its own slug column documents the example
|
|
228
|
+
* "database-connection-failure-in-production", which is a slugified
|
|
229
|
+
* TITLE. Every incident created before the fix carries a random name.
|
|
230
|
+
*
|
|
231
|
+
* - A destination that does not exist has the slug assigned to a property
|
|
232
|
+
* the table has no column for, and TypeORM drops it on insert. The whole
|
|
233
|
+
* decorator is dead configuration.
|
|
234
|
+
*
|
|
235
|
+
* Fourteen models were recorded here as a baseline and have all since been
|
|
236
|
+
* fixed, so the list is empty. It is kept, rather than deleted along with
|
|
237
|
+
* its last entry, because the pair of tests below it is the ratchet: the
|
|
238
|
+
* first fails on a new misfire, the second fails on an entry left behind
|
|
239
|
+
* after a fix.
|
|
240
|
+
*
|
|
241
|
+
* Where each of the fourteen went, and why:
|
|
242
|
+
*
|
|
243
|
+
* - The four event models (Incident, ScheduledMaintenance and the two
|
|
244
|
+
* templates) had a real slug column and a source naming a column they do
|
|
245
|
+
* not have, so the slug landed and was random. Their intended sources
|
|
246
|
+
* are pinned in EXPECTED_SLUG_SOURCES below and asserted behaviourally
|
|
247
|
+
* in Tests/Server/Services/DatabaseServiceGenerateSlug.test.ts.
|
|
248
|
+
*
|
|
249
|
+
* - Domain, likewise, but its identity is the `domain` column.
|
|
250
|
+
*
|
|
251
|
+
* - The nine with no slug column had their decorator deleted rather than a
|
|
252
|
+
* column added. Nothing in the product reads any of these slugs -- the
|
|
253
|
+
* only slug consumed anywhere is Monitor's, as a template variable --
|
|
254
|
+
* and the alternative was adding a NOT NULL column to a live table with
|
|
255
|
+
* a backfill, for a value with no reader.
|
|
256
|
+
*
|
|
257
|
+
* THIS LIST MUST ONLY EVER SHRINK. A new entry means a new misfire; a stale
|
|
258
|
+
* entry means somebody fixed one and this test says so.
|
|
259
|
+
*/
|
|
260
|
+
const KNOWN_SLUG_MISFIRES: Array<string> = [];
|
|
261
|
+
|
|
262
|
+
const findSlugMisfires: () => Array<string> = (): Array<string> => {
|
|
263
|
+
const dangling: Array<string> = [];
|
|
264
|
+
|
|
265
|
+
for (const entry of REGISTERED_MODELS) {
|
|
266
|
+
const columns: Array<string> = entry.columns;
|
|
267
|
+
|
|
268
|
+
const source: string | null = entry.slugifyColumn;
|
|
269
|
+
const destination: string | null = entry.saveSlugToColumn;
|
|
270
|
+
|
|
271
|
+
if (source && !columns.includes(source)) {
|
|
272
|
+
dangling.push(`${entry.className}.slugifyColumn = ${source}`);
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
if (destination && !columns.includes(destination)) {
|
|
276
|
+
dangling.push(`${entry.className}.saveSlugToColumn = ${destination}`);
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
return dangling.sort();
|
|
281
|
+
};
|
|
282
|
+
|
|
283
|
+
it("introduces no new slug column that does not exist", () => {
|
|
284
|
+
const unexpected: Array<string> = findSlugMisfires().filter(
|
|
285
|
+
(misfire: string) => {
|
|
286
|
+
return !KNOWN_SLUG_MISFIRES.includes(misfire);
|
|
287
|
+
},
|
|
288
|
+
);
|
|
289
|
+
|
|
290
|
+
expect(unexpected).toEqual([]);
|
|
291
|
+
});
|
|
292
|
+
|
|
293
|
+
/*
|
|
294
|
+
* The other direction, so the baseline cannot rot: once a misfire is fixed
|
|
295
|
+
* its entry has to come out of the list above.
|
|
296
|
+
*/
|
|
297
|
+
it("keeps no stale entry in the known slug misfire list", () => {
|
|
298
|
+
const found: Array<string> = findSlugMisfires();
|
|
299
|
+
|
|
300
|
+
const stale: Array<string> = KNOWN_SLUG_MISFIRES.filter(
|
|
301
|
+
(misfire: string) => {
|
|
302
|
+
return !found.includes(misfire);
|
|
303
|
+
},
|
|
304
|
+
);
|
|
305
|
+
|
|
306
|
+
expect(stale).toEqual([]);
|
|
307
|
+
});
|
|
308
|
+
|
|
309
|
+
/*
|
|
310
|
+
* The sweep above only proves a slug source names a column that EXISTS. It
|
|
311
|
+
* cannot see the other half of the same mistake: a decorator naming a real
|
|
312
|
+
* column that is not the one the model means. Incident, before the fix,
|
|
313
|
+
* would have passed such a sweep the moment "name" were changed to
|
|
314
|
+
* "description".
|
|
315
|
+
*
|
|
316
|
+
* So the models whose source was corrected are pinned by name, with the
|
|
317
|
+
* evidence for each choice. Behaviour is asserted separately in
|
|
318
|
+
* Tests/Server/Services/DatabaseServiceGenerateSlug.test.ts; this is the
|
|
319
|
+
* declaration.
|
|
320
|
+
*/
|
|
321
|
+
const EXPECTED_SLUG_SOURCES: Record<string, string> = {
|
|
322
|
+
/*
|
|
323
|
+
* The slug column's documented example is
|
|
324
|
+
* "database-connection-failure-in-production" -- the title column's
|
|
325
|
+
* example, slugified.
|
|
326
|
+
*/
|
|
327
|
+
Incident: "title",
|
|
328
|
+
ScheduledMaintenance: "title",
|
|
329
|
+
|
|
330
|
+
/*
|
|
331
|
+
* Both template models carry a title AND a templateName, so this is a
|
|
332
|
+
* choice between two real columns rather than the only one available.
|
|
333
|
+
* They mean templateName: each documents a slug example that is its
|
|
334
|
+
* templateName example slugified ("Server Outage Template" ->
|
|
335
|
+
* "server-outage-template", "Database Upgrade Template" ->
|
|
336
|
+
* "database-upgrade-template"), and the title is the incident or event
|
|
337
|
+
* the template produces rather than anything unique to the template.
|
|
338
|
+
*/
|
|
339
|
+
IncidentTemplate: "templateName",
|
|
340
|
+
ScheduledMaintenanceTemplate: "templateName",
|
|
341
|
+
|
|
342
|
+
/* Domain has neither a name nor a title; the domain is its identity. */
|
|
343
|
+
Domain: "domain",
|
|
344
|
+
};
|
|
345
|
+
|
|
346
|
+
it("slugifies the column each model actually means", () => {
|
|
347
|
+
const declared: Record<string, string | null> = {};
|
|
348
|
+
|
|
349
|
+
for (const className of Object.keys(EXPECTED_SLUG_SOURCES)) {
|
|
350
|
+
const entry: RegisteredModel | undefined = REGISTERED_MODELS.find(
|
|
351
|
+
(candidate: RegisteredModel) => {
|
|
352
|
+
return candidate.className === className;
|
|
353
|
+
},
|
|
354
|
+
);
|
|
355
|
+
|
|
356
|
+
/*
|
|
357
|
+
* A renamed or unregistered model shows up as a null rather than as a
|
|
358
|
+
* silently skipped expectation.
|
|
359
|
+
*/
|
|
360
|
+
declared[className] = entry ? entry.slugifyColumn : null;
|
|
361
|
+
}
|
|
362
|
+
|
|
363
|
+
expect(declared).toEqual(EXPECTED_SLUG_SOURCES);
|
|
364
|
+
});
|
|
365
|
+
|
|
366
|
+
/*
|
|
367
|
+
* The nine models whose decorator named columns they do not have at all.
|
|
368
|
+
* Deleting the decorator is what fixed them, so a copy-paste that puts one
|
|
369
|
+
* back has to fail here as well as in the sweep above.
|
|
370
|
+
*/
|
|
371
|
+
const MODELS_WITH_NO_SLUG: Array<string> = [
|
|
372
|
+
"AlertState",
|
|
373
|
+
"MetricType",
|
|
374
|
+
"MonitorStatusTimeline",
|
|
375
|
+
"MonitorTest",
|
|
376
|
+
"StatusPageAnnouncement",
|
|
377
|
+
"StatusPageAnnouncementTemplate",
|
|
378
|
+
"StatusPagePrivateUser",
|
|
379
|
+
"StatusPageResource",
|
|
380
|
+
"StatusPageSubscriber",
|
|
381
|
+
];
|
|
382
|
+
|
|
383
|
+
it("leaves the models with no slug column unslugified", () => {
|
|
384
|
+
const configured: Array<string> = REGISTERED_MODELS.filter(
|
|
385
|
+
(entry: RegisteredModel) => {
|
|
386
|
+
return (
|
|
387
|
+
MODELS_WITH_NO_SLUG.includes(entry.className) &&
|
|
388
|
+
Boolean(entry.slugifyColumn || entry.saveSlugToColumn)
|
|
389
|
+
);
|
|
390
|
+
},
|
|
391
|
+
).map((entry: RegisteredModel) => {
|
|
392
|
+
return entry.className;
|
|
393
|
+
});
|
|
394
|
+
|
|
395
|
+
expect(configured).toEqual([]);
|
|
396
|
+
});
|
|
397
|
+
|
|
398
|
+
/*
|
|
399
|
+
* A model that slugifies a column must have somewhere to put the result.
|
|
400
|
+
* Only the pair together produces a slug; either one alone is dead
|
|
401
|
+
* configuration.
|
|
402
|
+
*/
|
|
403
|
+
it("pairs a slug source with a slug destination", () => {
|
|
404
|
+
const unpaired: Array<string> = REGISTERED_MODELS.filter(
|
|
405
|
+
(entry: RegisteredModel) => {
|
|
406
|
+
return Boolean(entry.slugifyColumn) !== Boolean(entry.saveSlugToColumn);
|
|
407
|
+
},
|
|
408
|
+
).map((entry: RegisteredModel) => {
|
|
409
|
+
return entry.className;
|
|
410
|
+
});
|
|
411
|
+
|
|
412
|
+
expect(unpaired).toEqual([]);
|
|
413
|
+
});
|
|
414
|
+
|
|
415
|
+
it("declares at least one column on every model", () => {
|
|
416
|
+
const empty: Array<string> = REGISTERED_MODELS.filter(
|
|
417
|
+
(entry: RegisteredModel) => {
|
|
418
|
+
return entry.columns.length === 0;
|
|
419
|
+
},
|
|
420
|
+
).map((entry: RegisteredModel) => {
|
|
421
|
+
return entry.className;
|
|
422
|
+
});
|
|
423
|
+
|
|
424
|
+
expect(empty).toEqual([]);
|
|
425
|
+
});
|
|
426
|
+
|
|
427
|
+
it("starts every CRUD path with a slash", () => {
|
|
428
|
+
const malformed: Array<string> = REGISTERED_MODELS.filter(
|
|
429
|
+
(entry: RegisteredModel) => {
|
|
430
|
+
const path: string | null = entry.crudApiPath;
|
|
431
|
+
|
|
432
|
+
return path !== null && !path.startsWith("/");
|
|
433
|
+
},
|
|
434
|
+
).map((entry: RegisteredModel) => {
|
|
435
|
+
return entry.className;
|
|
436
|
+
});
|
|
437
|
+
|
|
438
|
+
expect(malformed).toEqual([]);
|
|
439
|
+
});
|
|
440
|
+
});
|
|
441
|
+
|
|
442
|
+
describe("Analytics model registry", () => {
|
|
443
|
+
/* Flattened for the same reason as the database models above. */
|
|
444
|
+
interface RegisteredAnalyticsModel {
|
|
445
|
+
className: string;
|
|
446
|
+
tableName: string | null;
|
|
447
|
+
crudApiPath: string | null;
|
|
448
|
+
columnCount: number;
|
|
449
|
+
}
|
|
450
|
+
|
|
451
|
+
const REGISTERED: Array<RegisteredAnalyticsModel> = ANALYTICS_MODEL_TYPES.map(
|
|
452
|
+
(ModelClass: AnalyticsModelType): RegisteredAnalyticsModel => {
|
|
453
|
+
const model: AnalyticsBaseModel = new ModelClass();
|
|
454
|
+
|
|
455
|
+
return {
|
|
456
|
+
className: ModelClass.name,
|
|
457
|
+
tableName: model.tableName,
|
|
458
|
+
crudApiPath: model.crudApiPath ? model.crudApiPath.toString() : null,
|
|
459
|
+
columnCount: (model.tableColumns || []).length,
|
|
460
|
+
};
|
|
461
|
+
},
|
|
462
|
+
);
|
|
463
|
+
|
|
464
|
+
it("registers at least one analytics model", () => {
|
|
465
|
+
expect(REGISTERED.length).toBeGreaterThan(0);
|
|
466
|
+
});
|
|
467
|
+
|
|
468
|
+
it("gives every analytics model a table name", () => {
|
|
469
|
+
const missing: Array<string> = REGISTERED.filter(
|
|
470
|
+
(entry: RegisteredAnalyticsModel) => {
|
|
471
|
+
return !entry.tableName;
|
|
472
|
+
},
|
|
473
|
+
).map((entry: RegisteredAnalyticsModel) => {
|
|
474
|
+
return entry.className;
|
|
475
|
+
});
|
|
476
|
+
|
|
477
|
+
expect(missing).toEqual([]);
|
|
478
|
+
});
|
|
479
|
+
|
|
480
|
+
/*
|
|
481
|
+
* The ClickHouse equivalent of the Postgres collision above: two models
|
|
482
|
+
* writing rows of different shapes into one table.
|
|
483
|
+
*/
|
|
484
|
+
it("gives every analytics model its own table", () => {
|
|
485
|
+
const claimants: Map<string, Array<string>> = new Map();
|
|
486
|
+
|
|
487
|
+
for (const entry of REGISTERED) {
|
|
488
|
+
const key: string | null = entry.tableName;
|
|
489
|
+
|
|
490
|
+
if (!key) {
|
|
491
|
+
continue;
|
|
492
|
+
}
|
|
493
|
+
|
|
494
|
+
claimants.set(key, [...(claimants.get(key) || []), entry.className]);
|
|
495
|
+
}
|
|
496
|
+
|
|
497
|
+
const collisions: Array<string> = Array.from(claimants.entries())
|
|
498
|
+
.filter((pair: [string, Array<string>]) => {
|
|
499
|
+
return pair[1].length > 1;
|
|
500
|
+
})
|
|
501
|
+
.map((pair: [string, Array<string>]) => {
|
|
502
|
+
return `${pair[0]}: ${pair[1].join(", ")}`;
|
|
503
|
+
});
|
|
504
|
+
|
|
505
|
+
expect(collisions).toEqual([]);
|
|
506
|
+
});
|
|
507
|
+
|
|
508
|
+
it("gives every analytics model its own CRUD path", () => {
|
|
509
|
+
const claimants: Map<string, Array<string>> = new Map();
|
|
510
|
+
|
|
511
|
+
for (const entry of REGISTERED) {
|
|
512
|
+
const key: string | null = entry.crudApiPath;
|
|
513
|
+
|
|
514
|
+
if (!key) {
|
|
515
|
+
continue;
|
|
516
|
+
}
|
|
517
|
+
|
|
518
|
+
claimants.set(key, [...(claimants.get(key) || []), entry.className]);
|
|
519
|
+
}
|
|
520
|
+
|
|
521
|
+
const collisions: Array<string> = Array.from(claimants.entries())
|
|
522
|
+
.filter((pair: [string, Array<string>]) => {
|
|
523
|
+
return pair[1].length > 1;
|
|
524
|
+
})
|
|
525
|
+
.map((pair: [string, Array<string>]) => {
|
|
526
|
+
return `${pair[0]}: ${pair[1].join(", ")}`;
|
|
527
|
+
});
|
|
528
|
+
|
|
529
|
+
expect(collisions).toEqual([]);
|
|
530
|
+
});
|
|
531
|
+
|
|
532
|
+
it("declares at least one column on every analytics model", () => {
|
|
533
|
+
const empty: Array<string> = REGISTERED.filter(
|
|
534
|
+
(entry: RegisteredAnalyticsModel) => {
|
|
535
|
+
return entry.columnCount === 0;
|
|
536
|
+
},
|
|
537
|
+
).map((entry: RegisteredAnalyticsModel) => {
|
|
538
|
+
return entry.className;
|
|
539
|
+
});
|
|
540
|
+
|
|
541
|
+
expect(empty).toEqual([]);
|
|
542
|
+
});
|
|
543
|
+
});
|