@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
|
@@ -6,12 +6,20 @@ import BadDataException from "../../Types/Exception/BadDataException";
|
|
|
6
6
|
import ObjectID from "../../Types/ObjectID";
|
|
7
7
|
import SortOrder from "../../Types/BaseDatabase/SortOrder";
|
|
8
8
|
import LIMIT_MAX from "../../Types/Database/LimitMax";
|
|
9
|
+
import PositiveNumber from "../../Types/PositiveNumber";
|
|
9
10
|
import QueryHelper from "../Types/Database/QueryHelper";
|
|
10
11
|
import CaptureSpan from "../Utils/Telemetry/CaptureSpan";
|
|
12
|
+
import logger from "../Utils/Logger";
|
|
11
13
|
import SourceMapResolver, {
|
|
14
|
+
MAX_FRAMES_TO_RESOLVE,
|
|
12
15
|
MAX_SOURCE_MAP_SIZE_IN_BYTES,
|
|
13
16
|
SourceMapBundle,
|
|
14
17
|
} from "../Utils/Telemetry/SourceMapResolver";
|
|
18
|
+
import {
|
|
19
|
+
SourceMapMaxBytesPerResolve,
|
|
20
|
+
SourceMapMaxMapsPerRelease,
|
|
21
|
+
SourceMapRetentionInDays,
|
|
22
|
+
} from "../EnvironmentConfig";
|
|
15
23
|
import {
|
|
16
24
|
MinifiedStackFrame,
|
|
17
25
|
ResolvedStackFrame,
|
|
@@ -23,17 +31,24 @@ export { MAX_SOURCE_MAP_SIZE_IN_BYTES };
|
|
|
23
31
|
/*
|
|
24
32
|
* How long uploaded maps are kept. Old releases age out automatically —
|
|
25
33
|
* a map is only useful while exceptions from its release are still within
|
|
26
|
-
* telemetry retention, and
|
|
34
|
+
* telemetry retention, and the default comfortably exceeds it.
|
|
35
|
+
* SOURCE_MAP_RETENTION_DAYS overrides it.
|
|
27
36
|
*/
|
|
28
|
-
export const SOURCE_MAP_RETENTION_DAYS: number =
|
|
37
|
+
export const SOURCE_MAP_RETENTION_DAYS: number = SourceMapRetentionInDays;
|
|
29
38
|
|
|
30
39
|
/*
|
|
31
|
-
* How many
|
|
32
|
-
*
|
|
33
|
-
*
|
|
34
|
-
*
|
|
40
|
+
* How many distinct bundles one (service, release) pair may hold, from
|
|
41
|
+
* SOURCE_MAP_MAX_MAPS_PER_RELEASE.
|
|
42
|
+
*
|
|
43
|
+
* This is a WRITE gate and nothing else: the upload endpoint checks that
|
|
44
|
+
* existing bundles + new bundles fit, and rejects with a 400 naming the
|
|
45
|
+
* limit. It used to double as the resolver's read limit, which coupled two
|
|
46
|
+
* different quantities — distinct bundle paths on the write side, rows on
|
|
47
|
+
* the read side — and made raising it dangerous. resolveFramesForService now
|
|
48
|
+
* bounds itself by BYTES loaded (SourceMapMaxBytesPerResolve), so a release
|
|
49
|
+
* that fits this ceiling always resolves in full.
|
|
35
50
|
*/
|
|
36
|
-
export const MAX_SOURCE_MAPS_PER_RELEASE: number =
|
|
51
|
+
export const MAX_SOURCE_MAPS_PER_RELEASE: number = SourceMapMaxMapsPerRelease;
|
|
37
52
|
|
|
38
53
|
export class Service extends DatabaseService<Model> {
|
|
39
54
|
public constructor() {
|
|
@@ -74,11 +89,116 @@ export class Service extends DatabaseService<Model> {
|
|
|
74
89
|
throw new BadDataException("Service version is required.");
|
|
75
90
|
}
|
|
76
91
|
|
|
92
|
+
await this.assertReleaseHasRoomFor(createBy);
|
|
93
|
+
|
|
77
94
|
createBy.data.sizeInBytes = Buffer.byteLength(content, "utf8");
|
|
78
95
|
|
|
79
96
|
return { createBy, carryForward: null };
|
|
80
97
|
}
|
|
81
98
|
|
|
99
|
+
/**
|
|
100
|
+
* Enforce the per-release ceiling on the create path itself.
|
|
101
|
+
*
|
|
102
|
+
* The upload endpoint checks the whole batch up front, which is where the
|
|
103
|
+
* useful error message lives — but TelemetrySourceMap is a full CRUD
|
|
104
|
+
* resource, so POST /api/telemetry-source-map reaches create() without ever
|
|
105
|
+
* passing that check. Without this the configured ceiling was advisory on
|
|
106
|
+
* that path, and a release could quietly grow past what the operator set.
|
|
107
|
+
*
|
|
108
|
+
* Two steps, so the common case stays cheap: an indexed COUNT on every
|
|
109
|
+
* insert, and the exact distinct-bundle answer only once that COUNT says
|
|
110
|
+
* the release is at the boundary. A release is written once per CI run, and
|
|
111
|
+
* on the upload path the batch check has already passed, so the second step
|
|
112
|
+
* is effectively unreachable there.
|
|
113
|
+
*/
|
|
114
|
+
@CaptureSpan()
|
|
115
|
+
private async assertReleaseHasRoomFor(
|
|
116
|
+
createBy: CreateBy<Model>,
|
|
117
|
+
): Promise<void> {
|
|
118
|
+
const projectId: ObjectID | undefined =
|
|
119
|
+
createBy.data.projectId || createBy.props.tenantId || undefined;
|
|
120
|
+
const serviceId: ObjectID | undefined =
|
|
121
|
+
createBy.data.serviceId || undefined;
|
|
122
|
+
const serviceVersion: string | undefined = createBy.data.serviceVersion;
|
|
123
|
+
|
|
124
|
+
/*
|
|
125
|
+
* Not a silent pass: a create missing any of these cannot be scoped to a
|
|
126
|
+
* release, and the tenant column / required-column checks reject it on
|
|
127
|
+
* their own with a better message than a count could give.
|
|
128
|
+
*/
|
|
129
|
+
if (!projectId || !serviceId || !serviceVersion) {
|
|
130
|
+
return;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
/*
|
|
134
|
+
* Cheap check first, and it is the one that runs in practice: a COUNT of
|
|
135
|
+
* ROWS on the (projectId, serviceId, serviceVersion) index. Below the
|
|
136
|
+
* ceiling there is nothing to decide, whatever the rows contain.
|
|
137
|
+
*/
|
|
138
|
+
const existingRowCount: PositiveNumber = await this.countBy({
|
|
139
|
+
query: {
|
|
140
|
+
projectId: projectId,
|
|
141
|
+
serviceId: serviceId,
|
|
142
|
+
serviceVersion: serviceVersion,
|
|
143
|
+
},
|
|
144
|
+
skip: 0,
|
|
145
|
+
limit: LIMIT_MAX,
|
|
146
|
+
props: {
|
|
147
|
+
isRoot: true,
|
|
148
|
+
},
|
|
149
|
+
});
|
|
150
|
+
|
|
151
|
+
if (existingRowCount.toNumber() < MAX_SOURCE_MAPS_PER_RELEASE) {
|
|
152
|
+
return;
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
/*
|
|
156
|
+
* At or above the ceiling on rows — but rows are not the unit the ceiling
|
|
157
|
+
* is expressed in. The model deliberately allows more than one row per
|
|
158
|
+
* bundle (a racing double upload must not fail CI), so rejecting on the
|
|
159
|
+
* row count would fail a legitimate re-upload of a full release purely
|
|
160
|
+
* because a duplicate row exists. Pay for the exact answer only here,
|
|
161
|
+
* where the fast path has already established this is the boundary.
|
|
162
|
+
*/
|
|
163
|
+
const storedBundlePaths: Array<string> =
|
|
164
|
+
await this.getStoredBundlePathsForRelease({
|
|
165
|
+
projectId: projectId,
|
|
166
|
+
serviceId: serviceId,
|
|
167
|
+
serviceVersion: serviceVersion,
|
|
168
|
+
});
|
|
169
|
+
|
|
170
|
+
const distinctBundlePaths: Set<string> = new Set(
|
|
171
|
+
storedBundlePaths.map((bundlePath: string) => {
|
|
172
|
+
return SourceMapResolver.normalizePath(bundlePath);
|
|
173
|
+
}),
|
|
174
|
+
);
|
|
175
|
+
|
|
176
|
+
/*
|
|
177
|
+
* Normalized, which makes this backstop slightly MORE permissive than the
|
|
178
|
+
* upload endpoint's raw-path gate. That is the right direction for a
|
|
179
|
+
* backstop: it must never be the thing that fails a request the primary
|
|
180
|
+
* gate already approved.
|
|
181
|
+
*/
|
|
182
|
+
const incomingBundlePath: string = SourceMapResolver.normalizePath(
|
|
183
|
+
createBy.data.bundlePath || "",
|
|
184
|
+
);
|
|
185
|
+
|
|
186
|
+
/*
|
|
187
|
+
* Adding a row for a bundle the release already holds does not grow the
|
|
188
|
+
* release, so it stays allowed even at the ceiling. Only a NEW distinct
|
|
189
|
+
* bundle is refused.
|
|
190
|
+
*/
|
|
191
|
+
if (distinctBundlePaths.has(incomingBundlePath)) {
|
|
192
|
+
return;
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
if (distinctBundlePaths.size >= MAX_SOURCE_MAPS_PER_RELEASE) {
|
|
196
|
+
throw new BadDataException(
|
|
197
|
+
`This release already holds ${distinctBundlePaths.size} source maps, which is the limit of ${MAX_SOURCE_MAPS_PER_RELEASE} per release. Delete unused maps, use a new serviceVersion, or raise SOURCE_MAP_MAX_MAPS_PER_RELEASE.`,
|
|
198
|
+
);
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
|
|
82
202
|
/**
|
|
83
203
|
* Bundle paths currently stored for a (project, service, release) tuple.
|
|
84
204
|
* Used by the upload endpoint to enforce the per-release ceiling without
|
|
@@ -182,15 +302,26 @@ export class Service extends DatabaseService<Model> {
|
|
|
182
302
|
}),
|
|
183
303
|
resolvedCount: 0,
|
|
184
304
|
sourceMapCount: 0,
|
|
305
|
+
sourceMapsSkippedForSize: 0,
|
|
185
306
|
};
|
|
186
307
|
}
|
|
187
308
|
|
|
188
309
|
/*
|
|
189
|
-
* Two-step fetch: list bundle paths first (cheap), then pull
|
|
190
|
-
* only for bundles
|
|
191
|
-
*
|
|
192
|
-
*
|
|
193
|
-
*
|
|
310
|
+
* Two-step fetch: list bundle paths first (cheap — no content), then pull
|
|
311
|
+
* content only for the bundles a frame can match, and only as many of
|
|
312
|
+
* those as the byte budget allows. Maps can be tens of megabytes each, so
|
|
313
|
+
* loading a whole release for every exception view would be a memory
|
|
314
|
+
* hazard for no benefit.
|
|
315
|
+
*
|
|
316
|
+
* The listing reads with LIMIT_MAX rather than the per-release ceiling.
|
|
317
|
+
* The ceiling counts distinct bundle PATHS, while a read limit counts
|
|
318
|
+
* ROWS, and duplicate rows for one bundle are deliberately allowed (see
|
|
319
|
+
* the model: a racing double upload must not fail CI). With the two
|
|
320
|
+
* numbers equal, one duplicate row was enough to push a distinct bundle
|
|
321
|
+
* out of resolution — it stored fine, showed in the dashboard, and
|
|
322
|
+
* silently never resolved. Reading everything and deduping afterwards
|
|
323
|
+
* removes that coupling; memory is bounded below by bytes, not by how
|
|
324
|
+
* many rows a content-free listing returns.
|
|
194
325
|
*/
|
|
195
326
|
const sourceMapRows: Array<Model> = await this.findBy({
|
|
196
327
|
query: {
|
|
@@ -202,11 +333,12 @@ export class Service extends DatabaseService<Model> {
|
|
|
202
333
|
_id: true,
|
|
203
334
|
bundlePath: true,
|
|
204
335
|
createdAt: true,
|
|
336
|
+
sizeInBytes: true,
|
|
205
337
|
},
|
|
206
338
|
sort: {
|
|
207
339
|
createdAt: SortOrder.Descending,
|
|
208
340
|
},
|
|
209
|
-
limit:
|
|
341
|
+
limit: LIMIT_MAX,
|
|
210
342
|
skip: 0,
|
|
211
343
|
props: {
|
|
212
344
|
isRoot: true,
|
|
@@ -237,16 +369,121 @@ export class Service extends DatabaseService<Model> {
|
|
|
237
369
|
dedupedRows.push(row);
|
|
238
370
|
}
|
|
239
371
|
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
372
|
+
/*
|
|
373
|
+
* Only the frames resolveFrames will actually attempt can pull a map in.
|
|
374
|
+
* Matching against every frame would let a caller-supplied array drive an
|
|
375
|
+
* O(rows x frames) scan and select maps that could never be used anyway —
|
|
376
|
+
* the frames array is parsed from client-supplied stack trace text, so it
|
|
377
|
+
* is capped rather than trusted (the API rejects absurd lengths outright).
|
|
378
|
+
*/
|
|
379
|
+
const framesForMatching: Array<MinifiedStackFrame> = data.frames.slice(
|
|
380
|
+
0,
|
|
381
|
+
MAX_FRAMES_TO_RESOLVE,
|
|
382
|
+
);
|
|
383
|
+
|
|
384
|
+
/*
|
|
385
|
+
* Score every candidate against those frames. The score is how many
|
|
386
|
+
* trailing path segments the frame and the bundle share, so a frame
|
|
387
|
+
* "static/main.a8f1.js" prefers the bundle that agrees on "static/" over
|
|
388
|
+
* one that only agrees on the file name. That ordering is what makes the
|
|
389
|
+
* byte budget below defensible: when not everything fits, what gets
|
|
390
|
+
* dropped is the weakest match, not an arbitrary row.
|
|
391
|
+
*/
|
|
392
|
+
const scoredRows: Array<{
|
|
393
|
+
row: Model;
|
|
394
|
+
score: number;
|
|
395
|
+
sizeInBytes: number;
|
|
396
|
+
}> = [];
|
|
397
|
+
|
|
398
|
+
for (const row of dedupedRows) {
|
|
399
|
+
let bestScore: number = 0;
|
|
400
|
+
|
|
401
|
+
for (const frame of framesForMatching) {
|
|
402
|
+
const score: number = SourceMapResolver.getMatchScore(
|
|
403
|
+
frame.fileName,
|
|
404
|
+
row.bundlePath || "",
|
|
247
405
|
);
|
|
248
|
-
|
|
249
|
-
|
|
406
|
+
|
|
407
|
+
if (score > bestScore) {
|
|
408
|
+
bestScore = score;
|
|
409
|
+
}
|
|
410
|
+
}
|
|
411
|
+
|
|
412
|
+
if (bestScore > 0) {
|
|
413
|
+
scoredRows.push({
|
|
414
|
+
row: row,
|
|
415
|
+
score: bestScore,
|
|
416
|
+
/*
|
|
417
|
+
* onBeforeCreate stamps sizeInBytes on every insert, so a missing
|
|
418
|
+
* value means a row written straight to the database. Charge it the
|
|
419
|
+
* per-map ceiling rather than nothing: an unknown size must not be
|
|
420
|
+
* the way to slip past a budget meant to bound memory.
|
|
421
|
+
*/
|
|
422
|
+
sizeInBytes:
|
|
423
|
+
typeof row.sizeInBytes === "number" &&
|
|
424
|
+
Number.isFinite(row.sizeInBytes) &&
|
|
425
|
+
row.sizeInBytes > 0
|
|
426
|
+
? row.sizeInBytes
|
|
427
|
+
: MAX_SOURCE_MAP_SIZE_IN_BYTES,
|
|
428
|
+
});
|
|
429
|
+
}
|
|
430
|
+
}
|
|
431
|
+
|
|
432
|
+
scoredRows.sort(
|
|
433
|
+
(
|
|
434
|
+
a: { row: Model; score: number; sizeInBytes: number },
|
|
435
|
+
b: { row: Model; score: number; sizeInBytes: number },
|
|
436
|
+
) => {
|
|
437
|
+
if (b.score !== a.score) {
|
|
438
|
+
return b.score - a.score;
|
|
439
|
+
}
|
|
440
|
+
|
|
441
|
+
// Same match quality: prefer the newer upload, as the dedupe does.
|
|
442
|
+
const aTime: number = a.row.createdAt
|
|
443
|
+
? new Date(a.row.createdAt).getTime()
|
|
444
|
+
: 0;
|
|
445
|
+
const bTime: number = b.row.createdAt
|
|
446
|
+
? new Date(b.row.createdAt).getTime()
|
|
447
|
+
: 0;
|
|
448
|
+
|
|
449
|
+
return bTime - aTime;
|
|
450
|
+
},
|
|
451
|
+
);
|
|
452
|
+
|
|
453
|
+
/*
|
|
454
|
+
* The byte budget. This is the bound that used to be implied by the
|
|
455
|
+
* per-release count and is a far tighter one, because it measures the
|
|
456
|
+
* thing that actually consumes memory. Lower-scoring maps that still fit
|
|
457
|
+
* are kept (hence continue, not break) so a single oversized map does not
|
|
458
|
+
* cost the rest of the stack trace its symbols.
|
|
459
|
+
*
|
|
460
|
+
* The best-scoring map is always attempted even if it alone exceeds the
|
|
461
|
+
* budget: a budget configured below the per-map ceiling should degrade to
|
|
462
|
+
* "one map at a time", not to "nothing ever resolves". Peak is therefore
|
|
463
|
+
* max(SourceMapMaxBytesPerResolve, MAX_SOURCE_MAP_SIZE_IN_BYTES).
|
|
464
|
+
*/
|
|
465
|
+
const matchedRows: Array<Model> = [];
|
|
466
|
+
let budgetUsedInBytes: number = 0;
|
|
467
|
+
let sourceMapsSkippedForSize: number = 0;
|
|
468
|
+
|
|
469
|
+
for (const scored of scoredRows) {
|
|
470
|
+
const wouldExceedBudget: boolean =
|
|
471
|
+
budgetUsedInBytes + scored.sizeInBytes > SourceMapMaxBytesPerResolve;
|
|
472
|
+
|
|
473
|
+
if (wouldExceedBudget && matchedRows.length > 0) {
|
|
474
|
+
sourceMapsSkippedForSize++;
|
|
475
|
+
continue;
|
|
476
|
+
}
|
|
477
|
+
|
|
478
|
+
budgetUsedInBytes += scored.sizeInBytes;
|
|
479
|
+
matchedRows.push(scored.row);
|
|
480
|
+
}
|
|
481
|
+
|
|
482
|
+
if (sourceMapsSkippedForSize > 0) {
|
|
483
|
+
logger.warn(
|
|
484
|
+
`Source map resolution skipped ${sourceMapsSkippedForSize} matching map(s) for service ${data.serviceId.toString()} release ${data.serviceVersion}: loading them would exceed SOURCE_MAP_MAX_BYTES_PER_RESOLVE (${SourceMapMaxBytesPerResolve} bytes).`,
|
|
485
|
+
);
|
|
486
|
+
}
|
|
250
487
|
|
|
251
488
|
const bundles: Array<SourceMapBundle> = [];
|
|
252
489
|
|
|
@@ -269,7 +506,7 @@ export class Service extends DatabaseService<Model> {
|
|
|
269
506
|
bundlePath: true,
|
|
270
507
|
content: true,
|
|
271
508
|
},
|
|
272
|
-
limit:
|
|
509
|
+
limit: matchedRows.length,
|
|
273
510
|
skip: 0,
|
|
274
511
|
props: {
|
|
275
512
|
isRoot: true,
|
|
@@ -300,6 +537,12 @@ export class Service extends DatabaseService<Model> {
|
|
|
300
537
|
* distinguishable from "no maps uploaded".
|
|
301
538
|
*/
|
|
302
539
|
sourceMapCount: dedupedRows.length,
|
|
540
|
+
/*
|
|
541
|
+
* Non-zero means symbols are missing because of the byte budget, not
|
|
542
|
+
* because the maps were never uploaded — the one distinction a user
|
|
543
|
+
* staring at a half-resolved stack trace cannot make for themselves.
|
|
544
|
+
*/
|
|
545
|
+
sourceMapsSkippedForSize: sourceMapsSkippedForSize,
|
|
303
546
|
};
|
|
304
547
|
}
|
|
305
548
|
}
|
|
@@ -800,12 +800,6 @@ export class Service extends DatabaseService<UserNotificationSetting> {
|
|
|
800
800
|
userId: ObjectID,
|
|
801
801
|
projectId: ObjectID,
|
|
802
802
|
): Promise<void> {
|
|
803
|
-
await this.addNotificationSettingIfNotExists(
|
|
804
|
-
userId,
|
|
805
|
-
projectId,
|
|
806
|
-
NotificationSettingEventType.SEND_MONITOR_STATUS_CHANGED_OWNER_NOTIFICATION,
|
|
807
|
-
);
|
|
808
|
-
|
|
809
803
|
await this.addNotificationSettingIfNotExists(
|
|
810
804
|
userId,
|
|
811
805
|
projectId,
|
|
@@ -58,6 +58,7 @@ import Name from "../../Types/Name";
|
|
|
58
58
|
import CaptureSpan from "../Utils/Telemetry/CaptureSpan";
|
|
59
59
|
import Timezone from "../../Types/Timezone";
|
|
60
60
|
import InMemoryTTLCache from "../Infrastructure/InMemoryTTLCache";
|
|
61
|
+
import EnterpriseLicenseSeatUtil from "../Utils/EnterpriseLicense/EnterpriseLicenseSeatUtil";
|
|
61
62
|
|
|
62
63
|
/*
|
|
63
64
|
* Names the Redis mutex that serializes the first-Master-Admin election across
|
|
@@ -184,6 +185,32 @@ export class Service extends DatabaseService<Model> {
|
|
|
184
185
|
protected override async onBeforeCreate(
|
|
185
186
|
createBy: CreateBy<Model>,
|
|
186
187
|
): Promise<OnCreate<Model>> {
|
|
188
|
+
/*
|
|
189
|
+
* The enterprise seat limit, enforced here because this is the one place
|
|
190
|
+
* every new user passes through: team invitations, self-service signup,
|
|
191
|
+
* SSO/OIDC just-in-time provisioning, SCIM, and the Admin Dashboard all
|
|
192
|
+
* end up in `create`. Enforcing on the invitation instead would leave
|
|
193
|
+
* signup and SSO as open doors around it.
|
|
194
|
+
*
|
|
195
|
+
* No isRoot exemption on purpose — invitations create the invited user as
|
|
196
|
+
* root, so exempting root would exempt invitations, which is the exact
|
|
197
|
+
* thing this is here to bound. It is a no-op on Community Edition and on
|
|
198
|
+
* oneuptime.com (see EnterpriseLicenseSeatUtil.isSeatLimitEnforceable),
|
|
199
|
+
* and it never counts the User table on a licence with no seat limit.
|
|
200
|
+
*/
|
|
201
|
+
await EnterpriseLicenseSeatUtil.assertSeatAvailableForNewUser({
|
|
202
|
+
getLocalUserCount: async (): Promise<number> => {
|
|
203
|
+
const userCount: PositiveNumber = await this.countBy({
|
|
204
|
+
query: {},
|
|
205
|
+
props: {
|
|
206
|
+
isRoot: true,
|
|
207
|
+
},
|
|
208
|
+
});
|
|
209
|
+
|
|
210
|
+
return userCount.toNumber();
|
|
211
|
+
},
|
|
212
|
+
});
|
|
213
|
+
|
|
187
214
|
/*
|
|
188
215
|
* clickIds / firstTouchAttribution are publicly creatable jsonb columns
|
|
189
216
|
* (set during signup). Unlike the varchar(500) utm columns they have no
|
|
@@ -6,6 +6,8 @@ import WorkflowService from "./WorkflowService";
|
|
|
6
6
|
import ObjectID from "../../Types/ObjectID";
|
|
7
7
|
import CaptureSpan from "../Utils/Telemetry/CaptureSpan";
|
|
8
8
|
import logger, { LogAttributes } from "../Utils/Logger";
|
|
9
|
+
import { MAX_RULES_EVALUATED_PER_PROJECT } from "../../Utils/Rules/RuleEngineLimits";
|
|
10
|
+
import logIfRuleReadWasTruncated from "../Utils/Rules/RuleEngineRuleRead";
|
|
9
11
|
|
|
10
12
|
class WorkflowLabelRuleEngineServiceClass {
|
|
11
13
|
/**
|
|
@@ -35,10 +37,16 @@ class WorkflowLabelRuleEngineServiceClass {
|
|
|
35
37
|
workflowDescriptionPattern: true,
|
|
36
38
|
labelsToAdd: { _id: true },
|
|
37
39
|
},
|
|
38
|
-
limit:
|
|
40
|
+
limit: MAX_RULES_EVALUATED_PER_PROJECT,
|
|
39
41
|
skip: 0,
|
|
40
42
|
});
|
|
41
43
|
|
|
44
|
+
logIfRuleReadWasTruncated({
|
|
45
|
+
ruleKind: "WorkflowLabelRule",
|
|
46
|
+
projectId: workflow.projectId,
|
|
47
|
+
rulesRead: rules.length,
|
|
48
|
+
});
|
|
49
|
+
|
|
42
50
|
if (rules.length === 0) {
|
|
43
51
|
return;
|
|
44
52
|
}
|
|
@@ -10,6 +10,8 @@ import WorkflowService from "./WorkflowService";
|
|
|
10
10
|
import ObjectID from "../../Types/ObjectID";
|
|
11
11
|
import CaptureSpan from "../Utils/Telemetry/CaptureSpan";
|
|
12
12
|
import logger, { LogAttributes } from "../Utils/Logger";
|
|
13
|
+
import { MAX_RULES_EVALUATED_PER_PROJECT } from "../../Utils/Rules/RuleEngineLimits";
|
|
14
|
+
import logIfRuleReadWasTruncated from "../Utils/Rules/RuleEngineRuleRead";
|
|
13
15
|
|
|
14
16
|
class WorkflowOwnerRuleEngineServiceClass {
|
|
15
17
|
/**
|
|
@@ -42,10 +44,16 @@ class WorkflowOwnerRuleEngineServiceClass {
|
|
|
42
44
|
ownerUsers: { _id: true },
|
|
43
45
|
ownerTeams: { _id: true },
|
|
44
46
|
},
|
|
45
|
-
limit:
|
|
47
|
+
limit: MAX_RULES_EVALUATED_PER_PROJECT,
|
|
46
48
|
skip: 0,
|
|
47
49
|
});
|
|
48
50
|
|
|
51
|
+
logIfRuleReadWasTruncated({
|
|
52
|
+
ruleKind: "WorkflowOwnerRule",
|
|
53
|
+
projectId: workflow.projectId,
|
|
54
|
+
rulesRead: rules.length,
|
|
55
|
+
});
|
|
56
|
+
|
|
49
57
|
if (rules.length === 0) {
|
|
50
58
|
return;
|
|
51
59
|
}
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
import GlobalConfig from "../../../Models/DatabaseModels/GlobalConfig";
|
|
2
|
+
import EnterpriseLicenseInstanceSummary from "../../../Types/EnterpriseLicense/EnterpriseLicenseInstanceSummary";
|
|
3
|
+
import BadDataException from "../../../Types/Exception/BadDataException";
|
|
4
|
+
import ObjectID from "../../../Types/ObjectID";
|
|
5
|
+
import EnterpriseLicenseSeatsUtil, {
|
|
6
|
+
SeatUsage,
|
|
7
|
+
} from "../../../Utils/EnterpriseLicense/EnterpriseLicenseSeats";
|
|
8
|
+
import { IsBillingEnabled, IsEnterpriseEdition } from "../../EnvironmentConfig";
|
|
9
|
+
import GlobalConfigService from "../../Services/GlobalConfigService";
|
|
10
|
+
|
|
11
|
+
/*
|
|
12
|
+
* Counts the users on THIS installation. Passed in rather than called
|
|
13
|
+
* directly so this util never has to import UserService — and, more usefully,
|
|
14
|
+
* so the count is only paid for on the installations that actually enforce a
|
|
15
|
+
* limit. On Community Edition and on oneuptime.com itself the callbacks below
|
|
16
|
+
* are never invoked.
|
|
17
|
+
*/
|
|
18
|
+
export type GetLocalUserCountFunction = () => Promise<number>;
|
|
19
|
+
|
|
20
|
+
/*
|
|
21
|
+
* Enforcement of the enterprise license seat limit on a self-hosted
|
|
22
|
+
* installation.
|
|
23
|
+
*
|
|
24
|
+
* The limit itself is set on oneuptime.com and mirrored into GlobalConfig by
|
|
25
|
+
* the daily report job (and by validating or refreshing the license by hand).
|
|
26
|
+
* This is the half that acts on it: it is the only thing standing between a
|
|
27
|
+
* customer's license terms and an unbounded User table.
|
|
28
|
+
*
|
|
29
|
+
* The seat arithmetic lives in Common/Utils/EnterpriseLicense/EnterpriseLicenseSeats
|
|
30
|
+
* as a pure function; everything here is about reading the license state and
|
|
31
|
+
* deciding whether the installation is one that enforces at all.
|
|
32
|
+
*/
|
|
33
|
+
export default class EnterpriseLicenseSeatUtil {
|
|
34
|
+
/*
|
|
35
|
+
* Whether this process is an installation whose users are governed by an
|
|
36
|
+
* enterprise license at all.
|
|
37
|
+
*
|
|
38
|
+
* Community Edition has no license and no limit. oneuptime.com runs with
|
|
39
|
+
* billing enabled and bounds seats through subscriptions instead
|
|
40
|
+
* (TeamMemberService.onBeforeCreate) — enforcing a license limit there as
|
|
41
|
+
* well would be a second, wrong answer to the same question.
|
|
42
|
+
*/
|
|
43
|
+
public static isSeatLimitEnforceable(): boolean {
|
|
44
|
+
return IsEnterpriseEdition && !IsBillingEnabled;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/*
|
|
48
|
+
* Seat usage derived from an already-loaded GlobalConfig row. Kept separate
|
|
49
|
+
* from the loading so a caller that has the row in hand — the license
|
|
50
|
+
* endpoint, which has just read it — does not read it a second time.
|
|
51
|
+
*
|
|
52
|
+
* A null config (a fresh installation whose GlobalConfig has not been seeded
|
|
53
|
+
* yet) yields no limit, which is the same answer as a licence with no seat
|
|
54
|
+
* limit set.
|
|
55
|
+
*/
|
|
56
|
+
public static getSeatUsageFromGlobalConfig(data: {
|
|
57
|
+
config: GlobalConfig | null;
|
|
58
|
+
localUserCount: number;
|
|
59
|
+
}): SeatUsage {
|
|
60
|
+
const config: GlobalConfig | null = data.config;
|
|
61
|
+
|
|
62
|
+
const instances: Array<EnterpriseLicenseInstanceSummary> = Array.isArray(
|
|
63
|
+
config?.enterpriseLicenseInstances,
|
|
64
|
+
)
|
|
65
|
+
? config.enterpriseLicenseInstances
|
|
66
|
+
: [];
|
|
67
|
+
|
|
68
|
+
return EnterpriseLicenseSeatsUtil.getSeatUsage({
|
|
69
|
+
userLimit: config?.enterpriseLicenseUserLimit,
|
|
70
|
+
localUserCount: data.localUserCount,
|
|
71
|
+
aggregatedUserCount: config?.enterpriseLicenseCurrentUserCount,
|
|
72
|
+
instances: instances,
|
|
73
|
+
thisInstanceId: config?.instanceId ? config.instanceId.toString() : null,
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/*
|
|
78
|
+
* Seat usage for this installation right now, or null on an installation
|
|
79
|
+
* that does not enforce a seat limit.
|
|
80
|
+
*
|
|
81
|
+
* Null rather than an unenforced SeatUsage so callers cannot accidentally
|
|
82
|
+
* present Community Edition with a seat report it has no business having,
|
|
83
|
+
* and so the user count is never queried there.
|
|
84
|
+
*/
|
|
85
|
+
public static async getSeatUsage(data: {
|
|
86
|
+
getLocalUserCount: GetLocalUserCountFunction;
|
|
87
|
+
}): Promise<SeatUsage | null> {
|
|
88
|
+
if (!this.isSeatLimitEnforceable()) {
|
|
89
|
+
return null;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
const config: GlobalConfig | null = await GlobalConfigService.findOneById({
|
|
93
|
+
id: ObjectID.getZeroObjectID(),
|
|
94
|
+
select: {
|
|
95
|
+
enterpriseLicenseUserLimit: true,
|
|
96
|
+
enterpriseLicenseCurrentUserCount: true,
|
|
97
|
+
enterpriseLicenseInstances: true,
|
|
98
|
+
instanceId: true,
|
|
99
|
+
},
|
|
100
|
+
props: {
|
|
101
|
+
isRoot: true,
|
|
102
|
+
},
|
|
103
|
+
});
|
|
104
|
+
|
|
105
|
+
return this.getSeatUsageForLoadedGlobalConfig({
|
|
106
|
+
config: config,
|
|
107
|
+
getLocalUserCount: data.getLocalUserCount,
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
/*
|
|
112
|
+
* The same answer as getSeatUsage, for a caller that has already loaded the
|
|
113
|
+
* GlobalConfig row (the license endpoint reads it to build its response, and
|
|
114
|
+
* reading it twice per request would be silly).
|
|
115
|
+
*
|
|
116
|
+
* The row must have been selected with enterpriseLicenseUserLimit,
|
|
117
|
+
* enterpriseLicenseCurrentUserCount, enterpriseLicenseInstances and
|
|
118
|
+
* instanceId, or the numbers here are a fiction built from missing columns.
|
|
119
|
+
*/
|
|
120
|
+
public static async getSeatUsageForLoadedGlobalConfig(data: {
|
|
121
|
+
config: GlobalConfig | null;
|
|
122
|
+
getLocalUserCount: GetLocalUserCountFunction;
|
|
123
|
+
}): Promise<SeatUsage | null> {
|
|
124
|
+
if (!this.isSeatLimitEnforceable()) {
|
|
125
|
+
return null;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
/*
|
|
129
|
+
* The seat limit is read before the users are counted, and the count is
|
|
130
|
+
* skipped entirely when there is no limit. An unlimited licence is the
|
|
131
|
+
* common case on a large installation, and that is exactly the
|
|
132
|
+
* installation where counting the User table on every user creation would
|
|
133
|
+
* be worth avoiding.
|
|
134
|
+
*/
|
|
135
|
+
const withoutLocalUsers: SeatUsage = this.getSeatUsageFromGlobalConfig({
|
|
136
|
+
config: data.config,
|
|
137
|
+
localUserCount: 0,
|
|
138
|
+
});
|
|
139
|
+
|
|
140
|
+
if (!withoutLocalUsers.isEnforced) {
|
|
141
|
+
return withoutLocalUsers;
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
return this.getSeatUsageFromGlobalConfig({
|
|
145
|
+
config: data.config,
|
|
146
|
+
localUserCount: await data.getLocalUserCount(),
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
/*
|
|
151
|
+
* Throws if this installation cannot take another user.
|
|
152
|
+
*
|
|
153
|
+
* Called from UserService.onBeforeCreate, which every path that creates a
|
|
154
|
+
* user goes through — team invitations, self-service signup, SSO and OIDC
|
|
155
|
+
* just-in-time provisioning, SCIM, and the Admin Dashboard. Enforcing on the
|
|
156
|
+
* User row rather than on the invitation is what makes that true: a seat is
|
|
157
|
+
* consumed by a person existing on the installation, not by the particular
|
|
158
|
+
* door they came through.
|
|
159
|
+
*
|
|
160
|
+
* It is also why this deliberately does NOT exempt root/internal writes.
|
|
161
|
+
* Team invitations create the invited user with `isRoot: true`, so an
|
|
162
|
+
* isRoot escape hatch here would exempt the single most important path.
|
|
163
|
+
*/
|
|
164
|
+
public static async assertSeatAvailableForNewUser(data: {
|
|
165
|
+
getLocalUserCount: GetLocalUserCountFunction;
|
|
166
|
+
}): Promise<void> {
|
|
167
|
+
const seatUsage: SeatUsage | null = await this.getSeatUsage({
|
|
168
|
+
getLocalUserCount: data.getLocalUserCount,
|
|
169
|
+
});
|
|
170
|
+
|
|
171
|
+
if (!seatUsage || !seatUsage.isEnforced) {
|
|
172
|
+
return;
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
if (seatUsage.hasSeatForNewUser) {
|
|
176
|
+
return;
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
throw new BadDataException(
|
|
180
|
+
EnterpriseLicenseSeatsUtil.getSeatLimitReachedMessage({
|
|
181
|
+
seatsInUse: seatUsage.seatsInUse,
|
|
182
|
+
userLimit: seatUsage.userLimit as number,
|
|
183
|
+
}),
|
|
184
|
+
);
|
|
185
|
+
}
|
|
186
|
+
}
|