@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
|
@@ -2,6 +2,16 @@ import Telemetry, {
|
|
|
2
2
|
Span,
|
|
3
3
|
SpanStatusCode,
|
|
4
4
|
} from "../../../Server/Utils/Telemetry";
|
|
5
|
+
import TelemetryContext from "../../../Server/Utils/Telemetry/TelemetryContext";
|
|
6
|
+
import ErrorClass from "../../../Types/Telemetry/ErrorClass";
|
|
7
|
+
import {
|
|
8
|
+
UNIT_OF_WORK_ATTRIBUTE_KEY,
|
|
9
|
+
UnitOfWork,
|
|
10
|
+
} from "../../../Types/Telemetry/UnitOfWork";
|
|
11
|
+
import BadDataException from "../../../Types/Exception/BadDataException";
|
|
12
|
+
import NotAuthenticatedException from "../../../Types/Exception/NotAuthenticatedException";
|
|
13
|
+
import ServerException from "../../../Types/Exception/ServerException";
|
|
14
|
+
import TimeoutException from "../../../Types/Exception/TimeoutException";
|
|
5
15
|
import {
|
|
6
16
|
afterAll,
|
|
7
17
|
beforeAll,
|
|
@@ -11,6 +21,18 @@ import {
|
|
|
11
21
|
test,
|
|
12
22
|
} from "@jest/globals";
|
|
13
23
|
|
|
24
|
+
/*
|
|
25
|
+
* Run `fn` as though it were inside an HTTP request. ErrorClassResolver only
|
|
26
|
+
* honours user-error / expected-denial inside one; everywhere else those
|
|
27
|
+
* classes are promoted back to code-fault.
|
|
28
|
+
*/
|
|
29
|
+
function runInHttpRequest<T>(fn: () => T): T {
|
|
30
|
+
return TelemetryContext.runWithContext(
|
|
31
|
+
{ [UNIT_OF_WORK_ATTRIBUTE_KEY]: UnitOfWork.HttpRequest },
|
|
32
|
+
fn,
|
|
33
|
+
);
|
|
34
|
+
}
|
|
35
|
+
|
|
14
36
|
type ExceptionAttributes = Record<string, string | undefined>;
|
|
15
37
|
|
|
16
38
|
// getExceptionAttributes is a private static; reach it through a narrow cast.
|
|
@@ -214,58 +236,80 @@ describe("Telemetry.getExceptionAttributes", () => {
|
|
|
214
236
|
});
|
|
215
237
|
});
|
|
216
238
|
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
239
|
+
type FakeSpanEvent = {
|
|
240
|
+
name: string;
|
|
241
|
+
attributes: Record<string, unknown>;
|
|
242
|
+
};
|
|
243
|
+
|
|
244
|
+
type FakeSpanState = {
|
|
245
|
+
attributes: Record<string, unknown> | null;
|
|
246
|
+
status: { code: number; message?: string } | null;
|
|
247
|
+
events: Array<FakeSpanEvent>;
|
|
248
|
+
ended: number;
|
|
249
|
+
};
|
|
224
250
|
|
|
251
|
+
function newSpanState(): FakeSpanState {
|
|
252
|
+
return { attributes: null, status: null, events: [], ended: 0 };
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
function makeFakeSpan(
|
|
256
|
+
state: FakeSpanState,
|
|
257
|
+
opts?: { throwOnSetAttributes?: boolean },
|
|
258
|
+
): Span {
|
|
259
|
+
return {
|
|
260
|
+
setAttributes: (a: Record<string, unknown>): unknown => {
|
|
261
|
+
if (opts?.throwOnSetAttributes) {
|
|
262
|
+
throw new Error("setAttributes blew up");
|
|
263
|
+
}
|
|
264
|
+
state.attributes = { ...(state.attributes || {}), ...a };
|
|
265
|
+
return undefined;
|
|
266
|
+
},
|
|
267
|
+
addEvent: (name: string, attributes: Record<string, unknown>): unknown => {
|
|
268
|
+
state.events.push({ name: name, attributes: attributes || {} });
|
|
269
|
+
return undefined;
|
|
270
|
+
},
|
|
271
|
+
setStatus: (s: { code: number; message?: string }): unknown => {
|
|
272
|
+
state.status = s;
|
|
273
|
+
return undefined;
|
|
274
|
+
},
|
|
275
|
+
end: function (this: { endTime?: Array<number> }): void {
|
|
276
|
+
state.ended += 1;
|
|
277
|
+
|
|
278
|
+
/*
|
|
279
|
+
* Stamp endTime the way sdk-trace-base does, so Telemetry.endSpan's
|
|
280
|
+
* already-ended guard has something to read. Without it the double-end
|
|
281
|
+
* case below would pass for the wrong reason.
|
|
282
|
+
*/
|
|
283
|
+
if (Array.isArray(this?.endTime)) {
|
|
284
|
+
this.endTime = [1700000000, 0];
|
|
285
|
+
}
|
|
286
|
+
},
|
|
287
|
+
} as unknown as Span;
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
function eventsNamed(state: FakeSpanState, name: string): Array<FakeSpanEvent> {
|
|
291
|
+
return state.events.filter((e: FakeSpanEvent): boolean => {
|
|
292
|
+
return e.name === name;
|
|
293
|
+
});
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
describe("Telemetry.recordExceptionMarkSpanAsErrorAndEndSpan", () => {
|
|
225
297
|
// Silence the logger.error console output these tests intentionally trigger.
|
|
226
298
|
beforeAll((): void => {
|
|
227
299
|
jest.spyOn(console, "error").mockImplementation((): void => {
|
|
228
300
|
return undefined;
|
|
229
301
|
});
|
|
302
|
+
jest.spyOn(console, "warn").mockImplementation((): void => {
|
|
303
|
+
return undefined;
|
|
304
|
+
});
|
|
230
305
|
});
|
|
231
306
|
|
|
232
307
|
afterAll((): void => {
|
|
233
308
|
jest.restoreAllMocks();
|
|
234
309
|
});
|
|
235
310
|
|
|
236
|
-
function makeFakeSpan(
|
|
237
|
-
state: FakeSpanState,
|
|
238
|
-
opts?: { throwOnSetAttributes?: boolean },
|
|
239
|
-
): Span {
|
|
240
|
-
return {
|
|
241
|
-
setAttributes: (a: Record<string, unknown>): unknown => {
|
|
242
|
-
if (opts?.throwOnSetAttributes) {
|
|
243
|
-
throw new Error("setAttributes blew up");
|
|
244
|
-
}
|
|
245
|
-
state.attributes = a;
|
|
246
|
-
return undefined;
|
|
247
|
-
},
|
|
248
|
-
recordException: (e: unknown): unknown => {
|
|
249
|
-
state.recorded = e;
|
|
250
|
-
return undefined;
|
|
251
|
-
},
|
|
252
|
-
setStatus: (s: { code: number; message?: string }): unknown => {
|
|
253
|
-
state.status = s;
|
|
254
|
-
return undefined;
|
|
255
|
-
},
|
|
256
|
-
end: (): void => {
|
|
257
|
-
state.ended += 1;
|
|
258
|
-
},
|
|
259
|
-
} as unknown as Span;
|
|
260
|
-
}
|
|
261
|
-
|
|
262
311
|
test("marks the span as error with a message and ends it", () => {
|
|
263
|
-
const state: FakeSpanState =
|
|
264
|
-
attributes: null,
|
|
265
|
-
status: null,
|
|
266
|
-
recorded: null,
|
|
267
|
-
ended: 0,
|
|
268
|
-
};
|
|
312
|
+
const state: FakeSpanState = newSpanState();
|
|
269
313
|
|
|
270
314
|
Telemetry.recordExceptionMarkSpanAsErrorAndEndSpan({
|
|
271
315
|
span: makeFakeSpan(state),
|
|
@@ -282,47 +326,44 @@ describe("Telemetry.recordExceptionMarkSpanAsErrorAndEndSpan", () => {
|
|
|
282
326
|
* THE REGRESSION THIS GUARDS. The OTel SDK reads `exception.code` BEFORE
|
|
283
327
|
* `exception.name` when it derives the exception event's `exception.type`,
|
|
284
328
|
* and OneUptime's Exception base exposes an HTTP STATUS as `code`. Handing
|
|
285
|
-
* the raw thrown value to recordException therefore typed every
|
|
286
|
-
* this platform raises "401"/"400"/"500" — which is hashed into
|
|
287
|
-
* TelemetryException group fingerprint and rendered as the AI insight
|
|
329
|
+
* the raw thrown value to span.recordException therefore typed every
|
|
330
|
+
* exception this platform raises "401"/"400"/"500" — which is hashed into
|
|
331
|
+
* the TelemetryException group fingerprint and rendered as the AI insight
|
|
288
332
|
* title, collapsing a service's unrelated failures into one indistinct row.
|
|
289
|
-
*
|
|
333
|
+
*
|
|
334
|
+
* The event is now constructed here rather than delegated to
|
|
335
|
+
* recordException, which removes the trap structurally: the SDK never sees
|
|
336
|
+
* the thrown object at all.
|
|
290
337
|
*/
|
|
291
|
-
test("
|
|
292
|
-
class
|
|
338
|
+
test("emits an exception event typed by class name, never by an HTTP status", () => {
|
|
339
|
+
class SomeAuthException extends Error {
|
|
293
340
|
public code: number = 401;
|
|
294
341
|
}
|
|
295
342
|
|
|
296
|
-
const state: FakeSpanState =
|
|
297
|
-
attributes: null,
|
|
298
|
-
status: null,
|
|
299
|
-
recorded: null,
|
|
300
|
-
ended: 0,
|
|
301
|
-
};
|
|
343
|
+
const state: FakeSpanState = newSpanState();
|
|
302
344
|
|
|
303
345
|
Telemetry.recordExceptionMarkSpanAsErrorAndEndSpan({
|
|
304
346
|
span: makeFakeSpan(state),
|
|
305
|
-
exception: new
|
|
347
|
+
exception: new SomeAuthException("needs an API key"),
|
|
306
348
|
});
|
|
307
349
|
|
|
308
|
-
const
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
350
|
+
const exceptionEvents: Array<FakeSpanEvent> = eventsNamed(
|
|
351
|
+
state,
|
|
352
|
+
"exception",
|
|
353
|
+
);
|
|
354
|
+
|
|
355
|
+
expect(exceptionEvents).toHaveLength(1);
|
|
312
356
|
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
expect(
|
|
316
|
-
expect(
|
|
357
|
+
const attributes: Record<string, unknown> = exceptionEvents[0]!.attributes;
|
|
358
|
+
|
|
359
|
+
expect(attributes["exception.type"]).toBe("SomeAuthException");
|
|
360
|
+
expect(attributes["exception.type"]).not.toBe("401");
|
|
361
|
+
expect(attributes["exception.message"]).toBe("needs an API key");
|
|
362
|
+
expect(typeof attributes["exception.stacktrace"]).toBe("string");
|
|
317
363
|
});
|
|
318
364
|
|
|
319
365
|
test("still ends and flags the span even if a span write throws", () => {
|
|
320
|
-
const state: FakeSpanState =
|
|
321
|
-
attributes: null,
|
|
322
|
-
status: null,
|
|
323
|
-
recorded: null,
|
|
324
|
-
ended: 0,
|
|
325
|
-
};
|
|
366
|
+
const state: FakeSpanState = newSpanState();
|
|
326
367
|
const span: Span = makeFakeSpan(state, { throwOnSetAttributes: true });
|
|
327
368
|
|
|
328
369
|
expect((): void => {
|
|
@@ -336,3 +377,352 @@ describe("Telemetry.recordExceptionMarkSpanAsErrorAndEndSpan", () => {
|
|
|
336
377
|
expect(state.status?.code).toBe(SpanStatusCode.ERROR);
|
|
337
378
|
});
|
|
338
379
|
});
|
|
380
|
+
|
|
381
|
+
/*
|
|
382
|
+
* The behaviour that keeps user errors out of the Issues list.
|
|
383
|
+
*
|
|
384
|
+
* Ingest builds an ExceptionInstance row and a TelemetryException group for
|
|
385
|
+
* every span event literally named "exception" and for nothing else, so the
|
|
386
|
+
* event NAME is the entire mechanism. These tests pin the name, the absence of
|
|
387
|
+
* a status write, the absence of exception.* keys on the fault event (which
|
|
388
|
+
* would let the log-derived exception path resurrect it), and the fact that
|
|
389
|
+
* nothing is destroyed.
|
|
390
|
+
*/
|
|
391
|
+
describe("Telemetry fault classification", () => {
|
|
392
|
+
beforeAll((): void => {
|
|
393
|
+
jest.spyOn(console, "error").mockImplementation((): void => {
|
|
394
|
+
return undefined;
|
|
395
|
+
});
|
|
396
|
+
jest.spyOn(console, "warn").mockImplementation((): void => {
|
|
397
|
+
return undefined;
|
|
398
|
+
});
|
|
399
|
+
});
|
|
400
|
+
|
|
401
|
+
afterAll((): void => {
|
|
402
|
+
jest.restoreAllMocks();
|
|
403
|
+
});
|
|
404
|
+
|
|
405
|
+
test("a code-fault emits exactly one exception event and sets ERROR", () => {
|
|
406
|
+
const state: FakeSpanState = newSpanState();
|
|
407
|
+
|
|
408
|
+
Telemetry.recordExceptionOnSpan({
|
|
409
|
+
span: makeFakeSpan(state),
|
|
410
|
+
exception: new ServerException("database is on fire"),
|
|
411
|
+
});
|
|
412
|
+
|
|
413
|
+
expect(eventsNamed(state, "exception")).toHaveLength(1);
|
|
414
|
+
expect(eventsNamed(state, "fault")).toHaveLength(0);
|
|
415
|
+
expect(state.status?.code).toBe(SpanStatusCode.ERROR);
|
|
416
|
+
expect((state.attributes || {})["error.class"]).toBe(ErrorClass.CodeFault);
|
|
417
|
+
});
|
|
418
|
+
|
|
419
|
+
test("an infrastructure fault stays an exception event and stays ERROR", () => {
|
|
420
|
+
const state: FakeSpanState = newSpanState();
|
|
421
|
+
|
|
422
|
+
Telemetry.recordExceptionOnSpan({
|
|
423
|
+
span: makeFakeSpan(state),
|
|
424
|
+
exception: new TimeoutException("upstream timed out"),
|
|
425
|
+
});
|
|
426
|
+
|
|
427
|
+
expect(eventsNamed(state, "exception")).toHaveLength(1);
|
|
428
|
+
expect(state.status?.code).toBe(SpanStatusCode.ERROR);
|
|
429
|
+
expect((state.attributes || {})["error.class"]).toBe(
|
|
430
|
+
ErrorClass.Infrastructure,
|
|
431
|
+
);
|
|
432
|
+
});
|
|
433
|
+
|
|
434
|
+
test("a user error inside a request emits a fault event, no exception event, and no status write", () => {
|
|
435
|
+
const state: FakeSpanState = newSpanState();
|
|
436
|
+
|
|
437
|
+
runInHttpRequest((): void => {
|
|
438
|
+
Telemetry.recordExceptionOnSpan({
|
|
439
|
+
span: makeFakeSpan(state),
|
|
440
|
+
exception: new BadDataException("Name is required"),
|
|
441
|
+
});
|
|
442
|
+
});
|
|
443
|
+
|
|
444
|
+
expect(eventsNamed(state, "exception")).toHaveLength(0);
|
|
445
|
+
|
|
446
|
+
const faults: Array<FakeSpanEvent> = eventsNamed(state, "fault");
|
|
447
|
+
expect(faults).toHaveLength(1);
|
|
448
|
+
|
|
449
|
+
/*
|
|
450
|
+
* OTel says a 4xx on a SERVER span must stay Unset, and
|
|
451
|
+
* setStatus({code: UNSET}) is a documented no-op — so "leave it unset" is
|
|
452
|
+
* implemented as "never call setStatus". Assert the call never happened,
|
|
453
|
+
* not that it was called with UNSET.
|
|
454
|
+
*/
|
|
455
|
+
expect(state.status).toBeNull();
|
|
456
|
+
});
|
|
457
|
+
|
|
458
|
+
test("the fault event carries NO exception.* keys, so the log-derived path cannot resurrect it", () => {
|
|
459
|
+
const state: FakeSpanState = newSpanState();
|
|
460
|
+
|
|
461
|
+
runInHttpRequest((): void => {
|
|
462
|
+
Telemetry.recordExceptionOnSpan({
|
|
463
|
+
span: makeFakeSpan(state),
|
|
464
|
+
exception: new NotAuthenticatedException("token expired"),
|
|
465
|
+
});
|
|
466
|
+
});
|
|
467
|
+
|
|
468
|
+
const attributes: Record<string, unknown> = eventsNamed(state, "fault")[0]!
|
|
469
|
+
.attributes;
|
|
470
|
+
|
|
471
|
+
for (const key of Object.keys(attributes)) {
|
|
472
|
+
expect(key.startsWith("exception.")).toBe(false);
|
|
473
|
+
}
|
|
474
|
+
|
|
475
|
+
expect(attributes["error.class"]).toBe(ErrorClass.ExpectedDenial);
|
|
476
|
+
expect(attributes["error.type"]).toBe("NotAuthenticatedException");
|
|
477
|
+
expect(attributes["error.message"]).toBe("token expired");
|
|
478
|
+
});
|
|
479
|
+
|
|
480
|
+
/*
|
|
481
|
+
* NOTHING IS DESTROYED. The suppressed error is still fully described on the
|
|
482
|
+
* span, so the audit query `attributes.error.class = 'user-error'` in the
|
|
483
|
+
* Traces explorer finds every one of them.
|
|
484
|
+
*/
|
|
485
|
+
test("a suppressed fault still records the full exception attribute bag on the span", () => {
|
|
486
|
+
const state: FakeSpanState = newSpanState();
|
|
487
|
+
|
|
488
|
+
runInHttpRequest((): void => {
|
|
489
|
+
Telemetry.recordExceptionOnSpan({
|
|
490
|
+
span: makeFakeSpan(state),
|
|
491
|
+
exception: new BadDataException("Name is required"),
|
|
492
|
+
});
|
|
493
|
+
});
|
|
494
|
+
|
|
495
|
+
const attributes: Record<string, unknown> = state.attributes || {};
|
|
496
|
+
|
|
497
|
+
expect(attributes["exception.type"]).toBe("BadDataException");
|
|
498
|
+
expect(attributes["exception.message"]).toBe("Name is required");
|
|
499
|
+
expect(attributes["error.class"]).toBe(ErrorClass.UserError);
|
|
500
|
+
});
|
|
501
|
+
|
|
502
|
+
/*
|
|
503
|
+
* THE PROMOTION GUARD. BadDataException is used for two different things in
|
|
504
|
+
* this repo — rejecting a caller's input, and asserting an internal
|
|
505
|
+
* invariant. They are indistinguishable at the throw site and perfectly
|
|
506
|
+
* distinguishable by unit of work.
|
|
507
|
+
*/
|
|
508
|
+
test("a user-error class OUTSIDE a request is promoted back to code-fault", () => {
|
|
509
|
+
const state: FakeSpanState = newSpanState();
|
|
510
|
+
|
|
511
|
+
TelemetryContext.runWithContext(
|
|
512
|
+
{ [UNIT_OF_WORK_ATTRIBUTE_KEY]: UnitOfWork.WorkerJob },
|
|
513
|
+
(): void => {
|
|
514
|
+
Telemetry.recordExceptionOnSpan({
|
|
515
|
+
span: makeFakeSpan(state),
|
|
516
|
+
exception: new BadDataException("No job found with name: foo"),
|
|
517
|
+
});
|
|
518
|
+
},
|
|
519
|
+
);
|
|
520
|
+
|
|
521
|
+
expect(eventsNamed(state, "exception")).toHaveLength(1);
|
|
522
|
+
expect(eventsNamed(state, "fault")).toHaveLength(0);
|
|
523
|
+
expect(state.status?.code).toBe(SpanStatusCode.ERROR);
|
|
524
|
+
expect((state.attributes || {})["error.class"]).toBe(ErrorClass.CodeFault);
|
|
525
|
+
});
|
|
526
|
+
|
|
527
|
+
test("with no telemetry scope at all, a user-error class is promoted to code-fault", () => {
|
|
528
|
+
const state: FakeSpanState = newSpanState();
|
|
529
|
+
|
|
530
|
+
Telemetry.recordExceptionOnSpan({
|
|
531
|
+
span: makeFakeSpan(state),
|
|
532
|
+
exception: new BadDataException("something internal went wrong"),
|
|
533
|
+
});
|
|
534
|
+
|
|
535
|
+
expect(eventsNamed(state, "exception")).toHaveLength(1);
|
|
536
|
+
expect((state.attributes || {})["error.class"]).toBe(ErrorClass.CodeFault);
|
|
537
|
+
});
|
|
538
|
+
|
|
539
|
+
/*
|
|
540
|
+
* An authoritative, site-level declaration is a developer's judgment about
|
|
541
|
+
* one specific place, so it is exempt from the promotion — which is what
|
|
542
|
+
* lets a probe say "the endpoint we were asked to check is down" outside any
|
|
543
|
+
* HTTP request.
|
|
544
|
+
*/
|
|
545
|
+
test("an authoritative site-level declaration survives outside a request", () => {
|
|
546
|
+
const state: FakeSpanState = newSpanState();
|
|
547
|
+
|
|
548
|
+
TelemetryContext.runWithContext(
|
|
549
|
+
{ [UNIT_OF_WORK_ATTRIBUTE_KEY]: UnitOfWork.ProbeCheck },
|
|
550
|
+
(): void => {
|
|
551
|
+
Telemetry.recordExceptionOnSpan({
|
|
552
|
+
span: makeFakeSpan(state),
|
|
553
|
+
exception: new BadDataException(
|
|
554
|
+
"customer endpoint refused connection",
|
|
555
|
+
).asUserError(),
|
|
556
|
+
});
|
|
557
|
+
},
|
|
558
|
+
);
|
|
559
|
+
|
|
560
|
+
expect(eventsNamed(state, "fault")).toHaveLength(1);
|
|
561
|
+
expect(eventsNamed(state, "exception")).toHaveLength(0);
|
|
562
|
+
});
|
|
563
|
+
|
|
564
|
+
/*
|
|
565
|
+
* THE B2 REGRESSION GUARD, and nothing covered this before.
|
|
566
|
+
*
|
|
567
|
+
* One error crossing N decorated frames used to emit N exception events and
|
|
568
|
+
* N logger.error lines. The fingerprint hashes no spanId and no span name,
|
|
569
|
+
* so all N landed in the same group and occuranceCount jumped by the depth
|
|
570
|
+
* of the call stack — 3 for a create with a missing field, 6 for a
|
|
571
|
+
* permission-denied get-list.
|
|
572
|
+
*/
|
|
573
|
+
test("one thrown value reports ONCE across many frames, but every frame still sets ERROR", () => {
|
|
574
|
+
const frames: Array<FakeSpanState> = [
|
|
575
|
+
newSpanState(),
|
|
576
|
+
newSpanState(),
|
|
577
|
+
newSpanState(),
|
|
578
|
+
];
|
|
579
|
+
const error: Error = new ServerException("one failure, three frames");
|
|
580
|
+
|
|
581
|
+
for (const frame of frames) {
|
|
582
|
+
Telemetry.recordExceptionOnSpan({
|
|
583
|
+
span: makeFakeSpan(frame),
|
|
584
|
+
exception: error,
|
|
585
|
+
});
|
|
586
|
+
}
|
|
587
|
+
|
|
588
|
+
const totalExceptionEvents: number = frames.reduce(
|
|
589
|
+
(sum: number, frame: FakeSpanState): number => {
|
|
590
|
+
return sum + eventsNamed(frame, "exception").length;
|
|
591
|
+
},
|
|
592
|
+
0,
|
|
593
|
+
);
|
|
594
|
+
|
|
595
|
+
expect(totalExceptionEvents).toBe(1);
|
|
596
|
+
expect(eventsNamed(frames[0]!, "exception")).toHaveLength(1);
|
|
597
|
+
|
|
598
|
+
/*
|
|
599
|
+
* Outer frames keep the ERROR status and the queryable exception.*
|
|
600
|
+
* attributes so the trace still shows the whole error path — only the
|
|
601
|
+
* duplicate EVENT is suppressed.
|
|
602
|
+
*/
|
|
603
|
+
for (const frame of frames) {
|
|
604
|
+
expect(frame.status?.code).toBe(SpanStatusCode.ERROR);
|
|
605
|
+
expect((frame.attributes || {})["exception.message"]).toBe(
|
|
606
|
+
"one failure, three frames",
|
|
607
|
+
);
|
|
608
|
+
}
|
|
609
|
+
});
|
|
610
|
+
|
|
611
|
+
test("report-once also applies to suppressed faults", () => {
|
|
612
|
+
const frames: Array<FakeSpanState> = [newSpanState(), newSpanState()];
|
|
613
|
+
const error: Error = new BadDataException("Name is required");
|
|
614
|
+
|
|
615
|
+
runInHttpRequest((): void => {
|
|
616
|
+
for (const frame of frames) {
|
|
617
|
+
Telemetry.recordExceptionOnSpan({
|
|
618
|
+
span: makeFakeSpan(frame),
|
|
619
|
+
exception: error,
|
|
620
|
+
});
|
|
621
|
+
}
|
|
622
|
+
});
|
|
623
|
+
|
|
624
|
+
expect(eventsNamed(frames[0]!, "fault")).toHaveLength(1);
|
|
625
|
+
expect(eventsNamed(frames[1]!, "fault")).toHaveLength(0);
|
|
626
|
+
});
|
|
627
|
+
|
|
628
|
+
test("a thrown string is never taggable, so it is always a code-fault and always reported", () => {
|
|
629
|
+
const first: FakeSpanState = newSpanState();
|
|
630
|
+
const second: FakeSpanState = newSpanState();
|
|
631
|
+
|
|
632
|
+
Telemetry.recordExceptionOnSpan({
|
|
633
|
+
span: makeFakeSpan(first),
|
|
634
|
+
exception: "just a string",
|
|
635
|
+
});
|
|
636
|
+
Telemetry.recordExceptionOnSpan({
|
|
637
|
+
span: makeFakeSpan(second),
|
|
638
|
+
exception: "just a string",
|
|
639
|
+
});
|
|
640
|
+
|
|
641
|
+
expect(eventsNamed(first, "exception")).toHaveLength(1);
|
|
642
|
+
expect(eventsNamed(second, "exception")).toHaveLength(1);
|
|
643
|
+
expect((first.attributes || {})["error.class"]).toBe(ErrorClass.CodeFault);
|
|
644
|
+
});
|
|
645
|
+
|
|
646
|
+
test("recordExceptionOnSpan does not end the span; the wrapper does", () => {
|
|
647
|
+
const state: FakeSpanState = newSpanState();
|
|
648
|
+
const span: Span = makeFakeSpan(state);
|
|
649
|
+
|
|
650
|
+
Telemetry.recordExceptionOnSpan({
|
|
651
|
+
span,
|
|
652
|
+
exception: new ServerException("boom"),
|
|
653
|
+
});
|
|
654
|
+
expect(state.ended).toBe(0);
|
|
655
|
+
|
|
656
|
+
Telemetry.recordExceptionMarkSpanAsErrorAndEndSpan({
|
|
657
|
+
span,
|
|
658
|
+
exception: new ServerException("boom again"),
|
|
659
|
+
});
|
|
660
|
+
expect(state.ended).toBe(1);
|
|
661
|
+
});
|
|
662
|
+
});
|
|
663
|
+
|
|
664
|
+
/*
|
|
665
|
+
* Ending a span twice makes the SDK emit "You can only call end() on a span
|
|
666
|
+
* once" through diag. That happened on EVERY error path before this guard: the
|
|
667
|
+
* recorder's finally ended the span, then CaptureSpan ended it again in its
|
|
668
|
+
* own finally / .finally(). Both now route through Telemetry.endSpan.
|
|
669
|
+
*/
|
|
670
|
+
describe("Telemetry.endSpan is idempotent", () => {
|
|
671
|
+
type EndableSpan = Span & { endTime: Array<number>; endCount: number };
|
|
672
|
+
|
|
673
|
+
function makeEndableSpan(): EndableSpan {
|
|
674
|
+
const span: Partial<EndableSpan> = {
|
|
675
|
+
// sdk-trace-base leaves endTime at [0, 0] until the span ends.
|
|
676
|
+
endTime: [0, 0],
|
|
677
|
+
endCount: 0,
|
|
678
|
+
};
|
|
679
|
+
|
|
680
|
+
span.end = (): void => {
|
|
681
|
+
span.endCount = (span.endCount || 0) + 1;
|
|
682
|
+
span.endTime = [1700000000, 0];
|
|
683
|
+
};
|
|
684
|
+
|
|
685
|
+
return span as EndableSpan;
|
|
686
|
+
}
|
|
687
|
+
|
|
688
|
+
test("a second end() is a no-op", () => {
|
|
689
|
+
const span: EndableSpan = makeEndableSpan();
|
|
690
|
+
|
|
691
|
+
Telemetry.endSpan(span);
|
|
692
|
+
Telemetry.endSpan(span);
|
|
693
|
+
Telemetry.endSpan(span);
|
|
694
|
+
|
|
695
|
+
expect(span.endCount).toBe(1);
|
|
696
|
+
});
|
|
697
|
+
|
|
698
|
+
test("the recorder and its caller together end the span exactly once", () => {
|
|
699
|
+
const state: FakeSpanState = newSpanState();
|
|
700
|
+
const fake: Span = makeFakeSpan(state);
|
|
701
|
+
const span: Span = Object.assign(fake, { endTime: [0, 0] }) as Span;
|
|
702
|
+
|
|
703
|
+
/*
|
|
704
|
+
* Mirror CaptureSpan's error path: the recorder ends it, then so does the
|
|
705
|
+
* decorator's finally.
|
|
706
|
+
*/
|
|
707
|
+
Telemetry.recordExceptionMarkSpanAsErrorAndEndSpan({
|
|
708
|
+
span,
|
|
709
|
+
exception: new ServerException("boom"),
|
|
710
|
+
});
|
|
711
|
+
Telemetry.endSpan(span);
|
|
712
|
+
|
|
713
|
+
expect(state.ended).toBe(1);
|
|
714
|
+
});
|
|
715
|
+
|
|
716
|
+
/*
|
|
717
|
+
* A span implementation that does not expose endTime — a no-op span, a test
|
|
718
|
+
* double — must still be ended rather than silently skipped.
|
|
719
|
+
*/
|
|
720
|
+
test("a span with no observable endTime is ended normally", () => {
|
|
721
|
+
const state: FakeSpanState = newSpanState();
|
|
722
|
+
const span: Span = makeFakeSpan(state);
|
|
723
|
+
|
|
724
|
+
Telemetry.endSpan(span);
|
|
725
|
+
|
|
726
|
+
expect(state.ended).toBe(1);
|
|
727
|
+
});
|
|
728
|
+
});
|