@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
|
@@ -0,0 +1,260 @@
|
|
|
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 OnCallDutyPolicyScheduleService from "./OnCallDutyPolicyScheduleService";
|
|
6
|
+
import CalendarFeedToken, {
|
|
7
|
+
CalendarFeedRotation,
|
|
8
|
+
} from "../Utils/OnCall/CalendarFeedToken";
|
|
9
|
+
import CaptureSpan from "../Utils/Telemetry/CaptureSpan";
|
|
10
|
+
import Model from "../../Models/DatabaseModels/OnCallDutyPolicyScheduleCalendarFeed";
|
|
11
|
+
import OnCallDutyPolicySchedule from "../../Models/DatabaseModels/OnCallDutyPolicySchedule";
|
|
12
|
+
import LIMIT_MAX from "../../Types/Database/LimitMax";
|
|
13
|
+
import BadDataException from "../../Types/Exception/BadDataException";
|
|
14
|
+
import NotFoundException from "../../Types/Exception/NotFoundException";
|
|
15
|
+
import CalendarFeedWindow from "../../Types/OnCallDutyPolicy/CalendarFeedWindow";
|
|
16
|
+
import ObjectID from "../../Types/ObjectID";
|
|
17
|
+
import PositiveNumber from "../../Types/PositiveNumber";
|
|
18
|
+
|
|
19
|
+
/*
|
|
20
|
+
* Bounds for the coverage-gap threshold: a gap shorter than a minute is a
|
|
21
|
+
* seam artefact, and a threshold longer than a week would never emit.
|
|
22
|
+
*/
|
|
23
|
+
export const MIN_MINIMUM_GAP_MINUTES: number = 1;
|
|
24
|
+
export const MAX_MINIMUM_GAP_MINUTES: number = 7 * 24 * 60;
|
|
25
|
+
|
|
26
|
+
/*
|
|
27
|
+
* The shared, project-owned calendar feed of one on-call schedule.
|
|
28
|
+
*
|
|
29
|
+
* WHAT THE HOOKS GUARANTEE
|
|
30
|
+
*
|
|
31
|
+
* - The schedule exists in the caller's project. The foreign key alone
|
|
32
|
+
* would accept a schedule from another project (the FK does not know
|
|
33
|
+
* about tenants), and a feed that renders another project's roster to
|
|
34
|
+
* whoever holds this project's link is exactly the leak the tenant column
|
|
35
|
+
* exists to prevent.
|
|
36
|
+
* - One feed per schedule. The unique index enforces it at the database;
|
|
37
|
+
* the hook turns the constraint violation into a message a person can
|
|
38
|
+
* act on.
|
|
39
|
+
* - The token is minted HERE, on every create, whatever the request
|
|
40
|
+
* carried. Publishing a feed is a normal, permission-checked create
|
|
41
|
+
* (the schedule's Edit list), and the plaintext is then read back by the
|
|
42
|
+
* calendar API's `/current` route through the encrypted `token` column.
|
|
43
|
+
* - pastDays / futureDays are clamped and minimumGapMinutes is bounded on
|
|
44
|
+
* every write.
|
|
45
|
+
*
|
|
46
|
+
* rotateTokenById and rotateFeedsForMemberLeave are root writes for the
|
|
47
|
+
* calendar API and the team-member cleanup respectively; cache purging stays
|
|
48
|
+
* with the caller.
|
|
49
|
+
*/
|
|
50
|
+
export class Service extends DatabaseService<Model> {
|
|
51
|
+
public constructor() {
|
|
52
|
+
super(Model);
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
@CaptureSpan()
|
|
56
|
+
protected override async onBeforeCreate(
|
|
57
|
+
createBy: CreateBy<Model>,
|
|
58
|
+
): Promise<OnCreate<Model>> {
|
|
59
|
+
const projectId: ObjectID | undefined =
|
|
60
|
+
createBy.data.projectId || createBy.props.tenantId;
|
|
61
|
+
|
|
62
|
+
if (!projectId) {
|
|
63
|
+
throw new BadDataException("projectId is required");
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
const scheduleId: ObjectID | undefined =
|
|
67
|
+
createBy.data.onCallDutyPolicyScheduleId;
|
|
68
|
+
|
|
69
|
+
if (!scheduleId) {
|
|
70
|
+
throw new BadDataException("onCallDutyPolicyScheduleId is required");
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
createBy.data.projectId = projectId;
|
|
74
|
+
|
|
75
|
+
const schedule: OnCallDutyPolicySchedule | null =
|
|
76
|
+
await OnCallDutyPolicyScheduleService.findOneBy({
|
|
77
|
+
query: {
|
|
78
|
+
_id: scheduleId,
|
|
79
|
+
projectId: projectId,
|
|
80
|
+
},
|
|
81
|
+
select: {
|
|
82
|
+
_id: true,
|
|
83
|
+
},
|
|
84
|
+
props: {
|
|
85
|
+
isRoot: true,
|
|
86
|
+
ignoreHooks: true,
|
|
87
|
+
},
|
|
88
|
+
});
|
|
89
|
+
|
|
90
|
+
if (!schedule) {
|
|
91
|
+
throw new BadDataException("On-call schedule not found in this project.");
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
const existing: PositiveNumber = await this.countBy({
|
|
95
|
+
query: {
|
|
96
|
+
onCallDutyPolicyScheduleId: scheduleId,
|
|
97
|
+
},
|
|
98
|
+
props: {
|
|
99
|
+
isRoot: true,
|
|
100
|
+
},
|
|
101
|
+
});
|
|
102
|
+
|
|
103
|
+
if (existing.toNumber() > 0) {
|
|
104
|
+
throw new BadDataException(
|
|
105
|
+
"This schedule already has a shared calendar feed. Regenerate or edit the existing one instead.",
|
|
106
|
+
);
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
/*
|
|
110
|
+
* A request body never chooses the secret. Root callers (the calendar
|
|
111
|
+
* API) may pass a token they minted so they can answer with the URL in
|
|
112
|
+
* the same response; everyone else gets a fresh mint.
|
|
113
|
+
*/
|
|
114
|
+
CalendarFeedToken.applyTokenColumnsOnCreate(createBy.data, {
|
|
115
|
+
trustSuppliedToken: createBy.props.isRoot === true,
|
|
116
|
+
});
|
|
117
|
+
|
|
118
|
+
createBy.data.pastDays = CalendarFeedWindow.clampPastDays(
|
|
119
|
+
createBy.data.pastDays,
|
|
120
|
+
);
|
|
121
|
+
createBy.data.futureDays = CalendarFeedWindow.clampFutureDays(
|
|
122
|
+
createBy.data.futureDays,
|
|
123
|
+
);
|
|
124
|
+
|
|
125
|
+
if (createBy.data.minimumGapMinutes !== undefined) {
|
|
126
|
+
createBy.data.minimumGapMinutes = Service.validateMinimumGapMinutes(
|
|
127
|
+
createBy.data.minimumGapMinutes,
|
|
128
|
+
);
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
return { createBy, carryForward: null };
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
@CaptureSpan()
|
|
135
|
+
protected override async onBeforeUpdate(
|
|
136
|
+
updateBy: UpdateBy<Model>,
|
|
137
|
+
): Promise<OnUpdate<Model>> {
|
|
138
|
+
if (updateBy.data.pastDays !== undefined) {
|
|
139
|
+
updateBy.data.pastDays = CalendarFeedWindow.clampPastDays(
|
|
140
|
+
updateBy.data.pastDays,
|
|
141
|
+
);
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
if (updateBy.data.futureDays !== undefined) {
|
|
145
|
+
updateBy.data.futureDays = CalendarFeedWindow.clampFutureDays(
|
|
146
|
+
updateBy.data.futureDays,
|
|
147
|
+
);
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
if (updateBy.data.minimumGapMinutes !== undefined) {
|
|
151
|
+
updateBy.data.minimumGapMinutes = Service.validateMinimumGapMinutes(
|
|
152
|
+
updateBy.data.minimumGapMinutes,
|
|
153
|
+
);
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
return { updateBy, carryForward: null };
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
/*
|
|
160
|
+
* A whole number of minutes between MIN_MINIMUM_GAP_MINUTES and
|
|
161
|
+
* MAX_MINIMUM_GAP_MINUTES. Numeric strings are accepted because a root
|
|
162
|
+
* caller may hand over what a form posted; anything else is a 400.
|
|
163
|
+
*/
|
|
164
|
+
public static validateMinimumGapMinutes(value: unknown): number {
|
|
165
|
+
const parsed: number =
|
|
166
|
+
typeof value === "string" && value.trim() !== ""
|
|
167
|
+
? Number(value)
|
|
168
|
+
: (value as number);
|
|
169
|
+
|
|
170
|
+
if (
|
|
171
|
+
typeof parsed !== "number" ||
|
|
172
|
+
!Number.isInteger(parsed) ||
|
|
173
|
+
parsed < MIN_MINIMUM_GAP_MINUTES ||
|
|
174
|
+
parsed > MAX_MINIMUM_GAP_MINUTES
|
|
175
|
+
) {
|
|
176
|
+
throw new BadDataException(
|
|
177
|
+
`Minimum gap must be a whole number of minutes between ${MIN_MINIMUM_GAP_MINUTES} and ${MAX_MINIMUM_GAP_MINUTES}.`,
|
|
178
|
+
);
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
return parsed;
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
/**
|
|
185
|
+
* Rotate the token of an existing feed: mint a new one, move the current
|
|
186
|
+
* hash into the 30-day grace slot, stamp rotatedAt. Returns the new
|
|
187
|
+
* plaintext token ONCE. Root write; the caller purges caches.
|
|
188
|
+
*/
|
|
189
|
+
@CaptureSpan()
|
|
190
|
+
public async rotateTokenById(data: {
|
|
191
|
+
id: ObjectID;
|
|
192
|
+
}): Promise<CalendarFeedRotation> {
|
|
193
|
+
const existing: Model | null = await this.findOneBy({
|
|
194
|
+
query: { _id: data.id },
|
|
195
|
+
select: { _id: true, tokenHash: true },
|
|
196
|
+
props: { isRoot: true, ignoreHooks: true },
|
|
197
|
+
});
|
|
198
|
+
|
|
199
|
+
if (!existing) {
|
|
200
|
+
throw new NotFoundException("Calendar feed not found.");
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
const rotation: CalendarFeedRotation = CalendarFeedToken.buildRotation({
|
|
204
|
+
currentTokenHash: existing.tokenHash,
|
|
205
|
+
});
|
|
206
|
+
|
|
207
|
+
await this.updateOneById({
|
|
208
|
+
id: data.id,
|
|
209
|
+
data: CalendarFeedToken.toRotationUpdateData(rotation),
|
|
210
|
+
props: { isRoot: true },
|
|
211
|
+
});
|
|
212
|
+
|
|
213
|
+
return rotation;
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
/**
|
|
217
|
+
* Rotate every ENABLED feed in the project that opted into
|
|
218
|
+
* rotateWhenMemberLeaves. Called by the team-member cleanup when a user's
|
|
219
|
+
* last team membership in the project goes away. Returns the ids rotated
|
|
220
|
+
* so the caller can purge their caches. A disabled feed is left alone: it
|
|
221
|
+
* already serves an empty calendar, and rotating it would only reset the
|
|
222
|
+
* grace clock on a link nobody should be refreshing anyway.
|
|
223
|
+
*/
|
|
224
|
+
@CaptureSpan()
|
|
225
|
+
public async rotateFeedsForMemberLeave(data: {
|
|
226
|
+
projectId: ObjectID;
|
|
227
|
+
}): Promise<Array<ObjectID>> {
|
|
228
|
+
const feeds: Array<Model> = await this.findBy({
|
|
229
|
+
query: {
|
|
230
|
+
projectId: data.projectId,
|
|
231
|
+
isEnabled: true,
|
|
232
|
+
rotateWhenMemberLeaves: true,
|
|
233
|
+
},
|
|
234
|
+
select: {
|
|
235
|
+
_id: true,
|
|
236
|
+
},
|
|
237
|
+
limit: LIMIT_MAX,
|
|
238
|
+
skip: 0,
|
|
239
|
+
props: {
|
|
240
|
+
isRoot: true,
|
|
241
|
+
ignoreHooks: true,
|
|
242
|
+
},
|
|
243
|
+
});
|
|
244
|
+
|
|
245
|
+
const rotated: Array<ObjectID> = [];
|
|
246
|
+
|
|
247
|
+
for (const feed of feeds) {
|
|
248
|
+
if (!feed.id) {
|
|
249
|
+
continue;
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
await this.rotateTokenById({ id: feed.id });
|
|
253
|
+
rotated.push(feed.id);
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
return rotated;
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
export default new Service();
|
|
@@ -6,6 +6,8 @@ import OnCallDutyPolicyScheduleService from "./OnCallDutyPolicyScheduleService";
|
|
|
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 OnCallDutyPolicyScheduleLabelRuleEngineServiceClass {
|
|
11
13
|
@CaptureSpan()
|
|
@@ -32,10 +34,16 @@ class OnCallDutyPolicyScheduleLabelRuleEngineServiceClass {
|
|
|
32
34
|
onCallDutyPolicyScheduleDescriptionPattern: true,
|
|
33
35
|
labelsToAdd: { _id: true },
|
|
34
36
|
},
|
|
35
|
-
limit:
|
|
37
|
+
limit: MAX_RULES_EVALUATED_PER_PROJECT,
|
|
36
38
|
skip: 0,
|
|
37
39
|
});
|
|
38
40
|
|
|
41
|
+
logIfRuleReadWasTruncated({
|
|
42
|
+
ruleKind: "OnCallDutyPolicyScheduleLabelRule",
|
|
43
|
+
projectId: schedule.projectId,
|
|
44
|
+
rulesRead: rules.length,
|
|
45
|
+
});
|
|
46
|
+
|
|
39
47
|
if (rules.length === 0) {
|
|
40
48
|
return;
|
|
41
49
|
}
|
|
@@ -17,12 +17,61 @@ import UpdateBy from "../Types/Database/UpdateBy";
|
|
|
17
17
|
import Model from "../../Models/DatabaseModels/OnCallDutyPolicyScheduleLayer";
|
|
18
18
|
import CaptureSpan from "../Utils/Telemetry/CaptureSpan";
|
|
19
19
|
import OnCallDutyPolicyScheduleService from "./OnCallDutyPolicyScheduleService";
|
|
20
|
+
import { OnCallShiftChangeReason } from "../Utils/OnCall/OnCallShiftChangeListeners";
|
|
21
|
+
import logger from "../Utils/Logger";
|
|
20
22
|
|
|
21
23
|
export class Service extends DatabaseService<Model> {
|
|
22
24
|
public constructor() {
|
|
23
25
|
super(Model);
|
|
24
26
|
}
|
|
25
27
|
|
|
28
|
+
/*
|
|
29
|
+
* A layer edit changes who is on call and when for the whole schedule:
|
|
30
|
+
* bump its shiftConfigVersion, drop the calendar-feed caches and let the
|
|
31
|
+
* shift-change listeners re-plan. Runs AFTER the roster refresh so a
|
|
32
|
+
* listener that re-materializes sees the new configuration. Best-effort by
|
|
33
|
+
* construction (propagateShiftConfigChange never throws).
|
|
34
|
+
*/
|
|
35
|
+
private async propagateLayerChange(
|
|
36
|
+
scheduleId: ObjectID | null | undefined,
|
|
37
|
+
projectId: ObjectID | null | undefined,
|
|
38
|
+
): Promise<void> {
|
|
39
|
+
if (!scheduleId) {
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
await OnCallDutyPolicyScheduleService.propagateShiftConfigChange({
|
|
44
|
+
scheduleIds: [scheduleId],
|
|
45
|
+
projectId: projectId || null,
|
|
46
|
+
reason: OnCallShiftChangeReason.LayerChanged,
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Re-resolve and persist the schedule's roster after a layer change.
|
|
52
|
+
* Best-effort: the row is already committed when the success hooks run, so
|
|
53
|
+
* a throwing refresh (a concurrently-deleted schedule, a transient
|
|
54
|
+
* persistence or notification failure) must not abort the hook before
|
|
55
|
+
* propagateLayerChange bumps the shiftConfigVersion and purges the feed
|
|
56
|
+
* caches — otherwise the caches would keep serving the pre-edit roster for
|
|
57
|
+
* up to their TTL and the reminder change pass would be skipped. Mirrors
|
|
58
|
+
* OnCallDutyPolicyEscalationRuleScheduleService.refreshScheduleRoster.
|
|
59
|
+
*/
|
|
60
|
+
private async refreshScheduleRosterBestEffort(
|
|
61
|
+
scheduleId: ObjectID,
|
|
62
|
+
): Promise<void> {
|
|
63
|
+
try {
|
|
64
|
+
await OnCallDutyPolicyScheduleService.refreshCurrentUserIdAndHandoffTimeInSchedule(
|
|
65
|
+
scheduleId,
|
|
66
|
+
);
|
|
67
|
+
} catch (err) {
|
|
68
|
+
logger.error(
|
|
69
|
+
"Error refreshing the schedule roster after a layer change (best-effort).",
|
|
70
|
+
);
|
|
71
|
+
logger.error(err);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
|
|
26
75
|
/*
|
|
27
76
|
* A rotation interval count of 0 / NaN / negative breaks the handoff math
|
|
28
77
|
* (division by zero, Invalid Date), so reject it at the persistence boundary.
|
|
@@ -153,6 +202,7 @@ export class Service extends DatabaseService<Model> {
|
|
|
153
202
|
id: createdItem.id!,
|
|
154
203
|
select: {
|
|
155
204
|
onCallDutyPolicyScheduleId: true,
|
|
205
|
+
projectId: true,
|
|
156
206
|
},
|
|
157
207
|
props: {
|
|
158
208
|
isRoot: true,
|
|
@@ -163,8 +213,13 @@ export class Service extends DatabaseService<Model> {
|
|
|
163
213
|
return createdItem;
|
|
164
214
|
}
|
|
165
215
|
|
|
166
|
-
await
|
|
216
|
+
await this.refreshScheduleRosterBestEffort(
|
|
217
|
+
resource.onCallDutyPolicyScheduleId,
|
|
218
|
+
);
|
|
219
|
+
|
|
220
|
+
await this.propagateLayerChange(
|
|
167
221
|
resource.onCallDutyPolicyScheduleId,
|
|
222
|
+
resource.projectId,
|
|
168
223
|
);
|
|
169
224
|
|
|
170
225
|
return createdItem;
|
|
@@ -192,6 +247,7 @@ export class Service extends DatabaseService<Model> {
|
|
|
192
247
|
id: item,
|
|
193
248
|
select: {
|
|
194
249
|
onCallDutyPolicyScheduleId: true,
|
|
250
|
+
projectId: true,
|
|
195
251
|
},
|
|
196
252
|
props: {
|
|
197
253
|
isRoot: true,
|
|
@@ -202,8 +258,13 @@ export class Service extends DatabaseService<Model> {
|
|
|
202
258
|
continue;
|
|
203
259
|
}
|
|
204
260
|
|
|
205
|
-
await
|
|
261
|
+
await this.refreshScheduleRosterBestEffort(
|
|
262
|
+
resource.onCallDutyPolicyScheduleId,
|
|
263
|
+
);
|
|
264
|
+
|
|
265
|
+
await this.propagateLayerChange(
|
|
206
266
|
resource.onCallDutyPolicyScheduleId,
|
|
267
|
+
resource.projectId,
|
|
207
268
|
);
|
|
208
269
|
}
|
|
209
270
|
|
|
@@ -245,6 +306,7 @@ export class Service extends DatabaseService<Model> {
|
|
|
245
306
|
select: {
|
|
246
307
|
order: true,
|
|
247
308
|
onCallDutyPolicyScheduleId: true,
|
|
309
|
+
projectId: true,
|
|
248
310
|
},
|
|
249
311
|
});
|
|
250
312
|
}
|
|
@@ -271,8 +333,13 @@ export class Service extends DatabaseService<Model> {
|
|
|
271
333
|
false,
|
|
272
334
|
);
|
|
273
335
|
|
|
274
|
-
await
|
|
336
|
+
await this.refreshScheduleRosterBestEffort(
|
|
337
|
+
resource.onCallDutyPolicyScheduleId,
|
|
338
|
+
);
|
|
339
|
+
|
|
340
|
+
await this.propagateLayerChange(
|
|
275
341
|
resource.onCallDutyPolicyScheduleId,
|
|
342
|
+
resource.projectId,
|
|
276
343
|
);
|
|
277
344
|
}
|
|
278
345
|
}
|
|
@@ -12,12 +12,123 @@ import PositiveNumber from "../../Types/PositiveNumber";
|
|
|
12
12
|
import Model from "../../Models/DatabaseModels/OnCallDutyPolicyScheduleLayerUser";
|
|
13
13
|
import CaptureSpan from "../Utils/Telemetry/CaptureSpan";
|
|
14
14
|
import OnCallDutyPolicyScheduleService from "./OnCallDutyPolicyScheduleService";
|
|
15
|
+
import { OnCallShiftChangeReason } from "../Utils/OnCall/OnCallShiftChangeListeners";
|
|
16
|
+
import logger from "../Utils/Logger";
|
|
15
17
|
|
|
16
18
|
export class Service extends DatabaseService<Model> {
|
|
17
19
|
public constructor() {
|
|
18
20
|
super(Model);
|
|
19
21
|
}
|
|
20
22
|
|
|
23
|
+
/*
|
|
24
|
+
* Adding, removing or re-ordering a layer user rewrites the rotation of the
|
|
25
|
+
* whole schedule (the engine derives every position from the current user
|
|
26
|
+
* list), so the schedule's shiftConfigVersion is bumped, its feed caches
|
|
27
|
+
* dropped, and the listeners told — naming the user the row belongs to so
|
|
28
|
+
* their personal feed and reminders are refreshed even when they are no
|
|
29
|
+
* longer a member. Runs after the roster refresh; never throws.
|
|
30
|
+
*/
|
|
31
|
+
private async propagateLayerUserChange(
|
|
32
|
+
scheduleId: ObjectID | null | undefined,
|
|
33
|
+
projectId: ObjectID | null | undefined,
|
|
34
|
+
userId: ObjectID | null | undefined,
|
|
35
|
+
): Promise<void> {
|
|
36
|
+
if (!scheduleId) {
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
await OnCallDutyPolicyScheduleService.propagateShiftConfigChange({
|
|
41
|
+
scheduleIds: [scheduleId],
|
|
42
|
+
projectId: projectId || null,
|
|
43
|
+
userIds: userId ? [userId] : [],
|
|
44
|
+
reason: OnCallShiftChangeReason.LayerUserChanged,
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Re-resolve and persist the schedule's roster after a layer-user change.
|
|
50
|
+
* Best-effort: the row is already committed when the success hooks run, so
|
|
51
|
+
* a throwing refresh (a concurrently-deleted schedule, a transient
|
|
52
|
+
* persistence or notification failure) must not abort the hook before
|
|
53
|
+
* propagateLayerUserChange bumps the shiftConfigVersion and purges the
|
|
54
|
+
* feed caches — otherwise the caches would keep serving the pre-edit
|
|
55
|
+
* roster for up to their TTL and the reminder change pass would be
|
|
56
|
+
* skipped. Mirrors
|
|
57
|
+
* OnCallDutyPolicyEscalationRuleScheduleService.refreshScheduleRoster.
|
|
58
|
+
*/
|
|
59
|
+
private async refreshScheduleRosterBestEffort(
|
|
60
|
+
scheduleId: ObjectID,
|
|
61
|
+
): Promise<void> {
|
|
62
|
+
try {
|
|
63
|
+
await OnCallDutyPolicyScheduleService.refreshCurrentUserIdAndHandoffTimeInSchedule(
|
|
64
|
+
scheduleId,
|
|
65
|
+
);
|
|
66
|
+
} catch (err) {
|
|
67
|
+
logger.error(
|
|
68
|
+
"Error refreshing the schedule roster after a layer-user change (best-effort).",
|
|
69
|
+
);
|
|
70
|
+
logger.error(err);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* Renumber the users of a layer 1..n by their current order. Used by the
|
|
76
|
+
* team-member cleanup, which deletes layer-user rows as root (the per-row
|
|
77
|
+
* re-sequencing in onDeleteSuccess only runs for non-root deletes) and
|
|
78
|
+
* must restore the contiguous 1-based order the create-default (count + 1)
|
|
79
|
+
* and delete paths rely on. Idempotent.
|
|
80
|
+
*/
|
|
81
|
+
@CaptureSpan()
|
|
82
|
+
public async resequenceOrderInLayer(
|
|
83
|
+
onCallDutyPolicyScheduleLayerId: ObjectID,
|
|
84
|
+
): Promise<void> {
|
|
85
|
+
const rows: Array<Model> = await this.findBy({
|
|
86
|
+
query: {
|
|
87
|
+
onCallDutyPolicyScheduleLayerId: onCallDutyPolicyScheduleLayerId,
|
|
88
|
+
},
|
|
89
|
+
select: {
|
|
90
|
+
_id: true,
|
|
91
|
+
order: true,
|
|
92
|
+
},
|
|
93
|
+
sort: {
|
|
94
|
+
order: SortOrder.Ascending,
|
|
95
|
+
},
|
|
96
|
+
limit: LIMIT_MAX,
|
|
97
|
+
skip: 0,
|
|
98
|
+
props: {
|
|
99
|
+
isRoot: true,
|
|
100
|
+
},
|
|
101
|
+
});
|
|
102
|
+
|
|
103
|
+
let expectedOrder: number = 1;
|
|
104
|
+
|
|
105
|
+
for (const row of rows) {
|
|
106
|
+
if (row.order !== expectedOrder && row._id) {
|
|
107
|
+
/*
|
|
108
|
+
* ignoreHooks: renumbering is bookkeeping, not a roster change — the
|
|
109
|
+
* caller (the team-member cleanup) refreshes and propagates once per
|
|
110
|
+
* schedule itself. With hooks on, every renumbered row would run a
|
|
111
|
+
* full onUpdateSuccess (semaphore-locked roster refresh + version
|
|
112
|
+
* bump + cache purge + listener pass), i.e. N-1 redundant refreshes
|
|
113
|
+
* per layer, and any hook throw would abort the remaining renumbering.
|
|
114
|
+
*/
|
|
115
|
+
await this.updateOneBy({
|
|
116
|
+
query: {
|
|
117
|
+
_id: row._id,
|
|
118
|
+
},
|
|
119
|
+
data: {
|
|
120
|
+
order: expectedOrder,
|
|
121
|
+
},
|
|
122
|
+
props: {
|
|
123
|
+
isRoot: true,
|
|
124
|
+
ignoreHooks: true,
|
|
125
|
+
},
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
expectedOrder++;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
|
|
21
132
|
@CaptureSpan()
|
|
22
133
|
protected override async onBeforeCreate(
|
|
23
134
|
createBy: CreateBy<Model>,
|
|
@@ -82,8 +193,14 @@ export class Service extends DatabaseService<Model> {
|
|
|
82
193
|
);
|
|
83
194
|
|
|
84
195
|
if (resource.onCallDutyPolicyScheduleId) {
|
|
85
|
-
await
|
|
196
|
+
await this.refreshScheduleRosterBestEffort(
|
|
197
|
+
resource.onCallDutyPolicyScheduleId,
|
|
198
|
+
);
|
|
199
|
+
|
|
200
|
+
await this.propagateLayerUserChange(
|
|
86
201
|
resource.onCallDutyPolicyScheduleId,
|
|
202
|
+
resource.projectId,
|
|
203
|
+
resource.userId,
|
|
87
204
|
);
|
|
88
205
|
}
|
|
89
206
|
}
|
|
@@ -117,6 +234,8 @@ export class Service extends DatabaseService<Model> {
|
|
|
117
234
|
order: true,
|
|
118
235
|
onCallDutyPolicyScheduleLayerId: true,
|
|
119
236
|
onCallDutyPolicyScheduleId: true,
|
|
237
|
+
projectId: true,
|
|
238
|
+
userId: true,
|
|
120
239
|
},
|
|
121
240
|
});
|
|
122
241
|
}
|
|
@@ -135,6 +254,8 @@ export class Service extends DatabaseService<Model> {
|
|
|
135
254
|
id: createdItem.id!,
|
|
136
255
|
select: {
|
|
137
256
|
onCallDutyPolicyScheduleId: true,
|
|
257
|
+
projectId: true,
|
|
258
|
+
userId: true,
|
|
138
259
|
},
|
|
139
260
|
props: {
|
|
140
261
|
isRoot: true,
|
|
@@ -145,10 +266,16 @@ export class Service extends DatabaseService<Model> {
|
|
|
145
266
|
return createdItem;
|
|
146
267
|
}
|
|
147
268
|
|
|
148
|
-
await
|
|
269
|
+
await this.refreshScheduleRosterBestEffort(
|
|
149
270
|
resource.onCallDutyPolicyScheduleId,
|
|
150
271
|
);
|
|
151
272
|
|
|
273
|
+
await this.propagateLayerUserChange(
|
|
274
|
+
resource.onCallDutyPolicyScheduleId,
|
|
275
|
+
resource.projectId,
|
|
276
|
+
resource.userId,
|
|
277
|
+
);
|
|
278
|
+
|
|
152
279
|
return createdItem;
|
|
153
280
|
}
|
|
154
281
|
|
|
@@ -161,6 +288,8 @@ export class Service extends DatabaseService<Model> {
|
|
|
161
288
|
id: item,
|
|
162
289
|
select: {
|
|
163
290
|
onCallDutyPolicyScheduleId: true,
|
|
291
|
+
projectId: true,
|
|
292
|
+
userId: true,
|
|
164
293
|
},
|
|
165
294
|
props: {
|
|
166
295
|
isRoot: true,
|
|
@@ -171,8 +300,14 @@ export class Service extends DatabaseService<Model> {
|
|
|
171
300
|
continue;
|
|
172
301
|
}
|
|
173
302
|
|
|
174
|
-
await
|
|
303
|
+
await this.refreshScheduleRosterBestEffort(
|
|
304
|
+
resource.onCallDutyPolicyScheduleId,
|
|
305
|
+
);
|
|
306
|
+
|
|
307
|
+
await this.propagateLayerUserChange(
|
|
175
308
|
resource.onCallDutyPolicyScheduleId,
|
|
309
|
+
resource.projectId,
|
|
310
|
+
resource.userId,
|
|
176
311
|
);
|
|
177
312
|
}
|
|
178
313
|
|
|
@@ -10,6 +10,8 @@ import OnCallDutyPolicyScheduleService from "./OnCallDutyPolicyScheduleService";
|
|
|
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 OnCallDutyPolicyScheduleOwnerRuleEngineServiceClass {
|
|
15
17
|
@CaptureSpan()
|
|
@@ -38,10 +40,16 @@ class OnCallDutyPolicyScheduleOwnerRuleEngineServiceClass {
|
|
|
38
40
|
ownerUsers: { _id: true },
|
|
39
41
|
ownerTeams: { _id: true },
|
|
40
42
|
},
|
|
41
|
-
limit:
|
|
43
|
+
limit: MAX_RULES_EVALUATED_PER_PROJECT,
|
|
42
44
|
skip: 0,
|
|
43
45
|
});
|
|
44
46
|
|
|
47
|
+
logIfRuleReadWasTruncated({
|
|
48
|
+
ruleKind: "OnCallDutyPolicyScheduleOwnerRule",
|
|
49
|
+
projectId: schedule.projectId,
|
|
50
|
+
rulesRead: rules.length,
|
|
51
|
+
});
|
|
52
|
+
|
|
45
53
|
if (rules.length === 0) {
|
|
46
54
|
return;
|
|
47
55
|
}
|