@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,370 @@
|
|
|
1
|
+
import Project from "./Project";
|
|
2
|
+
import User from "./User";
|
|
3
|
+
import BaseModel from "./DatabaseBaseModel/DatabaseBaseModel";
|
|
4
|
+
import Route from "../../Types/API/Route";
|
|
5
|
+
import ColumnAccessControl from "../../Types/Database/AccessControl/ColumnAccessControl";
|
|
6
|
+
import TableAccessControl from "../../Types/Database/AccessControl/TableAccessControl";
|
|
7
|
+
import ColumnLength from "../../Types/Database/ColumnLength";
|
|
8
|
+
import ColumnType from "../../Types/Database/ColumnType";
|
|
9
|
+
import CrudApiEndpoint from "../../Types/Database/CrudApiEndpoint";
|
|
10
|
+
import TableColumn from "../../Types/Database/TableColumn";
|
|
11
|
+
import TableColumnType from "../../Types/Database/TableColumnType";
|
|
12
|
+
import TableMetadata from "../../Types/Database/TableMetadata";
|
|
13
|
+
import TenantColumn from "../../Types/Database/TenantColumn";
|
|
14
|
+
import Email from "../../Types/Email";
|
|
15
|
+
import IconProp from "../../Types/Icon/IconProp";
|
|
16
|
+
import RollupCategory from "../../Types/NotificationSetting/NotificationEmailRollupCategory";
|
|
17
|
+
import NotificationSettingEventType from "../../Types/NotificationSetting/NotificationSettingEventType";
|
|
18
|
+
import ObjectID from "../../Types/ObjectID";
|
|
19
|
+
import { Column, Entity, Index, JoinColumn, ManyToOne } from "typeorm";
|
|
20
|
+
|
|
21
|
+
/*
|
|
22
|
+
* One row per rollup-eligible owner notification email, whether it went out
|
|
23
|
+
* immediately or was deferred. The table does two jobs at once, and both are
|
|
24
|
+
* worth naming because they pull the schema in slightly different directions.
|
|
25
|
+
*
|
|
26
|
+
* FIRST, IT IS THE FLUSH QUEUE. sentAt NULL means "pending": the notification
|
|
27
|
+
* was written here INSTEAD of being mailed, because this address had already
|
|
28
|
+
* received BURST_THRESHOLD emails in the same category inside the burst
|
|
29
|
+
* window. A once-a-minute sweep collapses everything still pending for an
|
|
30
|
+
* address - across every category - into one rollup email, stamps sentAt, and
|
|
31
|
+
* records which batch claimed it. Nothing is ever suppressed; the only thing
|
|
32
|
+
* that changes for a flooded recipient is that the 5th through Nth
|
|
33
|
+
* notifications arrive in one message instead of N.
|
|
34
|
+
*
|
|
35
|
+
* SECOND, IT IS AN ACCOUNTING RECORD, and the first per-event-type,
|
|
36
|
+
* per-recipient email-volume record the product has ever had. An immediate
|
|
37
|
+
* send writes a row too, with sentAt set at insert time and rollupBatchId
|
|
38
|
+
* left NULL - that is what makes the burst counter countable at all, and it
|
|
39
|
+
* is also what lets somebody answer "which event type is actually flooding
|
|
40
|
+
* this customer" without adding telemetry.
|
|
41
|
+
*
|
|
42
|
+
* WHAT IS DELIBERATELY NOT STORED: the envelope vars, the template type, and
|
|
43
|
+
* any rendered body. A rollup line is eventType + subject + an optional deep
|
|
44
|
+
* link. Storing envelopes would multiply row size roughly fiftyfold, add a
|
|
45
|
+
* stale-template bug class the moment a template changes under a queued row,
|
|
46
|
+
* and buy nothing a reader of the rollup email ever sees.
|
|
47
|
+
*
|
|
48
|
+
* ROOT ONLY. Every table access list is empty. This is a mail-delivery
|
|
49
|
+
* ledger, not a user-facing resource, and a user who could delete their own
|
|
50
|
+
* pending rows could make the sweep drop notifications on the floor. The CRUD
|
|
51
|
+
* route exists only so the model is addressable like every other tenant
|
|
52
|
+
* model - exactly as UserOnCallShiftReminderLog is - and every operation on
|
|
53
|
+
* it is denied.
|
|
54
|
+
*
|
|
55
|
+
* Rows are hard-deleted after ROLLUP_ITEM_RETENTION_DAYS by the existing
|
|
56
|
+
* HardDelete cron; see UserNotificationEmailRollupItemService.
|
|
57
|
+
*/
|
|
58
|
+
@TenantColumn("projectId")
|
|
59
|
+
@TableAccessControl({
|
|
60
|
+
create: [],
|
|
61
|
+
read: [],
|
|
62
|
+
delete: [],
|
|
63
|
+
update: [],
|
|
64
|
+
})
|
|
65
|
+
@CrudApiEndpoint(new Route("/user-notification-email-rollup-item"))
|
|
66
|
+
@Entity({
|
|
67
|
+
name: "UserNotificationEmailRollupItem",
|
|
68
|
+
})
|
|
69
|
+
@TableMetadata({
|
|
70
|
+
tableName: "UserNotificationEmailRollupItem",
|
|
71
|
+
singularName: "Notification Email Rollup Item",
|
|
72
|
+
pluralName: "Notification Email Rollup Items",
|
|
73
|
+
icon: IconProp.Email,
|
|
74
|
+
tableDescription:
|
|
75
|
+
"One owner notification email, recorded so bursts can be coalesced into a single rollup email.",
|
|
76
|
+
})
|
|
77
|
+
/*
|
|
78
|
+
* The burst counter's index. Its leading four columns are exactly the bucket
|
|
79
|
+
* key the write path counts over, and createdAt closes it so the ten-minute
|
|
80
|
+
* window is answered from the index alone, on the hot notification path.
|
|
81
|
+
*/
|
|
82
|
+
@Index(["projectId", "userId", "toEmail", "rollupCategory", "createdAt"])
|
|
83
|
+
/*
|
|
84
|
+
* The flush sweep's index: "pending, oldest first" across every tenant. The
|
|
85
|
+
* sweep is global by design, so it cannot be scoped by projectId.
|
|
86
|
+
*/
|
|
87
|
+
@Index(["sentAt", "createdAt"])
|
|
88
|
+
/*
|
|
89
|
+
* The read-back index. A flush stamps its claimed rows and then re-reads them
|
|
90
|
+
* BY BATCH, so the replica renders exactly the rows it wrote and never a row
|
|
91
|
+
* a concurrent flush stamped underneath it.
|
|
92
|
+
*/
|
|
93
|
+
@Index(["rollupBatchId"])
|
|
94
|
+
export default class UserNotificationEmailRollupItem extends BaseModel {
|
|
95
|
+
@ColumnAccessControl({
|
|
96
|
+
create: [],
|
|
97
|
+
read: [],
|
|
98
|
+
update: [],
|
|
99
|
+
})
|
|
100
|
+
@TableColumn({
|
|
101
|
+
manyToOneRelationColumn: "projectId",
|
|
102
|
+
type: TableColumnType.Entity,
|
|
103
|
+
modelType: Project,
|
|
104
|
+
title: "Project",
|
|
105
|
+
description: "Relation to Project Resource in which this object belongs",
|
|
106
|
+
})
|
|
107
|
+
@ManyToOne(
|
|
108
|
+
() => {
|
|
109
|
+
return Project;
|
|
110
|
+
},
|
|
111
|
+
{
|
|
112
|
+
eager: false,
|
|
113
|
+
nullable: true,
|
|
114
|
+
onDelete: "CASCADE",
|
|
115
|
+
orphanedRowAction: "nullify",
|
|
116
|
+
},
|
|
117
|
+
)
|
|
118
|
+
@JoinColumn({ name: "projectId" })
|
|
119
|
+
public project?: Project = undefined;
|
|
120
|
+
|
|
121
|
+
@ColumnAccessControl({
|
|
122
|
+
create: [],
|
|
123
|
+
read: [],
|
|
124
|
+
update: [],
|
|
125
|
+
})
|
|
126
|
+
@Index()
|
|
127
|
+
@TableColumn({
|
|
128
|
+
type: TableColumnType.ObjectID,
|
|
129
|
+
required: true,
|
|
130
|
+
canReadOnRelationQuery: true,
|
|
131
|
+
title: "Project ID",
|
|
132
|
+
description: "ID of your OneUptime Project in which this object belongs",
|
|
133
|
+
example: "5f8b9c0d-e1a2-4b3c-8d5e-6f7a8b9c0d1e",
|
|
134
|
+
})
|
|
135
|
+
@Column({
|
|
136
|
+
type: ColumnType.ObjectID,
|
|
137
|
+
nullable: false,
|
|
138
|
+
transformer: ObjectID.getDatabaseTransformer(),
|
|
139
|
+
})
|
|
140
|
+
public projectId?: ObjectID = undefined;
|
|
141
|
+
|
|
142
|
+
@ColumnAccessControl({
|
|
143
|
+
create: [],
|
|
144
|
+
read: [],
|
|
145
|
+
update: [],
|
|
146
|
+
})
|
|
147
|
+
@TableColumn({
|
|
148
|
+
manyToOneRelationColumn: "userId",
|
|
149
|
+
type: TableColumnType.Entity,
|
|
150
|
+
modelType: User,
|
|
151
|
+
title: "User",
|
|
152
|
+
description: "Relation to the User this notification was addressed to",
|
|
153
|
+
})
|
|
154
|
+
@ManyToOne(
|
|
155
|
+
() => {
|
|
156
|
+
return User;
|
|
157
|
+
},
|
|
158
|
+
{
|
|
159
|
+
eager: false,
|
|
160
|
+
nullable: true,
|
|
161
|
+
onDelete: "CASCADE",
|
|
162
|
+
orphanedRowAction: "nullify",
|
|
163
|
+
},
|
|
164
|
+
)
|
|
165
|
+
@JoinColumn({ name: "userId" })
|
|
166
|
+
public user?: User = undefined;
|
|
167
|
+
|
|
168
|
+
@ColumnAccessControl({
|
|
169
|
+
create: [],
|
|
170
|
+
read: [],
|
|
171
|
+
update: [],
|
|
172
|
+
})
|
|
173
|
+
@Index()
|
|
174
|
+
@TableColumn({
|
|
175
|
+
type: TableColumnType.ObjectID,
|
|
176
|
+
required: true,
|
|
177
|
+
canReadOnRelationQuery: true,
|
|
178
|
+
title: "User ID",
|
|
179
|
+
description: "ID of the User this notification was addressed to",
|
|
180
|
+
example: "7c9d8e0f-a1b2-4c3d-9e5f-8a7b9c0d1e2f",
|
|
181
|
+
})
|
|
182
|
+
@Column({
|
|
183
|
+
type: ColumnType.ObjectID,
|
|
184
|
+
nullable: false,
|
|
185
|
+
transformer: ObjectID.getDatabaseTransformer(),
|
|
186
|
+
})
|
|
187
|
+
public userId?: ObjectID = undefined;
|
|
188
|
+
|
|
189
|
+
/*
|
|
190
|
+
* The notification loop already sends one email per verified address a user
|
|
191
|
+
* owns. Keying the bucket per address rather than per user preserves that
|
|
192
|
+
* fan-out exactly, and sends the rollup back to the same address the
|
|
193
|
+
* individual emails would have gone to.
|
|
194
|
+
*/
|
|
195
|
+
@ColumnAccessControl({
|
|
196
|
+
create: [],
|
|
197
|
+
read: [],
|
|
198
|
+
update: [],
|
|
199
|
+
})
|
|
200
|
+
@TableColumn({
|
|
201
|
+
required: true,
|
|
202
|
+
type: TableColumnType.Email,
|
|
203
|
+
title: "To Email",
|
|
204
|
+
description: "Email address this notification was addressed to",
|
|
205
|
+
example: "jane@example.com",
|
|
206
|
+
})
|
|
207
|
+
@Column({
|
|
208
|
+
type: ColumnType.Email,
|
|
209
|
+
length: ColumnLength.Email,
|
|
210
|
+
nullable: false,
|
|
211
|
+
transformer: Email.getDatabaseTransformer(),
|
|
212
|
+
})
|
|
213
|
+
public toEmail?: Email = undefined;
|
|
214
|
+
|
|
215
|
+
/*
|
|
216
|
+
* LongText, NOT ShortText. NotificationSettingEventType's stored value is
|
|
217
|
+
* the prose sentence, not the member name - the longest today is 92
|
|
218
|
+
* characters, which leaves eight characters of headroom on a 100-character
|
|
219
|
+
* column. DatabaseService.checkMaxLengthOfFields THROWS on overflow, and
|
|
220
|
+
* the write path's catch is fail-open, so a ShortText column here would
|
|
221
|
+
* mean the day somebody writes a slightly longer event description every
|
|
222
|
+
* notification silently stops being recorded.
|
|
223
|
+
*/
|
|
224
|
+
@ColumnAccessControl({
|
|
225
|
+
create: [],
|
|
226
|
+
read: [],
|
|
227
|
+
update: [],
|
|
228
|
+
})
|
|
229
|
+
@TableColumn({
|
|
230
|
+
required: true,
|
|
231
|
+
type: TableColumnType.LongText,
|
|
232
|
+
title: "Event Type",
|
|
233
|
+
description: "The notification setting event type this email was sent for",
|
|
234
|
+
example:
|
|
235
|
+
"Send incident created notification when I am the owner of the incident",
|
|
236
|
+
})
|
|
237
|
+
@Column({
|
|
238
|
+
type: ColumnType.LongText,
|
|
239
|
+
length: ColumnLength.LongText,
|
|
240
|
+
nullable: false,
|
|
241
|
+
})
|
|
242
|
+
public eventType?: NotificationSettingEventType = undefined;
|
|
243
|
+
|
|
244
|
+
/*
|
|
245
|
+
* A stable machine code, never a display string, because it is persisted -
|
|
246
|
+
* the same hazard NotificationSettingEventType already carries. The burst
|
|
247
|
+
* counter is scoped by it, so a probe storm cannot defer the first incident
|
|
248
|
+
* email.
|
|
249
|
+
*/
|
|
250
|
+
@ColumnAccessControl({
|
|
251
|
+
create: [],
|
|
252
|
+
read: [],
|
|
253
|
+
update: [],
|
|
254
|
+
})
|
|
255
|
+
@TableColumn({
|
|
256
|
+
required: true,
|
|
257
|
+
type: TableColumnType.ShortText,
|
|
258
|
+
title: "Rollup Category",
|
|
259
|
+
description: "Category this notification is counted and grouped under",
|
|
260
|
+
example: "incidents",
|
|
261
|
+
})
|
|
262
|
+
@Column({
|
|
263
|
+
type: ColumnType.ShortText,
|
|
264
|
+
length: ColumnLength.ShortText,
|
|
265
|
+
nullable: false,
|
|
266
|
+
})
|
|
267
|
+
public rollupCategory?: RollupCategory = undefined;
|
|
268
|
+
|
|
269
|
+
/*
|
|
270
|
+
* The producer's already-human-written envelope subject, truncated to the
|
|
271
|
+
* column length in TypeScript before the insert. It is what a rollup line
|
|
272
|
+
* reads as, so nothing here is re-worded: the rollup says exactly what the
|
|
273
|
+
* individual emails would have said.
|
|
274
|
+
*/
|
|
275
|
+
@ColumnAccessControl({
|
|
276
|
+
create: [],
|
|
277
|
+
read: [],
|
|
278
|
+
update: [],
|
|
279
|
+
})
|
|
280
|
+
@TableColumn({
|
|
281
|
+
required: true,
|
|
282
|
+
type: TableColumnType.LongText,
|
|
283
|
+
title: "Subject",
|
|
284
|
+
description: "Subject line of the notification email",
|
|
285
|
+
example: "[Incident] Payments API is down",
|
|
286
|
+
})
|
|
287
|
+
@Column({
|
|
288
|
+
type: ColumnType.LongText,
|
|
289
|
+
length: ColumnLength.LongText,
|
|
290
|
+
nullable: false,
|
|
291
|
+
})
|
|
292
|
+
public subject?: string = undefined;
|
|
293
|
+
|
|
294
|
+
/*
|
|
295
|
+
* The deep link back into the dashboard, lifted out of the envelope vars,
|
|
296
|
+
* and also the key rows are folded on when the rollup is rendered - two
|
|
297
|
+
* notifications about the same incident collapse into one line with a
|
|
298
|
+
* count. VeryLongText (an unbounded text column) so no length check can
|
|
299
|
+
* ever throw on a URL somebody made long.
|
|
300
|
+
*/
|
|
301
|
+
@ColumnAccessControl({
|
|
302
|
+
create: [],
|
|
303
|
+
read: [],
|
|
304
|
+
update: [],
|
|
305
|
+
})
|
|
306
|
+
@TableColumn({
|
|
307
|
+
type: TableColumnType.VeryLongText,
|
|
308
|
+
title: "View Link",
|
|
309
|
+
description: "Deep link to the resource this notification is about",
|
|
310
|
+
example: "https://oneuptime.com/dashboard/incidents/1",
|
|
311
|
+
})
|
|
312
|
+
@Column({
|
|
313
|
+
type: ColumnType.VeryLongText,
|
|
314
|
+
nullable: true,
|
|
315
|
+
})
|
|
316
|
+
public viewLink?: string = undefined;
|
|
317
|
+
|
|
318
|
+
/*
|
|
319
|
+
* NULL means pending. Set at insert time for an immediate send, and by the
|
|
320
|
+
* flush claim - before the send, never after - for a deferred one. Nullable
|
|
321
|
+
* with no default is correct for every row that will ever exist, which is
|
|
322
|
+
* why the table needs no data migration.
|
|
323
|
+
*/
|
|
324
|
+
@ColumnAccessControl({
|
|
325
|
+
create: [],
|
|
326
|
+
read: [],
|
|
327
|
+
update: [],
|
|
328
|
+
})
|
|
329
|
+
@TableColumn({
|
|
330
|
+
type: TableColumnType.Date,
|
|
331
|
+
title: "Sent At",
|
|
332
|
+
description: "When this notification was sent; NULL while it is pending",
|
|
333
|
+
example: "2024-01-15T17:00:02.000Z",
|
|
334
|
+
})
|
|
335
|
+
@Column({
|
|
336
|
+
type: ColumnType.Date,
|
|
337
|
+
nullable: true,
|
|
338
|
+
})
|
|
339
|
+
public sentAt?: Date = undefined;
|
|
340
|
+
|
|
341
|
+
/*
|
|
342
|
+
* The batch that claimed this row, and a bare ObjectID column ON PURPOSE:
|
|
343
|
+
* no @ManyToOne, no foreign key. A CASCADE would delete queue items when
|
|
344
|
+
* their batch is pruned at ROLLUP_BATCH_RETENTION_DAYS, destroying the
|
|
345
|
+
* volume record the table exists to keep; a SET NULL would un-stamp them
|
|
346
|
+
* and hand a month-old rollup back to the sweep as pending work. Neither
|
|
347
|
+
* referential action is what we want, so there is no reference.
|
|
348
|
+
*
|
|
349
|
+
* It doubles as the accounting flag: NULL with sentAt set means the
|
|
350
|
+
* notification was sent immediately.
|
|
351
|
+
*/
|
|
352
|
+
@ColumnAccessControl({
|
|
353
|
+
create: [],
|
|
354
|
+
read: [],
|
|
355
|
+
update: [],
|
|
356
|
+
})
|
|
357
|
+
@TableColumn({
|
|
358
|
+
type: TableColumnType.ObjectID,
|
|
359
|
+
title: "Rollup Batch ID",
|
|
360
|
+
description:
|
|
361
|
+
"ID of the rollup batch that claimed this item; NULL if it was sent immediately",
|
|
362
|
+
example: "5f8b9c0d-e1a2-4b3c-8d5e-6f7a8b9c0d1e",
|
|
363
|
+
})
|
|
364
|
+
@Column({
|
|
365
|
+
type: ColumnType.ObjectID,
|
|
366
|
+
nullable: true,
|
|
367
|
+
transformer: ObjectID.getDatabaseTransformer(),
|
|
368
|
+
})
|
|
369
|
+
public rollupBatchId?: ObjectID = undefined;
|
|
370
|
+
}
|
|
@@ -0,0 +1,282 @@
|
|
|
1
|
+
import Project from "./Project";
|
|
2
|
+
import User from "./User";
|
|
3
|
+
import BaseModel from "./DatabaseBaseModel/DatabaseBaseModel";
|
|
4
|
+
import Route from "../../Types/API/Route";
|
|
5
|
+
import AllowAccessIfSubscriptionIsUnpaid from "../../Types/Database/AccessControl/AllowAccessIfSubscriptionIsUnpaid";
|
|
6
|
+
import ColumnAccessControl from "../../Types/Database/AccessControl/ColumnAccessControl";
|
|
7
|
+
import TableAccessControl from "../../Types/Database/AccessControl/TableAccessControl";
|
|
8
|
+
import ColumnType from "../../Types/Database/ColumnType";
|
|
9
|
+
import CrudApiEndpoint from "../../Types/Database/CrudApiEndpoint";
|
|
10
|
+
import CurrentUserCanAccessRecordBy from "../../Types/Database/CurrentUserCanAccessRecordBy";
|
|
11
|
+
import TableColumn from "../../Types/Database/TableColumn";
|
|
12
|
+
import TableColumnType from "../../Types/Database/TableColumnType";
|
|
13
|
+
import TableMetadata from "../../Types/Database/TableMetadata";
|
|
14
|
+
import TenantColumn from "../../Types/Database/TenantColumn";
|
|
15
|
+
import IconProp from "../../Types/Icon/IconProp";
|
|
16
|
+
import ObjectID from "../../Types/ObjectID";
|
|
17
|
+
import Permission from "../../Types/Permission";
|
|
18
|
+
import { Column, Entity, Index, JoinColumn, ManyToOne } from "typeorm";
|
|
19
|
+
|
|
20
|
+
/*
|
|
21
|
+
* One person's answer, in one project, to "may OneUptime hold my owner
|
|
22
|
+
* notification emails back during a burst?"
|
|
23
|
+
*
|
|
24
|
+
* WHY THIS IS ITS OWN TABLE RATHER THAN A COLUMN ON UserNotificationSetting.
|
|
25
|
+
* That table is keyed on (user, project, eventType) and a member has 26 rows in
|
|
26
|
+
* it. "Do not batch my email" is one answer, not twenty-six, and putting it
|
|
27
|
+
* there would mean a single toggle had to write every row - twenty-six API
|
|
28
|
+
* calls, twenty-six chances to half-apply, and a state where a user is opted
|
|
29
|
+
* out of batching for incidents but not for alerts because one write failed.
|
|
30
|
+
* One row per (user, project) is the shape of the actual preference.
|
|
31
|
+
*
|
|
32
|
+
* WHY ABSENT MEANS ENABLED. Burst rollup is on by default and there is no
|
|
33
|
+
* backfill, so the overwhelming majority of users will never have a row here.
|
|
34
|
+
* The read path treats "no row" and "isEnabled = true" identically, which is
|
|
35
|
+
* what lets this ship without touching a single existing install's data.
|
|
36
|
+
*
|
|
37
|
+
* WHY IT IS NOT PROJECT-SCOPED POLICY. An admin turning batching off for
|
|
38
|
+
* everybody is a different feature with a different blast radius. This is the
|
|
39
|
+
* escape hatch for the individual whose inbox filters, or whose habits, depend
|
|
40
|
+
* on one email per event - and their colleague in the same project is
|
|
41
|
+
* unaffected by their choice.
|
|
42
|
+
*/
|
|
43
|
+
@TenantColumn("projectId")
|
|
44
|
+
@AllowAccessIfSubscriptionIsUnpaid()
|
|
45
|
+
@TableAccessControl({
|
|
46
|
+
create: [Permission.CurrentUser],
|
|
47
|
+
read: [Permission.CurrentUser],
|
|
48
|
+
delete: [Permission.CurrentUser],
|
|
49
|
+
update: [Permission.CurrentUser],
|
|
50
|
+
})
|
|
51
|
+
@CrudApiEndpoint(new Route("/user-notification-email-rollup-setting"))
|
|
52
|
+
@Entity({
|
|
53
|
+
name: "UserNotificationEmailRollupSetting",
|
|
54
|
+
})
|
|
55
|
+
@TableMetadata({
|
|
56
|
+
tableName: "UserNotificationEmailRollupSetting",
|
|
57
|
+
singularName: "Email Rollup Setting",
|
|
58
|
+
pluralName: "Email Rollup Settings",
|
|
59
|
+
icon: IconProp.Email,
|
|
60
|
+
tableDescription:
|
|
61
|
+
"Whether this user's owner notification emails may be coalesced into a single rollup email during a burst.",
|
|
62
|
+
})
|
|
63
|
+
@CurrentUserCanAccessRecordBy("userId")
|
|
64
|
+
class UserNotificationEmailRollupSetting extends BaseModel {
|
|
65
|
+
@ColumnAccessControl({
|
|
66
|
+
create: [Permission.CurrentUser],
|
|
67
|
+
read: [Permission.CurrentUser],
|
|
68
|
+
update: [],
|
|
69
|
+
})
|
|
70
|
+
@TableColumn({
|
|
71
|
+
manyToOneRelationColumn: "projectId",
|
|
72
|
+
type: TableColumnType.Entity,
|
|
73
|
+
modelType: Project,
|
|
74
|
+
title: "Project",
|
|
75
|
+
description: "Relation to Project Resource in which this object belongs",
|
|
76
|
+
})
|
|
77
|
+
@ManyToOne(
|
|
78
|
+
() => {
|
|
79
|
+
return Project;
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
eager: false,
|
|
83
|
+
nullable: true,
|
|
84
|
+
onDelete: "CASCADE",
|
|
85
|
+
orphanedRowAction: "nullify",
|
|
86
|
+
},
|
|
87
|
+
)
|
|
88
|
+
@JoinColumn({ name: "projectId" })
|
|
89
|
+
public project?: Project = undefined;
|
|
90
|
+
|
|
91
|
+
@ColumnAccessControl({
|
|
92
|
+
create: [Permission.CurrentUser],
|
|
93
|
+
read: [Permission.CurrentUser],
|
|
94
|
+
update: [],
|
|
95
|
+
})
|
|
96
|
+
@Index()
|
|
97
|
+
@TableColumn({
|
|
98
|
+
type: TableColumnType.ObjectID,
|
|
99
|
+
required: true,
|
|
100
|
+
canReadOnRelationQuery: true,
|
|
101
|
+
title: "Project ID",
|
|
102
|
+
description: "ID of your OneUptime Project in which this object belongs",
|
|
103
|
+
example: "5f8b9c0d-e1a2-4b3c-8d5e-6f7a8b9c0d1e",
|
|
104
|
+
})
|
|
105
|
+
@Column({
|
|
106
|
+
type: ColumnType.ObjectID,
|
|
107
|
+
nullable: false,
|
|
108
|
+
transformer: ObjectID.getDatabaseTransformer(),
|
|
109
|
+
})
|
|
110
|
+
public projectId?: ObjectID = undefined;
|
|
111
|
+
|
|
112
|
+
@ColumnAccessControl({
|
|
113
|
+
create: [Permission.CurrentUser],
|
|
114
|
+
read: [Permission.CurrentUser],
|
|
115
|
+
update: [],
|
|
116
|
+
})
|
|
117
|
+
@TableColumn({
|
|
118
|
+
manyToOneRelationColumn: "userId",
|
|
119
|
+
type: TableColumnType.Entity,
|
|
120
|
+
modelType: User,
|
|
121
|
+
title: "User",
|
|
122
|
+
description: "Relation to the User whose preference this is",
|
|
123
|
+
})
|
|
124
|
+
@ManyToOne(
|
|
125
|
+
() => {
|
|
126
|
+
return User;
|
|
127
|
+
},
|
|
128
|
+
{
|
|
129
|
+
eager: false,
|
|
130
|
+
nullable: true,
|
|
131
|
+
onDelete: "CASCADE",
|
|
132
|
+
orphanedRowAction: "nullify",
|
|
133
|
+
},
|
|
134
|
+
)
|
|
135
|
+
@JoinColumn({ name: "userId" })
|
|
136
|
+
public user?: User = undefined;
|
|
137
|
+
|
|
138
|
+
@ColumnAccessControl({
|
|
139
|
+
create: [Permission.CurrentUser],
|
|
140
|
+
read: [Permission.CurrentUser],
|
|
141
|
+
update: [],
|
|
142
|
+
})
|
|
143
|
+
@Index()
|
|
144
|
+
@TableColumn({
|
|
145
|
+
type: TableColumnType.ObjectID,
|
|
146
|
+
required: true,
|
|
147
|
+
canReadOnRelationQuery: true,
|
|
148
|
+
title: "User ID",
|
|
149
|
+
description: "ID of the User whose preference this is",
|
|
150
|
+
example: "7c9d8e0f-a1b2-4c3d-9e5f-8a7b9c0d1e2f",
|
|
151
|
+
})
|
|
152
|
+
@Column({
|
|
153
|
+
type: ColumnType.ObjectID,
|
|
154
|
+
nullable: false,
|
|
155
|
+
transformer: ObjectID.getDatabaseTransformer(),
|
|
156
|
+
})
|
|
157
|
+
public userId?: ObjectID = undefined;
|
|
158
|
+
|
|
159
|
+
/*
|
|
160
|
+
* TRUE means "you may hold my email back during a burst" and is the default
|
|
161
|
+
* for everybody, including every user who has no row here at all. FALSE is
|
|
162
|
+
* the escape hatch: every owner notification arrives as its own email the
|
|
163
|
+
* moment it happens, exactly as the product behaved before rollup existed.
|
|
164
|
+
*
|
|
165
|
+
* Nothing about this reaches an on-call page, an authentication email or a
|
|
166
|
+
* billing notice - none of those cross the seam this preference is read at,
|
|
167
|
+
* so there is no setting here that can make somebody unreachable.
|
|
168
|
+
*/
|
|
169
|
+
@ColumnAccessControl({
|
|
170
|
+
create: [Permission.CurrentUser],
|
|
171
|
+
read: [Permission.CurrentUser],
|
|
172
|
+
update: [Permission.CurrentUser],
|
|
173
|
+
})
|
|
174
|
+
@TableColumn({
|
|
175
|
+
isDefaultValueColumn: true,
|
|
176
|
+
type: TableColumnType.Boolean,
|
|
177
|
+
title: "Roll Up Notification Emails",
|
|
178
|
+
description:
|
|
179
|
+
"When on, owner notification emails that arrive in a burst are delivered as a single rollup email. When off, every notification is emailed individually and immediately.",
|
|
180
|
+
defaultValue: true,
|
|
181
|
+
example: true,
|
|
182
|
+
})
|
|
183
|
+
@Column({
|
|
184
|
+
type: ColumnType.Boolean,
|
|
185
|
+
default: true,
|
|
186
|
+
})
|
|
187
|
+
public isEnabled?: boolean = undefined;
|
|
188
|
+
|
|
189
|
+
@ColumnAccessControl({
|
|
190
|
+
create: [Permission.CurrentUser],
|
|
191
|
+
read: [Permission.CurrentUser],
|
|
192
|
+
update: [],
|
|
193
|
+
})
|
|
194
|
+
@TableColumn({
|
|
195
|
+
manyToOneRelationColumn: "createdByUserId",
|
|
196
|
+
type: TableColumnType.Entity,
|
|
197
|
+
modelType: User,
|
|
198
|
+
title: "Created by User",
|
|
199
|
+
description:
|
|
200
|
+
"Relation to User who created this object (if this object was created by a User)",
|
|
201
|
+
})
|
|
202
|
+
@ManyToOne(
|
|
203
|
+
() => {
|
|
204
|
+
return User;
|
|
205
|
+
},
|
|
206
|
+
{
|
|
207
|
+
eager: false,
|
|
208
|
+
nullable: true,
|
|
209
|
+
onDelete: "SET NULL",
|
|
210
|
+
orphanedRowAction: "nullify",
|
|
211
|
+
},
|
|
212
|
+
)
|
|
213
|
+
@JoinColumn({ name: "createdByUserId" })
|
|
214
|
+
public createdByUser?: User = undefined;
|
|
215
|
+
|
|
216
|
+
@ColumnAccessControl({
|
|
217
|
+
create: [Permission.CurrentUser],
|
|
218
|
+
read: [Permission.CurrentUser],
|
|
219
|
+
update: [],
|
|
220
|
+
})
|
|
221
|
+
@TableColumn({
|
|
222
|
+
type: TableColumnType.ObjectID,
|
|
223
|
+
title: "Created by User ID",
|
|
224
|
+
description:
|
|
225
|
+
"User ID who created this object (if this object was created by a User)",
|
|
226
|
+
example: "7c9d8e0f-a1b2-4c3d-9e5f-8a7b9c0d1e2f",
|
|
227
|
+
})
|
|
228
|
+
@Column({
|
|
229
|
+
type: ColumnType.ObjectID,
|
|
230
|
+
nullable: true,
|
|
231
|
+
transformer: ObjectID.getDatabaseTransformer(),
|
|
232
|
+
})
|
|
233
|
+
public createdByUserId?: ObjectID = undefined;
|
|
234
|
+
|
|
235
|
+
@ColumnAccessControl({
|
|
236
|
+
create: [Permission.CurrentUser],
|
|
237
|
+
read: [Permission.CurrentUser],
|
|
238
|
+
update: [],
|
|
239
|
+
})
|
|
240
|
+
@TableColumn({
|
|
241
|
+
manyToOneRelationColumn: "deletedByUserId",
|
|
242
|
+
type: TableColumnType.Entity,
|
|
243
|
+
title: "Deleted by User",
|
|
244
|
+
modelType: User,
|
|
245
|
+
description:
|
|
246
|
+
"Relation to User who deleted this object (if this object was deleted by a User)",
|
|
247
|
+
})
|
|
248
|
+
@ManyToOne(
|
|
249
|
+
() => {
|
|
250
|
+
return User;
|
|
251
|
+
},
|
|
252
|
+
{
|
|
253
|
+
eager: false,
|
|
254
|
+
nullable: true,
|
|
255
|
+
onDelete: "SET NULL",
|
|
256
|
+
orphanedRowAction: "nullify",
|
|
257
|
+
},
|
|
258
|
+
)
|
|
259
|
+
@JoinColumn({ name: "deletedByUserId" })
|
|
260
|
+
public deletedByUser?: User = undefined;
|
|
261
|
+
|
|
262
|
+
@ColumnAccessControl({
|
|
263
|
+
create: [Permission.CurrentUser],
|
|
264
|
+
read: [Permission.CurrentUser],
|
|
265
|
+
update: [],
|
|
266
|
+
})
|
|
267
|
+
@TableColumn({
|
|
268
|
+
type: TableColumnType.ObjectID,
|
|
269
|
+
title: "Deleted by User ID",
|
|
270
|
+
description:
|
|
271
|
+
"User ID who deleted this object (if this object was deleted by a User)",
|
|
272
|
+
example: "7c9d8e0f-a1b2-4c3d-9e5f-8a7b9c0d1e2f",
|
|
273
|
+
})
|
|
274
|
+
@Column({
|
|
275
|
+
type: ColumnType.ObjectID,
|
|
276
|
+
nullable: true,
|
|
277
|
+
transformer: ObjectID.getDatabaseTransformer(),
|
|
278
|
+
})
|
|
279
|
+
public deletedByUserId?: ObjectID = undefined;
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
export default UserNotificationEmailRollupSetting;
|