@oneuptime/common 12.0.32 → 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/EnterpriseLicense.ts +56 -0
- package/Models/DatabaseModels/Index.ts +10 -0
- package/Models/DatabaseModels/Monitor.ts +76 -0
- package/Models/DatabaseModels/NetworkAlertPolicy.ts +690 -0
- package/Models/DatabaseModels/NetworkDevice.ts +176 -1
- package/Models/DatabaseModels/NetworkSite.ts +201 -2
- package/Models/DatabaseModels/NetworkSiteType.ts +102 -3
- package/Models/DatabaseModels/NetworkSnmpCredentialProfile.ts +841 -0
- 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/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 +12 -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/EnterpriseLicenseInstanceService.ts +197 -0
- package/Server/Services/EnterpriseLicenseService.ts +55 -0
- package/Server/Services/Index.ts +10 -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/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 +105 -48
- 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 -25
- 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 +134 -33
- package/Tests/App/Dashboard/AskAiSuggestedPrompts.test.ts +279 -0
- package/Tests/App/Dashboard/DashboardEditPermissions.test.tsx +517 -0
- package/Tests/App/Dashboard/DashboardVariablesDiscard.test.tsx +26 -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/MonitorTypePicker.test.tsx +4 -2
- 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 +41 -5
- 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/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/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/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/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/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/ProjectServiceNetworkSiteTypeDefaults.test.ts +214 -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/UserNotificationSettingRollupRouting.test.ts +856 -0
- package/Tests/Server/Services/UserNotificationSettingWorkspaceChannels.test.ts +102 -1
- 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/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/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/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/MonitorTemplateVariables/TemplateVariablesCatalog.test.ts +15 -0
- package/Tests/UI/Components/ProgressBar.test.tsx +38 -2
- package/Tests/UI/Components/SideMenuItem.test.tsx +226 -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/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/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/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/Telemetry/CaptureSpanExportGating.test.ts +145 -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/SqlConnectionConfig.ts +31 -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 +90 -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/CommandPalette/CommandPalette.tsx +2 -8
- package/UI/Components/EditionLabel/EditionLabel.tsx +4 -0
- package/UI/Components/Modal/Modal.tsx +2 -8
- package/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.ts +44 -0
- package/UI/Components/ProgressBar/ProgressBar.tsx +12 -1
- package/UI/Components/RadioButtons/BasicRadioButtons.tsx +37 -7
- package/UI/Components/SideMenu/SideMenu.tsx +123 -5
- package/UI/Components/SideMenu/SideMenuItem.tsx +76 -84
- package/UI/Components/SideMenu/SideMenuSection.tsx +55 -23
- 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/Utils/EnterpriseLicense/EnterpriseLicenseSeats.ts +16 -0
- package/Utils/EnterpriseLicense/EnterpriseLicenseUsage.ts +191 -11
- package/Utils/Monitor/MonitorMetricType.ts +153 -1
- package/Utils/Monitor/NetworkTopologyUtil.ts +23 -3
- package/Utils/NetworkDevice/DeviceHealthStateUtil.ts +65 -14
- package/Utils/NetworkDevice/DeviceReachabilityUtil.ts +43 -14
- 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/build/dist/Models/AnalyticsModels/Span.js +14 -0
- package/build/dist/Models/AnalyticsModels/Span.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/Index.js +10 -0
- package/build/dist/Models/DatabaseModels/Index.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/NetworkAlertPolicy.js +713 -0
- package/build/dist/Models/DatabaseModels/NetworkAlertPolicy.js.map +1 -0
- package/build/dist/Models/DatabaseModels/NetworkDevice.js +180 -1
- package/build/dist/Models/DatabaseModels/NetworkDevice.js.map +1 -1
- 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/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/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 +12 -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/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 +10 -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/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 +66 -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 -20
- 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/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 +80 -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/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/MonitorTemplateVariables/TemplateVariablesCatalog.js +39 -0
- package/build/dist/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.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/SideMenu.js +67 -5
- package/build/dist/UI/Components/SideMenu/SideMenu.js.map +1 -1
- package/build/dist/UI/Components/SideMenu/SideMenuItem.js +49 -53
- package/build/dist/UI/Components/SideMenu/SideMenuItem.js.map +1 -1
- package/build/dist/UI/Components/SideMenu/SideMenuSection.js +25 -7
- 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/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/NetworkTopologyUtil.js +8 -3
- 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/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/package.json +2 -2
|
@@ -0,0 +1,238 @@
|
|
|
1
|
+
import DatabaseService from "./DatabaseService";
|
|
2
|
+
import NetworkDeviceService from "./NetworkDeviceService";
|
|
3
|
+
import NetworkSiteService from "./NetworkSiteService";
|
|
4
|
+
import Model from "../../Models/DatabaseModels/NetworkSnmpCredentialProfile";
|
|
5
|
+
import CreateBy from "../Types/Database/CreateBy";
|
|
6
|
+
import DeleteBy from "../Types/Database/DeleteBy";
|
|
7
|
+
import Query from "../Types/Database/Query";
|
|
8
|
+
import UpdateBy from "../Types/Database/UpdateBy";
|
|
9
|
+
import { OnCreate, OnDelete, OnUpdate } from "../Types/Database/Hooks";
|
|
10
|
+
import CaptureSpan from "../Utils/Telemetry/CaptureSpan";
|
|
11
|
+
import DatabaseCommonInteractionProps from "../../Types/BaseDatabase/DatabaseCommonInteractionProps";
|
|
12
|
+
import LIMIT_MAX from "../../Types/Database/LimitMax";
|
|
13
|
+
import BadDataException from "../../Types/Exception/BadDataException";
|
|
14
|
+
import ObjectID from "../../Types/ObjectID";
|
|
15
|
+
import PositiveNumber from "../../Types/PositiveNumber";
|
|
16
|
+
import {
|
|
17
|
+
SnmpCredentialCarrier,
|
|
18
|
+
hasUsableCredentials,
|
|
19
|
+
} from "../../Utils/NetworkDevice/SnmpCredentialUtil";
|
|
20
|
+
|
|
21
|
+
/*
|
|
22
|
+
* A profile is a row of credentials that other rows point at, and most of
|
|
23
|
+
* what is interesting about it happens elsewhere: the poller resolves it
|
|
24
|
+
* (device columns, then device profile, then site profile), the model's
|
|
25
|
+
* column access control keeps its secrets from the roles that may not read
|
|
26
|
+
* them, and DatabaseService encrypts those secrets at rest. There is no
|
|
27
|
+
* fan-out on edit because nothing is copied out of a profile - a device
|
|
28
|
+
* using one is walked with whatever the profile says at poll time.
|
|
29
|
+
*
|
|
30
|
+
* The service owns two things.
|
|
31
|
+
*
|
|
32
|
+
* THE NAME. It is unique per project and it is the label every device and
|
|
33
|
+
* site listing shows for the profile it joins, so a trailing space must not
|
|
34
|
+
* be what makes "Branch v2c" and "Branch v2c " two different profiles, and a
|
|
35
|
+
* blank one must not get past the required check by being three spaces long.
|
|
36
|
+
*
|
|
37
|
+
* THE DELETE GUARD. Both foreign keys onto this table are ON DELETE SET NULL,
|
|
38
|
+
* so deleting a profile that devices or sites still use does not fail - it
|
|
39
|
+
* silently drops every one of them down the resolution order, and a device
|
|
40
|
+
* whose site has no profile either goes from walked to ping-only on its next
|
|
41
|
+
* poll with nothing anywhere to say why. Refuse instead, and say how many
|
|
42
|
+
* devices and sites are in the way. Sites count separately from devices
|
|
43
|
+
* because a site can hold the last reference to a profile while no device
|
|
44
|
+
* points at it directly - that is exactly what "set it once per site" means.
|
|
45
|
+
*/
|
|
46
|
+
export class Service extends DatabaseService<Model> {
|
|
47
|
+
public constructor() {
|
|
48
|
+
super(Model);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* "Does this profile carry enough to open an SNMP session with?" -
|
|
53
|
+
* delegated to the pure util so the poller can ask the same question of a
|
|
54
|
+
* device row with the same function. Exposed here so a caller holding the
|
|
55
|
+
* service does not have to know where the predicate lives.
|
|
56
|
+
*/
|
|
57
|
+
public hasUsableCredentials(profile: SnmpCredentialCarrier): boolean {
|
|
58
|
+
return hasUsableCredentials(profile);
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
@CaptureSpan()
|
|
62
|
+
protected override async onBeforeCreate(
|
|
63
|
+
createBy: CreateBy<Model>,
|
|
64
|
+
): Promise<OnCreate<Model>> {
|
|
65
|
+
createBy.data.name = this.normalizeName(createBy.data.name);
|
|
66
|
+
|
|
67
|
+
return { createBy, carryForward: null };
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
@CaptureSpan()
|
|
71
|
+
protected override async onBeforeUpdate(
|
|
72
|
+
updateBy: UpdateBy<Model>,
|
|
73
|
+
): Promise<OnUpdate<Model>> {
|
|
74
|
+
/*
|
|
75
|
+
* `!== undefined` rather than a truthiness check: an update that does not
|
|
76
|
+
* mention the name (a description edit, a rotated community string) must
|
|
77
|
+
* leave it alone, while an update that sets it to "" or null is a blank
|
|
78
|
+
* name and is refused the same way a blank create is.
|
|
79
|
+
*/
|
|
80
|
+
if (updateBy.data.name !== undefined) {
|
|
81
|
+
updateBy.data.name = this.normalizeName(updateBy.data.name);
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
return { updateBy, carryForward: null };
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
/*
|
|
88
|
+
* Refuse to delete a profile that any device or any site still points at.
|
|
89
|
+
*
|
|
90
|
+
* Counting rather than keeping a rollup column is deliberate - a maintained
|
|
91
|
+
* counter would make this row hot under every device create and rebind,
|
|
92
|
+
* and NetworkDeviceOidTemplateService set the precedent for exactly this
|
|
93
|
+
* guard. Both counts are always taken and both are always reported, so
|
|
94
|
+
* the operator learns in one message everything that has to move before
|
|
95
|
+
* the delete can go through, rather than clearing the devices and then
|
|
96
|
+
* being told about the sites.
|
|
97
|
+
*/
|
|
98
|
+
@CaptureSpan()
|
|
99
|
+
protected override async onBeforeDelete(
|
|
100
|
+
deleteBy: DeleteBy<Model>,
|
|
101
|
+
): Promise<OnDelete<Model>> {
|
|
102
|
+
const profilesToDelete: Array<Model> = await this.findBy({
|
|
103
|
+
/*
|
|
104
|
+
* This hook runs BEFORE DatabaseService permission-checks the query, so
|
|
105
|
+
* a raw isRoot read of deleteBy.query would hand back other tenants'
|
|
106
|
+
* profiles. Re-apply the caller's tenant, exactly as NetworkSiteService
|
|
107
|
+
* and NetworkDeviceOidTemplateService do for the same reason.
|
|
108
|
+
*/
|
|
109
|
+
query: this.scopeQueryToCallerTenant(deleteBy.query, deleteBy.props),
|
|
110
|
+
select: {
|
|
111
|
+
_id: true,
|
|
112
|
+
name: true,
|
|
113
|
+
projectId: true,
|
|
114
|
+
},
|
|
115
|
+
limit: LIMIT_MAX,
|
|
116
|
+
skip: 0,
|
|
117
|
+
props: {
|
|
118
|
+
isRoot: true,
|
|
119
|
+
},
|
|
120
|
+
});
|
|
121
|
+
|
|
122
|
+
for (const profile of profilesToDelete) {
|
|
123
|
+
if (!profile.id || !profile.projectId) {
|
|
124
|
+
continue;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
const [linkedDeviceCount, linkedSiteCount]: [number, number] =
|
|
128
|
+
await Promise.all([
|
|
129
|
+
this.countLinkedDevices({
|
|
130
|
+
profileId: profile.id,
|
|
131
|
+
projectId: profile.projectId,
|
|
132
|
+
}),
|
|
133
|
+
this.countLinkedSites({
|
|
134
|
+
profileId: profile.id,
|
|
135
|
+
projectId: profile.projectId,
|
|
136
|
+
}),
|
|
137
|
+
]);
|
|
138
|
+
|
|
139
|
+
if (linkedDeviceCount > 0 || linkedSiteCount > 0) {
|
|
140
|
+
throw new BadDataException(
|
|
141
|
+
`This SNMP Credential Profile is used by ${linkedDeviceCount} devices and ${linkedSiteCount} sites. Remove it from them first, or point them at another profile.`,
|
|
142
|
+
);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
return { deleteBy, carryForward: null };
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
/**
|
|
150
|
+
* How many devices point at this profile directly. Used by the delete
|
|
151
|
+
* guard above and available to the profile page.
|
|
152
|
+
*
|
|
153
|
+
* Read as root, scoped to the profile's own project: the caller who may
|
|
154
|
+
* delete a profile is not necessarily allowed to read every device, and a
|
|
155
|
+
* partial count would let the delete through with devices still attached.
|
|
156
|
+
*/
|
|
157
|
+
@CaptureSpan()
|
|
158
|
+
public async countLinkedDevices(data: {
|
|
159
|
+
profileId: ObjectID;
|
|
160
|
+
projectId: ObjectID;
|
|
161
|
+
}): Promise<number> {
|
|
162
|
+
const count: PositiveNumber = await NetworkDeviceService.countBy({
|
|
163
|
+
query: {
|
|
164
|
+
projectId: data.projectId,
|
|
165
|
+
snmpCredentialProfileId: data.profileId,
|
|
166
|
+
},
|
|
167
|
+
props: {
|
|
168
|
+
isRoot: true,
|
|
169
|
+
},
|
|
170
|
+
});
|
|
171
|
+
|
|
172
|
+
return count.toNumber();
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
/**
|
|
176
|
+
* How many sites carry this profile as their default. Same shape and same
|
|
177
|
+
* reasoning as countLinkedDevices.
|
|
178
|
+
*/
|
|
179
|
+
@CaptureSpan()
|
|
180
|
+
public async countLinkedSites(data: {
|
|
181
|
+
profileId: ObjectID;
|
|
182
|
+
projectId: ObjectID;
|
|
183
|
+
}): Promise<number> {
|
|
184
|
+
const count: PositiveNumber = await NetworkSiteService.countBy({
|
|
185
|
+
query: {
|
|
186
|
+
projectId: data.projectId,
|
|
187
|
+
snmpCredentialProfileId: data.profileId,
|
|
188
|
+
},
|
|
189
|
+
props: {
|
|
190
|
+
isRoot: true,
|
|
191
|
+
},
|
|
192
|
+
});
|
|
193
|
+
|
|
194
|
+
return count.toNumber();
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
/*
|
|
198
|
+
* See NetworkSiteService for the full explanation: hooks run before
|
|
199
|
+
* ModelPermission scopes the caller's query, so anything a hook reads with
|
|
200
|
+
* isRoot has to be re-scoped by hand or it spans projects.
|
|
201
|
+
*/
|
|
202
|
+
private scopeQueryToCallerTenant(
|
|
203
|
+
query: Query<Model>,
|
|
204
|
+
props: DatabaseCommonInteractionProps,
|
|
205
|
+
): Query<Model> {
|
|
206
|
+
if (props.isRoot || !props.tenantId) {
|
|
207
|
+
return query;
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
return {
|
|
211
|
+
...query,
|
|
212
|
+
projectId: props.tenantId,
|
|
213
|
+
};
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
/*
|
|
217
|
+
* The name as it will be stored, or a BadDataException. Only a plain string
|
|
218
|
+
* is accepted: the column is also used as a label, and a raw SQL expression
|
|
219
|
+
* (the other shape PartialEntity allows) has no business being one.
|
|
220
|
+
*/
|
|
221
|
+
private normalizeName(name: unknown): string {
|
|
222
|
+
if (typeof name !== "string") {
|
|
223
|
+
throw new BadDataException("SNMP Credential Profile name is required.");
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
const trimmed: string = name.trim();
|
|
227
|
+
|
|
228
|
+
if (!trimmed) {
|
|
229
|
+
throw new BadDataException(
|
|
230
|
+
"SNMP Credential Profile name cannot be blank.",
|
|
231
|
+
);
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
return trimmed;
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
export default new Service();
|
|
@@ -12,6 +12,10 @@ import ObjectID from "../../Types/ObjectID";
|
|
|
12
12
|
import Project from "../../Models/DatabaseModels/Project";
|
|
13
13
|
import CaptureSpan from "../Utils/Telemetry/CaptureSpan";
|
|
14
14
|
import SlackUtil from "../Utils/Workspace/Slack/Slack";
|
|
15
|
+
import {
|
|
16
|
+
BillingFailureNoticeKind,
|
|
17
|
+
shouldSendBillingFailureNotice,
|
|
18
|
+
} from "../Utils/Billing/BillingFailureNoticeThrottle";
|
|
15
19
|
import URL from "../../Types/API/URL";
|
|
16
20
|
import Exception from "../../Types/Exception/Exception";
|
|
17
21
|
|
|
@@ -24,7 +28,27 @@ export class NotificationService extends BaseService {
|
|
|
24
28
|
public async rechargeBalance(
|
|
25
29
|
projectId: ObjectID,
|
|
26
30
|
amountInUSD: number,
|
|
31
|
+
options?: {
|
|
32
|
+
/*
|
|
33
|
+
* Whether a successful recharge is worth telling the owners about.
|
|
34
|
+
*
|
|
35
|
+
* True for the manual "Recharge" button in Project Settings, where the
|
|
36
|
+
* email is the only confirmation a person gets that their card was
|
|
37
|
+
* charged: Project.sendInvoicesByEmail defaults to false, so the Stripe
|
|
38
|
+
* invoice is filed rather than sent, and the Slack notification is an
|
|
39
|
+
* operator webhook that most installs never configure.
|
|
40
|
+
*
|
|
41
|
+
* False for rechargeIfBalanceIsLow, which runs inline on every SMS,
|
|
42
|
+
* call, WhatsApp and Telegram attempt - there, "we topped your balance
|
|
43
|
+
* up" is not news, and during a paging storm it is one email to every
|
|
44
|
+
* owner per recharge.
|
|
45
|
+
*/
|
|
46
|
+
sendOwnerConfirmationEmail?: boolean | undefined;
|
|
47
|
+
},
|
|
27
48
|
): Promise<number> {
|
|
49
|
+
const sendOwnerConfirmationEmail: boolean =
|
|
50
|
+
options?.sendOwnerConfirmationEmail !== false;
|
|
51
|
+
|
|
28
52
|
const project: Project | null = await ProjectService.findOneById({
|
|
29
53
|
id: projectId,
|
|
30
54
|
select: {
|
|
@@ -48,13 +72,36 @@ export class NotificationService extends BaseService {
|
|
|
48
72
|
return 0;
|
|
49
73
|
}
|
|
50
74
|
|
|
75
|
+
/*
|
|
76
|
+
* The no-payment-method branch below throws, and that throw lands in this
|
|
77
|
+
* method's own catch. Without this the FIRST no-payment-method failure
|
|
78
|
+
* sends two "ACTION REQUIRED" emails about the same fact, one from each
|
|
79
|
+
* place. This is a local flag rather than a mutation of `project` so it is
|
|
80
|
+
* obvious it exists only to coordinate those two blocks.
|
|
81
|
+
*/
|
|
82
|
+
let ownersAlreadyToldAboutThisFailure: boolean = false;
|
|
83
|
+
|
|
51
84
|
try {
|
|
52
85
|
if (
|
|
53
86
|
!(await BillingService.hasPaymentMethods(
|
|
54
87
|
project.paymentProviderCustomerId!,
|
|
55
88
|
))
|
|
56
89
|
) {
|
|
57
|
-
|
|
90
|
+
/*
|
|
91
|
+
* The same 24h window as the catch below, for the same reason: the
|
|
92
|
+
* project boolean this branch used to latch on is cleared only by a
|
|
93
|
+
* SUCCESSFUL recharge, so a project that never manages one was told
|
|
94
|
+
* once and then never again. A window says it once a day until
|
|
95
|
+
* somebody fixes it, which is what an ACTION REQUIRED message is for.
|
|
96
|
+
*/
|
|
97
|
+
ownersAlreadyToldAboutThisFailure = true;
|
|
98
|
+
|
|
99
|
+
const shouldTellOwners: boolean = await shouldSendBillingFailureNotice({
|
|
100
|
+
projectId: project.id!,
|
|
101
|
+
kind: BillingFailureNoticeKind.SmsAndCallRechargeFailed,
|
|
102
|
+
});
|
|
103
|
+
|
|
104
|
+
if (shouldTellOwners) {
|
|
58
105
|
await ProjectService.updateOneById({
|
|
59
106
|
data: {
|
|
60
107
|
failedCallAndSMSBalanceChargeNotificationSentToOwners: true,
|
|
@@ -110,16 +157,27 @@ export class NotificationService extends BaseService {
|
|
|
110
157
|
},
|
|
111
158
|
});
|
|
112
159
|
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
)
|
|
160
|
+
/*
|
|
161
|
+
* The confirmation is suppressed for AUTO-recharge only. This used to
|
|
162
|
+
* fire unconditionally, and because rechargeIfBalanceIsLow runs inline
|
|
163
|
+
* on every SMS, call, WhatsApp and Telegram attempt, a project that
|
|
164
|
+
* auto-recharges during a paging storm mailed every owner once per
|
|
165
|
+
* recharge. Somebody who deliberately clicked "Recharge" still gets
|
|
166
|
+
* told: nothing else reliably tells them, because
|
|
167
|
+
* Project.sendInvoicesByEmail defaults to false.
|
|
168
|
+
*/
|
|
169
|
+
if (sendOwnerConfirmationEmail) {
|
|
170
|
+
await ProjectService.sendEmailToProjectOwners(
|
|
171
|
+
project.id!,
|
|
172
|
+
"SMS and Call Recharge Successful for project - " +
|
|
173
|
+
(project.name || ""),
|
|
174
|
+
`We have successfully recharged your SMS and Call balance for project - ${
|
|
175
|
+
project.name || ""
|
|
176
|
+
} by ${amountInUSD} USD. Your current balance is ${
|
|
177
|
+
updatedAmount / 100
|
|
178
|
+
} USD.`,
|
|
179
|
+
);
|
|
180
|
+
}
|
|
123
181
|
|
|
124
182
|
// Send Slack notification for balance refill
|
|
125
183
|
this.sendBalanceRefillSlackNotification({
|
|
@@ -137,23 +195,46 @@ export class NotificationService extends BaseService {
|
|
|
137
195
|
|
|
138
196
|
return updatedAmount;
|
|
139
197
|
} catch (err) {
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
198
|
+
/*
|
|
199
|
+
* This block used to write failedCallAndSMSBalanceChargeNotificationSent
|
|
200
|
+
* ToOwners and then send WITHOUT ever reading it, so a project with a
|
|
201
|
+
* declined card mailed every owner once per paging attempt - inline on
|
|
202
|
+
* every SMS and call, during the outage the pages were about.
|
|
203
|
+
*
|
|
204
|
+
* The guard is a 24h window rather than that boolean deliberately. The
|
|
205
|
+
* boolean is only cleared by a successful recharge, so latching on it
|
|
206
|
+
* would mean: no card -> mail once and latch -> owner adds a card -> the
|
|
207
|
+
* card is declined -> the recharge can never succeed -> the latch never
|
|
208
|
+
* clears -> nobody is ever told the new card failed, and paging quietly
|
|
209
|
+
* stops. A window collapses the storm to one email a day and still
|
|
210
|
+
* reports a new failure within a day. See BillingFailureNoticeThrottle.
|
|
211
|
+
*/
|
|
212
|
+
if (!ownersAlreadyToldAboutThisFailure) {
|
|
213
|
+
const shouldTellOwners: boolean = await shouldSendBillingFailureNotice({
|
|
214
|
+
projectId: project.id!,
|
|
215
|
+
kind: BillingFailureNoticeKind.SmsAndCallRechargeFailed,
|
|
216
|
+
});
|
|
217
|
+
|
|
218
|
+
if (shouldTellOwners) {
|
|
219
|
+
await ProjectService.updateOneById({
|
|
220
|
+
data: {
|
|
221
|
+
failedCallAndSMSBalanceChargeNotificationSentToOwners: true,
|
|
222
|
+
},
|
|
223
|
+
id: project.id!,
|
|
224
|
+
props: {
|
|
225
|
+
isRoot: true,
|
|
226
|
+
},
|
|
227
|
+
});
|
|
228
|
+
await ProjectService.sendEmailToProjectOwners(
|
|
229
|
+
project.id!,
|
|
230
|
+
"ACTION REQUIRED: SMS and Call Recharge Failed for project - " +
|
|
231
|
+
(project.name || ""),
|
|
232
|
+
`We have tried recharged your SMS and Call balance for project - ${
|
|
233
|
+
project.name || ""
|
|
234
|
+
} and failed. Please make sure your payment method is upto date and has sufficient balance. You can add new payment methods in Project Settings.`,
|
|
235
|
+
);
|
|
236
|
+
}
|
|
237
|
+
}
|
|
157
238
|
logger.error(err, { projectId: projectId?.toString() } as LogAttributes);
|
|
158
239
|
throw err;
|
|
159
240
|
}
|
|
@@ -214,6 +295,15 @@ export class NotificationService extends BaseService {
|
|
|
214
295
|
const updatedAmount: number = await this.rechargeBalance(
|
|
215
296
|
projectId,
|
|
216
297
|
autoRechargeSmsOrCallByBalanceInUSD,
|
|
298
|
+
{
|
|
299
|
+
/*
|
|
300
|
+
* This method is called inline from SmsService, CallService,
|
|
301
|
+
* WhatsAppService and TelegramService on EVERY notification
|
|
302
|
+
* attempt, so a success email here is one message to every owner
|
|
303
|
+
* per recharge, in the middle of the storm that caused it.
|
|
304
|
+
*/
|
|
305
|
+
sendOwnerConfirmationEmail: false,
|
|
306
|
+
},
|
|
217
307
|
);
|
|
218
308
|
project.smsOrCallCurrentBalanceInUSDCents = updatedAmount;
|
|
219
309
|
}
|
|
@@ -65,6 +65,7 @@ import {
|
|
|
65
65
|
} from "../../Types/BrandColors";
|
|
66
66
|
import Color from "../../Types/Color";
|
|
67
67
|
import LIMIT_MAX from "../../Types/Database/LimitMax";
|
|
68
|
+
import SortOrder from "../../Types/BaseDatabase/SortOrder";
|
|
68
69
|
import QueryDeepPartialEntity from "../../Types/Database/PartialEntity";
|
|
69
70
|
import OneUptimeDate from "../../Types/Date";
|
|
70
71
|
import EmailTemplateType from "../../Types/Email/EmailTemplateType";
|
|
@@ -85,6 +86,10 @@ import {
|
|
|
85
86
|
DEFAULT_NETWORK_DEVICE_ROLES,
|
|
86
87
|
DefaultNetworkDeviceRole,
|
|
87
88
|
} from "../../Types/NetworkDevice/DefaultNetworkDeviceRole";
|
|
89
|
+
import {
|
|
90
|
+
DefaultNetworkSiteTypeCreationOrder,
|
|
91
|
+
DefaultNetworkSiteTypeParent,
|
|
92
|
+
} from "../../Types/NetworkSite/DefaultNetworkSiteTypeHierarchy";
|
|
88
93
|
import Model from "../../Models/DatabaseModels/Project";
|
|
89
94
|
import BaseModel from "../../Models/DatabaseModels/DatabaseBaseModel/DatabaseBaseModel";
|
|
90
95
|
import PromoCode from "../../Models/DatabaseModels/PromoCode";
|
|
@@ -1912,21 +1917,50 @@ These are no longer recorded against the project and have to be cancelled by han
|
|
|
1912
1917
|
* addDefaultAlertSeverity / addDefaultAlertState.
|
|
1913
1918
|
*/
|
|
1914
1919
|
@CaptureSpan()
|
|
1915
|
-
public async addDefaultNetworkSiteTypes(
|
|
1920
|
+
public async addDefaultNetworkSiteTypes(
|
|
1921
|
+
createdItem: Model,
|
|
1922
|
+
options?: { setParentRelationships?: boolean },
|
|
1923
|
+
): Promise<Model> {
|
|
1916
1924
|
const projectId: ObjectID = createdItem.id!;
|
|
1917
1925
|
|
|
1918
|
-
|
|
1919
|
-
|
|
1920
|
-
|
|
1921
|
-
|
|
1922
|
-
|
|
1923
|
-
|
|
1926
|
+
const existingNetworkSiteTypes: Array<NetworkSiteType> = [];
|
|
1927
|
+
let networkSiteTypeSkip: number = 0;
|
|
1928
|
+
|
|
1929
|
+
while (true) {
|
|
1930
|
+
const page: Array<NetworkSiteType> = await NetworkSiteTypeService.findBy({
|
|
1931
|
+
query: { projectId },
|
|
1932
|
+
select: { _id: true, name: true },
|
|
1933
|
+
sort: { _id: SortOrder.Ascending },
|
|
1934
|
+
limit: LIMIT_MAX,
|
|
1935
|
+
skip: networkSiteTypeSkip,
|
|
1936
|
+
props: { isRoot: true },
|
|
1937
|
+
});
|
|
1938
|
+
|
|
1939
|
+
existingNetworkSiteTypes.push(...page);
|
|
1940
|
+
|
|
1941
|
+
if (page.length < LIMIT_MAX) {
|
|
1942
|
+
break;
|
|
1943
|
+
}
|
|
1944
|
+
|
|
1945
|
+
networkSiteTypeSkip += page.length;
|
|
1946
|
+
}
|
|
1947
|
+
|
|
1948
|
+
const networkSiteTypeByName: Map<string, NetworkSiteType> = new Map<
|
|
1949
|
+
string,
|
|
1950
|
+
NetworkSiteType
|
|
1951
|
+
>();
|
|
1952
|
+
|
|
1953
|
+
for (const networkSiteType of existingNetworkSiteTypes) {
|
|
1954
|
+
if (networkSiteType.name) {
|
|
1955
|
+
networkSiteTypeByName.set(networkSiteType.name, networkSiteType);
|
|
1956
|
+
}
|
|
1957
|
+
}
|
|
1924
1958
|
|
|
1925
1959
|
/*
|
|
1926
|
-
*
|
|
1927
|
-
*
|
|
1928
|
-
*
|
|
1929
|
-
*
|
|
1960
|
+
* DefaultNetworkSiteTypeCreationOrder lists parents before children, so a
|
|
1961
|
+
* parent's ID is always available by the time its child is created. The
|
|
1962
|
+
* parent mapping itself is shared with the data migration that repairs
|
|
1963
|
+
* projects created before type parents existed.
|
|
1930
1964
|
*
|
|
1931
1965
|
* isUnitLevel is true for "Unit" only. It is load-bearing, not a label:
|
|
1932
1966
|
* the network map drills sites of a unit-level type into their device
|
|
@@ -1934,81 +1968,104 @@ These are no longer recorded against the project and have to be cancelled by han
|
|
|
1934
1968
|
* as units. Downstream code keys off this flag rather than the name,
|
|
1935
1969
|
* because the name is user-editable once seeded.
|
|
1936
1970
|
*/
|
|
1937
|
-
const defaultNetworkSiteTypes:
|
|
1938
|
-
|
|
1939
|
-
|
|
1940
|
-
|
|
1941
|
-
|
|
1942
|
-
|
|
1943
|
-
|
|
1971
|
+
const defaultNetworkSiteTypes: Readonly<
|
|
1972
|
+
Record<
|
|
1973
|
+
DefaultNetworkSiteType,
|
|
1974
|
+
{
|
|
1975
|
+
description: string;
|
|
1976
|
+
isUnitLevel: boolean;
|
|
1977
|
+
}
|
|
1978
|
+
>
|
|
1979
|
+
> = {
|
|
1980
|
+
[DefaultNetworkSiteType.AccountType]: {
|
|
1944
1981
|
description:
|
|
1945
1982
|
"Top level grouping - the kind of account the sites underneath it belong to.",
|
|
1946
1983
|
isUnitLevel: false,
|
|
1947
1984
|
},
|
|
1948
|
-
{
|
|
1949
|
-
name: DefaultNetworkSiteType.Region,
|
|
1985
|
+
[DefaultNetworkSiteType.Region]: {
|
|
1950
1986
|
description:
|
|
1951
1987
|
"A broad geographic region that groups markets and the sites within them.",
|
|
1952
1988
|
isUnitLevel: false,
|
|
1953
1989
|
},
|
|
1954
|
-
{
|
|
1955
|
-
name: DefaultNetworkSiteType.Franchisee,
|
|
1990
|
+
[DefaultNetworkSiteType.Franchisee]: {
|
|
1956
1991
|
description:
|
|
1957
1992
|
"An operator or franchise partner responsible for a group of sites.",
|
|
1958
1993
|
isUnitLevel: false,
|
|
1959
1994
|
},
|
|
1960
|
-
{
|
|
1961
|
-
name: DefaultNetworkSiteType.Market,
|
|
1995
|
+
[DefaultNetworkSiteType.Market]: {
|
|
1962
1996
|
description: "A metro or trade area that groups the sites within it.",
|
|
1963
1997
|
isUnitLevel: false,
|
|
1964
1998
|
},
|
|
1965
|
-
{
|
|
1966
|
-
name: DefaultNetworkSiteType.Unit,
|
|
1999
|
+
[DefaultNetworkSiteType.Unit]: {
|
|
1967
2000
|
description:
|
|
1968
2001
|
"An individual location with network devices. This is the leaf level of the hierarchy.",
|
|
1969
2002
|
isUnitLevel: true,
|
|
1970
2003
|
},
|
|
1971
|
-
{
|
|
1972
|
-
name: DefaultNetworkSiteType.DataCenter,
|
|
2004
|
+
[DefaultNetworkSiteType.DataCenter]: {
|
|
1973
2005
|
description:
|
|
1974
2006
|
"A data center or core facility that hosts shared infrastructure.",
|
|
1975
2007
|
isUnitLevel: false,
|
|
1976
2008
|
},
|
|
1977
|
-
{
|
|
1978
|
-
name: DefaultNetworkSiteType.Other,
|
|
2009
|
+
[DefaultNetworkSiteType.Other]: {
|
|
1979
2010
|
description: "Any site that does not fit the other levels.",
|
|
1980
2011
|
isUnitLevel: false,
|
|
1981
2012
|
},
|
|
1982
|
-
|
|
2013
|
+
};
|
|
1983
2014
|
|
|
1984
|
-
|
|
1985
|
-
|
|
1986
|
-
|
|
1987
|
-
|
|
1988
|
-
|
|
2015
|
+
/*
|
|
2016
|
+
* `order` is a sibling display order, not a proxy for depth. Increment a
|
|
2017
|
+
* separate counter per parent: the default chain's only child is 1 at each
|
|
2018
|
+
* level, while the three roots are Account Type (1), Data Center (2), and
|
|
2019
|
+
* Other (3).
|
|
2020
|
+
*/
|
|
2021
|
+
const nextOrderByParent: Map<DefaultNetworkSiteType | null, number> =
|
|
2022
|
+
new Map<DefaultNetworkSiteType | null, number>();
|
|
2023
|
+
|
|
2024
|
+
for (const name of DefaultNetworkSiteTypeCreationOrder) {
|
|
1989
2025
|
const defaultNetworkSiteType: {
|
|
1990
|
-
name: DefaultNetworkSiteType;
|
|
1991
2026
|
description: string;
|
|
1992
2027
|
isUnitLevel: boolean;
|
|
1993
|
-
} = defaultNetworkSiteTypes[
|
|
1994
|
-
|
|
1995
|
-
|
|
2028
|
+
} = defaultNetworkSiteTypes[name];
|
|
2029
|
+
const parentName: DefaultNetworkSiteType | null =
|
|
2030
|
+
options?.setParentRelationships === false
|
|
2031
|
+
? null
|
|
2032
|
+
: DefaultNetworkSiteTypeParent[name];
|
|
2033
|
+
const siblingOrder: number = (nextOrderByParent.get(parentName) || 0) + 1;
|
|
2034
|
+
nextOrderByParent.set(parentName, siblingOrder);
|
|
2035
|
+
|
|
2036
|
+
if (networkSiteTypeByName.has(name)) {
|
|
1996
2037
|
continue;
|
|
1997
2038
|
}
|
|
1998
2039
|
|
|
1999
2040
|
const networkSiteType: NetworkSiteType = new NetworkSiteType();
|
|
2000
|
-
networkSiteType.name =
|
|
2041
|
+
networkSiteType.name = name;
|
|
2001
2042
|
networkSiteType.description = defaultNetworkSiteType.description;
|
|
2002
2043
|
networkSiteType.isUnitLevel = defaultNetworkSiteType.isUnitLevel;
|
|
2003
2044
|
networkSiteType.projectId = projectId;
|
|
2004
|
-
networkSiteType.order =
|
|
2045
|
+
networkSiteType.order = siblingOrder;
|
|
2005
2046
|
|
|
2006
|
-
|
|
2007
|
-
|
|
2008
|
-
|
|
2009
|
-
|
|
2010
|
-
|
|
2011
|
-
|
|
2047
|
+
if (parentName) {
|
|
2048
|
+
const parent: NetworkSiteType | undefined =
|
|
2049
|
+
networkSiteTypeByName.get(parentName);
|
|
2050
|
+
|
|
2051
|
+
if (!parent?.id) {
|
|
2052
|
+
throw new BadDataException(
|
|
2053
|
+
`Cannot create the default ${name} Network Site Type because its ${parentName} parent could not be resolved.`,
|
|
2054
|
+
);
|
|
2055
|
+
}
|
|
2056
|
+
|
|
2057
|
+
networkSiteType.parentNetworkSiteTypeId = parent.id;
|
|
2058
|
+
}
|
|
2059
|
+
|
|
2060
|
+
const createdNetworkSiteType: NetworkSiteType =
|
|
2061
|
+
await NetworkSiteTypeService.create({
|
|
2062
|
+
data: networkSiteType,
|
|
2063
|
+
props: {
|
|
2064
|
+
isRoot: true,
|
|
2065
|
+
},
|
|
2066
|
+
});
|
|
2067
|
+
|
|
2068
|
+
networkSiteTypeByName.set(name, createdNetworkSiteType);
|
|
2012
2069
|
}
|
|
2013
2070
|
|
|
2014
2071
|
return createdItem;
|