@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,201 @@
|
|
|
1
|
+
import DatabaseService from "./DatabaseService";
|
|
2
|
+
import NetworkDeviceAutoImportRuleService from "./NetworkDeviceAutoImportRuleService";
|
|
3
|
+
import NetworkDeviceService from "./NetworkDeviceService";
|
|
4
|
+
import Model from "../../Models/DatabaseModels/NetworkDeviceOidTemplate";
|
|
5
|
+
import DatabaseCommonInteractionProps from "../../Types/BaseDatabase/DatabaseCommonInteractionProps";
|
|
6
|
+
import LIMIT_MAX from "../../Types/Database/LimitMax";
|
|
7
|
+
import Query from "../Types/Database/Query";
|
|
8
|
+
import BadDataException from "../../Types/Exception/BadDataException";
|
|
9
|
+
import ObjectID from "../../Types/ObjectID";
|
|
10
|
+
import PositiveNumber from "../../Types/PositiveNumber";
|
|
11
|
+
import SnmpOid from "../../Types/Monitor/SnmpMonitor/SnmpOid";
|
|
12
|
+
import SnmpOidListUtil, {
|
|
13
|
+
MAX_OIDS_PER_TEMPLATE,
|
|
14
|
+
} from "../../Types/Monitor/SnmpMonitor/SnmpOidListUtil";
|
|
15
|
+
import CreateBy from "../Types/Database/CreateBy";
|
|
16
|
+
import DeleteBy from "../Types/Database/DeleteBy";
|
|
17
|
+
import UpdateBy from "../Types/Database/UpdateBy";
|
|
18
|
+
import { OnCreate, OnDelete, OnUpdate } from "../Types/Database/Hooks";
|
|
19
|
+
import CaptureSpan from "../Utils/Telemetry/CaptureSpan";
|
|
20
|
+
|
|
21
|
+
/*
|
|
22
|
+
* OID Collection Templates carry COLLECTION config for a whole device type,
|
|
23
|
+
* so this service has exactly three jobs and deliberately no fourth:
|
|
24
|
+
*
|
|
25
|
+
* 1. Refuse a malformed OID list at save time. Nothing validated snmpOids
|
|
26
|
+
* before, which was survivable when one bad row broke one device; with
|
|
27
|
+
* a template it would break every device linked to it.
|
|
28
|
+
* 2. Answer "how many devices use this?" for the UI.
|
|
29
|
+
* 3. Refuse to delete a template that devices are still using.
|
|
30
|
+
*
|
|
31
|
+
* There is no syncToDevices, no onUpdateSuccess, and no fan-out of any kind.
|
|
32
|
+
* The template is resolved live against each device at poll time in
|
|
33
|
+
* NetworkDevicePoll, so there is nothing to push and nothing to reconcile -
|
|
34
|
+
* see the model's class comment for why that inverts MonitorTemplate.
|
|
35
|
+
*/
|
|
36
|
+
export class Service extends DatabaseService<Model> {
|
|
37
|
+
public constructor() {
|
|
38
|
+
super(Model);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
@CaptureSpan()
|
|
42
|
+
protected override async onBeforeCreate(
|
|
43
|
+
createBy: CreateBy<Model>,
|
|
44
|
+
): Promise<OnCreate<Model>> {
|
|
45
|
+
if (createBy.data.oids !== undefined) {
|
|
46
|
+
createBy.data.oids = SnmpOidListUtil.validateOidList(createBy.data.oids, {
|
|
47
|
+
max: MAX_OIDS_PER_TEMPLATE,
|
|
48
|
+
label: "OID Collection Template",
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
return { createBy, carryForward: null };
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
@CaptureSpan()
|
|
56
|
+
protected override async onBeforeUpdate(
|
|
57
|
+
updateBy: UpdateBy<Model>,
|
|
58
|
+
): Promise<OnUpdate<Model>> {
|
|
59
|
+
/*
|
|
60
|
+
* `!== undefined` rather than a truthiness check: an explicit empty array
|
|
61
|
+
* is a legitimate "this template collects nothing" edit, and
|
|
62
|
+
* validateOidList accepts it.
|
|
63
|
+
*/
|
|
64
|
+
if (updateBy.data.oids !== undefined) {
|
|
65
|
+
updateBy.data.oids = SnmpOidListUtil.validateOidList(
|
|
66
|
+
updateBy.data.oids as Array<SnmpOid>,
|
|
67
|
+
{
|
|
68
|
+
max: MAX_OIDS_PER_TEMPLATE,
|
|
69
|
+
label: "OID Collection Template",
|
|
70
|
+
},
|
|
71
|
+
);
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
return { updateBy, carryForward: null };
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/*
|
|
78
|
+
* Deleting a template devices still use would silently drop OIDs from every
|
|
79
|
+
* one of them: the FK is ON DELETE SET NULL, so those devices just quietly
|
|
80
|
+
* fall back to their own lists on the next poll with nothing to tell
|
|
81
|
+
* anyone. Refuse, and say how many devices are in the way.
|
|
82
|
+
*
|
|
83
|
+
* Counting rather than keeping a rollup column is deliberate - a maintained
|
|
84
|
+
* counter would make this row hot under every device create and rebind, and
|
|
85
|
+
* MonitorTemplateService.countLinkedMonitors already set the precedent.
|
|
86
|
+
*/
|
|
87
|
+
@CaptureSpan()
|
|
88
|
+
protected override async onBeforeDelete(
|
|
89
|
+
deleteBy: DeleteBy<Model>,
|
|
90
|
+
): Promise<OnDelete<Model>> {
|
|
91
|
+
const templatesToDelete: Array<Model> = await this.findBy({
|
|
92
|
+
/*
|
|
93
|
+
* This hook runs BEFORE DatabaseService permission-checks the query, so
|
|
94
|
+
* a raw isRoot read of deleteBy.query would hand back other tenants'
|
|
95
|
+
* templates. Re-apply the caller's tenant, exactly as NetworkSiteService
|
|
96
|
+
* does for the same reason.
|
|
97
|
+
*/
|
|
98
|
+
query: this.scopeQueryToCallerTenant(deleteBy.query, deleteBy.props),
|
|
99
|
+
select: {
|
|
100
|
+
_id: true,
|
|
101
|
+
name: true,
|
|
102
|
+
projectId: true,
|
|
103
|
+
},
|
|
104
|
+
limit: LIMIT_MAX,
|
|
105
|
+
skip: 0,
|
|
106
|
+
props: {
|
|
107
|
+
isRoot: true,
|
|
108
|
+
},
|
|
109
|
+
});
|
|
110
|
+
|
|
111
|
+
for (const template of templatesToDelete) {
|
|
112
|
+
if (!template.id || !template.projectId) {
|
|
113
|
+
continue;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
const linkedDeviceCount: number = await this.countLinkedDevices({
|
|
117
|
+
templateId: template.id,
|
|
118
|
+
projectId: template.projectId,
|
|
119
|
+
});
|
|
120
|
+
|
|
121
|
+
if (linkedDeviceCount > 0) {
|
|
122
|
+
throw new BadDataException(
|
|
123
|
+
`${template.name || "This OID Collection Template"} is still used by ${linkedDeviceCount} network device(s). Move those devices to another template, or clear their template, before deleting it.`,
|
|
124
|
+
);
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
/*
|
|
128
|
+
* Auto-import rules count too, and for the same reason.
|
|
129
|
+
*
|
|
130
|
+
* The FK there is also ON DELETE SET NULL, so deleting a template a rule
|
|
131
|
+
* still names does not fail - it silently turns that rule back into one
|
|
132
|
+
* that imports devices collecting nothing, and the next discovery scan
|
|
133
|
+
* quietly produces a fleet nobody configured. A rule can hold the last
|
|
134
|
+
* reference to a template with zero devices linked yet (it was created
|
|
135
|
+
* ahead of the scan), which is exactly when the device count alone says
|
|
136
|
+
* the delete is safe.
|
|
137
|
+
*/
|
|
138
|
+
const linkedRuleCount: PositiveNumber =
|
|
139
|
+
await NetworkDeviceAutoImportRuleService.countBy({
|
|
140
|
+
query: {
|
|
141
|
+
projectId: template.projectId,
|
|
142
|
+
oidTemplateId: template.id,
|
|
143
|
+
},
|
|
144
|
+
props: {
|
|
145
|
+
isRoot: true,
|
|
146
|
+
},
|
|
147
|
+
});
|
|
148
|
+
|
|
149
|
+
if (linkedRuleCount.toNumber() > 0) {
|
|
150
|
+
throw new BadDataException(
|
|
151
|
+
`${template.name || "This OID Collection Template"} is still used by ${linkedRuleCount.toNumber()} auto-import rule(s). Clear it from those rules before deleting it, or devices they import will collect nothing.`,
|
|
152
|
+
);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
return { deleteBy, carryForward: null };
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
/**
|
|
160
|
+
* How many devices collect this template's OIDs. Used by the template page
|
|
161
|
+
* and by the delete guard above.
|
|
162
|
+
*/
|
|
163
|
+
@CaptureSpan()
|
|
164
|
+
public async countLinkedDevices(data: {
|
|
165
|
+
templateId: ObjectID;
|
|
166
|
+
projectId: ObjectID;
|
|
167
|
+
}): Promise<number> {
|
|
168
|
+
const count: PositiveNumber = await NetworkDeviceService.countBy({
|
|
169
|
+
query: {
|
|
170
|
+
projectId: data.projectId,
|
|
171
|
+
oidTemplateId: data.templateId,
|
|
172
|
+
},
|
|
173
|
+
props: {
|
|
174
|
+
isRoot: true,
|
|
175
|
+
},
|
|
176
|
+
});
|
|
177
|
+
|
|
178
|
+
return count.toNumber();
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
/*
|
|
182
|
+
* See NetworkSiteService for the full explanation: hooks run before
|
|
183
|
+
* ModelPermission scopes the caller's query, so anything a hook reads with
|
|
184
|
+
* isRoot has to be re-scoped by hand or it spans projects.
|
|
185
|
+
*/
|
|
186
|
+
private scopeQueryToCallerTenant(
|
|
187
|
+
query: Query<Model>,
|
|
188
|
+
props: DatabaseCommonInteractionProps,
|
|
189
|
+
): Query<Model> {
|
|
190
|
+
if (props.isRoot || !props.tenantId) {
|
|
191
|
+
return query;
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
return {
|
|
195
|
+
...query,
|
|
196
|
+
projectId: props.tenantId,
|
|
197
|
+
};
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
export default new Service();
|
|
@@ -11,6 +11,8 @@ import ObjectID from "../../Types/ObjectID";
|
|
|
11
11
|
import RulePatternMatchUtil from "../../Utils/Rules/RulePatternMatchUtil";
|
|
12
12
|
import CaptureSpan from "../Utils/Telemetry/CaptureSpan";
|
|
13
13
|
import logger, { LogAttributes } from "../Utils/Logger";
|
|
14
|
+
import { MAX_RULES_EVALUATED_PER_PROJECT } from "../../Utils/Rules/RuleEngineLimits";
|
|
15
|
+
import logIfRuleReadWasTruncated from "../Utils/Rules/RuleEngineRuleRead";
|
|
14
16
|
|
|
15
17
|
class NetworkDeviceOwnerRuleEngineServiceClass {
|
|
16
18
|
/**
|
|
@@ -45,10 +47,16 @@ class NetworkDeviceOwnerRuleEngineServiceClass {
|
|
|
45
47
|
ownerUsers: { _id: true },
|
|
46
48
|
ownerTeams: { _id: true },
|
|
47
49
|
},
|
|
48
|
-
limit:
|
|
50
|
+
limit: MAX_RULES_EVALUATED_PER_PROJECT,
|
|
49
51
|
skip: 0,
|
|
50
52
|
});
|
|
51
53
|
|
|
54
|
+
logIfRuleReadWasTruncated({
|
|
55
|
+
ruleKind: "NetworkDeviceOwnerRule",
|
|
56
|
+
projectId: networkDevice.projectId,
|
|
57
|
+
rulesRead: rules.length,
|
|
58
|
+
});
|
|
59
|
+
|
|
52
60
|
if (rules.length === 0) {
|
|
53
61
|
return;
|
|
54
62
|
}
|
|
@@ -26,6 +26,13 @@ import CidrMatchUtil from "../../Utils/NetworkSite/CidrMatchUtil";
|
|
|
26
26
|
import { SiteAssignmentRuleRunResult } from "../../Types/NetworkAutomation/RuleRunResult";
|
|
27
27
|
import { NetworkDeviceMonitoringMethodUtil } from "../../Types/NetworkDevice/NetworkDeviceMonitoringMethod";
|
|
28
28
|
import RelationIdUtil from "../Utils/Database/RelationIdUtil";
|
|
29
|
+
import NetworkDeviceOidTemplate from "../../Models/DatabaseModels/NetworkDeviceOidTemplate";
|
|
30
|
+
import NetworkDeviceOidTemplateService from "./NetworkDeviceOidTemplateService";
|
|
31
|
+
import SnmpOid from "../../Types/Monitor/SnmpMonitor/SnmpOid";
|
|
32
|
+
import SnmpOidListUtil, {
|
|
33
|
+
MAX_DEVICE_SPECIFIC_OIDS,
|
|
34
|
+
MAX_EFFECTIVE_OIDS_PER_DEVICE,
|
|
35
|
+
} from "../../Types/Monitor/SnmpMonitor/SnmpOidListUtil";
|
|
29
36
|
import { EntityManager } from "typeorm";
|
|
30
37
|
import ModelPermission from "../Types/Database/Permissions/Index";
|
|
31
38
|
import QueryHelper from "../Types/Database/QueryHelper";
|
|
@@ -106,6 +113,30 @@ function readSiteIdFromData(data: Record<string, unknown>): ObjectID | null {
|
|
|
106
113
|
// Both spellings of "the monitor that reports this device's health".
|
|
107
114
|
const MONITOR_KEYS: Array<string> = ["monitorId", "monitor"];
|
|
108
115
|
|
|
116
|
+
/*
|
|
117
|
+
* Both spellings of "the OID Collection Template this device collects". The
|
|
118
|
+
* settings page posts the `oidTemplate` relation and the bulk action posts
|
|
119
|
+
* the `oidTemplateId` column, so a guard that watched only one of them would
|
|
120
|
+
* be trivially bypassable from the UI.
|
|
121
|
+
*/
|
|
122
|
+
const OID_TEMPLATE_KEYS: Array<string> = ["oidTemplateId", "oidTemplate"];
|
|
123
|
+
|
|
124
|
+
function readOidTemplateIdFromData(
|
|
125
|
+
data: Record<string, unknown>,
|
|
126
|
+
): ObjectID | null {
|
|
127
|
+
/*
|
|
128
|
+
* readConsistent, not read: a payload that writes BOTH spellings with
|
|
129
|
+
* different ids would otherwise have one of them validated and the other
|
|
130
|
+
* persisted, which turns the cross-project guard below into something a
|
|
131
|
+
* caller can steer. It refuses the contradiction instead of picking.
|
|
132
|
+
*/
|
|
133
|
+
return RelationIdUtil.readConsistent(
|
|
134
|
+
data,
|
|
135
|
+
OID_TEMPLATE_KEYS,
|
|
136
|
+
"OID Collection Template",
|
|
137
|
+
);
|
|
138
|
+
}
|
|
139
|
+
|
|
109
140
|
function readMonitorIdFromData(data: Record<string, unknown>): ObjectID | null {
|
|
110
141
|
return RelationIdUtil.read(data, MONITOR_KEYS);
|
|
111
142
|
}
|
|
@@ -838,6 +869,50 @@ export class Service extends DatabaseService<Model> {
|
|
|
838
869
|
}
|
|
839
870
|
}
|
|
840
871
|
|
|
872
|
+
/*
|
|
873
|
+
* Same hole as siteId, and it matters more here: the FK behind
|
|
874
|
+
* oidTemplateId only requires the row to exist, not that it belongs to the
|
|
875
|
+
* device's project. Tenant scoping is applied to the ROOT query only, so a
|
|
876
|
+
* device pointed at another project's template would leak that template's
|
|
877
|
+
* name and OID list through every nested `select: { oidTemplate: ... }` the
|
|
878
|
+
* dashboard makes - and the poll would ship those OIDs to this project's
|
|
879
|
+
* probe. Refuse the link at the point it is written, rather than auditing
|
|
880
|
+
* it afterwards at poll time.
|
|
881
|
+
*/
|
|
882
|
+
private async assertOidTemplateBelongsToProject(data: {
|
|
883
|
+
oidTemplateId: ObjectID;
|
|
884
|
+
projectId: ObjectID | undefined;
|
|
885
|
+
}): Promise<void> {
|
|
886
|
+
if (!data.projectId) {
|
|
887
|
+
return;
|
|
888
|
+
}
|
|
889
|
+
|
|
890
|
+
const oidTemplate: NetworkDeviceOidTemplate | null =
|
|
891
|
+
await NetworkDeviceOidTemplateService.findOneById({
|
|
892
|
+
id: data.oidTemplateId,
|
|
893
|
+
select: {
|
|
894
|
+
_id: true,
|
|
895
|
+
projectId: true,
|
|
896
|
+
},
|
|
897
|
+
props: {
|
|
898
|
+
isRoot: true,
|
|
899
|
+
},
|
|
900
|
+
});
|
|
901
|
+
|
|
902
|
+
if (!oidTemplate) {
|
|
903
|
+
throw new BadDataException("OID Collection Template not found.");
|
|
904
|
+
}
|
|
905
|
+
|
|
906
|
+
if (
|
|
907
|
+
oidTemplate.projectId &&
|
|
908
|
+
oidTemplate.projectId.toString() !== data.projectId.toString()
|
|
909
|
+
) {
|
|
910
|
+
throw new BadDataException(
|
|
911
|
+
"OID Collection Template must belong to the same project.",
|
|
912
|
+
);
|
|
913
|
+
}
|
|
914
|
+
}
|
|
915
|
+
|
|
841
916
|
/*
|
|
842
917
|
* onBeforeUpdate runs before DatabaseService permission-checks the query,
|
|
843
918
|
* so reading the raw client query as root would hand the hook rows from
|
|
@@ -877,6 +952,30 @@ export class Service extends DatabaseService<Model> {
|
|
|
877
952
|
});
|
|
878
953
|
}
|
|
879
954
|
|
|
955
|
+
const createOidTemplateId: ObjectID | null = readOidTemplateIdFromData(
|
|
956
|
+
createBy.data as unknown as Record<string, unknown>,
|
|
957
|
+
);
|
|
958
|
+
|
|
959
|
+
if (createOidTemplateId) {
|
|
960
|
+
await this.assertOidTemplateBelongsToProject({
|
|
961
|
+
oidTemplateId: createOidTemplateId,
|
|
962
|
+
projectId: createBy.data.projectId,
|
|
963
|
+
});
|
|
964
|
+
}
|
|
965
|
+
|
|
966
|
+
if (createBy.data.snmpOids !== undefined) {
|
|
967
|
+
// Same budget rule as onBeforeUpdate: the tight cap is what linking costs.
|
|
968
|
+
createBy.data.snmpOids = SnmpOidListUtil.validateOidList(
|
|
969
|
+
createBy.data.snmpOids,
|
|
970
|
+
{
|
|
971
|
+
max: createOidTemplateId
|
|
972
|
+
? MAX_DEVICE_SPECIFIC_OIDS
|
|
973
|
+
: MAX_EFFECTIVE_OIDS_PER_DEVICE,
|
|
974
|
+
label: "Device-Specific Health OIDs",
|
|
975
|
+
},
|
|
976
|
+
);
|
|
977
|
+
}
|
|
978
|
+
|
|
880
979
|
if (
|
|
881
980
|
NetworkDeviceMonitoringMethodUtil.isMonitorBacked(
|
|
882
981
|
createBy.data.monitoringMethod,
|
|
@@ -1098,8 +1197,34 @@ export class Service extends DatabaseService<Model> {
|
|
|
1098
1197
|
return dataKeys.includes(column);
|
|
1099
1198
|
},
|
|
1100
1199
|
);
|
|
1200
|
+
/*
|
|
1201
|
+
* The OID writes have to get past this return too, and that is the whole
|
|
1202
|
+
* reason they are named here.
|
|
1203
|
+
*
|
|
1204
|
+
* The early return exists so a write that changes neither site nor
|
|
1205
|
+
* identity skips a read it does not need — but linking a template and
|
|
1206
|
+
* editing snmpOids are EXACTLY such writes, so a guard placed below the
|
|
1207
|
+
* return would be dead code on the only path it exists for. Both need the
|
|
1208
|
+
* read: the tenancy check needs each matched device's projectId, and the
|
|
1209
|
+
* OID cap needs to know whether the device is linked to a template.
|
|
1210
|
+
*
|
|
1211
|
+
* `!== undefined` rather than truthiness for the OID list: every poll
|
|
1212
|
+
* writes device columns through this path (NetworkInventoryUtil), and an
|
|
1213
|
+
* explicit empty array is a legitimate "collect nothing device-specific"
|
|
1214
|
+
* edit.
|
|
1215
|
+
*/
|
|
1216
|
+
const isOidTemplateChange: boolean = RelationIdUtil.isWritten(
|
|
1217
|
+
dataKeys,
|
|
1218
|
+
OID_TEMPLATE_KEYS,
|
|
1219
|
+
);
|
|
1220
|
+
const isDeviceOidsChange: boolean = updateBy.data.snmpOids !== undefined;
|
|
1101
1221
|
|
|
1102
|
-
if (
|
|
1222
|
+
if (
|
|
1223
|
+
!isSiteChange &&
|
|
1224
|
+
!isIdentityChange &&
|
|
1225
|
+
!isOidTemplateChange &&
|
|
1226
|
+
!isDeviceOidsChange
|
|
1227
|
+
) {
|
|
1103
1228
|
return { updateBy, carryForward: null };
|
|
1104
1229
|
}
|
|
1105
1230
|
|
|
@@ -1112,6 +1237,9 @@ export class Service extends DatabaseService<Model> {
|
|
|
1112
1237
|
hostname: true,
|
|
1113
1238
|
name: true,
|
|
1114
1239
|
sysName: true,
|
|
1240
|
+
// Decide which OID budget applies below, and whether a link would truncate.
|
|
1241
|
+
oidTemplateId: true,
|
|
1242
|
+
snmpOids: true,
|
|
1115
1243
|
},
|
|
1116
1244
|
limit: LIMIT_MAX,
|
|
1117
1245
|
skip: 0,
|
|
@@ -1143,6 +1271,86 @@ export class Service extends DatabaseService<Model> {
|
|
|
1143
1271
|
}
|
|
1144
1272
|
}
|
|
1145
1273
|
|
|
1274
|
+
const newOidTemplateId: ObjectID | null = readOidTemplateIdFromData(
|
|
1275
|
+
updateBy.data as unknown as Record<string, unknown>,
|
|
1276
|
+
);
|
|
1277
|
+
|
|
1278
|
+
/*
|
|
1279
|
+
* Same shape as the site guard above: one check per distinct project in
|
|
1280
|
+
* the matched set, because a single updateBy can span devices from more
|
|
1281
|
+
* than one project when a root caller issues it.
|
|
1282
|
+
*/
|
|
1283
|
+
if (newOidTemplateId) {
|
|
1284
|
+
const checkedTemplateProjectIds: Set<string> = new Set();
|
|
1285
|
+
|
|
1286
|
+
for (const previousDevice of previousDevices) {
|
|
1287
|
+
if (
|
|
1288
|
+
!previousDevice.projectId ||
|
|
1289
|
+
checkedTemplateProjectIds.has(previousDevice.projectId.toString())
|
|
1290
|
+
) {
|
|
1291
|
+
continue;
|
|
1292
|
+
}
|
|
1293
|
+
checkedTemplateProjectIds.add(previousDevice.projectId.toString());
|
|
1294
|
+
|
|
1295
|
+
await this.assertOidTemplateBelongsToProject({
|
|
1296
|
+
oidTemplateId: newOidTemplateId,
|
|
1297
|
+
projectId: previousDevice.projectId,
|
|
1298
|
+
});
|
|
1299
|
+
}
|
|
1300
|
+
}
|
|
1301
|
+
|
|
1302
|
+
/*
|
|
1303
|
+
* How many OIDs a device may carry of its own.
|
|
1304
|
+
*
|
|
1305
|
+
* The tight budget is a consequence of ADOPTING a template, not a
|
|
1306
|
+
* retroactive limit on every device that already exists. A device with no
|
|
1307
|
+
* template collects only its own list, so its ceiling is the full
|
|
1308
|
+
* per-device budget; the moment it links to one, template plus
|
|
1309
|
+
* device-specific has to fit inside that same ceiling, and the
|
|
1310
|
+
* device-specific half is what gives.
|
|
1311
|
+
*
|
|
1312
|
+
* Enforcing the tight budget unconditionally would have been hostile in
|
|
1313
|
+
* exactly the wrong direction: a device that predates this feature, with a
|
|
1314
|
+
* long hand-built list, could no longer save ANY polling setting — the
|
|
1315
|
+
* fleet in issue #3507 being the likeliest example.
|
|
1316
|
+
*/
|
|
1317
|
+
/*
|
|
1318
|
+
* Linking a device whose STORED list already exceeds the device-specific
|
|
1319
|
+
* budget would leave the merge over the effective ceiling, and truncation
|
|
1320
|
+
* drops from the end — so the operator's own OIDs would silently stop
|
|
1321
|
+
* being polled, on a write that never mentioned them. Refuse the link and
|
|
1322
|
+
* say what to trim, rather than accepting it and losing data at poll time.
|
|
1323
|
+
*/
|
|
1324
|
+
if (isOidTemplateChange && newOidTemplateId && !isDeviceOidsChange) {
|
|
1325
|
+
for (const previousDevice of previousDevices) {
|
|
1326
|
+
const storedOidCount: number = (previousDevice.snmpOids || []).length;
|
|
1327
|
+
|
|
1328
|
+
if (storedOidCount > MAX_DEVICE_SPECIFIC_OIDS) {
|
|
1329
|
+
throw new BadDataException(
|
|
1330
|
+
`This device has ${storedOidCount} device-specific Health OIDs, and a device linked to an OID Collection Template may keep at most ${MAX_DEVICE_SPECIFIC_OIDS} of its own. Remove ${storedOidCount - MAX_DEVICE_SPECIFIC_OIDS} of them - or move them onto the template - before linking it.`,
|
|
1331
|
+
);
|
|
1332
|
+
}
|
|
1333
|
+
}
|
|
1334
|
+
}
|
|
1335
|
+
|
|
1336
|
+
if (isDeviceOidsChange) {
|
|
1337
|
+
const becomesLinked: boolean = isOidTemplateChange
|
|
1338
|
+
? Boolean(newOidTemplateId)
|
|
1339
|
+
: previousDevices.some((previousDevice: Model) => {
|
|
1340
|
+
return Boolean(previousDevice.oidTemplateId);
|
|
1341
|
+
});
|
|
1342
|
+
|
|
1343
|
+
updateBy.data.snmpOids = SnmpOidListUtil.validateOidList(
|
|
1344
|
+
updateBy.data.snmpOids as Array<SnmpOid>,
|
|
1345
|
+
{
|
|
1346
|
+
max: becomesLinked
|
|
1347
|
+
? MAX_DEVICE_SPECIFIC_OIDS
|
|
1348
|
+
: MAX_EFFECTIVE_OIDS_PER_DEVICE,
|
|
1349
|
+
label: "Device-Specific Health OIDs",
|
|
1350
|
+
},
|
|
1351
|
+
);
|
|
1352
|
+
}
|
|
1353
|
+
|
|
1146
1354
|
return {
|
|
1147
1355
|
updateBy,
|
|
1148
1356
|
carryForward: {
|
|
@@ -25,12 +25,35 @@ import { WhatsAppMessagePayload } from "../../Types/WhatsApp/WhatsAppMessage";
|
|
|
25
25
|
import OnCallDutyPolicyTimeLogService from "./OnCallDutyPolicyTimeLogService";
|
|
26
26
|
import OneUptimeDate from "../../Types/Date";
|
|
27
27
|
import logger, { LogAttributes } from "../Utils/Logger";
|
|
28
|
+
import { OnCallShiftChangeReason } from "../Utils/OnCall/OnCallShiftChangeListeners";
|
|
28
29
|
|
|
29
30
|
export class Service extends DatabaseService<Model> {
|
|
30
31
|
public constructor() {
|
|
31
32
|
super(Model);
|
|
32
33
|
}
|
|
33
34
|
|
|
35
|
+
/**
|
|
36
|
+
* Attaching to / detaching from a policy changes the schedule's policy
|
|
37
|
+
* context (which overrides apply, and which policies its calendar events
|
|
38
|
+
* list), so it is a configuration change for the calendar feeds and the
|
|
39
|
+
* reminders: bump shiftConfigVersion, purge the feed caches, notify the
|
|
40
|
+
* listeners. Runs after the roster refresh; never throws.
|
|
41
|
+
*/
|
|
42
|
+
private async propagateAttachmentChange(
|
|
43
|
+
onCallDutyPolicyScheduleId: ObjectID | null | undefined,
|
|
44
|
+
projectId: ObjectID | null | undefined,
|
|
45
|
+
): Promise<void> {
|
|
46
|
+
if (!onCallDutyPolicyScheduleId) {
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
await OnCallDutyPolicyScheduleService.propagateShiftConfigChange({
|
|
51
|
+
scheduleIds: [onCallDutyPolicyScheduleId],
|
|
52
|
+
projectId: projectId || null,
|
|
53
|
+
reason: OnCallShiftChangeReason.PolicyAttachmentChanged,
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
|
|
34
57
|
/**
|
|
35
58
|
* Re-resolve and persist the schedule's roster after it is attached to, or
|
|
36
59
|
* detached from, an on-call policy.
|
|
@@ -123,6 +146,11 @@ export class Service extends DatabaseService<Model> {
|
|
|
123
146
|
*/
|
|
124
147
|
await this.refreshScheduleRoster(createdModel.onCallDutyPolicyScheduleId);
|
|
125
148
|
|
|
149
|
+
await this.propagateAttachmentChange(
|
|
150
|
+
createdModel.onCallDutyPolicyScheduleId,
|
|
151
|
+
createdModel.projectId,
|
|
152
|
+
);
|
|
153
|
+
|
|
126
154
|
// send notification to the new current user.
|
|
127
155
|
|
|
128
156
|
const userOnSchedule: ObjectID | null =
|
|
@@ -387,6 +415,10 @@ export class Service extends DatabaseService<Model> {
|
|
|
387
415
|
}
|
|
388
416
|
refreshedScheduleIds.add(scheduleId);
|
|
389
417
|
await this.refreshScheduleRoster(deletedItem.onCallDutyPolicyScheduleId);
|
|
418
|
+
await this.propagateAttachmentChange(
|
|
419
|
+
deletedItem.onCallDutyPolicyScheduleId,
|
|
420
|
+
deletedItem.projectId,
|
|
421
|
+
);
|
|
390
422
|
}
|
|
391
423
|
|
|
392
424
|
for (const deletedItem of deletedItems) {
|
|
@@ -6,6 +6,8 @@ import OnCallDutyPolicyService from "./OnCallDutyPolicyService";
|
|
|
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 OnCallDutyPolicyLabelRuleEngineServiceClass {
|
|
11
13
|
@CaptureSpan()
|
|
@@ -32,10 +34,16 @@ class OnCallDutyPolicyLabelRuleEngineServiceClass {
|
|
|
32
34
|
onCallDutyPolicyDescriptionPattern: 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: "OnCallDutyPolicyLabelRule",
|
|
43
|
+
projectId: onCallDutyPolicy.projectId,
|
|
44
|
+
rulesRead: rules.length,
|
|
45
|
+
});
|
|
46
|
+
|
|
39
47
|
if (rules.length === 0) {
|
|
40
48
|
return;
|
|
41
49
|
}
|
|
@@ -10,6 +10,8 @@ import OnCallDutyPolicyService from "./OnCallDutyPolicyService";
|
|
|
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 OnCallDutyPolicyOwnerRuleEngineServiceClass {
|
|
15
17
|
@CaptureSpan()
|
|
@@ -38,10 +40,16 @@ class OnCallDutyPolicyOwnerRuleEngineServiceClass {
|
|
|
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: "OnCallDutyPolicyOwnerRule",
|
|
49
|
+
projectId: onCallDutyPolicy.projectId,
|
|
50
|
+
rulesRead: rules.length,
|
|
51
|
+
});
|
|
52
|
+
|
|
45
53
|
if (rules.length === 0) {
|
|
46
54
|
return;
|
|
47
55
|
}
|