@oneuptime/common 12.0.29 → 12.0.31
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Models/AnalyticsModels/SecurityEvent.ts +48 -16
- package/Models/AnalyticsModels/ThreatIntelIndicator.ts +10 -5
- package/Models/DatabaseModels/AlertSeverity.ts +44 -0
- package/Models/DatabaseModels/DetectionRule.ts +16 -5
- package/Models/DatabaseModels/GoogleSecOpsConnection.ts +14 -5
- package/Models/DatabaseModels/IncidentSeverity.ts +44 -0
- package/Models/DatabaseModels/Index.ts +13 -0
- package/Models/DatabaseModels/NetworkDevice.ts +113 -3
- package/Models/DatabaseModels/NetworkDeviceAutoImportRule.ts +88 -0
- package/Models/DatabaseModels/NetworkDeviceDiscoveryScan.ts +22 -0
- package/Models/DatabaseModels/NetworkDeviceOidTemplate.ts +499 -0
- package/Models/DatabaseModels/OnCallDutyPolicySchedule.ts +43 -0
- package/Models/DatabaseModels/OnCallDutyPolicyScheduleCalendarFeed.ts +662 -0
- package/Models/DatabaseModels/ProjectOnCallCalendarFeed.ts +584 -0
- package/Models/DatabaseModels/ThreatIntelFeed.ts +16 -5
- package/Models/DatabaseModels/UserOnCallCalendarFeed.ts +546 -0
- package/Models/DatabaseModels/UserOnCallShiftReminder.ts +231 -0
- package/Models/DatabaseModels/UserOnCallShiftReminderLog.ts +331 -0
- package/Server/API/GlobalConfigAPI.ts +362 -183
- package/Server/API/OnCallCalendarAPI.ts +2194 -0
- package/Server/API/TelemetryAPI.ts +42 -4
- package/Server/EnvironmentConfig.ts +250 -0
- package/Server/Infrastructure/OnCallCalendarFeedCache.ts +1050 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1790400000000-AddOnCallCalendarFeeds.ts +253 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1790500000000-AddNetworkDeviceOidTemplate.ts +59 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1790600000000-AddAutoImportRuleOidTemplate.ts +25 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +6 -0
- package/Server/Middleware/MultipartFormData.ts +118 -32
- package/Server/Middleware/OnCallCalendarFeedRateLimit.ts +487 -0
- package/Server/Services/AlertEpisodeLabelRuleEngineService.ts +9 -1
- package/Server/Services/AlertEpisodeOnCallRuleEngineService.ts +9 -1
- package/Server/Services/AlertEpisodeOwnerRuleEngineService.ts +9 -1
- package/Server/Services/AlertEpisodePrivacyRuleEngineService.ts +9 -1
- package/Server/Services/AlertGroupingEngineService.ts +9 -1
- package/Server/Services/AlertLabelRuleEngineService.ts +9 -1
- package/Server/Services/AlertOnCallRuleEngineService.ts +9 -1
- package/Server/Services/AlertOwnerRuleEngineService.ts +9 -1
- package/Server/Services/AlertPrivacyRuleEngineService.ts +9 -1
- package/Server/Services/AlertReminderRuleService.ts +9 -1
- package/Server/Services/AutoRemediationRuleEngineService.ts +9 -1
- package/Server/Services/CephClusterLabelRuleEngineService.ts +9 -1
- package/Server/Services/CephClusterOwnerRuleEngineService.ts +9 -1
- package/Server/Services/CloudResourceLabelRuleEngineService.ts +9 -1
- package/Server/Services/CloudResourceOwnerRuleEngineService.ts +9 -1
- package/Server/Services/DashboardLabelRuleEngineService.ts +9 -1
- package/Server/Services/DashboardOwnerRuleEngineService.ts +9 -1
- package/Server/Services/DockerHostLabelRuleEngineService.ts +9 -1
- package/Server/Services/DockerHostOwnerRuleEngineService.ts +9 -1
- package/Server/Services/DockerSwarmClusterLabelRuleEngineService.ts +9 -1
- package/Server/Services/DockerSwarmClusterOwnerRuleEngineService.ts +9 -1
- package/Server/Services/HostLabelRuleEngineService.ts +9 -1
- package/Server/Services/HostOwnerRuleEngineService.ts +9 -1
- package/Server/Services/IncidentEpisodeLabelRuleEngineService.ts +9 -1
- package/Server/Services/IncidentEpisodeOnCallRuleEngineService.ts +9 -1
- package/Server/Services/IncidentEpisodeOwnerRuleEngineService.ts +9 -1
- package/Server/Services/IncidentEpisodePrivacyRuleEngineService.ts +9 -1
- package/Server/Services/IncidentGroupingEngineService.ts +9 -1
- package/Server/Services/IncidentLabelRuleEngineService.ts +9 -1
- package/Server/Services/IncidentOnCallRuleEngineService.ts +9 -1
- package/Server/Services/IncidentOwnerRuleEngineService.ts +9 -1
- package/Server/Services/IncidentPrivacyRuleEngineService.ts +9 -1
- package/Server/Services/IncidentReminderRuleService.ts +9 -1
- package/Server/Services/IncidentSlaRuleService.ts +9 -1
- package/Server/Services/IncomingCallPolicyLabelRuleEngineService.ts +9 -1
- package/Server/Services/IncomingCallPolicyOwnerRuleEngineService.ts +9 -1
- package/Server/Services/Index.ts +14 -0
- package/Server/Services/IoTFleetLabelRuleEngineService.ts +9 -1
- package/Server/Services/IoTFleetOwnerRuleEngineService.ts +9 -1
- package/Server/Services/KubernetesClusterLabelRuleEngineService.ts +9 -1
- package/Server/Services/KubernetesClusterOwnerRuleEngineService.ts +9 -1
- package/Server/Services/KubernetesResourceService.ts +5 -1
- package/Server/Services/MonitorLabelRuleEngineService.ts +9 -1
- package/Server/Services/MonitorOwnerRuleEngineService.ts +9 -1
- package/Server/Services/NetworkDeviceAutoImportRuleEngineService.ts +35 -0
- package/Server/Services/NetworkDeviceAutoImportRuleService.ts +96 -0
- package/Server/Services/NetworkDeviceLabelRuleEngineService.ts +9 -1
- package/Server/Services/NetworkDeviceOidTemplateService.ts +201 -0
- package/Server/Services/NetworkDeviceOwnerRuleEngineService.ts +9 -1
- package/Server/Services/NetworkDeviceService.ts +209 -1
- package/Server/Services/OnCallDutyPolicyEscalationRuleScheduleService.ts +32 -0
- package/Server/Services/OnCallDutyPolicyLabelRuleEngineService.ts +9 -1
- package/Server/Services/OnCallDutyPolicyOwnerRuleEngineService.ts +9 -1
- package/Server/Services/OnCallDutyPolicyScheduleCalendarFeedService.ts +260 -0
- package/Server/Services/OnCallDutyPolicyScheduleLabelRuleEngineService.ts +9 -1
- package/Server/Services/OnCallDutyPolicyScheduleLayerService.ts +70 -3
- package/Server/Services/OnCallDutyPolicyScheduleLayerUserService.ts +138 -3
- package/Server/Services/OnCallDutyPolicyScheduleOwnerRuleEngineService.ts +9 -1
- package/Server/Services/OnCallDutyPolicyScheduleService.ts +1465 -134
- package/Server/Services/OnCallDutyPolicyUserOverrideService.ts +167 -31
- package/Server/Services/PodmanHostLabelRuleEngineService.ts +9 -1
- package/Server/Services/PodmanHostOwnerRuleEngineService.ts +9 -1
- package/Server/Services/ProjectOnCallCalendarFeedService.ts +192 -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/TeamMemberService.ts +489 -1
- package/Server/Services/TeamService.ts +50 -0
- package/Server/Services/TelemetrySourceMapService.ts +266 -23
- package/Server/Services/UserNotificationSettingService.ts +44 -1
- package/Server/Services/UserOnCallCalendarFeedService.ts +159 -0
- package/Server/Services/UserOnCallShiftReminderLogService.ts +151 -0
- package/Server/Services/UserOnCallShiftReminderService.ts +112 -0
- 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/OnCall/CalendarFeedToken.ts +241 -0
- package/Server/Utils/OnCall/OnCallCalendarFeedRenderer.ts +1488 -0
- package/Server/Utils/OnCall/OnCallCalendarFeedUrls.ts +230 -0
- package/Server/Utils/OnCall/OnCallShiftChangeListeners.ts +227 -0
- package/Server/Utils/OnCall/OnCallShiftMaterializer.ts +1127 -0
- package/Server/Utils/OnCall/OnCallShiftReminderListener.ts +174 -0
- package/Server/Utils/OnCall/OnCallShiftReminderRunner.ts +2584 -0
- package/Server/Utils/Response.ts +134 -0
- package/Server/Utils/Rules/RuleEngineRuleRead.ts +48 -0
- package/Server/Utils/StartServer.ts +10 -0
- package/Server/Utils/Telemetry/AppMetrics.ts +51 -0
- package/Server/Utils/Telemetry/ExceptionSanitizer.ts +14 -1
- package/Server/Utils/Telemetry/LogExceptionExtractor.ts +14 -2
- package/Server/Utils/Telemetry/SourceMapResolver.ts +16 -5
- package/Server/Utils/Telemetry/StackTraceParser.ts +399 -0
- package/Tests/App/Dashboard/EventOverlayHook.test.tsx +125 -0
- package/Tests/App/Dashboard/HeaderImageAssets.test.tsx +93 -0
- package/Tests/App/Dashboard/OnCallCalendarFeedLinks.test.tsx +229 -0
- package/Tests/App/Dashboard/OnCallCalendarFeedPlanGate.test.tsx +489 -0
- package/Tests/App/Dashboard/OnCallCalendarFeedSideMenus.test.tsx +149 -0
- package/Tests/App/Dashboard/OnCallCalendarFeedUtil.test.ts +855 -0
- package/Tests/App/Dashboard/OnCallPersonalCalendarFeed.test.tsx +1209 -0
- package/Tests/App/Dashboard/OnCallReadinessSurfaces.test.tsx +3 -3
- package/Tests/App/Dashboard/OnCallSharedCalendarFeedCard.test.tsx +1019 -0
- package/Tests/App/Dashboard/OnCallShiftRemindersAndUpcomingShifts.test.tsx +655 -0
- package/Tests/App/Dashboard/UserElementEmail.test.tsx +12 -4
- package/Tests/App/Dashboard/UserEmailCallSites.test.tsx +1 -1
- package/Tests/App/Dashboard/UserSettingsSetupChecklistModel.test.ts +73 -0
- package/Tests/Models/DatabaseModels/DomainRoleTierCoverage.test.ts +14 -0
- package/Tests/Models/DatabaseModels/ModelRegistryInvariants.test.ts +469 -0
- package/Tests/Models/OnCallCalendarFeedModels.test.ts +642 -0
- package/Tests/Models/OnCallDutyPolicyScheduleCalendarFeed.test.ts +288 -0
- package/Tests/Models/OnCallDutyPolicyScheduleShiftConfigVersion.test.ts +88 -0
- package/Tests/Models/SecurityDomainAccessControl.test.ts +429 -0
- package/Tests/Models/UserOnCallShiftReminderModels.test.ts +368 -0
- package/Tests/Server/API/GlobalConfigLicense.test.ts +657 -0
- package/Tests/Server/API/Helpers.ts +8 -0
- package/Tests/Server/API/OnCallCalendarAPI.test.ts +4461 -0
- package/Tests/Server/API/SecurityEventAttributesAPI.test.ts +84 -6
- package/Tests/Server/API/TelemetryResolveStackTraceAPI.test.ts +805 -0
- package/Tests/Server/EnvironmentConfigOnCallCalendarFeed.test.ts +357 -0
- package/Tests/Server/Infrastructure/OnCallCalendarFeedCache.test.ts +1589 -0
- package/Tests/Server/Infrastructure/Postgres/AddOnCallCalendarFeedsMigration.test.ts +394 -0
- package/Tests/Server/Middleware/IdentityRateLimit.test.ts +1144 -0
- package/Tests/Server/Middleware/MultipartFormData.test.ts +618 -3
- package/Tests/Server/Middleware/OnCallCalendarFeedRateLimit.test.ts +1365 -0
- package/Tests/Server/Services/FeedRetentionConsistency.test.ts +70 -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/OnCallCalendarFeedServices.test.ts +1103 -0
- package/Tests/Server/Services/OnCallDutyPolicyScheduleResolver.test.ts +1037 -0
- package/Tests/Server/Services/OnCallShiftConfigPropagation.test.ts +1270 -0
- package/Tests/Server/Services/RuleEngineRuleFetchLimit.test.ts +239 -0
- package/Tests/Server/Services/TeamDeleteMemberCleanup.test.ts +156 -0
- package/Tests/Server/Services/TeamMemberOnCallCleanup.test.ts +755 -0
- package/Tests/Server/Services/TelemetrySourceMapService.test.ts +1210 -2
- package/Tests/Server/Services/UserNotificationSettingShiftReminderDefaults.test.ts +267 -0
- package/Tests/Server/Services/UserOnCallShiftReminderServices.test.ts +583 -0
- 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/OnCallCalendarFeedPermissions.test.ts +254 -0
- package/Tests/Server/Types/Database/Permissions/ReadBlockPermission.test.ts +212 -0
- package/Tests/Server/Types/Database/Permissions/SecurityRoleAccess.test.ts +413 -0
- package/Tests/Server/Utils/CodeRepository.test.ts +689 -0
- package/Tests/Server/Utils/EnterpriseLicense/EnterpriseLicenseSeatUtil.test.ts +495 -0
- package/Tests/Server/Utils/ExceptionSanitizer.test.ts +77 -0
- package/Tests/Server/Utils/Monitor/CapturedMetricAttributeUtil.test.ts +284 -0
- package/Tests/Server/Utils/Monitor/MonitorCustomMetricAttributes.test.ts +503 -0
- package/Tests/Server/Utils/Monitor/MonitorTemplatePrototypePollution.test.ts +106 -0
- package/Tests/Server/Utils/Monitor/NetworkDeviceWalkLogWritePath.test.ts +33 -4
- package/Tests/Server/Utils/Monitor/NetworkDeviceWalkUtil.test.ts +14 -4
- package/Tests/Server/Utils/Monitor/NetworkInventoryUtil.test.ts +44 -0
- package/Tests/Server/Utils/OnCall/CalendarFeedToken.test.ts +467 -0
- package/Tests/Server/Utils/OnCall/OnCallCalendarFeedRenderer.test.ts +2142 -0
- package/Tests/Server/Utils/OnCall/OnCallCalendarFeedUrls.test.ts +278 -0
- package/Tests/Server/Utils/OnCall/OnCallResolverTestHarness.ts +440 -0
- package/Tests/Server/Utils/OnCall/OnCallShiftChangeListeners.test.ts +314 -0
- package/Tests/Server/Utils/OnCall/OnCallShiftMaterializer.test.ts +1502 -0
- package/Tests/Server/Utils/OnCall/OnCallShiftReminderListener.test.ts +491 -0
- package/Tests/Server/Utils/OnCall/OnCallShiftReminderRunner.test.ts +3088 -0
- package/Tests/Server/Utils/OnCall/OnCallShiftReminderTestHarness.ts +910 -0
- package/Tests/Server/Utils/OpenAPISpec.test.ts +536 -0
- package/Tests/Server/Utils/ResponseSendCalendarResponse.test.ts +561 -0
- package/Tests/Server/Utils/Rules/RuleEngineRuleRead.test.ts +115 -0
- package/Tests/Server/Utils/StackTraceParser.test.ts +610 -0
- package/Tests/Server/Utils/StartServerEncryptionSecretWarning.test.ts +64 -0
- package/Tests/Server/Utils/Telemetry/AppMetrics.test.ts +29 -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/Calendar/ICalendar.test.ts +488 -0
- package/Tests/Types/Monitor/SnmpMonitor/SnmpOidListUtil.test.ts +454 -0
- package/Tests/Types/NotificationSetting/NotificationSettingEventType.test.ts +53 -0
- package/Tests/Types/OnCallDutyPolicy/CalendarFeedTestFixtures.ts +310 -0
- package/Tests/Types/OnCallDutyPolicy/CalendarFeedWindow.test.ts +205 -0
- package/Tests/Types/OnCallDutyPolicy/LayerUtilLayerMetaAndIterationCap.test.ts +458 -0
- package/Tests/Types/OnCallDutyPolicy/MaterializedShift.test.ts +197 -0
- package/Tests/Types/OnCallDutyPolicy/OnCallCalendarFeedUtil.test.ts +1986 -0
- package/Tests/Types/OnCallDutyPolicy/ScheduleShiftUtilGroupKey.test.ts +678 -0
- package/Tests/Types/OnCallDutyPolicy/ShiftSeamUtil.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/TimeAnnotation.test.ts +471 -0
- package/Tests/UI/Components/EditionLabelLicenseRefresh.test.tsx +405 -0
- package/Tests/UI/Components/ErrorMessageRefreshControl.test.tsx +83 -0
- package/Tests/UI/Components/MarkdownConverters.test.ts +686 -0
- package/Tests/UI/Components/ModelTable/BaseModelTableDeleteAndEmptyStates.test.tsx +341 -0
- package/Tests/UI/Components/OrderedStatesList.test.tsx +5 -5
- package/Tests/UI/Components/PendingProjectInvitations.test.tsx +1 -1
- package/Tests/UI/Components/TableSortAndMobileColumns.test.tsx +195 -0
- package/Tests/UI/Components/XAxis.test.ts +270 -5
- package/Tests/UI/Components/XAxisDaylightSaving.test.ts +113 -0
- package/Tests/UI/Styles/ChartFocusRing.test.ts +153 -0
- package/Tests/UI/Styles/ChartFocusRingCoverage.test.tsx +377 -0
- package/Tests/UI/Styles/ThemeStylesheet.ts +162 -0
- package/Tests/UI/Utils/Breadcrumb/fixtures/RealBreadcrumbTrails.ts +10 -0
- package/Tests/UI/Utils/Breadcrumb/fixtures/RealRoutePatterns.ts +2 -0
- package/Tests/Utils/EnterpriseLicenseSeats.test.ts +507 -0
- package/Tests/Utils/NetworkDiscovery/DiscoveredDeviceBuilder.test.ts +951 -1
- package/Tests/Utils/NetworkDiscovery/DiscoveredHostUtil.test.ts +238 -0
- package/Tests/Utils/NetworkDiscovery/DiscoveryReverseDnsChain.test.ts +1056 -0
- package/Tests/Utils/NetworkDiscovery/ReverseDnsNameUtil.test.ts +882 -0
- package/Types/Calendar/ICalendar.ts +442 -0
- package/Types/Date.ts +39 -0
- package/Types/Email/EmailTemplateType.ts +2 -0
- package/Types/Monitor/SnmpMonitor/SnmpOidListUtil.ts +333 -0
- package/Types/NotificationSetting/NotificationSettingEventType.ts +4 -0
- package/Types/OnCallDutyPolicy/CalendarFeedWindow.ts +140 -0
- package/Types/OnCallDutyPolicy/Layer.ts +190 -35
- package/Types/OnCallDutyPolicy/MaterializedShift.ts +274 -0
- package/Types/OnCallDutyPolicy/OnCallCalendarFeedUtil.ts +1415 -0
- package/Types/OnCallDutyPolicy/ScheduleShiftUtil.ts +159 -4
- package/Types/OnCallDutyPolicy/ShiftSeamUtil.ts +106 -0
- package/Types/Permission.ts +96 -0
- package/Types/Rum/SessionReplay.ts +21 -0
- package/Types/Telemetry/SourceMap.ts +8 -0
- package/UI/Components/Charts/ChartLibrary/Annotations/AnnotationHoverCard.tsx +176 -0
- package/UI/Components/Charts/ChartLibrary/Annotations/AnnotationLayout.ts +745 -0
- package/UI/Components/Charts/ChartLibrary/Annotations/ChartAnnotationLayer.tsx +576 -0
- package/UI/Components/Charts/ChartLibrary/Annotations/UseChartAnnotations.tsx +204 -0
- package/UI/Components/Charts/ChartLibrary/AreaChart/AreaChart.tsx +491 -544
- package/UI/Components/Charts/ChartLibrary/BarChart/BarChart.tsx +324 -372
- package/UI/Components/Charts/ChartLibrary/LineChart/LineChart.tsx +487 -540
- package/UI/Components/Charts/ChartLibrary/Types/FormattedReferenceRegion.ts +7 -3
- package/UI/Components/Charts/ChartLibrary/Types/FormattedTimeReferenceLine.ts +14 -3
- package/UI/Components/Charts/Types/ChartEventKind.ts +13 -0
- package/UI/Components/Charts/Types/ReferenceRegionProps.ts +6 -0
- package/UI/Components/Charts/Types/TimeReferenceLineProps.ts +20 -3
- package/UI/Components/Charts/Utils/TimeAnnotation.ts +69 -35
- package/UI/Components/Charts/Utils/XAxis.ts +125 -18
- package/UI/Components/EditionLabel/EditionLabel.tsx +280 -26
- package/UI/Components/ErrorMessage/ErrorMessage.tsx +21 -10
- package/UI/Components/Feed/FeedItem.tsx +4 -5
- package/UI/Components/Header/HeaderIconDropdownButton.tsx +1 -2
- package/UI/Components/Header/UserProfile/UserProfile.tsx +1 -2
- package/UI/Components/Image/Image.tsx +20 -3
- package/UI/Components/Markdown.tsx/MarkdownConverters.ts +0 -0
- package/UI/Components/MemberRoleAssignment/MemberRoleAssignment.tsx +1 -2
- package/UI/Components/ModelTable/BaseModelTable.tsx +150 -24
- package/UI/Components/Table/TableHeader.tsx +64 -48
- package/UI/Components/Table/TableRow.tsx +13 -3
- package/UI/Styles/Theme.css +38 -0
- package/Utils/EnterpriseLicense/EnterpriseLicenseSeats.ts +271 -0
- package/Utils/NetworkDiscovery/AutoImportRuleMatcher.ts +6 -0
- package/Utils/NetworkDiscovery/DiscoveredDeviceBuilder.ts +141 -10
- package/Utils/NetworkDiscovery/DiscoveredHostUtil.ts +55 -3
- package/Utils/NetworkDiscovery/ReverseDnsNameUtil.ts +151 -0
- package/Utils/Rules/RuleEngineLimits.ts +32 -0
- package/build/dist/Models/AnalyticsModels/SecurityEvent.js +48 -16
- package/build/dist/Models/AnalyticsModels/SecurityEvent.js.map +1 -1
- package/build/dist/Models/AnalyticsModels/ThreatIntelIndicator.js +10 -5
- package/build/dist/Models/AnalyticsModels/ThreatIntelIndicator.js.map +1 -1
- package/build/dist/Models/DatabaseModels/AlertSeverity.js +46 -1
- package/build/dist/Models/DatabaseModels/AlertSeverity.js.map +1 -1
- package/build/dist/Models/DatabaseModels/DetectionRule.js +16 -5
- package/build/dist/Models/DatabaseModels/DetectionRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/GoogleSecOpsConnection.js +14 -5
- package/build/dist/Models/DatabaseModels/GoogleSecOpsConnection.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncidentSeverity.js +46 -1
- package/build/dist/Models/DatabaseModels/IncidentSeverity.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Index.js +13 -0
- package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
- package/build/dist/Models/DatabaseModels/NetworkDevice.js +115 -3
- package/build/dist/Models/DatabaseModels/NetworkDevice.js.map +1 -1
- package/build/dist/Models/DatabaseModels/NetworkDeviceAutoImportRule.js +88 -0
- package/build/dist/Models/DatabaseModels/NetworkDeviceAutoImportRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/NetworkDeviceDiscoveryScan.js.map +1 -1
- package/build/dist/Models/DatabaseModels/NetworkDeviceOidTemplate.js +519 -0
- package/build/dist/Models/DatabaseModels/NetworkDeviceOidTemplate.js.map +1 -0
- package/build/dist/Models/DatabaseModels/OnCallDutyPolicySchedule.js +44 -0
- package/build/dist/Models/DatabaseModels/OnCallDutyPolicySchedule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/OnCallDutyPolicyScheduleCalendarFeed.js +699 -0
- package/build/dist/Models/DatabaseModels/OnCallDutyPolicyScheduleCalendarFeed.js.map +1 -0
- package/build/dist/Models/DatabaseModels/ProjectOnCallCalendarFeed.js +620 -0
- package/build/dist/Models/DatabaseModels/ProjectOnCallCalendarFeed.js.map +1 -0
- package/build/dist/Models/DatabaseModels/ThreatIntelFeed.js +16 -5
- package/build/dist/Models/DatabaseModels/ThreatIntelFeed.js.map +1 -1
- package/build/dist/Models/DatabaseModels/UserOnCallCalendarFeed.js +585 -0
- package/build/dist/Models/DatabaseModels/UserOnCallCalendarFeed.js.map +1 -0
- package/build/dist/Models/DatabaseModels/UserOnCallShiftReminder.js +247 -0
- package/build/dist/Models/DatabaseModels/UserOnCallShiftReminder.js.map +1 -0
- package/build/dist/Models/DatabaseModels/UserOnCallShiftReminderLog.js +355 -0
- package/build/dist/Models/DatabaseModels/UserOnCallShiftReminderLog.js.map +1 -0
- package/build/dist/Server/API/GlobalConfigAPI.js +293 -176
- package/build/dist/Server/API/GlobalConfigAPI.js.map +1 -1
- package/build/dist/Server/API/OnCallCalendarAPI.js +1371 -0
- package/build/dist/Server/API/OnCallCalendarAPI.js.map +1 -0
- 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 +185 -0
- package/build/dist/Server/EnvironmentConfig.js.map +1 -1
- package/build/dist/Server/Infrastructure/OnCallCalendarFeedCache.js +663 -0
- package/build/dist/Server/Infrastructure/OnCallCalendarFeedCache.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790400000000-AddOnCallCalendarFeeds.js +103 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790400000000-AddOnCallCalendarFeeds.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790500000000-AddNetworkDeviceOidTemplate.js +26 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790500000000-AddNetworkDeviceOidTemplate.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790600000000-AddAutoImportRuleOidTemplate.js +14 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790600000000-AddAutoImportRuleOidTemplate.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +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/Middleware/OnCallCalendarFeedRateLimit.js +342 -0
- package/build/dist/Server/Middleware/OnCallCalendarFeedRateLimit.js.map +1 -0
- package/build/dist/Server/Services/AlertEpisodeLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/AlertEpisodeLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/AlertEpisodeOnCallRuleEngineService.js +8 -1
- package/build/dist/Server/Services/AlertEpisodeOnCallRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/AlertEpisodeOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/AlertEpisodeOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/AlertEpisodePrivacyRuleEngineService.js +8 -1
- package/build/dist/Server/Services/AlertEpisodePrivacyRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/AlertGroupingEngineService.js +8 -1
- package/build/dist/Server/Services/AlertGroupingEngineService.js.map +1 -1
- package/build/dist/Server/Services/AlertLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/AlertLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/AlertOnCallRuleEngineService.js +8 -1
- package/build/dist/Server/Services/AlertOnCallRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/AlertOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/AlertOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/AlertPrivacyRuleEngineService.js +8 -1
- package/build/dist/Server/Services/AlertPrivacyRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/AlertReminderRuleService.js +8 -1
- package/build/dist/Server/Services/AlertReminderRuleService.js.map +1 -1
- package/build/dist/Server/Services/AutoRemediationRuleEngineService.js +8 -1
- package/build/dist/Server/Services/AutoRemediationRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/CephClusterLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/CephClusterLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/CephClusterOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/CephClusterOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/CloudResourceLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/CloudResourceLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/CloudResourceOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/CloudResourceOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/DashboardLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/DashboardLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/DashboardOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/DashboardOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/DockerHostLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/DockerHostLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/DockerHostOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/DockerHostOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/DockerSwarmClusterLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/DockerSwarmClusterLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/DockerSwarmClusterOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/DockerSwarmClusterOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/HostLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/HostLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/HostOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/HostOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/IncidentEpisodeLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/IncidentEpisodeLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/IncidentEpisodeOnCallRuleEngineService.js +8 -1
- package/build/dist/Server/Services/IncidentEpisodeOnCallRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/IncidentEpisodeOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/IncidentEpisodeOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/IncidentEpisodePrivacyRuleEngineService.js +8 -1
- package/build/dist/Server/Services/IncidentEpisodePrivacyRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/IncidentGroupingEngineService.js +8 -1
- package/build/dist/Server/Services/IncidentGroupingEngineService.js.map +1 -1
- package/build/dist/Server/Services/IncidentLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/IncidentLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/IncidentOnCallRuleEngineService.js +8 -1
- package/build/dist/Server/Services/IncidentOnCallRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/IncidentOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/IncidentOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/IncidentPrivacyRuleEngineService.js +8 -1
- package/build/dist/Server/Services/IncidentPrivacyRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/IncidentReminderRuleService.js +8 -1
- package/build/dist/Server/Services/IncidentReminderRuleService.js.map +1 -1
- package/build/dist/Server/Services/IncidentSlaRuleService.js +8 -1
- package/build/dist/Server/Services/IncidentSlaRuleService.js.map +1 -1
- package/build/dist/Server/Services/IncomingCallPolicyLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/IncomingCallPolicyLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/IncomingCallPolicyOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/IncomingCallPolicyOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/Index.js +14 -0
- package/build/dist/Server/Services/Index.js.map +1 -1
- package/build/dist/Server/Services/IoTFleetLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/IoTFleetLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/IoTFleetOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/IoTFleetOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/KubernetesClusterLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/KubernetesClusterLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/KubernetesClusterOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/KubernetesClusterOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/KubernetesResourceService.js +5 -1
- package/build/dist/Server/Services/KubernetesResourceService.js.map +1 -1
- package/build/dist/Server/Services/MonitorLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/MonitorLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/MonitorOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/MonitorOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/NetworkDeviceAutoImportRuleEngineService.js +30 -21
- package/build/dist/Server/Services/NetworkDeviceAutoImportRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/NetworkDeviceAutoImportRuleService.js +64 -0
- package/build/dist/Server/Services/NetworkDeviceAutoImportRuleService.js.map +1 -1
- package/build/dist/Server/Services/NetworkDeviceLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/NetworkDeviceLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/NetworkDeviceOidTemplateService.js +180 -0
- package/build/dist/Server/Services/NetworkDeviceOidTemplateService.js.map +1 -0
- package/build/dist/Server/Services/NetworkDeviceOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/NetworkDeviceOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/NetworkDeviceService.js +154 -1
- package/build/dist/Server/Services/NetworkDeviceService.js.map +1 -1
- package/build/dist/Server/Services/OnCallDutyPolicyEscalationRuleScheduleService.js +20 -0
- package/build/dist/Server/Services/OnCallDutyPolicyEscalationRuleScheduleService.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/OnCallDutyPolicyScheduleCalendarFeedService.js +219 -0
- package/build/dist/Server/Services/OnCallDutyPolicyScheduleCalendarFeedService.js.map +1 -0
- package/build/dist/Server/Services/OnCallDutyPolicyScheduleLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/OnCallDutyPolicyScheduleLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/OnCallDutyPolicyScheduleLayerService.js +47 -3
- package/build/dist/Server/Services/OnCallDutyPolicyScheduleLayerService.js.map +1 -1
- package/build/dist/Server/Services/OnCallDutyPolicyScheduleLayerUserService.js +112 -3
- package/build/dist/Server/Services/OnCallDutyPolicyScheduleLayerUserService.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/OnCallDutyPolicyScheduleService.js +955 -9
- package/build/dist/Server/Services/OnCallDutyPolicyScheduleService.js.map +1 -1
- package/build/dist/Server/Services/OnCallDutyPolicyUserOverrideService.js +93 -6
- package/build/dist/Server/Services/OnCallDutyPolicyUserOverrideService.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/ProjectOnCallCalendarFeedService.js +157 -0
- package/build/dist/Server/Services/ProjectOnCallCalendarFeedService.js.map +1 -0
- 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/TeamMemberService.js +396 -1
- package/build/dist/Server/Services/TeamMemberService.js.map +1 -1
- package/build/dist/Server/Services/TeamService.js +43 -0
- package/build/dist/Server/Services/TeamService.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 +26 -1
- package/build/dist/Server/Services/UserNotificationSettingService.js.map +1 -1
- package/build/dist/Server/Services/UserOnCallCalendarFeedService.js +140 -0
- package/build/dist/Server/Services/UserOnCallCalendarFeedService.js.map +1 -0
- package/build/dist/Server/Services/UserOnCallShiftReminderLogService.js +116 -0
- package/build/dist/Server/Services/UserOnCallShiftReminderLogService.js.map +1 -0
- package/build/dist/Server/Services/UserOnCallShiftReminderService.js +92 -0
- package/build/dist/Server/Services/UserOnCallShiftReminderService.js.map +1 -0
- 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/OnCall/CalendarFeedToken.js +161 -0
- package/build/dist/Server/Utils/OnCall/CalendarFeedToken.js.map +1 -0
- package/build/dist/Server/Utils/OnCall/OnCallCalendarFeedRenderer.js +983 -0
- package/build/dist/Server/Utils/OnCall/OnCallCalendarFeedRenderer.js.map +1 -0
- package/build/dist/Server/Utils/OnCall/OnCallCalendarFeedUrls.js +155 -0
- package/build/dist/Server/Utils/OnCall/OnCallCalendarFeedUrls.js.map +1 -0
- package/build/dist/Server/Utils/OnCall/OnCallShiftChangeListeners.js +145 -0
- package/build/dist/Server/Utils/OnCall/OnCallShiftChangeListeners.js.map +1 -0
- package/build/dist/Server/Utils/OnCall/OnCallShiftMaterializer.js +752 -0
- package/build/dist/Server/Utils/OnCall/OnCallShiftMaterializer.js.map +1 -0
- package/build/dist/Server/Utils/OnCall/OnCallShiftReminderListener.js +92 -0
- package/build/dist/Server/Utils/OnCall/OnCallShiftReminderListener.js.map +1 -0
- package/build/dist/Server/Utils/OnCall/OnCallShiftReminderRunner.js +1786 -0
- package/build/dist/Server/Utils/OnCall/OnCallShiftReminderRunner.js.map +1 -0
- package/build/dist/Server/Utils/Response.js +97 -0
- package/build/dist/Server/Utils/Response.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/StartServer.js +9 -1
- package/build/dist/Server/Utils/StartServer.js.map +1 -1
- package/build/dist/Server/Utils/Telemetry/AppMetrics.js +41 -0
- package/build/dist/Server/Utils/Telemetry/AppMetrics.js.map +1 -1
- 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/Calendar/ICalendar.js +290 -0
- package/build/dist/Types/Calendar/ICalendar.js.map +1 -0
- package/build/dist/Types/Date.js +27 -0
- package/build/dist/Types/Date.js.map +1 -1
- package/build/dist/Types/Email/EmailTemplateType.js +2 -0
- package/build/dist/Types/Email/EmailTemplateType.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/NotificationSetting/NotificationSettingEventType.js +3 -0
- package/build/dist/Types/NotificationSetting/NotificationSettingEventType.js.map +1 -1
- package/build/dist/Types/OnCallDutyPolicy/CalendarFeedWindow.js +97 -0
- package/build/dist/Types/OnCallDutyPolicy/CalendarFeedWindow.js.map +1 -0
- package/build/dist/Types/OnCallDutyPolicy/Layer.js +113 -19
- package/build/dist/Types/OnCallDutyPolicy/Layer.js.map +1 -1
- package/build/dist/Types/OnCallDutyPolicy/MaterializedShift.js +134 -0
- package/build/dist/Types/OnCallDutyPolicy/MaterializedShift.js.map +1 -0
- package/build/dist/Types/OnCallDutyPolicy/OnCallCalendarFeedUtil.js +800 -0
- package/build/dist/Types/OnCallDutyPolicy/OnCallCalendarFeedUtil.js.map +1 -0
- package/build/dist/Types/OnCallDutyPolicy/ScheduleShiftUtil.js +97 -3
- package/build/dist/Types/OnCallDutyPolicy/ScheduleShiftUtil.js.map +1 -1
- package/build/dist/Types/OnCallDutyPolicy/ShiftSeamUtil.js +77 -0
- package/build/dist/Types/OnCallDutyPolicy/ShiftSeamUtil.js.map +1 -0
- package/build/dist/Types/Permission.js +86 -0
- package/build/dist/Types/Permission.js.map +1 -1
- package/build/dist/Types/Rum/SessionReplay.js +19 -0
- package/build/dist/Types/Rum/SessionReplay.js.map +1 -1
- package/build/dist/UI/Components/Charts/ChartLibrary/Annotations/AnnotationHoverCard.js +83 -0
- package/build/dist/UI/Components/Charts/ChartLibrary/Annotations/AnnotationHoverCard.js.map +1 -0
- package/build/dist/UI/Components/Charts/ChartLibrary/Annotations/AnnotationLayout.js +531 -0
- package/build/dist/UI/Components/Charts/ChartLibrary/Annotations/AnnotationLayout.js.map +1 -0
- package/build/dist/UI/Components/Charts/ChartLibrary/Annotations/ChartAnnotationLayer.js +264 -0
- package/build/dist/UI/Components/Charts/ChartLibrary/Annotations/ChartAnnotationLayer.js.map +1 -0
- package/build/dist/UI/Components/Charts/ChartLibrary/Annotations/UseChartAnnotations.js +122 -0
- package/build/dist/UI/Components/Charts/ChartLibrary/Annotations/UseChartAnnotations.js.map +1 -0
- package/build/dist/UI/Components/Charts/ChartLibrary/AreaChart/AreaChart.js +213 -233
- package/build/dist/UI/Components/Charts/ChartLibrary/AreaChart/AreaChart.js.map +1 -1
- package/build/dist/UI/Components/Charts/ChartLibrary/BarChart/BarChart.js +139 -152
- package/build/dist/UI/Components/Charts/ChartLibrary/BarChart/BarChart.js.map +1 -1
- package/build/dist/UI/Components/Charts/ChartLibrary/LineChart/LineChart.js +212 -232
- package/build/dist/UI/Components/Charts/ChartLibrary/LineChart/LineChart.js.map +1 -1
- package/build/dist/UI/Components/Charts/Types/ChartEventKind.js +14 -0
- package/build/dist/UI/Components/Charts/Types/ChartEventKind.js.map +1 -0
- package/build/dist/UI/Components/Charts/Utils/TimeAnnotation.js +57 -28
- package/build/dist/UI/Components/Charts/Utils/TimeAnnotation.js.map +1 -1
- package/build/dist/UI/Components/Charts/Utils/XAxis.js +103 -17
- package/build/dist/UI/Components/Charts/Utils/XAxis.js.map +1 -1
- package/build/dist/UI/Components/EditionLabel/EditionLabel.js +198 -23
- package/build/dist/UI/Components/EditionLabel/EditionLabel.js.map +1 -1
- package/build/dist/UI/Components/ErrorMessage/ErrorMessage.js +15 -5
- package/build/dist/UI/Components/ErrorMessage/ErrorMessage.js.map +1 -1
- package/build/dist/UI/Components/Feed/FeedItem.js +4 -5
- package/build/dist/UI/Components/Feed/FeedItem.js.map +1 -1
- package/build/dist/UI/Components/Header/HeaderIconDropdownButton.js +1 -2
- package/build/dist/UI/Components/Header/HeaderIconDropdownButton.js.map +1 -1
- package/build/dist/UI/Components/Header/UserProfile/UserProfile.js.map +1 -1
- package/build/dist/UI/Components/Image/Image.js +6 -1
- package/build/dist/UI/Components/Image/Image.js.map +1 -1
- package/build/dist/UI/Components/Markdown.tsx/MarkdownConverters.js +0 -0
- package/build/dist/UI/Components/Markdown.tsx/MarkdownConverters.js.map +1 -1
- package/build/dist/UI/Components/MemberRoleAssignment/MemberRoleAssignment.js +1 -2
- package/build/dist/UI/Components/MemberRoleAssignment/MemberRoleAssignment.js.map +1 -1
- package/build/dist/UI/Components/ModelTable/BaseModelTable.js +104 -23
- package/build/dist/UI/Components/ModelTable/BaseModelTable.js.map +1 -1
- package/build/dist/UI/Components/Table/TableHeader.js +20 -22
- package/build/dist/UI/Components/Table/TableHeader.js.map +1 -1
- package/build/dist/UI/Components/Table/TableRow.js +13 -4
- package/build/dist/UI/Components/Table/TableRow.js.map +1 -1
- package/build/dist/Utils/EnterpriseLicense/EnterpriseLicenseSeats.js +153 -0
- package/build/dist/Utils/EnterpriseLicense/EnterpriseLicenseSeats.js.map +1 -0
- package/build/dist/Utils/NetworkDiscovery/AutoImportRuleMatcher.js.map +1 -1
- package/build/dist/Utils/NetworkDiscovery/DiscoveredDeviceBuilder.js +127 -7
- package/build/dist/Utils/NetworkDiscovery/DiscoveredDeviceBuilder.js.map +1 -1
- package/build/dist/Utils/NetworkDiscovery/DiscoveredHostUtil.js +50 -3
- package/build/dist/Utils/NetworkDiscovery/DiscoveredHostUtil.js.map +1 -1
- package/build/dist/Utils/NetworkDiscovery/ReverseDnsNameUtil.js +132 -0
- package/build/dist/Utils/NetworkDiscovery/ReverseDnsNameUtil.js.map +1 -0
- package/build/dist/Utils/Rules/RuleEngineLimits.js +31 -0
- package/build/dist/Utils/Rules/RuleEngineLimits.js.map +1 -0
- package/jest.config.json +1 -0
- package/package.json +2 -2
|
@@ -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
|
}
|
|
@@ -68,7 +68,13 @@ export class Service extends DatabaseService<UserNotificationSetting> {
|
|
|
68
68
|
smsMessage: SMSMessage;
|
|
69
69
|
callRequestMessage: CallRequestMessage;
|
|
70
70
|
pushNotificationMessage: PushNotificationMessage;
|
|
71
|
-
|
|
71
|
+
/*
|
|
72
|
+
* Optional: WhatsApp only delivers Meta-approved template payloads, so a
|
|
73
|
+
* caller whose event type has no registered template leaves this out and
|
|
74
|
+
* the channel is skipped (the body of this method already guards for it)
|
|
75
|
+
* instead of failing at the notification service.
|
|
76
|
+
*/
|
|
77
|
+
whatsAppMessage?: WhatsAppMessagePayload | undefined;
|
|
72
78
|
telegramMessage?: TelegramMessagePayload | undefined;
|
|
73
79
|
incidentId?: ObjectID | undefined;
|
|
74
80
|
alertId?: ObjectID | undefined;
|
|
@@ -846,6 +852,38 @@ export class Service extends DatabaseService<UserNotificationSetting> {
|
|
|
846
852
|
projectId,
|
|
847
853
|
NotificationSettingEventType.SEND_WHEN_USER_IS_NO_LONGER_ACTIVE_ON_ON_CALL_ROSTER,
|
|
848
854
|
);
|
|
855
|
+
|
|
856
|
+
await this.addShiftReminderNotificationSettings(userId, projectId);
|
|
857
|
+
}
|
|
858
|
+
|
|
859
|
+
/*
|
|
860
|
+
* The two shift-reminder events ("before my shift starts", "my upcoming
|
|
861
|
+
* shift is reassigned"). Email AND push on by default: a reminder that
|
|
862
|
+
* only lands in a mailbox is easy to miss at 05:45, and both are the
|
|
863
|
+
* user's own lead times, not a page. Idempotent — the
|
|
864
|
+
* AddShiftReminderNotificationSettingsForUsers data migration calls this
|
|
865
|
+
* for every existing member, and sendUserNotification sends nothing
|
|
866
|
+
* without a row, so this is what makes the reminder worker's output
|
|
867
|
+
* non-zero for users who joined before the events existed.
|
|
868
|
+
*/
|
|
869
|
+
@CaptureSpan()
|
|
870
|
+
public async addShiftReminderNotificationSettings(
|
|
871
|
+
userId: ObjectID,
|
|
872
|
+
projectId: ObjectID,
|
|
873
|
+
): Promise<void> {
|
|
874
|
+
await this.addNotificationSettingIfNotExists(
|
|
875
|
+
userId,
|
|
876
|
+
projectId,
|
|
877
|
+
NotificationSettingEventType.SEND_BEFORE_USER_ON_CALL_SHIFT_STARTS,
|
|
878
|
+
{ alertByPush: true },
|
|
879
|
+
);
|
|
880
|
+
|
|
881
|
+
await this.addNotificationSettingIfNotExists(
|
|
882
|
+
userId,
|
|
883
|
+
projectId,
|
|
884
|
+
NotificationSettingEventType.SEND_WHEN_USER_ON_CALL_SHIFT_IS_REASSIGNED,
|
|
885
|
+
{ alertByPush: true },
|
|
886
|
+
);
|
|
849
887
|
}
|
|
850
888
|
|
|
851
889
|
private async addAlertNotificationSettings(
|
|
@@ -940,6 +978,7 @@ export class Service extends DatabaseService<UserNotificationSetting> {
|
|
|
940
978
|
userId: ObjectID,
|
|
941
979
|
projectId: ObjectID,
|
|
942
980
|
eventType: NotificationSettingEventType,
|
|
981
|
+
options?: { alertByPush?: boolean | undefined },
|
|
943
982
|
): Promise<void> {
|
|
944
983
|
const existingNotification: PositiveNumber = await this.countBy({
|
|
945
984
|
query: {
|
|
@@ -959,6 +998,10 @@ export class Service extends DatabaseService<UserNotificationSetting> {
|
|
|
959
998
|
item.eventType = eventType;
|
|
960
999
|
item.alertByEmail = true;
|
|
961
1000
|
|
|
1001
|
+
if (options?.alertByPush) {
|
|
1002
|
+
item.alertByPush = true;
|
|
1003
|
+
}
|
|
1004
|
+
|
|
962
1005
|
await this.create({
|
|
963
1006
|
data: item,
|
|
964
1007
|
props: {
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
import CreateBy from "../Types/Database/CreateBy";
|
|
2
|
+
import UpdateBy from "../Types/Database/UpdateBy";
|
|
3
|
+
import { OnCreate, OnUpdate } from "../Types/Database/Hooks";
|
|
4
|
+
import DatabaseService from "./DatabaseService";
|
|
5
|
+
import CalendarFeedToken, {
|
|
6
|
+
CalendarFeedRotation,
|
|
7
|
+
MintedCalendarFeedToken,
|
|
8
|
+
} from "../Utils/OnCall/CalendarFeedToken";
|
|
9
|
+
import CaptureSpan from "../Utils/Telemetry/CaptureSpan";
|
|
10
|
+
import Model from "../../Models/DatabaseModels/UserOnCallCalendarFeed";
|
|
11
|
+
import BadDataException from "../../Types/Exception/BadDataException";
|
|
12
|
+
import NotAuthorizedException from "../../Types/Exception/NotAuthorizedException";
|
|
13
|
+
import NotFoundException from "../../Types/Exception/NotFoundException";
|
|
14
|
+
import CalendarFeedWindow from "../../Types/OnCallDutyPolicy/CalendarFeedWindow";
|
|
15
|
+
import ObjectID from "../../Types/ObjectID";
|
|
16
|
+
import OneUptimeDate from "../../Types/Date";
|
|
17
|
+
|
|
18
|
+
/*
|
|
19
|
+
* The personal calendar feed row: one per (project, user).
|
|
20
|
+
*
|
|
21
|
+
* WHAT THE HOOKS GUARANTEE
|
|
22
|
+
*
|
|
23
|
+
* - Only root creates one. The table create list is already empty, but the
|
|
24
|
+
* hook says it out loud: the plaintext token is minted here or by the
|
|
25
|
+
* calendar API, never by a request body.
|
|
26
|
+
* - A created row always carries a consistent token set (see
|
|
27
|
+
* CalendarFeedToken.applyTokenColumnsOnCreate): there is no path to a row
|
|
28
|
+
* whose hash does not match its token.
|
|
29
|
+
* - pastDays / futureDays are clamped to the CalendarFeedWindow bounds on
|
|
30
|
+
* every write, so a feed can never be asked to render a year.
|
|
31
|
+
*
|
|
32
|
+
* Rotation lives here too (rotateTokenById) so the grace-hash bookkeeping is
|
|
33
|
+
* written once and the API, the member-leave cleanup and the tests share it.
|
|
34
|
+
* Cache purging is the caller's job - this service knows nothing about the
|
|
35
|
+
* feed cache.
|
|
36
|
+
*/
|
|
37
|
+
export class Service extends DatabaseService<Model> {
|
|
38
|
+
public constructor() {
|
|
39
|
+
super(Model);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
@CaptureSpan()
|
|
43
|
+
protected override async onBeforeCreate(
|
|
44
|
+
createBy: CreateBy<Model>,
|
|
45
|
+
): Promise<OnCreate<Model>> {
|
|
46
|
+
if (!createBy.props.isRoot) {
|
|
47
|
+
throw new NotAuthorizedException(
|
|
48
|
+
"Calendar feeds are generated by the calendar API, not created directly.",
|
|
49
|
+
);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
const projectId: ObjectID | undefined =
|
|
53
|
+
createBy.data.projectId || createBy.props.tenantId;
|
|
54
|
+
|
|
55
|
+
if (!projectId) {
|
|
56
|
+
throw new BadDataException("projectId is required");
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
if (!createBy.data.userId) {
|
|
60
|
+
throw new BadDataException("userId is required");
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
createBy.data.projectId = projectId;
|
|
64
|
+
|
|
65
|
+
// Root only reaches this line, so a pre-minted token may be trusted.
|
|
66
|
+
CalendarFeedToken.applyTokenColumnsOnCreate(createBy.data, {
|
|
67
|
+
trustSuppliedToken: true,
|
|
68
|
+
});
|
|
69
|
+
|
|
70
|
+
createBy.data.pastDays = CalendarFeedWindow.clampPastDays(
|
|
71
|
+
createBy.data.pastDays,
|
|
72
|
+
);
|
|
73
|
+
createBy.data.futureDays = CalendarFeedWindow.clampFutureDays(
|
|
74
|
+
createBy.data.futureDays,
|
|
75
|
+
);
|
|
76
|
+
|
|
77
|
+
return { createBy, carryForward: null };
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
@CaptureSpan()
|
|
81
|
+
protected override async onBeforeUpdate(
|
|
82
|
+
updateBy: UpdateBy<Model>,
|
|
83
|
+
): Promise<OnUpdate<Model>> {
|
|
84
|
+
if (updateBy.data.pastDays !== undefined) {
|
|
85
|
+
updateBy.data.pastDays = CalendarFeedWindow.clampPastDays(
|
|
86
|
+
updateBy.data.pastDays,
|
|
87
|
+
);
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
if (updateBy.data.futureDays !== undefined) {
|
|
91
|
+
updateBy.data.futureDays = CalendarFeedWindow.clampFutureDays(
|
|
92
|
+
updateBy.data.futureDays,
|
|
93
|
+
);
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
return { updateBy, carryForward: null };
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* Create the feed row for a user in a project and hand the plaintext token
|
|
101
|
+
* back ONCE, so the caller can build the subscription URL without a
|
|
102
|
+
* decrypt round-trip. Root only; the caller is responsible for holding the
|
|
103
|
+
* per-(project, user) lock the API uses around mint-or-rotate.
|
|
104
|
+
*/
|
|
105
|
+
@CaptureSpan()
|
|
106
|
+
public async createForUser(data: {
|
|
107
|
+
projectId: ObjectID;
|
|
108
|
+
userId: ObjectID;
|
|
109
|
+
}): Promise<{ feed: Model; minted: MintedCalendarFeedToken }> {
|
|
110
|
+
const minted: MintedCalendarFeedToken = CalendarFeedToken.mintSet();
|
|
111
|
+
|
|
112
|
+
const feed: Model = new Model();
|
|
113
|
+
feed.projectId = data.projectId;
|
|
114
|
+
feed.userId = data.userId;
|
|
115
|
+
feed.token = minted.token;
|
|
116
|
+
feed.rotatedAt = OneUptimeDate.getCurrentDate();
|
|
117
|
+
|
|
118
|
+
const created: Model = await this.create({
|
|
119
|
+
data: feed,
|
|
120
|
+
props: { isRoot: true },
|
|
121
|
+
});
|
|
122
|
+
|
|
123
|
+
return { feed: created, minted };
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
/**
|
|
127
|
+
* Rotate the token of an existing feed: mint a new one, move the current
|
|
128
|
+
* hash into the 30-day grace slot, stamp rotatedAt. Returns the new
|
|
129
|
+
* plaintext token ONCE. Root write; the caller purges caches.
|
|
130
|
+
*/
|
|
131
|
+
@CaptureSpan()
|
|
132
|
+
public async rotateTokenById(data: {
|
|
133
|
+
id: ObjectID;
|
|
134
|
+
}): Promise<CalendarFeedRotation> {
|
|
135
|
+
const existing: Model | null = await this.findOneBy({
|
|
136
|
+
query: { _id: data.id },
|
|
137
|
+
select: { _id: true, tokenHash: true },
|
|
138
|
+
props: { isRoot: true, ignoreHooks: true },
|
|
139
|
+
});
|
|
140
|
+
|
|
141
|
+
if (!existing) {
|
|
142
|
+
throw new NotFoundException("Calendar feed not found.");
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
const rotation: CalendarFeedRotation = CalendarFeedToken.buildRotation({
|
|
146
|
+
currentTokenHash: existing.tokenHash,
|
|
147
|
+
});
|
|
148
|
+
|
|
149
|
+
await this.updateOneById({
|
|
150
|
+
id: data.id,
|
|
151
|
+
data: CalendarFeedToken.toRotationUpdateData(rotation),
|
|
152
|
+
props: { isRoot: true },
|
|
153
|
+
});
|
|
154
|
+
|
|
155
|
+
return rotation;
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
export default new Service();
|