@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,271 @@
|
|
|
1
|
+
import EnterpriseLicenseInstanceSummary from "../../Types/EnterpriseLicense/EnterpriseLicenseInstanceSummary";
|
|
2
|
+
|
|
3
|
+
/*
|
|
4
|
+
* Everything the seat calculation needs, taken as plain values so this file
|
|
5
|
+
* stays a pure function the tests can drive directly. The server reads these
|
|
6
|
+
* off GlobalConfig; the browser reads them off the /global-config/license
|
|
7
|
+
* response.
|
|
8
|
+
*/
|
|
9
|
+
export interface SeatUsageInput {
|
|
10
|
+
/*
|
|
11
|
+
* The seat limit mirrored from oneuptime.com. Null, undefined or anything
|
|
12
|
+
* that is not a positive whole number means "no limit to enforce" — see
|
|
13
|
+
* getSeatUsage for why zero is included in that.
|
|
14
|
+
*/
|
|
15
|
+
userLimit?: number | null | undefined;
|
|
16
|
+
|
|
17
|
+
/*
|
|
18
|
+
* Users that exist on THIS installation right now. The live number, counted
|
|
19
|
+
* at the moment of the check rather than taken from the last daily report,
|
|
20
|
+
* because the whole point of enforcement is to catch the user who is being
|
|
21
|
+
* added a second after the report was sent.
|
|
22
|
+
*/
|
|
23
|
+
localUserCount: number;
|
|
24
|
+
|
|
25
|
+
/*
|
|
26
|
+
* Unique users across every instance sharing this license, as oneuptime.com
|
|
27
|
+
* last computed it. Up to a day stale, and only meaningful for a customer
|
|
28
|
+
* running more than one instance on one key.
|
|
29
|
+
*/
|
|
30
|
+
aggregatedUserCount?: number | null | undefined;
|
|
31
|
+
|
|
32
|
+
/*
|
|
33
|
+
* Per-instance breakdown from the same report. Used only to work out how
|
|
34
|
+
* much of aggregatedUserCount belongs to OTHER instances.
|
|
35
|
+
*/
|
|
36
|
+
instances?: Array<EnterpriseLicenseInstanceSummary> | null | undefined;
|
|
37
|
+
|
|
38
|
+
// This installation's own instance id, so it can find itself in `instances`.
|
|
39
|
+
thisInstanceId?: string | null | undefined;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
export interface SeatUsage {
|
|
43
|
+
/*
|
|
44
|
+
* False when the license carries no usable seat limit. Every other field is
|
|
45
|
+
* still filled in — a caller that wants to display usage can, it just must
|
|
46
|
+
* not block anything.
|
|
47
|
+
*/
|
|
48
|
+
isEnforced: boolean;
|
|
49
|
+
|
|
50
|
+
// The limit actually being enforced, or null when there is none.
|
|
51
|
+
userLimit: number | null;
|
|
52
|
+
|
|
53
|
+
/*
|
|
54
|
+
* The best estimate of how many licensed seats are consumed right now,
|
|
55
|
+
* across every instance on this license. See getSeatUsage for how it is
|
|
56
|
+
* derived and which way it is allowed to be wrong.
|
|
57
|
+
*/
|
|
58
|
+
seatsInUse: number;
|
|
59
|
+
|
|
60
|
+
// Null when there is no limit. Never negative — a breach reads as 0 free.
|
|
61
|
+
seatsRemaining: number | null;
|
|
62
|
+
|
|
63
|
+
/*
|
|
64
|
+
* The single question enforcement asks. True whenever there is no limit, so
|
|
65
|
+
* a caller can use this on its own without re-checking isEnforced.
|
|
66
|
+
*/
|
|
67
|
+
hasSeatForNewUser: boolean;
|
|
68
|
+
|
|
69
|
+
/*
|
|
70
|
+
* How many of seatsInUse are users this installation has never seen. Zero
|
|
71
|
+
* whenever the topology is not known well enough to say, which is the
|
|
72
|
+
* conservative answer — see getSeatUsage.
|
|
73
|
+
*/
|
|
74
|
+
seatsUsedByOtherInstances: number;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
export default class EnterpriseLicenseSeatsUtil {
|
|
78
|
+
/*
|
|
79
|
+
* How many seats are in use, and whether one more user fits.
|
|
80
|
+
*
|
|
81
|
+
* The awkward part is that a license is shared by every instance the
|
|
82
|
+
* customer runs, and only oneuptime.com can deduplicate users across them —
|
|
83
|
+
* the same person on staging and production is one seat. So this instance
|
|
84
|
+
* has two numbers and neither one is the answer on its own:
|
|
85
|
+
*
|
|
86
|
+
* localUserCount live, but blind to the customer's other instances.
|
|
87
|
+
* aggregatedUserCount complete, but up to a day old, so it does not know
|
|
88
|
+
* about anyone added since the last daily report —
|
|
89
|
+
* including the user being added right now.
|
|
90
|
+
*
|
|
91
|
+
* Combining them needs to know how much of the aggregate is NOT ours, which
|
|
92
|
+
* is what the per-instance breakdown is for: subtract our own last reported
|
|
93
|
+
* count from the aggregate and what is left is other instances. Add the live
|
|
94
|
+
* local count back and the result is current on this instance and complete
|
|
95
|
+
* on the others.
|
|
96
|
+
*
|
|
97
|
+
* When the breakdown does not say — an older license server that sends no
|
|
98
|
+
* instance list, an instance that has never registered — there is nothing to
|
|
99
|
+
* subtract, and the fallback is the larger of the two numbers on their own.
|
|
100
|
+
* That is the only case where the stale aggregate decides anything: with a
|
|
101
|
+
* usable breakdown it is deliberately NOT maxed in, because it would then
|
|
102
|
+
* outvote the live count in the one direction that hurts. Free twenty seats
|
|
103
|
+
* by deleting twenty users and a stale aggregate would go on refusing new
|
|
104
|
+
* ones until the next daily report.
|
|
105
|
+
*
|
|
106
|
+
* Which way it is allowed to be wrong: under-enforcing is recoverable (the
|
|
107
|
+
* next daily report corrects the count, and the breach emails already go
|
|
108
|
+
* out), over-enforcing locks a paying customer out of their own instance.
|
|
109
|
+
* So every "I cannot tell" branch below resolves towards under-enforcing.
|
|
110
|
+
*/
|
|
111
|
+
public static getSeatUsage(input: SeatUsageInput): SeatUsage {
|
|
112
|
+
const userLimit: number | null = this.parseUserLimit(input.userLimit);
|
|
113
|
+
const localUserCount: number = this.parseCount(input.localUserCount) ?? 0;
|
|
114
|
+
const aggregatedUserCount: number | null = this.parseCount(
|
|
115
|
+
input.aggregatedUserCount,
|
|
116
|
+
);
|
|
117
|
+
|
|
118
|
+
/*
|
|
119
|
+
* Null means the report is not complete enough to attribute seats to
|
|
120
|
+
* anybody, which is a different thing from attributing zero to them.
|
|
121
|
+
*/
|
|
122
|
+
const otherInstanceSeats: number | null = this.getSeatsUsedByOtherInstances(
|
|
123
|
+
{
|
|
124
|
+
aggregatedUserCount: aggregatedUserCount,
|
|
125
|
+
instances: input.instances,
|
|
126
|
+
thisInstanceId: input.thisInstanceId,
|
|
127
|
+
},
|
|
128
|
+
);
|
|
129
|
+
|
|
130
|
+
const seatsUsedByOtherInstances: number = otherInstanceSeats ?? 0;
|
|
131
|
+
|
|
132
|
+
const seatsInUse: number =
|
|
133
|
+
otherInstanceSeats === null
|
|
134
|
+
? Math.max(localUserCount, aggregatedUserCount ?? 0)
|
|
135
|
+
: otherInstanceSeats + localUserCount;
|
|
136
|
+
|
|
137
|
+
if (userLimit === null) {
|
|
138
|
+
return {
|
|
139
|
+
isEnforced: false,
|
|
140
|
+
userLimit: null,
|
|
141
|
+
seatsInUse: seatsInUse,
|
|
142
|
+
seatsRemaining: null,
|
|
143
|
+
hasSeatForNewUser: true,
|
|
144
|
+
seatsUsedByOtherInstances: seatsUsedByOtherInstances,
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
return {
|
|
149
|
+
isEnforced: true,
|
|
150
|
+
userLimit: userLimit,
|
|
151
|
+
seatsInUse: seatsInUse,
|
|
152
|
+
seatsRemaining: Math.max(0, userLimit - seatsInUse),
|
|
153
|
+
hasSeatForNewUser: seatsInUse < userLimit,
|
|
154
|
+
seatsUsedByOtherInstances: seatsUsedByOtherInstances,
|
|
155
|
+
};
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
/*
|
|
159
|
+
* The message an administrator reads when a seat could not be taken. Built
|
|
160
|
+
* here rather than at each throw site so the invite form, the signup form
|
|
161
|
+
* and SSO/SCIM provisioning all explain the same thing the same way, and so
|
|
162
|
+
* the tests can assert on it without copying the wording.
|
|
163
|
+
*/
|
|
164
|
+
public static getSeatLimitReachedMessage(data: {
|
|
165
|
+
seatsInUse: number;
|
|
166
|
+
userLimit: number;
|
|
167
|
+
}): string {
|
|
168
|
+
return (
|
|
169
|
+
`This OneUptime installation has reached the ${data.userLimit.toLocaleString()}-user ` +
|
|
170
|
+
`limit of its enterprise license (${data.seatsInUse.toLocaleString()} in use). New users ` +
|
|
171
|
+
`cannot be invited, signed up or provisioned until a seat is freed up or the license is ` +
|
|
172
|
+
`expanded. Contact sales@oneuptime.com to add seats, then use "Refresh license" in the ` +
|
|
173
|
+
`edition dialog to apply the new limit.`
|
|
174
|
+
);
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
/*
|
|
178
|
+
* The part of the aggregate that belongs to instances other than this one,
|
|
179
|
+
* or null when the report does not say.
|
|
180
|
+
*
|
|
181
|
+
* Null rather than zero, because the two lead somewhere different: zero means
|
|
182
|
+
* "this installation is the only one holding seats", and null means "the
|
|
183
|
+
* report cannot be decomposed, fall back to comparing the two totals". Every
|
|
184
|
+
* missing or unusable field lands on null.
|
|
185
|
+
*
|
|
186
|
+
* In particular, an instance list that does not contain us is NOT treated as
|
|
187
|
+
* "then all of the aggregate is somebody else's". That reading is right for a
|
|
188
|
+
* genuinely unregistered instance, and catastrophic for an instance whose id
|
|
189
|
+
* changed after its users were already counted under the old one: it would
|
|
190
|
+
* count this installation's users twice and lock it out.
|
|
191
|
+
*/
|
|
192
|
+
private static getSeatsUsedByOtherInstances(data: {
|
|
193
|
+
aggregatedUserCount: number | null;
|
|
194
|
+
instances?: Array<EnterpriseLicenseInstanceSummary> | null | undefined;
|
|
195
|
+
thisInstanceId?: string | null | undefined;
|
|
196
|
+
}): number | null {
|
|
197
|
+
const aggregatedUserCount: number | null = data.aggregatedUserCount;
|
|
198
|
+
|
|
199
|
+
if (aggregatedUserCount === null) {
|
|
200
|
+
return null;
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
if (!Array.isArray(data.instances) || data.instances.length === 0) {
|
|
204
|
+
return null;
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
const thisInstanceId: string =
|
|
208
|
+
typeof data.thisInstanceId === "string" ? data.thisInstanceId.trim() : "";
|
|
209
|
+
|
|
210
|
+
if (!thisInstanceId) {
|
|
211
|
+
return null;
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
const thisInstance: EnterpriseLicenseInstanceSummary | undefined =
|
|
215
|
+
data.instances.find(
|
|
216
|
+
(instance: EnterpriseLicenseInstanceSummary): boolean => {
|
|
217
|
+
return Boolean(instance) && instance.instanceId === thisInstanceId;
|
|
218
|
+
},
|
|
219
|
+
);
|
|
220
|
+
|
|
221
|
+
if (!thisInstance) {
|
|
222
|
+
return null;
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
const ownReportedCount: number | null = this.parseCount(
|
|
226
|
+
thisInstance.userCount,
|
|
227
|
+
);
|
|
228
|
+
|
|
229
|
+
if (ownReportedCount === null) {
|
|
230
|
+
return null;
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
return Math.max(0, aggregatedUserCount - ownReportedCount);
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
/*
|
|
237
|
+
* A limit is only a limit when it is a positive whole number.
|
|
238
|
+
*
|
|
239
|
+
* Zero is deliberately read as "no limit" rather than "no seats at all",
|
|
240
|
+
* matching every other place in the product that measures seat usage
|
|
241
|
+
* (the license modal, the breach notification job). A license that really
|
|
242
|
+
* grants nobody an account is not a thing OneUptime issues, and reading a
|
|
243
|
+
* stray zero the other way would leave an installation unable to create even
|
|
244
|
+
* its first user.
|
|
245
|
+
*/
|
|
246
|
+
private static parseUserLimit(value: unknown): number | null {
|
|
247
|
+
if (
|
|
248
|
+
typeof value !== "number" ||
|
|
249
|
+
!Number.isFinite(value) ||
|
|
250
|
+
!Number.isInteger(value) ||
|
|
251
|
+
value <= 0
|
|
252
|
+
) {
|
|
253
|
+
return null;
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
return value;
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
private static parseCount(value: unknown): number | null {
|
|
260
|
+
if (
|
|
261
|
+
typeof value !== "number" ||
|
|
262
|
+
!Number.isFinite(value) ||
|
|
263
|
+
!Number.isInteger(value) ||
|
|
264
|
+
value < 0
|
|
265
|
+
) {
|
|
266
|
+
return null;
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
return value;
|
|
270
|
+
}
|
|
271
|
+
}
|
|
@@ -34,6 +34,12 @@ import ScanTargetUtil from "./ScanTargetUtil";
|
|
|
34
34
|
*/
|
|
35
35
|
export interface AutoImportRuleCandidate {
|
|
36
36
|
monitorTemplateId?: ObjectID | string | null | undefined;
|
|
37
|
+
/*
|
|
38
|
+
* The OID Collection Template imported devices are LINKED to. Purely
|
|
39
|
+
* carried through the matcher: it never affects whether a host matches,
|
|
40
|
+
* only what the resulting device collects.
|
|
41
|
+
*/
|
|
42
|
+
oidTemplateId?: ObjectID | string | null | undefined;
|
|
37
43
|
ipMatchTarget?: string | null | undefined;
|
|
38
44
|
sysNamePattern?: string | null | undefined;
|
|
39
45
|
sysDescrPattern?: string | null | undefined;
|
|
@@ -6,6 +6,7 @@ import SnmpScanConfigUtil, {
|
|
|
6
6
|
DiscoveryScanSnmpConfig,
|
|
7
7
|
} from "./SnmpScanConfigUtil";
|
|
8
8
|
import { monitoringMethodForDiscoveredHost } from "./DiscoveryImportEligibility";
|
|
9
|
+
import { normalizeReverseDnsName } from "./ReverseDnsNameUtil";
|
|
9
10
|
|
|
10
11
|
/*
|
|
11
12
|
* One discovered host -> one NetworkDevice, the same way everywhere.
|
|
@@ -38,14 +39,84 @@ function truncate(value: string, maxLength: number): string {
|
|
|
38
39
|
return value.length > maxLength ? value.substring(0, maxLength) : value;
|
|
39
40
|
}
|
|
40
41
|
|
|
41
|
-
/**
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
42
|
+
/**
|
|
43
|
+
* What a discovered host is CALLED — in the Review dialog, and (clamped by
|
|
44
|
+
* `buildDeviceName`) on the device it imports as.
|
|
45
|
+
*
|
|
46
|
+
* Three sources, in this order, first non-empty wins:
|
|
47
|
+
*
|
|
48
|
+
* 1. `sysName`, the name the device gives for itself over SNMP. It stays
|
|
49
|
+
* first because it always has been, and because it is the one name the
|
|
50
|
+
* device itself asserts: demoting it would silently rename devices that
|
|
51
|
+
* import correctly today, which nobody asked for.
|
|
52
|
+
* 2. `dnsHostname`, its reverse-DNS (PTR) name (OneUptime issue #3529).
|
|
53
|
+
* This is the whole point of the addition, and it lands exactly where
|
|
54
|
+
* the complaint was: a host with no readable SNMP has no sysName, so
|
|
55
|
+
* before this it fell straight through to its address. On an estate that
|
|
56
|
+
* keeps DNS records — the reporter's does — that turns a review list of
|
|
57
|
+
* "10.18.166.51, 10.18.166.53, ..." into names an operator recognises.
|
|
58
|
+
* 3. The address, unchanged, when neither name exists.
|
|
59
|
+
*
|
|
60
|
+
* Split out of `buildDeviceName` so the dashboard row and the device it
|
|
61
|
+
* creates cannot disagree: the operator ticks a box next to a name, and that
|
|
62
|
+
* is the name the device gets. Returned UNTRUNCATED, so a caller that wants
|
|
63
|
+
* the full name can have it; the Review dialog and the import both go through
|
|
64
|
+
* `buildDeviceName`, which clamps, so that what is shown is what is created.
|
|
65
|
+
*
|
|
66
|
+
* TWO CONSEQUENCES OF NAMING A DEVICE BY DNS, both accepted deliberately:
|
|
67
|
+
*
|
|
68
|
+
* - Anything that matches on `NetworkDevice.name` now sees a name the
|
|
69
|
+
* SCANNED NETWORK chose. NetworkSiteAssignmentRule and the label/owner
|
|
70
|
+
* rule engines are the live examples: a rule written against a naming
|
|
71
|
+
* convention will match differently for a host that used to be called
|
|
72
|
+
* "10.18.166.51" and is now called "core-gw.corp.example.com". That is
|
|
73
|
+
* inherent to the feature — the alternative is not naming devices by DNS —
|
|
74
|
+
* and it is why the name is put through ReverseDnsNameUtil rather than
|
|
75
|
+
* trusted. Rules keyed on `hostname` are unaffected: that stays the IP.
|
|
76
|
+
* - Names stop being unique per host. Addresses were; PTR names are not, and
|
|
77
|
+
* a wildcard reverse zone over a DHCP range gives every host in it the
|
|
78
|
+
* same answer. `buildFallbackDeviceName` is the answer to that, and BOTH
|
|
79
|
+
* import paths must use it — the rule engine does, and the dashboard's
|
|
80
|
+
* Review-dialog import does since the same wildcard case made collisions
|
|
81
|
+
* ordinary rather than rare.
|
|
82
|
+
*/
|
|
83
|
+
export function getDiscoveredHostDisplayName(
|
|
84
|
+
host: DiscoveredNetworkDevice,
|
|
85
|
+
): string {
|
|
86
|
+
/*
|
|
87
|
+
* The PTR name is re-normalised here rather than trusted from the column.
|
|
88
|
+
* `discoveredDevices` is jsonb stored verbatim from the probe's payload, so
|
|
89
|
+
* "the probe already checked it" holds only for the probe version that
|
|
90
|
+
* wrote the row — not for a result from an older or a modified probe, and
|
|
91
|
+
* not for a row written straight through the API. This function is the last
|
|
92
|
+
* point before the value becomes a rendered line and a slugified device
|
|
93
|
+
* name, so it is the right place to be sure. See ReverseDnsNameUtil.
|
|
94
|
+
*/
|
|
95
|
+
/*
|
|
96
|
+
* `sysName` is read through a typeof guard rather than trusted, for the
|
|
97
|
+
* same reason `dnsHostname` is normalised: both come out of the same
|
|
98
|
+
* verbatim jsonb blob, where the declared TypeScript type is a description
|
|
99
|
+
* of what the probe SHOULD send rather than a guarantee about what is
|
|
100
|
+
* stored. `(42).trim()` is a TypeError, and since this function became the
|
|
101
|
+
* dashboard's name line that TypeError would be thrown during render —
|
|
102
|
+
* taking out the whole Review dialog rather than one row, which is
|
|
103
|
+
* precisely the failure normalizeDiscoveredHosts was written to end.
|
|
104
|
+
*/
|
|
105
|
+
const sysName: string =
|
|
106
|
+
typeof host.sysName === "string" ? host.sysName.trim() : "";
|
|
107
|
+
|
|
108
|
+
return (
|
|
109
|
+
sysName ||
|
|
110
|
+
normalizeReverseDnsName(host.dnsHostname) ||
|
|
111
|
+
String(host.ipAddress ?? "")
|
|
46
112
|
);
|
|
47
113
|
}
|
|
48
114
|
|
|
115
|
+
/** The name a discovered host imports under, clamped to the slug's ceiling. */
|
|
116
|
+
export function buildDeviceName(host: DiscoveredNetworkDevice): string {
|
|
117
|
+
return truncate(getDiscoveredHostDisplayName(host), MAX_DEVICE_NAME_LENGTH);
|
|
118
|
+
}
|
|
119
|
+
|
|
49
120
|
/**
|
|
50
121
|
* The fallback name when `buildDeviceName`'s answer is already taken.
|
|
51
122
|
*
|
|
@@ -56,12 +127,42 @@ export function buildDeviceName(host: DiscoveredNetworkDevice): string {
|
|
|
56
127
|
* ceiling.
|
|
57
128
|
*/
|
|
58
129
|
export function buildFallbackDeviceName(host: DiscoveredNetworkDevice): string {
|
|
59
|
-
|
|
130
|
+
/*
|
|
131
|
+
* The address is read through the SAME coercion the display path uses, not
|
|
132
|
+
* straight out of the jsonb.
|
|
133
|
+
*
|
|
134
|
+
* A raw template read turned a missing address into the literal
|
|
135
|
+
* " (undefined)" and an object one into " ([object Object])" — and those
|
|
136
|
+
* tokens are IDENTICAL for every such host, so the fallback produced the
|
|
137
|
+
* same name again and the retry failed on the very duplicate it was
|
|
138
|
+
* retrying. This function exists to break a name collision; a suffix that
|
|
139
|
+
* collides is worse than useless.
|
|
140
|
+
*/
|
|
141
|
+
const address: string = String(host.ipAddress ?? "").trim();
|
|
142
|
+
|
|
143
|
+
/*
|
|
144
|
+
* An address-less host gets no suffix at all rather than an empty pair of
|
|
145
|
+
* brackets. There is nothing to tell it apart BY, so the honest outcome is
|
|
146
|
+
* the base name unchanged — the caller's create then fails on the duplicate,
|
|
147
|
+
* which is the truth, instead of succeeding under a name that pretends to
|
|
148
|
+
* carry an address.
|
|
149
|
+
*/
|
|
150
|
+
const suffix: string = address ? ` (${address})` : "";
|
|
151
|
+
|
|
60
152
|
const baseName: string = buildDeviceName(host);
|
|
61
153
|
|
|
62
|
-
|
|
154
|
+
/*
|
|
155
|
+
* Clamped as a whole, not just the base. `Math.max(1, ...)` keeps a
|
|
156
|
+
* character of the base name however long the suffix is, so an absurd
|
|
157
|
+
* address — the field is never validated on this path, it is whatever the
|
|
158
|
+
* probe wrote — could compose a name past the ceiling and fail the create on
|
|
159
|
+
* the slug's own length, which is the exact overflow the ceiling exists to
|
|
160
|
+
* prevent.
|
|
161
|
+
*/
|
|
162
|
+
return truncate(
|
|
63
163
|
truncate(baseName, Math.max(1, MAX_DEVICE_NAME_LENGTH - suffix.length)) +
|
|
64
|
-
|
|
164
|
+
suffix,
|
|
165
|
+
MAX_DEVICE_NAME_LENGTH,
|
|
65
166
|
);
|
|
66
167
|
}
|
|
67
168
|
|
|
@@ -119,14 +220,40 @@ export function buildNetworkDeviceFromDiscoveredHost(data: {
|
|
|
119
220
|
* and decides, which is the existing contract for hand-made devices.
|
|
120
221
|
*/
|
|
121
222
|
autoApplyVendorHealthTemplate?: boolean | undefined;
|
|
223
|
+
/*
|
|
224
|
+
* The OID Collection Template an auto-import rule linked this device to.
|
|
225
|
+
* Set at create so the device collects its type's OIDs from its very first
|
|
226
|
+
* poll, with nobody having to touch it afterwards.
|
|
227
|
+
*/
|
|
228
|
+
oidTemplateId?: ObjectID | undefined;
|
|
122
229
|
}): NetworkDevice {
|
|
123
230
|
const host: DiscoveredNetworkDevice = data.host;
|
|
124
231
|
|
|
125
232
|
const device: NetworkDevice = new NetworkDevice();
|
|
126
233
|
device.projectId = data.projectId;
|
|
127
234
|
device.name = data.name || buildDeviceName(host);
|
|
128
|
-
|
|
129
|
-
|
|
235
|
+
/*
|
|
236
|
+
* The address is the device's hostname AND the registered-host dedup key.
|
|
237
|
+
*
|
|
238
|
+
* It stays the ADDRESS even when the host resolved a PTR name, which is
|
|
239
|
+
* what issue #3529 asked for in as many words ("retain the IP address as
|
|
240
|
+
* the address/IP field"), and what the rest of the system needs: this
|
|
241
|
+
* column is what the ingest path matches a scan's results against
|
|
242
|
+
* (NetworkDeviceService.getRegisteredHostnames), what the SNMP poller
|
|
243
|
+
* dials, and what a trap's source IP is correlated to. Storing a name here
|
|
244
|
+
* would make a device stop polling the day its reverse zone changed, and
|
|
245
|
+
* would make the same host import twice — once by address, once by name.
|
|
246
|
+
* The PTR record names the device; it does not address it.
|
|
247
|
+
*
|
|
248
|
+
* COERCED, because the dedup key has to be a string. The value comes out of
|
|
249
|
+
* jsonb, and `getRegisteredHostnames` matches it with `Set.has()` against
|
|
250
|
+
* hostnames read back from the database — and `Set.has` does not coerce, so
|
|
251
|
+
* a numeric address stored raw would never match its own registered device
|
|
252
|
+
* and the host would import again on every review. The dashboard path is
|
|
253
|
+
* already covered by normalizeDiscoveredHosts; this makes the builder safe
|
|
254
|
+
* for the rule engine and for any future caller that holds a raw row.
|
|
255
|
+
*/
|
|
256
|
+
device.hostname = String(host.ipAddress ?? "").trim();
|
|
130
257
|
|
|
131
258
|
if (host.sysDescr) {
|
|
132
259
|
device.description = truncate(host.sysDescr, MAX_DEVICE_DESCRIPTION_LENGTH);
|
|
@@ -145,6 +272,10 @@ export function buildNetworkDeviceFromDiscoveredHost(data: {
|
|
|
145
272
|
return device;
|
|
146
273
|
}
|
|
147
274
|
|
|
275
|
+
if (data.oidTemplateId) {
|
|
276
|
+
device.oidTemplateId = data.oidTemplateId;
|
|
277
|
+
}
|
|
278
|
+
|
|
148
279
|
if (data.autoApplyVendorHealthTemplate) {
|
|
149
280
|
device.autoApplyVendorHealthTemplate = true;
|
|
150
281
|
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { DiscoveredNetworkDevice } from "../../Models/DatabaseModels/NetworkDeviceDiscoveryScan";
|
|
2
|
+
import { normalizeReverseDnsName } from "./ReverseDnsNameUtil";
|
|
2
3
|
|
|
3
4
|
/*
|
|
4
5
|
* Normalisation for a scan's stored results, shared by every reader of the
|
|
@@ -40,7 +41,12 @@ function isDiscoveredHostObject(
|
|
|
40
41
|
* import, so whether a device already in the inventory got created a
|
|
41
42
|
* second time depended on which order the probe happened to list them in.
|
|
42
43
|
*
|
|
43
|
-
*
|
|
44
|
+
* A fourth was added with reverse DNS (issue #3529) and is not a probe bug at
|
|
45
|
+
* all — `dnsHostname` is a value the SCANNED NETWORK chooses, so it is
|
|
46
|
+
* untrusted by construction rather than by accident, and it is normalised
|
|
47
|
+
* here for the same reason: one reading of the payload for every reader.
|
|
48
|
+
*
|
|
49
|
+
* All of them are fixed here rather than at each call site, so the row the
|
|
44
50
|
* operator sees, the badge above it, the list Import walks, and the hosts an
|
|
45
51
|
* auto-import rule evaluates can never be working from different readings of
|
|
46
52
|
* the same payload.
|
|
@@ -60,13 +66,59 @@ export function normalizeDiscoveredHosts(
|
|
|
60
66
|
* truthy, so it used to pass selectability and import as a Network Device
|
|
61
67
|
* whose hostname was a single space.
|
|
62
68
|
*/
|
|
63
|
-
|
|
69
|
+
const normalized: DiscoveredNetworkDevice = {
|
|
64
70
|
...host,
|
|
65
71
|
ipAddress:
|
|
66
72
|
host.ipAddress === undefined || host.ipAddress === null
|
|
67
73
|
? ""
|
|
68
74
|
: String(host.ipAddress).trim(),
|
|
69
|
-
}
|
|
75
|
+
};
|
|
76
|
+
|
|
77
|
+
/*
|
|
78
|
+
* `sysName` is read straight out of the jsonb, its declared type is not
|
|
79
|
+
* enforced by anything, and every reader calls a string method on it. A
|
|
80
|
+
* numeric sysName reached getDiscoveredHostDisplayName and threw inside
|
|
81
|
+
* the Review dialog's render, taking out the whole modal rather than one
|
|
82
|
+
* row — the same failure the null-row case above is about.
|
|
83
|
+
*
|
|
84
|
+
* A non-string is blanked rather than STRINGIFIED, which is where this
|
|
85
|
+
* differs from the address above. `String(null)` is "null" and
|
|
86
|
+
* `String({})` is "[object Object]", and both are truthy — so stringifying
|
|
87
|
+
* would not merely fail to name the host, it would win the naming contest
|
|
88
|
+
* outright and create a device called "null", beating a perfectly good PTR
|
|
89
|
+
* record on the very same row. An empty string is falsy, so naming falls
|
|
90
|
+
* through to `dnsHostname` and then to the address, which is exactly what
|
|
91
|
+
* a host with no readable system name deserves.
|
|
92
|
+
*
|
|
93
|
+
* Only rewritten when it is NOT already a string, so a host that never had
|
|
94
|
+
* the key does not gain an empty one — `sysName` is optional and
|
|
95
|
+
* `"sysName" in host` is a question other code is entitled to ask.
|
|
96
|
+
*/
|
|
97
|
+
if (host.sysName !== undefined && typeof host.sysName !== "string") {
|
|
98
|
+
normalized.sysName = "";
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
/*
|
|
102
|
+
* The PTR name gets the same treatment, for a sharper version of the same
|
|
103
|
+
* reason (OneUptime issue #3529): unlike every other field here, its
|
|
104
|
+
* value was chosen by whoever runs DNS for the scanned subnet — routinely
|
|
105
|
+
* not this project — and it is stored verbatim in jsonb. So the rules
|
|
106
|
+
* about what a name may contain are applied on the way OUT of the column
|
|
107
|
+
* as well as on the way in, and anything that fails them is DELETED
|
|
108
|
+
* rather than blanked, so a reader that checks `if (host.dnsHostname)`
|
|
109
|
+
* and a reader that checks `"dnsHostname" in host` cannot disagree.
|
|
110
|
+
*/
|
|
111
|
+
const dnsHostname: string | undefined = normalizeReverseDnsName(
|
|
112
|
+
host.dnsHostname,
|
|
113
|
+
);
|
|
114
|
+
|
|
115
|
+
if (dnsHostname) {
|
|
116
|
+
normalized.dnsHostname = dnsHostname;
|
|
117
|
+
} else {
|
|
118
|
+
delete normalized.dnsHostname;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
cleaned.push(normalized);
|
|
70
122
|
}
|
|
71
123
|
|
|
72
124
|
// An address the scan reports as registered is registered on every row.
|