@oneuptime/common 12.0.31 → 12.0.33
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/Span.ts +14 -0
- package/Models/DatabaseModels/AlertState.ts +0 -2
- package/Models/DatabaseModels/Domain.ts +1 -1
- package/Models/DatabaseModels/EnterpriseLicense.ts +56 -0
- package/Models/DatabaseModels/Incident.ts +1 -1
- package/Models/DatabaseModels/IncidentTemplate.ts +1 -1
- package/Models/DatabaseModels/Index.ts +12 -0
- package/Models/DatabaseModels/MetricType.ts +0 -2
- package/Models/DatabaseModels/Monitor.ts +76 -0
- package/Models/DatabaseModels/MonitorStatusTimeline.ts +0 -2
- package/Models/DatabaseModels/MonitorTest.ts +0 -2
- package/Models/DatabaseModels/NetworkAlertPolicy.ts +690 -0
- package/Models/DatabaseModels/NetworkDevice.ts +297 -3
- package/Models/DatabaseModels/NetworkDeviceOidTemplate.ts +3 -1
- package/Models/DatabaseModels/NetworkDeviceRole.ts +648 -0
- package/Models/DatabaseModels/NetworkSite.ts +201 -2
- package/Models/DatabaseModels/NetworkSiteType.ts +102 -3
- package/Models/DatabaseModels/NetworkSnmpCredentialProfile.ts +841 -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/TelemetryException.ts +119 -0
- package/Models/DatabaseModels/UserNotificationEmailRollupBatch.ts +334 -0
- package/Models/DatabaseModels/UserNotificationEmailRollupItem.ts +370 -0
- package/Models/DatabaseModels/UserNotificationEmailRollupSetting.ts +282 -0
- package/Server/API/EnterpriseLicenseAPI.ts +391 -64
- package/Server/API/LlmProviderAPI.ts +137 -22
- package/Server/EnvironmentConfig.ts +14 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1790700000000-AddNetworkSiteTypeParentHierarchy.ts +55 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1790800000000-AddNetworkDeviceRoleTable.ts +72 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1790900000000-AddEnterpriseLicenseUsageProvenance.ts +31 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1790900000000-AddTelemetryExceptionErrorClass.ts +124 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1791000000000-AddUserNotificationEmailRollup.ts +132 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1791100000000-AddUserNotificationEmailRollupSetting.ts +79 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1791200000000-AddNetworkSnmpCredentialProfilesAndAlertPolicies.ts +191 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +14 -0
- package/Server/Infrastructure/QueueWorker.ts +38 -8
- package/Server/Middleware/BearerTokenAuthorization.ts +12 -0
- package/Server/Middleware/ProjectAuthorization.ts +11 -0
- package/Server/Middleware/SCIMAuthorization.ts +12 -0
- package/Server/Middleware/TelemetryIngest.ts +11 -0
- package/Server/Services/AIBillingService.ts +101 -27
- package/Server/Services/DatabaseService.ts +39 -9
- package/Server/Services/EnterpriseLicenseInstanceService.ts +197 -0
- package/Server/Services/EnterpriseLicenseService.ts +55 -0
- package/Server/Services/Index.ts +12 -0
- package/Server/Services/MonitorService.ts +143 -21
- package/Server/Services/MonitorStatusTimelineService.ts +150 -8
- package/Server/Services/MonitorTemplateService.ts +217 -1
- package/Server/Services/NetworkAlertPolicyEngineService.ts +2159 -0
- package/Server/Services/NetworkAlertPolicyService.ts +944 -0
- package/Server/Services/NetworkDeviceAutoImportRuleEngineService.ts +9 -10
- package/Server/Services/NetworkDeviceAutoImportRuleService.ts +60 -15
- package/Server/Services/NetworkDeviceRoleService.ts +90 -0
- package/Server/Services/NetworkDeviceService.ts +1032 -73
- package/Server/Services/NetworkSiteService.ts +1502 -129
- package/Server/Services/NetworkSiteTypeService.ts +1216 -0
- package/Server/Services/NetworkSnmpCredentialProfileService.ts +238 -0
- package/Server/Services/NotificationService.ts +118 -28
- package/Server/Services/ProjectService.ts +186 -44
- package/Server/Services/StatusPagePrivateUserService.ts +103 -3
- package/Server/Services/UserNotificationEmailRollupBatchService.ts +78 -0
- package/Server/Services/UserNotificationEmailRollupItemService.ts +79 -0
- package/Server/Services/UserNotificationEmailRollupSettingService.ts +113 -0
- package/Server/Services/UserNotificationSettingService.ts +62 -31
- package/Server/Services/UserService.ts +95 -0
- package/Server/Types/Database/QueryHelper.ts +2 -2
- package/Server/Utils/AI/Chat/ObservabilityChatPrompt.ts +14 -3
- package/Server/Utils/AI/SRE/Insights/Detectors/ExceptionSpikeDetector.ts +10 -0
- package/Server/Utils/AI/SRE/Insights/Detectors/NewExceptionDetector.ts +10 -0
- package/Server/Utils/AI/SRE/Insights/InsightTriageRunner.ts +62 -1
- package/Server/Utils/AI/Toolbox/AlertTools.ts +15 -1
- package/Server/Utils/Billing/BillingFailureNoticeThrottle.ts +80 -0
- package/Server/Utils/DataSource/HttpFetch.ts +9 -2
- package/Server/Utils/EmailRollup/EmailRollupConstants.ts +98 -0
- package/Server/Utils/EmailRollup/EmailRollupFlushRunner.ts +872 -0
- package/Server/Utils/EmailRollup/EmailRollupRenderer.ts +781 -0
- package/Server/Utils/EmailRollup/EmailRollupWriter.ts +368 -0
- package/Server/Utils/LLM/LLMService.ts +78 -0
- package/Server/Utils/LogRedaction.ts +8 -0
- package/Server/Utils/Logger.ts +79 -1
- package/Server/Utils/Monitor/Criteria/DatabaseMonitorCriteria.ts +190 -0
- package/Server/Utils/Monitor/Criteria/EvaluateOverTime.ts +9 -2
- package/Server/Utils/Monitor/Criteria/SnmpMonitorCriteria.ts +61 -1
- package/Server/Utils/Monitor/MonitorCriteriaDataExtractor.ts +14 -0
- package/Server/Utils/Monitor/MonitorCriteriaEvaluator.ts +49 -0
- package/Server/Utils/Monitor/MonitorCriteriaObservationBuilder.ts +255 -4
- package/Server/Utils/Monitor/MonitorMetricUtil.ts +41 -0
- package/Server/Utils/Monitor/MonitorTemplateUtil.ts +43 -0
- package/Server/Utils/Monitor/NetworkDeviceHydrationUtil.ts +499 -19
- package/Server/Utils/Monitor/NetworkDeviceMetricUtil.ts +66 -10
- package/Server/Utils/Monitor/NetworkDeviceWalkUtil.ts +238 -44
- package/Server/Utils/Monitor/NetworkInventoryUtil.ts +146 -39
- package/Server/Utils/NetworkDevice/DeviceHealthAggregation.ts +31 -18
- package/Server/Utils/NetworkSite/NetworkSiteHierarchyLock.ts +213 -0
- package/Server/Utils/OutboundUserAgent.ts +152 -0
- package/Server/Utils/StartServer.ts +51 -19
- package/Server/Utils/Telemetry/CaptureSpan.ts +32 -8
- package/Server/Utils/Telemetry/ErrorClassResolver.ts +120 -0
- package/Server/Utils/Telemetry/SpanUtil.ts +33 -0
- package/Server/Utils/Telemetry.ts +198 -51
- package/Server/Views/Partials/SensitiveUrlToken.ejs +140 -0
- package/Tests/App/Dashboard/AddNeighborToMonitoringModal.test.tsx +158 -27
- package/Tests/App/Dashboard/AskAiSuggestedPrompts.test.ts +279 -0
- package/Tests/App/Dashboard/DashboardChartWidgetZoom.test.tsx +35 -8
- package/Tests/App/Dashboard/DashboardCommandPalette.test.tsx +107 -3
- package/Tests/App/Dashboard/DashboardEditPermissions.test.tsx +517 -0
- package/Tests/App/Dashboard/DashboardVariablesDiscard.test.tsx +26 -0
- package/Tests/App/Dashboard/DashboardWideChartZoom.test.tsx +401 -0
- package/Tests/App/Dashboard/DeviceStatusHero.test.tsx +588 -0
- package/Tests/App/Dashboard/DiscoveryScanWizardValidation.test.tsx +18 -9
- package/Tests/App/Dashboard/MonitorCreateFromMonitorBackedDevice.test.tsx +632 -0
- package/Tests/App/Dashboard/MonitorRecommendationCreateProgress.test.tsx +682 -0
- package/Tests/App/Dashboard/MonitorTemplateColumnAndFacet.test.tsx +318 -0
- package/Tests/App/Dashboard/MonitorTypePicker.test.tsx +4 -2
- package/Tests/App/Dashboard/NetworkDeviceBulkDelete.test.tsx +357 -0
- package/Tests/App/Dashboard/NetworkDeviceCreateFormMonitorBinding.test.tsx +676 -0
- package/Tests/App/Dashboard/NetworkDeviceCreateFormPingMonitor.test.tsx +791 -0
- package/Tests/App/Dashboard/NetworkDeviceCreateFormProbeAndSnmp.test.tsx +833 -0
- package/Tests/App/Dashboard/NetworkDeviceCriteriaFilter.test.ts +161 -0
- package/Tests/App/Dashboard/NetworkDeviceSettingsMonitoringSection.test.tsx +458 -0
- package/Tests/App/Dashboard/NetworkSideMenu.test.tsx +626 -0
- package/Tests/App/Dashboard/PingMonitorProvisioning.test.ts +368 -0
- package/Tests/App/Dashboard/RecommendationCard.test.tsx +796 -0
- package/Tests/App/Dashboard/RecommendationToolbar.test.tsx +519 -0
- package/Tests/App/Dashboard/RecommendationsList.test.tsx +661 -0
- package/Tests/App/Dashboard/SideMenuHarness.tsx +11 -3
- package/Tests/App/Dashboard/UseBulkCreatePingMonitors.test.tsx +899 -0
- package/Tests/App/Dashboard/UseBulkSnmpCredentialProfileActions.test.tsx +732 -0
- package/Tests/App/SensitiveUrlTokenBootstrap.test.ts +256 -0
- package/Tests/App/StatusPage/StatusPageIndexPageRobotsMeta.test.ts +11 -1
- package/Tests/App/StatusPage/StatusPageLoginCodeBootstrap.test.ts +9 -4
- package/Tests/Models/DatabaseModels/ModelRegistryInvariants.test.ts +115 -41
- package/Tests/Models/NetworkSiteHierarchy.test.ts +41 -4
- package/Tests/Server/API/EnterpriseLicenseReportUserCount.test.ts +951 -7
- package/Tests/Server/API/LlmProviderConnectionTest.test.ts +522 -0
- package/Tests/Server/Infrastructure/Postgres/NetworkDeviceRoleTableMigration.test.ts +476 -0
- package/Tests/Server/Infrastructure/Postgres/NetworkSnmpCredentialProfilesAndAlertPoliciesMigration.test.ts +854 -0
- package/Tests/Server/Infrastructure/Postgres/SchemaMigrationsOrdering.test.ts +18 -0
- package/Tests/Server/Infrastructure/Postgres/UserNotificationEmailRollupTableMigration.test.ts +535 -0
- package/Tests/Server/Services/AIChatPrivacyPin.test.ts +560 -0
- package/Tests/Server/Services/BillingRechargeOwnerEmailGuards.test.ts +783 -0
- package/Tests/Server/Services/DatabaseServiceGenerateSlug.test.ts +215 -0
- package/Tests/Server/Services/EnterpriseLicenseInstanceServiceDeletionUsage.test.ts +707 -0
- package/Tests/Server/Services/EnterpriseLicenseServiceUsageAggregationLock.test.ts +329 -0
- package/Tests/Server/Services/MonitorServiceDeleteNetworkDeviceCleanup.test.ts +294 -0
- package/Tests/Server/Services/MonitorStatusBridgeProbePath.test.ts +802 -0
- package/Tests/Server/Services/MonitorStatusTimelineService.test.ts +72 -2
- package/Tests/Server/Services/NetworkAlertPolicyEngineHooks.test.ts +752 -0
- package/Tests/Server/Services/NetworkAlertPolicyEngineService.test.ts +1849 -0
- package/Tests/Server/Services/NetworkAlertPolicyModel.test.ts +1793 -0
- package/Tests/Server/Services/NetworkDeviceAutoImportRuleEngineService.test.ts +47 -4
- package/Tests/Server/Services/NetworkDeviceAutoImportRuleService.test.ts +97 -12
- package/Tests/Server/Services/NetworkDeviceAutoMonitorLifecycle.test.ts +148 -3
- package/Tests/Server/Services/NetworkDeviceMonitorBindingUpdateGuard.test.ts +514 -0
- package/Tests/Server/Services/NetworkDeviceMonitorStatusStamp.test.ts +447 -58
- package/Tests/Server/Services/NetworkDeviceMonitoringMethodTransition.test.ts +739 -0
- package/Tests/Server/Services/NetworkDevicePollingTenancy.test.ts +501 -0
- package/Tests/Server/Services/NetworkDeviceRoleModel.test.ts +672 -0
- package/Tests/Server/Services/NetworkDeviceRuleEngines.test.ts +1 -1
- package/Tests/Server/Services/NetworkDeviceSiteDefaultProbe.test.ts +432 -0
- package/Tests/Server/Services/NetworkSiteMonitoringDefaults.test.ts +498 -0
- package/Tests/Server/Services/NetworkSiteRollupPolicyAndMaintenance.test.ts +337 -55
- package/Tests/Server/Services/NetworkSiteService.test.ts +1868 -131
- package/Tests/Server/Services/NetworkSiteTypeService.test.ts +1109 -0
- package/Tests/Server/Services/NetworkSnmpCredentialProfileModel.test.ts +926 -0
- package/Tests/Server/Services/NetworkSnmpCredentialProfileService.test.ts +796 -0
- package/Tests/Server/Services/ProjectServiceCreateSubscriptionStarted.test.ts +67 -4
- package/Tests/Server/Services/ProjectServiceNetworkSiteTypeDefaults.test.ts +214 -0
- package/Tests/Server/Services/ScheduledMaintenanceSubscriberEndTime.test.ts +369 -0
- package/Tests/Server/Services/StatusPagePrivateUserEmailChangePasswordResetExpiry.test.ts +269 -0
- package/Tests/Server/Services/UserEmailChangePasswordResetExpiry.test.ts +472 -0
- package/Tests/Server/Services/UserNotificationEmailRollupModels.test.ts +569 -0
- package/Tests/Server/Services/UserNotificationEmailRollupSettingModel.test.ts +314 -0
- package/Tests/Server/Services/UserNotificationEmailRollupSettingService.test.ts +409 -0
- package/Tests/Server/Services/UserNotificationSettingMonitorDefaults.test.ts +248 -0
- package/Tests/Server/Services/UserNotificationSettingRollupRouting.test.ts +856 -0
- package/Tests/Server/Services/UserNotificationSettingWorkspaceChannels.test.ts +145 -3
- package/Tests/Server/Types/Database/Permissions/DashboardAccessPermission.test.ts +321 -0
- package/Tests/Server/Types/Database/QueryHelperOperators.test.ts +17 -0
- package/Tests/Server/Utils/AI/AlertMonitorFilters.test.ts +124 -0
- package/Tests/Server/Utils/AI/Insights/InsightTriageRunner.test.ts +208 -0
- package/Tests/Server/Utils/AI/LLMServiceToolCalling.test.ts +235 -0
- package/Tests/Server/Utils/AI/ObservabilityChatPrompt.test.ts +253 -0
- package/Tests/Server/Utils/BasicCron.test.ts +283 -0
- package/Tests/Server/Utils/Captcha.test.ts +422 -0
- package/Tests/Server/Utils/DataSource/HttpFetch.test.ts +96 -2
- package/Tests/Server/Utils/Database/MigrationFailureLog.test.ts +466 -0
- package/Tests/Server/Utils/EmailRollup/EmailRollupFlushRunnerBehaviour.test.ts +1096 -0
- package/Tests/Server/Utils/EmailRollup/EmailRollupFlushRunnerClaim.test.ts +466 -0
- package/Tests/Server/Utils/EmailRollup/EmailRollupRenderer.test.ts +1428 -0
- package/Tests/Server/Utils/EmailRollup/EmailRollupTestHarness.ts +752 -0
- package/Tests/Server/Utils/EmailRollup/EmailRollupWriter.test.ts +864 -0
- package/Tests/Server/Utils/IncomingCallPhoneNumber.test.ts +174 -0
- package/Tests/Server/Utils/LoggerFaultDemotion.test.ts +346 -0
- package/Tests/Server/Utils/Monitor/Criteria/DatabaseMonitorCriteria.test.ts +633 -0
- package/Tests/Server/Utils/Monitor/Criteria/SnmpMonitorCriteria.test.ts +196 -0
- package/Tests/Server/Utils/Monitor/DatabaseMetricWrite.test.ts +367 -0
- package/Tests/Server/Utils/Monitor/MonitorCriteriaObservationBuilderUnits.test.ts +100 -0
- package/Tests/Server/Utils/Monitor/MonitorStepResourceIdentity.test.ts +5 -0
- package/Tests/Server/Utils/Monitor/NetworkDeviceHydrationUtil.test.ts +512 -31
- package/Tests/Server/Utils/Monitor/NetworkDeviceMetricUtil.test.ts +252 -0
- package/Tests/Server/Utils/Monitor/NetworkDeviceWalkUtil.test.ts +479 -42
- package/Tests/Server/Utils/Monitor/NetworkInventoryUtil.test.ts +351 -5
- package/Tests/Server/Utils/NetworkDevice/DeviceHealthAggregation.test.ts +136 -12
- package/Tests/Server/Utils/NetworkSite/NetworkSiteHierarchyLock.test.ts +306 -0
- package/Tests/Server/Utils/OutboundUserAgent.test.ts +266 -0
- package/Tests/Server/Utils/SecurityEvent/ThreatIntel/TaxiiClientUserAgent.test.ts +141 -0
- package/Tests/Server/Utils/Telemetry/ErrorClassResolver.test.ts +298 -0
- package/Tests/Server/Utils/Telemetry.test.ts +456 -66
- package/Tests/Types/Monitor/DatabaseMetricCatalog.test.ts +388 -0
- package/Tests/Types/Monitor/MonitorStepDatabaseMonitor.test.ts +243 -0
- package/Tests/Types/Monitor/MonitorStepDefaultTelemetryConfig.test.ts +1 -0
- package/Tests/Types/Monitor/MonitorType.test.ts +1 -0
- package/Tests/Types/Monitor/MonitorTypeKeywords.test.ts +16 -7
- package/Tests/Types/Monitor/NetworkDeviceAlertPack.test.ts +60 -0
- package/Tests/Types/NetworkDevice/DefaultNetworkDeviceRole.test.ts +417 -0
- package/Tests/Types/NetworkDevice/NetworkAlertPolicyScope.test.ts +655 -0
- package/Tests/Types/NetworkDevice/NetworkDeviceMonitoringMethod.test.ts +115 -26
- package/Tests/Types/NetworkSite/DefaultNetworkSiteType.test.ts +39 -0
- package/Tests/Types/NotificationSetting/NotificationEmailRollupPolicy.test.ts +299 -0
- package/Tests/Types/Telemetry/ErrorClass.test.ts +483 -0
- package/Tests/UI/Components/BasicRadioButtons.test.tsx +336 -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/ModelTable/BaseModelTableBulkDelete.test.tsx +751 -0
- package/Tests/UI/Components/ModelTable/BaseModelTableColumnCustomization.test.tsx +475 -43
- package/Tests/UI/Components/ModelTable/ColumnPreference.test.ts +89 -0
- package/Tests/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.test.ts +15 -0
- package/Tests/UI/Components/NavBarCommandKGating.test.tsx +103 -8
- package/Tests/UI/Components/ProgressBar.test.tsx +38 -2
- package/Tests/UI/Components/SideMenuItem.test.tsx +256 -4
- package/Tests/UI/Components/SideMenuSection.test.tsx +310 -0
- package/Tests/UI/Components/SideOverSubmitState.test.tsx +335 -0
- package/Tests/UI/Utils/PageScrollLock.test.tsx +377 -0
- package/Tests/UI/Utils/PermissionGate.test.ts +78 -0
- package/Tests/UI/Utils/SensitiveUrlToken.test.ts +140 -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 +69 -0
- package/Tests/Utils/EnterpriseLicenseSync.test.ts +7 -1
- package/Tests/Utils/EnterpriseLicenseUsage.test.ts +433 -2
- package/Tests/Utils/Monitor/MonitorMetricType.test.ts +280 -1
- package/Tests/Utils/Monitor/MonitorSummarySnapshotUtil.test.ts +1 -0
- package/Tests/Utils/Monitor/NetworkDeviceRoleCatalog.test.ts +981 -0
- package/Tests/Utils/Monitor/NetworkTopologyRoleCatalog.test.ts +865 -0
- package/Tests/Utils/Monitor/NetworkTopologyUtil.test.ts +38 -0
- package/Tests/Utils/NetworkDevice/DeviceHealthStateUtil.test.ts +284 -23
- package/Tests/Utils/NetworkDevice/DeviceReachabilityUtil.test.ts +177 -0
- package/Tests/Utils/NetworkDevice/DeviceRoleKeyUtil.test.ts +538 -0
- package/Tests/Utils/NetworkDevice/MonitoringMethodThreadedClassifiers.test.ts +992 -0
- package/Tests/Utils/NetworkDevice/NetworkAlertPolicyBootstrapUtil.test.ts +427 -0
- package/Tests/Utils/NetworkDevice/ReachabilityStampConsistency.test.ts +185 -0
- package/Tests/Utils/NetworkDevice/SnmpCredentialUtil.test.ts +268 -0
- package/Tests/Utils/NetworkDiscovery/AutoImportRuleMatcher.test.ts +55 -5
- package/Tests/Utils/NetworkDiscovery/DiscoveredDeviceBuilder.test.ts +98 -21
- package/Tests/Utils/NetworkDiscovery/DiscoveryImportEligibility.test.ts +98 -20
- package/Tests/Utils/NetworkDiscovery/DiscoveryReverseDnsChain.test.ts +8 -7
- package/Tests/Utils/NetworkDiscovery/PingMonitorBuilderForAddress.test.ts +274 -0
- package/Tests/Utils/NetworkSite/SiteStatusRollupUtil.test.ts +230 -51
- package/Tests/Utils/NetworkSite/TypeHierarchyUtil.test.ts +209 -0
- package/Tests/Utils/Slo/SloEvaluation.test.ts +171 -0
- package/Tests/Utils/Slug.test.ts +61 -1
- package/Tests/Utils/Telemetry/CaptureSpanExportGating.test.ts +145 -0
- package/Tests/jest.setup.ts +19 -0
- package/Types/AI/ExceptionAIClassification.ts +10 -24
- package/Types/Email/EmailTemplateType.ts +2 -0
- package/Types/EnterpriseLicense/EnterpriseLicenseInstanceSummary.ts +5 -0
- package/Types/EnterpriseLicense/EnterpriseLicenseUsageSnapshot.ts +13 -0
- package/Types/EnterpriseLicense/EnterpriseLicenseUserCountSource.ts +6 -0
- package/Types/Exception/ApiException.ts +10 -0
- package/Types/Exception/BadDataException.ts +11 -0
- package/Types/Exception/BadRequestException.ts +11 -0
- package/Types/Exception/Exception.ts +65 -0
- package/Types/Exception/ForbiddenException.ts +10 -0
- package/Types/Exception/NotAuthenticatedException.ts +10 -0
- package/Types/Exception/NotAuthorizedException.ts +10 -0
- package/Types/Exception/NotFoundException.ts +11 -0
- package/Types/Exception/PayloadTooLargeException.ts +11 -0
- package/Types/Exception/PaymentRequiredException.ts +10 -0
- package/Types/Exception/ServiceUnavailableException.ts +10 -0
- package/Types/Exception/SsoAuthorizationException.ts +10 -0
- package/Types/Exception/TenantNotFoundException.ts +11 -0
- package/Types/Exception/TimeoutException.ts +10 -0
- package/Types/Exception/TooManyRequestsException.ts +10 -0
- package/Types/Exception/UnableToReachServer.ts +10 -0
- package/Types/Exception/WebsiteRequestException.ts +10 -0
- package/Types/Monitor/CriteriaFilter.ts +60 -2
- package/Types/Monitor/DatabaseMetricCatalog.ts +693 -0
- package/Types/Monitor/DatabaseMonitor/DatabaseMonitorResponse.ts +83 -0
- package/Types/Monitor/MonitorCriteriaInstance.ts +76 -0
- package/Types/Monitor/MonitorMetricType.ts +71 -0
- package/Types/Monitor/MonitorStep.ts +76 -0
- package/Types/Monitor/MonitorStepDatabaseMonitor.ts +171 -0
- package/Types/Monitor/MonitorStepSqlMonitor.ts +2 -20
- package/Types/Monitor/MonitorType.ts +47 -1
- package/Types/Monitor/SnmpMonitor/NetworkDeviceAlertPack.ts +22 -1
- package/Types/Monitor/SnmpMonitor/NetworkTopology.ts +61 -0
- package/Types/Monitor/SqlConnectionConfig.ts +31 -0
- package/Types/NetworkDevice/DefaultNetworkDeviceRole.ts +145 -0
- package/Types/NetworkDevice/NetworkAlertPolicyScope.ts +343 -0
- package/Types/NetworkDevice/NetworkDeviceMonitoringMethod.ts +42 -22
- package/Types/NetworkSite/DefaultNetworkSiteTypeHierarchy.ts +30 -0
- package/Types/NotificationSetting/NotificationEmailRollupCategory.ts +255 -0
- package/Types/NotificationSetting/NotificationEmailRollupPolicy.ts +104 -0
- package/Types/Permission.ts +135 -0
- package/Types/Probe/ProbeMonitorResponse.ts +16 -0
- package/Types/Telemetry/ErrorClass.ts +274 -0
- package/Types/Telemetry/UnitOfWork.ts +59 -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/AreaChart/AreaChart.tsx +97 -35
- package/UI/Components/Charts/ChartLibrary/BarChart/BarChart.tsx +14 -0
- package/UI/Components/Charts/ChartLibrary/LineChart/LineChart.tsx +97 -35
- package/UI/Components/Charts/ChartLibrary/Utils/DoubleClick.ts +13 -0
- package/UI/Components/Charts/Line/LineChart.tsx +7 -0
- package/UI/Components/CommandPalette/CommandPalette.tsx +2 -8
- package/UI/Components/EditionLabel/EditionLabel.tsx +4 -0
- package/UI/Components/Modal/Modal.tsx +2 -8
- package/UI/Components/ModelTable/BaseModelTable.tsx +50 -15
- package/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.ts +44 -0
- package/UI/Components/Navbar/NavBar.tsx +62 -13
- package/UI/Components/Navbar/NavBarMenuModal.tsx +7 -2
- package/UI/Components/ProgressBar/ProgressBar.tsx +12 -1
- package/UI/Components/RadioButtons/BasicRadioButtons.tsx +37 -7
- package/UI/Components/SideMenu/CountModelSideMenuItem.tsx +2 -0
- package/UI/Components/SideMenu/SideMenu.tsx +135 -7
- package/UI/Components/SideMenu/SideMenuItem.tsx +80 -85
- package/UI/Components/SideMenu/SideMenuSection.tsx +69 -25
- package/UI/Components/SideOver/SideOver.tsx +21 -20
- package/UI/Utils/PageScrollLock.ts +79 -3
- package/UI/Utils/PermissionGate.ts +61 -0
- package/UI/Utils/SensitiveUrlToken.ts +112 -0
- package/UI/Utils/TestLLMProvider.ts +11 -0
- package/UI/Utils/UseDashboardTimeRangeZoom.ts +77 -0
- package/Utils/Dashboard/DashboardTimeRangeZoom.ts +118 -0
- package/Utils/EnterpriseLicense/EnterpriseLicenseSeats.ts +16 -0
- package/Utils/EnterpriseLicense/EnterpriseLicenseUsage.ts +191 -11
- package/Utils/Monitor/MonitorMetricType.ts +153 -1
- package/Utils/Monitor/NetworkDeviceRoleCatalog.ts +232 -0
- package/Utils/Monitor/NetworkDeviceRoleUtil.ts +2 -1
- package/Utils/Monitor/NetworkTopologyUtil.ts +139 -36
- package/Utils/NetworkDevice/DeviceHealthStateUtil.ts +65 -14
- package/Utils/NetworkDevice/DeviceReachabilityUtil.ts +43 -14
- package/Utils/NetworkDevice/DeviceRoleKeyUtil.ts +137 -0
- package/Utils/NetworkDevice/NetworkAlertPolicyBootstrapUtil.ts +247 -0
- package/Utils/NetworkDevice/SnmpCredentialUtil.ts +68 -0
- package/Utils/NetworkDiscovery/AutoImportRuleMatcher.ts +15 -7
- package/Utils/NetworkDiscovery/DiscoveredDeviceBuilder.ts +52 -17
- package/Utils/NetworkDiscovery/DiscoveryImportEligibility.ts +55 -23
- package/Utils/NetworkDiscovery/PingMonitorBuilder.ts +115 -13
- package/Utils/NetworkSite/SiteStatusRollupUtil.ts +66 -20
- package/Utils/NetworkSite/TypeHierarchyUtil.ts +313 -0
- package/Utils/Rules/RulePatternMatchUtil.ts +1 -1
- package/Utils/Slug.ts +34 -1
- package/build/dist/Models/AnalyticsModels/Span.js +14 -0
- package/build/dist/Models/AnalyticsModels/Span.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/Domain.js +1 -1
- package/build/dist/Models/DatabaseModels/Domain.js.map +1 -1
- package/build/dist/Models/DatabaseModels/EnterpriseLicense.js +59 -0
- package/build/dist/Models/DatabaseModels/EnterpriseLicense.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/IncidentTemplate.js +1 -1
- package/build/dist/Models/DatabaseModels/IncidentTemplate.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Index.js +12 -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/Monitor.js +75 -0
- package/build/dist/Models/DatabaseModels/Monitor.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/NetworkAlertPolicy.js +713 -0
- package/build/dist/Models/DatabaseModels/NetworkAlertPolicy.js.map +1 -0
- package/build/dist/Models/DatabaseModels/NetworkDevice.js +304 -4
- package/build/dist/Models/DatabaseModels/NetworkDevice.js.map +1 -1
- package/build/dist/Models/DatabaseModels/NetworkDeviceOidTemplate.js +3 -1
- package/build/dist/Models/DatabaseModels/NetworkDeviceOidTemplate.js.map +1 -1
- package/build/dist/Models/DatabaseModels/NetworkDeviceRole.js +677 -0
- package/build/dist/Models/DatabaseModels/NetworkDeviceRole.js.map +1 -0
- package/build/dist/Models/DatabaseModels/NetworkSite.js +200 -2
- package/build/dist/Models/DatabaseModels/NetworkSite.js.map +1 -1
- package/build/dist/Models/DatabaseModels/NetworkSiteType.js +102 -3
- package/build/dist/Models/DatabaseModels/NetworkSiteType.js.map +1 -1
- package/build/dist/Models/DatabaseModels/NetworkSnmpCredentialProfile.js +878 -0
- package/build/dist/Models/DatabaseModels/NetworkSnmpCredentialProfile.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/TelemetryException.js +123 -0
- package/build/dist/Models/DatabaseModels/TelemetryException.js.map +1 -1
- package/build/dist/Models/DatabaseModels/UserNotificationEmailRollupBatch.js +363 -0
- package/build/dist/Models/DatabaseModels/UserNotificationEmailRollupBatch.js.map +1 -0
- package/build/dist/Models/DatabaseModels/UserNotificationEmailRollupItem.js +402 -0
- package/build/dist/Models/DatabaseModels/UserNotificationEmailRollupItem.js.map +1 -0
- package/build/dist/Models/DatabaseModels/UserNotificationEmailRollupSetting.js +296 -0
- package/build/dist/Models/DatabaseModels/UserNotificationEmailRollupSetting.js.map +1 -0
- package/build/dist/Server/API/EnterpriseLicenseAPI.js +273 -60
- package/build/dist/Server/API/EnterpriseLicenseAPI.js.map +1 -1
- package/build/dist/Server/API/LlmProviderAPI.js +108 -13
- package/build/dist/Server/API/LlmProviderAPI.js.map +1 -1
- package/build/dist/Server/EnvironmentConfig.js +12 -0
- package/build/dist/Server/EnvironmentConfig.js.map +1 -1
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790700000000-AddNetworkSiteTypeParentHierarchy.js +24 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790700000000-AddNetworkSiteTypeParentHierarchy.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/1790900000000-AddEnterpriseLicenseUsageProvenance.js +16 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790900000000-AddEnterpriseLicenseUsageProvenance.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790900000000-AddTelemetryExceptionErrorClass.js +111 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790900000000-AddTelemetryExceptionErrorClass.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791000000000-AddUserNotificationEmailRollup.js +77 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791000000000-AddUserNotificationEmailRollup.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791100000000-AddUserNotificationEmailRollupSetting.js +50 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791100000000-AddUserNotificationEmailRollupSetting.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791200000000-AddNetworkSnmpCredentialProfilesAndAlertPolicies.js +83 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791200000000-AddNetworkSnmpCredentialProfilesAndAlertPolicies.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +14 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
- package/build/dist/Server/Infrastructure/QueueWorker.js +33 -5
- package/build/dist/Server/Infrastructure/QueueWorker.js.map +1 -1
- package/build/dist/Server/Middleware/BearerTokenAuthorization.js +12 -0
- package/build/dist/Server/Middleware/BearerTokenAuthorization.js.map +1 -1
- package/build/dist/Server/Middleware/ProjectAuthorization.js +11 -0
- package/build/dist/Server/Middleware/ProjectAuthorization.js.map +1 -1
- package/build/dist/Server/Middleware/SCIMAuthorization.js +12 -0
- package/build/dist/Server/Middleware/SCIMAuthorization.js.map +1 -1
- package/build/dist/Server/Middleware/TelemetryIngest.js +11 -0
- package/build/dist/Server/Middleware/TelemetryIngest.js.map +1 -1
- package/build/dist/Server/Services/AIBillingService.js +70 -16
- package/build/dist/Server/Services/AIBillingService.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/EnterpriseLicenseInstanceService.js +167 -0
- package/build/dist/Server/Services/EnterpriseLicenseInstanceService.js.map +1 -1
- package/build/dist/Server/Services/EnterpriseLicenseService.js +39 -0
- package/build/dist/Server/Services/EnterpriseLicenseService.js.map +1 -1
- package/build/dist/Server/Services/Index.js +12 -0
- package/build/dist/Server/Services/Index.js.map +1 -1
- package/build/dist/Server/Services/MonitorService.js +119 -21
- package/build/dist/Server/Services/MonitorService.js.map +1 -1
- package/build/dist/Server/Services/MonitorStatusTimelineService.js +127 -8
- package/build/dist/Server/Services/MonitorStatusTimelineService.js.map +1 -1
- package/build/dist/Server/Services/MonitorTemplateService.js +162 -0
- package/build/dist/Server/Services/MonitorTemplateService.js.map +1 -1
- package/build/dist/Server/Services/NetworkAlertPolicyEngineService.js +1683 -0
- package/build/dist/Server/Services/NetworkAlertPolicyEngineService.js.map +1 -0
- package/build/dist/Server/Services/NetworkAlertPolicyService.js +732 -0
- package/build/dist/Server/Services/NetworkAlertPolicyService.js.map +1 -0
- package/build/dist/Server/Services/NetworkDeviceAutoImportRuleEngineService.js +10 -9
- package/build/dist/Server/Services/NetworkDeviceAutoImportRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/NetworkDeviceAutoImportRuleService.js +54 -11
- package/build/dist/Server/Services/NetworkDeviceAutoImportRuleService.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 +841 -70
- package/build/dist/Server/Services/NetworkDeviceService.js.map +1 -1
- package/build/dist/Server/Services/NetworkSiteService.js +1145 -107
- package/build/dist/Server/Services/NetworkSiteService.js.map +1 -1
- package/build/dist/Server/Services/NetworkSiteTypeService.js +863 -0
- package/build/dist/Server/Services/NetworkSiteTypeService.js.map +1 -1
- package/build/dist/Server/Services/NetworkSnmpCredentialProfileService.js +217 -0
- package/build/dist/Server/Services/NetworkSnmpCredentialProfileService.js.map +1 -0
- package/build/dist/Server/Services/NotificationService.js +80 -17
- package/build/dist/Server/Services/NotificationService.js.map +1 -1
- package/build/dist/Server/Services/ProjectService.js +131 -30
- package/build/dist/Server/Services/ProjectService.js.map +1 -1
- package/build/dist/Server/Services/StatusPagePrivateUserService.js +92 -2
- package/build/dist/Server/Services/StatusPagePrivateUserService.js.map +1 -1
- package/build/dist/Server/Services/UserNotificationEmailRollupBatchService.js +76 -0
- package/build/dist/Server/Services/UserNotificationEmailRollupBatchService.js.map +1 -0
- package/build/dist/Server/Services/UserNotificationEmailRollupItemService.js +77 -0
- package/build/dist/Server/Services/UserNotificationEmailRollupItemService.js.map +1 -0
- package/build/dist/Server/Services/UserNotificationEmailRollupSettingService.js +111 -0
- package/build/dist/Server/Services/UserNotificationEmailRollupSettingService.js.map +1 -0
- package/build/dist/Server/Services/UserNotificationSettingService.js +46 -21
- package/build/dist/Server/Services/UserNotificationSettingService.js.map +1 -1
- package/build/dist/Server/Services/UserService.js +90 -0
- package/build/dist/Server/Services/UserService.js.map +1 -1
- package/build/dist/Server/Types/Database/QueryHelper.js +1 -1
- package/build/dist/Server/Types/Database/QueryHelper.js.map +1 -1
- package/build/dist/Server/Utils/AI/Chat/ObservabilityChatPrompt.js +14 -3
- package/build/dist/Server/Utils/AI/Chat/ObservabilityChatPrompt.js.map +1 -1
- package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/ExceptionSpikeDetector.js +10 -0
- package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/ExceptionSpikeDetector.js.map +1 -1
- package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/NewExceptionDetector.js +10 -0
- package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/NewExceptionDetector.js.map +1 -1
- package/build/dist/Server/Utils/AI/SRE/Insights/InsightTriageRunner.js +54 -1
- package/build/dist/Server/Utils/AI/SRE/Insights/InsightTriageRunner.js.map +1 -1
- package/build/dist/Server/Utils/AI/Toolbox/AlertTools.js +18 -4
- package/build/dist/Server/Utils/AI/Toolbox/AlertTools.js.map +1 -1
- package/build/dist/Server/Utils/Billing/BillingFailureNoticeThrottle.js +59 -0
- package/build/dist/Server/Utils/Billing/BillingFailureNoticeThrottle.js.map +1 -0
- package/build/dist/Server/Utils/DataSource/HttpFetch.js +2 -1
- package/build/dist/Server/Utils/DataSource/HttpFetch.js.map +1 -1
- package/build/dist/Server/Utils/EmailRollup/EmailRollupConstants.js +91 -0
- package/build/dist/Server/Utils/EmailRollup/EmailRollupConstants.js.map +1 -0
- package/build/dist/Server/Utils/EmailRollup/EmailRollupFlushRunner.js +691 -0
- package/build/dist/Server/Utils/EmailRollup/EmailRollupFlushRunner.js.map +1 -0
- package/build/dist/Server/Utils/EmailRollup/EmailRollupRenderer.js +497 -0
- package/build/dist/Server/Utils/EmailRollup/EmailRollupRenderer.js.map +1 -0
- package/build/dist/Server/Utils/EmailRollup/EmailRollupWriter.js +257 -0
- package/build/dist/Server/Utils/EmailRollup/EmailRollupWriter.js.map +1 -0
- package/build/dist/Server/Utils/LLM/LLMService.js +64 -1
- package/build/dist/Server/Utils/LLM/LLMService.js.map +1 -1
- package/build/dist/Server/Utils/LogRedaction.js +8 -0
- package/build/dist/Server/Utils/LogRedaction.js.map +1 -1
- package/build/dist/Server/Utils/Logger.js +63 -1
- package/build/dist/Server/Utils/Logger.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/Criteria/DatabaseMonitorCriteria.js +141 -0
- package/build/dist/Server/Utils/Monitor/Criteria/DatabaseMonitorCriteria.js.map +1 -0
- package/build/dist/Server/Utils/Monitor/Criteria/EvaluateOverTime.js +8 -1
- package/build/dist/Server/Utils/Monitor/Criteria/EvaluateOverTime.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/Criteria/SnmpMonitorCriteria.js +51 -1
- package/build/dist/Server/Utils/Monitor/Criteria/SnmpMonitorCriteria.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaDataExtractor.js +7 -0
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaDataExtractor.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js +37 -0
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaObservationBuilder.js +158 -6
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaObservationBuilder.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorMetricUtil.js +33 -0
- package/build/dist/Server/Utils/Monitor/MonitorMetricUtil.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorTemplateUtil.js +32 -0
- package/build/dist/Server/Utils/Monitor/MonitorTemplateUtil.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/NetworkDeviceHydrationUtil.js +330 -21
- package/build/dist/Server/Utils/Monitor/NetworkDeviceHydrationUtil.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/NetworkDeviceMetricUtil.js +55 -10
- package/build/dist/Server/Utils/Monitor/NetworkDeviceMetricUtil.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/NetworkDeviceWalkUtil.js +178 -49
- package/build/dist/Server/Utils/Monitor/NetworkDeviceWalkUtil.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/NetworkInventoryUtil.js +119 -29
- package/build/dist/Server/Utils/Monitor/NetworkInventoryUtil.js.map +1 -1
- package/build/dist/Server/Utils/NetworkDevice/DeviceHealthAggregation.js +30 -17
- package/build/dist/Server/Utils/NetworkDevice/DeviceHealthAggregation.js.map +1 -1
- package/build/dist/Server/Utils/NetworkSite/NetworkSiteHierarchyLock.js +158 -0
- package/build/dist/Server/Utils/NetworkSite/NetworkSiteHierarchyLock.js.map +1 -0
- package/build/dist/Server/Utils/OutboundUserAgent.js +123 -0
- package/build/dist/Server/Utils/OutboundUserAgent.js.map +1 -0
- package/build/dist/Server/Utils/StartServer.js +38 -14
- package/build/dist/Server/Utils/StartServer.js.map +1 -1
- package/build/dist/Server/Utils/Telemetry/CaptureSpan.js +28 -8
- package/build/dist/Server/Utils/Telemetry/CaptureSpan.js.map +1 -1
- package/build/dist/Server/Utils/Telemetry/ErrorClassResolver.js +95 -0
- package/build/dist/Server/Utils/Telemetry/ErrorClassResolver.js.map +1 -0
- package/build/dist/Server/Utils/Telemetry/SpanUtil.js +29 -0
- package/build/dist/Server/Utils/Telemetry/SpanUtil.js.map +1 -1
- package/build/dist/Server/Utils/Telemetry.js +162 -46
- package/build/dist/Server/Utils/Telemetry.js.map +1 -1
- package/build/dist/Types/AI/ExceptionAIClassification.js +10 -24
- package/build/dist/Types/AI/ExceptionAIClassification.js.map +1 -1
- package/build/dist/Types/Email/EmailTemplateType.js +1 -0
- package/build/dist/Types/Email/EmailTemplateType.js.map +1 -1
- package/build/dist/Types/EnterpriseLicense/EnterpriseLicenseUsageSnapshot.js +2 -0
- package/build/dist/Types/EnterpriseLicense/EnterpriseLicenseUsageSnapshot.js.map +1 -0
- package/build/dist/Types/EnterpriseLicense/EnterpriseLicenseUserCountSource.js +7 -0
- package/build/dist/Types/EnterpriseLicense/EnterpriseLicenseUserCountSource.js.map +1 -0
- package/build/dist/Types/Exception/ApiException.js +9 -0
- package/build/dist/Types/Exception/ApiException.js.map +1 -1
- package/build/dist/Types/Exception/BadDataException.js +10 -0
- package/build/dist/Types/Exception/BadDataException.js.map +1 -1
- package/build/dist/Types/Exception/BadRequestException.js +10 -0
- package/build/dist/Types/Exception/BadRequestException.js.map +1 -1
- package/build/dist/Types/Exception/Exception.js +56 -0
- package/build/dist/Types/Exception/Exception.js.map +1 -1
- package/build/dist/Types/Exception/ForbiddenException.js +9 -0
- package/build/dist/Types/Exception/ForbiddenException.js.map +1 -1
- package/build/dist/Types/Exception/NotAuthenticatedException.js +9 -0
- package/build/dist/Types/Exception/NotAuthenticatedException.js.map +1 -1
- package/build/dist/Types/Exception/NotAuthorizedException.js +9 -0
- package/build/dist/Types/Exception/NotAuthorizedException.js.map +1 -1
- package/build/dist/Types/Exception/NotFoundException.js +10 -0
- package/build/dist/Types/Exception/NotFoundException.js.map +1 -1
- package/build/dist/Types/Exception/PayloadTooLargeException.js +10 -0
- package/build/dist/Types/Exception/PayloadTooLargeException.js.map +1 -1
- package/build/dist/Types/Exception/PaymentRequiredException.js +9 -0
- package/build/dist/Types/Exception/PaymentRequiredException.js.map +1 -1
- package/build/dist/Types/Exception/ServiceUnavailableException.js +9 -0
- package/build/dist/Types/Exception/ServiceUnavailableException.js.map +1 -1
- package/build/dist/Types/Exception/SsoAuthorizationException.js +9 -0
- package/build/dist/Types/Exception/SsoAuthorizationException.js.map +1 -1
- package/build/dist/Types/Exception/TenantNotFoundException.js +10 -0
- package/build/dist/Types/Exception/TenantNotFoundException.js.map +1 -1
- package/build/dist/Types/Exception/TimeoutException.js +9 -0
- package/build/dist/Types/Exception/TimeoutException.js.map +1 -1
- package/build/dist/Types/Exception/TooManyRequestsException.js +9 -0
- package/build/dist/Types/Exception/TooManyRequestsException.js.map +1 -1
- package/build/dist/Types/Exception/UnableToReachServer.js +9 -0
- package/build/dist/Types/Exception/UnableToReachServer.js.map +1 -1
- package/build/dist/Types/Exception/WebsiteRequestException.js +9 -0
- package/build/dist/Types/Exception/WebsiteRequestException.js.map +1 -1
- package/build/dist/Types/Monitor/CriteriaFilter.js +45 -2
- package/build/dist/Types/Monitor/CriteriaFilter.js.map +1 -1
- package/build/dist/Types/Monitor/DatabaseMetricCatalog.js +594 -0
- package/build/dist/Types/Monitor/DatabaseMetricCatalog.js.map +1 -0
- package/build/dist/Types/Monitor/DatabaseMonitor/DatabaseMonitorResponse.js +21 -0
- package/build/dist/Types/Monitor/DatabaseMonitor/DatabaseMonitorResponse.js.map +1 -0
- package/build/dist/Types/Monitor/MonitorCriteriaInstance.js +70 -0
- package/build/dist/Types/Monitor/MonitorCriteriaInstance.js.map +1 -1
- package/build/dist/Types/Monitor/MonitorMetricType.js +61 -0
- package/build/dist/Types/Monitor/MonitorMetricType.js.map +1 -1
- package/build/dist/Types/Monitor/MonitorStep.js +54 -0
- package/build/dist/Types/Monitor/MonitorStep.js.map +1 -1
- package/build/dist/Types/Monitor/MonitorStepDatabaseMonitor.js +122 -0
- package/build/dist/Types/Monitor/MonitorStepDatabaseMonitor.js.map +1 -0
- package/build/dist/Types/Monitor/MonitorStepSqlMonitor.js.map +1 -1
- package/build/dist/Types/Monitor/MonitorType.js +45 -1
- package/build/dist/Types/Monitor/MonitorType.js.map +1 -1
- package/build/dist/Types/Monitor/SnmpMonitor/NetworkDeviceAlertPack.js +21 -1
- package/build/dist/Types/Monitor/SnmpMonitor/NetworkDeviceAlertPack.js.map +1 -1
- package/build/dist/Types/Monitor/SqlConnectionConfig.js +2 -0
- package/build/dist/Types/Monitor/SqlConnectionConfig.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/NetworkDevice/NetworkAlertPolicyScope.js +172 -0
- package/build/dist/Types/NetworkDevice/NetworkAlertPolicyScope.js.map +1 -0
- package/build/dist/Types/NetworkDevice/NetworkDeviceMonitoringMethod.js +40 -22
- package/build/dist/Types/NetworkDevice/NetworkDeviceMonitoringMethod.js.map +1 -1
- package/build/dist/Types/NetworkSite/DefaultNetworkSiteTypeHierarchy.js +26 -0
- package/build/dist/Types/NetworkSite/DefaultNetworkSiteTypeHierarchy.js.map +1 -0
- package/build/dist/Types/NotificationSetting/NotificationEmailRollupCategory.js +186 -0
- package/build/dist/Types/NotificationSetting/NotificationEmailRollupCategory.js.map +1 -0
- package/build/dist/Types/NotificationSetting/NotificationEmailRollupPolicy.js +87 -0
- package/build/dist/Types/NotificationSetting/NotificationEmailRollupPolicy.js.map +1 -0
- package/build/dist/Types/Permission.js +120 -0
- package/build/dist/Types/Permission.js.map +1 -1
- package/build/dist/Types/Telemetry/ErrorClass.js +216 -0
- package/build/dist/Types/Telemetry/ErrorClass.js.map +1 -0
- package/build/dist/Types/Telemetry/UnitOfWork.js +59 -0
- package/build/dist/Types/Telemetry/UnitOfWork.js.map +1 -0
- 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/AreaChart/AreaChart.js +79 -31
- package/build/dist/UI/Components/Charts/ChartLibrary/AreaChart/AreaChart.js.map +1 -1
- package/build/dist/UI/Components/Charts/ChartLibrary/BarChart/BarChart.js +7 -1
- package/build/dist/UI/Components/Charts/ChartLibrary/BarChart/BarChart.js.map +1 -1
- package/build/dist/UI/Components/Charts/ChartLibrary/LineChart/LineChart.js +79 -31
- 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/CommandPalette/CommandPalette.js +2 -7
- package/build/dist/UI/Components/CommandPalette/CommandPalette.js.map +1 -1
- package/build/dist/UI/Components/EditionLabel/EditionLabel.js +3 -0
- package/build/dist/UI/Components/EditionLabel/EditionLabel.js.map +1 -1
- package/build/dist/UI/Components/Modal/Modal.js +2 -7
- package/build/dist/UI/Components/Modal/Modal.js.map +1 -1
- package/build/dist/UI/Components/ModelTable/BaseModelTable.js +39 -13
- package/build/dist/UI/Components/ModelTable/BaseModelTable.js.map +1 -1
- package/build/dist/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.js +39 -0
- package/build/dist/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.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/ProgressBar/ProgressBar.js +12 -1
- package/build/dist/UI/Components/ProgressBar/ProgressBar.js.map +1 -1
- package/build/dist/UI/Components/RadioButtons/BasicRadioButtons.js +6 -6
- package/build/dist/UI/Components/RadioButtons/BasicRadioButtons.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 +76 -11
- package/build/dist/UI/Components/SideMenu/SideMenu.js.map +1 -1
- package/build/dist/UI/Components/SideMenu/SideMenuItem.js +50 -54
- package/build/dist/UI/Components/SideMenu/SideMenuItem.js.map +1 -1
- package/build/dist/UI/Components/SideMenu/SideMenuSection.js +32 -9
- package/build/dist/UI/Components/SideMenu/SideMenuSection.js.map +1 -1
- package/build/dist/UI/Components/SideOver/SideOver.js +5 -20
- package/build/dist/UI/Components/SideOver/SideOver.js.map +1 -1
- package/build/dist/UI/Utils/PageScrollLock.js +31 -3
- package/build/dist/UI/Utils/PageScrollLock.js.map +1 -1
- package/build/dist/UI/Utils/PermissionGate.js +42 -1
- package/build/dist/UI/Utils/PermissionGate.js.map +1 -1
- package/build/dist/UI/Utils/SensitiveUrlToken.js +97 -0
- package/build/dist/UI/Utils/SensitiveUrlToken.js.map +1 -0
- package/build/dist/UI/Utils/TestLLMProvider.js +4 -5
- package/build/dist/UI/Utils/TestLLMProvider.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 +15 -0
- package/build/dist/Utils/EnterpriseLicense/EnterpriseLicenseSeats.js.map +1 -1
- package/build/dist/Utils/EnterpriseLicense/EnterpriseLicenseUsage.js +111 -9
- package/build/dist/Utils/EnterpriseLicense/EnterpriseLicenseUsage.js.map +1 -1
- package/build/dist/Utils/Monitor/MonitorMetricType.js +109 -1
- package/build/dist/Utils/Monitor/MonitorMetricType.js.map +1 -1
- 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 +75 -35
- package/build/dist/Utils/Monitor/NetworkTopologyUtil.js.map +1 -1
- package/build/dist/Utils/NetworkDevice/DeviceHealthStateUtil.js +27 -7
- package/build/dist/Utils/NetworkDevice/DeviceHealthStateUtil.js.map +1 -1
- package/build/dist/Utils/NetworkDevice/DeviceReachabilityUtil.js +7 -5
- package/build/dist/Utils/NetworkDevice/DeviceReachabilityUtil.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/NetworkDevice/NetworkAlertPolicyBootstrapUtil.js +180 -0
- package/build/dist/Utils/NetworkDevice/NetworkAlertPolicyBootstrapUtil.js.map +1 -0
- package/build/dist/Utils/NetworkDevice/SnmpCredentialUtil.js +12 -0
- package/build/dist/Utils/NetworkDevice/SnmpCredentialUtil.js.map +1 -0
- package/build/dist/Utils/NetworkDiscovery/AutoImportRuleMatcher.js +15 -5
- package/build/dist/Utils/NetworkDiscovery/AutoImportRuleMatcher.js.map +1 -1
- package/build/dist/Utils/NetworkDiscovery/DiscoveredDeviceBuilder.js +44 -15
- package/build/dist/Utils/NetworkDiscovery/DiscoveredDeviceBuilder.js.map +1 -1
- package/build/dist/Utils/NetworkDiscovery/DiscoveryImportEligibility.js +52 -23
- package/build/dist/Utils/NetworkDiscovery/DiscoveryImportEligibility.js.map +1 -1
- package/build/dist/Utils/NetworkDiscovery/PingMonitorBuilder.js +85 -13
- package/build/dist/Utils/NetworkDiscovery/PingMonitorBuilder.js.map +1 -1
- package/build/dist/Utils/NetworkSite/SiteStatusRollupUtil.js +30 -15
- package/build/dist/Utils/NetworkSite/SiteStatusRollupUtil.js.map +1 -1
- package/build/dist/Utils/NetworkSite/TypeHierarchyUtil.js +191 -0
- package/build/dist/Utils/NetworkSite/TypeHierarchyUtil.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/package.json +2 -2
|
@@ -616,21 +616,51 @@ class DatabaseService<TBaseModel extends BaseModel> extends BaseService {
|
|
|
616
616
|
throw PostgresErrorTranslator.translateException(error);
|
|
617
617
|
}
|
|
618
618
|
|
|
619
|
+
/*
|
|
620
|
+
* Both halves of @SlugifyColumn are resolved BY NAME off the object rather
|
|
621
|
+
* than through the schema, so a name matching no declared column misfires
|
|
622
|
+
* silently: a missing source reads `undefined` and Slug.getSlug answers with
|
|
623
|
+
* a random Faker name, and a missing destination is assigned to a property
|
|
624
|
+
* TypeORM drops on insert. ModelRegistryInvariants sweeps every model for
|
|
625
|
+
* both, so the pairing is guaranteed by a test rather than by this code.
|
|
626
|
+
*
|
|
627
|
+
* The ceiling comes from the DESTINATION column, not from Slug: getSlug
|
|
628
|
+
* appends a dash and ten random digits, and checkMaxLengthOfFields -- which
|
|
629
|
+
* runs later in the same create -- THROWS on overflow rather than
|
|
630
|
+
* truncating. Sources are routinely wider than the slug they feed
|
|
631
|
+
* (Incident.title is varchar(500) against a varchar(100) slug), so without
|
|
632
|
+
* this a long title would be a failed insert rather than a long slug.
|
|
633
|
+
*/
|
|
619
634
|
private generateSlug(createBy: CreateBy<TBaseModel>): CreateBy<TBaseModel> {
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
createBy.data.getSlugifyColumn() as string
|
|
626
|
-
] as string)
|
|
627
|
-
: null,
|
|
628
|
-
);
|
|
635
|
+
const slugifyColumn: string | null = createBy.data.getSlugifyColumn();
|
|
636
|
+
const saveSlugToColumn: string | null = createBy.data.getSaveSlugToColumn();
|
|
637
|
+
|
|
638
|
+
if (!slugifyColumn || !saveSlugToColumn) {
|
|
639
|
+
return createBy;
|
|
629
640
|
}
|
|
630
641
|
|
|
642
|
+
const source: JSONValue = (createBy.data as any)[slugifyColumn];
|
|
643
|
+
|
|
644
|
+
(createBy.data as any)[saveSlugToColumn] = Slug.getSlug(
|
|
645
|
+
source ? String(source) : null,
|
|
646
|
+
this.getMaxLengthOfColumn(saveSlugToColumn),
|
|
647
|
+
);
|
|
648
|
+
|
|
631
649
|
return createBy;
|
|
632
650
|
}
|
|
633
651
|
|
|
652
|
+
/*
|
|
653
|
+
* The declared width of a column, or undefined for a column that declares
|
|
654
|
+
* none -- including a name that is not a column at all, which is what
|
|
655
|
+
* getTableColumnMetadata answers for.
|
|
656
|
+
*/
|
|
657
|
+
private getMaxLengthOfColumn(columnName: string): number | undefined {
|
|
658
|
+
const columnType: TableColumnType | undefined =
|
|
659
|
+
this.model.getTableColumnMetadata(columnName)?.type;
|
|
660
|
+
|
|
661
|
+
return columnType ? getMaxLengthFromTableColumnType(columnType) : undefined;
|
|
662
|
+
}
|
|
663
|
+
|
|
634
664
|
private async sanitizeCreateOrUpdate(
|
|
635
665
|
data: TBaseModel | PartialEntity<TBaseModel>,
|
|
636
666
|
props: DatabaseCommonInteractionProps,
|
|
@@ -1,10 +1,207 @@
|
|
|
1
1
|
import DatabaseService from "./DatabaseService";
|
|
2
2
|
import EnterpriseLicenseInstance from "../../Models/DatabaseModels/EnterpriseLicenseInstance";
|
|
3
|
+
import EnterpriseLicense from "../../Models/DatabaseModels/EnterpriseLicense";
|
|
4
|
+
import EnterpriseLicenseService from "./EnterpriseLicenseService";
|
|
5
|
+
import EnterpriseLicenseUsageUtil, {
|
|
6
|
+
EffectiveEnterpriseLicenseUserCount,
|
|
7
|
+
} from "../../Utils/EnterpriseLicense/EnterpriseLicenseUsage";
|
|
8
|
+
import EnterpriseLicenseUserCountSource from "../../Types/EnterpriseLicense/EnterpriseLicenseUserCountSource";
|
|
9
|
+
import DeleteById from "../Types/Database/DeleteById";
|
|
10
|
+
import LIMIT_MAX from "../../Types/Database/LimitMax";
|
|
11
|
+
import OneUptimeDate from "../../Types/Date";
|
|
12
|
+
import SortOrder from "../../Types/BaseDatabase/SortOrder";
|
|
13
|
+
import ObjectID from "../../Types/ObjectID";
|
|
14
|
+
import PartialEntity from "../../Types/Database/PartialEntity";
|
|
15
|
+
import ModelPermission from "../Types/Database/Permissions/Index";
|
|
3
16
|
|
|
4
17
|
export class Service extends DatabaseService<EnterpriseLicenseInstance> {
|
|
5
18
|
public constructor() {
|
|
6
19
|
super(EnterpriseLicenseInstance);
|
|
7
20
|
}
|
|
21
|
+
|
|
22
|
+
public override async deleteOneById(deleteById: DeleteById): Promise<number> {
|
|
23
|
+
/*
|
|
24
|
+
* A source marker is written before deleting some upgrade-era rows. Check
|
|
25
|
+
* permission first so a refused delete can never produce that write. The
|
|
26
|
+
* inherited deletion below deliberately performs its normal check again.
|
|
27
|
+
*/
|
|
28
|
+
await ModelPermission.checkDeletePermissionByModel({
|
|
29
|
+
modelType: this.modelType,
|
|
30
|
+
fetchModelWithAccessControlIds: async () => {
|
|
31
|
+
return await this.findOneById({
|
|
32
|
+
id: deleteById.id,
|
|
33
|
+
select: {},
|
|
34
|
+
props: {
|
|
35
|
+
isRoot: true,
|
|
36
|
+
},
|
|
37
|
+
});
|
|
38
|
+
},
|
|
39
|
+
props: deleteById.props,
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
/*
|
|
43
|
+
* Resolve the owning license before taking its lock. The actual delete
|
|
44
|
+
* still goes through DatabaseService below with the caller's original
|
|
45
|
+
* props, so this root read does not bypass delete permission checks.
|
|
46
|
+
*/
|
|
47
|
+
const instance: EnterpriseLicenseInstance | null = await this.findOneById({
|
|
48
|
+
id: deleteById.id,
|
|
49
|
+
select: {
|
|
50
|
+
enterpriseLicenseId: true,
|
|
51
|
+
},
|
|
52
|
+
props: {
|
|
53
|
+
isRoot: true,
|
|
54
|
+
},
|
|
55
|
+
});
|
|
56
|
+
const licenseId: ObjectID | undefined = instance?.enterpriseLicenseId;
|
|
57
|
+
|
|
58
|
+
if (!licenseId) {
|
|
59
|
+
return await super.deleteOneById(deleteById);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
return await EnterpriseLicenseService.runWithUsageAggregationLock({
|
|
63
|
+
licenseId,
|
|
64
|
+
fn: async (): Promise<number> => {
|
|
65
|
+
/*
|
|
66
|
+
* A report for this row uses the same lock. Re-read its provenance in
|
|
67
|
+
* the critical section so the fallback decision cannot race a report.
|
|
68
|
+
*/
|
|
69
|
+
const lockedInstance: EnterpriseLicenseInstance | null =
|
|
70
|
+
await this.findOneById({
|
|
71
|
+
id: deleteById.id,
|
|
72
|
+
select: {
|
|
73
|
+
lastReportedAt: true,
|
|
74
|
+
},
|
|
75
|
+
props: {
|
|
76
|
+
isRoot: true,
|
|
77
|
+
},
|
|
78
|
+
});
|
|
79
|
+
const deletedTargetHadReportedUsage: boolean = Boolean(
|
|
80
|
+
lockedInstance?.lastReportedAt,
|
|
81
|
+
);
|
|
82
|
+
|
|
83
|
+
if (deletedTargetHadReportedUsage) {
|
|
84
|
+
const sourceLicense: EnterpriseLicense | null =
|
|
85
|
+
await EnterpriseLicenseService.findOneById({
|
|
86
|
+
id: licenseId,
|
|
87
|
+
select: {
|
|
88
|
+
userCountSource: true,
|
|
89
|
+
},
|
|
90
|
+
props: {
|
|
91
|
+
isRoot: true,
|
|
92
|
+
},
|
|
93
|
+
});
|
|
94
|
+
|
|
95
|
+
/*
|
|
96
|
+
* Old rows predate the persisted provenance column. Mark the stored
|
|
97
|
+
* aggregate before deleting its last evidence, so even a later
|
|
98
|
+
* aggregate-write failure cannot resurrect it as legacy usage.
|
|
99
|
+
*/
|
|
100
|
+
if (sourceLicense && !sourceLicense.userCountSource) {
|
|
101
|
+
await EnterpriseLicenseService.updateOneById({
|
|
102
|
+
id: licenseId,
|
|
103
|
+
data: {
|
|
104
|
+
userCountSource: EnterpriseLicenseUserCountSource.Instance,
|
|
105
|
+
},
|
|
106
|
+
props: {
|
|
107
|
+
isRoot: true,
|
|
108
|
+
ignoreHooks: true,
|
|
109
|
+
},
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
const deletedCount: number = await super.deleteOneById(deleteById);
|
|
115
|
+
|
|
116
|
+
/*
|
|
117
|
+
* The row may have disappeared between the ownership lookup and lock
|
|
118
|
+
* acquisition. Preserve DatabaseService's zero-row result and avoid
|
|
119
|
+
* changing an aggregate for a deletion this call did not perform.
|
|
120
|
+
*/
|
|
121
|
+
if (deletedCount === 0) {
|
|
122
|
+
return 0;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
const now: Date = OneUptimeDate.getCurrentDate();
|
|
126
|
+
const remainingInstances: Array<EnterpriseLicenseInstance> =
|
|
127
|
+
await this.findBy({
|
|
128
|
+
query: {
|
|
129
|
+
enterpriseLicenseId: licenseId,
|
|
130
|
+
},
|
|
131
|
+
select: {
|
|
132
|
+
createdAt: true,
|
|
133
|
+
userCount: true,
|
|
134
|
+
userEmailHashes: true,
|
|
135
|
+
lastReportedAt: true,
|
|
136
|
+
},
|
|
137
|
+
sort: {
|
|
138
|
+
createdAt: SortOrder.Ascending,
|
|
139
|
+
},
|
|
140
|
+
skip: 0,
|
|
141
|
+
limit: LIMIT_MAX,
|
|
142
|
+
props: {
|
|
143
|
+
isRoot: true,
|
|
144
|
+
},
|
|
145
|
+
});
|
|
146
|
+
const license: EnterpriseLicense | null =
|
|
147
|
+
await EnterpriseLicenseService.findOneById({
|
|
148
|
+
id: licenseId,
|
|
149
|
+
select: {
|
|
150
|
+
currentUserCount: true,
|
|
151
|
+
userCountUpdatedAt: true,
|
|
152
|
+
userCountSource: true,
|
|
153
|
+
legacyUserCount: true,
|
|
154
|
+
legacyUserCountUpdatedAt: true,
|
|
155
|
+
},
|
|
156
|
+
props: {
|
|
157
|
+
isRoot: true,
|
|
158
|
+
},
|
|
159
|
+
});
|
|
160
|
+
|
|
161
|
+
if (!license) {
|
|
162
|
+
return deletedCount;
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
const effectiveUsage: EffectiveEnterpriseLicenseUserCount =
|
|
166
|
+
EnterpriseLicenseUsageUtil.getEffectiveUserCountAndSource({
|
|
167
|
+
instances: remainingInstances,
|
|
168
|
+
storedUserCount: license.currentUserCount,
|
|
169
|
+
storedUserCountUpdatedAt: license.userCountUpdatedAt,
|
|
170
|
+
storedUserCountSource:
|
|
171
|
+
license.userCountSource ||
|
|
172
|
+
(deletedTargetHadReportedUsage
|
|
173
|
+
? EnterpriseLicenseUserCountSource.Instance
|
|
174
|
+
: undefined),
|
|
175
|
+
legacyUserCount: license.legacyUserCount,
|
|
176
|
+
legacyUserCountUpdatedAt: license.legacyUserCountUpdatedAt,
|
|
177
|
+
allowStoredUserCountAsLegacyFallback:
|
|
178
|
+
!deletedTargetHadReportedUsage,
|
|
179
|
+
now,
|
|
180
|
+
});
|
|
181
|
+
|
|
182
|
+
if (effectiveUsage.userCount !== null) {
|
|
183
|
+
const usageUpdate: PartialEntity<EnterpriseLicense> = {
|
|
184
|
+
currentUserCount: effectiveUsage.userCount,
|
|
185
|
+
};
|
|
186
|
+
|
|
187
|
+
if (effectiveUsage.source !== null) {
|
|
188
|
+
usageUpdate.userCountSource = effectiveUsage.source;
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
await EnterpriseLicenseService.updateOneById({
|
|
192
|
+
id: licenseId,
|
|
193
|
+
data: usageUpdate,
|
|
194
|
+
props: {
|
|
195
|
+
isRoot: true,
|
|
196
|
+
ignoreHooks: true,
|
|
197
|
+
},
|
|
198
|
+
});
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
return deletedCount;
|
|
202
|
+
},
|
|
203
|
+
});
|
|
204
|
+
}
|
|
8
205
|
}
|
|
9
206
|
|
|
10
207
|
export default new Service();
|
|
@@ -5,12 +5,67 @@ import { MarketingEventType } from "../../Types/Marketing/MarketingEvent";
|
|
|
5
5
|
import { OnCreate } from "../Types/Database/Hooks";
|
|
6
6
|
import OneUptimeDate from "../../Types/Date";
|
|
7
7
|
import CaptureSpan from "../Utils/Telemetry/CaptureSpan";
|
|
8
|
+
import ObjectID from "../../Types/ObjectID";
|
|
9
|
+
import Semaphore, { SemaphoreMutex } from "../Infrastructure/Semaphore";
|
|
10
|
+
import logger from "../Utils/Logger";
|
|
11
|
+
|
|
12
|
+
export const ENTERPRISE_LICENSE_USAGE_AGGREGATION_LOCK_NAMESPACE: string =
|
|
13
|
+
"EnterpriseLicenseService.usageAggregation";
|
|
14
|
+
|
|
15
|
+
export const ENTERPRISE_LICENSE_USAGE_AGGREGATION_LOCK_OPTIONS: Readonly<{
|
|
16
|
+
namespace: string;
|
|
17
|
+
lockTimeout: number;
|
|
18
|
+
acquireTimeout: number;
|
|
19
|
+
}> = Object.freeze({
|
|
20
|
+
namespace: ENTERPRISE_LICENSE_USAGE_AGGREGATION_LOCK_NAMESPACE,
|
|
21
|
+
lockTimeout: 60_000,
|
|
22
|
+
acquireTimeout: 10_000,
|
|
23
|
+
});
|
|
8
24
|
|
|
9
25
|
export class Service extends DatabaseService<EnterpriseLicense> {
|
|
10
26
|
public constructor() {
|
|
11
27
|
super(EnterpriseLicense);
|
|
12
28
|
}
|
|
13
29
|
|
|
30
|
+
/**
|
|
31
|
+
* Serialize usage aggregation for one enterprise license across every API
|
|
32
|
+
* and worker process. Callers must put the complete read-compute-write
|
|
33
|
+
* operation inside `fn`; locking only the write would leave the stale-read
|
|
34
|
+
* race intact.
|
|
35
|
+
*/
|
|
36
|
+
public async runWithUsageAggregationLock<TResult>(data: {
|
|
37
|
+
licenseId: ObjectID;
|
|
38
|
+
fn: () => Promise<TResult>;
|
|
39
|
+
}): Promise<TResult> {
|
|
40
|
+
/*
|
|
41
|
+
* Acquisition is deliberately outside the callback try/finally. If Redis
|
|
42
|
+
* is unavailable or contention exceeds the bounded acquire timeout, the
|
|
43
|
+
* operation fails closed and there is no unowned mutex to release.
|
|
44
|
+
*/
|
|
45
|
+
const mutex: SemaphoreMutex = await Semaphore.lock({
|
|
46
|
+
key: data.licenseId.toString(),
|
|
47
|
+
...ENTERPRISE_LICENSE_USAGE_AGGREGATION_LOCK_OPTIONS,
|
|
48
|
+
});
|
|
49
|
+
|
|
50
|
+
try {
|
|
51
|
+
return await data.fn();
|
|
52
|
+
} finally {
|
|
53
|
+
try {
|
|
54
|
+
await Semaphore.release(mutex);
|
|
55
|
+
} catch (error) {
|
|
56
|
+
/*
|
|
57
|
+
* redis-semaphore refreshes held locks and lets them expire after the
|
|
58
|
+
* lock timeout if explicit release fails. Logging is best effort: a
|
|
59
|
+
* release error must not replace either the callback's value or its
|
|
60
|
+
* more useful error.
|
|
61
|
+
*/
|
|
62
|
+
logger.error(
|
|
63
|
+
`Failed to release enterprise license usage aggregation lock for ${data.licenseId.toString()}; it will expire automatically: ${error}`,
|
|
64
|
+
);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
|
|
14
69
|
@CaptureSpan()
|
|
15
70
|
protected override async onCreateSuccess(
|
|
16
71
|
_onCreate: OnCreate<EnterpriseLicense>,
|
package/Server/Services/Index.ts
CHANGED
|
@@ -62,6 +62,9 @@ import NetworkDeviceOwnerRuleService from "./NetworkDeviceOwnerRuleService";
|
|
|
62
62
|
import NetworkDeviceLabelRuleService from "./NetworkDeviceLabelRuleService";
|
|
63
63
|
import NetworkDeviceAutoImportRuleService from "./NetworkDeviceAutoImportRuleService";
|
|
64
64
|
import NetworkDeviceOidTemplateService from "./NetworkDeviceOidTemplateService";
|
|
65
|
+
import NetworkDeviceRoleService from "./NetworkDeviceRoleService";
|
|
66
|
+
import NetworkAlertPolicyService from "./NetworkAlertPolicyService";
|
|
67
|
+
import NetworkSnmpCredentialProfileService from "./NetworkSnmpCredentialProfileService";
|
|
65
68
|
import NetworkDeviceDiscoveryScanService from "./NetworkDeviceDiscoveryScanService";
|
|
66
69
|
import NetworkInterfaceService from "./NetworkInterfaceService";
|
|
67
70
|
import NetworkSiteService from "./NetworkSiteService";
|
|
@@ -424,6 +427,9 @@ import IoTFleetLabelRuleService from "./IoTFleetLabelRuleService";
|
|
|
424
427
|
import IoTFleetOwnerRuleService from "./IoTFleetOwnerRuleService";
|
|
425
428
|
import IoTFleetOwnerTeamService from "./IoTFleetOwnerTeamService";
|
|
426
429
|
import IoTFleetOwnerUserService from "./IoTFleetOwnerUserService";
|
|
430
|
+
import UserNotificationEmailRollupItemService from "./UserNotificationEmailRollupItemService";
|
|
431
|
+
import UserNotificationEmailRollupBatchService from "./UserNotificationEmailRollupBatchService";
|
|
432
|
+
import UserNotificationEmailRollupSettingService from "./UserNotificationEmailRollupSettingService";
|
|
427
433
|
|
|
428
434
|
const services: Array<BaseService> = [
|
|
429
435
|
OnCallDutyPolicyTimeLogService,
|
|
@@ -508,6 +514,9 @@ const services: Array<BaseService> = [
|
|
|
508
514
|
NetworkDeviceLabelRuleService,
|
|
509
515
|
NetworkDeviceAutoImportRuleService,
|
|
510
516
|
NetworkDeviceOidTemplateService,
|
|
517
|
+
NetworkDeviceRoleService,
|
|
518
|
+
NetworkAlertPolicyService,
|
|
519
|
+
NetworkSnmpCredentialProfileService,
|
|
511
520
|
NetworkDeviceDiscoveryScanService,
|
|
512
521
|
NetworkInterfaceService,
|
|
513
522
|
NetworkSiteService,
|
|
@@ -846,6 +855,9 @@ const services: Array<BaseService> = [
|
|
|
846
855
|
ServerlessFunctionOwnerTeamService,
|
|
847
856
|
ServerlessFunctionOwnerUserService,
|
|
848
857
|
WebhookLogService,
|
|
858
|
+
UserNotificationEmailRollupItemService,
|
|
859
|
+
UserNotificationEmailRollupBatchService,
|
|
860
|
+
UserNotificationEmailRollupSettingService,
|
|
849
861
|
];
|
|
850
862
|
|
|
851
863
|
export const AnalyticsServices: Array<
|
|
@@ -19,6 +19,8 @@ import MonitorStatusService from "./MonitorStatusService";
|
|
|
19
19
|
import ServiceLevelObjectiveMonitorRuleEngineService from "./ServiceLevelObjectiveMonitorRuleEngineService";
|
|
20
20
|
import StatusPageMonitorRuleEngineService from "./StatusPageMonitorRuleEngineService";
|
|
21
21
|
import NetworkSiteService from "./NetworkSiteService";
|
|
22
|
+
import NetworkDeviceService from "./NetworkDeviceService";
|
|
23
|
+
import NetworkDevice from "../../Models/DatabaseModels/NetworkDevice";
|
|
22
24
|
import MonitorStatusTimelineService, {
|
|
23
25
|
MONITOR_STATUS_SAME_AS_PREVIOUS_ERROR_MESSAGE,
|
|
24
26
|
MONITOR_STATUS_TIMELINE_LOCK_ERROR_MESSAGE,
|
|
@@ -237,6 +239,21 @@ export class Service extends DatabaseService<Model> {
|
|
|
237
239
|
monitorDestination = `${sql.host}:${sql.port}/${sql.databaseName}`;
|
|
238
240
|
}
|
|
239
241
|
}
|
|
242
|
+
|
|
243
|
+
// For Database Health monitors, show host:port/database (never the credentials).
|
|
244
|
+
if (
|
|
245
|
+
monitorType === MonitorType.Database &&
|
|
246
|
+
firstStep?.data?.databaseMonitor
|
|
247
|
+
) {
|
|
248
|
+
const database: {
|
|
249
|
+
host: string;
|
|
250
|
+
port: number;
|
|
251
|
+
databaseName: string;
|
|
252
|
+
} = firstStep.data.databaseMonitor;
|
|
253
|
+
if (database.host) {
|
|
254
|
+
monitorDestination = `${database.host}:${database.port}/${database.databaseName}`;
|
|
255
|
+
}
|
|
256
|
+
}
|
|
240
257
|
}
|
|
241
258
|
}
|
|
242
259
|
|
|
@@ -296,6 +313,7 @@ export class Service extends DatabaseService<Model> {
|
|
|
296
313
|
id: monitorId,
|
|
297
314
|
select: {
|
|
298
315
|
_id: true,
|
|
316
|
+
projectId: true,
|
|
299
317
|
currentMonitorStatusId: true,
|
|
300
318
|
},
|
|
301
319
|
props: {
|
|
@@ -313,6 +331,7 @@ export class Service extends DatabaseService<Model> {
|
|
|
313
331
|
select: {
|
|
314
332
|
_id: true,
|
|
315
333
|
monitorStatusId: true,
|
|
334
|
+
projectId: true,
|
|
316
335
|
},
|
|
317
336
|
props: {
|
|
318
337
|
isRoot: true,
|
|
@@ -343,6 +362,39 @@ export class Service extends DatabaseService<Model> {
|
|
|
343
362
|
isRoot: true,
|
|
344
363
|
},
|
|
345
364
|
});
|
|
365
|
+
|
|
366
|
+
/*
|
|
367
|
+
* The update above is root (no tenantId), so onUpdateSuccess's
|
|
368
|
+
* tenant-gated changeMonitorStatus does not run for it and nothing
|
|
369
|
+
* else re-stamps the network devices bound to this monitor. Bridge
|
|
370
|
+
* them here, and only when the id actually moved - an unchanged
|
|
371
|
+
* status must not churn every site rollup above the device.
|
|
372
|
+
*/
|
|
373
|
+
const projectId: ObjectID | undefined =
|
|
374
|
+
monitor.projectId || lastMonitorStatus.projectId;
|
|
375
|
+
|
|
376
|
+
if (!projectId) {
|
|
377
|
+
logger.warn(
|
|
378
|
+
`refreshMonitorCurrentStatus: monitor ${monitorId.toString()} has no projectId; skipping the network site rollup bridge.`,
|
|
379
|
+
);
|
|
380
|
+
return;
|
|
381
|
+
}
|
|
382
|
+
|
|
383
|
+
try {
|
|
384
|
+
await NetworkSiteService.onMonitorStatusChanged({
|
|
385
|
+
projectId: projectId,
|
|
386
|
+
monitorIds: [monitorId],
|
|
387
|
+
monitorStatusId: lastMonitorStatus.monitorStatusId,
|
|
388
|
+
});
|
|
389
|
+
} catch (err) {
|
|
390
|
+
logger.error(
|
|
391
|
+
`refreshMonitorCurrentStatus: failed to update network site rollups for monitor ${monitorId.toString()}: ${err}`,
|
|
392
|
+
{
|
|
393
|
+
projectId: projectId.toString(),
|
|
394
|
+
monitorId: monitorId.toString(),
|
|
395
|
+
} as LogAttributes,
|
|
396
|
+
);
|
|
397
|
+
}
|
|
346
398
|
}
|
|
347
399
|
}
|
|
348
400
|
|
|
@@ -408,10 +460,65 @@ export class Service extends DatabaseService<Model> {
|
|
|
408
460
|
}
|
|
409
461
|
}
|
|
410
462
|
|
|
463
|
+
/*
|
|
464
|
+
* Network devices bound to these monitors (NetworkDevice.monitorId, the
|
|
465
|
+
* monitor-backed path). The FK is ON DELETE SET NULL, so the binding
|
|
466
|
+
* disappears with the monitor - but the device's stamped
|
|
467
|
+
* currentMonitorStatusId / isReachable do not, and nothing else ever
|
|
468
|
+
* clears them: the device would keep reporting the dead monitor's last
|
|
469
|
+
* status forever. The ids have to be read BEFORE the delete, because
|
|
470
|
+
* after it the column that links them is already NULL.
|
|
471
|
+
*
|
|
472
|
+
* A lookup failure degrades to "no re-stamp" rather than blocking the
|
|
473
|
+
* delete itself: a device carrying a stale stamp is a cosmetic bug, a
|
|
474
|
+
* monitor the operator cannot delete is not.
|
|
475
|
+
*/
|
|
476
|
+
let networkDeviceIdsToRefresh: Array<ObjectID> = [];
|
|
477
|
+
|
|
478
|
+
const monitorIdsPendingDeletion: Array<ObjectID> = monitorsPendingDeletion
|
|
479
|
+
.map((monitor: Model) => {
|
|
480
|
+
return monitor.id;
|
|
481
|
+
})
|
|
482
|
+
.filter((id: ObjectID | null): id is ObjectID => {
|
|
483
|
+
return Boolean(id);
|
|
484
|
+
});
|
|
485
|
+
|
|
486
|
+
if (monitorIdsPendingDeletion.length > 0) {
|
|
487
|
+
try {
|
|
488
|
+
const boundDevices: Array<NetworkDevice> =
|
|
489
|
+
await NetworkDeviceService.findBy({
|
|
490
|
+
query: {
|
|
491
|
+
monitorId: QueryHelper.any(monitorIdsPendingDeletion),
|
|
492
|
+
},
|
|
493
|
+
select: {
|
|
494
|
+
_id: true,
|
|
495
|
+
},
|
|
496
|
+
limit: LIMIT_MAX,
|
|
497
|
+
skip: 0,
|
|
498
|
+
props: {
|
|
499
|
+
isRoot: true,
|
|
500
|
+
},
|
|
501
|
+
});
|
|
502
|
+
|
|
503
|
+
networkDeviceIdsToRefresh = boundDevices
|
|
504
|
+
.map((device: NetworkDevice) => {
|
|
505
|
+
return device.id;
|
|
506
|
+
})
|
|
507
|
+
.filter((id: ObjectID | null): id is ObjectID => {
|
|
508
|
+
return Boolean(id);
|
|
509
|
+
});
|
|
510
|
+
} catch (error) {
|
|
511
|
+
logger.error(
|
|
512
|
+
`Error while looking up network devices bound to monitors pending deletion: ${error}`,
|
|
513
|
+
);
|
|
514
|
+
}
|
|
515
|
+
}
|
|
516
|
+
|
|
411
517
|
return {
|
|
412
518
|
deleteBy,
|
|
413
519
|
carryForward: {
|
|
414
520
|
monitors: monitorsPendingDeletion,
|
|
521
|
+
networkDeviceIdsToRefresh: networkDeviceIdsToRefresh,
|
|
415
522
|
},
|
|
416
523
|
};
|
|
417
524
|
}
|
|
@@ -434,6 +541,34 @@ export class Service extends DatabaseService<Model> {
|
|
|
434
541
|
* A synchronous ALTER TABLE … DELETE on every monitor deletion is both
|
|
435
542
|
* redundant and expensive.
|
|
436
543
|
*/
|
|
544
|
+
|
|
545
|
+
/*
|
|
546
|
+
* Re-derive the stamp of every device that was bound to a deleted
|
|
547
|
+
* monitor. The FK has nulled NetworkDevice.monitorId by now, so for a
|
|
548
|
+
* monitor-backed device this resolves to "nothing bound": stamp and
|
|
549
|
+
* isReachable both go to NULL (the device honestly reads Pending) and
|
|
550
|
+
* its site chain is recomputed. clearWhenNotMonitorBacked is false on
|
|
551
|
+
* purpose - an SNMP device's stamp comes from the Network Device monitor
|
|
552
|
+
* watching its walk, not from this column, and is not ours to clear.
|
|
553
|
+
* Per device and never propagating: one failed refresh must not stop the
|
|
554
|
+
* rest, nor fail a delete that has already happened.
|
|
555
|
+
*/
|
|
556
|
+
const networkDeviceIdsToRefresh: Array<ObjectID> =
|
|
557
|
+
onDelete.carryForward?.networkDeviceIdsToRefresh || [];
|
|
558
|
+
|
|
559
|
+
for (const deviceId of networkDeviceIdsToRefresh) {
|
|
560
|
+
try {
|
|
561
|
+
await NetworkDeviceService.refreshStampedMonitorStatus({
|
|
562
|
+
deviceId: deviceId,
|
|
563
|
+
clearWhenNotMonitorBacked: false,
|
|
564
|
+
});
|
|
565
|
+
} catch (error) {
|
|
566
|
+
logger.error(
|
|
567
|
+
`Error while refreshing the stamped monitor status of network device ${deviceId.toString()} after its monitor was deleted: ${error}`,
|
|
568
|
+
);
|
|
569
|
+
}
|
|
570
|
+
}
|
|
571
|
+
|
|
437
572
|
if (onDelete.deleteBy.props.tenantId && IsBillingEnabled) {
|
|
438
573
|
try {
|
|
439
574
|
await ActiveMonitoringMeteredPlan.reportQuantityToBillingProvider(
|
|
@@ -2578,6 +2713,14 @@ ${createdItem.description?.trim() || "No description provided."}
|
|
|
2578
2713
|
statusTimeline.startsAt = startsAt;
|
|
2579
2714
|
}
|
|
2580
2715
|
|
|
2716
|
+
/*
|
|
2717
|
+
* The network-site rollup bridge (stamping the NetworkDevices these
|
|
2718
|
+
* monitors report on and refreshing their sites) is NOT called from
|
|
2719
|
+
* here. It runs inside MonitorStatusTimelineService.onCreateSuccess,
|
|
2720
|
+
* which this create reaches, so calling it here as well stamped every
|
|
2721
|
+
* device twice - and that hook is the only place the PROBE path
|
|
2722
|
+
* (which never comes through changeMonitorStatus) passes through.
|
|
2723
|
+
*/
|
|
2581
2724
|
await this.createStatusTimelineWithRetry({
|
|
2582
2725
|
statusTimeline: statusTimeline,
|
|
2583
2726
|
props: props,
|
|
@@ -2585,27 +2728,6 @@ ${createdItem.description?.trim() || "No description provided."}
|
|
|
2585
2728
|
monitorId: monitorId,
|
|
2586
2729
|
});
|
|
2587
2730
|
}
|
|
2588
|
-
|
|
2589
|
-
/*
|
|
2590
|
-
* Bridge to the network-site rollup engine: stamp the NetworkDevices
|
|
2591
|
-
* these monitors poll and refresh their sites' worst-of status.
|
|
2592
|
-
* Resilient by contract - a rollup failure can never break a monitor
|
|
2593
|
-
* status change (onMonitorStatusChanged also catches internally).
|
|
2594
|
-
*/
|
|
2595
|
-
try {
|
|
2596
|
-
await NetworkSiteService.onMonitorStatusChanged({
|
|
2597
|
-
projectId: projectId,
|
|
2598
|
-
monitorIds: monitorIds,
|
|
2599
|
-
monitorStatusId: monitorStatusId,
|
|
2600
|
-
});
|
|
2601
|
-
} catch (err) {
|
|
2602
|
-
logger.error(
|
|
2603
|
-
`changeMonitorStatus: failed to update network site rollups: ${err}`,
|
|
2604
|
-
{
|
|
2605
|
-
projectId: projectId.toString(),
|
|
2606
|
-
} as LogAttributes,
|
|
2607
|
-
);
|
|
2608
|
-
}
|
|
2609
2731
|
}
|
|
2610
2732
|
|
|
2611
2733
|
/*
|