@oneuptime/common 12.0.32 → 12.0.34
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/RumSession.ts +117 -1
- package/Models/AnalyticsModels/RumSessionChunk.ts +13 -0
- package/Models/AnalyticsModels/Span.ts +14 -0
- package/Models/DatabaseModels/AlertCustomField.ts +77 -3
- package/Models/DatabaseModels/ApiKeyPermission.ts +3 -27
- package/Models/DatabaseModels/EnterpriseLicense.ts +56 -0
- package/Models/DatabaseModels/IncidentCustomField.ts +77 -3
- package/Models/DatabaseModels/Index.ts +10 -0
- package/Models/DatabaseModels/InventoryItemCustomField.ts +77 -3
- package/Models/DatabaseModels/Monitor.ts +76 -0
- package/Models/DatabaseModels/MonitorCustomField.ts +77 -3
- 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/OnCallDutyPolicyCustomField.ts +77 -3
- package/Models/DatabaseModels/RumApplication.ts +6 -6
- package/Models/DatabaseModels/ScheduledMaintenanceCustomField.ts +77 -3
- package/Models/DatabaseModels/StatusPageCustomField.ts +77 -3
- package/Models/DatabaseModels/TeamCustomField.ts +77 -3
- package/Models/DatabaseModels/TeamMember.ts +0 -9
- package/Models/DatabaseModels/TeamMemberCustomField.ts +77 -3
- package/Models/DatabaseModels/TeamPermission.ts +3 -24
- package/Models/DatabaseModels/TelemetryException.ts +119 -0
- package/Models/DatabaseModels/TelemetryIngestionKey.ts +260 -0
- package/Models/DatabaseModels/UserNotificationEmailRollupBatch.ts +334 -0
- package/Models/DatabaseModels/UserNotificationEmailRollupItem.ts +370 -0
- package/Models/DatabaseModels/UserNotificationEmailRollupSetting.ts +282 -0
- package/Models/DatabaseModels/UserTelegram.ts +0 -4
- package/Scripts/benchmark-fanin-capacity.js +181 -0
- package/Server/API/EnterpriseLicenseAPI.ts +391 -64
- package/Server/API/LlmProviderAPI.ts +137 -22
- package/Server/API/TelemetryAPI.ts +1284 -164
- package/Server/API/UserNotificationSettingAPI.ts +55 -0
- package/Server/API/UserTelegramAPI.ts +48 -4
- package/Server/EnvironmentConfig.ts +49 -2
- 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/1791300000000-AddTelemetryIngestionKeyType.ts +91 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1791400000000-SessionReplayRecordEverySessionByDefault.ts +67 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1791500000000-WidenCustomFieldDropdownOptions.ts +139 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1791600000000-AddCustomFieldValueMapping.ts +121 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +20 -0
- package/Server/Infrastructure/QueueWorker.ts +59 -23
- package/Server/Infrastructure/Semaphore.ts +2 -0
- 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 +464 -7
- package/Server/Services/AIBillingService.ts +101 -27
- package/Server/Services/AccessTokenService.ts +1 -0
- package/Server/Services/AlertCustomFieldService.ts +98 -0
- package/Server/Services/AlertService.ts +37 -0
- package/Server/Services/ApiKeyPermissionService.ts +461 -29
- package/Server/Services/CustomFieldMappingService.ts +879 -0
- package/Server/Services/EnterpriseLicenseInstanceService.ts +197 -0
- package/Server/Services/EnterpriseLicenseService.ts +55 -0
- package/Server/Services/GlobalConfigService.ts +194 -0
- package/Server/Services/IncidentCustomFieldService.ts +98 -0
- package/Server/Services/IncidentService.ts +35 -0
- package/Server/Services/Index.ts +10 -0
- package/Server/Services/MetricService.ts +194 -0
- package/Server/Services/MonitorService.ts +175 -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 +87 -35
- 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 +127 -48
- package/Server/Services/RoutineEmailSettingsService.ts +73 -0
- package/Server/Services/RumSessionReplayViewService.ts +104 -24
- package/Server/Services/ScheduledMaintenanceCustomFieldService.ts +98 -0
- package/Server/Services/ScheduledMaintenanceService.ts +32 -0
- package/Server/Services/StatusPagePrivateUserService.ts +103 -3
- package/Server/Services/TeamMemberService.ts +78 -0
- package/Server/Services/TeamPermissionService.ts +235 -3
- package/Server/Services/TelemetryIngestionKeyService.ts +722 -19
- 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 +90 -25
- package/Server/Services/UserService.ts +95 -0
- package/Server/Services/UserTelegramService.ts +326 -5
- package/Server/Types/Database/QueryHelper.ts +4 -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/APIKey/AccessPermission.ts +5 -2
- package/Server/Utils/Billing/BillingFailureNoticeThrottle.ts +80 -0
- package/Server/Utils/CustomField/CustomFieldDefinitionMappingHooks.ts +54 -0
- package/Server/Utils/CustomField/CustomFieldMappingRegistry.ts +415 -0
- package/Server/Utils/CustomField/CustomFieldMappingValidator.ts +335 -0
- package/Server/Utils/DataSource/EgressGuard.ts +177 -8
- package/Server/Utils/DataSource/HttpFetch.ts +9 -2
- package/Server/Utils/EmailRollup/EmailRollupConstants.ts +131 -0
- package/Server/Utils/EmailRollup/EmailRollupFlushRunner.ts +925 -0
- package/Server/Utils/EmailRollup/EmailRollupRenderer.ts +781 -0
- package/Server/Utils/EmailRollup/EmailRollupWriter.ts +368 -0
- package/Server/Utils/FrontendEnvironment.ts +40 -0
- package/Server/Utils/LLM/LLMService.ts +78 -0
- package/Server/Utils/LogRedaction.ts +28 -0
- package/Server/Utils/Logger.ts +90 -1
- package/Server/Utils/Monitor/Criteria/CompareCriteria.ts +338 -77
- package/Server/Utils/Monitor/Criteria/DatabaseMonitorCriteria.ts +190 -0
- package/Server/Utils/Monitor/Criteria/EvaluateOverTime.ts +9 -2
- package/Server/Utils/Monitor/Criteria/IncomingRequestCriteria.ts +30 -4
- package/Server/Utils/Monitor/Criteria/SnmpMonitorCriteria.ts +61 -1
- package/Server/Utils/Monitor/MonitorAlert.ts +29 -6
- package/Server/Utils/Monitor/MonitorCriteriaDataExtractor.ts +14 -0
- package/Server/Utils/Monitor/MonitorCriteriaEvaluator.ts +159 -15
- package/Server/Utils/Monitor/MonitorCriteriaObservationBuilder.ts +255 -4
- package/Server/Utils/Monitor/MonitorIncident.ts +22 -6
- package/Server/Utils/Monitor/MonitorMetricUtil.ts +41 -0
- package/Server/Utils/Monitor/MonitorTemplateUtil.ts +72 -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/Monitor/SeriesContextEnricher.ts +304 -0
- 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/SSRFProtection.ts +217 -10
- package/Server/Utils/SessionReplay/SessionReplayGateCache.ts +239 -138
- package/Server/Utils/SessionReplay/SessionReplayHealthCounters.ts +305 -0
- package/Server/Utils/SessionReplay/SessionReplayReadService.ts +1430 -289
- package/Server/Utils/StartServer.ts +53 -36
- package/Server/Utils/TelegramVerificationToken.ts +185 -0
- package/Server/Utils/Telemetry/CaptureSpan.ts +32 -8
- package/Server/Utils/Telemetry/ErrorClassResolver.ts +120 -0
- package/Server/Utils/Telemetry/PinServiceName.ts +197 -0
- package/Server/Utils/Telemetry/SpanUtil.ts +33 -0
- package/Server/Utils/Telemetry/TelemetryFanInWriter.ts +38 -16
- package/Server/Utils/Telemetry/TelemetryIngestionKeyGuard.ts +92 -0
- package/Server/Utils/Telemetry/TelemetryIngestionKeyRateLimiter.ts +217 -0
- package/Server/Utils/Telemetry.ts +198 -51
- package/Server/Utils/VM/VMAPI.ts +1 -0
- package/Server/Utils/VM/VMRunner.ts +975 -95
- package/Server/Views/Partials/SensitiveUrlToken.ejs +140 -0
- package/Tests/App/AdminDashboard/AdminHeaderSmallScreens.test.tsx +202 -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/DashboardHeaderSmallScreens.test.tsx +404 -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 +486 -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/NotificationEmailPreferences.test.tsx +399 -0
- package/Tests/App/Dashboard/PingMonitorProvisioning.test.ts +368 -0
- package/Tests/App/Dashboard/RecommendationCard.test.tsx +796 -0
- package/Tests/App/Dashboard/RecommendationToolbar.test.tsx +519 -0
- package/Tests/App/Dashboard/RecommendationsList.test.tsx +661 -0
- package/Tests/App/Dashboard/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/StatusPageLastUpdated.test.tsx +263 -0
- package/Tests/App/StatusPage/StatusPageLoginCodeBootstrap.test.ts +9 -4
- package/Tests/App/StatusPage/StatusPageOverviewLiveAndSearch.test.tsx +753 -0
- package/Tests/App/StatusPage/StatusPageResourceSearchBox.test.tsx +224 -0
- package/Tests/Models/AnalyticsModels/RumSessionReplayColumns.test.ts +262 -0
- package/Tests/Models/CustomFieldMappingColumns.test.ts +166 -0
- package/Tests/Models/DatabaseModels/SessionReplayModels.test.ts +20 -6
- package/Tests/Models/NetworkSiteHierarchy.test.ts +41 -4
- package/Tests/ResponsiveVisibility.test.ts +115 -0
- package/Tests/ResponsiveVisibility.ts +183 -0
- package/Tests/Server/API/EnterpriseLicenseReportUserCount.test.ts +951 -7
- package/Tests/Server/API/LlmProviderConnectionTest.test.ts +522 -0
- package/Tests/Server/API/SessionReplayAPI.test.ts +1940 -216
- package/Tests/Server/API/UserNotificationSettingAPI.test.ts +186 -0
- package/Tests/Server/API/UserTelegramAPISecurity.test.ts +231 -0
- package/Tests/Server/EnvironmentConfigFrontendSecurity.test.ts +234 -0
- package/Tests/Server/Infrastructure/Postgres/CustomFieldValueMappingMigration.test.ts +202 -0
- package/Tests/Server/Infrastructure/Postgres/InventoryItemArchiveMigration.test.ts +41 -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/SessionReplayRecordEverySessionByDefaultMigration.test.ts +169 -0
- package/Tests/Server/Infrastructure/Postgres/UserNotificationEmailRollupTableMigration.test.ts +535 -0
- package/Tests/Server/Infrastructure/QueueWorkerTimeout.test.ts +210 -0
- package/Tests/Server/Infrastructure/TelemetryExporterDeploymentConfig.test.ts +130 -0
- package/Tests/Server/Middleware/ProjectAuthorizationApiKeyMiddleware.test.ts +4 -1
- package/Tests/Server/Middleware/TelemetryIngestBrowserKey.test.ts +1163 -0
- package/Tests/Server/Middleware/TelemetryIngestTokenLog.test.ts +5 -3
- package/Tests/Server/Services/AIChatPrivacyPin.test.ts +560 -0
- package/Tests/Server/Services/AddTelemetryIngestionKeyTypeMigration.test.ts +555 -0
- package/Tests/Server/Services/ApiKeyPermissionSecurity.test.ts +678 -0
- package/Tests/Server/Services/ApiKeyPermissionService.test.ts +276 -28
- package/Tests/Server/Services/BillingRechargeOwnerEmailGuards.test.ts +783 -0
- package/Tests/Server/Services/CustomFieldDropdownOptionsColumnWidth.test.ts +431 -0
- package/Tests/Server/Services/CustomFieldMappingService.test.ts +850 -0
- package/Tests/Server/Services/DiscoveryScanClaimHookFreeSafety.test.ts +32 -0
- package/Tests/Server/Services/EnterpriseLicenseInstanceServiceDeletionUsage.test.ts +707 -0
- package/Tests/Server/Services/EnterpriseLicenseServiceUsageAggregationLock.test.ts +329 -0
- package/Tests/Server/Services/GlobalConfigService.test.ts +414 -1
- package/Tests/Server/Services/MetricRawEntityKeyPrune.test.ts +592 -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 +273 -5
- 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/RoutineEmailSettingsPostgres.test.ts +329 -0
- package/Tests/Server/Services/RumSessionReplayViewService.test.ts +267 -0
- package/Tests/Server/Services/StatusPagePrivateUserEmailChangePasswordResetExpiry.test.ts +269 -0
- package/Tests/Server/Services/TeamMemberAutoAcceptInvitation.test.ts +9 -0
- package/Tests/Server/Services/TeamMemberInviteRegistrationToken.test.ts +9 -0
- package/Tests/Server/Services/TeamPrivilegeEscalation.test.ts +834 -0
- package/Tests/Server/Services/TelemetryIngestionKeyPolicyResolution.test.ts +814 -0
- package/Tests/Server/Services/TelemetryIngestionKeyValidation.test.ts +998 -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 +997 -0
- package/Tests/Server/Services/UserNotificationSettingWorkspaceChannels.test.ts +110 -1
- package/Tests/Server/Services/UserTelegramVerificationSecurity.test.ts +688 -0
- 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/AI/SRE/Insights/FixRouting.test.ts +497 -0
- package/Tests/Server/Utils/AI/Toolbox/Serializer.test.ts +383 -0
- package/Tests/Server/Utils/APIKey/AccessPermission.test.ts +7 -3
- package/Tests/Server/Utils/AnalyticsDatabase/ClusterConfig.test.ts +315 -0
- package/Tests/Server/Utils/Captcha.test.ts +422 -0
- package/Tests/Server/Utils/CustomField/CustomFieldMappingValidator.test.ts +437 -0
- package/Tests/Server/Utils/DataSource/EgressGuard.test.ts +300 -11
- 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/EmailRollupBurstWindow.test.ts +83 -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/EmailRollupFlushRunnerPreferences.test.ts +362 -0
- package/Tests/Server/Utils/EmailRollup/EmailRollupRenderer.test.ts +1428 -0
- package/Tests/Server/Utils/EmailRollup/EmailRollupTestHarness.ts +828 -0
- package/Tests/Server/Utils/EmailRollup/EmailRollupWriter.test.ts +864 -0
- package/Tests/Server/Utils/FrontendEnvironment.test.ts +190 -0
- package/Tests/Server/Utils/LogRedaction.test.ts +26 -0
- package/Tests/Server/Utils/LoggerCredentialLeak.test.ts +23 -9
- package/Tests/Server/Utils/LoggerFaultDemotion.test.ts +346 -0
- package/Tests/Server/Utils/Monitor/Criteria/CompareCriteriaAggregation.test.ts +584 -0
- package/Tests/Server/Utils/Monitor/Criteria/DatabaseMonitorCriteria.test.ts +633 -0
- package/Tests/Server/Utils/Monitor/Criteria/IncomingRequestHeaderCriteria.test.ts +236 -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/MonitorCriteriaEvaluator.test.ts +437 -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/MonitorTemplateUtilSeriesContext.test.ts +176 -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/Monitor/SeriesContextEnricher.test.ts +356 -0
- 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/SSRFProtectionCloudServiceAddresses.test.ts +595 -0
- package/Tests/Server/Utils/SecurityEvent/ThreatIntel/TaxiiClientUserAgent.test.ts +141 -0
- package/Tests/Server/Utils/SessionReplay/SessionReplayGateCachePolicy.test.ts +198 -1
- package/Tests/Server/Utils/SessionReplay/SessionReplayHealthCounters.test.ts +453 -0
- package/Tests/Server/Utils/SessionReplay/SessionReplayReadServiceQueries.test.ts +1378 -0
- package/Tests/Server/Utils/SessionReplayOriginAllowListRefactor.test.ts +420 -0
- package/Tests/Server/Utils/TelegramVerificationToken.test.ts +253 -0
- package/Tests/Server/Utils/Telemetry/ErrorClassResolver.test.ts +298 -0
- package/Tests/Server/Utils/Telemetry/PinServiceName.test.ts +666 -0
- package/Tests/Server/Utils/Telemetry/TelemetryFanInWriterCapacity.test.ts +458 -0
- package/Tests/Server/Utils/Telemetry/TelemetryIngestionKeyGuard.test.ts +424 -0
- package/Tests/Server/Utils/Telemetry/TelemetryIngestionKeyRateLimiter.test.ts +528 -0
- package/Tests/Server/Utils/Telemetry.test.ts +456 -66
- package/Tests/Server/Utils/TelemetryExporterEnvironment.test.ts +56 -0
- package/Tests/Server/Utils/VM/VMRunnerHostBridgeLatency.test.ts +74 -0
- package/Tests/Server/Utils/VM/VMRunnerPrivateNetworkWiring.test.ts +100 -7
- package/Tests/Server/Utils/VM/VMRunnerSsrf.test.ts +1176 -6
- package/Tests/Types/CustomField/CustomFieldMappingCatalog.test.ts +220 -0
- package/Tests/Types/CustomField/CustomFieldValueMapping.test.ts +348 -0
- package/Tests/Types/JSONFunctions.test.ts +260 -0
- package/Tests/Types/Monitor/CephAlertTemplates.test.ts +422 -53
- package/Tests/Types/Monitor/DatabaseMetricCatalog.test.ts +388 -0
- package/Tests/Types/Monitor/DockerAlertTemplates.test.ts +495 -15
- package/Tests/Types/Monitor/DockerSwarmAlertTemplates.test.ts +191 -45
- package/Tests/Types/Monitor/HostAlertTemplates.test.ts +370 -42
- package/Tests/Types/Monitor/IotAlertTemplates.test.ts +375 -20
- package/Tests/Types/Monitor/KubernetesAlertTemplates.test.ts +636 -42
- package/Tests/Types/Monitor/KubernetesMetricCatalog.test.ts +189 -0
- package/Tests/Types/Monitor/KubernetesTemplateGroupByKeys.test.ts +95 -14
- 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/Monitor/PodmanAlertTemplates.test.ts +190 -21
- package/Tests/Types/Monitor/ProxmoxAlertTemplates.test.ts +352 -22
- package/Tests/Types/Monitor/Recommendation/MonitorRecommendationAlertDebuggability.test.ts +363 -0
- package/Tests/Types/Monitor/Recommendation/MonitorRecommendationNotificationMode.test.ts +93 -18
- package/Tests/Types/Monitor/Recommendation/MonitorRecommendationSeverityMapper.test.ts +259 -0
- package/Tests/Types/Monitor/Recommendation/RecommendationCriteriaBuilder.test.ts +476 -0
- package/Tests/Types/Monitor/RumAlertTemplates.test.ts +136 -0
- package/Tests/Types/Monitor/SeriesContext/SeriesDebugHints.test.ts +661 -0
- package/Tests/Types/Monitor/SeriesContext/SeriesLabelDisplay.test.ts +507 -0
- package/Tests/Types/Monitor/ServiceAlertTemplates.test.ts +270 -0
- package/Tests/Types/Monitor/TemplateGroupByKeys.test.ts +38 -10
- package/Tests/Types/Monitor/Utils/RecommendationCriteriaAssertions.ts +102 -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/NotificationSetting/RoutineEmailEvents.test.ts +47 -0
- package/Tests/Types/Rum/SessionReplayApiContracts.test.ts +608 -0
- package/Tests/Types/Rum/SessionReplayCustomEvents.test.ts +434 -0
- package/Tests/Types/Telemetry/ErrorClass.test.ts +483 -0
- package/Tests/Types/WebsiteRequest.test.ts +285 -3
- package/Tests/UI/Components/BasicRadioButtons.test.tsx +336 -0
- package/Tests/UI/Components/Charts/ChartBucketIdentity.test.ts +16 -3
- package/Tests/UI/Components/Charts/ChartTrailingBucketGap.test.ts +691 -0
- package/Tests/UI/Components/ComponentsModal.test.tsx +12 -4
- package/Tests/UI/Components/ComponentsModalUsability.test.tsx +518 -0
- package/Tests/UI/Components/CustomFields/CustomFieldsDetailMapping.test.tsx +324 -0
- package/Tests/UI/Components/CustomFields/MapFromCustomFieldInput.test.tsx +176 -0
- package/Tests/UI/Components/Graphs/DayUptimeGraph.test.tsx +484 -0
- package/Tests/UI/Components/HeaderRightRail.test.tsx +157 -0
- package/Tests/UI/Components/IconDropdownItem.test.tsx +102 -0
- package/Tests/UI/Components/JSONTablePrototypePollution.test.tsx +117 -0
- package/Tests/UI/Components/KeyboardShortcutsModal.test.tsx +214 -0
- package/Tests/UI/Components/ModelTable/ModelTableWrapContent.test.tsx +561 -0
- package/Tests/UI/Components/MonitorGraphs/UptimeBarDayModal.test.tsx +302 -0
- package/Tests/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.test.ts +43 -12
- package/Tests/UI/Components/ProgressBar.test.tsx +38 -2
- package/Tests/UI/Components/ShortcutDialogGuard.test.tsx +74 -0
- 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/Components/StatusPage/ResourceGroupSectionAutoExpand.test.tsx +248 -0
- package/Tests/UI/Components/TableCellWrapping.test.tsx +625 -0
- package/Tests/UI/Components/TableLoadingStates.test.tsx +205 -0
- package/Tests/UI/Components/Workflow/NodePlacement.test.ts +148 -0
- package/Tests/UI/Components/Workflow/Workflow.test.tsx +981 -0
- package/Tests/UI/ConfigBrowserTelemetry.test.ts +70 -0
- package/Tests/UI/Rum/ChunkLoader.test.ts +1036 -2
- package/Tests/UI/Rum/FidelityNotices.test.ts +187 -0
- package/Tests/UI/Rum/InactivityMap.test.ts +341 -0
- package/Tests/UI/Rum/PrivacySummaryCard.test.tsx +259 -0
- package/Tests/UI/Rum/RecordingHealthCard.test.tsx +855 -0
- package/Tests/UI/Rum/RecordingHealthStrip.test.tsx +594 -0
- package/Tests/UI/Rum/ReplayCard.test.tsx +451 -0
- package/Tests/UI/Rum/ReplayCorrelationPanel.test.tsx +536 -0
- package/Tests/UI/Rum/ReplayEngine.test.ts +2503 -0
- package/Tests/UI/Rum/ReplayEngineTypes.test.ts +171 -0
- package/Tests/UI/Rum/ReplayHeader.test.tsx +711 -0
- package/Tests/UI/Rum/ReplayLink.test.tsx +119 -0
- package/Tests/UI/Rum/ReplayPinControl.test.tsx +408 -0
- package/Tests/UI/Rum/ReplayPlaybackIntent.test.ts +152 -0
- package/Tests/UI/Rum/ReplayRail.test.tsx +1296 -0
- package/Tests/UI/Rum/ReplayRailDetail.test.tsx +900 -0
- package/Tests/UI/Rum/ReplayScrubber.test.tsx +763 -147
- package/Tests/UI/Rum/ReplaySignalTypes.test.ts +189 -0
- package/Tests/UI/Rum/ReplaySignals.test.ts +1579 -0
- package/Tests/UI/Rum/ReplayStage.test.tsx +396 -473
- package/Tests/UI/Rum/ReplayStageOverlays.test.tsx +918 -0
- package/Tests/UI/Rum/ReplayTimeline.test.tsx +696 -0
- package/Tests/UI/Rum/SessionReplayEmptyState.test.tsx +499 -0
- package/Tests/UI/Rum/SessionReplaySearchBar.test.tsx +346 -0
- package/Tests/UI/Rum/SessionReplaySetupGuide.test.tsx +545 -0
- package/Tests/UI/Rum/SessionReplayTable.test.tsx +991 -0
- package/Tests/UI/Rum/TargetedCapturePanel.test.tsx +254 -0
- package/Tests/UI/Telemetry/BrowserExporterIsolation.test.ts +71 -0
- package/Tests/UI/Utils/GlobalKeyboardShortcut.test.ts +344 -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/API.test.ts +308 -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/HTTPResponseBodyReader.test.ts +323 -0
- 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/DiscoveryScanStatus.test.ts +117 -0
- 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/Rum/ChunkMath.test.ts +83 -0
- package/Tests/Utils/Rum/SessionReplayHealthDiagnosis.test.ts +993 -0
- package/Tests/Utils/Rum/SessionReplayStringMap.test.ts +245 -0
- package/Tests/Utils/StatusPage/ResourceSearch.test.ts +631 -0
- package/Tests/Utils/Telemetry/CaptureSpanExportGating.test.ts +145 -0
- package/Tests/Utils/Telemetry/OriginAllowList.test.ts +633 -0
- package/Tests/Utils/Uptime/DayUptimeGraphUtil.test.ts +461 -0
- package/Tests/Utils/ValueFormatter.test.ts +148 -0
- package/Types/AI/ExceptionAIClassification.ts +10 -24
- package/Types/CustomField/CustomFieldMappingCatalog.ts +161 -0
- package/Types/CustomField/CustomFieldMappingSourceResource.ts +19 -0
- package/Types/CustomField/CustomFieldValueMapping.ts +288 -0
- 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/Icon/IconProp.ts +1 -0
- package/Types/JSONFunctions.ts +189 -43
- package/Types/Monitor/CephAlertTemplates.ts +157 -195
- 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/DockerAlertTemplates.ts +338 -128
- package/Types/Monitor/DockerSwarmAlertTemplates.ts +95 -112
- package/Types/Monitor/HostAlertTemplates.ts +302 -130
- package/Types/Monitor/IotAlertTemplates.ts +112 -104
- package/Types/Monitor/KubernetesAlertTemplates.ts +415 -224
- package/Types/Monitor/KubernetesMetricCatalog.ts +23 -19
- 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/PodmanAlertTemplates.ts +116 -163
- package/Types/Monitor/ProxmoxAlertTemplates.ts +217 -99
- package/Types/Monitor/Recommendation/MonitorRecommendationSeverityMapper.ts +98 -6
- package/Types/Monitor/Recommendation/MonitorRecommendationUtil.ts +44 -7
- package/Types/Monitor/Recommendation/RecommendationCriteriaBuilder.ts +383 -0
- package/Types/Monitor/RumAlertTemplates.ts +46 -7
- package/Types/Monitor/SeriesContext/SeriesDebugHints.ts +596 -0
- package/Types/Monitor/SeriesContext/SeriesLabelDisplay.ts +554 -0
- package/Types/Monitor/ServiceAlertTemplates.ts +98 -11
- package/Types/Monitor/SnmpMonitor/NetworkDeviceAlertPack.ts +22 -1
- package/Types/Monitor/SqlConnectionConfig.ts +31 -0
- package/Types/Monitor/UptimeHistoryLabels.ts +56 -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/NotificationSetting/RoutineEmailEvents.ts +30 -0
- package/Types/Permission.ts +90 -0
- package/Types/Probe/ProbeMonitorResponse.ts +16 -0
- package/Types/Rum/SessionReplay.ts +209 -0
- package/Types/Rum/SessionReplayApi.ts +722 -0
- package/Types/Rum/SessionReplayCaptureTrigger.ts +21 -12
- package/Types/Rum/SessionReplayConsentMode.ts +11 -7
- package/Types/Rum/SessionReplayCustomEvents.ts +549 -0
- package/Types/Rum/SessionReplayHealth.ts +238 -0
- package/Types/Telemetry/ErrorClass.ts +274 -0
- package/Types/Telemetry/TelemetryIngestSurface.ts +95 -0
- package/Types/Telemetry/TelemetryIngestionKeyPolicy.ts +75 -0
- package/Types/Telemetry/TelemetryIngestionKeyType.ts +29 -0
- package/Types/Telemetry/UnitOfWork.ts +59 -0
- package/Types/WebsiteRequest.ts +85 -3
- package/UI/Components/Charts/Area/AreaChart.tsx +13 -2
- package/UI/Components/Charts/Bar/BarChart.tsx +6 -2
- package/UI/Components/Charts/Line/LineChart.tsx +13 -2
- package/UI/Components/Charts/Types/XAxis/XAxis.ts +29 -0
- package/UI/Components/Charts/Utils/DataPoint.ts +22 -3
- package/UI/Components/Charts/Utils/TimeAnnotation.ts +76 -9
- package/UI/Components/Charts/Utils/XAxis.ts +217 -0
- package/UI/Components/CommandPalette/CommandPalette.tsx +2 -8
- package/UI/Components/CustomFields/CustomFieldsDetail.tsx +143 -25
- package/UI/Components/CustomFields/MapFromCustomFieldInput.tsx +216 -0
- package/UI/Components/EditionLabel/EditionLabel.tsx +4 -0
- package/UI/Components/Graphs/DayUptimeGraph.tsx +173 -8
- package/UI/Components/Graphs/UptimeBarTooltip.tsx +22 -278
- package/UI/Components/Graphs/UptimeDaySummary.tsx +327 -0
- package/UI/Components/Header/Header.tsx +25 -9
- package/UI/Components/Header/IconDropdown/IconDropdownItem.tsx +10 -1
- package/UI/Components/Header/IconDropdown/IconDropdownMenu.tsx +6 -1
- package/UI/Components/Header/ProjectPicker/ProjectPicker.tsx +6 -1
- package/UI/Components/HeaderAlert/NotificationBell/NotificationBellDropdown.tsx +6 -1
- package/UI/Components/Icon/Icon.tsx +11 -0
- package/UI/Components/JSONTable/JSONTable.tsx +2 -2
- package/UI/Components/KeyboardShortcut/KeyboardShortcutsModal.tsx +125 -0
- package/UI/Components/KeyboardShortcut/Screenshots/README.md +19 -0
- package/UI/Components/KeyboardShortcut/Screenshots/keyboard-shortcuts-command-palette.png +0 -0
- package/UI/Components/KeyboardShortcut/Screenshots/keyboard-shortcuts-dialog-dark.png +0 -0
- package/UI/Components/KeyboardShortcut/Screenshots/keyboard-shortcuts-dialog.png +0 -0
- package/UI/Components/KeyboardShortcut/Screenshots/keyboard-shortcuts-help-menu.png +0 -0
- package/UI/Components/KeyboardShortcut/Screenshots/keyboard-shortcuts-narrow.png +0 -0
- package/UI/Components/Modal/Modal.tsx +2 -8
- package/UI/Components/ModelTable/Column.ts +15 -0
- package/UI/Components/Monitor/SeriesDebugCommandsViewer.tsx +64 -0
- package/UI/Components/Monitor/SeriesLabelsViewer.tsx +93 -0
- package/UI/Components/MonitorGraphs/Uptime.tsx +14 -2
- package/UI/Components/MonitorGraphs/UptimeBarDayModal.tsx +63 -10
- package/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.ts +88 -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/Components/StatusPage/ResourceGroupSection.tsx +40 -0
- package/UI/Components/Table/CellClassName.ts +81 -0
- package/UI/Components/Table/TableRow.tsx +20 -14
- package/UI/Components/Table/TableSkeletonRows.tsx +9 -9
- package/UI/Components/Table/Types/Column.ts +36 -0
- package/UI/Components/Tooltip/Tooltip.tsx +11 -1
- package/UI/Components/Workflow/ComponentsModal.tsx +60 -39
- package/UI/Components/Workflow/NodePlacement.ts +57 -0
- package/UI/Components/Workflow/Workflow.tsx +47 -18
- package/UI/Config.ts +15 -33
- package/UI/Utils/GlobalKeyboardShortcut.ts +208 -0
- package/UI/Utils/PageScrollLock.ts +79 -3
- package/UI/Utils/PermissionGate.ts +61 -0
- package/UI/Utils/SensitiveUrlToken.ts +112 -0
- package/UI/Utils/Telemetry/BrowserTelemetryConfig.ts +28 -0
- package/UI/Utils/Telemetry/Telemetry.ts +10 -8
- package/UI/Utils/TestLLMProvider.ts +11 -0
- package/Utils/API.ts +129 -3
- package/Utils/EnterpriseLicense/EnterpriseLicenseSeats.ts +16 -0
- package/Utils/EnterpriseLicense/EnterpriseLicenseUsage.ts +191 -11
- package/Utils/HTTPResponseBodyReader.ts +221 -0
- 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/DiscoveryScanStatus.ts +77 -0
- package/Utils/NetworkDiscovery/PingMonitorBuilder.ts +115 -13
- package/Utils/NetworkSite/SiteStatusRollupUtil.ts +66 -20
- package/Utils/NetworkSite/TypeHierarchyUtil.ts +313 -0
- package/Utils/Rum/ChunkMath.ts +106 -0
- package/Utils/Rum/SessionReplayHealth.ts +732 -0
- package/Utils/Rum/SessionReplayStringMap.ts +226 -0
- package/Utils/Schema/ModelSchema.ts +1 -0
- package/Utils/StatusPage/ResourceSearch.ts +290 -0
- package/Utils/Telemetry/OriginAllowList.ts +355 -0
- package/Utils/Uptime/DayUptimeGraphUtil.ts +205 -0
- package/Utils/ValueFormatter.ts +35 -1
- package/build/dist/Models/AnalyticsModels/RumSession.js +102 -19
- package/build/dist/Models/AnalyticsModels/RumSession.js.map +1 -1
- package/build/dist/Models/AnalyticsModels/RumSessionChunk.js +11 -9
- package/build/dist/Models/AnalyticsModels/RumSessionChunk.js.map +1 -1
- package/build/dist/Models/AnalyticsModels/Span.js +14 -0
- package/build/dist/Models/AnalyticsModels/Span.js.map +1 -1
- package/build/dist/Models/DatabaseModels/AlertCustomField.js +79 -3
- package/build/dist/Models/DatabaseModels/AlertCustomField.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ApiKeyPermission.js +3 -27
- package/build/dist/Models/DatabaseModels/ApiKeyPermission.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/IncidentCustomField.js +79 -3
- package/build/dist/Models/DatabaseModels/IncidentCustomField.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/InventoryItemCustomField.js +79 -3
- package/build/dist/Models/DatabaseModels/InventoryItemCustomField.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/MonitorCustomField.js +79 -3
- package/build/dist/Models/DatabaseModels/MonitorCustomField.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/OnCallDutyPolicyCustomField.js +79 -3
- package/build/dist/Models/DatabaseModels/OnCallDutyPolicyCustomField.js.map +1 -1
- package/build/dist/Models/DatabaseModels/RumApplication.js +6 -6
- package/build/dist/Models/DatabaseModels/RumApplication.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ScheduledMaintenanceCustomField.js +79 -3
- package/build/dist/Models/DatabaseModels/ScheduledMaintenanceCustomField.js.map +1 -1
- package/build/dist/Models/DatabaseModels/StatusPageCustomField.js +79 -3
- package/build/dist/Models/DatabaseModels/StatusPageCustomField.js.map +1 -1
- package/build/dist/Models/DatabaseModels/TeamCustomField.js +79 -3
- package/build/dist/Models/DatabaseModels/TeamCustomField.js.map +1 -1
- package/build/dist/Models/DatabaseModels/TeamMember.js +0 -9
- package/build/dist/Models/DatabaseModels/TeamMember.js.map +1 -1
- package/build/dist/Models/DatabaseModels/TeamMemberCustomField.js +79 -3
- package/build/dist/Models/DatabaseModels/TeamMemberCustomField.js.map +1 -1
- package/build/dist/Models/DatabaseModels/TeamPermission.js +3 -24
- package/build/dist/Models/DatabaseModels/TeamPermission.js.map +1 -1
- package/build/dist/Models/DatabaseModels/TelemetryException.js +123 -0
- package/build/dist/Models/DatabaseModels/TelemetryException.js.map +1 -1
- package/build/dist/Models/DatabaseModels/TelemetryIngestionKey.js +267 -0
- package/build/dist/Models/DatabaseModels/TelemetryIngestionKey.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/Models/DatabaseModels/UserTelegram.js +0 -4
- package/build/dist/Models/DatabaseModels/UserTelegram.js.map +1 -1
- 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/API/TelemetryAPI.js +769 -109
- package/build/dist/Server/API/TelemetryAPI.js.map +1 -1
- package/build/dist/Server/API/UserNotificationSettingAPI.js +35 -0
- package/build/dist/Server/API/UserNotificationSettingAPI.js.map +1 -0
- package/build/dist/Server/API/UserTelegramAPI.js +28 -6
- package/build/dist/Server/API/UserTelegramAPI.js.map +1 -1
- package/build/dist/Server/EnvironmentConfig.js +41 -2
- 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/1791300000000-AddTelemetryIngestionKeyType.js +60 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791300000000-AddTelemetryIngestionKeyType.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791400000000-SessionReplayRecordEverySessionByDefault.js +53 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791400000000-SessionReplayRecordEverySessionByDefault.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791500000000-WidenCustomFieldDropdownOptions.js +82 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791500000000-WidenCustomFieldDropdownOptions.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791600000000-AddCustomFieldValueMapping.js +46 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791600000000-AddCustomFieldValueMapping.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +20 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
- package/build/dist/Server/Infrastructure/QueueWorker.js +52 -12
- package/build/dist/Server/Infrastructure/QueueWorker.js.map +1 -1
- package/build/dist/Server/Infrastructure/Semaphore.js +1 -0
- package/build/dist/Server/Infrastructure/Semaphore.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 +326 -8
- 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/AccessTokenService.js +1 -0
- package/build/dist/Server/Services/AccessTokenService.js.map +1 -1
- package/build/dist/Server/Services/AlertCustomFieldService.js +93 -0
- package/build/dist/Server/Services/AlertCustomFieldService.js.map +1 -1
- package/build/dist/Server/Services/AlertService.js +34 -0
- package/build/dist/Server/Services/AlertService.js.map +1 -1
- package/build/dist/Server/Services/ApiKeyPermissionService.js +331 -28
- package/build/dist/Server/Services/ApiKeyPermissionService.js.map +1 -1
- package/build/dist/Server/Services/CustomFieldMappingService.js +614 -0
- package/build/dist/Server/Services/CustomFieldMappingService.js.map +1 -0
- 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/GlobalConfigService.js +133 -0
- package/build/dist/Server/Services/GlobalConfigService.js.map +1 -1
- package/build/dist/Server/Services/IncidentCustomFieldService.js +93 -0
- package/build/dist/Server/Services/IncidentCustomFieldService.js.map +1 -1
- package/build/dist/Server/Services/IncidentService.js +32 -0
- package/build/dist/Server/Services/IncidentService.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/MetricService.js +163 -0
- package/build/dist/Server/Services/MetricService.js.map +1 -1
- package/build/dist/Server/Services/MonitorService.js +148 -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 +89 -36
- 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 +88 -30
- package/build/dist/Server/Services/ProjectService.js.map +1 -1
- package/build/dist/Server/Services/RoutineEmailSettingsService.js +69 -0
- package/build/dist/Server/Services/RoutineEmailSettingsService.js.map +1 -0
- package/build/dist/Server/Services/RumSessionReplayViewService.js +86 -24
- package/build/dist/Server/Services/RumSessionReplayViewService.js.map +1 -1
- package/build/dist/Server/Services/ScheduledMaintenanceCustomFieldService.js +93 -0
- package/build/dist/Server/Services/ScheduledMaintenanceCustomFieldService.js.map +1 -1
- package/build/dist/Server/Services/ScheduledMaintenanceService.js +29 -0
- package/build/dist/Server/Services/ScheduledMaintenanceService.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/TeamMemberService.js +62 -2
- package/build/dist/Server/Services/TeamMemberService.js.map +1 -1
- package/build/dist/Server/Services/TeamPermissionService.js +166 -3
- package/build/dist/Server/Services/TeamPermissionService.js.map +1 -1
- package/build/dist/Server/Services/TelemetryIngestionKeyService.js +562 -18
- package/build/dist/Server/Services/TelemetryIngestionKeyService.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 +66 -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/Services/UserTelegramService.js +257 -4
- package/build/dist/Server/Services/UserTelegramService.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/APIKey/AccessPermission.js +2 -2
- package/build/dist/Server/Utils/APIKey/AccessPermission.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/CustomField/CustomFieldDefinitionMappingHooks.js +27 -0
- package/build/dist/Server/Utils/CustomField/CustomFieldDefinitionMappingHooks.js.map +1 -0
- package/build/dist/Server/Utils/CustomField/CustomFieldMappingRegistry.js +226 -0
- package/build/dist/Server/Utils/CustomField/CustomFieldMappingRegistry.js.map +1 -0
- package/build/dist/Server/Utils/CustomField/CustomFieldMappingValidator.js +189 -0
- package/build/dist/Server/Utils/CustomField/CustomFieldMappingValidator.js.map +1 -0
- package/build/dist/Server/Utils/DataSource/EgressGuard.js +121 -7
- package/build/dist/Server/Utils/DataSource/EgressGuard.js.map +1 -1
- 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 +124 -0
- package/build/dist/Server/Utils/EmailRollup/EmailRollupConstants.js.map +1 -0
- package/build/dist/Server/Utils/EmailRollup/EmailRollupFlushRunner.js +733 -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/FrontendEnvironment.js +33 -0
- package/build/dist/Server/Utils/FrontendEnvironment.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 +28 -0
- package/build/dist/Server/Utils/LogRedaction.js.map +1 -1
- package/build/dist/Server/Utils/Logger.js +73 -1
- package/build/dist/Server/Utils/Logger.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/Criteria/CompareCriteria.js +287 -68
- package/build/dist/Server/Utils/Monitor/Criteria/CompareCriteria.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/IncomingRequestCriteria.js +20 -4
- package/build/dist/Server/Utils/Monitor/Criteria/IncomingRequestCriteria.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/MonitorAlert.js +29 -6
- package/build/dist/Server/Utils/Monitor/MonitorAlert.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 +125 -13
- 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/MonitorIncident.js +22 -6
- package/build/dist/Server/Utils/Monitor/MonitorIncident.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 +54 -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/Monitor/SeriesContextEnricher.js +237 -0
- package/build/dist/Server/Utils/Monitor/SeriesContextEnricher.js.map +1 -0
- 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/SSRFProtection.js +136 -9
- package/build/dist/Server/Utils/SSRFProtection.js.map +1 -1
- package/build/dist/Server/Utils/SessionReplay/SessionReplayGateCache.js +174 -89
- package/build/dist/Server/Utils/SessionReplay/SessionReplayGateCache.js.map +1 -1
- package/build/dist/Server/Utils/SessionReplay/SessionReplayHealthCounters.js +223 -0
- package/build/dist/Server/Utils/SessionReplay/SessionReplayHealthCounters.js.map +1 -0
- package/build/dist/Server/Utils/SessionReplay/SessionReplayReadService.js +945 -164
- package/build/dist/Server/Utils/SessionReplay/SessionReplayReadService.js.map +1 -1
- package/build/dist/Server/Utils/StartServer.js +41 -28
- package/build/dist/Server/Utils/StartServer.js.map +1 -1
- package/build/dist/Server/Utils/TelegramVerificationToken.js +129 -0
- package/build/dist/Server/Utils/TelegramVerificationToken.js.map +1 -0
- 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/PinServiceName.js +163 -0
- package/build/dist/Server/Utils/Telemetry/PinServiceName.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/TelemetryFanInWriter.js +28 -15
- package/build/dist/Server/Utils/Telemetry/TelemetryFanInWriter.js.map +1 -1
- package/build/dist/Server/Utils/Telemetry/TelemetryIngestionKeyGuard.js +64 -0
- package/build/dist/Server/Utils/Telemetry/TelemetryIngestionKeyGuard.js.map +1 -0
- package/build/dist/Server/Utils/Telemetry/TelemetryIngestionKeyRateLimiter.js +171 -0
- package/build/dist/Server/Utils/Telemetry/TelemetryIngestionKeyRateLimiter.js.map +1 -0
- package/build/dist/Server/Utils/Telemetry.js +162 -46
- package/build/dist/Server/Utils/Telemetry.js.map +1 -1
- package/build/dist/Server/Utils/VM/VMAPI.js.map +1 -1
- package/build/dist/Server/Utils/VM/VMRunner.js +780 -69
- package/build/dist/Server/Utils/VM/VMRunner.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/CustomField/CustomFieldMappingCatalog.js +60 -0
- package/build/dist/Types/CustomField/CustomFieldMappingCatalog.js.map +1 -0
- package/build/dist/Types/CustomField/CustomFieldMappingSourceResource.js +20 -0
- package/build/dist/Types/CustomField/CustomFieldMappingSourceResource.js.map +1 -0
- package/build/dist/Types/CustomField/CustomFieldValueMapping.js +141 -0
- package/build/dist/Types/CustomField/CustomFieldValueMapping.js.map +1 -0
- 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/Icon/IconProp.js +1 -0
- package/build/dist/Types/Icon/IconProp.js.map +1 -1
- package/build/dist/Types/JSONFunctions.js +118 -37
- package/build/dist/Types/JSONFunctions.js.map +1 -1
- package/build/dist/Types/Monitor/CephAlertTemplates.js +130 -171
- package/build/dist/Types/Monitor/CephAlertTemplates.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/DockerAlertTemplates.js +286 -121
- package/build/dist/Types/Monitor/DockerAlertTemplates.js.map +1 -1
- package/build/dist/Types/Monitor/DockerSwarmAlertTemplates.js +84 -105
- package/build/dist/Types/Monitor/DockerSwarmAlertTemplates.js.map +1 -1
- package/build/dist/Types/Monitor/HostAlertTemplates.js +250 -122
- package/build/dist/Types/Monitor/HostAlertTemplates.js.map +1 -1
- package/build/dist/Types/Monitor/IotAlertTemplates.js +81 -81
- package/build/dist/Types/Monitor/IotAlertTemplates.js.map +1 -1
- package/build/dist/Types/Monitor/KubernetesAlertTemplates.js +375 -215
- package/build/dist/Types/Monitor/KubernetesAlertTemplates.js.map +1 -1
- package/build/dist/Types/Monitor/KubernetesMetricCatalog.js +19 -19
- package/build/dist/Types/Monitor/KubernetesMetricCatalog.js.map +1 -1
- 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/PodmanAlertTemplates.js +104 -153
- package/build/dist/Types/Monitor/PodmanAlertTemplates.js.map +1 -1
- package/build/dist/Types/Monitor/ProxmoxAlertTemplates.js +156 -91
- package/build/dist/Types/Monitor/ProxmoxAlertTemplates.js.map +1 -1
- package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationSeverityMapper.js +67 -6
- package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationSeverityMapper.js.map +1 -1
- package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationUtil.js +38 -7
- package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationUtil.js.map +1 -1
- package/build/dist/Types/Monitor/Recommendation/RecommendationCriteriaBuilder.js +261 -0
- package/build/dist/Types/Monitor/Recommendation/RecommendationCriteriaBuilder.js.map +1 -0
- package/build/dist/Types/Monitor/RumAlertTemplates.js +46 -7
- package/build/dist/Types/Monitor/RumAlertTemplates.js.map +1 -1
- package/build/dist/Types/Monitor/SeriesContext/SeriesDebugHints.js +422 -0
- package/build/dist/Types/Monitor/SeriesContext/SeriesDebugHints.js.map +1 -0
- package/build/dist/Types/Monitor/SeriesContext/SeriesLabelDisplay.js +441 -0
- package/build/dist/Types/Monitor/SeriesContext/SeriesLabelDisplay.js.map +1 -0
- package/build/dist/Types/Monitor/ServiceAlertTemplates.js +79 -15
- package/build/dist/Types/Monitor/ServiceAlertTemplates.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/Monitor/UptimeHistoryLabels.js +17 -0
- package/build/dist/Types/Monitor/UptimeHistoryLabels.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/NotificationSetting/RoutineEmailEvents.js +29 -0
- package/build/dist/Types/NotificationSetting/RoutineEmailEvents.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/Rum/SessionReplay.js +117 -0
- package/build/dist/Types/Rum/SessionReplay.js.map +1 -1
- package/build/dist/Types/Rum/SessionReplayApi.js +181 -0
- package/build/dist/Types/Rum/SessionReplayApi.js.map +1 -0
- package/build/dist/Types/Rum/SessionReplayCaptureTrigger.js +21 -12
- package/build/dist/Types/Rum/SessionReplayCaptureTrigger.js.map +1 -1
- package/build/dist/Types/Rum/SessionReplayConsentMode.js +11 -7
- package/build/dist/Types/Rum/SessionReplayConsentMode.js.map +1 -1
- package/build/dist/Types/Rum/SessionReplayCustomEvents.js +172 -0
- package/build/dist/Types/Rum/SessionReplayCustomEvents.js.map +1 -0
- package/build/dist/Types/Rum/SessionReplayHealth.js +37 -0
- package/build/dist/Types/Rum/SessionReplayHealth.js.map +1 -0
- package/build/dist/Types/Telemetry/ErrorClass.js +216 -0
- package/build/dist/Types/Telemetry/ErrorClass.js.map +1 -0
- package/build/dist/Types/Telemetry/TelemetryIngestSurface.js +85 -0
- package/build/dist/Types/Telemetry/TelemetryIngestSurface.js.map +1 -0
- package/build/dist/Types/Telemetry/TelemetryIngestionKeyPolicy.js +15 -0
- package/build/dist/Types/Telemetry/TelemetryIngestionKeyPolicy.js.map +1 -0
- package/build/dist/Types/Telemetry/TelemetryIngestionKeyType.js +30 -0
- package/build/dist/Types/Telemetry/TelemetryIngestionKeyType.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/Types/WebsiteRequest.js +55 -3
- package/build/dist/Types/WebsiteRequest.js.map +1 -1
- package/build/dist/UI/Components/Charts/Area/AreaChart.js +13 -2
- package/build/dist/UI/Components/Charts/Area/AreaChart.js.map +1 -1
- package/build/dist/UI/Components/Charts/Bar/BarChart.js +6 -2
- package/build/dist/UI/Components/Charts/Bar/BarChart.js.map +1 -1
- package/build/dist/UI/Components/Charts/Line/LineChart.js +13 -2
- package/build/dist/UI/Components/Charts/Line/LineChart.js.map +1 -1
- package/build/dist/UI/Components/Charts/Types/XAxis/XAxis.js.map +1 -1
- package/build/dist/UI/Components/Charts/Utils/DataPoint.js +15 -3
- package/build/dist/UI/Components/Charts/Utils/DataPoint.js.map +1 -1
- package/build/dist/UI/Components/Charts/Utils/TimeAnnotation.js +40 -9
- package/build/dist/UI/Components/Charts/Utils/TimeAnnotation.js.map +1 -1
- package/build/dist/UI/Components/Charts/Utils/XAxis.js +186 -0
- package/build/dist/UI/Components/Charts/Utils/XAxis.js.map +1 -1
- package/build/dist/UI/Components/CommandPalette/CommandPalette.js +2 -7
- package/build/dist/UI/Components/CommandPalette/CommandPalette.js.map +1 -1
- package/build/dist/UI/Components/CustomFields/CustomFieldsDetail.js +80 -6
- package/build/dist/UI/Components/CustomFields/CustomFieldsDetail.js.map +1 -1
- package/build/dist/UI/Components/CustomFields/MapFromCustomFieldInput.js +118 -0
- package/build/dist/UI/Components/CustomFields/MapFromCustomFieldInput.js.map +1 -0
- 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/Graphs/DayUptimeGraph.js +112 -7
- package/build/dist/UI/Components/Graphs/DayUptimeGraph.js.map +1 -1
- package/build/dist/UI/Components/Graphs/UptimeBarTooltip.js +5 -162
- package/build/dist/UI/Components/Graphs/UptimeBarTooltip.js.map +1 -1
- package/build/dist/UI/Components/Graphs/UptimeDaySummary.js +181 -0
- package/build/dist/UI/Components/Graphs/UptimeDaySummary.js.map +1 -0
- package/build/dist/UI/Components/Header/Header.js +2 -3
- package/build/dist/UI/Components/Header/Header.js.map +1 -1
- package/build/dist/UI/Components/Header/IconDropdown/IconDropdownItem.js +2 -1
- package/build/dist/UI/Components/Header/IconDropdown/IconDropdownItem.js.map +1 -1
- package/build/dist/UI/Components/Header/IconDropdown/IconDropdownMenu.js +7 -1
- package/build/dist/UI/Components/Header/IconDropdown/IconDropdownMenu.js.map +1 -1
- package/build/dist/UI/Components/Header/ProjectPicker/ProjectPicker.js +7 -1
- package/build/dist/UI/Components/Header/ProjectPicker/ProjectPicker.js.map +1 -1
- package/build/dist/UI/Components/HeaderAlert/NotificationBell/NotificationBellDropdown.js +7 -1
- package/build/dist/UI/Components/HeaderAlert/NotificationBell/NotificationBellDropdown.js.map +1 -1
- package/build/dist/UI/Components/Icon/Icon.js +5 -0
- package/build/dist/UI/Components/Icon/Icon.js.map +1 -1
- package/build/dist/UI/Components/JSONTable/JSONTable.js +2 -2
- package/build/dist/UI/Components/JSONTable/JSONTable.js.map +1 -1
- package/build/dist/UI/Components/KeyboardShortcut/KeyboardShortcutsModal.js +35 -0
- package/build/dist/UI/Components/KeyboardShortcut/KeyboardShortcutsModal.js.map +1 -0
- 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/Monitor/SeriesDebugCommandsViewer.js +34 -0
- package/build/dist/UI/Components/Monitor/SeriesDebugCommandsViewer.js.map +1 -0
- package/build/dist/UI/Components/Monitor/SeriesLabelsViewer.js +49 -0
- package/build/dist/UI/Components/Monitor/SeriesLabelsViewer.js.map +1 -0
- package/build/dist/UI/Components/MonitorGraphs/Uptime.js +1 -1
- package/build/dist/UI/Components/MonitorGraphs/Uptime.js.map +1 -1
- package/build/dist/UI/Components/MonitorGraphs/UptimeBarDayModal.js +32 -6
- package/build/dist/UI/Components/MonitorGraphs/UptimeBarDayModal.js.map +1 -1
- package/build/dist/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.js +77 -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/Components/StatusPage/ResourceGroupSection.js +22 -1
- package/build/dist/UI/Components/StatusPage/ResourceGroupSection.js.map +1 -1
- package/build/dist/UI/Components/Table/CellClassName.js +55 -0
- package/build/dist/UI/Components/Table/CellClassName.js.map +1 -0
- package/build/dist/UI/Components/Table/TableRow.js +16 -13
- package/build/dist/UI/Components/Table/TableRow.js.map +1 -1
- package/build/dist/UI/Components/Table/TableSkeletonRows.js +9 -8
- package/build/dist/UI/Components/Table/TableSkeletonRows.js.map +1 -1
- package/build/dist/UI/Components/Tooltip/Tooltip.js +25 -1
- package/build/dist/UI/Components/Tooltip/Tooltip.js.map +1 -1
- package/build/dist/UI/Components/Workflow/ComponentsModal.js +47 -30
- package/build/dist/UI/Components/Workflow/ComponentsModal.js.map +1 -1
- package/build/dist/UI/Components/Workflow/NodePlacement.js +37 -0
- package/build/dist/UI/Components/Workflow/NodePlacement.js.map +1 -0
- package/build/dist/UI/Components/Workflow/Workflow.js +35 -18
- package/build/dist/UI/Components/Workflow/Workflow.js.map +1 -1
- package/build/dist/UI/Config.js +10 -20
- package/build/dist/UI/Config.js.map +1 -1
- package/build/dist/UI/Utils/GlobalKeyboardShortcut.js +138 -0
- package/build/dist/UI/Utils/GlobalKeyboardShortcut.js.map +1 -0
- 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/Telemetry/BrowserTelemetryConfig.js +14 -0
- package/build/dist/UI/Utils/Telemetry/BrowserTelemetryConfig.js.map +1 -0
- package/build/dist/UI/Utils/Telemetry/Telemetry.js +7 -5
- package/build/dist/UI/Utils/Telemetry/Telemetry.js.map +1 -1
- package/build/dist/UI/Utils/TestLLMProvider.js +4 -5
- package/build/dist/UI/Utils/TestLLMProvider.js.map +1 -1
- package/build/dist/Utils/API.js +67 -5
- package/build/dist/Utils/API.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/HTTPResponseBodyReader.js +157 -0
- package/build/dist/Utils/HTTPResponseBodyReader.js.map +1 -0
- 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/DiscoveryScanStatus.js +69 -0
- package/build/dist/Utils/NetworkDiscovery/DiscoveryScanStatus.js.map +1 -0
- package/build/dist/Utils/NetworkDiscovery/PingMonitorBuilder.js +85 -13
- package/build/dist/Utils/NetworkDiscovery/PingMonitorBuilder.js.map +1 -1
- package/build/dist/Utils/NetworkSite/SiteStatusRollupUtil.js +30 -15
- package/build/dist/Utils/NetworkSite/SiteStatusRollupUtil.js.map +1 -1
- package/build/dist/Utils/NetworkSite/TypeHierarchyUtil.js +191 -0
- package/build/dist/Utils/NetworkSite/TypeHierarchyUtil.js.map +1 -0
- package/build/dist/Utils/Rum/ChunkMath.js +76 -0
- package/build/dist/Utils/Rum/ChunkMath.js.map +1 -1
- package/build/dist/Utils/Rum/SessionReplayHealth.js +534 -0
- package/build/dist/Utils/Rum/SessionReplayHealth.js.map +1 -0
- package/build/dist/Utils/Rum/SessionReplayStringMap.js +165 -0
- package/build/dist/Utils/Rum/SessionReplayStringMap.js.map +1 -0
- package/build/dist/Utils/Schema/ModelSchema.js +1 -0
- package/build/dist/Utils/Schema/ModelSchema.js.map +1 -1
- package/build/dist/Utils/StatusPage/ResourceSearch.js +200 -0
- package/build/dist/Utils/StatusPage/ResourceSearch.js.map +1 -0
- package/build/dist/Utils/Telemetry/OriginAllowList.js +299 -0
- package/build/dist/Utils/Telemetry/OriginAllowList.js.map +1 -0
- package/build/dist/Utils/Uptime/DayUptimeGraphUtil.js +147 -0
- package/build/dist/Utils/Uptime/DayUptimeGraphUtil.js.map +1 -0
- package/build/dist/Utils/ValueFormatter.js +32 -1
- package/build/dist/Utils/ValueFormatter.js.map +1 -1
- package/package.json +2 -2
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
import ObjectID from "../ObjectID";
|
|
2
2
|
import MonitorStep from "./MonitorStep";
|
|
3
3
|
import MonitorCriteria from "./MonitorCriteria";
|
|
4
|
-
import
|
|
5
|
-
import
|
|
6
|
-
import { CheckOn, FilterType, EvaluateOverTimeType } from "./CriteriaFilter";
|
|
4
|
+
import { buildHealthyCriteriaInstance, buildUnhealthyCriteriaInstance, } from "./Recommendation/RecommendationCriteriaBuilder";
|
|
5
|
+
import { FilterType } from "./CriteriaFilter";
|
|
7
6
|
import { KubernetesResourceScope, } from "./MonitorStepKubernetesMonitor";
|
|
8
7
|
import RollingTime from "../RollingTime/RollingTime";
|
|
9
8
|
import MetricsAggregationType from "../Metrics/MetricsAggregationType";
|
|
@@ -42,85 +41,16 @@ export function buildKubernetesMonitorStep(args) {
|
|
|
42
41
|
return monitorStep;
|
|
43
42
|
}
|
|
44
43
|
export function buildOfflineCriteriaInstance(args) {
|
|
45
|
-
|
|
46
|
-
const incidentTitle = args.incidentTitle || `${args.monitorName} - Alert Triggered`;
|
|
47
|
-
const incidentDescription = args.incidentDescription ||
|
|
48
|
-
`${args.monitorName} has triggered an alert condition. See root cause for detailed Kubernetes resource information.`;
|
|
49
|
-
instance.data = {
|
|
50
|
-
id: ObjectID.generate().toString(),
|
|
51
|
-
monitorStatusId: args.offlineMonitorStatusId,
|
|
52
|
-
filterCondition: FilterCondition.Any,
|
|
53
|
-
filters: [
|
|
54
|
-
{
|
|
55
|
-
checkOn: CheckOn.MetricValue,
|
|
56
|
-
filterType: args.filterType,
|
|
57
|
-
metricMonitorOptions: {
|
|
58
|
-
metricAggregationType: EvaluateOverTimeType.AnyValue,
|
|
59
|
-
metricAlias: args.metricAlias,
|
|
60
|
-
},
|
|
61
|
-
value: args.value,
|
|
62
|
-
},
|
|
63
|
-
],
|
|
64
|
-
incidents: [
|
|
65
|
-
{
|
|
66
|
-
title: incidentTitle,
|
|
67
|
-
description: incidentDescription,
|
|
68
|
-
incidentSeverityId: args.incidentSeverityId,
|
|
69
|
-
autoResolveIncident: true,
|
|
70
|
-
id: ObjectID.generate().toString(),
|
|
71
|
-
onCallPolicyIds: [],
|
|
72
|
-
},
|
|
73
|
-
],
|
|
74
|
-
alerts: [
|
|
75
|
-
{
|
|
76
|
-
title: incidentTitle,
|
|
77
|
-
description: incidentDescription,
|
|
78
|
-
alertSeverityId: args.alertSeverityId,
|
|
79
|
-
autoResolveAlert: true,
|
|
80
|
-
id: ObjectID.generate().toString(),
|
|
81
|
-
onCallPolicyIds: [],
|
|
82
|
-
},
|
|
83
|
-
],
|
|
84
|
-
changeMonitorStatus: true,
|
|
85
|
-
createIncidents: true,
|
|
86
|
-
createAlerts: true,
|
|
87
|
-
name: args.criteriaName || `${args.monitorName} - Unhealthy`,
|
|
88
|
-
description: args.criteriaDescription || `Criteria for detecting unhealthy state.`,
|
|
89
|
-
};
|
|
90
|
-
return instance;
|
|
44
|
+
return buildUnhealthyCriteriaInstance(Object.assign(Object.assign({}, args), { resourceNoun: "Kubernetes resource" }));
|
|
91
45
|
}
|
|
92
46
|
export function buildOnlineCriteriaInstance(args) {
|
|
93
|
-
|
|
94
|
-
instance.data = {
|
|
95
|
-
id: ObjectID.generate().toString(),
|
|
96
|
-
monitorStatusId: args.onlineMonitorStatusId,
|
|
97
|
-
filterCondition: FilterCondition.Any,
|
|
98
|
-
filters: [
|
|
99
|
-
{
|
|
100
|
-
checkOn: CheckOn.MetricValue,
|
|
101
|
-
filterType: args.filterType,
|
|
102
|
-
metricMonitorOptions: {
|
|
103
|
-
metricAggregationType: EvaluateOverTimeType.AnyValue,
|
|
104
|
-
metricAlias: args.metricAlias,
|
|
105
|
-
},
|
|
106
|
-
value: args.value,
|
|
107
|
-
},
|
|
108
|
-
],
|
|
109
|
-
incidents: [],
|
|
110
|
-
alerts: [],
|
|
111
|
-
changeMonitorStatus: true,
|
|
112
|
-
createIncidents: false,
|
|
113
|
-
createAlerts: false,
|
|
114
|
-
name: "Healthy",
|
|
115
|
-
description: "Criteria for healthy state.",
|
|
116
|
-
};
|
|
117
|
-
return instance;
|
|
47
|
+
return buildHealthyCriteriaInstance(args);
|
|
118
48
|
}
|
|
119
49
|
/**
|
|
120
50
|
* Build a single-query monitor config.
|
|
121
51
|
*
|
|
122
|
-
* `
|
|
123
|
-
* the metric by
|
|
52
|
+
* `groupByAttributeKeys` makes the monitor PER-SERIES: the worker splits
|
|
53
|
+
* the metric by those attributes and every group is evaluated — and paged —
|
|
124
54
|
* on its own, so a cluster of 200 pods raises one incident per unhealthy
|
|
125
55
|
* pod rather than one incident for the whole cluster that then dedupes
|
|
126
56
|
* every later pod away. Omitting it keeps the monitor whole-cluster.
|
|
@@ -131,7 +61,17 @@ export function buildOnlineCriteriaInstance(args) {
|
|
|
131
61
|
* scheduler backlog — where there is exactly one value for the cluster
|
|
132
62
|
* and splitting it would invent series that do not exist.
|
|
133
63
|
*
|
|
134
|
-
*
|
|
64
|
+
* Pass MORE than one key when the object's identity genuinely needs
|
|
65
|
+
* them, and the group-by set is what the alert can name afterwards. A
|
|
66
|
+
* bare pod name is not an identity — pod names are unique only within a
|
|
67
|
+
* namespace — and, more practically, an alert that says
|
|
68
|
+
* "Pod: checkout-7d9f-2xk" without the namespace sends the engineer to
|
|
69
|
+
* `kubectl` with a guess. The series labels are stored on the alert and
|
|
70
|
+
* rendered into its title and description (SeriesLabelDisplay), so every
|
|
71
|
+
* key added here is one more thing the on-call engineer does not have to
|
|
72
|
+
* go and look up.
|
|
73
|
+
*
|
|
74
|
+
* The keys are the ClickHouse-stored attribute names, which carry the
|
|
135
75
|
* `resource.` prefix for OTel resource attributes (see
|
|
136
76
|
* OtelMetricsIngestService — resource attributes are stamped with
|
|
137
77
|
* `prefixKeysWithString: "resource"`). So node grouping is
|
|
@@ -152,15 +92,16 @@ export function buildKubernetesMonitorConfig(args) {
|
|
|
152
92
|
title: args.metricAlias,
|
|
153
93
|
description: args.metricAlias,
|
|
154
94
|
legend: args.metricAlias,
|
|
155
|
-
legendUnit:
|
|
95
|
+
legendUnit: args.legendUnit,
|
|
156
96
|
},
|
|
157
97
|
metricQueryData: Object.assign({ filterData: {
|
|
158
98
|
metricName: args.metricName,
|
|
159
99
|
attributes: args.attributes || {},
|
|
160
100
|
aggegationType: args.aggregationType,
|
|
161
101
|
aggregateBy: {},
|
|
162
|
-
} }, (args.
|
|
163
|
-
|
|
102
|
+
} }, (args.groupByAttributeKeys &&
|
|
103
|
+
args.groupByAttributeKeys.length > 0
|
|
104
|
+
? { groupByAttributeKeys: args.groupByAttributeKeys }
|
|
164
105
|
: {})),
|
|
165
106
|
},
|
|
166
107
|
],
|
|
@@ -171,8 +112,8 @@ export function buildKubernetesMonitorConfig(args) {
|
|
|
171
112
|
}
|
|
172
113
|
/**
|
|
173
114
|
* Build a per-series ratio monitor: `(numerator / denominator) * 100`,
|
|
174
|
-
* grouped by
|
|
175
|
-
* group (e.g. per node).
|
|
115
|
+
* grouped by one or more OpenTelemetry attributes so one incident fires
|
|
116
|
+
* per group (e.g. per node, or per namespace+pod).
|
|
176
117
|
*
|
|
177
118
|
* Used for saturation metrics that aren't emitted as a single ready-made
|
|
178
119
|
* series — e.g. node request utilization (summed pod requests ÷ node
|
|
@@ -200,11 +141,33 @@ export function buildKubernetesMonitorConfig(args) {
|
|
|
200
141
|
* both reported the same row count every minute — fragile across
|
|
201
142
|
* restarts / missed scrapes / minute-boundary jitter.
|
|
202
143
|
*
|
|
203
|
-
* The group-by
|
|
204
|
-
* the `resource.` prefix for OTel resource attributes (see
|
|
144
|
+
* The group-by keys are the ClickHouse-stored attribute names, which
|
|
145
|
+
* carry the `resource.` prefix for OTel resource attributes (see
|
|
205
146
|
* OtelMetricsIngestService — resource attributes are stamped with
|
|
206
147
|
* `prefixKeysWithString: "resource"`). So node grouping is
|
|
207
148
|
* `resource.k8s.node.name`, not the bare `k8s.node.name`.
|
|
149
|
+
*
|
|
150
|
+
* CHOOSING THE KEYS IS NOT FREE HERE, and the constraint is different
|
|
151
|
+
* from the single-query builder. The two queries are joined by series
|
|
152
|
+
* FINGERPRINT — `buildSeriesBreakdown` buckets each query's rows by the
|
|
153
|
+
* hash of this exact key set — so a key that only ONE side carries
|
|
154
|
+
* splits the two into fingerprints that never meet, the formula
|
|
155
|
+
* evaluates against an empty operand, and the monitor silently stops
|
|
156
|
+
* alerting. Not "alerts less precisely": stops. So only add a key both
|
|
157
|
+
* metrics are GUARANTEED to carry, from their receivers themselves
|
|
158
|
+
* rather than from best-effort enrichment:
|
|
159
|
+
*
|
|
160
|
+
* - `k8s.namespace.name` is safe for pod/container/workload ratios:
|
|
161
|
+
* kubeletstats stamps it on pod metrics and the k8s_cluster receiver
|
|
162
|
+
* stamps it on container and workload metrics, both directly.
|
|
163
|
+
*
|
|
164
|
+
* - `k8s.node.name` is NOT safe on a pod ratio whose denominator is a
|
|
165
|
+
* k8s_cluster metric. kubeletstats always has it (the receiver, plus
|
|
166
|
+
* the DaemonSet's `resource` processor stamping NODE_NAME); on the
|
|
167
|
+
* k8s_cluster side it can only arrive via the k8sattributes
|
|
168
|
+
* processor, which is best-effort and depends on pod association
|
|
169
|
+
* still resolving. A single-query template over a kubeletstats
|
|
170
|
+
* metric has no join to break and may group by it freely.
|
|
208
171
|
*/
|
|
209
172
|
export function buildKubernetesRatioMonitorConfig(args) {
|
|
210
173
|
const aggregationType = args.aggregationType || MetricsAggregationType.Sum;
|
|
@@ -224,7 +187,7 @@ export function buildKubernetesRatioMonitorConfig(args) {
|
|
|
224
187
|
aggegationType: aggregationType,
|
|
225
188
|
aggregateBy: {},
|
|
226
189
|
},
|
|
227
|
-
groupByAttributeKeys:
|
|
190
|
+
groupByAttributeKeys: args.groupByAttributeKeys,
|
|
228
191
|
},
|
|
229
192
|
};
|
|
230
193
|
};
|
|
@@ -247,7 +210,8 @@ export function buildKubernetesRatioMonitorConfig(args) {
|
|
|
247
210
|
legendUnit: "%",
|
|
248
211
|
},
|
|
249
212
|
metricFormulaData: {
|
|
250
|
-
metricFormula:
|
|
213
|
+
metricFormula: args.formula ||
|
|
214
|
+
`(${args.numeratorAlias} / ${args.denominatorAlias}) * 100`,
|
|
251
215
|
},
|
|
252
216
|
},
|
|
253
217
|
],
|
|
@@ -259,7 +223,13 @@ export function buildKubernetesRatioMonitorConfig(args) {
|
|
|
259
223
|
const crashLoopBackOffTemplate = {
|
|
260
224
|
id: "k8s-crashloopbackoff",
|
|
261
225
|
name: "CrashLoopBackOff Detection",
|
|
262
|
-
|
|
226
|
+
/*
|
|
227
|
+
* No backticks in here. `template.description` is rendered as raw JSX
|
|
228
|
+
* text on the recommendation card
|
|
229
|
+
* (KubernetesTemplatePicker.tsx renders `{template.description}` inside a
|
|
230
|
+
* <p>, not markdown), so a code span would show up as literal backticks.
|
|
231
|
+
*/
|
|
232
|
+
description: "Alert when a container has restarted more than 5 times since its pod was created. k8s.container.restarts is the container status' cumulative restartCount, so this is a lifetime count for the CURRENT pod rather than a rate: it resets only when the pod object is replaced, which is also when this alert auto-resolves.",
|
|
263
233
|
category: "Workload",
|
|
264
234
|
severity: "Critical",
|
|
265
235
|
getMonitorStep: (args) => {
|
|
@@ -278,7 +248,11 @@ const crashLoopBackOffTemplate = {
|
|
|
278
248
|
* whichever pod in the cluster crashed first. Max over the window
|
|
279
249
|
* therefore becomes "the worst container in THIS pod".
|
|
280
250
|
*/
|
|
281
|
-
|
|
251
|
+
groupByAttributeKeys: [
|
|
252
|
+
"resource.k8s.namespace.name",
|
|
253
|
+
"resource.k8s.pod.name",
|
|
254
|
+
"resource.k8s.container.name",
|
|
255
|
+
],
|
|
282
256
|
}),
|
|
283
257
|
offlineCriteriaInstance: buildOfflineCriteriaInstance({
|
|
284
258
|
offlineMonitorStatusId: args.offlineMonitorStatusId,
|
|
@@ -289,9 +263,29 @@ const crashLoopBackOffTemplate = {
|
|
|
289
263
|
filterType: FilterType.GreaterThan,
|
|
290
264
|
value: 5,
|
|
291
265
|
incidentTitle: `[K8s] CrashLoopBackOff Detected - ${args.monitorName}`,
|
|
292
|
-
|
|
266
|
+
/*
|
|
267
|
+
* `k8s.container.restarts` is containerStatus.restartCount: it only
|
|
268
|
+
* ever goes up for the life of the pod object. Everything this copy
|
|
269
|
+
* says follows from that, so keep the two facts in it — the count is
|
|
270
|
+
* cumulative, and the alert therefore clears on pod replacement
|
|
271
|
+
* rather than when the crashing stops.
|
|
272
|
+
*
|
|
273
|
+
* No angle-bracket placeholders in here. Incident.description is a
|
|
274
|
+
* Markdown column, and the subscriber path runs it through
|
|
275
|
+
* Markdown.convertToPlainText, which strips /<[^>]*>/g BEFORE it
|
|
276
|
+
* strips code-span backticks — so `<pod>` would silently vanish from
|
|
277
|
+
* every SMS.
|
|
278
|
+
*
|
|
279
|
+
* This template is GROUPED (namespace + pod + container), so it does
|
|
280
|
+
* NOT send the reader to the root cause for identity: a grouped
|
|
281
|
+
* alert's rootCause is only the compare line
|
|
282
|
+
* (MonitorCriteriaEvaluator.collectPerSeriesMatches). The identity
|
|
283
|
+
* lives in the block SeriesContextEnricher appends to the
|
|
284
|
+
* description.
|
|
285
|
+
*/
|
|
286
|
+
incidentDescription: `A container has restarted more than 5 times since its pod was created — the signature of a CrashLoopBackOff. This count is cumulative for THIS pod and never decreases, so the alert clears when the pod is replaced (a redeploy, an eviction, a node drain) rather than at the moment the crashing stops. Common causes: a crash on startup, a missing config map or secret, an OOMKill against the container's memory limit, or a failing liveness probe. The affected namespace, pod and container are named under "Affected resource" below, with the kubectl commands to inspect them — including the previous instance's logs — under "Start here".`,
|
|
293
287
|
criteriaName: "CrashLoopBackOff - Container Restarts > 5",
|
|
294
|
-
criteriaDescription: "Triggers when
|
|
288
|
+
criteriaDescription: "Triggers when a container's cumulative restart count for its current pod exceeds 5. This is not a per-window rate: a container that crash-looped and then stabilised keeps the alert open until its pod is replaced, and a container that is actively crash-looping but has only reached 3 restarts does not fire yet.",
|
|
295
289
|
}),
|
|
296
290
|
onlineCriteriaInstance: buildOnlineCriteriaInstance({
|
|
297
291
|
onlineMonitorStatusId: args.onlineMonitorStatusId,
|
|
@@ -309,23 +303,56 @@ const podPendingTemplate = {
|
|
|
309
303
|
category: "Scheduling",
|
|
310
304
|
severity: "Warning",
|
|
311
305
|
getMonitorStep: (args) => {
|
|
312
|
-
const metricAlias = "
|
|
306
|
+
const metricAlias = "min_pod_phase";
|
|
313
307
|
return buildKubernetesMonitorStep({
|
|
314
308
|
kubernetesMonitor: buildKubernetesMonitorConfig({
|
|
315
309
|
clusterIdentifier: args.clusterIdentifier,
|
|
316
310
|
metricName: "k8s.pod.phase",
|
|
317
311
|
metricAlias,
|
|
318
312
|
resourceScope: KubernetesResourceScope.Cluster,
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
313
|
+
/*
|
|
314
|
+
* 15 minutes, with the sustained (AllValues) default: a pod that
|
|
315
|
+
* is Pending for a few seconds while it is scheduled is normal on
|
|
316
|
+
* any cluster doing deployments. "Stuck" means every per-minute
|
|
317
|
+
* bucket in the window still found a pod waiting.
|
|
318
|
+
*/
|
|
319
|
+
rollingTime: RollingTime.Past15Minutes,
|
|
320
|
+
/*
|
|
321
|
+
* `k8s.pod.phase` encodes the phase in the VALUE, not in a label.
|
|
322
|
+
* The `k8s_cluster` receiver emits one gauge per pod per scrape,
|
|
323
|
+
* numbered in the order KubernetesMetricCatalog names them:
|
|
324
|
+
* 1 = Pending, 2 = Running, 3 = Succeeded, 4 = Failed,
|
|
325
|
+
* 5 = Unknown. The numeric mapping comes from the receiver itself;
|
|
326
|
+
* the catalog names the phases but carries no codes.
|
|
327
|
+
*
|
|
328
|
+
* This template used to carry
|
|
329
|
+
* `attributes: { "resource.k8s.pod.phase": "Pending" }` — an
|
|
330
|
+
* attribute nothing produces. The `k8s_cluster` receiver does not
|
|
331
|
+
* stamp it, the agent's `k8sattributes` processor extracts only
|
|
332
|
+
* name/uid/namespace/node/workload/container keys
|
|
333
|
+
* (configmap-deployment.yaml), and nothing in the ingest path
|
|
334
|
+
* synthesises it. The worker copies this map straight into the
|
|
335
|
+
* ClickHouse predicate (MonitorTelemetryMonitor.monitorKubernetes),
|
|
336
|
+
* so the query matched zero rows: the monitor never fired, never
|
|
337
|
+
* resolved, and never reported that it was watching nothing.
|
|
338
|
+
*
|
|
339
|
+
* Pending is the LOWEST phase code, so the cluster-wide Min is
|
|
340
|
+
* exactly 1 when at least one pod is Pending, and >= 2 otherwise.
|
|
341
|
+
* Min also avoids the trap the previous `Sum` walked into, which
|
|
342
|
+
* Common/Types/Dashboard/DashboardTemplates.ts documents: a
|
|
343
|
+
* per-resource gauge re-emitted on every scrape sums to
|
|
344
|
+
* (pods x scrapes). This is the same idiom k8s-node-not-ready
|
|
345
|
+
* already uses on `k8s.node.condition_ready` (Min + an equality
|
|
346
|
+
* against the bad value).
|
|
347
|
+
*/
|
|
348
|
+
aggregationType: MetricsAggregationType.Min,
|
|
322
349
|
/*
|
|
323
350
|
* Deliberately NOT grouped, unlike the other pod-level templates.
|
|
324
351
|
*
|
|
325
|
-
* This is a cluster-wide
|
|
326
|
-
*
|
|
327
|
-
*
|
|
328
|
-
*
|
|
352
|
+
* This is a cluster-wide statement about scheduling capacity
|
|
353
|
+
* ("somebody is stuck waiting") rather than about any one pod's
|
|
354
|
+
* health — the same signal as k8s-scheduler-backlog, seen from
|
|
355
|
+
* the pod side.
|
|
329
356
|
*
|
|
330
357
|
* Grouping it by `resource.k8s.pod.name` would fan out per pod
|
|
331
358
|
* name, and pending pod names are ephemeral: a stuck rollout burns
|
|
@@ -342,18 +369,34 @@ const podPendingTemplate = {
|
|
|
342
369
|
alertSeverityId: args.defaultAlertSeverityId,
|
|
343
370
|
monitorName: args.monitorName,
|
|
344
371
|
metricAlias,
|
|
345
|
-
filterType: FilterType.
|
|
346
|
-
value:
|
|
372
|
+
filterType: FilterType.EqualTo,
|
|
373
|
+
value: 1,
|
|
347
374
|
incidentTitle: `[K8s] Pods Stuck in Pending - ${args.monitorName}`,
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
375
|
+
/*
|
|
376
|
+
* Deliberately self-sufficient: it does NOT say "see the affected
|
|
377
|
+
* resources below". The shared Kubernetes breakdown renderer sorts
|
|
378
|
+
* affected resources by descending metric value ("worst first"),
|
|
379
|
+
* which for a phase code puts Unknown(5)/Failed(4)/Succeeded(3)
|
|
380
|
+
* pods above the Pending(1) one this alert is about, so the table
|
|
381
|
+
* cannot be relied on to name the stuck pod until that renderer
|
|
382
|
+
* learns a per-metric sort direction.
|
|
383
|
+
*/
|
|
384
|
+
incidentDescription: `At least one pod has been in Pending phase in every sample of the last 15 minutes and cannot be scheduled. This typically indicates insufficient CPU/memory on the nodes, node affinity or taint restrictions, an unbound PersistentVolumeClaim, or an exceeded ResourceQuota. Run \`kubectl get pods --all-namespaces --field-selector=status.phase=Pending\` and \`kubectl describe\` one of them to see the scheduler's reason.`,
|
|
385
|
+
criteriaName: "Pods Pending - Phase = Pending (1)",
|
|
386
|
+
criteriaDescription: "Triggers when the lowest pod phase code in the cluster is 1 (Pending) for every sample in the monitoring window.",
|
|
351
387
|
}),
|
|
352
388
|
onlineCriteriaInstance: buildOnlineCriteriaInstance({
|
|
353
389
|
onlineMonitorStatusId: args.onlineMonitorStatusId,
|
|
354
390
|
metricAlias,
|
|
355
|
-
|
|
356
|
-
|
|
391
|
+
/*
|
|
392
|
+
* NotEqualTo rather than GreaterThan: getRecoveryThreshold gives
|
|
393
|
+
* no dead band to an equality comparison, so the recovery value
|
|
394
|
+
* stays exactly 1. `GreaterThan` would complement back to
|
|
395
|
+
* LessThanOrEqualTo and derive a 1.1 recovery threshold — a
|
|
396
|
+
* fractional edge on a metric whose values are an enum.
|
|
397
|
+
*/
|
|
398
|
+
filterType: FilterType.NotEqualTo,
|
|
399
|
+
value: 1,
|
|
357
400
|
}),
|
|
358
401
|
});
|
|
359
402
|
},
|
|
@@ -379,7 +422,7 @@ const nodeNotReadyTemplate = {
|
|
|
379
422
|
* across the fleet is 0 as soon as ANY node is down, and the
|
|
380
423
|
* second node to fail dedupes behind the first one's incident.
|
|
381
424
|
*/
|
|
382
|
-
|
|
425
|
+
groupByAttributeKeys: ["resource.k8s.node.name"],
|
|
383
426
|
}),
|
|
384
427
|
offlineCriteriaInstance: buildOfflineCriteriaInstance({
|
|
385
428
|
offlineMonitorStatusId: args.offlineMonitorStatusId,
|
|
@@ -390,7 +433,7 @@ const nodeNotReadyTemplate = {
|
|
|
390
433
|
filterType: FilterType.EqualTo,
|
|
391
434
|
value: 0,
|
|
392
435
|
incidentTitle: `[K8s] Node Not Ready - ${args.monitorName}`,
|
|
393
|
-
incidentDescription: `A Kubernetes node has transitioned to NotReady state. This is a critical condition that affects all pods scheduled on this node.
|
|
436
|
+
incidentDescription: `A Kubernetes node has transitioned to NotReady state. This is a critical condition that affects all pods scheduled on this node. The affected node is named under "Affected resource" below; use the kubectl commands under "Start here" to read its conditions and list what it is still hosting.`,
|
|
394
437
|
criteriaName: "Node NotReady - Condition = 0",
|
|
395
438
|
criteriaDescription: "Triggers when any node reports a NotReady condition (value 0).",
|
|
396
439
|
}),
|
|
@@ -416,7 +459,7 @@ const highCpuTemplate = {
|
|
|
416
459
|
clusterIdentifier: args.clusterIdentifier,
|
|
417
460
|
numeratorMetricName: "k8s.node.cpu.usage",
|
|
418
461
|
denominatorMetricName: "k8s.node.allocatable_cpu",
|
|
419
|
-
|
|
462
|
+
groupByAttributeKeys: ["resource.k8s.node.name"],
|
|
420
463
|
numeratorAlias: "used_cpu",
|
|
421
464
|
denominatorAlias: "alloc_cpu",
|
|
422
465
|
resultAlias: metricAlias,
|
|
@@ -440,7 +483,7 @@ const highCpuTemplate = {
|
|
|
440
483
|
filterType: FilterType.GreaterThan,
|
|
441
484
|
value: 90,
|
|
442
485
|
incidentTitle: `[K8s] High CPU Utilization (>90%) - ${args.monitorName}`,
|
|
443
|
-
incidentDescription: `A node's average CPU usage has exceeded 90% of its allocatable CPU. Sustained high CPU usage can cause pod throttling, increased latency, and potential node instability.
|
|
486
|
+
incidentDescription: `A node's average CPU usage has exceeded 90% of its allocatable CPU. Sustained high CPU usage can cause pod throttling, increased latency, and potential node instability. The affected node is named under "Affected resource" below; use the kubectl commands under "Start here" to list the pods on it and find the top CPU consumers.`,
|
|
444
487
|
criteriaName: "High CPU - Utilization > 90%",
|
|
445
488
|
criteriaDescription: "Triggers when a node's average CPU usage exceeds 90% of its allocatable CPU over the monitoring window.",
|
|
446
489
|
}),
|
|
@@ -466,7 +509,7 @@ const highMemoryTemplate = {
|
|
|
466
509
|
clusterIdentifier: args.clusterIdentifier,
|
|
467
510
|
numeratorMetricName: "k8s.node.memory.usage",
|
|
468
511
|
denominatorMetricName: "k8s.node.allocatable_memory",
|
|
469
|
-
|
|
512
|
+
groupByAttributeKeys: ["resource.k8s.node.name"],
|
|
470
513
|
numeratorAlias: "used_mem",
|
|
471
514
|
denominatorAlias: "alloc_mem",
|
|
472
515
|
resultAlias: metricAlias,
|
|
@@ -490,7 +533,7 @@ const highMemoryTemplate = {
|
|
|
490
533
|
filterType: FilterType.GreaterThan,
|
|
491
534
|
value: 85,
|
|
492
535
|
incidentTitle: `[K8s] High Memory Utilization (>85%) - ${args.monitorName}`,
|
|
493
|
-
incidentDescription: `A node's average memory usage has exceeded 85% of its allocatable memory. High memory usage can lead to OOMKilled pods, node instability, and potential evictions.
|
|
536
|
+
incidentDescription: `A node's average memory usage has exceeded 85% of its allocatable memory. High memory usage can lead to OOMKilled pods, node instability, and potential evictions. The affected node is named under "Affected resource" below; use the kubectl commands under "Start here" to list the pods on it and find the top memory consumers.`,
|
|
494
537
|
criteriaName: "High Memory - Utilization > 85%",
|
|
495
538
|
criteriaDescription: "Triggers when a node's average memory usage exceeds 85% of its allocatable memory over the monitoring window.",
|
|
496
539
|
}),
|
|
@@ -517,7 +560,17 @@ const deploymentReplicaMismatchTemplate = {
|
|
|
517
560
|
metricName: "k8s.deployment.unavailable_replicas",
|
|
518
561
|
metricAlias,
|
|
519
562
|
resourceScope: KubernetesResourceScope.Workload,
|
|
520
|
-
|
|
563
|
+
/*
|
|
564
|
+
* 15 minutes, not 5. With the sustained (AllValues) default, the
|
|
565
|
+
* window IS the "how long has this been stuck" knob: every
|
|
566
|
+
* per-minute bucket in it must report unavailable replicas. A
|
|
567
|
+
* normal rolling update makes unavailable_replicas non-zero for
|
|
568
|
+
* the duration of the rollout, and a ten-replica deployment with
|
|
569
|
+
* maxUnavailable 25% and real readiness probes routinely takes
|
|
570
|
+
* longer than five minutes — so a five-minute window still paged
|
|
571
|
+
* once per deploy for a condition that is the deploy working.
|
|
572
|
+
*/
|
|
573
|
+
rollingTime: RollingTime.Past15Minutes,
|
|
521
574
|
aggregationType: MetricsAggregationType.Max,
|
|
522
575
|
/*
|
|
523
576
|
* Per deployment: a stuck rollout is a property of one Deployment
|
|
@@ -526,7 +579,10 @@ const deploymentReplicaMismatchTemplate = {
|
|
|
526
579
|
* (the worker reads `resource.k8s.deployment.name` back off these
|
|
527
580
|
* rows to build the affected-resource breakdown).
|
|
528
581
|
*/
|
|
529
|
-
|
|
582
|
+
groupByAttributeKeys: [
|
|
583
|
+
"resource.k8s.namespace.name",
|
|
584
|
+
"resource.k8s.deployment.name",
|
|
585
|
+
],
|
|
530
586
|
}),
|
|
531
587
|
offlineCriteriaInstance: buildOfflineCriteriaInstance({
|
|
532
588
|
offlineMonitorStatusId: args.offlineMonitorStatusId,
|
|
@@ -537,9 +593,9 @@ const deploymentReplicaMismatchTemplate = {
|
|
|
537
593
|
filterType: FilterType.GreaterThan,
|
|
538
594
|
value: 0,
|
|
539
595
|
incidentTitle: `[K8s] Deployment Replica Mismatch - ${args.monitorName}`,
|
|
540
|
-
incidentDescription: `A Kubernetes deployment has unavailable replicas — the desired replica count does not match the available count. This may indicate a failed rollout, image pull errors, insufficient resources, or pod crash loops.
|
|
541
|
-
criteriaName: "Replica Mismatch - Unavailable > 0",
|
|
542
|
-
criteriaDescription: "Triggers when
|
|
596
|
+
incidentDescription: `A Kubernetes deployment has unavailable replicas — the desired replica count does not match the available count. This may indicate a failed rollout, image pull errors, insufficient resources, or pod crash loops. The affected namespace and deployment are named under "Affected resource" below, with the rollout-status command under "Start here".`,
|
|
597
|
+
criteriaName: "Replica Mismatch - Unavailable > 0 for 15 minutes",
|
|
598
|
+
criteriaDescription: "Triggers when a deployment reports unavailable replicas in every sample of a fifteen-minute window — long enough that a normal rolling update has completed and the rollout is genuinely stuck.",
|
|
543
599
|
}),
|
|
544
600
|
onlineCriteriaInstance: buildOnlineCriteriaInstance({
|
|
545
601
|
onlineMonitorStatusId: args.onlineMonitorStatusId,
|
|
@@ -572,7 +628,10 @@ const jobFailuresTemplate = {
|
|
|
572
628
|
* arriving and the per-series pass auto-resolves that Job's alert
|
|
573
629
|
* by absence, which is the behaviour we want here.
|
|
574
630
|
*/
|
|
575
|
-
|
|
631
|
+
groupByAttributeKeys: [
|
|
632
|
+
"resource.k8s.namespace.name",
|
|
633
|
+
"resource.k8s.job.name",
|
|
634
|
+
],
|
|
576
635
|
}),
|
|
577
636
|
offlineCriteriaInstance: buildOfflineCriteriaInstance({
|
|
578
637
|
offlineMonitorStatusId: args.offlineMonitorStatusId,
|
|
@@ -583,7 +642,7 @@ const jobFailuresTemplate = {
|
|
|
583
642
|
filterType: FilterType.GreaterThan,
|
|
584
643
|
value: 0,
|
|
585
644
|
incidentTitle: `[K8s] Job Failure Detected - ${args.monitorName}`,
|
|
586
|
-
incidentDescription: `A Kubernetes Job has one or more failed pods. This indicates the job's workload is failing to complete successfully.
|
|
645
|
+
incidentDescription: `A Kubernetes Job has one or more failed pods. This indicates the job's workload is failing to complete successfully. The affected namespace and job are named under "Affected resource" below, with the describe command under "Start here".`,
|
|
587
646
|
criteriaName: "Job Failures - Failed Pods > 0",
|
|
588
647
|
criteriaDescription: "Triggers when any Kubernetes Job has failed pods.",
|
|
589
648
|
}),
|
|
@@ -599,7 +658,15 @@ const jobFailuresTemplate = {
|
|
|
599
658
|
const etcdNoLeaderTemplate = {
|
|
600
659
|
id: "k8s-etcd-no-leader",
|
|
601
660
|
name: "etcd No Leader",
|
|
602
|
-
|
|
661
|
+
/*
|
|
662
|
+
* The requirement leads, deliberately: the card truncates long
|
|
663
|
+
* descriptions, and a user who one-clicks this on a managed cluster gets
|
|
664
|
+
* a monitor that is never Met and gives no indication it is inert.
|
|
665
|
+
*
|
|
666
|
+
* No backticks — KubernetesTemplatePicker renders this as raw JSX text,
|
|
667
|
+
* so a code span would show up as literal backticks on the card.
|
|
668
|
+
*/
|
|
669
|
+
description: "Requires the agent's control-plane scrape (controlPlane.enabled); managed clusters (EKS / GKE / AKS) do not expose etcd's metrics endpoint at all, so on those this monitor will never receive a data point. Alert immediately when etcd has no leader elected — a critical cluster health issue.",
|
|
603
670
|
category: "ControlPlane",
|
|
604
671
|
severity: "Critical",
|
|
605
672
|
getMonitorStep: (args) => {
|
|
@@ -642,25 +709,52 @@ const etcdNoLeaderTemplate = {
|
|
|
642
709
|
};
|
|
643
710
|
const apiServerThrottlingTemplate = {
|
|
644
711
|
id: "k8s-apiserver-throttling",
|
|
645
|
-
name: "API Server
|
|
646
|
-
description: "Alert when the Kubernetes API server
|
|
712
|
+
name: "API Server Request Saturation",
|
|
713
|
+
description: "Alert when the Kubernetes API server holds 200 or more concurrent in-flight requests for the whole window — the state in which it starts rejecting requests with 429. Requires the agent's control-plane scrape: set controlPlane.enabled and point controlPlane.apiServer.endpoints at an API server address the collector pod can actually reach (the chart's default, localhost:6443, is the collector's own loopback and scrapes nothing).",
|
|
647
714
|
category: "ControlPlane",
|
|
648
715
|
severity: "Critical",
|
|
649
716
|
getMonitorStep: (args) => {
|
|
650
|
-
const metricAlias = "
|
|
717
|
+
const metricAlias = "inflight_requests";
|
|
651
718
|
return buildKubernetesMonitorStep({
|
|
652
719
|
kubernetesMonitor: buildKubernetesMonitorConfig({
|
|
653
720
|
clusterIdentifier: args.clusterIdentifier,
|
|
654
|
-
|
|
721
|
+
/*
|
|
722
|
+
* A GAUGE, deliberately.
|
|
723
|
+
*
|
|
724
|
+
* This template used to Sum `apiserver_dropped_requests_total`, a
|
|
725
|
+
* cumulative Prometheus counter. The agent scrapes the API
|
|
726
|
+
* server's /metrics raw (configmap-deployment.yaml, job_name:
|
|
727
|
+
* kube-apiserver, no metric_relabel_configs) and nothing in the
|
|
728
|
+
* shipped pipeline converts counters to deltas: there is no
|
|
729
|
+
* cumulativetodelta processor in the chart,
|
|
730
|
+
* OtelMetricsIngestService records `aggregationTemporality` /
|
|
731
|
+
* `isMonotonic` but never differences the value, and neither
|
|
732
|
+
* AggregationType nor CompareCriteria.reduceWindow has a Rate or
|
|
733
|
+
* Delta member. So every sample was the process's lifetime total.
|
|
734
|
+
* One throttled request at any point since the API server last
|
|
735
|
+
* started pinned the monitor Offline, and the "= 0" recovery could
|
|
736
|
+
* never be met again.
|
|
737
|
+
*
|
|
738
|
+
* `apiserver_current_inflight_requests` is the gauge the cluster's
|
|
739
|
+
* own control-plane dashboard already charts for this signal
|
|
740
|
+
* (App/FeatureSet/Dashboard/src/Pages/Kubernetes/View/
|
|
741
|
+
* ControlPlane.tsx: "Current number of in-flight requests being
|
|
742
|
+
* processed. High counts indicate API server saturation."). It is
|
|
743
|
+
* emitted per request_kind (mutating / readOnly).
|
|
744
|
+
*/
|
|
745
|
+
metricName: "apiserver_current_inflight_requests",
|
|
655
746
|
metricAlias,
|
|
656
747
|
resourceScope: KubernetesResourceScope.Cluster,
|
|
657
748
|
rollingTime: RollingTime.Past5Minutes,
|
|
658
|
-
aggregationType: MetricsAggregationType.Sum,
|
|
659
749
|
/*
|
|
660
|
-
*
|
|
661
|
-
*
|
|
662
|
-
*
|
|
750
|
+
* Max across the two request_kind series: saturation of either
|
|
751
|
+
* queue is the condition, and the two have different ceilings.
|
|
752
|
+
*
|
|
753
|
+
* Ungrouped: this is the control plane's aggregate concurrency.
|
|
754
|
+
* Splitting it would need a per-apiserver-instance identity that
|
|
755
|
+
* this metric does not carry in the shipped agent config.
|
|
663
756
|
*/
|
|
757
|
+
aggregationType: MetricsAggregationType.Max,
|
|
664
758
|
}),
|
|
665
759
|
offlineCriteriaInstance: buildOfflineCriteriaInstance({
|
|
666
760
|
offlineMonitorStatusId: args.offlineMonitorStatusId,
|
|
@@ -668,18 +762,41 @@ const apiServerThrottlingTemplate = {
|
|
|
668
762
|
alertSeverityId: args.defaultAlertSeverityId,
|
|
669
763
|
monitorName: args.monitorName,
|
|
670
764
|
metricAlias,
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
765
|
+
/*
|
|
766
|
+
* GreaterThanOrEqualTo, not GreaterThan.
|
|
767
|
+
*
|
|
768
|
+
* This gauge counts ADMITTED concurrency, so it is bounded above by
|
|
769
|
+
* the API server's own admission limit — it saturates AT the limit
|
|
770
|
+
* rather than climbing past it. 200 is the default
|
|
771
|
+
* --max-mutating-requests-inflight exactly, so a strict "> 200"
|
|
772
|
+
* would ask the mutating queue to exceed its own ceiling and the
|
|
773
|
+
* one series this number describes would never fire at all. ">="
|
|
774
|
+
* catches a mutating queue pinned at its limit (actively rejecting
|
|
775
|
+
* with 429) and a readOnly queue at half of its default 400
|
|
776
|
+
* ceiling.
|
|
777
|
+
*
|
|
778
|
+
* The number is a heuristic tied to the upstream defaults, not a
|
|
779
|
+
* derived fact; the incident description tells the operator to
|
|
780
|
+
* retune it against their own flags.
|
|
781
|
+
*/
|
|
782
|
+
filterType: FilterType.GreaterThanOrEqualTo,
|
|
783
|
+
value: 200,
|
|
784
|
+
incidentTitle: `[K8s] CRITICAL: API Server Request Saturation - ${args.monitorName}`,
|
|
785
|
+
incidentDescription: `The Kubernetes API server has held 200 or more concurrent in-flight requests for every sample in the monitoring window. The API server admits a bounded number of concurrent requests (--max-requests-inflight, default 400; --max-mutating-requests-inflight, default 200) and rejects the rest with 429, so sustained pressure here is the state immediately preceding cluster-wide API throttling. Common causes: a controller or client hot-looping on LIST, an operator with no resync backoff, or an undersized control plane. If your cluster runs different in-flight limits, retune this threshold to match them.`,
|
|
786
|
+
criteriaName: "API Server Saturation - In-Flight Requests >= 200",
|
|
787
|
+
criteriaDescription: "Triggers when the API server's in-flight request count stays at or above 200 for every sample in the monitoring window.",
|
|
677
788
|
}),
|
|
678
789
|
onlineCriteriaInstance: buildOnlineCriteriaInstance({
|
|
679
790
|
onlineMonitorStatusId: args.onlineMonitorStatusId,
|
|
680
791
|
metricAlias,
|
|
681
|
-
|
|
682
|
-
|
|
792
|
+
/*
|
|
793
|
+
* Complement of the firing comparison. The builder derives the
|
|
794
|
+
* actual recovery threshold as a 10% dead band inside 200, i.e.
|
|
795
|
+
* "< 180", so a control plane parked at the limit cannot toggle the
|
|
796
|
+
* monitor on consecutive evaluations.
|
|
797
|
+
*/
|
|
798
|
+
filterType: FilterType.LessThan,
|
|
799
|
+
value: 200,
|
|
683
800
|
}),
|
|
684
801
|
});
|
|
685
802
|
},
|
|
@@ -687,7 +804,8 @@ const apiServerThrottlingTemplate = {
|
|
|
687
804
|
const schedulerBacklogTemplate = {
|
|
688
805
|
id: "k8s-scheduler-backlog",
|
|
689
806
|
name: "Scheduler Backlog",
|
|
690
|
-
|
|
807
|
+
// See etcdNoLeaderTemplate for why the requirement leads and why no backticks.
|
|
808
|
+
description: "Requires the agent's control-plane scrape (controlPlane.enabled); managed clusters (EKS / GKE / AKS) do not expose the scheduler's metrics endpoint at all, so on those this monitor will never receive a data point. Alert when the scheduler's pending-pod queue is non-empty in every sample of a five-minute window.",
|
|
691
809
|
category: "Scheduling",
|
|
692
810
|
severity: "Warning",
|
|
693
811
|
getMonitorStep: (args) => {
|
|
@@ -730,26 +848,48 @@ const schedulerBacklogTemplate = {
|
|
|
730
848
|
const highDiskUsageTemplate = {
|
|
731
849
|
id: "k8s-high-disk-usage",
|
|
732
850
|
name: "High Node Disk Usage",
|
|
733
|
-
description: "Alert when node filesystem
|
|
851
|
+
description: "Alert when a node's filesystem is more than 90% full. Computed per node as k8s.node.filesystem.usage / (k8s.node.filesystem.usage + k8s.node.filesystem.available) x 100 — both are bytes from the same kubeletstats node scrape, so this is a true percentage and matches what df reports as Use%.",
|
|
734
852
|
category: "Storage",
|
|
735
853
|
severity: "Warning",
|
|
736
854
|
getMonitorStep: (args) => {
|
|
737
855
|
const metricAlias = "disk_usage";
|
|
738
856
|
return buildKubernetesMonitorStep({
|
|
739
|
-
kubernetesMonitor:
|
|
857
|
+
kubernetesMonitor: buildKubernetesRatioMonitorConfig({
|
|
740
858
|
clusterIdentifier: args.clusterIdentifier,
|
|
741
|
-
|
|
742
|
-
|
|
859
|
+
/*
|
|
860
|
+
* `k8s.node.filesystem.usage` is BYTES (KubernetesMetricCatalog
|
|
861
|
+
* declares `unit: "bytes"`, and nothing converts it — the query
|
|
862
|
+
* configs carry no `legendUnit`, so MetricResultUnitConverter
|
|
863
|
+
* passes the raw value through). This template used to hand that
|
|
864
|
+
* gauge straight to a `> 90` comparison, so every node in every
|
|
865
|
+
* cluster breached on its first evaluation and the healthy
|
|
866
|
+
* criterion — "90 bytes or less used" — was unreachable: a
|
|
867
|
+
* permanently red monitor with an unresolvable incident.
|
|
868
|
+
*
|
|
869
|
+
* The denominator is built from the one companion series this
|
|
870
|
+
* repo has actually ingested, `k8s.node.filesystem.available`
|
|
871
|
+
* (KubernetesMetricCatalog, and the cluster dashboard's node
|
|
872
|
+
* fill tile in App/FeatureSet/Dashboard/src/Pages/Kubernetes/
|
|
873
|
+
* View/Index.tsx). usage / (usage + available) is what `df`
|
|
874
|
+
* reports as Use%.
|
|
875
|
+
*/
|
|
876
|
+
numeratorMetricName: "k8s.node.filesystem.usage",
|
|
877
|
+
denominatorMetricName: "k8s.node.filesystem.available",
|
|
878
|
+
groupByAttributeKeys: ["resource.k8s.node.name"],
|
|
879
|
+
numeratorAlias: "used_disk",
|
|
880
|
+
denominatorAlias: "avail_disk",
|
|
881
|
+
resultAlias: metricAlias,
|
|
882
|
+
resultLegend: "Node Disk Usage (%)",
|
|
883
|
+
formula: `(used_disk / (used_disk + avail_disk)) * 100`,
|
|
743
884
|
resourceScope: KubernetesResourceScope.Node,
|
|
744
885
|
rollingTime: RollingTime.Past5Minutes,
|
|
745
|
-
aggregationType: MetricsAggregationType.Avg,
|
|
746
886
|
/*
|
|
747
|
-
*
|
|
748
|
-
* node
|
|
749
|
-
*
|
|
750
|
-
*
|
|
887
|
+
* ONE series per node on BOTH sides, from the SAME kubeletstats
|
|
888
|
+
* node scrape, so Avg gives the representative per-minute value
|
|
889
|
+
* independent of scrape count. See
|
|
890
|
+
* buildKubernetesRatioMonitorConfig.
|
|
751
891
|
*/
|
|
752
|
-
|
|
892
|
+
aggregationType: MetricsAggregationType.Avg,
|
|
753
893
|
}),
|
|
754
894
|
offlineCriteriaInstance: buildOfflineCriteriaInstance({
|
|
755
895
|
offlineMonitorStatusId: args.offlineMonitorStatusId,
|
|
@@ -760,9 +900,9 @@ const highDiskUsageTemplate = {
|
|
|
760
900
|
filterType: FilterType.GreaterThan,
|
|
761
901
|
value: 90,
|
|
762
902
|
incidentTitle: `[K8s] High Disk Usage (>90%) - ${args.monitorName}`,
|
|
763
|
-
incidentDescription: `
|
|
903
|
+
incidentDescription: `A node's filesystem is more than 90% full, sustained across the whole monitoring window. High disk usage leads to DiskPressure evictions, failure to pull new container images, and eventually a NotReady node. The affected node is named under "Affected resource" below, with the kubectl commands to inspect it under "Start here".`,
|
|
764
904
|
criteriaName: "High Disk - Usage > 90%",
|
|
765
|
-
criteriaDescription: "Triggers when
|
|
905
|
+
criteriaDescription: "Triggers when a node's used bytes exceed 90% of used + available for every sample in the monitoring window.",
|
|
766
906
|
}),
|
|
767
907
|
onlineCriteriaInstance: buildOnlineCriteriaInstance({
|
|
768
908
|
onlineMonitorStatusId: args.onlineMonitorStatusId,
|
|
@@ -774,13 +914,24 @@ const highDiskUsageTemplate = {
|
|
|
774
914
|
},
|
|
775
915
|
};
|
|
776
916
|
const daemonSetUnavailableTemplate = {
|
|
917
|
+
/*
|
|
918
|
+
* The `id` still says "unavailable" and deliberately stays that way: it
|
|
919
|
+
* is the stable key the recommendation catalog and the
|
|
920
|
+
* already-created-monitor diff match on
|
|
921
|
+
* (MonitorRecommendationCatalog.buildRecommendationId), so renaming it
|
|
922
|
+
* would orphan every monitor a user already created from this card.
|
|
923
|
+
* Everything the user actually READS now says what the metric measures:
|
|
924
|
+
* KubernetesMetricCatalog defines `k8s.daemonset.misscheduled_nodes` as
|
|
925
|
+
* "nodes running a daemon pod that should not be running one", which is
|
|
926
|
+
* the opposite of "nodes missing the daemon pod".
|
|
927
|
+
*/
|
|
777
928
|
id: "k8s-daemonset-unavailable",
|
|
778
|
-
name: "DaemonSet
|
|
779
|
-
description: "Alert when a DaemonSet
|
|
929
|
+
name: "DaemonSet Misscheduled Nodes",
|
|
930
|
+
description: "Alert when a DaemonSet is running daemon pods on nodes that no longer match its node selector, affinity or taint tolerations. k8s.daemonset.misscheduled_nodes counts nodes that ARE running the pod but should NOT be — it is not the count of nodes that are missing the pod.",
|
|
780
931
|
category: "Workload",
|
|
781
932
|
severity: "Warning",
|
|
782
933
|
getMonitorStep: (args) => {
|
|
783
|
-
const metricAlias = "
|
|
934
|
+
const metricAlias = "misscheduled_nodes";
|
|
784
935
|
return buildKubernetesMonitorStep({
|
|
785
936
|
kubernetesMonitor: buildKubernetesMonitorConfig({
|
|
786
937
|
clusterIdentifier: args.clusterIdentifier,
|
|
@@ -794,7 +945,10 @@ const daemonSetUnavailableTemplate = {
|
|
|
794
945
|
* one has to own its own alert instead of dedupeing behind
|
|
795
946
|
* whichever DaemonSet in the cluster misscheduled first.
|
|
796
947
|
*/
|
|
797
|
-
|
|
948
|
+
groupByAttributeKeys: [
|
|
949
|
+
"resource.k8s.namespace.name",
|
|
950
|
+
"resource.k8s.daemonset.name",
|
|
951
|
+
],
|
|
798
952
|
}),
|
|
799
953
|
offlineCriteriaInstance: buildOfflineCriteriaInstance({
|
|
800
954
|
offlineMonitorStatusId: args.offlineMonitorStatusId,
|
|
@@ -804,10 +958,10 @@ const daemonSetUnavailableTemplate = {
|
|
|
804
958
|
metricAlias,
|
|
805
959
|
filterType: FilterType.GreaterThan,
|
|
806
960
|
value: 0,
|
|
807
|
-
incidentTitle: `[K8s] DaemonSet
|
|
808
|
-
incidentDescription: `A DaemonSet has
|
|
809
|
-
criteriaName: "DaemonSet
|
|
810
|
-
criteriaDescription: "Triggers when a DaemonSet
|
|
961
|
+
incidentTitle: `[K8s] DaemonSet Misscheduled Nodes - ${args.monitorName}`,
|
|
962
|
+
incidentDescription: `A DaemonSet has daemon pods running on nodes that should not be running them, sustained across the monitoring window. This is usually a stale node selector, affinity rule or taint toleration left behind after a node pool change — the pods were scheduled under the old rules and have not been evicted. It is NOT the same as a DaemonSet missing from nodes that need it. The affected namespace and DaemonSet are named under "Affected resource" below, with the describe command under "Start here"; compare its spec against the current node labels and taints.`,
|
|
963
|
+
criteriaName: "DaemonSet Misscheduled Nodes > 0",
|
|
964
|
+
criteriaDescription: "Triggers when a DaemonSet reports at least one misscheduled node for every sample in the monitoring window.",
|
|
811
965
|
}),
|
|
812
966
|
onlineCriteriaInstance: buildOnlineCriteriaInstance({
|
|
813
967
|
onlineMonitorStatusId: args.onlineMonitorStatusId,
|
|
@@ -831,7 +985,7 @@ const nodeCpuRequestUtilizationTemplate = {
|
|
|
831
985
|
clusterIdentifier: args.clusterIdentifier,
|
|
832
986
|
numeratorMetricName: "k8s.container.cpu_request",
|
|
833
987
|
denominatorMetricName: "k8s.node.allocatable_cpu",
|
|
834
|
-
|
|
988
|
+
groupByAttributeKeys: ["resource.k8s.node.name"],
|
|
835
989
|
numeratorAlias: "req_cpu",
|
|
836
990
|
denominatorAlias: "alloc_cpu",
|
|
837
991
|
resultAlias: metricAlias,
|
|
@@ -848,7 +1002,7 @@ const nodeCpuRequestUtilizationTemplate = {
|
|
|
848
1002
|
filterType: FilterType.GreaterThan,
|
|
849
1003
|
value: 90,
|
|
850
1004
|
incidentTitle: `[K8s] High Node CPU Request Commitment (>90%) - ${args.monitorName}`,
|
|
851
|
-
incidentDescription: `A node's committed CPU requests have exceeded 90% of its allocatable CPU. The node is nearly full from a scheduling standpoint and may be unable to place new pods, even if current CPU usage is low.
|
|
1005
|
+
incidentDescription: `A node's committed CPU requests have exceeded 90% of its allocatable CPU. The node is nearly full from a scheduling standpoint and may be unable to place new pods, even if current CPU usage is low. The affected node is named under "Affected resource" below; use the kubectl commands under "Start here" to list the pods it hosts and their CPU requests.`,
|
|
852
1006
|
criteriaName: "High CPU Request Commitment - Utilization > 90%",
|
|
853
1007
|
criteriaDescription: "Triggers when any node's summed container CPU requests exceed 90% of its allocatable CPU.",
|
|
854
1008
|
}),
|
|
@@ -874,7 +1028,7 @@ const nodeMemoryRequestUtilizationTemplate = {
|
|
|
874
1028
|
clusterIdentifier: args.clusterIdentifier,
|
|
875
1029
|
numeratorMetricName: "k8s.container.memory_request",
|
|
876
1030
|
denominatorMetricName: "k8s.node.allocatable_memory",
|
|
877
|
-
|
|
1031
|
+
groupByAttributeKeys: ["resource.k8s.node.name"],
|
|
878
1032
|
numeratorAlias: "req_mem",
|
|
879
1033
|
denominatorAlias: "alloc_mem",
|
|
880
1034
|
resultAlias: metricAlias,
|
|
@@ -891,7 +1045,7 @@ const nodeMemoryRequestUtilizationTemplate = {
|
|
|
891
1045
|
filterType: FilterType.GreaterThan,
|
|
892
1046
|
value: 90,
|
|
893
1047
|
incidentTitle: `[K8s] High Node Memory Request Commitment (>90%) - ${args.monitorName}`,
|
|
894
|
-
incidentDescription: `A node's committed memory requests have exceeded 90% of its allocatable memory. The node is nearly full from a scheduling standpoint and may be unable to place new pods, even if current memory usage is low.
|
|
1048
|
+
incidentDescription: `A node's committed memory requests have exceeded 90% of its allocatable memory. The node is nearly full from a scheduling standpoint and may be unable to place new pods, even if current memory usage is low. The affected node is named under "Affected resource" below; use the kubectl commands under "Start here" to list the pods it hosts and their memory requests.`,
|
|
895
1049
|
criteriaName: "High Memory Request Commitment - Utilization > 90%",
|
|
896
1050
|
criteriaDescription: "Triggers when any node's summed container memory requests exceed 90% of its allocatable memory.",
|
|
897
1051
|
}),
|
|
@@ -918,8 +1072,13 @@ const nodeMemoryRequestUtilizationTemplate = {
|
|
|
918
1072
|
* hops from the cause. These catch the START: the HPA running out of
|
|
919
1073
|
* headroom, and the containers pinned at their own limits.
|
|
920
1074
|
*
|
|
921
|
-
* All three are
|
|
922
|
-
*
|
|
1075
|
+
* All three are grouped by the ClickHouse-stored `resource.`-prefixed
|
|
1076
|
+
* attribute. The HPA one is a ratio (there is no ready-made
|
|
1077
|
+
* current/max series); the two pod-limit ones read the kubeletstats
|
|
1078
|
+
* receiver's own `k8s.pod.*_limit_utilization` family directly, which is
|
|
1079
|
+
* enabled by default in the shipped chart and — unlike a hand-built ratio
|
|
1080
|
+
* against `k8s.container.*_limit` — divides by the SUM of a pod's
|
|
1081
|
+
* container limits rather than their mean.
|
|
923
1082
|
*/
|
|
924
1083
|
const hpaAtMaxReplicasTemplate = {
|
|
925
1084
|
id: "k8s-hpa-at-max-replicas",
|
|
@@ -934,7 +1093,10 @@ const hpaAtMaxReplicasTemplate = {
|
|
|
934
1093
|
clusterIdentifier: args.clusterIdentifier,
|
|
935
1094
|
numeratorMetricName: "k8s.hpa.current_replicas",
|
|
936
1095
|
denominatorMetricName: "k8s.hpa.max_replicas",
|
|
937
|
-
|
|
1096
|
+
groupByAttributeKeys: [
|
|
1097
|
+
"resource.k8s.namespace.name",
|
|
1098
|
+
"resource.k8s.hpa.name",
|
|
1099
|
+
],
|
|
938
1100
|
numeratorAlias: "current_replicas",
|
|
939
1101
|
denominatorAlias: "max_replicas",
|
|
940
1102
|
resultAlias: metricAlias,
|
|
@@ -960,7 +1122,7 @@ const hpaAtMaxReplicasTemplate = {
|
|
|
960
1122
|
filterType: FilterType.GreaterThanOrEqualTo,
|
|
961
1123
|
value: 90,
|
|
962
1124
|
incidentTitle: `[K8s] HPA Saturated at Max Replicas (>=90%) - ${args.monitorName}`,
|
|
963
|
-
incidentDescription: `A HorizontalPodAutoscaler is running at 90% or more of its maxReplicas and has effectively no scaling headroom left. Any further load cannot be absorbed by scaling out, so it will surface as latency and errors instead. Check whether the workload is genuinely at capacity or whether its per-pod CPU/memory limits are set too low — an under-resourced pod gets throttled or OOMKilled, which inflates the metric the HPA scales on and drives it to the ceiling.
|
|
1125
|
+
incidentDescription: `A HorizontalPodAutoscaler is running at 90% or more of its maxReplicas and has effectively no scaling headroom left. Any further load cannot be absorbed by scaling out, so it will surface as latency and errors instead. Check whether the workload is genuinely at capacity or whether its per-pod CPU/memory limits are set too low — an under-resourced pod gets throttled or OOMKilled, which inflates the metric the HPA scales on and drives it to the ceiling. The affected namespace and HorizontalPodAutoscaler are named under "Affected resource" below, with the describe command under "Start here" for its target and current-vs-max replicas.`,
|
|
964
1126
|
criteriaName: "HPA Saturation - Current/Max Replicas >= 90%",
|
|
965
1127
|
criteriaDescription: "Triggers when any HPA's current replica count reaches 90% or more of its configured maxReplicas.",
|
|
966
1128
|
}),
|
|
@@ -976,48 +1138,53 @@ const hpaAtMaxReplicasTemplate = {
|
|
|
976
1138
|
const podMemoryLimitSaturationTemplate = {
|
|
977
1139
|
id: "k8s-pod-memory-limit-saturation",
|
|
978
1140
|
name: "Pod Memory Saturating Container Limit",
|
|
979
|
-
description: "Alert when a pod
|
|
1141
|
+
description: "Alert when a pod is using more than 90% of its container memory limit, read straight from the kubeletstats receiver's own k8s.pod.memory_limit_utilization — which divides the pod's usage by the SUM of its containers' limits, so a pod with a sidecar is measured correctly. Note the kubelet's pod memory figure includes reclaimable page cache, so a file-heavy workload can sit high here without ever being OOMKilled: treat this as approaching the limit, not about to be killed.",
|
|
980
1142
|
category: "Workload",
|
|
981
1143
|
severity: "Critical",
|
|
982
1144
|
getMonitorStep: (args) => {
|
|
983
1145
|
const metricAlias = "pod_memory_limit_saturation";
|
|
984
1146
|
return buildKubernetesMonitorStep({
|
|
985
|
-
kubernetesMonitor:
|
|
1147
|
+
kubernetesMonitor: buildKubernetesMonitorConfig({
|
|
986
1148
|
clusterIdentifier: args.clusterIdentifier,
|
|
987
|
-
|
|
988
|
-
|
|
989
|
-
|
|
990
|
-
|
|
991
|
-
|
|
992
|
-
|
|
993
|
-
|
|
1149
|
+
/*
|
|
1150
|
+
* The agent enables this family by DEFAULT:
|
|
1151
|
+
* HelmChart/Public/kubernetes-agent/templates/configmap-daemonset.yaml
|
|
1152
|
+
* ("Saturation metrics — CPU/memory as a percentage of pod
|
|
1153
|
+
* limit/request") turns on k8s.pod.memory_limit_utilization inside
|
|
1154
|
+
* the existing kubeletstats receiver, gated on
|
|
1155
|
+
* `kubeletstats.utilizationMetrics.enabled`, which values.yaml sets
|
|
1156
|
+
* to `true`. No extra scrape.
|
|
1157
|
+
*
|
|
1158
|
+
* It replaces a cross-receiver ratio of `k8s.pod.memory.usage`
|
|
1159
|
+
* (kubeletstats, one series per POD) over
|
|
1160
|
+
* `k8s.container.memory_limit` (k8s_cluster, one series per
|
|
1161
|
+
* CONTAINER), which this template's own comment conceded took the
|
|
1162
|
+
* MEAN container limit for a multi-container pod — so any pod with
|
|
1163
|
+
* a sidecar over-reported its saturation by roughly its container
|
|
1164
|
+
* count — and which joined its two halves by series fingerprint
|
|
1165
|
+
* across two independent scrape cycles, a join that fails silently
|
|
1166
|
+
* rather than loudly.
|
|
1167
|
+
*/
|
|
1168
|
+
metricName: "k8s.pod.memory_limit_utilization",
|
|
1169
|
+
metricAlias,
|
|
1170
|
+
/*
|
|
1171
|
+
* kubeletstats reports this family with UCUM unit "1" (a 0-1
|
|
1172
|
+
* fraction). Declaring "%" here makes MetricResultUnitConverter
|
|
1173
|
+
* scale it to 0-100 before the threshold below is compared, and
|
|
1174
|
+
* costs nothing if a collector ever reports it as "%" already.
|
|
1175
|
+
*/
|
|
1176
|
+
legendUnit: "%",
|
|
994
1177
|
resourceScope: KubernetesResourceScope.Pod,
|
|
995
1178
|
rollingTime: RollingTime.Past5Minutes,
|
|
996
1179
|
/*
|
|
997
|
-
*
|
|
998
|
-
*
|
|
999
|
-
* stating.
|
|
1000
|
-
*
|
|
1001
|
-
* Numerator (k8s.pod.memory.usage, kubeletstats) is ONE series per
|
|
1002
|
-
* pod. Denominator (k8s.container.memory_limit, k8s_cluster) is one
|
|
1003
|
-
* series per CONTAINER, so a multi-container pod contributes
|
|
1004
|
-
* several.
|
|
1005
|
-
*
|
|
1006
|
-
* Sum is definitively wrong here: the two metrics ride different
|
|
1007
|
-
* receivers on independent scrape cycles, so the scrape multiple
|
|
1008
|
-
* would not cancel. Avg is exact for single-container pods (the
|
|
1009
|
-
* overwhelming majority, and the case this template exists for).
|
|
1010
|
-
*
|
|
1011
|
-
* For multi-container pods Avg takes the MEAN container limit
|
|
1012
|
-
* rather than their sum, so the ratio over-reports and the alert
|
|
1013
|
-
* fires early. That is the safe direction for an "OOMKill is
|
|
1014
|
-
* imminent" warning — a false early page beats a missed kill — but
|
|
1015
|
-
* it is a real caveat, not a rounding detail. A per-container
|
|
1016
|
-
* variant needs a container-scoped usage metric to pair against
|
|
1017
|
-
* (`container.memory.usage`), which the shipped catalog does not
|
|
1018
|
-
* carry today.
|
|
1180
|
+
* ONE series per pod, so Max is "the worst sample in this minute"
|
|
1181
|
+
* rather than a mean that hides a spike against the limit.
|
|
1019
1182
|
*/
|
|
1020
|
-
aggregationType: MetricsAggregationType.
|
|
1183
|
+
aggregationType: MetricsAggregationType.Max,
|
|
1184
|
+
groupByAttributeKeys: [
|
|
1185
|
+
"resource.k8s.namespace.name",
|
|
1186
|
+
"resource.k8s.pod.name",
|
|
1187
|
+
],
|
|
1021
1188
|
}),
|
|
1022
1189
|
offlineCriteriaInstance: buildOfflineCriteriaInstance({
|
|
1023
1190
|
offlineMonitorStatusId: args.offlineMonitorStatusId,
|
|
@@ -1028,7 +1195,7 @@ const podMemoryLimitSaturationTemplate = {
|
|
|
1028
1195
|
filterType: FilterType.GreaterThan,
|
|
1029
1196
|
value: 90,
|
|
1030
1197
|
incidentTitle: `[K8s] Pod Memory Saturating Container Limit (>90%) - ${args.monitorName}`,
|
|
1031
|
-
incidentDescription: `A pod
|
|
1198
|
+
incidentDescription: `A pod is using more than 90% of its container memory limit, sustained across the monitoring window. The kubelet's pod memory figure includes page cache the kernel reclaims under pressure, so this is "approaching the limit" rather than a guarantee that an OOMKill is imminent — but a pod that stays here is either under-limited for its real working set or leaking, and it is the cause-side signal for the CrashLoopBackOff and restart storms that follow. The affected namespace and pod are named under "Affected resource" below, with the kubectl commands to read its limits and current usage under "Start here".`,
|
|
1032
1199
|
criteriaName: "Pod Memory Saturation - Usage/Limit > 90%",
|
|
1033
1200
|
criteriaDescription: "Triggers when any pod's memory usage exceeds 90% of its container memory limit.",
|
|
1034
1201
|
}),
|
|
@@ -1044,32 +1211,25 @@ const podMemoryLimitSaturationTemplate = {
|
|
|
1044
1211
|
const podCpuLimitSaturationTemplate = {
|
|
1045
1212
|
id: "k8s-pod-cpu-limit-saturation",
|
|
1046
1213
|
name: "Pod CPU Saturating Container Limit",
|
|
1047
|
-
description: "Alert when a pod
|
|
1214
|
+
description: "Alert when a pod is using more than 90% of its container CPU limit — the point at which the kernel's CFS quota starts throttling it. Read from the kubeletstats receiver's own k8s.pod.cpu_limit_utilization, which divides the pod's CPU by the SUM of its containers' limits, so a pod with a sidecar is not measured against the mean of its containers' limits. A throttled pod gets slower, not louder — behind an HPA that reads CPU, throttling drives the replica count up while every pod stays equally starved.",
|
|
1048
1215
|
category: "Workload",
|
|
1049
1216
|
severity: "Warning",
|
|
1050
1217
|
getMonitorStep: (args) => {
|
|
1051
1218
|
const metricAlias = "pod_cpu_limit_saturation";
|
|
1052
1219
|
return buildKubernetesMonitorStep({
|
|
1053
|
-
kubernetesMonitor:
|
|
1220
|
+
kubernetesMonitor: buildKubernetesMonitorConfig({
|
|
1054
1221
|
clusterIdentifier: args.clusterIdentifier,
|
|
1055
|
-
|
|
1056
|
-
|
|
1057
|
-
|
|
1058
|
-
|
|
1059
|
-
denominatorAlias: "limit_cpu",
|
|
1060
|
-
resultAlias: metricAlias,
|
|
1061
|
-
resultLegend: "Pod CPU vs Limit (%)",
|
|
1222
|
+
// See the memory template above for why this replaces the ratio.
|
|
1223
|
+
metricName: "k8s.pod.cpu_limit_utilization",
|
|
1224
|
+
metricAlias,
|
|
1225
|
+
legendUnit: "%",
|
|
1062
1226
|
resourceScope: KubernetesResourceScope.Pod,
|
|
1063
1227
|
rollingTime: RollingTime.Past5Minutes,
|
|
1064
|
-
|
|
1065
|
-
|
|
1066
|
-
|
|
1067
|
-
|
|
1068
|
-
|
|
1069
|
-
* multi-container pods. See that template's note for the full
|
|
1070
|
-
* trade-off.
|
|
1071
|
-
*/
|
|
1072
|
-
aggregationType: MetricsAggregationType.Avg,
|
|
1228
|
+
aggregationType: MetricsAggregationType.Max,
|
|
1229
|
+
groupByAttributeKeys: [
|
|
1230
|
+
"resource.k8s.namespace.name",
|
|
1231
|
+
"resource.k8s.pod.name",
|
|
1232
|
+
],
|
|
1073
1233
|
}),
|
|
1074
1234
|
offlineCriteriaInstance: buildOfflineCriteriaInstance({
|
|
1075
1235
|
offlineMonitorStatusId: args.offlineMonitorStatusId,
|