@oneuptime/common 12.0.30 → 12.0.32
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Models/AnalyticsModels/SecurityEvent.ts +48 -16
- package/Models/AnalyticsModels/ThreatIntelIndicator.ts +10 -5
- package/Models/DatabaseModels/AlertSeverity.ts +44 -0
- package/Models/DatabaseModels/AlertState.ts +0 -2
- package/Models/DatabaseModels/DetectionRule.ts +16 -5
- package/Models/DatabaseModels/Domain.ts +1 -1
- package/Models/DatabaseModels/GoogleSecOpsConnection.ts +14 -5
- package/Models/DatabaseModels/Incident.ts +1 -1
- package/Models/DatabaseModels/IncidentSeverity.ts +44 -0
- package/Models/DatabaseModels/IncidentTemplate.ts +1 -1
- package/Models/DatabaseModels/Index.ts +4 -0
- package/Models/DatabaseModels/MetricType.ts +0 -2
- package/Models/DatabaseModels/MonitorStatusTimeline.ts +0 -2
- package/Models/DatabaseModels/MonitorTest.ts +0 -2
- package/Models/DatabaseModels/NetworkDevice.ts +234 -5
- package/Models/DatabaseModels/NetworkDeviceAutoImportRule.ts +88 -0
- package/Models/DatabaseModels/NetworkDeviceDiscoveryScan.ts +22 -0
- package/Models/DatabaseModels/NetworkDeviceOidTemplate.ts +501 -0
- package/Models/DatabaseModels/NetworkDeviceRole.ts +648 -0
- package/Models/DatabaseModels/ScheduledMaintenance.ts +1 -1
- package/Models/DatabaseModels/ScheduledMaintenanceTemplate.ts +1 -1
- package/Models/DatabaseModels/StatusPageAnnouncement.ts +0 -2
- package/Models/DatabaseModels/StatusPageAnnouncementTemplate.ts +0 -2
- package/Models/DatabaseModels/StatusPagePrivateUser.ts +0 -2
- package/Models/DatabaseModels/StatusPageResource.ts +0 -2
- package/Models/DatabaseModels/StatusPageSubscriber.ts +0 -2
- package/Models/DatabaseModels/ThreatIntelFeed.ts +16 -5
- package/Server/API/GlobalConfigAPI.ts +362 -183
- package/Server/API/TelemetryAPI.ts +42 -4
- package/Server/EnvironmentConfig.ts +112 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1790500000000-AddNetworkDeviceOidTemplate.ts +59 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1790600000000-AddAutoImportRuleOidTemplate.ts +25 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1790800000000-AddNetworkDeviceRoleTable.ts +72 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +6 -0
- package/Server/Middleware/MultipartFormData.ts +118 -32
- package/Server/Services/AlertEpisodeLabelRuleEngineService.ts +9 -1
- package/Server/Services/AlertEpisodeOnCallRuleEngineService.ts +9 -1
- package/Server/Services/AlertEpisodeOwnerRuleEngineService.ts +9 -1
- package/Server/Services/AlertEpisodePrivacyRuleEngineService.ts +9 -1
- package/Server/Services/AlertGroupingEngineService.ts +9 -1
- package/Server/Services/AlertLabelRuleEngineService.ts +9 -1
- package/Server/Services/AlertOnCallRuleEngineService.ts +9 -1
- package/Server/Services/AlertOwnerRuleEngineService.ts +9 -1
- package/Server/Services/AlertPrivacyRuleEngineService.ts +9 -1
- package/Server/Services/AlertReminderRuleService.ts +9 -1
- package/Server/Services/AutoRemediationRuleEngineService.ts +9 -1
- package/Server/Services/CephClusterLabelRuleEngineService.ts +9 -1
- package/Server/Services/CephClusterOwnerRuleEngineService.ts +9 -1
- package/Server/Services/CloudResourceLabelRuleEngineService.ts +9 -1
- package/Server/Services/CloudResourceOwnerRuleEngineService.ts +9 -1
- package/Server/Services/DashboardLabelRuleEngineService.ts +9 -1
- package/Server/Services/DashboardOwnerRuleEngineService.ts +9 -1
- package/Server/Services/DatabaseService.ts +39 -9
- package/Server/Services/DockerHostLabelRuleEngineService.ts +9 -1
- package/Server/Services/DockerHostOwnerRuleEngineService.ts +9 -1
- package/Server/Services/DockerSwarmClusterLabelRuleEngineService.ts +9 -1
- package/Server/Services/DockerSwarmClusterOwnerRuleEngineService.ts +9 -1
- package/Server/Services/HostLabelRuleEngineService.ts +9 -1
- package/Server/Services/HostOwnerRuleEngineService.ts +9 -1
- package/Server/Services/IncidentEpisodeLabelRuleEngineService.ts +9 -1
- package/Server/Services/IncidentEpisodeOnCallRuleEngineService.ts +9 -1
- package/Server/Services/IncidentEpisodeOwnerRuleEngineService.ts +9 -1
- package/Server/Services/IncidentEpisodePrivacyRuleEngineService.ts +9 -1
- package/Server/Services/IncidentGroupingEngineService.ts +9 -1
- package/Server/Services/IncidentLabelRuleEngineService.ts +9 -1
- package/Server/Services/IncidentOnCallRuleEngineService.ts +9 -1
- package/Server/Services/IncidentOwnerRuleEngineService.ts +9 -1
- package/Server/Services/IncidentPrivacyRuleEngineService.ts +9 -1
- package/Server/Services/IncidentReminderRuleService.ts +9 -1
- package/Server/Services/IncidentSlaRuleService.ts +9 -1
- package/Server/Services/IncomingCallPolicyLabelRuleEngineService.ts +9 -1
- package/Server/Services/IncomingCallPolicyOwnerRuleEngineService.ts +9 -1
- package/Server/Services/Index.ts +4 -0
- package/Server/Services/IoTFleetLabelRuleEngineService.ts +9 -1
- package/Server/Services/IoTFleetOwnerRuleEngineService.ts +9 -1
- package/Server/Services/KubernetesClusterLabelRuleEngineService.ts +9 -1
- package/Server/Services/KubernetesClusterOwnerRuleEngineService.ts +9 -1
- package/Server/Services/KubernetesResourceService.ts +5 -1
- package/Server/Services/MonitorLabelRuleEngineService.ts +9 -1
- package/Server/Services/MonitorOwnerRuleEngineService.ts +9 -1
- package/Server/Services/NetworkDeviceAutoImportRuleEngineService.ts +35 -0
- package/Server/Services/NetworkDeviceAutoImportRuleService.ts +96 -0
- package/Server/Services/NetworkDeviceLabelRuleEngineService.ts +9 -1
- package/Server/Services/NetworkDeviceOidTemplateService.ts +201 -0
- package/Server/Services/NetworkDeviceOwnerRuleEngineService.ts +9 -1
- package/Server/Services/NetworkDeviceRoleService.ts +90 -0
- package/Server/Services/NetworkDeviceService.ts +209 -1
- package/Server/Services/OnCallDutyPolicyLabelRuleEngineService.ts +9 -1
- package/Server/Services/OnCallDutyPolicyOwnerRuleEngineService.ts +9 -1
- package/Server/Services/OnCallDutyPolicyScheduleLabelRuleEngineService.ts +9 -1
- package/Server/Services/OnCallDutyPolicyScheduleOwnerRuleEngineService.ts +9 -1
- package/Server/Services/PodmanHostLabelRuleEngineService.ts +9 -1
- package/Server/Services/PodmanHostOwnerRuleEngineService.ts +9 -1
- package/Server/Services/ProjectService.ts +85 -0
- package/Server/Services/ProxmoxClusterLabelRuleEngineService.ts +9 -1
- package/Server/Services/ProxmoxClusterOwnerRuleEngineService.ts +9 -1
- package/Server/Services/RumApplicationLabelRuleEngineService.ts +9 -1
- package/Server/Services/RumApplicationOwnerRuleEngineService.ts +9 -1
- package/Server/Services/RunbookLabelRuleEngineService.ts +9 -1
- package/Server/Services/RunbookOwnerRuleEngineService.ts +9 -1
- package/Server/Services/RunbookRuleEngineService.ts +9 -1
- package/Server/Services/ScheduledMaintenanceLabelRuleEngineService.ts +9 -1
- package/Server/Services/ScheduledMaintenanceOwnerRuleEngineService.ts +9 -1
- package/Server/Services/ScheduledMaintenanceReminderRuleService.ts +9 -1
- package/Server/Services/ServerlessFunctionLabelRuleEngineService.ts +9 -1
- package/Server/Services/ServerlessFunctionOwnerRuleEngineService.ts +9 -1
- package/Server/Services/ServiceLabelRuleEngineService.ts +9 -1
- package/Server/Services/ServiceOwnerRuleEngineService.ts +9 -1
- package/Server/Services/StatusPageLabelRuleEngineService.ts +9 -1
- package/Server/Services/StatusPageMonitorRuleEngineService.ts +7 -0
- package/Server/Services/StatusPageOwnerRuleEngineService.ts +9 -1
- package/Server/Services/TelemetrySourceMapService.ts +266 -23
- package/Server/Services/UserNotificationSettingService.ts +0 -6
- package/Server/Services/UserService.ts +27 -0
- package/Server/Services/WorkflowLabelRuleEngineService.ts +9 -1
- package/Server/Services/WorkflowOwnerRuleEngineService.ts +9 -1
- package/Server/Utils/EnterpriseLicense/EnterpriseLicenseSeatUtil.ts +186 -0
- package/Server/Utils/Monitor/CapturedMetricAttributeUtil.ts +245 -0
- package/Server/Utils/Monitor/Criteria/SnmpMonitorCriteria.ts +21 -2
- package/Server/Utils/Monitor/MonitorMetricUtil.ts +55 -21
- package/Server/Utils/Monitor/MonitorTemplateUtil.ts +32 -0
- package/Server/Utils/Monitor/NetworkDeviceMetricUtil.ts +15 -2
- package/Server/Utils/Monitor/NetworkDeviceWalkUtil.ts +18 -1
- package/Server/Utils/Monitor/NetworkInventoryUtil.ts +10 -0
- package/Server/Utils/Monitor/SeriesResourceLabels.ts +34 -0
- package/Server/Utils/Rules/RuleEngineRuleRead.ts +48 -0
- package/Server/Utils/Telemetry/ExceptionSanitizer.ts +14 -1
- package/Server/Utils/Telemetry/LogExceptionExtractor.ts +14 -2
- package/Server/Utils/Telemetry/SourceMapResolver.ts +16 -5
- package/Server/Utils/Telemetry/StackTraceParser.ts +399 -0
- package/Tests/App/Dashboard/AddNeighborToMonitoringModal.test.tsx +31 -1
- package/Tests/App/Dashboard/DashboardChartWidgetZoom.test.tsx +35 -8
- package/Tests/App/Dashboard/DashboardCommandPalette.test.tsx +107 -3
- package/Tests/App/Dashboard/DashboardWideChartZoom.test.tsx +401 -0
- package/Tests/App/Dashboard/EventOverlayHook.test.tsx +125 -0
- package/Tests/App/Dashboard/HeaderImageAssets.test.tsx +93 -0
- package/Tests/App/Dashboard/MonitorTemplateColumnAndFacet.test.tsx +318 -0
- package/Tests/App/Dashboard/NetworkDeviceBulkDelete.test.tsx +357 -0
- package/Tests/App/Dashboard/NetworkSideMenu.test.tsx +590 -0
- package/Tests/App/Dashboard/OnCallReadinessSurfaces.test.tsx +3 -3
- package/Tests/App/Dashboard/SideMenuHarness.tsx +11 -3
- package/Tests/App/Dashboard/UserElementEmail.test.tsx +12 -4
- package/Tests/App/Dashboard/UserEmailCallSites.test.tsx +1 -1
- package/Tests/Models/DatabaseModels/DomainRoleTierCoverage.test.ts +14 -0
- package/Tests/Models/DatabaseModels/ModelRegistryInvariants.test.ts +543 -0
- package/Tests/Models/SecurityDomainAccessControl.test.ts +429 -0
- package/Tests/Server/API/GlobalConfigLicense.test.ts +657 -0
- package/Tests/Server/API/SecurityEventAttributesAPI.test.ts +84 -6
- package/Tests/Server/API/TelemetryResolveStackTraceAPI.test.ts +805 -0
- package/Tests/Server/Infrastructure/Postgres/AddOnCallCalendarFeedsMigration.test.ts +32 -7
- package/Tests/Server/Infrastructure/Postgres/NetworkDeviceRoleTableMigration.test.ts +476 -0
- package/Tests/Server/Middleware/IdentityRateLimit.test.ts +1144 -0
- package/Tests/Server/Middleware/MultipartFormData.test.ts +618 -3
- package/Tests/Server/Services/DatabaseServiceGenerateSlug.test.ts +215 -0
- package/Tests/Server/Services/MonitorLabelRuleEngineScale.test.ts +520 -0
- package/Tests/Server/Services/NetworkDeviceOidTemplateService.test.ts +332 -0
- package/Tests/Server/Services/NetworkDeviceOidTemplateWriteGuards.test.ts +409 -0
- package/Tests/Server/Services/NetworkDeviceRoleModel.test.ts +672 -0
- package/Tests/Server/Services/NetworkDeviceRuleEngines.test.ts +1 -1
- package/Tests/Server/Services/ProjectServiceCreateSubscriptionStarted.test.ts +67 -4
- package/Tests/Server/Services/RuleEngineRuleFetchLimit.test.ts +239 -0
- package/Tests/Server/Services/ScheduledMaintenanceSubscriberEndTime.test.ts +369 -0
- package/Tests/Server/Services/TelemetrySourceMapService.test.ts +1210 -2
- package/Tests/Server/Services/UserNotificationSettingMonitorDefaults.test.ts +248 -0
- package/Tests/Server/Services/UserNotificationSettingWorkspaceChannels.test.ts +43 -2
- package/Tests/Server/Services/UserServiceSeatLimit.test.ts +182 -0
- package/Tests/Server/Types/AnalyticsDatabase/SecurityEventModelPermission.test.ts +255 -0
- package/Tests/Server/Types/Database/Permissions/ReadBlockPermission.test.ts +212 -0
- package/Tests/Server/Types/Database/Permissions/SecurityRoleAccess.test.ts +413 -0
- package/Tests/Server/Utils/BasicCron.test.ts +283 -0
- package/Tests/Server/Utils/CodeRepository.test.ts +689 -0
- package/Tests/Server/Utils/EnterpriseLicense/EnterpriseLicenseSeatUtil.test.ts +495 -0
- package/Tests/Server/Utils/ExceptionSanitizer.test.ts +77 -0
- package/Tests/Server/Utils/IncomingCallPhoneNumber.test.ts +174 -0
- package/Tests/Server/Utils/Monitor/CapturedMetricAttributeUtil.test.ts +284 -0
- package/Tests/Server/Utils/Monitor/MonitorCustomMetricAttributes.test.ts +503 -0
- package/Tests/Server/Utils/Monitor/MonitorTemplatePrototypePollution.test.ts +106 -0
- package/Tests/Server/Utils/Monitor/NetworkDeviceWalkLogWritePath.test.ts +33 -4
- package/Tests/Server/Utils/Monitor/NetworkDeviceWalkUtil.test.ts +14 -4
- package/Tests/Server/Utils/Monitor/NetworkInventoryUtil.test.ts +44 -0
- package/Tests/Server/Utils/OpenAPISpec.test.ts +536 -0
- package/Tests/Server/Utils/Rules/RuleEngineRuleRead.test.ts +115 -0
- package/Tests/Server/Utils/StackTraceParser.test.ts +610 -0
- package/Tests/Server/Utils/Telemetry/LogExceptionExtractor.test.ts +0 -0
- package/Tests/Server/Utils/Telemetry/SourceMapLimits.test.ts +656 -0
- package/Tests/Server/Utils/Telemetry/SourceMapResolver.test.ts +100 -0
- package/Tests/Types/Monitor/SnmpMonitor/SnmpOidListUtil.test.ts +454 -0
- package/Tests/Types/NetworkDevice/DefaultNetworkDeviceRole.test.ts +417 -0
- package/Tests/Types/SecurityRolePermissions.test.ts +193 -0
- package/Tests/UI/Components/Charts/AnnotationLayout.test.ts +773 -0
- package/Tests/UI/Components/Charts/ChartAnnotationRail.test.tsx +789 -0
- package/Tests/UI/Components/Charts/ChartBucketIdentity.test.ts +254 -0
- package/Tests/UI/Components/Charts/ChartClickDoubleClickDisambiguation.test.tsx +221 -0
- package/Tests/UI/Components/Charts/ChartDoubleClickReset.test.tsx +220 -0
- package/Tests/UI/Components/Charts/TimeAnnotation.test.ts +471 -0
- package/Tests/UI/Components/EditionLabelLicenseRefresh.test.tsx +405 -0
- package/Tests/UI/Components/ErrorMessageRefreshControl.test.tsx +83 -0
- package/Tests/UI/Components/MarkdownConverters.test.ts +686 -0
- package/Tests/UI/Components/ModelTable/BaseModelTableBulkDelete.test.tsx +751 -0
- package/Tests/UI/Components/ModelTable/BaseModelTableColumnCustomization.test.tsx +475 -43
- package/Tests/UI/Components/ModelTable/BaseModelTableDeleteAndEmptyStates.test.tsx +341 -0
- package/Tests/UI/Components/ModelTable/ColumnPreference.test.ts +89 -0
- package/Tests/UI/Components/NavBarCommandKGating.test.tsx +103 -8
- package/Tests/UI/Components/OrderedStatesList.test.tsx +5 -5
- package/Tests/UI/Components/PendingProjectInvitations.test.tsx +1 -1
- package/Tests/UI/Components/SideMenuItem.test.tsx +30 -0
- package/Tests/UI/Components/TableSortAndMobileColumns.test.tsx +195 -0
- package/Tests/UI/Components/XAxis.test.ts +270 -5
- package/Tests/UI/Components/XAxisDaylightSaving.test.ts +113 -0
- package/Tests/UI/Styles/ChartFocusRing.test.ts +153 -0
- package/Tests/UI/Styles/ChartFocusRingCoverage.test.tsx +377 -0
- package/Tests/UI/Styles/ThemeStylesheet.ts +162 -0
- package/Tests/UI/Utils/TableColumnsToCsv.test.ts +30 -0
- package/Tests/UI/Utils/UseDashboardTimeRangeZoom.test.tsx +187 -0
- package/Tests/Utils/Dashboard/DashboardResourceListSharedArgs.test.ts +302 -0
- package/Tests/Utils/Dashboard/DashboardTimeRangeZoom.test.ts +242 -0
- package/Tests/Utils/EnterpriseLicenseSeats.test.ts +507 -0
- package/Tests/Utils/Monitor/NetworkDeviceRoleCatalog.test.ts +981 -0
- package/Tests/Utils/Monitor/NetworkTopologyRoleCatalog.test.ts +865 -0
- package/Tests/Utils/NetworkDevice/DeviceRoleKeyUtil.test.ts +538 -0
- package/Tests/Utils/NetworkDiscovery/DiscoveredDeviceBuilder.test.ts +951 -1
- package/Tests/Utils/NetworkDiscovery/DiscoveredHostUtil.test.ts +238 -0
- package/Tests/Utils/NetworkDiscovery/DiscoveryReverseDnsChain.test.ts +1056 -0
- package/Tests/Utils/NetworkDiscovery/ReverseDnsNameUtil.test.ts +882 -0
- package/Tests/Utils/Slo/SloEvaluation.test.ts +171 -0
- package/Tests/Utils/Slug.test.ts +61 -1
- package/Tests/jest.setup.ts +19 -0
- package/Types/Date.ts +39 -0
- package/Types/Monitor/SnmpMonitor/NetworkTopology.ts +61 -0
- package/Types/Monitor/SnmpMonitor/SnmpOidListUtil.ts +333 -0
- package/Types/NetworkDevice/DefaultNetworkDeviceRole.ts +145 -0
- package/Types/Permission.ts +141 -0
- package/Types/Rum/SessionReplay.ts +21 -0
- package/Types/Telemetry/SourceMap.ts +8 -0
- package/UI/Components/Charts/Area/AreaChart.tsx +7 -0
- package/UI/Components/Charts/Bar/BarChart.tsx +6 -0
- package/UI/Components/Charts/ChartGroup/ChartGroup.tsx +9 -1
- package/UI/Components/Charts/ChartLibrary/Annotations/AnnotationHoverCard.tsx +176 -0
- package/UI/Components/Charts/ChartLibrary/Annotations/AnnotationLayout.ts +745 -0
- package/UI/Components/Charts/ChartLibrary/Annotations/ChartAnnotationLayer.tsx +576 -0
- package/UI/Components/Charts/ChartLibrary/Annotations/UseChartAnnotations.tsx +204 -0
- package/UI/Components/Charts/ChartLibrary/AreaChart/AreaChart.tsx +554 -545
- package/UI/Components/Charts/ChartLibrary/BarChart/BarChart.tsx +337 -371
- package/UI/Components/Charts/ChartLibrary/LineChart/LineChart.tsx +549 -540
- package/UI/Components/Charts/ChartLibrary/Types/FormattedReferenceRegion.ts +7 -3
- package/UI/Components/Charts/ChartLibrary/Types/FormattedTimeReferenceLine.ts +14 -3
- package/UI/Components/Charts/ChartLibrary/Utils/DoubleClick.ts +13 -0
- package/UI/Components/Charts/Line/LineChart.tsx +7 -0
- package/UI/Components/Charts/Types/ChartEventKind.ts +13 -0
- package/UI/Components/Charts/Types/ReferenceRegionProps.ts +6 -0
- package/UI/Components/Charts/Types/TimeReferenceLineProps.ts +20 -3
- package/UI/Components/Charts/Utils/TimeAnnotation.ts +69 -35
- package/UI/Components/Charts/Utils/XAxis.ts +125 -18
- package/UI/Components/EditionLabel/EditionLabel.tsx +280 -26
- package/UI/Components/ErrorMessage/ErrorMessage.tsx +21 -10
- package/UI/Components/Feed/FeedItem.tsx +4 -5
- package/UI/Components/Header/HeaderIconDropdownButton.tsx +1 -2
- package/UI/Components/Header/UserProfile/UserProfile.tsx +1 -2
- package/UI/Components/Image/Image.tsx +20 -3
- package/UI/Components/Markdown.tsx/MarkdownConverters.ts +0 -0
- package/UI/Components/MemberRoleAssignment/MemberRoleAssignment.tsx +1 -2
- package/UI/Components/ModelTable/BaseModelTable.tsx +200 -39
- package/UI/Components/Navbar/NavBar.tsx +62 -13
- package/UI/Components/Navbar/NavBarMenuModal.tsx +7 -2
- package/UI/Components/SideMenu/CountModelSideMenuItem.tsx +2 -0
- package/UI/Components/SideMenu/SideMenu.tsx +12 -2
- package/UI/Components/SideMenu/SideMenuItem.tsx +4 -1
- package/UI/Components/SideMenu/SideMenuSection.tsx +14 -2
- package/UI/Components/Table/TableHeader.tsx +64 -48
- package/UI/Components/Table/TableRow.tsx +13 -3
- package/UI/Styles/Theme.css +38 -0
- package/UI/Utils/UseDashboardTimeRangeZoom.ts +77 -0
- package/Utils/Dashboard/DashboardTimeRangeZoom.ts +118 -0
- package/Utils/EnterpriseLicense/EnterpriseLicenseSeats.ts +271 -0
- package/Utils/Monitor/NetworkDeviceRoleCatalog.ts +232 -0
- package/Utils/Monitor/NetworkDeviceRoleUtil.ts +2 -1
- package/Utils/Monitor/NetworkTopologyUtil.ts +116 -33
- package/Utils/NetworkDevice/DeviceRoleKeyUtil.ts +137 -0
- package/Utils/NetworkDiscovery/AutoImportRuleMatcher.ts +6 -0
- package/Utils/NetworkDiscovery/DiscoveredDeviceBuilder.ts +141 -10
- package/Utils/NetworkDiscovery/DiscoveredHostUtil.ts +55 -3
- package/Utils/NetworkDiscovery/ReverseDnsNameUtil.ts +151 -0
- package/Utils/Rules/RuleEngineLimits.ts +32 -0
- package/Utils/Rules/RulePatternMatchUtil.ts +1 -1
- package/Utils/Slug.ts +34 -1
- package/build/dist/Models/AnalyticsModels/SecurityEvent.js +48 -16
- package/build/dist/Models/AnalyticsModels/SecurityEvent.js.map +1 -1
- package/build/dist/Models/AnalyticsModels/ThreatIntelIndicator.js +10 -5
- package/build/dist/Models/AnalyticsModels/ThreatIntelIndicator.js.map +1 -1
- package/build/dist/Models/DatabaseModels/AlertSeverity.js +46 -1
- package/build/dist/Models/DatabaseModels/AlertSeverity.js.map +1 -1
- package/build/dist/Models/DatabaseModels/AlertState.js +0 -2
- package/build/dist/Models/DatabaseModels/AlertState.js.map +1 -1
- package/build/dist/Models/DatabaseModels/DetectionRule.js +16 -5
- package/build/dist/Models/DatabaseModels/DetectionRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Domain.js +1 -1
- package/build/dist/Models/DatabaseModels/Domain.js.map +1 -1
- package/build/dist/Models/DatabaseModels/GoogleSecOpsConnection.js +14 -5
- package/build/dist/Models/DatabaseModels/GoogleSecOpsConnection.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Incident.js +1 -1
- package/build/dist/Models/DatabaseModels/Incident.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncidentSeverity.js +46 -1
- package/build/dist/Models/DatabaseModels/IncidentSeverity.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncidentTemplate.js +1 -1
- package/build/dist/Models/DatabaseModels/IncidentTemplate.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Index.js +4 -0
- package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
- package/build/dist/Models/DatabaseModels/MetricType.js +0 -2
- package/build/dist/Models/DatabaseModels/MetricType.js.map +1 -1
- package/build/dist/Models/DatabaseModels/MonitorStatusTimeline.js +0 -2
- package/build/dist/Models/DatabaseModels/MonitorStatusTimeline.js.map +1 -1
- package/build/dist/Models/DatabaseModels/MonitorTest.js +0 -2
- package/build/dist/Models/DatabaseModels/MonitorTest.js.map +1 -1
- package/build/dist/Models/DatabaseModels/NetworkDevice.js +239 -6
- package/build/dist/Models/DatabaseModels/NetworkDevice.js.map +1 -1
- package/build/dist/Models/DatabaseModels/NetworkDeviceAutoImportRule.js +88 -0
- package/build/dist/Models/DatabaseModels/NetworkDeviceAutoImportRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/NetworkDeviceDiscoveryScan.js.map +1 -1
- package/build/dist/Models/DatabaseModels/NetworkDeviceOidTemplate.js +521 -0
- package/build/dist/Models/DatabaseModels/NetworkDeviceOidTemplate.js.map +1 -0
- package/build/dist/Models/DatabaseModels/NetworkDeviceRole.js +677 -0
- package/build/dist/Models/DatabaseModels/NetworkDeviceRole.js.map +1 -0
- package/build/dist/Models/DatabaseModels/ScheduledMaintenance.js +1 -1
- package/build/dist/Models/DatabaseModels/ScheduledMaintenance.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ScheduledMaintenanceTemplate.js +1 -1
- package/build/dist/Models/DatabaseModels/ScheduledMaintenanceTemplate.js.map +1 -1
- package/build/dist/Models/DatabaseModels/StatusPageAnnouncement.js +0 -2
- package/build/dist/Models/DatabaseModels/StatusPageAnnouncement.js.map +1 -1
- package/build/dist/Models/DatabaseModels/StatusPageAnnouncementTemplate.js +0 -2
- package/build/dist/Models/DatabaseModels/StatusPageAnnouncementTemplate.js.map +1 -1
- package/build/dist/Models/DatabaseModels/StatusPagePrivateUser.js +0 -2
- package/build/dist/Models/DatabaseModels/StatusPagePrivateUser.js.map +1 -1
- package/build/dist/Models/DatabaseModels/StatusPageResource.js +0 -2
- package/build/dist/Models/DatabaseModels/StatusPageResource.js.map +1 -1
- package/build/dist/Models/DatabaseModels/StatusPageSubscriber.js +0 -2
- package/build/dist/Models/DatabaseModels/StatusPageSubscriber.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ThreatIntelFeed.js +16 -5
- package/build/dist/Models/DatabaseModels/ThreatIntelFeed.js.map +1 -1
- package/build/dist/Server/API/GlobalConfigAPI.js +293 -176
- package/build/dist/Server/API/GlobalConfigAPI.js.map +1 -1
- package/build/dist/Server/API/TelemetryAPI.js +31 -3
- package/build/dist/Server/API/TelemetryAPI.js.map +1 -1
- package/build/dist/Server/EnvironmentConfig.js +83 -0
- package/build/dist/Server/EnvironmentConfig.js.map +1 -1
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790500000000-AddNetworkDeviceOidTemplate.js +26 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790500000000-AddNetworkDeviceOidTemplate.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790600000000-AddAutoImportRuleOidTemplate.js +14 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790600000000-AddAutoImportRuleOidTemplate.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790800000000-AddNetworkDeviceRoleTable.js +39 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790800000000-AddNetworkDeviceRoleTable.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +6 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
- package/build/dist/Server/Middleware/MultipartFormData.js +93 -28
- package/build/dist/Server/Middleware/MultipartFormData.js.map +1 -1
- package/build/dist/Server/Services/AlertEpisodeLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/AlertEpisodeLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/AlertEpisodeOnCallRuleEngineService.js +8 -1
- package/build/dist/Server/Services/AlertEpisodeOnCallRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/AlertEpisodeOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/AlertEpisodeOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/AlertEpisodePrivacyRuleEngineService.js +8 -1
- package/build/dist/Server/Services/AlertEpisodePrivacyRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/AlertGroupingEngineService.js +8 -1
- package/build/dist/Server/Services/AlertGroupingEngineService.js.map +1 -1
- package/build/dist/Server/Services/AlertLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/AlertLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/AlertOnCallRuleEngineService.js +8 -1
- package/build/dist/Server/Services/AlertOnCallRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/AlertOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/AlertOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/AlertPrivacyRuleEngineService.js +8 -1
- package/build/dist/Server/Services/AlertPrivacyRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/AlertReminderRuleService.js +8 -1
- package/build/dist/Server/Services/AlertReminderRuleService.js.map +1 -1
- package/build/dist/Server/Services/AutoRemediationRuleEngineService.js +8 -1
- package/build/dist/Server/Services/AutoRemediationRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/CephClusterLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/CephClusterLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/CephClusterOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/CephClusterOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/CloudResourceLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/CloudResourceLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/CloudResourceOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/CloudResourceOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/DashboardLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/DashboardLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/DashboardOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/DashboardOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/DatabaseService.js +31 -5
- package/build/dist/Server/Services/DatabaseService.js.map +1 -1
- package/build/dist/Server/Services/DockerHostLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/DockerHostLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/DockerHostOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/DockerHostOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/DockerSwarmClusterLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/DockerSwarmClusterLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/DockerSwarmClusterOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/DockerSwarmClusterOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/HostLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/HostLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/HostOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/HostOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/IncidentEpisodeLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/IncidentEpisodeLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/IncidentEpisodeOnCallRuleEngineService.js +8 -1
- package/build/dist/Server/Services/IncidentEpisodeOnCallRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/IncidentEpisodeOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/IncidentEpisodeOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/IncidentEpisodePrivacyRuleEngineService.js +8 -1
- package/build/dist/Server/Services/IncidentEpisodePrivacyRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/IncidentGroupingEngineService.js +8 -1
- package/build/dist/Server/Services/IncidentGroupingEngineService.js.map +1 -1
- package/build/dist/Server/Services/IncidentLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/IncidentLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/IncidentOnCallRuleEngineService.js +8 -1
- package/build/dist/Server/Services/IncidentOnCallRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/IncidentOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/IncidentOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/IncidentPrivacyRuleEngineService.js +8 -1
- package/build/dist/Server/Services/IncidentPrivacyRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/IncidentReminderRuleService.js +8 -1
- package/build/dist/Server/Services/IncidentReminderRuleService.js.map +1 -1
- package/build/dist/Server/Services/IncidentSlaRuleService.js +8 -1
- package/build/dist/Server/Services/IncidentSlaRuleService.js.map +1 -1
- package/build/dist/Server/Services/IncomingCallPolicyLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/IncomingCallPolicyLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/IncomingCallPolicyOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/IncomingCallPolicyOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/Index.js +4 -0
- package/build/dist/Server/Services/Index.js.map +1 -1
- package/build/dist/Server/Services/IoTFleetLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/IoTFleetLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/IoTFleetOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/IoTFleetOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/KubernetesClusterLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/KubernetesClusterLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/KubernetesClusterOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/KubernetesClusterOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/KubernetesResourceService.js +5 -1
- package/build/dist/Server/Services/KubernetesResourceService.js.map +1 -1
- package/build/dist/Server/Services/MonitorLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/MonitorLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/MonitorOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/MonitorOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/NetworkDeviceAutoImportRuleEngineService.js +30 -21
- package/build/dist/Server/Services/NetworkDeviceAutoImportRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/NetworkDeviceAutoImportRuleService.js +64 -0
- package/build/dist/Server/Services/NetworkDeviceAutoImportRuleService.js.map +1 -1
- package/build/dist/Server/Services/NetworkDeviceLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/NetworkDeviceLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/NetworkDeviceOidTemplateService.js +180 -0
- package/build/dist/Server/Services/NetworkDeviceOidTemplateService.js.map +1 -0
- package/build/dist/Server/Services/NetworkDeviceOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/NetworkDeviceOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/NetworkDeviceRoleService.js +70 -0
- package/build/dist/Server/Services/NetworkDeviceRoleService.js.map +1 -0
- package/build/dist/Server/Services/NetworkDeviceService.js +154 -1
- package/build/dist/Server/Services/NetworkDeviceService.js.map +1 -1
- package/build/dist/Server/Services/OnCallDutyPolicyLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/OnCallDutyPolicyLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/OnCallDutyPolicyOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/OnCallDutyPolicyOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/OnCallDutyPolicyScheduleLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/OnCallDutyPolicyScheduleLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/OnCallDutyPolicyScheduleOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/OnCallDutyPolicyScheduleOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/PodmanHostLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/PodmanHostLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/PodmanHostOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/PodmanHostOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/ProjectService.js +65 -0
- package/build/dist/Server/Services/ProjectService.js.map +1 -1
- package/build/dist/Server/Services/ProxmoxClusterLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/ProxmoxClusterLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/ProxmoxClusterOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/ProxmoxClusterOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/RumApplicationLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/RumApplicationLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/RumApplicationOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/RumApplicationOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/RunbookLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/RunbookLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/RunbookOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/RunbookOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/RunbookRuleEngineService.js +8 -1
- package/build/dist/Server/Services/RunbookRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/ScheduledMaintenanceLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/ScheduledMaintenanceLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/ScheduledMaintenanceOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/ScheduledMaintenanceOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/ScheduledMaintenanceReminderRuleService.js +8 -1
- package/build/dist/Server/Services/ScheduledMaintenanceReminderRuleService.js.map +1 -1
- package/build/dist/Server/Services/ServerlessFunctionLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/ServerlessFunctionLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/ServerlessFunctionOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/ServerlessFunctionOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/ServiceLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/ServiceLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/ServiceOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/ServiceOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/StatusPageLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/StatusPageLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/StatusPageMonitorRuleEngineService.js +6 -0
- package/build/dist/Server/Services/StatusPageMonitorRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/StatusPageOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/StatusPageOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/TelemetrySourceMapService.js +213 -19
- package/build/dist/Server/Services/TelemetrySourceMapService.js.map +1 -1
- package/build/dist/Server/Services/UserNotificationSettingService.js +0 -1
- package/build/dist/Server/Services/UserNotificationSettingService.js.map +1 -1
- package/build/dist/Server/Services/UserService.js +25 -0
- package/build/dist/Server/Services/UserService.js.map +1 -1
- package/build/dist/Server/Services/WorkflowLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/WorkflowLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/WorkflowOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/WorkflowOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Utils/EnterpriseLicense/EnterpriseLicenseSeatUtil.js +145 -0
- package/build/dist/Server/Utils/EnterpriseLicense/EnterpriseLicenseSeatUtil.js.map +1 -0
- package/build/dist/Server/Utils/Monitor/CapturedMetricAttributeUtil.js +201 -0
- package/build/dist/Server/Utils/Monitor/CapturedMetricAttributeUtil.js.map +1 -0
- package/build/dist/Server/Utils/Monitor/Criteria/SnmpMonitorCriteria.js +19 -2
- package/build/dist/Server/Utils/Monitor/Criteria/SnmpMonitorCriteria.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorMetricUtil.js +42 -23
- package/build/dist/Server/Utils/Monitor/MonitorMetricUtil.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorTemplateUtil.js +29 -0
- package/build/dist/Server/Utils/Monitor/MonitorTemplateUtil.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/NetworkDeviceMetricUtil.js +11 -2
- package/build/dist/Server/Utils/Monitor/NetworkDeviceMetricUtil.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/NetworkDeviceWalkUtil.js +16 -1
- package/build/dist/Server/Utils/Monitor/NetworkDeviceWalkUtil.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/NetworkInventoryUtil.js +10 -0
- package/build/dist/Server/Utils/Monitor/NetworkInventoryUtil.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/SeriesResourceLabels.js +33 -0
- package/build/dist/Server/Utils/Monitor/SeriesResourceLabels.js.map +1 -1
- package/build/dist/Server/Utils/Rules/RuleEngineRuleRead.js +37 -0
- package/build/dist/Server/Utils/Rules/RuleEngineRuleRead.js.map +1 -0
- package/build/dist/Server/Utils/Telemetry/ExceptionSanitizer.js +12 -1
- package/build/dist/Server/Utils/Telemetry/ExceptionSanitizer.js.map +1 -1
- package/build/dist/Server/Utils/Telemetry/LogExceptionExtractor.js +14 -2
- package/build/dist/Server/Utils/Telemetry/LogExceptionExtractor.js.map +1 -1
- package/build/dist/Server/Utils/Telemetry/SourceMapResolver.js +15 -5
- package/build/dist/Server/Utils/Telemetry/SourceMapResolver.js.map +1 -1
- package/build/dist/Server/Utils/Telemetry/StackTraceParser.js +307 -0
- package/build/dist/Server/Utils/Telemetry/StackTraceParser.js.map +1 -1
- package/build/dist/Types/Date.js +27 -0
- package/build/dist/Types/Date.js.map +1 -1
- package/build/dist/Types/Monitor/SnmpMonitor/SnmpOidListUtil.js +253 -0
- package/build/dist/Types/Monitor/SnmpMonitor/SnmpOidListUtil.js.map +1 -0
- package/build/dist/Types/NetworkDevice/DefaultNetworkDeviceRole.js +105 -0
- package/build/dist/Types/NetworkDevice/DefaultNetworkDeviceRole.js.map +1 -0
- package/build/dist/Types/Permission.js +126 -0
- package/build/dist/Types/Permission.js.map +1 -1
- package/build/dist/Types/Rum/SessionReplay.js +19 -0
- package/build/dist/Types/Rum/SessionReplay.js.map +1 -1
- package/build/dist/UI/Components/Charts/Area/AreaChart.js +1 -1
- package/build/dist/UI/Components/Charts/Area/AreaChart.js.map +1 -1
- package/build/dist/UI/Components/Charts/Bar/BarChart.js +1 -1
- package/build/dist/UI/Components/Charts/Bar/BarChart.js.map +1 -1
- package/build/dist/UI/Components/Charts/ChartGroup/ChartGroup.js +6 -1
- package/build/dist/UI/Components/Charts/ChartGroup/ChartGroup.js.map +1 -1
- package/build/dist/UI/Components/Charts/ChartLibrary/Annotations/AnnotationHoverCard.js +83 -0
- package/build/dist/UI/Components/Charts/ChartLibrary/Annotations/AnnotationHoverCard.js.map +1 -0
- package/build/dist/UI/Components/Charts/ChartLibrary/Annotations/AnnotationLayout.js +531 -0
- package/build/dist/UI/Components/Charts/ChartLibrary/Annotations/AnnotationLayout.js.map +1 -0
- package/build/dist/UI/Components/Charts/ChartLibrary/Annotations/ChartAnnotationLayer.js +264 -0
- package/build/dist/UI/Components/Charts/ChartLibrary/Annotations/ChartAnnotationLayer.js.map +1 -0
- package/build/dist/UI/Components/Charts/ChartLibrary/Annotations/UseChartAnnotations.js +122 -0
- package/build/dist/UI/Components/Charts/ChartLibrary/Annotations/UseChartAnnotations.js.map +1 -0
- package/build/dist/UI/Components/Charts/ChartLibrary/AreaChart/AreaChart.js +262 -234
- package/build/dist/UI/Components/Charts/ChartLibrary/AreaChart/AreaChart.js.map +1 -1
- package/build/dist/UI/Components/Charts/ChartLibrary/BarChart/BarChart.js +146 -153
- package/build/dist/UI/Components/Charts/ChartLibrary/BarChart/BarChart.js.map +1 -1
- package/build/dist/UI/Components/Charts/ChartLibrary/LineChart/LineChart.js +261 -233
- package/build/dist/UI/Components/Charts/ChartLibrary/LineChart/LineChart.js.map +1 -1
- package/build/dist/UI/Components/Charts/ChartLibrary/Utils/DoubleClick.js +14 -0
- package/build/dist/UI/Components/Charts/ChartLibrary/Utils/DoubleClick.js.map +1 -0
- package/build/dist/UI/Components/Charts/Line/LineChart.js +1 -1
- package/build/dist/UI/Components/Charts/Line/LineChart.js.map +1 -1
- package/build/dist/UI/Components/Charts/Types/ChartEventKind.js +14 -0
- package/build/dist/UI/Components/Charts/Types/ChartEventKind.js.map +1 -0
- package/build/dist/UI/Components/Charts/Utils/TimeAnnotation.js +57 -28
- package/build/dist/UI/Components/Charts/Utils/TimeAnnotation.js.map +1 -1
- package/build/dist/UI/Components/Charts/Utils/XAxis.js +103 -17
- package/build/dist/UI/Components/Charts/Utils/XAxis.js.map +1 -1
- package/build/dist/UI/Components/EditionLabel/EditionLabel.js +198 -23
- package/build/dist/UI/Components/EditionLabel/EditionLabel.js.map +1 -1
- package/build/dist/UI/Components/ErrorMessage/ErrorMessage.js +15 -5
- package/build/dist/UI/Components/ErrorMessage/ErrorMessage.js.map +1 -1
- package/build/dist/UI/Components/Feed/FeedItem.js +4 -5
- package/build/dist/UI/Components/Feed/FeedItem.js.map +1 -1
- package/build/dist/UI/Components/Header/HeaderIconDropdownButton.js +1 -2
- package/build/dist/UI/Components/Header/HeaderIconDropdownButton.js.map +1 -1
- package/build/dist/UI/Components/Header/UserProfile/UserProfile.js.map +1 -1
- package/build/dist/UI/Components/Image/Image.js +6 -1
- package/build/dist/UI/Components/Image/Image.js.map +1 -1
- package/build/dist/UI/Components/Markdown.tsx/MarkdownConverters.js +0 -0
- package/build/dist/UI/Components/Markdown.tsx/MarkdownConverters.js.map +1 -1
- package/build/dist/UI/Components/MemberRoleAssignment/MemberRoleAssignment.js +1 -2
- package/build/dist/UI/Components/MemberRoleAssignment/MemberRoleAssignment.js.map +1 -1
- package/build/dist/UI/Components/ModelTable/BaseModelTable.js +143 -36
- package/build/dist/UI/Components/ModelTable/BaseModelTable.js.map +1 -1
- package/build/dist/UI/Components/Navbar/NavBar.js +44 -9
- package/build/dist/UI/Components/Navbar/NavBar.js.map +1 -1
- package/build/dist/UI/Components/Navbar/NavBarMenuModal.js +2 -2
- package/build/dist/UI/Components/Navbar/NavBarMenuModal.js.map +1 -1
- package/build/dist/UI/Components/SideMenu/CountModelSideMenuItem.js +1 -1
- package/build/dist/UI/Components/SideMenu/CountModelSideMenuItem.js.map +1 -1
- package/build/dist/UI/Components/SideMenu/SideMenu.js +9 -6
- package/build/dist/UI/Components/SideMenu/SideMenu.js.map +1 -1
- package/build/dist/UI/Components/SideMenu/SideMenuItem.js +1 -1
- package/build/dist/UI/Components/SideMenu/SideMenuItem.js.map +1 -1
- package/build/dist/UI/Components/SideMenu/SideMenuSection.js +7 -2
- package/build/dist/UI/Components/SideMenu/SideMenuSection.js.map +1 -1
- package/build/dist/UI/Components/Table/TableHeader.js +20 -22
- package/build/dist/UI/Components/Table/TableHeader.js.map +1 -1
- package/build/dist/UI/Components/Table/TableRow.js +13 -4
- package/build/dist/UI/Components/Table/TableRow.js.map +1 -1
- package/build/dist/UI/Utils/UseDashboardTimeRangeZoom.js +42 -0
- package/build/dist/UI/Utils/UseDashboardTimeRangeZoom.js.map +1 -0
- package/build/dist/Utils/Dashboard/DashboardTimeRangeZoom.js +74 -0
- package/build/dist/Utils/Dashboard/DashboardTimeRangeZoom.js.map +1 -0
- package/build/dist/Utils/EnterpriseLicense/EnterpriseLicenseSeats.js +153 -0
- package/build/dist/Utils/EnterpriseLicense/EnterpriseLicenseSeats.js.map +1 -0
- package/build/dist/Utils/Monitor/NetworkDeviceRoleCatalog.js +126 -0
- package/build/dist/Utils/Monitor/NetworkDeviceRoleCatalog.js.map +1 -0
- package/build/dist/Utils/Monitor/NetworkDeviceRoleUtil.js +2 -1
- package/build/dist/Utils/Monitor/NetworkDeviceRoleUtil.js.map +1 -1
- package/build/dist/Utils/Monitor/NetworkTopologyUtil.js +67 -32
- package/build/dist/Utils/Monitor/NetworkTopologyUtil.js.map +1 -1
- package/build/dist/Utils/NetworkDevice/DeviceRoleKeyUtil.js +114 -0
- package/build/dist/Utils/NetworkDevice/DeviceRoleKeyUtil.js.map +1 -0
- package/build/dist/Utils/NetworkDiscovery/AutoImportRuleMatcher.js.map +1 -1
- package/build/dist/Utils/NetworkDiscovery/DiscoveredDeviceBuilder.js +127 -7
- package/build/dist/Utils/NetworkDiscovery/DiscoveredDeviceBuilder.js.map +1 -1
- package/build/dist/Utils/NetworkDiscovery/DiscoveredHostUtil.js +50 -3
- package/build/dist/Utils/NetworkDiscovery/DiscoveredHostUtil.js.map +1 -1
- package/build/dist/Utils/NetworkDiscovery/ReverseDnsNameUtil.js +132 -0
- package/build/dist/Utils/NetworkDiscovery/ReverseDnsNameUtil.js.map +1 -0
- package/build/dist/Utils/Rules/RuleEngineLimits.js +31 -0
- package/build/dist/Utils/Rules/RuleEngineLimits.js.map +1 -0
- package/build/dist/Utils/Rules/RulePatternMatchUtil.js +1 -1
- package/build/dist/Utils/Slug.js +31 -1
- package/build/dist/Utils/Slug.js.map +1 -1
- package/jest.config.json +1 -0
- package/package.json +2 -2
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import NetworkTopology, {
|
|
2
|
+
NetworkTopologyDeviceRole,
|
|
2
3
|
NetworkTopologyEdge,
|
|
3
4
|
NetworkTopologyEdgeEndpoint,
|
|
4
5
|
NetworkTopologyLinkProtocol,
|
|
@@ -13,6 +14,13 @@ import {
|
|
|
13
14
|
classifyEndpointRole,
|
|
14
15
|
resolveDeviceRole,
|
|
15
16
|
} from "./NetworkDeviceRoleUtil";
|
|
17
|
+
import {
|
|
18
|
+
TopologyDeviceRoleInput,
|
|
19
|
+
applyRoleStamp,
|
|
20
|
+
buildDeviceRoleIndex,
|
|
21
|
+
roleKeyForNode,
|
|
22
|
+
stampForRoleKey,
|
|
23
|
+
} from "./NetworkDeviceRoleCatalog";
|
|
16
24
|
import DeviceReachabilityUtil, {
|
|
17
25
|
NetworkDeviceReachability,
|
|
18
26
|
} from "../NetworkDevice/DeviceReachabilityUtil";
|
|
@@ -45,11 +53,18 @@ export interface TopologyDeviceInput {
|
|
|
45
53
|
sysDescr?: string | undefined;
|
|
46
54
|
sysObjectId?: string | undefined;
|
|
47
55
|
/*
|
|
48
|
-
* The
|
|
49
|
-
* Outranks the classifier below, because it is the only
|
|
50
|
-
* the role that is not an inference — and on a device
|
|
51
|
-
* is the ONLY statement available at all, the classifier
|
|
52
|
-
* but a hostname to go on.
|
|
56
|
+
* The KEY of the role the operator assigned this device, when they
|
|
57
|
+
* assigned one. Outranks the classifier below, because it is the only
|
|
58
|
+
* statement about the role that is not an inference — and on a device
|
|
59
|
+
* nothing walks it is the ONLY statement available at all, the classifier
|
|
60
|
+
* having nothing but a hostname to go on.
|
|
61
|
+
*
|
|
62
|
+
* A key, not a name: roles are per-project rows an operator can rename, so
|
|
63
|
+
* the caller reads it off the assigned row (NetworkDevice.networkDeviceRole)
|
|
64
|
+
* rather than passing a label. It may be a key outside the built-in twelve
|
|
65
|
+
* — a role the project invented — in which case `role` on the node falls
|
|
66
|
+
* back to the classifier and the node's roleKey/roleLabel/roleShape carry
|
|
67
|
+
* the configured answer instead. See buildTopology's deviceRoles argument.
|
|
53
68
|
*/
|
|
54
69
|
deviceRole?: string | undefined;
|
|
55
70
|
/*
|
|
@@ -329,9 +344,19 @@ export default class NetworkTopologyUtil {
|
|
|
329
344
|
endpoints: Array<TopologyEndpointInput> = [],
|
|
330
345
|
manualLinks: Array<TopologyManualLinkInput> = [],
|
|
331
346
|
suppressedNodeKeys: ReadonlySet<string> = new Set<string>(),
|
|
347
|
+
deviceRoles: ReadonlyArray<TopologyDeviceRoleInput> = [],
|
|
332
348
|
): TopologyBuildResult {
|
|
333
349
|
const nodes: Array<NetworkTopologyNode> = [];
|
|
334
350
|
|
|
351
|
+
/*
|
|
352
|
+
* The project's configured roles, indexed by key. Passing none is a
|
|
353
|
+
* supported case - the nodes then carry no role stamp and every consumer
|
|
354
|
+
* falls back to the built-in labels, shapes and core set, which is exactly
|
|
355
|
+
* the map drawn before roles were configurable.
|
|
356
|
+
*/
|
|
357
|
+
const roleIndex: Map<string, TopologyDeviceRoleInput> =
|
|
358
|
+
buildDeviceRoleIndex(deviceRoles);
|
|
359
|
+
|
|
335
360
|
/*
|
|
336
361
|
* Index managed devices by every identifier a neighbor entry could
|
|
337
362
|
* reference. A key TWO devices both claim is deleted rather than
|
|
@@ -384,26 +409,47 @@ export default class NetworkTopologyUtil {
|
|
|
384
409
|
device.id,
|
|
385
410
|
device.isNeighborDiscoveryEnabled,
|
|
386
411
|
);
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
isManaged: true,
|
|
391
|
-
kind: "device",
|
|
392
|
-
role: resolveDeviceRole(device.deviceRole, {
|
|
412
|
+
const deviceRole: NetworkTopologyDeviceRole = resolveDeviceRole(
|
|
413
|
+
device.deviceRole,
|
|
414
|
+
{
|
|
393
415
|
sysDescr: device.sysDescr,
|
|
394
416
|
sysObjectId: device.sysObjectId,
|
|
395
417
|
vendor: device.vendor,
|
|
396
418
|
deviceModel: device.deviceModel,
|
|
397
419
|
name: device.name,
|
|
398
420
|
sysName: device.sysName || device.hostname,
|
|
399
|
-
}
|
|
421
|
+
},
|
|
422
|
+
);
|
|
423
|
+
|
|
424
|
+
const deviceNode: NetworkTopologyNode = {
|
|
425
|
+
id: device.id,
|
|
426
|
+
name: device.name,
|
|
427
|
+
isManaged: true,
|
|
428
|
+
kind: "device",
|
|
429
|
+
role: deviceRole,
|
|
400
430
|
status: NetworkTopologyUtil.deviceStatus(device, now),
|
|
401
431
|
interfacesUp: device.interfacesUp,
|
|
402
432
|
interfacesDown: device.interfacesDown,
|
|
403
433
|
sysName: device.sysName,
|
|
404
434
|
vendor: device.vendor,
|
|
405
435
|
deviceModel: device.deviceModel,
|
|
406
|
-
}
|
|
436
|
+
};
|
|
437
|
+
|
|
438
|
+
/*
|
|
439
|
+
* The configured role, when the project has one for this key. The
|
|
440
|
+
* assignment is looked up ahead of the classifier's answer, so a device
|
|
441
|
+
* an operator gave a CUSTOM role ("PoS Terminal") is drawn as that role
|
|
442
|
+
* even though `role` above can only ever be one of the built-in twelve.
|
|
443
|
+
*/
|
|
444
|
+
applyRoleStamp(
|
|
445
|
+
deviceNode,
|
|
446
|
+
stampForRoleKey(
|
|
447
|
+
roleKeyForNode(device.deviceRole, deviceRole),
|
|
448
|
+
roleIndex,
|
|
449
|
+
),
|
|
450
|
+
);
|
|
451
|
+
|
|
452
|
+
nodes.push(deviceNode);
|
|
407
453
|
}
|
|
408
454
|
|
|
409
455
|
const edgeByKey: Map<string, NetworkTopologyEdge> = new Map();
|
|
@@ -465,7 +511,11 @@ export default class NetworkTopologyUtil {
|
|
|
465
511
|
NetworkTopologyUtil.propagateMatchesAcrossPeerGroups(resolvedClaims);
|
|
466
512
|
|
|
467
513
|
const peerNodeIdByClaim: Map<ResolvedClaim, string> =
|
|
468
|
-
NetworkTopologyUtil.buildUnmanagedPeerNodes(
|
|
514
|
+
NetworkTopologyUtil.buildUnmanagedPeerNodes(
|
|
515
|
+
settledClaims,
|
|
516
|
+
nodes,
|
|
517
|
+
roleIndex,
|
|
518
|
+
);
|
|
469
519
|
|
|
470
520
|
for (const resolved of settledClaims) {
|
|
471
521
|
const device: TopologyDeviceInput = resolved.device;
|
|
@@ -780,16 +830,18 @@ export default class NetworkTopologyUtil {
|
|
|
780
830
|
endpoint.vendor ||
|
|
781
831
|
endpoint.ipAddress ||
|
|
782
832
|
endpoint.macAddress;
|
|
783
|
-
|
|
833
|
+
const endpointRole: NetworkTopologyDeviceRole = classifyEndpointRole({
|
|
834
|
+
classification: endpoint.classification,
|
|
835
|
+
vendor: endpoint.vendor,
|
|
836
|
+
name: endpointName,
|
|
837
|
+
});
|
|
838
|
+
|
|
839
|
+
const endpointNode: NetworkTopologyNode = {
|
|
784
840
|
id: nodeId,
|
|
785
841
|
name: endpointName,
|
|
786
842
|
isManaged: false,
|
|
787
843
|
kind: "endpoint",
|
|
788
|
-
role:
|
|
789
|
-
classification: endpoint.classification,
|
|
790
|
-
vendor: endpoint.vendor,
|
|
791
|
-
name: endpointName,
|
|
792
|
-
}),
|
|
844
|
+
role: endpointRole,
|
|
793
845
|
status: NetworkTopologyUtil.statusFromLastSeen(
|
|
794
846
|
endpoint.lastSeenAt,
|
|
795
847
|
now,
|
|
@@ -799,7 +851,21 @@ export default class NetworkTopologyUtil {
|
|
|
799
851
|
ipAddress: endpoint.ipAddress,
|
|
800
852
|
classification: endpoint.classification,
|
|
801
853
|
vlanId: endpoint.vlanId,
|
|
802
|
-
}
|
|
854
|
+
};
|
|
855
|
+
|
|
856
|
+
/*
|
|
857
|
+
* Endpoints are stamped too, so a project that renamed "IP phone" sees
|
|
858
|
+
* the new name on the handsets its switches learned. It cannot change
|
|
859
|
+
* where they sit: the layouts put every endpoint in its switch's group
|
|
860
|
+
* box before they ever look at a role, so isCoreLayerRole is inert here
|
|
861
|
+
* by construction rather than by omission.
|
|
862
|
+
*/
|
|
863
|
+
applyRoleStamp(
|
|
864
|
+
endpointNode,
|
|
865
|
+
stampForRoleKey(roleKeyForNode(undefined, endpointRole), roleIndex),
|
|
866
|
+
);
|
|
867
|
+
|
|
868
|
+
nodes.push(endpointNode);
|
|
803
869
|
|
|
804
870
|
// Port label + interface state on the switch end, when identifiable.
|
|
805
871
|
let switchInterface: TopologyInterfaceInput | undefined = undefined;
|
|
@@ -1264,6 +1330,10 @@ export default class NetworkTopologyUtil {
|
|
|
1264
1330
|
private static buildUnmanagedPeerNodes(
|
|
1265
1331
|
resolvedClaims: Array<ResolvedClaim>,
|
|
1266
1332
|
nodes: Array<NetworkTopologyNode>,
|
|
1333
|
+
roleIndex: Map<string, TopologyDeviceRoleInput> = new Map<
|
|
1334
|
+
string,
|
|
1335
|
+
TopologyDeviceRoleInput
|
|
1336
|
+
>(),
|
|
1267
1337
|
): Map<ResolvedClaim, string> {
|
|
1268
1338
|
const unmanagedClaims: Array<ResolvedClaim> = resolvedClaims.filter(
|
|
1269
1339
|
(resolved: ResolvedClaim) => {
|
|
@@ -1359,21 +1429,22 @@ export default class NetworkTopologyUtil {
|
|
|
1359
1429
|
usedNodeIds.add(nodeId);
|
|
1360
1430
|
|
|
1361
1431
|
const unmanagedName: string = displayName || "Unknown device";
|
|
1362
|
-
|
|
1432
|
+
/*
|
|
1433
|
+
* Classified from the whole group rather than from whichever
|
|
1434
|
+
* report happened to be first: the platform string is usually the
|
|
1435
|
+
* only real evidence about a peer, and it may well arrive on the
|
|
1436
|
+
* second report of it.
|
|
1437
|
+
*/
|
|
1438
|
+
const unmanagedRole: NetworkTopologyDeviceRole = classifyDeviceRole({
|
|
1439
|
+
platform: platform,
|
|
1440
|
+
name: unmanagedName,
|
|
1441
|
+
});
|
|
1442
|
+
const unmanagedNode: NetworkTopologyNode = {
|
|
1363
1443
|
id: nodeId,
|
|
1364
1444
|
name: unmanagedName,
|
|
1365
1445
|
isManaged: false,
|
|
1366
1446
|
kind: "unmanaged",
|
|
1367
|
-
|
|
1368
|
-
* Classified from the whole group rather than from whichever
|
|
1369
|
-
* report happened to be first: the platform string is usually the
|
|
1370
|
-
* only real evidence about a peer, and it may well arrive on the
|
|
1371
|
-
* second report of it.
|
|
1372
|
-
*/
|
|
1373
|
-
role: classifyDeviceRole({
|
|
1374
|
-
platform: platform,
|
|
1375
|
-
name: unmanagedName,
|
|
1376
|
-
}),
|
|
1447
|
+
role: unmanagedRole,
|
|
1377
1448
|
status: "unknown",
|
|
1378
1449
|
deviceModel: platform,
|
|
1379
1450
|
/*
|
|
@@ -1383,7 +1454,19 @@ export default class NetworkTopologyUtil {
|
|
|
1383
1454
|
* they can only look at.
|
|
1384
1455
|
*/
|
|
1385
1456
|
ipAddress: ipAddress,
|
|
1386
|
-
}
|
|
1457
|
+
};
|
|
1458
|
+
|
|
1459
|
+
/*
|
|
1460
|
+
* Stamped for the adopt-a-neighbour flow above all: isSnmpWalkableRole
|
|
1461
|
+
* is what decides whether adopting this peer opens on SNMP polling or on
|
|
1462
|
+
* a monitor, and a peer is exactly the node an operator adopts.
|
|
1463
|
+
*/
|
|
1464
|
+
applyRoleStamp(
|
|
1465
|
+
unmanagedNode,
|
|
1466
|
+
stampForRoleKey(roleKeyForNode(undefined, unmanagedRole), roleIndex),
|
|
1467
|
+
);
|
|
1468
|
+
|
|
1469
|
+
nodes.push(unmanagedNode);
|
|
1387
1470
|
|
|
1388
1471
|
for (const resolved of groupClaims) {
|
|
1389
1472
|
nodeIdByClaim.set(resolved, nodeId);
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Turns a device role's NAME into its stable KEY.
|
|
3
|
+
*
|
|
4
|
+
* Device roles are per-project rows an operator can rename at will, which is
|
|
5
|
+
* exactly why nothing may identify one by its name. The key is what does the
|
|
6
|
+
* identifying: it is what the SNMP classifier's answer is matched against,
|
|
7
|
+
* what a topology payload carries, and what survives the role being renamed.
|
|
8
|
+
*
|
|
9
|
+
* The shape is lowerCamelCase, because the eleven built-in roles seeded into
|
|
10
|
+
* every project already use it ("wirelessAccessPoint", "loadBalancer") and a
|
|
11
|
+
* key derived from the name "Wireless AP" must be able to look like one of
|
|
12
|
+
* them. Anything that is not a letter or a digit is a word boundary, so
|
|
13
|
+
* "PoS Terminal", "pos-terminal" and "POS terminal!" all derive "posTerminal"
|
|
14
|
+
* - near-duplicates collapse rather than multiplying.
|
|
15
|
+
*
|
|
16
|
+
* Pure and dependency-free: the service derives keys with it on the server and
|
|
17
|
+
* the tests exercise it directly.
|
|
18
|
+
*/
|
|
19
|
+
|
|
20
|
+
// Keys are stored in a ShortText column; nothing sensible is this long.
|
|
21
|
+
const MAX_KEY_LENGTH: number = 100;
|
|
22
|
+
|
|
23
|
+
/*
|
|
24
|
+
* A name of nothing but punctuation ("---") has no letters to build a key
|
|
25
|
+
* from. Rather than returning an empty string - which would fail the column's
|
|
26
|
+
* NOT NULL and surface as a database error - it falls back to this, and the
|
|
27
|
+
* caller's uniqueness suffixing turns the second one into "role2".
|
|
28
|
+
*/
|
|
29
|
+
export const FALLBACK_DEVICE_ROLE_KEY: string = "role";
|
|
30
|
+
|
|
31
|
+
export type DeriveDeviceRoleKeyFunction = (name: string) => string;
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* The key for a role named `name`. Deterministic and case-insensitive over
|
|
35
|
+
* word separators: it is safe to call twice and get the same answer.
|
|
36
|
+
*/
|
|
37
|
+
export const deriveDeviceRoleKey: DeriveDeviceRoleKeyFunction = (
|
|
38
|
+
name: string,
|
|
39
|
+
): string => {
|
|
40
|
+
const words: Array<string> = (name || "")
|
|
41
|
+
.split(/[^a-zA-Z0-9]+/)
|
|
42
|
+
.filter((word: string) => {
|
|
43
|
+
return word.length > 0;
|
|
44
|
+
});
|
|
45
|
+
|
|
46
|
+
if (words.length === 0) {
|
|
47
|
+
return FALLBACK_DEVICE_ROLE_KEY;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/*
|
|
51
|
+
* A ONE-WORD name is only re-cased at its first letter. A MULTI-word name
|
|
52
|
+
* has its first word lowercased whole, and every later word capitalised at
|
|
53
|
+
* the front with its interior left alone.
|
|
54
|
+
*
|
|
55
|
+
* Both halves are load-bearing, and for different reasons.
|
|
56
|
+
*
|
|
57
|
+
* Lowercasing the head of a multi-word name is what makes the key readable.
|
|
58
|
+
* Re-casing only its first letter turns "PoS Terminal" into "poSTerminal"
|
|
59
|
+
* and "IP phone" into "iPPhone", and this key is a column an operator reads
|
|
60
|
+
* on the settings page. Later words keep their interior for the opposite
|
|
61
|
+
* reason: "Wireless AP" should read as "wirelessAP" and "SD-WAN Edge" as
|
|
62
|
+
* "sdWANEdge", because those acronyms are the boundaries a reader navigates
|
|
63
|
+
* by.
|
|
64
|
+
*
|
|
65
|
+
* Leaving a one-word name alone is what makes every derived key a FIXED
|
|
66
|
+
* POINT of this function. A derived key is always a single run of letters
|
|
67
|
+
* and digits, so re-deriving it takes this branch and returns it unchanged -
|
|
68
|
+
* "wirelessAccessPoint" stays "wirelessAccessPoint", and a key that is
|
|
69
|
+
* accidentally fed back in as a name cannot silently move a role's identity.
|
|
70
|
+
* It is also honest: a name with no word boundaries has no boundaries to
|
|
71
|
+
* normalise.
|
|
72
|
+
*/
|
|
73
|
+
const key: string =
|
|
74
|
+
words.length === 1
|
|
75
|
+
? words[0]!.charAt(0).toLowerCase() + words[0]!.slice(1)
|
|
76
|
+
: words
|
|
77
|
+
.map((word: string, index: number): string => {
|
|
78
|
+
if (index === 0) {
|
|
79
|
+
return word.toLowerCase();
|
|
80
|
+
}
|
|
81
|
+
return word.charAt(0).toUpperCase() + word.slice(1);
|
|
82
|
+
})
|
|
83
|
+
.join("");
|
|
84
|
+
|
|
85
|
+
/*
|
|
86
|
+
* A key starting with a digit ("5gRouter") is still a fine identifier here -
|
|
87
|
+
* it is a lookup key, not a JavaScript name - so only the length is capped.
|
|
88
|
+
*/
|
|
89
|
+
return key.slice(0, MAX_KEY_LENGTH);
|
|
90
|
+
};
|
|
91
|
+
|
|
92
|
+
export type BuildUniqueDeviceRoleKeyFunction = (
|
|
93
|
+
name: string,
|
|
94
|
+
takenKeys: ReadonlySet<string>,
|
|
95
|
+
) => string;
|
|
96
|
+
|
|
97
|
+
/**
|
|
98
|
+
* The key for a role named `name` that no other role in the project holds.
|
|
99
|
+
*
|
|
100
|
+
* Two differently-named roles can derive the same key ("PoS Terminal" and
|
|
101
|
+
* "pos_terminal" both give "posTerminal"), and the column is unique per
|
|
102
|
+
* project, so the second one has to move. It gets a numeric suffix rather than
|
|
103
|
+
* a random one so the result stays readable and stable for a given project
|
|
104
|
+
* state - "posTerminal2", not "posTerminal-f3a9".
|
|
105
|
+
*
|
|
106
|
+
* Comparison is case-insensitive because that is how the key is matched when
|
|
107
|
+
* a role is looked up; two keys differing only in case would collide there.
|
|
108
|
+
*/
|
|
109
|
+
export const buildUniqueDeviceRoleKey: BuildUniqueDeviceRoleKeyFunction = (
|
|
110
|
+
name: string,
|
|
111
|
+
takenKeys: ReadonlySet<string>,
|
|
112
|
+
): string => {
|
|
113
|
+
const taken: Set<string> = new Set<string>();
|
|
114
|
+
for (const key of takenKeys) {
|
|
115
|
+
taken.add(key.trim().toLowerCase());
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
const base: string = deriveDeviceRoleKey(name);
|
|
119
|
+
|
|
120
|
+
if (!taken.has(base.toLowerCase())) {
|
|
121
|
+
return base;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
/*
|
|
125
|
+
* Bounded so a pathological project cannot spin here. Past the bound the
|
|
126
|
+
* caller gets the base key back and the database's unique constraint
|
|
127
|
+
* rejects the create - a loud, correct failure rather than a hang.
|
|
128
|
+
*/
|
|
129
|
+
for (let suffix: number = 2; suffix < 1000; suffix++) {
|
|
130
|
+
const candidate: string = `${base}${suffix}`;
|
|
131
|
+
if (!taken.has(candidate.toLowerCase())) {
|
|
132
|
+
return candidate;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
return base;
|
|
137
|
+
};
|
|
@@ -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.
|