@oneuptime/common 13.0.0 → 13.0.3
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 +34 -0
- package/Models/DatabaseModels/Alert.ts +55 -0
- package/Models/DatabaseModels/AlertEpisodeLabelRule.ts +2 -2
- package/Models/DatabaseModels/AlertEpisodeOnCallRule.ts +2 -2
- package/Models/DatabaseModels/AlertEpisodeOwnerRule.ts +2 -2
- package/Models/DatabaseModels/AlertEpisodePrivacyRule.ts +2 -2
- package/Models/DatabaseModels/AlertGroupingRule.ts +2 -2
- package/Models/DatabaseModels/AlertLabelRule.ts +2 -2
- package/Models/DatabaseModels/AlertOnCallRule.ts +2 -2
- package/Models/DatabaseModels/AlertOwnerRule.ts +2 -2
- package/Models/DatabaseModels/AlertPrivacyRule.ts +2 -2
- package/Models/DatabaseModels/AlertReminderRule.ts +6 -4
- package/Models/DatabaseModels/AutoRemediationRule.ts +2 -2
- package/Models/DatabaseModels/CephClusterLabelRule.ts +2 -2
- package/Models/DatabaseModels/CephClusterOwnerRule.ts +2 -2
- package/Models/DatabaseModels/CloudResource.ts +45 -7
- package/Models/DatabaseModels/CloudResourceLabelRule.ts +2 -2
- package/Models/DatabaseModels/CloudResourceOwnerRule.ts +2 -2
- package/Models/DatabaseModels/CodeRepository.ts +85 -0
- package/Models/DatabaseModels/DashboardLabelRule.ts +2 -2
- package/Models/DatabaseModels/DashboardOwnerRule.ts +2 -2
- package/Models/DatabaseModels/DatabaseBaseModel/RelationOnlyRuleBaseModel.ts +11 -0
- package/Models/DatabaseModels/DatabaseBaseModel/RuleBaseModel.ts +44 -0
- package/Models/DatabaseModels/DockerHostLabelRule.ts +2 -2
- package/Models/DatabaseModels/DockerHostOwnerRule.ts +2 -2
- package/Models/DatabaseModels/DockerSwarmClusterLabelRule.ts +2 -2
- package/Models/DatabaseModels/DockerSwarmClusterOwnerRule.ts +2 -2
- package/Models/DatabaseModels/GoogleSecOpsConnection.ts +57 -7
- package/Models/DatabaseModels/GoogleSecOpsConnectionRun.ts +263 -0
- package/Models/DatabaseModels/HostLabelRule.ts +2 -2
- package/Models/DatabaseModels/HostOwnerRule.ts +2 -2
- package/Models/DatabaseModels/Incident.ts +55 -0
- package/Models/DatabaseModels/IncidentEpisodeLabelRule.ts +2 -2
- package/Models/DatabaseModels/IncidentEpisodeOnCallRule.ts +2 -2
- package/Models/DatabaseModels/IncidentEpisodeOwnerRule.ts +2 -2
- package/Models/DatabaseModels/IncidentEpisodePrivacyRule.ts +2 -2
- package/Models/DatabaseModels/IncidentGroupingRule.ts +2 -2
- package/Models/DatabaseModels/IncidentLabelRule.ts +2 -2
- package/Models/DatabaseModels/IncidentOnCallRule.ts +2 -2
- package/Models/DatabaseModels/IncidentOwnerRule.ts +2 -2
- package/Models/DatabaseModels/IncidentPrivacyRule.ts +2 -2
- package/Models/DatabaseModels/IncidentReminderRule.ts +6 -4
- package/Models/DatabaseModels/IncidentSlaRule.ts +2 -2
- package/Models/DatabaseModels/IncomingCallPolicy.ts +3 -4
- package/Models/DatabaseModels/IncomingCallPolicyLabelRule.ts +2 -2
- package/Models/DatabaseModels/IncomingCallPolicyOwnerRule.ts +2 -2
- package/Models/DatabaseModels/IncomingCallPolicyPhoneNumber.ts +254 -0
- package/Models/DatabaseModels/Index.ts +18 -0
- package/Models/DatabaseModels/IoTFleetLabelRule.ts +2 -2
- package/Models/DatabaseModels/IoTFleetOwnerRule.ts +2 -2
- package/Models/DatabaseModels/KubernetesClusterLabelRule.ts +2 -2
- package/Models/DatabaseModels/KubernetesClusterOwnerRule.ts +2 -2
- package/Models/DatabaseModels/MonitorLabelRule.ts +2 -2
- package/Models/DatabaseModels/MonitorOwnerRule.ts +2 -2
- package/Models/DatabaseModels/NetworkDeviceAutoImportRule.ts +2 -2
- package/Models/DatabaseModels/NetworkDeviceLabelRule.ts +2 -2
- package/Models/DatabaseModels/NetworkDeviceOwnerRule.ts +2 -2
- package/Models/DatabaseModels/NetworkSiteAssignmentRule.ts +2 -2
- package/Models/DatabaseModels/OnCallDutyPolicyLabelRule.ts +2 -2
- package/Models/DatabaseModels/OnCallDutyPolicyOwnerRule.ts +2 -2
- package/Models/DatabaseModels/OnCallDutyPolicyScheduleLabelRule.ts +2 -2
- package/Models/DatabaseModels/OnCallDutyPolicyScheduleOwnerRule.ts +2 -2
- package/Models/DatabaseModels/PodmanHostLabelRule.ts +2 -2
- package/Models/DatabaseModels/PodmanHostOwnerRule.ts +2 -2
- package/Models/DatabaseModels/ProxmoxClusterLabelRule.ts +2 -2
- package/Models/DatabaseModels/ProxmoxClusterOwnerRule.ts +2 -2
- package/Models/DatabaseModels/RumApplicationLabelRule.ts +2 -2
- package/Models/DatabaseModels/RumApplicationOwnerRule.ts +2 -2
- package/Models/DatabaseModels/RunbookLabelRule.ts +2 -2
- package/Models/DatabaseModels/RunbookOwnerRule.ts +2 -2
- package/Models/DatabaseModels/RunbookRule.ts +2 -2
- package/Models/DatabaseModels/ScheduledMaintenance.ts +55 -0
- package/Models/DatabaseModels/ScheduledMaintenanceLabelRule.ts +2 -2
- package/Models/DatabaseModels/ScheduledMaintenanceOwnerRule.ts +2 -2
- package/Models/DatabaseModels/ScheduledMaintenanceReminderRule.ts +6 -4
- package/Models/DatabaseModels/ServerlessFunctionLabelRule.ts +2 -2
- package/Models/DatabaseModels/ServerlessFunctionOwnerRule.ts +2 -2
- package/Models/DatabaseModels/ServiceLabelRule.ts +2 -2
- package/Models/DatabaseModels/ServiceLevelObjectiveBurnRateRule.ts +283 -4
- package/Models/DatabaseModels/ServiceOwnerRule.ts +2 -2
- package/Models/DatabaseModels/StatusPageLabelRule.ts +2 -2
- package/Models/DatabaseModels/StatusPageMonitorRule.ts +2 -2
- package/Models/DatabaseModels/StatusPageOwnerRule.ts +2 -2
- package/Models/DatabaseModels/User.ts +51 -2
- package/Models/DatabaseModels/UserNotificationEmailRollupItem.ts +43 -2
- package/Models/DatabaseModels/UserWebAuthn.ts +17 -0
- package/Models/DatabaseModels/VMwareResource.ts +1149 -0
- package/Models/DatabaseModels/VMwareVCenter.ts +1122 -0
- package/Models/DatabaseModels/VMwareVCenterFeed.ts +625 -0
- package/Models/DatabaseModels/VMwareVCenterLabelRule.ts +514 -0
- package/Models/DatabaseModels/VMwareVCenterOwnerRule.ts +596 -0
- package/Models/DatabaseModels/VMwareVCenterOwnerTeam.ts +485 -0
- package/Models/DatabaseModels/VMwareVCenterOwnerUser.ts +484 -0
- package/Models/DatabaseModels/WorkflowLabelRule.ts +2 -2
- package/Models/DatabaseModels/WorkflowOwnerRule.ts +2 -2
- package/Models/DatabaseModels/WorkflowVariable.ts +22 -1
- package/Server/API/AIAgentDataAPI.ts +79 -4
- package/Server/API/AIAgentGitHubAPI.ts +523 -0
- package/Server/API/AIChatAPI.ts +20 -1
- package/Server/API/BillingAPI.ts +33 -0
- package/Server/API/DashboardAPI.ts +10 -0
- package/Server/API/GitHubAPI.ts +47 -5
- package/Server/API/GoogleSecOpsConnectionAPI.ts +79 -0
- package/Server/API/TelemetryAPI.ts +323 -2
- package/Server/API/UserWebAuthnAPI.ts +21 -1
- package/Server/API/VMwareResourceAPI.ts +143 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1791800000000-SplitWebAuthnChallengeByPurpose.ts +68 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1791900000000-AddSeverityAndStateToNotificationEmailRollup.ts +26 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1792000000000-AddVMwareTables.ts +636 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1792100000000-AddGitHubCommandSettingsToCodeRepository.ts +47 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1792200000000-AddUserWebAuthnPurpose.ts +17 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1792300000000-AddGoogleSecOpsDiagnostics.ts +83 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1792400000000-AddSloBurnRateRuleIncidents.ts +111 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1792500000000-AddConfigurableRuleCriteria.ts +644 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1792600000000-AddIncomingCallPolicyPhoneNumbers.ts +72 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +18 -0
- package/Server/Middleware/IdentityRateLimit.ts +101 -0
- package/Server/Middleware/MultipartFormData.ts +46 -21
- package/Server/Services/AIRunService.ts +13 -0
- package/Server/Services/AlertEpisodeLabelRuleEngineService.ts +21 -0
- package/Server/Services/AlertEpisodeOnCallRuleEngineService.ts +21 -0
- package/Server/Services/AlertEpisodeOwnerRuleEngineService.ts +21 -0
- package/Server/Services/AlertEpisodePrivacyRuleEngineService.ts +21 -0
- package/Server/Services/AlertGroupingEngineService.ts +27 -0
- package/Server/Services/AlertLabelRuleEngineService.ts +27 -0
- package/Server/Services/AlertOnCallRuleEngineService.ts +27 -0
- package/Server/Services/AlertOwnerRuleEngineService.ts +27 -0
- package/Server/Services/AlertPrivacyRuleEngineService.ts +27 -0
- package/Server/Services/AlertReminderRuleService.ts +65 -33
- package/Server/Services/AutoRemediationRuleEngineService.ts +90 -8
- package/Server/Services/BillingPaymentMethodService.ts +99 -28
- package/Server/Services/BillingService.ts +287 -20
- package/Server/Services/CephClusterLabelRuleEngineService.ts +20 -0
- package/Server/Services/CephClusterOwnerRuleEngineService.ts +20 -0
- package/Server/Services/CloudResourceInstanceService.ts +70 -0
- package/Server/Services/CloudResourceLabelRuleEngineService.ts +20 -0
- package/Server/Services/CloudResourceOwnerRuleEngineService.ts +20 -0
- package/Server/Services/DashboardLabelRuleEngineService.ts +20 -0
- package/Server/Services/DashboardOwnerRuleEngineService.ts +20 -0
- package/Server/Services/DatabaseService.ts +409 -6
- package/Server/Services/DockerHostLabelRuleEngineService.ts +20 -0
- package/Server/Services/DockerHostOwnerRuleEngineService.ts +20 -0
- package/Server/Services/DockerSwarmClusterLabelRuleEngineService.ts +23 -0
- package/Server/Services/DockerSwarmClusterOwnerRuleEngineService.ts +23 -0
- package/Server/Services/ExceptionAggregationService.ts +1 -0
- package/Server/Services/GoogleSecOpsConnectionRunService.ts +10 -0
- package/Server/Services/GoogleSecOpsConnectionService.ts +12 -0
- package/Server/Services/HostLabelRuleEngineService.ts +13 -0
- package/Server/Services/HostOwnerRuleEngineService.ts +13 -0
- package/Server/Services/IncidentEpisodeLabelRuleEngineService.ts +21 -0
- package/Server/Services/IncidentEpisodeOnCallRuleEngineService.ts +21 -0
- package/Server/Services/IncidentEpisodeOwnerRuleEngineService.ts +21 -0
- package/Server/Services/IncidentEpisodePrivacyRuleEngineService.ts +21 -0
- package/Server/Services/IncidentGroupingEngineService.ts +64 -13
- package/Server/Services/IncidentLabelRuleEngineService.ts +64 -9
- package/Server/Services/IncidentOnCallRuleEngineService.ts +64 -10
- package/Server/Services/IncidentOwnerRuleEngineService.ts +64 -10
- package/Server/Services/IncidentPrivacyRuleEngineService.ts +64 -10
- package/Server/Services/IncidentReminderRuleService.ts +66 -34
- package/Server/Services/IncidentSlaRuleService.ts +55 -12
- package/Server/Services/IncomingCallPolicyLabelRuleEngineService.ts +20 -0
- package/Server/Services/IncomingCallPolicyOwnerRuleEngineService.ts +20 -0
- package/Server/Services/IncomingCallPolicyPhoneNumberService.ts +184 -0
- package/Server/Services/IncomingCallPolicyService.ts +276 -5
- package/Server/Services/Index.ts +18 -0
- package/Server/Services/IoTFleetLabelRuleEngineService.ts +20 -0
- package/Server/Services/IoTFleetOwnerRuleEngineService.ts +20 -0
- package/Server/Services/KubernetesClusterLabelRuleEngineService.ts +23 -0
- package/Server/Services/KubernetesClusterOwnerRuleEngineService.ts +23 -0
- package/Server/Services/LabelService.ts +50 -7
- package/Server/Services/LogAggregationService.ts +1 -0
- package/Server/Services/MetricAggregationService.ts +1 -0
- package/Server/Services/MobilePasskeyLoginService.ts +216 -0
- package/Server/Services/MonitorLabelRuleEngineService.ts +20 -0
- package/Server/Services/MonitorOwnerRuleEngineService.ts +20 -0
- package/Server/Services/MonitorService.ts +51 -1
- package/Server/Services/MonitorTemplateService.ts +91 -29
- package/Server/Services/NetworkDeviceAutoImportRuleEngineService.ts +134 -1
- package/Server/Services/NetworkDeviceAutoImportRuleService.ts +269 -3
- package/Server/Services/NetworkDeviceLabelRuleEngineService.ts +26 -0
- package/Server/Services/NetworkDeviceOwnerRuleEngineService.ts +25 -0
- package/Server/Services/NetworkDeviceService.ts +2 -0
- package/Server/Services/NetworkSiteAssignmentRuleService.ts +90 -1
- package/Server/Services/NetworkSiteService.ts +242 -29
- package/Server/Services/NetworkSiteTypeService.ts +177 -77
- package/Server/Services/OnCallDutyPolicyLabelRuleEngineService.ts +20 -0
- package/Server/Services/OnCallDutyPolicyOwnerRuleEngineService.ts +20 -0
- package/Server/Services/OnCallDutyPolicyScheduleLabelRuleEngineService.ts +22 -0
- package/Server/Services/OnCallDutyPolicyScheduleOwnerRuleEngineService.ts +22 -0
- package/Server/Services/OpenTelemetryIngestService.ts +17 -0
- package/Server/Services/PayAsYouGoBillingService.ts +446 -0
- package/Server/Services/PodmanHostLabelRuleEngineService.ts +20 -0
- package/Server/Services/PodmanHostOwnerRuleEngineService.ts +20 -0
- package/Server/Services/ProjectCallSMSConfigService.ts +156 -7
- package/Server/Services/ProjectService.ts +46 -2
- package/Server/Services/ProxmoxClusterLabelRuleEngineService.ts +25 -0
- package/Server/Services/ProxmoxClusterOwnerRuleEngineService.ts +25 -0
- package/Server/Services/RumApplicationLabelRuleEngineService.ts +22 -0
- package/Server/Services/RumApplicationOwnerRuleEngineService.ts +22 -0
- package/Server/Services/RunbookLabelRuleEngineService.ts +20 -0
- package/Server/Services/RunbookOwnerRuleEngineService.ts +20 -0
- package/Server/Services/RunbookRuleEngineService.ts +18 -1
- package/Server/Services/ScheduledMaintenanceLabelRuleEngineService.ts +62 -10
- package/Server/Services/ScheduledMaintenanceOwnerRuleEngineService.ts +62 -11
- package/Server/Services/ScheduledMaintenanceReminderRuleService.ts +48 -18
- package/Server/Services/ServerlessFunctionInstanceService.ts +71 -0
- package/Server/Services/ServerlessFunctionLabelRuleEngineService.ts +25 -0
- package/Server/Services/ServerlessFunctionOwnerRuleEngineService.ts +25 -0
- package/Server/Services/ServiceLabelRuleEngineService.ts +20 -0
- package/Server/Services/ServiceLevelObjectiveBurnRateRuleService.ts +675 -12
- package/Server/Services/ServiceLevelObjectiveService.ts +55 -13
- package/Server/Services/ServiceOwnerRuleEngineService.ts +20 -0
- package/Server/Services/StatusPageLabelRuleEngineService.ts +20 -0
- package/Server/Services/StatusPageMonitorRuleEngineService.ts +31 -2
- package/Server/Services/StatusPageMonitorRuleService.ts +34 -1
- package/Server/Services/StatusPageOwnerRuleEngineService.ts +20 -0
- package/Server/Services/TeamMemberService.ts +96 -36
- package/Server/Services/TelemetryIngestionKeyService.ts +80 -10
- package/Server/Services/TelemetryUsageBillingService.ts +95 -5
- package/Server/Services/TraceAggregationService.ts +5 -4
- package/Server/Services/UserService.ts +23 -50
- package/Server/Services/UserWebAuthnService.ts +592 -133
- package/Server/Services/VMwareResourceService.ts +648 -0
- package/Server/Services/VMwareVCenterFeedService.ts +99 -0
- package/Server/Services/VMwareVCenterLabelRuleEngineService.ts +265 -0
- package/Server/Services/VMwareVCenterLabelRuleService.ts +14 -0
- package/Server/Services/VMwareVCenterOwnerRuleEngineService.ts +277 -0
- package/Server/Services/VMwareVCenterOwnerRuleService.ts +14 -0
- package/Server/Services/VMwareVCenterOwnerTeamService.ts +139 -0
- package/Server/Services/VMwareVCenterOwnerUserService.ts +133 -0
- package/Server/Services/VMwareVCenterService.ts +629 -0
- package/Server/Services/WorkflowLabelRuleEngineService.ts +20 -0
- package/Server/Services/WorkflowOwnerRuleEngineService.ts +20 -0
- package/Server/Services/WorkflowVariableService.ts +203 -0
- package/Server/Static/Brand/README.md +10 -5
- package/Server/Static/Brand/favicons/oneuptime-up-v1.svg +8 -0
- package/Server/Types/Billing/MeteredPlan/ActiveMonitoringMeteredPlan.ts +17 -0
- package/Server/Types/Billing/MeteredPlan/TelemetryMeteredPlan.ts +31 -1
- package/Server/Types/Database/QueryHelper.ts +88 -0
- package/Server/Utils/AI/Toolbox/SloTools.ts +19 -2
- package/Server/Utils/CodeRepository/GitHub/GitHub.ts +7 -0
- package/Server/Utils/CodeRepository/GitHub/GitHubAgentTaskTrigger.ts +341 -0
- package/Server/Utils/CodeRepository/GitHub/GitHubCommandAuthorizer.ts +274 -0
- package/Server/Utils/CodeRepository/GitHub/GitHubCommandParser.ts +375 -0
- package/Server/Utils/CodeRepository/GitHub/GitHubConversation.ts +846 -0
- package/Server/Utils/CodeRepository/GitHub/GitHubReplyComposer.ts +360 -0
- package/Server/Utils/CodeRepository/GitHub/GitHubRunReply.ts +421 -0
- package/Server/Utils/CodeRepository/GitHub/GitHubWebhookEvents.ts +140 -0
- package/Server/Utils/CodeRepository/GitHub/GitHubWebhookHandler.ts +906 -0
- package/Server/Utils/Dashboard/PublicDashboardResourceListPolicy.ts +143 -0
- package/Server/Utils/DataSource/EgressGuard.ts +160 -15
- package/Server/Utils/Database/TruncateColumnValue.ts +1 -1
- package/Server/Utils/EmailRollup/EmailRollupFlushRunner.ts +2 -0
- package/Server/Utils/EmailRollup/EmailRollupRenderer.ts +33 -0
- package/Server/Utils/EmailRollup/EmailRollupWriter.ts +44 -0
- package/Server/Utils/IncomingCallPhoneNumber.ts +29 -16
- package/Server/Utils/LogRedaction.ts +2 -1
- package/Server/Utils/Monitor/MonitorAlert.ts +1 -1
- package/Server/Utils/Monitor/MonitorCriteriaEvaluator.ts +302 -3
- package/Server/Utils/Monitor/MonitorMaintenanceSuppression.ts +26 -4
- package/Server/Utils/Monitor/MonitorResourceContext.ts +5 -3
- package/Server/Utils/Monitor/MonitorStepResourceIdentity.ts +14 -0
- package/Server/Utils/Monitor/MonitorTemplateUtil.ts +1 -0
- package/Server/Utils/Monitor/SeriesResourceLabels.ts +26 -0
- package/Server/Utils/Monitor/SeriesResourceLinker.ts +28 -5
- package/Server/Utils/Profiling.ts +13 -1
- package/Server/Utils/ResourceFeed/ResourceFeedUtil.ts +3 -3
- package/Server/Utils/Rules/MonitorRuleCriteriaCache.ts +38 -0
- package/Server/Utils/SecurityEvent/ConnectorErrorMessage.ts +14 -9
- package/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsClient.ts +116 -84
- package/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsPoller.ts +594 -195
- package/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsRunExecutor.ts +466 -0
- package/Server/Utils/SessionReplay/SessionReplayReadService.ts +498 -0
- package/Server/Utils/Telemetry/EntityRegistry.ts +5 -0
- package/Server/Utils/Telemetry/ResourceHeartbeat.ts +2 -1
- package/Server/Utils/Telemetry/TelemetryEntity.ts +181 -1
- package/Server/Utils/Telemetry/VMwareSnapshotScan.ts +1352 -0
- package/Server/Utils/Telemetry.ts +3 -1
- package/Server/Utils/VendorAssets.ts +3 -0
- package/Tests/App/Accounts/LoginPasskey.test.tsx +529 -0
- package/Tests/App/Accounts/MobilePasskey.test.tsx +620 -0
- package/Tests/App/Accounts/PasswordRequirements.test.tsx +254 -0
- package/Tests/App/Accounts/RegisterPassword.test.tsx +553 -0
- package/Tests/App/Dashboard/AIInsightViewTriage.test.tsx +348 -0
- package/Tests/App/Dashboard/ArchiveResourceCard.test.tsx +476 -0
- package/Tests/App/Dashboard/AskAiAvailability.test.ts +224 -0
- package/Tests/App/Dashboard/AskAiDisabled.test.tsx +432 -0
- package/Tests/App/Dashboard/BackupCodes.test.tsx +414 -0
- package/Tests/App/Dashboard/BillingPaidUsageFlow.test.tsx +530 -0
- package/Tests/App/Dashboard/BillingPaymentMethodForm.test.tsx +195 -0
- package/Tests/App/Dashboard/BreadcrumbCoverage.test.tsx +199 -0
- package/Tests/App/Dashboard/CloudDocumentationCard.test.tsx +223 -0
- package/Tests/App/Dashboard/CloudDocumentationMarkdown.test.ts +215 -0
- package/Tests/App/Dashboard/CloudFleetSummary.test.ts +183 -0
- package/Tests/App/Dashboard/CloudFleetSummaryComponent.test.tsx +248 -0
- package/Tests/App/Dashboard/CloudResourceTelemetryScope.test.ts +215 -0
- package/Tests/App/Dashboard/CriteriaFilterDefaults.test.ts +3 -0
- package/Tests/App/Dashboard/DashboardHeaderRequests.test.tsx +441 -0
- package/Tests/App/Dashboard/DashboardLazyPages.test.tsx +883 -0
- package/Tests/App/Dashboard/DashboardPersistentSideMenuLayouts.test.tsx +702 -0
- package/Tests/App/Dashboard/DashboardToolbarPopupLayering.test.tsx +566 -0
- package/Tests/App/Dashboard/DiscoveryScanLivePage.test.tsx +376 -0
- package/Tests/App/Dashboard/DiscoveryScanLiveUpdates.test.tsx +642 -0
- package/Tests/App/Dashboard/DiscoveryScanProgress.test.tsx +267 -0
- package/Tests/App/Dashboard/DiscoveryScanWizardValidation.test.tsx +69 -231
- package/Tests/App/Dashboard/ExceptionsLandingRedirect.test.tsx +63 -0
- package/Tests/App/Dashboard/FeedOrdering.test.ts +150 -0
- package/Tests/App/Dashboard/GoogleSecOpsConnectionsErrors.test.tsx +423 -0
- package/Tests/App/Dashboard/GoogleSecOpsDiagnostics.test.tsx +724 -0
- package/Tests/App/Dashboard/InventoryItemSideMenu.test.tsx +155 -0
- package/Tests/App/Dashboard/InvestigationFeedRefresh.test.tsx +11 -0
- package/Tests/App/Dashboard/MonitorTemplateSyncFields.test.tsx +539 -0
- package/Tests/App/Dashboard/OnCallLayerCardOverrides.test.tsx +24 -7
- package/Tests/App/Dashboard/OnCallOverridePresentation.test.ts +496 -0
- package/Tests/App/Dashboard/OnCallScheduleOverrideClarity.test.tsx +677 -0
- package/Tests/App/Dashboard/OnCallSchedulePreviewOverrides.test.tsx +31 -3
- package/Tests/App/Dashboard/PaidUsageConsent.test.tsx +180 -0
- package/Tests/App/Dashboard/PasskeySettings.test.tsx +1364 -0
- package/Tests/App/Dashboard/PayAsYouGoConsentGate.test.tsx +176 -275
- package/Tests/App/Dashboard/PayAsYouGoNotices.test.tsx +380 -233
- package/Tests/App/Dashboard/ProductMenuBreadcrumbs.test.tsx +3 -23
- package/Tests/App/Dashboard/ResourceArchiveSettings.test.tsx +347 -0
- package/Tests/App/Dashboard/ResourceAuditLogsSideMenus.test.tsx +263 -0
- package/Tests/App/Dashboard/ResourceFeed.test.tsx +414 -17
- package/Tests/App/Dashboard/ResourceFeedPageWiring.test.ts +8 -1
- package/Tests/App/Dashboard/RumSessionReplaySideMenu.test.tsx +138 -0
- package/Tests/App/Dashboard/SloDashboardTemplateWidgets.test.tsx +940 -0
- package/Tests/App/Dashboard/TelemetryIngestionKeyEdit.test.tsx +378 -0
- package/Tests/App/Dashboard/TelemetryIngestionKeyForm.test.tsx +735 -0
- package/Tests/App/Dashboard/TwoFactorStatus.test.tsx +427 -0
- package/Tests/App/Dashboard/VMwareDashboardWidgets.test.ts +573 -0
- package/Tests/App/Dashboard/WidgetCatalog.test.ts +2 -0
- package/Tests/App/Dashboard/WorkflowVariablesTable.test.tsx +768 -0
- package/Tests/App/StatusPage/BulkAddStatusPageMonitorsModal.test.tsx +13 -3
- package/Tests/App/StatusPage/StatusPageOverviewLiveAndSearch.test.tsx +532 -40
- package/Tests/App/StatusPage/StatusPageResourceSearchBox.test.tsx +19 -2
- package/Tests/Fixtures/MobilePasskeyUser.json +8 -0
- package/Tests/Models/AnalyticsModels/RumSessionReplayColumns.test.ts +127 -4
- package/Tests/Models/DatabaseModels/DomainRoleTierCoverage.test.ts +5 -4
- package/Tests/Models/DatabaseModels/IncomingCallPolicyPhoneNumber.test.ts +362 -0
- package/Tests/Models/DatabaseModels/ResourceFeedModels.test.ts +25 -6
- package/Tests/Models/DatabaseModels/RuleBaseModel.test.ts +69 -0
- package/Tests/Models/DatabaseModels/StaticRuleCriteriaInheritance.test.ts +181 -0
- package/Tests/Models/DatabaseModels/VMwareModels.test.ts +1134 -0
- package/Tests/Models/RunnerVersionLabel.test.ts +4 -2
- package/Tests/Server/API/AIChatProvidersAIEnabled.test.ts +259 -0
- package/Tests/Server/API/AIChatRouteAuthorization.test.ts +31 -2
- package/Tests/Server/API/BillingPayAsYouGoStatus.test.ts +116 -0
- package/Tests/Server/API/DashboardPublicResourceListAPI.test.ts +29 -1
- package/Tests/Server/API/EnterpriseLicenseReportUserCount.test.ts +13 -2
- package/Tests/Server/API/GitHubWebhookSignature.test.ts +368 -0
- package/Tests/Server/API/GoogleSecOpsConnectionAPI.test.ts +248 -0
- package/Tests/Server/API/SessionReplayAPI.test.ts +1303 -145
- package/Tests/Server/API/UserTwoFactorSelfService.test.ts +407 -0
- package/Tests/Server/API/UserWebAuthnAuthenticationOptionsRoute.test.ts +330 -0
- package/Tests/Server/API/UserWebAuthnPasskeyAPI.test.ts +172 -0
- package/Tests/Server/API/VMwareResourceAPI.test.ts +546 -0
- package/Tests/Server/Infrastructure/Postgres/AddConfigurableRuleCriteriaMigration.test.ts +611 -0
- package/Tests/Server/Infrastructure/Postgres/UserNotificationEmailRollupMetadataMigration.test.ts +85 -0
- package/Tests/Server/Infrastructure/Postgres/UserNotificationEmailRollupTableMigration.test.ts +34 -3
- package/Tests/Server/Middleware/MultipartFormData.test.ts +61 -3
- package/Tests/Server/Middleware/PasskeyRateLimit.test.ts +141 -0
- package/Tests/Server/Middleware/TelemetryIngestionDisabled.test.ts +211 -0
- package/Tests/Server/Services/AlertIncidentRuleCriteriaEngineServices.test.ts +651 -0
- package/Tests/Server/Services/AutoImportRuleRearmRecentScans.test.ts +343 -0
- package/Tests/Server/Services/AutoImportRuleWriteRearmsScans.test.ts +381 -0
- package/Tests/Server/Services/AutoRemediationRuleEngineService.test.ts +79 -0
- package/Tests/Server/Services/BillingPaymentMethodServiceSync.test.ts +175 -0
- package/Tests/Server/Services/BillingService.test.ts +26 -11
- package/Tests/Server/Services/BillingServiceMeteredPaymentAuthorization.test.ts +245 -0
- package/Tests/Server/Services/BillingServicePaymentMethodReads.test.ts +362 -0
- package/Tests/Server/Services/CloudResourceInstanceStalePrune.test.ts +188 -0
- package/Tests/Server/Services/DatabaseServiceRelationOnlyRuleRollout.test.ts +330 -0
- package/Tests/Server/Services/DatabaseServiceRuleCriteriaValidation.test.ts +522 -0
- package/Tests/Server/Services/DiscoveryScanClaimHookFreeSafety.test.ts +16 -2
- package/Tests/Server/Services/GoogleSecOpsDiagnosticsModel.test.ts +153 -0
- package/Tests/Server/Services/HookFreeWriteLengthClamp.test.ts +13 -0
- package/Tests/Server/Services/IncidentSlaRuleCriteriaCorrelation.test.ts +99 -0
- package/Tests/Server/Services/IncomingCallPolicyPhoneNumberService.test.ts +1540 -0
- package/Tests/Server/Services/InventoryItemPromotionGate.test.ts +5 -0
- package/Tests/Server/Services/InventoryUpsertSchemaParity.test.ts +36 -0
- package/Tests/Server/Services/InventoryUpsertTruncationGuard.test.ts +151 -0
- package/Tests/Server/Services/MobilePasskeyLoginIntegration.test.ts +231 -0
- package/Tests/Server/Services/MobilePasskeyLoginService.test.ts +315 -0
- package/Tests/Server/Services/MonitorPayAsYouGoBilling.test.ts +302 -0
- package/Tests/Server/Services/MonitorTemplateServiceFieldSync.test.ts +994 -0
- package/Tests/Server/Services/NetworkDeviceAutoImportRuleService.test.ts +22 -0
- package/Tests/Server/Services/NetworkDeviceRuleEngines.test.ts +179 -2
- package/Tests/Server/Services/NetworkSiteAssignmentRuleService.test.ts +170 -0
- package/Tests/Server/Services/NetworkSiteService.test.ts +559 -53
- package/Tests/Server/Services/NetworkSiteTypeService.test.ts +122 -55
- package/Tests/Server/Services/OpenTelemetryResourceRetentionMemo.test.ts +7 -1
- package/Tests/Server/Services/PayAsYouGoBillingService.test.ts +857 -0
- package/Tests/Server/Services/PayAsYouGoStripeRateLimitBudget.test.ts +379 -0
- package/Tests/Server/Services/ProjectServiceExtendTrial.test.ts +99 -1
- package/Tests/Server/Services/ProjectServiceSubscriptionSeats.test.ts +134 -0
- package/Tests/Server/Services/ReminderRuleCriteria.test.ts +173 -0
- package/Tests/Server/Services/ResourceFeedServices.test.ts +3 -2
- package/Tests/Server/Services/ResourceRuleCriteriaEngineServices.test.ts +170 -0
- package/Tests/Server/Services/ResourceUpdateLastSeenLivenessFallback.test.ts +32 -6
- package/Tests/Server/Services/ScheduledMaintenanceRuleCriteriaCorrelation.test.ts +154 -0
- package/Tests/Server/Services/SecurityEventLastErrorColumnWidth.test.ts +363 -175
- package/Tests/Server/Services/ServerlessFunctionInstanceStalePrune.test.ts +200 -0
- package/Tests/Server/Services/ServiceLevelObjectiveBurnRateRuleService.test.ts +2450 -470
- package/Tests/Server/Services/ServiceLevelObjectiveService.test.ts +464 -121
- package/Tests/Server/Services/StaticRuleCriteriaRuntimeCoverage.test.ts +281 -0
- package/Tests/Server/Services/StatusPageMonitorRuleEngineService.test.ts +132 -0
- package/Tests/Server/Services/StatusPageMonitorRuleHooks.test.ts +159 -14
- package/Tests/Server/Services/TeamMemberAutoAcceptInvitation.test.ts +3 -0
- package/Tests/Server/Services/TeamMemberBillingSeatSync.test.ts +762 -0
- package/Tests/Server/Services/TeamMemberInviteRegistrationToken.test.ts +3 -0
- package/Tests/Server/Services/TelemetryIngestionKeyPolicyResolution.test.ts +72 -0
- package/Tests/Server/Services/TelemetryIngestionKeyValidation.test.ts +17 -4
- package/Tests/Server/Services/TelemetryPayAsYouGoBilling.test.ts +355 -0
- package/Tests/Server/Services/TraceAnalyticsResourceDisplayNames.test.ts +41 -4
- package/Tests/Server/Services/UserEmailChangePasswordResetExpiry.test.ts +6 -8
- package/Tests/Server/Services/UserNotificationEmailRollupModels.test.ts +37 -0
- package/Tests/Server/Services/UserTwoFactorAuthAdmin.test.ts +203 -34
- package/Tests/Server/Services/UserWebAuthnPasskeyIntegration.test.ts +401 -0
- package/Tests/Server/Services/UserWebAuthnPasskeyService.test.ts +769 -0
- package/Tests/Server/Services/UserWebAuthnUserVerification.test.ts +649 -0
- package/Tests/Server/Services/VMwareResourceService.test.ts +945 -0
- package/Tests/Server/Services/VMwareVCenterService.test.ts +722 -0
- package/Tests/Server/Services/WorkflowVariableRenameUniqueness.test.ts +842 -0
- package/Tests/Server/TestingUtils/PasskeyHttpIntegration.ts +102 -0
- package/Tests/Server/TestingUtils/SecurityKey.ts +464 -0
- package/Tests/Server/TestingUtils/WebAuthnServiceMocks.ts +60 -0
- package/Tests/Server/Types/Billing/PayAsYouGoMeteredAuthorization.test.ts +573 -0
- package/Tests/Server/Types/Database/Permissions/ProjectCustomerSupportAccessColumn.test.ts +261 -0
- package/Tests/Server/Types/Database/Permissions/WorkflowVariableColumnPermission.test.ts +95 -0
- package/Tests/Server/Types/Database/QueryHelperJsonArrayObjects.test.ts +128 -0
- package/Tests/Server/Utils/AI/SloTools.test.ts +190 -1
- package/Tests/Server/Utils/AI/Toolbox/AIToolbox.test.ts +461 -0
- package/Tests/Server/Utils/AnalyticsDatabase/StatementGenerator.test.ts +25 -0
- package/Tests/Server/Utils/Billing/BillingFailureNoticeThrottle.test.ts +359 -0
- package/Tests/Server/Utils/CodeRepository/GitHub/GitHubWebhookEvents.test.ts +318 -0
- package/Tests/Server/Utils/CodeRepository/GitHubAgentTaskTrigger.test.ts +2101 -0
- package/Tests/Server/Utils/CodeRepository/GitHubCommandAuthorizer.test.ts +883 -0
- package/Tests/Server/Utils/CodeRepository/GitHubCommandParser.test.ts +1474 -0
- package/Tests/Server/Utils/CodeRepository/GitHubConversation.test.ts +1526 -0
- package/Tests/Server/Utils/CodeRepository/GitHubReplyComposer.test.ts +1389 -0
- package/Tests/Server/Utils/CodeRepository/GitHubRunReply.test.ts +1707 -0
- package/Tests/Server/Utils/CodeRepository/GitHubWebhookHandler.test.ts +2202 -0
- package/Tests/Server/Utils/CustomField/CustomFieldDefinitionMappingHooks.test.ts +220 -0
- package/Tests/Server/Utils/Dashboard/PublicDashboardResourceListPolicy.test.ts +345 -0
- package/Tests/Server/Utils/Dashboard/SloTemplatePublicDashboard.test.ts +1043 -0
- package/Tests/Server/Utils/DataSource/EgressGuard.test.ts +896 -0
- package/Tests/Server/Utils/EmailRollup/EmailRollupMetadataIntegration.test.ts +246 -0
- package/Tests/Server/Utils/EmailRollup/EmailRollupRenderer.test.ts +299 -1
- package/Tests/Server/Utils/EmailRollup/EmailRollupTestHarness.ts +6 -0
- package/Tests/Server/Utils/EmailRollup/EmailRollupWriter.test.ts +185 -0
- package/Tests/Server/Utils/Execute.test.ts +302 -0
- package/Tests/Server/Utils/GracefulShutdown.test.ts +565 -0
- package/Tests/Server/Utils/IncomingCallPhoneNumber.test.ts +36 -20
- package/Tests/Server/Utils/LogRedaction.test.ts +33 -0
- package/Tests/Server/Utils/Monitor/CapturedMetricAttributeUtil.test.ts +2 -1
- package/Tests/Server/Utils/Monitor/Criteria/TelemetryStepMetricAlias.test.ts +10 -0
- package/Tests/Server/Utils/Monitor/MonitorAlertResourceLinking.test.ts +66 -1
- package/Tests/Server/Utils/Monitor/MonitorCriteriaEvaluator.test.ts +362 -0
- package/Tests/Server/Utils/Monitor/MonitorDependencySuppressionCreatorSkip.test.ts +1 -0
- package/Tests/Server/Utils/Monitor/MonitorIncidentResourceLinking.test.ts +60 -1
- package/Tests/Server/Utils/Monitor/MonitorMaintenanceSuppression.test.ts +60 -0
- package/Tests/Server/Utils/Monitor/MonitorRootCauseTargetResolution.test.ts +423 -0
- package/Tests/Server/Utils/Monitor/MonitorStepResourceIdentity.test.ts +6 -0
- package/Tests/Server/Utils/Monitor/MonitorSummaryPersistence.test.ts +1 -0
- package/Tests/Server/Utils/Monitor/PerSeriesSecondEntityAlerting.test.ts +1 -0
- package/Tests/Server/Utils/Monitor/SeriesResourceLinker.test.ts +46 -2
- package/Tests/Server/Utils/Monitor/SloTemplateMetricEmitterContract.test.ts +750 -0
- package/Tests/Server/Utils/ProductAnalytics.test.ts +404 -0
- package/Tests/Server/Utils/Profiling.test.ts +366 -0
- package/Tests/Server/Utils/Rules/MonitorRuleCriteriaCache.test.ts +99 -0
- package/Tests/Server/Utils/SecurityEvent/ConnectorErrorMessage.test.ts +81 -45
- package/Tests/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsRunExecutor.test.ts +711 -0
- package/Tests/Server/Utils/SecurityEvent/GoogleSecOpsClickhouseIntegration.test.ts +223 -0
- package/Tests/Server/Utils/SecurityEvent/GoogleSecOpsClient.test.ts +69 -1
- package/Tests/Server/Utils/SecurityEvent/GoogleSecOpsDiagnostics.test.ts +838 -0
- package/Tests/Server/Utils/SecurityEvent/GoogleSecOpsErrorHandling.test.ts +241 -28
- package/Tests/Server/Utils/SecurityEvent/GoogleSecOpsHttpIntegration.test.ts +651 -0
- package/Tests/Server/Utils/SecurityEvent/GoogleSecOpsPoller.test.ts +11 -0
- package/Tests/Server/Utils/SecurityEvent/GoogleSecOpsPollerFailureTaxonomy.test.ts +13 -12
- package/Tests/Server/Utils/SecurityEvent/GoogleSecOpsPollerHardening.test.ts +112 -127
- package/Tests/Server/Utils/SecurityEvent/GoogleSecOpsRequestContract.test.ts +12 -18
- package/Tests/Server/Utils/SecurityEvent/GoogleSecOpsResponseParsing.test.ts +43 -0
- package/Tests/Server/Utils/SessionReplay/SessionReplayReadServiceQueries.test.ts +558 -0
- package/Tests/Server/Utils/Telemetry/TelemetryEntity.test.ts +580 -0
- package/Tests/Server/Utils/Telemetry/VMwareSnapshotScan.test.ts +1748 -0
- package/Tests/Server/Utils/VendorAssets.test.ts +17 -0
- package/Tests/Types/Cloud/CloudPlatform.test.ts +574 -0
- package/Tests/Types/Dashboard/DashboardTemplateEditorialInvariants.test.ts +659 -0
- package/Tests/Types/Dashboard/DashboardTemplateInvariants.test.ts +97 -0
- package/Tests/Types/Dashboard/SloDashboardTemplate.test.ts +1179 -0
- package/Tests/Types/Database/AccessControl/OwnedThrough.test.ts +136 -0
- package/Tests/Types/Monitor/MetricAndProfileDefaultCriteria.test.ts +2 -0
- package/Tests/Types/Monitor/MonitorCriteriaMetricVariables.test.ts +9 -0
- package/Tests/Types/Monitor/MonitorStepDefaultTelemetryConfig.test.ts +1 -0
- package/Tests/Types/Monitor/MonitorStepInfraMonitorUtils.test.ts +53 -8
- package/Tests/Types/Monitor/MonitorStepInfrastructureMonitors.test.ts +97 -0
- package/Tests/Types/Monitor/MonitorStepMetricViewConfigUtil.test.ts +1 -0
- package/Tests/Types/Monitor/MonitorStepTemplateSyncFields.test.ts +107 -0
- package/Tests/Types/Monitor/MonitorTemplateSyncField.test.ts +172 -0
- package/Tests/Types/Monitor/MonitorType.test.ts +1 -0
- package/Tests/Types/Monitor/MonitorTypeKeywords.test.ts +2 -0
- package/Tests/Types/Monitor/Recommendation/MonitorRecommendationAlertDebuggability.test.ts +1 -0
- package/Tests/Types/Monitor/Recommendation/MonitorRecommendationCatalog.test.ts +9 -0
- package/Tests/Types/Monitor/Recommendation/MonitorRecommendationCoverage.test.ts +1 -1
- package/Tests/Types/Monitor/Recommendation/MonitorRecommendationNotificationMode.test.ts +1 -1
- package/Tests/Types/Monitor/SeriesContext/SeriesDebugHints.test.ts +131 -0
- package/Tests/Types/Monitor/SeriesContext/SeriesLabelDisplay.test.ts +10 -0
- package/Tests/Types/Monitor/VMwareAlertTemplates.test.ts +1608 -0
- package/Tests/Types/Monitor/VMwareMetricCatalog.test.ts +488 -0
- package/Tests/Types/OnCallDutyPolicy/OverrideProvenance.test.ts +295 -0
- package/Tests/Types/Rum/SessionReplayApiContracts.test.ts +180 -1
- package/Tests/Types/Runner/RunnerLiveStatus.test.ts +2 -2
- package/Tests/Types/SignupPassword.test.ts +205 -0
- package/Tests/Types/StatusPage/StatusPageLanguage.test.ts +44 -0
- package/Tests/Types/SupportedLanguages.test.ts +119 -0
- package/Tests/Types/Telemetry/EntityTypeGroups.test.ts +19 -0
- package/Tests/UI/ColorPickerBuild.test.ts +86 -0
- package/Tests/UI/Components/AiInvestigationSettingsCard.test.tsx +13 -6
- package/Tests/UI/Components/Alert.test.tsx +532 -93
- package/Tests/UI/Components/Breadcrumbs.test.tsx +32 -0
- package/Tests/UI/Components/Feed.test.tsx +241 -0
- package/Tests/UI/Components/Forms/BasicFormStepNavigation.test.tsx +368 -0
- package/Tests/UI/Components/Forms/FormSummary.test.tsx +454 -0
- package/Tests/UI/Components/Forms/ModelFormJsonColumns.test.tsx +290 -0
- package/Tests/UI/Components/Forms/ModelFormPreservesUserInput.test.tsx +937 -0
- package/Tests/UI/Components/Forms/ModelFormRuleCriteria.test.tsx +331 -0
- package/Tests/UI/Components/Forms/ModelFormWriteOnlyColumnSelect.test.tsx +230 -0
- package/Tests/UI/Components/Forms/ValidationFormSteps.test.ts +3 -4
- package/Tests/UI/Components/IconOpticalSize.test.tsx +79 -31
- package/Tests/UI/Components/LabelRuleImportExport.test.tsx +907 -0
- package/Tests/UI/Components/ModelTable/ModelTableCreateAfterEdit.test.tsx +514 -0
- package/Tests/UI/Components/ModelTable/ModelTableWrapContent.test.tsx +6 -6
- package/Tests/UI/Components/MonitorGraphs/Uptime.test.tsx +301 -0
- package/Tests/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.test.ts +2 -1
- package/Tests/UI/Components/NavBar.test.tsx +91 -2
- package/Tests/UI/Components/PencilButton.test.tsx +211 -0
- package/Tests/UI/Components/RuleCriteria/RuleCriteriaBuilder.test.tsx +510 -0
- package/Tests/UI/Components/RuleCriteria/RuleCriteriaModelTable.test.tsx +350 -0
- package/Tests/UI/Components/TableSortAndMobileColumns.test.tsx +50 -0
- package/Tests/UI/Components/Telemetry/TelemetryRetentionConfigForm.test.tsx +329 -0
- package/Tests/UI/Components/TooltipLazyContent.test.tsx +373 -0
- package/Tests/UI/Components/useFeedItems.test.tsx +107 -0
- package/Tests/UI/MicrosoftTeams/MicrosoftTeamsMessagingEndpointGuidance.test.tsx +43 -12
- package/Tests/UI/ReactDomBuild.test.ts +104 -0
- package/Tests/UI/ReactRouterSingletonBuild.test.ts +11 -1
- package/Tests/UI/Rum/ChunkLoader.test.ts +401 -0
- package/Tests/UI/Rum/RecordingHealthCard.test.tsx +1 -1
- package/Tests/UI/Rum/RecordingHealthStrip.test.tsx +7 -1
- package/Tests/UI/Rum/ReplayCorrelationPanel.test.tsx +2 -0
- package/Tests/UI/Rum/ReplayEngine.test.ts +1069 -5
- package/Tests/UI/Rum/ReplayHeader.test.tsx +579 -2
- package/Tests/UI/Rum/ReplayPlayerChrome.test.tsx +23 -5
- package/Tests/UI/Rum/ReplayRail.test.tsx +143 -1
- package/Tests/UI/Rum/ReplayRenderBudget.test.tsx +338 -0
- package/Tests/UI/Rum/ReplaySignals.test.ts +179 -0
- package/Tests/UI/Rum/ReplayStage.test.tsx +210 -3
- package/Tests/UI/Rum/ReplayTimeline.test.tsx +180 -1
- package/Tests/UI/Rum/ReplayUserSessionsMenu.test.tsx +405 -0
- package/Tests/UI/Rum/SessionReplayEmptyState.test.tsx +13 -16
- package/Tests/UI/Rum/SessionReplayFacets.test.tsx +199 -0
- package/Tests/UI/Rum/SessionReplaySearchBar.test.tsx +58 -21
- package/Tests/UI/Rum/SessionReplaySetupGuide.test.tsx +2 -0
- package/Tests/UI/Rum/SessionReplayTable.test.tsx +717 -4
- package/Tests/UI/Rum/SessionReplayUsersPage.test.tsx +435 -0
- package/Tests/UI/Rum/SessionReplayUsersTable.test.tsx +577 -0
- package/Tests/UI/Utils/Breadcrumb/fixtures/RealBreadcrumbTrails.ts +149 -1
- package/Tests/UI/Utils/Breadcrumb/fixtures/RealRoutePatterns.ts +30 -1
- package/Tests/UI/Utils/DashboardStackingLayers.test.ts +197 -0
- package/Tests/UI/Utils/LabelRuleImportExport.test.ts +738 -0
- package/Tests/UI/Utils/ModelAPITenantHeader.test.ts +109 -2
- package/Tests/UI/Utils/Navigation.test.ts +30 -0
- package/Tests/UI/Utils/UseDashboardGridDnd.test.tsx +7 -2
- package/Tests/UI/Utils/UserEmailRegistrationStatus.test.tsx +295 -0
- package/Tests/UI/Utils/WebAuthn.test.ts +265 -0
- package/Tests/Utils/Dashboard/Components/DashboardComponentDefaults.test.ts +5 -0
- package/Tests/Utils/Dashboard/Components/DashboardVMwareListComponents.test.ts +548 -0
- package/Tests/Utils/Dashboard/DashboardResourceListSharedArgs.test.ts +17 -3
- package/Tests/Utils/Dashboard/SloTemplateVariableScoping.test.ts +880 -0
- package/Tests/Utils/LabelRuleImportExport.test.ts +741 -0
- package/Tests/Utils/Monitor/MonitorSummarySnapshotUtil.test.ts +1 -0
- package/Tests/Utils/Monitor/MonitorTemplateSyncUtil.test.ts +590 -0
- package/Tests/Utils/NetworkDiscovery/AutoImportRuleMatcher.test.ts +93 -0
- package/Tests/Utils/NetworkSite/CidrMatchUtil.test.ts +138 -0
- package/Tests/Utils/NetworkSite/TypeHierarchyUtil.test.ts +174 -0
- package/Tests/Utils/RequestFailedDetails.test.ts +325 -0
- package/Tests/Utils/Rules/RuleCriteriaMatcher.test.ts +1424 -0
- package/Tests/Utils/Rum/SessionIdentity.test.ts +72 -0
- package/Tests/Utils/Slo/SloBurnRateRuleState.test.ts +374 -28
- package/Tests/Utils/Telemetry/CloudInstanceIdentity.test.ts +255 -0
- package/Tests/Utils/Telemetry/EntityRelationship.test.ts +167 -0
- package/Tests/Utils/Telemetry/OriginAllowList.test.ts +118 -0
- package/Tests/Utils/WebAuthnTestUtil.ts +79 -0
- package/Tests/__mocks__/simplewebauthn.js +33 -4
- package/Types/AI/CodeFixTaskContext.ts +122 -0
- package/Types/AI/CodeFixTaskType.ts +62 -0
- package/Types/Accounts/AccountsLanguage.ts +1 -0
- package/Types/AdminDashboard/AdminDashboardLanguage.ts +1 -0
- package/Types/Calendar/CalendarEvent.ts +16 -0
- package/Types/Cloud/CloudPlatform.ts +372 -0
- package/Types/CodeRepository/GitHubCommand.ts +69 -0
- package/Types/Dashboard/DashboardComponentType.ts +2 -0
- package/Types/Dashboard/DashboardComponents/ComponentArgument.ts +1 -0
- package/Types/Dashboard/DashboardComponents/DashboardVMwareHostListComponent.ts +23 -0
- package/Types/Dashboard/DashboardComponents/DashboardVMwareVirtualMachineListComponent.ts +30 -0
- package/Types/Dashboard/DashboardLanguage.ts +1 -0
- package/Types/Dashboard/DashboardTemplates.ts +779 -0
- package/Types/Docs/DocsLanguage.ts +1 -0
- package/Types/Exception/EgressGuardException.ts +65 -0
- package/Types/Icon/IconProp.ts +1 -0
- package/Types/Monitor/MetricMonitor/MetricMonitorResponse.ts +36 -0
- package/Types/Monitor/MonitorCriteriaInstance.ts +1 -0
- package/Types/Monitor/MonitorStep.ts +78 -17
- package/Types/Monitor/MonitorStepMetricViewConfigUtil.ts +1 -0
- package/Types/Monitor/MonitorStepVMwareMonitor.ts +127 -0
- package/Types/Monitor/MonitorTemplateSyncField.ts +291 -0
- package/Types/Monitor/MonitorType.ts +24 -0
- package/Types/Monitor/Recommendation/MonitorRecommendationCatalog.ts +33 -0
- package/Types/Monitor/Recommendation/MonitorRecommendationTypes.ts +2 -0
- package/Types/Monitor/Recommendation/MonitorRecommendationUtil.ts +3 -0
- package/Types/Monitor/SeriesContext/SeriesDebugHints.ts +158 -0
- package/Types/Monitor/SeriesContext/SeriesLabelDisplay.ts +61 -0
- package/Types/Monitor/VMwareAlertTemplates.ts +1070 -0
- package/Types/Monitor/VMwareMetricCatalog.ts +914 -0
- package/Types/OnCallDutyPolicy/ScheduleShiftUtil.ts +29 -0
- package/Types/OnCallDutyPolicy/UserOverrideUtil.ts +16 -0
- package/Types/Password.ts +84 -5
- package/Types/Permission.ts +265 -0
- package/Types/Probe/RequestFailedDetails.ts +7 -0
- package/Types/Rules/RuleCriteria.ts +51 -0
- package/Types/Rules/RuleCriteriaFieldRegistry.ts +437 -0
- package/Types/Rum/SessionReplay.ts +75 -0
- package/Types/Rum/SessionReplayApi.ts +93 -0
- package/Types/Runner/RunnerLiveStatus.ts +1 -1
- package/Types/SecurityEvent/GoogleSecOpsDiagnostics.ts +56 -0
- package/Types/StatusPage/StatusPageLanguage.ts +1 -0
- package/Types/Telemetry/EntityType.ts +21 -0
- package/Types/Telemetry/ServiceType.ts +1 -0
- package/Typings/Index.d.ts +63 -0
- package/UI/Components/Alerts/Alert.tsx +102 -72
- package/UI/Components/Breadcrumbs/Breadcrumbs.tsx +2 -2
- package/UI/Components/Button/Button.tsx +4 -1
- package/UI/Components/Calendar/Calendar.css +78 -0
- package/UI/Components/Calendar/Calendar.tsx +28 -3
- package/UI/Components/Dropdown/Dropdown.tsx +2 -0
- package/UI/Components/Feed/Feed.tsx +15 -0
- package/UI/Components/Feed/useFeedItems.ts +227 -0
- package/UI/Components/Forms/BasicForm.tsx +86 -23
- package/UI/Components/Forms/Fields/ColorPicker.tsx +2 -1
- package/UI/Components/Forms/Fields/FormField.tsx +16 -3
- package/UI/Components/Forms/ModelForm.tsx +239 -6
- package/UI/Components/Forms/Types/Field.ts +8 -1
- package/UI/Components/Graphs/DayUptimeGraph.tsx +8 -10
- package/UI/Components/Icon/Icon.tsx +19 -35
- package/UI/Components/Input/Input.tsx +42 -7
- package/UI/Components/LabelRule/ImportLabelRulesModal.tsx +441 -0
- package/UI/Components/LabelRule/LabelRuleTable.tsx +142 -0
- package/UI/Components/ModelTable/BaseModelTable.tsx +22 -5
- package/UI/Components/ModelTable/ModelTable.tsx +33 -6
- package/UI/Components/MonitorGraphs/Uptime.tsx +17 -27
- package/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.ts +3 -1
- package/UI/Components/Navbar/NavBar.tsx +1 -0
- package/UI/Components/RuleCriteria/RuleCriteriaBuilder.tsx +735 -0
- package/UI/Components/RuleCriteria/RuleCriteriaModelForm.tsx +209 -0
- package/UI/Components/RuleCriteria/RuleCriteriaModelTable.tsx +205 -0
- package/UI/Components/RuleCriteria/RuleCriteriaSummary.tsx +123 -0
- package/UI/Components/Table/Table.tsx +3 -0
- package/UI/Components/Table/TableBody.tsx +3 -0
- package/UI/Components/Table/TableRow.tsx +8 -2
- package/UI/Components/Telemetry/TelemetryRetentionConfigForm.tsx +14 -2
- package/UI/Components/Tooltip/Tooltip.tsx +52 -6
- package/UI/Styles/Theme.css +1 -0
- package/UI/Utils/DashboardStackingLayers.ts +85 -0
- package/UI/Utils/LabelRuleImportExport.ts +418 -0
- package/UI/Utils/ModelAPI/ModelAPI.ts +4 -3
- package/UI/Utils/Navigation.ts +1 -2
- package/UI/Utils/TelemetryService.ts +4 -3
- package/UI/Utils/UseDashboardGridDnd.ts +4 -1
- package/UI/Utils/UserEmailRegistrationStatus.ts +33 -5
- package/UI/Utils/WebAuthn.ts +220 -0
- package/UI/esbuild-config.js +50 -0
- package/Utils/API.ts +34 -0
- package/Utils/Dashboard/Components/DashboardVMwareHostListComponent.ts +38 -0
- package/Utils/Dashboard/Components/DashboardVMwareResourceListShared.ts +70 -0
- package/Utils/Dashboard/Components/DashboardVMwareVirtualMachineListComponent.ts +76 -0
- package/Utils/Dashboard/Components/Index.ts +16 -0
- package/Utils/Faker.ts +93 -6
- package/Utils/LabelRuleImportExport.ts +789 -0
- package/Utils/Monitor/MonitorTemplateSyncUtil.ts +164 -0
- package/Utils/NetworkDiscovery/AutoImportRuleMatcher.ts +108 -8
- package/Utils/NetworkDiscovery/DiscoveryScanStatus.ts +8 -0
- package/Utils/NetworkSite/CidrMatchUtil.ts +102 -0
- package/Utils/NetworkSite/TypeHierarchyUtil.ts +152 -2
- package/Utils/Rules/RuleCriteriaMatcher.ts +931 -0
- package/Utils/Rum/SessionIdentity.ts +16 -0
- package/Utils/Slo/SloBurnRateRuleState.ts +87 -33
- package/Utils/Telemetry/CloudInstanceIdentity.ts +94 -0
- package/Utils/Telemetry/EntityKey.ts +19 -0
- package/Utils/Telemetry/EntityRelationship.ts +19 -0
- package/Utils/Telemetry/OriginAllowList.ts +74 -0
- package/build/dist/Models/AnalyticsModels/RumSession.js +32 -0
- package/build/dist/Models/AnalyticsModels/RumSession.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Alert.js +54 -0
- package/build/dist/Models/DatabaseModels/Alert.js.map +1 -1
- package/build/dist/Models/DatabaseModels/AlertEpisodeLabelRule.js +2 -2
- package/build/dist/Models/DatabaseModels/AlertEpisodeLabelRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/AlertEpisodeOnCallRule.js +2 -2
- package/build/dist/Models/DatabaseModels/AlertEpisodeOnCallRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/AlertEpisodeOwnerRule.js +2 -2
- package/build/dist/Models/DatabaseModels/AlertEpisodeOwnerRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/AlertEpisodePrivacyRule.js +2 -2
- package/build/dist/Models/DatabaseModels/AlertEpisodePrivacyRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/AlertGroupingRule.js +2 -2
- package/build/dist/Models/DatabaseModels/AlertGroupingRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/AlertLabelRule.js +2 -2
- package/build/dist/Models/DatabaseModels/AlertLabelRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/AlertOnCallRule.js +2 -2
- package/build/dist/Models/DatabaseModels/AlertOnCallRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/AlertOwnerRule.js +2 -2
- package/build/dist/Models/DatabaseModels/AlertOwnerRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/AlertPrivacyRule.js +2 -2
- package/build/dist/Models/DatabaseModels/AlertPrivacyRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/AlertReminderRule.js +6 -5
- package/build/dist/Models/DatabaseModels/AlertReminderRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/AutoRemediationRule.js +2 -2
- package/build/dist/Models/DatabaseModels/AutoRemediationRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/CephClusterLabelRule.js +2 -2
- package/build/dist/Models/DatabaseModels/CephClusterLabelRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/CephClusterOwnerRule.js +2 -2
- package/build/dist/Models/DatabaseModels/CephClusterOwnerRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/CloudResource.js +44 -7
- package/build/dist/Models/DatabaseModels/CloudResource.js.map +1 -1
- package/build/dist/Models/DatabaseModels/CloudResourceLabelRule.js +2 -2
- package/build/dist/Models/DatabaseModels/CloudResourceLabelRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/CloudResourceOwnerRule.js +2 -2
- package/build/dist/Models/DatabaseModels/CloudResourceOwnerRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/CodeRepository.js +87 -0
- package/build/dist/Models/DatabaseModels/CodeRepository.js.map +1 -1
- package/build/dist/Models/DatabaseModels/DashboardLabelRule.js +2 -2
- package/build/dist/Models/DatabaseModels/DashboardLabelRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/DashboardOwnerRule.js +2 -2
- package/build/dist/Models/DatabaseModels/DashboardOwnerRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/DatabaseBaseModel/RelationOnlyRuleBaseModel.js +12 -0
- package/build/dist/Models/DatabaseModels/DatabaseBaseModel/RelationOnlyRuleBaseModel.js.map +1 -0
- package/build/dist/Models/DatabaseModels/DatabaseBaseModel/RuleBaseModel.js +50 -0
- package/build/dist/Models/DatabaseModels/DatabaseBaseModel/RuleBaseModel.js.map +1 -0
- package/build/dist/Models/DatabaseModels/DockerHostLabelRule.js +2 -2
- package/build/dist/Models/DatabaseModels/DockerHostLabelRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/DockerHostOwnerRule.js +2 -2
- package/build/dist/Models/DatabaseModels/DockerHostOwnerRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/DockerSwarmClusterLabelRule.js +2 -2
- package/build/dist/Models/DatabaseModels/DockerSwarmClusterLabelRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/DockerSwarmClusterOwnerRule.js +2 -2
- package/build/dist/Models/DatabaseModels/DockerSwarmClusterOwnerRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/GoogleSecOpsConnection.js +60 -7
- package/build/dist/Models/DatabaseModels/GoogleSecOpsConnection.js.map +1 -1
- package/build/dist/Models/DatabaseModels/GoogleSecOpsConnectionRun.js +287 -0
- package/build/dist/Models/DatabaseModels/GoogleSecOpsConnectionRun.js.map +1 -0
- package/build/dist/Models/DatabaseModels/HostLabelRule.js +2 -2
- package/build/dist/Models/DatabaseModels/HostLabelRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/HostOwnerRule.js +2 -2
- package/build/dist/Models/DatabaseModels/HostOwnerRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Incident.js +54 -0
- package/build/dist/Models/DatabaseModels/Incident.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncidentEpisodeLabelRule.js +2 -2
- package/build/dist/Models/DatabaseModels/IncidentEpisodeLabelRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncidentEpisodeOnCallRule.js +2 -2
- package/build/dist/Models/DatabaseModels/IncidentEpisodeOnCallRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncidentEpisodeOwnerRule.js +2 -2
- package/build/dist/Models/DatabaseModels/IncidentEpisodeOwnerRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncidentEpisodePrivacyRule.js +2 -2
- package/build/dist/Models/DatabaseModels/IncidentEpisodePrivacyRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncidentGroupingRule.js +2 -2
- package/build/dist/Models/DatabaseModels/IncidentGroupingRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncidentLabelRule.js +2 -2
- package/build/dist/Models/DatabaseModels/IncidentLabelRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncidentOnCallRule.js +2 -2
- package/build/dist/Models/DatabaseModels/IncidentOnCallRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncidentOwnerRule.js +2 -2
- package/build/dist/Models/DatabaseModels/IncidentOwnerRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncidentPrivacyRule.js +2 -2
- package/build/dist/Models/DatabaseModels/IncidentPrivacyRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncidentReminderRule.js +6 -5
- package/build/dist/Models/DatabaseModels/IncidentReminderRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncidentSlaRule.js +2 -2
- package/build/dist/Models/DatabaseModels/IncidentSlaRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncomingCallPolicy.js +3 -4
- package/build/dist/Models/DatabaseModels/IncomingCallPolicy.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncomingCallPolicyLabelRule.js +2 -2
- package/build/dist/Models/DatabaseModels/IncomingCallPolicyLabelRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncomingCallPolicyOwnerRule.js +2 -2
- package/build/dist/Models/DatabaseModels/IncomingCallPolicyOwnerRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncomingCallPolicyPhoneNumber.js +277 -0
- package/build/dist/Models/DatabaseModels/IncomingCallPolicyPhoneNumber.js.map +1 -0
- package/build/dist/Models/DatabaseModels/Index.js +18 -0
- package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IoTFleetLabelRule.js +2 -2
- package/build/dist/Models/DatabaseModels/IoTFleetLabelRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IoTFleetOwnerRule.js +2 -2
- package/build/dist/Models/DatabaseModels/IoTFleetOwnerRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/KubernetesClusterLabelRule.js +2 -2
- package/build/dist/Models/DatabaseModels/KubernetesClusterLabelRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/KubernetesClusterOwnerRule.js +2 -2
- package/build/dist/Models/DatabaseModels/KubernetesClusterOwnerRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/MonitorLabelRule.js +2 -2
- package/build/dist/Models/DatabaseModels/MonitorLabelRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/MonitorOwnerRule.js +2 -2
- package/build/dist/Models/DatabaseModels/MonitorOwnerRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/NetworkDeviceAutoImportRule.js +2 -2
- package/build/dist/Models/DatabaseModels/NetworkDeviceAutoImportRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/NetworkDeviceLabelRule.js +2 -2
- package/build/dist/Models/DatabaseModels/NetworkDeviceLabelRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/NetworkDeviceOwnerRule.js +2 -2
- package/build/dist/Models/DatabaseModels/NetworkDeviceOwnerRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/NetworkSiteAssignmentRule.js +2 -2
- package/build/dist/Models/DatabaseModels/NetworkSiteAssignmentRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/OnCallDutyPolicyLabelRule.js +2 -2
- package/build/dist/Models/DatabaseModels/OnCallDutyPolicyLabelRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/OnCallDutyPolicyOwnerRule.js +2 -2
- package/build/dist/Models/DatabaseModels/OnCallDutyPolicyOwnerRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/OnCallDutyPolicyScheduleLabelRule.js +2 -2
- package/build/dist/Models/DatabaseModels/OnCallDutyPolicyScheduleLabelRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/OnCallDutyPolicyScheduleOwnerRule.js +2 -2
- package/build/dist/Models/DatabaseModels/OnCallDutyPolicyScheduleOwnerRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/PodmanHostLabelRule.js +2 -2
- package/build/dist/Models/DatabaseModels/PodmanHostLabelRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/PodmanHostOwnerRule.js +2 -2
- package/build/dist/Models/DatabaseModels/PodmanHostOwnerRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ProxmoxClusterLabelRule.js +2 -2
- package/build/dist/Models/DatabaseModels/ProxmoxClusterLabelRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ProxmoxClusterOwnerRule.js +2 -2
- package/build/dist/Models/DatabaseModels/ProxmoxClusterOwnerRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/RumApplicationLabelRule.js +2 -2
- package/build/dist/Models/DatabaseModels/RumApplicationLabelRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/RumApplicationOwnerRule.js +2 -2
- package/build/dist/Models/DatabaseModels/RumApplicationOwnerRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/RunbookLabelRule.js +2 -2
- package/build/dist/Models/DatabaseModels/RunbookLabelRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/RunbookOwnerRule.js +2 -2
- package/build/dist/Models/DatabaseModels/RunbookOwnerRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/RunbookRule.js +2 -2
- package/build/dist/Models/DatabaseModels/RunbookRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ScheduledMaintenance.js +54 -0
- package/build/dist/Models/DatabaseModels/ScheduledMaintenance.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ScheduledMaintenanceLabelRule.js +2 -2
- package/build/dist/Models/DatabaseModels/ScheduledMaintenanceLabelRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ScheduledMaintenanceOwnerRule.js +2 -2
- package/build/dist/Models/DatabaseModels/ScheduledMaintenanceOwnerRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ScheduledMaintenanceReminderRule.js +6 -5
- package/build/dist/Models/DatabaseModels/ScheduledMaintenanceReminderRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ServerlessFunctionLabelRule.js +2 -2
- package/build/dist/Models/DatabaseModels/ServerlessFunctionLabelRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ServerlessFunctionOwnerRule.js +2 -2
- package/build/dist/Models/DatabaseModels/ServerlessFunctionOwnerRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ServiceLabelRule.js +2 -2
- package/build/dist/Models/DatabaseModels/ServiceLabelRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ServiceLevelObjectiveBurnRateRule.js +281 -4
- package/build/dist/Models/DatabaseModels/ServiceLevelObjectiveBurnRateRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ServiceOwnerRule.js +2 -2
- package/build/dist/Models/DatabaseModels/ServiceOwnerRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/StatusPageLabelRule.js +2 -2
- package/build/dist/Models/DatabaseModels/StatusPageLabelRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/StatusPageMonitorRule.js +2 -2
- package/build/dist/Models/DatabaseModels/StatusPageMonitorRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/StatusPageOwnerRule.js +2 -2
- package/build/dist/Models/DatabaseModels/StatusPageOwnerRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/User.js +57 -4
- package/build/dist/Models/DatabaseModels/User.js.map +1 -1
- package/build/dist/Models/DatabaseModels/UserNotificationEmailRollupItem.js +47 -2
- package/build/dist/Models/DatabaseModels/UserNotificationEmailRollupItem.js.map +1 -1
- package/build/dist/Models/DatabaseModels/UserWebAuthn.js +18 -0
- package/build/dist/Models/DatabaseModels/UserWebAuthn.js.map +1 -1
- package/build/dist/Models/DatabaseModels/VMwareResource.js +1201 -0
- package/build/dist/Models/DatabaseModels/VMwareResource.js.map +1 -0
- package/build/dist/Models/DatabaseModels/VMwareVCenter.js +1149 -0
- package/build/dist/Models/DatabaseModels/VMwareVCenter.js.map +1 -0
- package/build/dist/Models/DatabaseModels/VMwareVCenterFeed.js +648 -0
- package/build/dist/Models/DatabaseModels/VMwareVCenterFeed.js.map +1 -0
- package/build/dist/Models/DatabaseModels/VMwareVCenterLabelRule.js +522 -0
- package/build/dist/Models/DatabaseModels/VMwareVCenterLabelRule.js.map +1 -0
- package/build/dist/Models/DatabaseModels/VMwareVCenterOwnerRule.js +603 -0
- package/build/dist/Models/DatabaseModels/VMwareVCenterOwnerRule.js.map +1 -0
- package/build/dist/Models/DatabaseModels/VMwareVCenterOwnerTeam.js +503 -0
- package/build/dist/Models/DatabaseModels/VMwareVCenterOwnerTeam.js.map +1 -0
- package/build/dist/Models/DatabaseModels/VMwareVCenterOwnerUser.js +502 -0
- package/build/dist/Models/DatabaseModels/VMwareVCenterOwnerUser.js.map +1 -0
- package/build/dist/Models/DatabaseModels/WorkflowLabelRule.js +2 -2
- package/build/dist/Models/DatabaseModels/WorkflowLabelRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/WorkflowOwnerRule.js +2 -2
- package/build/dist/Models/DatabaseModels/WorkflowOwnerRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/WorkflowVariable.js +22 -1
- package/build/dist/Models/DatabaseModels/WorkflowVariable.js.map +1 -1
- package/build/dist/Server/API/AIAgentDataAPI.js +63 -3
- package/build/dist/Server/API/AIAgentDataAPI.js.map +1 -1
- package/build/dist/Server/API/AIAgentGitHubAPI.js +363 -0
- package/build/dist/Server/API/AIAgentGitHubAPI.js.map +1 -0
- package/build/dist/Server/API/AIChatAPI.js +19 -1
- package/build/dist/Server/API/AIChatAPI.js.map +1 -1
- package/build/dist/Server/API/BillingAPI.js +22 -0
- package/build/dist/Server/API/BillingAPI.js.map +1 -1
- package/build/dist/Server/API/DashboardAPI.js +10 -0
- package/build/dist/Server/API/DashboardAPI.js.map +1 -1
- package/build/dist/Server/API/GitHubAPI.js +33 -5
- package/build/dist/Server/API/GitHubAPI.js.map +1 -1
- package/build/dist/Server/API/GoogleSecOpsConnectionAPI.js +56 -0
- package/build/dist/Server/API/GoogleSecOpsConnectionAPI.js.map +1 -0
- package/build/dist/Server/API/TelemetryAPI.js +211 -4
- package/build/dist/Server/API/TelemetryAPI.js.map +1 -1
- package/build/dist/Server/API/UserWebAuthnAPI.js +17 -1
- package/build/dist/Server/API/UserWebAuthnAPI.js.map +1 -1
- package/build/dist/Server/API/VMwareResourceAPI.js +106 -0
- package/build/dist/Server/API/VMwareResourceAPI.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791800000000-SplitWebAuthnChallengeByPurpose.js +41 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791800000000-SplitWebAuthnChallengeByPurpose.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791900000000-AddSeverityAndStateToNotificationEmailRollup.js +14 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791900000000-AddSeverityAndStateToNotificationEmailRollup.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1792000000000-AddVMwareTables.js +241 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1792000000000-AddVMwareTables.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1792100000000-AddGitHubCommandSettingsToCodeRepository.js +36 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1792100000000-AddGitHubCommandSettingsToCodeRepository.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1792200000000-AddUserWebAuthnPurpose.js +12 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1792200000000-AddUserWebAuthnPurpose.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1792300000000-AddGoogleSecOpsDiagnostics.js +34 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1792300000000-AddGoogleSecOpsDiagnostics.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1792400000000-AddSloBurnRateRuleIncidents.js +60 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1792400000000-AddSloBurnRateRuleIncidents.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1792500000000-AddConfigurableRuleCriteria.js +301 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1792500000000-AddConfigurableRuleCriteria.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1792600000000-AddIncomingCallPolicyPhoneNumbers.js +30 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1792600000000-AddIncomingCallPolicyPhoneNumbers.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +18 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
- package/build/dist/Server/Middleware/IdentityRateLimit.js +80 -0
- package/build/dist/Server/Middleware/IdentityRateLimit.js.map +1 -1
- package/build/dist/Server/Middleware/MultipartFormData.js +38 -21
- package/build/dist/Server/Middleware/MultipartFormData.js.map +1 -1
- package/build/dist/Server/Services/AIRunService.js +14 -1
- package/build/dist/Server/Services/AIRunService.js.map +1 -1
- package/build/dist/Server/Services/AlertEpisodeLabelRuleEngineService.js +17 -0
- package/build/dist/Server/Services/AlertEpisodeLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/AlertEpisodeOnCallRuleEngineService.js +17 -0
- package/build/dist/Server/Services/AlertEpisodeOnCallRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/AlertEpisodeOwnerRuleEngineService.js +17 -0
- package/build/dist/Server/Services/AlertEpisodeOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/AlertEpisodePrivacyRuleEngineService.js +17 -0
- package/build/dist/Server/Services/AlertEpisodePrivacyRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/AlertGroupingEngineService.js +21 -0
- package/build/dist/Server/Services/AlertGroupingEngineService.js.map +1 -1
- package/build/dist/Server/Services/AlertLabelRuleEngineService.js +21 -0
- package/build/dist/Server/Services/AlertLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/AlertOnCallRuleEngineService.js +21 -0
- package/build/dist/Server/Services/AlertOnCallRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/AlertOwnerRuleEngineService.js +21 -0
- package/build/dist/Server/Services/AlertOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/AlertPrivacyRuleEngineService.js +21 -0
- package/build/dist/Server/Services/AlertPrivacyRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/AlertReminderRuleService.js +44 -26
- package/build/dist/Server/Services/AlertReminderRuleService.js.map +1 -1
- package/build/dist/Server/Services/AutoRemediationRuleEngineService.js +54 -11
- package/build/dist/Server/Services/AutoRemediationRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/BillingPaymentMethodService.js +71 -21
- package/build/dist/Server/Services/BillingPaymentMethodService.js.map +1 -1
- package/build/dist/Server/Services/BillingService.js +210 -22
- package/build/dist/Server/Services/BillingService.js.map +1 -1
- package/build/dist/Server/Services/CephClusterLabelRuleEngineService.js +16 -0
- package/build/dist/Server/Services/CephClusterLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/CephClusterOwnerRuleEngineService.js +16 -0
- package/build/dist/Server/Services/CephClusterOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/CloudResourceInstanceService.js +66 -0
- package/build/dist/Server/Services/CloudResourceInstanceService.js.map +1 -1
- package/build/dist/Server/Services/CloudResourceLabelRuleEngineService.js +16 -0
- package/build/dist/Server/Services/CloudResourceLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/CloudResourceOwnerRuleEngineService.js +16 -0
- package/build/dist/Server/Services/CloudResourceOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/DashboardLabelRuleEngineService.js +16 -0
- package/build/dist/Server/Services/DashboardLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/DashboardOwnerRuleEngineService.js +16 -0
- package/build/dist/Server/Services/DashboardOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/DatabaseService.js +235 -10
- package/build/dist/Server/Services/DatabaseService.js.map +1 -1
- package/build/dist/Server/Services/DockerHostLabelRuleEngineService.js +16 -0
- package/build/dist/Server/Services/DockerHostLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/DockerHostOwnerRuleEngineService.js +16 -0
- package/build/dist/Server/Services/DockerHostOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/DockerSwarmClusterLabelRuleEngineService.js +16 -0
- package/build/dist/Server/Services/DockerSwarmClusterLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/DockerSwarmClusterOwnerRuleEngineService.js +16 -0
- package/build/dist/Server/Services/DockerSwarmClusterOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/ExceptionAggregationService.js +1 -0
- package/build/dist/Server/Services/ExceptionAggregationService.js.map +1 -1
- package/build/dist/Server/Services/GoogleSecOpsConnectionRunService.js +9 -0
- package/build/dist/Server/Services/GoogleSecOpsConnectionRunService.js.map +1 -0
- package/build/dist/Server/Services/GoogleSecOpsConnectionService.js +7 -0
- package/build/dist/Server/Services/GoogleSecOpsConnectionService.js.map +1 -1
- package/build/dist/Server/Services/HostLabelRuleEngineService.js +12 -0
- package/build/dist/Server/Services/HostLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/HostOwnerRuleEngineService.js +12 -0
- package/build/dist/Server/Services/HostOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/IncidentEpisodeLabelRuleEngineService.js +17 -0
- package/build/dist/Server/Services/IncidentEpisodeLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/IncidentEpisodeOnCallRuleEngineService.js +17 -0
- package/build/dist/Server/Services/IncidentEpisodeOnCallRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/IncidentEpisodeOwnerRuleEngineService.js +17 -0
- package/build/dist/Server/Services/IncidentEpisodeOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/IncidentEpisodePrivacyRuleEngineService.js +17 -0
- package/build/dist/Server/Services/IncidentEpisodePrivacyRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/IncidentGroupingEngineService.js +39 -13
- package/build/dist/Server/Services/IncidentGroupingEngineService.js.map +1 -1
- package/build/dist/Server/Services/IncidentLabelRuleEngineService.js +39 -9
- package/build/dist/Server/Services/IncidentLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/IncidentOnCallRuleEngineService.js +39 -10
- package/build/dist/Server/Services/IncidentOnCallRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/IncidentOwnerRuleEngineService.js +39 -10
- package/build/dist/Server/Services/IncidentOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/IncidentPrivacyRuleEngineService.js +39 -10
- package/build/dist/Server/Services/IncidentPrivacyRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/IncidentReminderRuleService.js +44 -26
- package/build/dist/Server/Services/IncidentReminderRuleService.js.map +1 -1
- package/build/dist/Server/Services/IncidentSlaRuleService.js +33 -12
- package/build/dist/Server/Services/IncidentSlaRuleService.js.map +1 -1
- package/build/dist/Server/Services/IncomingCallPolicyLabelRuleEngineService.js +16 -0
- package/build/dist/Server/Services/IncomingCallPolicyLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/IncomingCallPolicyOwnerRuleEngineService.js +16 -0
- package/build/dist/Server/Services/IncomingCallPolicyOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/IncomingCallPolicyPhoneNumberService.js +127 -0
- package/build/dist/Server/Services/IncomingCallPolicyPhoneNumberService.js.map +1 -0
- package/build/dist/Server/Services/IncomingCallPolicyService.js +187 -4
- package/build/dist/Server/Services/IncomingCallPolicyService.js.map +1 -1
- package/build/dist/Server/Services/Index.js +18 -0
- package/build/dist/Server/Services/Index.js.map +1 -1
- package/build/dist/Server/Services/IoTFleetLabelRuleEngineService.js +16 -0
- package/build/dist/Server/Services/IoTFleetLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/IoTFleetOwnerRuleEngineService.js +16 -0
- package/build/dist/Server/Services/IoTFleetOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/KubernetesClusterLabelRuleEngineService.js +16 -0
- package/build/dist/Server/Services/KubernetesClusterLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/KubernetesClusterOwnerRuleEngineService.js +16 -0
- package/build/dist/Server/Services/KubernetesClusterOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/LabelService.js +39 -7
- package/build/dist/Server/Services/LabelService.js.map +1 -1
- package/build/dist/Server/Services/LogAggregationService.js +1 -0
- package/build/dist/Server/Services/LogAggregationService.js.map +1 -1
- package/build/dist/Server/Services/MetricAggregationService.js +1 -0
- package/build/dist/Server/Services/MetricAggregationService.js.map +1 -1
- package/build/dist/Server/Services/MobilePasskeyLoginService.js +137 -0
- package/build/dist/Server/Services/MobilePasskeyLoginService.js.map +1 -0
- package/build/dist/Server/Services/MonitorLabelRuleEngineService.js +16 -0
- package/build/dist/Server/Services/MonitorLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/MonitorOwnerRuleEngineService.js +16 -0
- package/build/dist/Server/Services/MonitorOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/MonitorService.js +34 -1
- package/build/dist/Server/Services/MonitorService.js.map +1 -1
- package/build/dist/Server/Services/MonitorTemplateService.js +64 -26
- package/build/dist/Server/Services/MonitorTemplateService.js.map +1 -1
- package/build/dist/Server/Services/NetworkDeviceAutoImportRuleEngineService.js +126 -1
- package/build/dist/Server/Services/NetworkDeviceAutoImportRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/NetworkDeviceAutoImportRuleService.js +199 -3
- package/build/dist/Server/Services/NetworkDeviceAutoImportRuleService.js.map +1 -1
- package/build/dist/Server/Services/NetworkDeviceLabelRuleEngineService.js +17 -0
- package/build/dist/Server/Services/NetworkDeviceLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/NetworkDeviceOwnerRuleEngineService.js +16 -0
- package/build/dist/Server/Services/NetworkDeviceOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/NetworkDeviceService.js +2 -0
- package/build/dist/Server/Services/NetworkDeviceService.js.map +1 -1
- package/build/dist/Server/Services/NetworkSiteAssignmentRuleService.js +56 -1
- package/build/dist/Server/Services/NetworkSiteAssignmentRuleService.js.map +1 -1
- package/build/dist/Server/Services/NetworkSiteService.js +187 -22
- package/build/dist/Server/Services/NetworkSiteService.js.map +1 -1
- package/build/dist/Server/Services/NetworkSiteTypeService.js +126 -51
- package/build/dist/Server/Services/NetworkSiteTypeService.js.map +1 -1
- package/build/dist/Server/Services/OnCallDutyPolicyLabelRuleEngineService.js +16 -0
- package/build/dist/Server/Services/OnCallDutyPolicyLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/OnCallDutyPolicyOwnerRuleEngineService.js +16 -0
- package/build/dist/Server/Services/OnCallDutyPolicyOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/OnCallDutyPolicyScheduleLabelRuleEngineService.js +16 -0
- package/build/dist/Server/Services/OnCallDutyPolicyScheduleLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/OnCallDutyPolicyScheduleOwnerRuleEngineService.js +16 -0
- package/build/dist/Server/Services/OnCallDutyPolicyScheduleOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/OpenTelemetryIngestService.js +28 -13
- package/build/dist/Server/Services/OpenTelemetryIngestService.js.map +1 -1
- package/build/dist/Server/Services/PayAsYouGoBillingService.js +297 -0
- package/build/dist/Server/Services/PayAsYouGoBillingService.js.map +1 -0
- package/build/dist/Server/Services/PodmanHostLabelRuleEngineService.js +16 -0
- package/build/dist/Server/Services/PodmanHostLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/PodmanHostOwnerRuleEngineService.js +16 -0
- package/build/dist/Server/Services/PodmanHostOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/ProjectCallSMSConfigService.js +115 -6
- package/build/dist/Server/Services/ProjectCallSMSConfigService.js.map +1 -1
- package/build/dist/Server/Services/ProjectService.js +38 -2
- package/build/dist/Server/Services/ProjectService.js.map +1 -1
- package/build/dist/Server/Services/ProxmoxClusterLabelRuleEngineService.js +16 -0
- package/build/dist/Server/Services/ProxmoxClusterLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/ProxmoxClusterOwnerRuleEngineService.js +16 -0
- package/build/dist/Server/Services/ProxmoxClusterOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/RumApplicationLabelRuleEngineService.js +16 -0
- package/build/dist/Server/Services/RumApplicationLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/RumApplicationOwnerRuleEngineService.js +16 -0
- package/build/dist/Server/Services/RumApplicationOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/RunbookLabelRuleEngineService.js +16 -0
- package/build/dist/Server/Services/RunbookLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/RunbookOwnerRuleEngineService.js +16 -0
- package/build/dist/Server/Services/RunbookOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/RunbookRuleEngineService.js +12 -0
- package/build/dist/Server/Services/RunbookRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/ScheduledMaintenanceLabelRuleEngineService.js +38 -9
- package/build/dist/Server/Services/ScheduledMaintenanceLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/ScheduledMaintenanceOwnerRuleEngineService.js +38 -10
- package/build/dist/Server/Services/ScheduledMaintenanceOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/ScheduledMaintenanceReminderRuleService.js +32 -14
- package/build/dist/Server/Services/ScheduledMaintenanceReminderRuleService.js.map +1 -1
- package/build/dist/Server/Services/ServerlessFunctionInstanceService.js +66 -0
- package/build/dist/Server/Services/ServerlessFunctionInstanceService.js.map +1 -1
- package/build/dist/Server/Services/ServerlessFunctionLabelRuleEngineService.js +16 -0
- package/build/dist/Server/Services/ServerlessFunctionLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/ServerlessFunctionOwnerRuleEngineService.js +16 -0
- package/build/dist/Server/Services/ServerlessFunctionOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/ServiceLabelRuleEngineService.js +16 -0
- package/build/dist/Server/Services/ServiceLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/ServiceLevelObjectiveBurnRateRuleService.js +554 -12
- package/build/dist/Server/Services/ServiceLevelObjectiveBurnRateRuleService.js.map +1 -1
- package/build/dist/Server/Services/ServiceLevelObjectiveService.js +50 -14
- package/build/dist/Server/Services/ServiceLevelObjectiveService.js.map +1 -1
- package/build/dist/Server/Services/ServiceOwnerRuleEngineService.js +16 -0
- package/build/dist/Server/Services/ServiceOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/StatusPageLabelRuleEngineService.js +16 -0
- package/build/dist/Server/Services/StatusPageLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/StatusPageMonitorRuleEngineService.js +25 -2
- package/build/dist/Server/Services/StatusPageMonitorRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/StatusPageMonitorRuleService.js +19 -1
- package/build/dist/Server/Services/StatusPageMonitorRuleService.js.map +1 -1
- package/build/dist/Server/Services/StatusPageOwnerRuleEngineService.js +16 -0
- package/build/dist/Server/Services/StatusPageOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/TeamMemberService.js +85 -28
- package/build/dist/Server/Services/TeamMemberService.js.map +1 -1
- package/build/dist/Server/Services/TelemetryIngestionKeyService.js +61 -10
- package/build/dist/Server/Services/TelemetryIngestionKeyService.js.map +1 -1
- package/build/dist/Server/Services/TelemetryUsageBillingService.js +62 -5
- package/build/dist/Server/Services/TelemetryUsageBillingService.js.map +1 -1
- package/build/dist/Server/Services/TraceAggregationService.js +5 -4
- package/build/dist/Server/Services/TraceAggregationService.js.map +1 -1
- package/build/dist/Server/Services/UserService.js +14 -49
- package/build/dist/Server/Services/UserService.js.map +1 -1
- package/build/dist/Server/Services/UserWebAuthnService.js +345 -113
- package/build/dist/Server/Services/UserWebAuthnService.js.map +1 -1
- package/build/dist/Server/Services/VMwareResourceService.js +395 -0
- package/build/dist/Server/Services/VMwareResourceService.js.map +1 -0
- package/build/dist/Server/Services/VMwareVCenterFeedService.js +89 -0
- package/build/dist/Server/Services/VMwareVCenterFeedService.js.map +1 -0
- package/build/dist/Server/Services/VMwareVCenterLabelRuleEngineService.js +213 -0
- package/build/dist/Server/Services/VMwareVCenterLabelRuleEngineService.js.map +1 -0
- package/build/dist/Server/Services/VMwareVCenterLabelRuleService.js +13 -0
- package/build/dist/Server/Services/VMwareVCenterLabelRuleService.js.map +1 -0
- package/build/dist/Server/Services/VMwareVCenterOwnerRuleEngineService.js +230 -0
- package/build/dist/Server/Services/VMwareVCenterOwnerRuleEngineService.js.map +1 -0
- package/build/dist/Server/Services/VMwareVCenterOwnerRuleService.js +13 -0
- package/build/dist/Server/Services/VMwareVCenterOwnerRuleService.js.map +1 -0
- package/build/dist/Server/Services/VMwareVCenterOwnerTeamService.js +129 -0
- package/build/dist/Server/Services/VMwareVCenterOwnerTeamService.js.map +1 -0
- package/build/dist/Server/Services/VMwareVCenterOwnerUserService.js +122 -0
- package/build/dist/Server/Services/VMwareVCenterOwnerUserService.js.map +1 -0
- package/build/dist/Server/Services/VMwareVCenterService.js +533 -0
- package/build/dist/Server/Services/VMwareVCenterService.js.map +1 -0
- package/build/dist/Server/Services/WorkflowLabelRuleEngineService.js +16 -0
- package/build/dist/Server/Services/WorkflowLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/WorkflowOwnerRuleEngineService.js +16 -0
- package/build/dist/Server/Services/WorkflowOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/WorkflowVariableService.js +169 -0
- package/build/dist/Server/Services/WorkflowVariableService.js.map +1 -1
- package/build/dist/Server/Types/Billing/MeteredPlan/ActiveMonitoringMeteredPlan.js +12 -1
- package/build/dist/Server/Types/Billing/MeteredPlan/ActiveMonitoringMeteredPlan.js.map +1 -1
- package/build/dist/Server/Types/Billing/MeteredPlan/TelemetryMeteredPlan.js +25 -2
- package/build/dist/Server/Types/Billing/MeteredPlan/TelemetryMeteredPlan.js.map +1 -1
- package/build/dist/Server/Types/Database/QueryHelper.js +67 -0
- package/build/dist/Server/Types/Database/QueryHelper.js.map +1 -1
- package/build/dist/Server/Utils/AI/Toolbox/SloTools.js +21 -4
- package/build/dist/Server/Utils/AI/Toolbox/SloTools.js.map +1 -1
- package/build/dist/Server/Utils/CodeRepository/GitHub/GitHub.js.map +1 -1
- package/build/dist/Server/Utils/CodeRepository/GitHub/GitHubAgentTaskTrigger.js +275 -0
- package/build/dist/Server/Utils/CodeRepository/GitHub/GitHubAgentTaskTrigger.js.map +1 -0
- package/build/dist/Server/Utils/CodeRepository/GitHub/GitHubCommandAuthorizer.js +226 -0
- package/build/dist/Server/Utils/CodeRepository/GitHub/GitHubCommandAuthorizer.js.map +1 -0
- package/build/dist/Server/Utils/CodeRepository/GitHub/GitHubCommandParser.js +297 -0
- package/build/dist/Server/Utils/CodeRepository/GitHub/GitHubCommandParser.js.map +1 -0
- package/build/dist/Server/Utils/CodeRepository/GitHub/GitHubConversation.js +582 -0
- package/build/dist/Server/Utils/CodeRepository/GitHub/GitHubConversation.js.map +1 -0
- package/build/dist/Server/Utils/CodeRepository/GitHub/GitHubReplyComposer.js +275 -0
- package/build/dist/Server/Utils/CodeRepository/GitHub/GitHubReplyComposer.js.map +1 -0
- package/build/dist/Server/Utils/CodeRepository/GitHub/GitHubRunReply.js +365 -0
- package/build/dist/Server/Utils/CodeRepository/GitHub/GitHubRunReply.js.map +1 -0
- package/build/dist/Server/Utils/CodeRepository/GitHub/GitHubWebhookEvents.js +103 -0
- package/build/dist/Server/Utils/CodeRepository/GitHub/GitHubWebhookEvents.js.map +1 -0
- package/build/dist/Server/Utils/CodeRepository/GitHub/GitHubWebhookHandler.js +661 -0
- package/build/dist/Server/Utils/CodeRepository/GitHub/GitHubWebhookHandler.js.map +1 -0
- package/build/dist/Server/Utils/Dashboard/PublicDashboardResourceListPolicy.js +113 -0
- package/build/dist/Server/Utils/Dashboard/PublicDashboardResourceListPolicy.js.map +1 -1
- package/build/dist/Server/Utils/DataSource/EgressGuard.js +99 -15
- package/build/dist/Server/Utils/DataSource/EgressGuard.js.map +1 -1
- package/build/dist/Server/Utils/EmailRollup/EmailRollupFlushRunner.js +2 -0
- package/build/dist/Server/Utils/EmailRollup/EmailRollupFlushRunner.js.map +1 -1
- package/build/dist/Server/Utils/EmailRollup/EmailRollupRenderer.js +18 -0
- package/build/dist/Server/Utils/EmailRollup/EmailRollupRenderer.js.map +1 -1
- package/build/dist/Server/Utils/EmailRollup/EmailRollupWriter.js +31 -2
- package/build/dist/Server/Utils/EmailRollup/EmailRollupWriter.js.map +1 -1
- package/build/dist/Server/Utils/IncomingCallPhoneNumber.js +9 -3
- package/build/dist/Server/Utils/IncomingCallPhoneNumber.js.map +1 -1
- package/build/dist/Server/Utils/LogRedaction.js +2 -1
- package/build/dist/Server/Utils/LogRedaction.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorAlert.js +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js +219 -4
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorMaintenanceSuppression.js +12 -4
- package/build/dist/Server/Utils/Monitor/MonitorMaintenanceSuppression.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorResourceContext.js +5 -3
- package/build/dist/Server/Utils/Monitor/MonitorResourceContext.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorStepResourceIdentity.js +22 -9
- package/build/dist/Server/Utils/Monitor/MonitorStepResourceIdentity.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorTemplateUtil.js +1 -0
- package/build/dist/Server/Utils/Monitor/MonitorTemplateUtil.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/SeriesResourceLabels.js +21 -0
- package/build/dist/Server/Utils/Monitor/SeriesResourceLabels.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/SeriesResourceLinker.js +21 -6
- package/build/dist/Server/Utils/Monitor/SeriesResourceLinker.js.map +1 -1
- package/build/dist/Server/Utils/Profiling.js +10 -1
- package/build/dist/Server/Utils/Profiling.js.map +1 -1
- package/build/dist/Server/Utils/ResourceFeed/ResourceFeedUtil.js +3 -3
- package/build/dist/Server/Utils/Rules/MonitorRuleCriteriaCache.js +30 -0
- package/build/dist/Server/Utils/Rules/MonitorRuleCriteriaCache.js.map +1 -0
- package/build/dist/Server/Utils/SecurityEvent/ConnectorErrorMessage.js +9 -9
- package/build/dist/Server/Utils/SecurityEvent/ConnectorErrorMessage.js.map +1 -1
- package/build/dist/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsClient.js +92 -71
- package/build/dist/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsClient.js.map +1 -1
- package/build/dist/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsPoller.js +428 -143
- package/build/dist/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsPoller.js.map +1 -1
- package/build/dist/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsRunExecutor.js +376 -0
- package/build/dist/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsRunExecutor.js.map +1 -0
- package/build/dist/Server/Utils/SessionReplay/SessionReplayReadService.js +344 -0
- package/build/dist/Server/Utils/SessionReplay/SessionReplayReadService.js.map +1 -1
- package/build/dist/Server/Utils/Telemetry/EntityRegistry.js +5 -0
- package/build/dist/Server/Utils/Telemetry/EntityRegistry.js.map +1 -1
- package/build/dist/Server/Utils/Telemetry/ResourceHeartbeat.js.map +1 -1
- package/build/dist/Server/Utils/Telemetry/TelemetryEntity.js +136 -1
- package/build/dist/Server/Utils/Telemetry/TelemetryEntity.js.map +1 -1
- package/build/dist/Server/Utils/Telemetry/VMwareSnapshotScan.js +933 -0
- package/build/dist/Server/Utils/Telemetry/VMwareSnapshotScan.js.map +1 -0
- package/build/dist/Server/Utils/Telemetry.js +1 -1
- package/build/dist/Server/Utils/Telemetry.js.map +1 -1
- package/build/dist/Server/Utils/VendorAssets.js +2 -0
- package/build/dist/Server/Utils/VendorAssets.js.map +1 -1
- package/build/dist/Types/AI/CodeFixTaskContext.js +40 -0
- package/build/dist/Types/AI/CodeFixTaskContext.js.map +1 -1
- package/build/dist/Types/AI/CodeFixTaskType.js +57 -0
- package/build/dist/Types/AI/CodeFixTaskType.js.map +1 -1
- package/build/dist/Types/Accounts/AccountsLanguage.js +1 -0
- package/build/dist/Types/Accounts/AccountsLanguage.js.map +1 -1
- package/build/dist/Types/AdminDashboard/AdminDashboardLanguage.js +1 -0
- package/build/dist/Types/AdminDashboard/AdminDashboardLanguage.js.map +1 -1
- package/build/dist/Types/Cloud/CloudPlatform.js +277 -0
- package/build/dist/Types/Cloud/CloudPlatform.js.map +1 -0
- package/build/dist/Types/CodeRepository/GitHubCommand.js +52 -0
- package/build/dist/Types/CodeRepository/GitHubCommand.js.map +1 -0
- package/build/dist/Types/Dashboard/DashboardComponentType.js +2 -0
- package/build/dist/Types/Dashboard/DashboardComponentType.js.map +1 -1
- package/build/dist/Types/Dashboard/DashboardComponents/ComponentArgument.js +1 -0
- package/build/dist/Types/Dashboard/DashboardComponents/ComponentArgument.js.map +1 -1
- package/build/dist/Types/Dashboard/DashboardComponents/DashboardVMwareHostListComponent.js +2 -0
- package/build/dist/Types/Dashboard/DashboardComponents/DashboardVMwareHostListComponent.js.map +1 -0
- package/build/dist/Types/Dashboard/DashboardComponents/DashboardVMwareVirtualMachineListComponent.js +2 -0
- package/build/dist/Types/Dashboard/DashboardComponents/DashboardVMwareVirtualMachineListComponent.js.map +1 -0
- package/build/dist/Types/Dashboard/DashboardLanguage.js +1 -0
- package/build/dist/Types/Dashboard/DashboardLanguage.js.map +1 -1
- package/build/dist/Types/Dashboard/DashboardTemplates.js +711 -0
- package/build/dist/Types/Dashboard/DashboardTemplates.js.map +1 -1
- package/build/dist/Types/Docs/DocsLanguage.js +1 -0
- package/build/dist/Types/Docs/DocsLanguage.js.map +1 -1
- package/build/dist/Types/Exception/EgressGuardException.js +59 -0
- package/build/dist/Types/Exception/EgressGuardException.js.map +1 -0
- package/build/dist/Types/Icon/IconProp.js +1 -0
- package/build/dist/Types/Icon/IconProp.js.map +1 -1
- package/build/dist/Types/Monitor/MonitorCriteriaInstance.js +1 -0
- package/build/dist/Types/Monitor/MonitorCriteriaInstance.js.map +1 -1
- package/build/dist/Types/Monitor/MonitorStep.js +61 -18
- package/build/dist/Types/Monitor/MonitorStep.js.map +1 -1
- package/build/dist/Types/Monitor/MonitorStepMetricViewConfigUtil.js +1 -0
- package/build/dist/Types/Monitor/MonitorStepMetricViewConfigUtil.js.map +1 -1
- package/build/dist/Types/Monitor/MonitorStepVMwareMonitor.js +71 -0
- package/build/dist/Types/Monitor/MonitorStepVMwareMonitor.js.map +1 -0
- package/build/dist/Types/Monitor/MonitorTemplateSyncField.js +211 -0
- package/build/dist/Types/Monitor/MonitorTemplateSyncField.js.map +1 -0
- package/build/dist/Types/Monitor/MonitorType.js +23 -0
- package/build/dist/Types/Monitor/MonitorType.js.map +1 -1
- package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationCatalog.js +28 -0
- package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationCatalog.js.map +1 -1
- package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationTypes.js +1 -0
- package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationTypes.js.map +1 -1
- package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationUtil.js +2 -0
- package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationUtil.js.map +1 -1
- package/build/dist/Types/Monitor/SeriesContext/SeriesDebugHints.js +120 -0
- package/build/dist/Types/Monitor/SeriesContext/SeriesDebugHints.js.map +1 -1
- package/build/dist/Types/Monitor/SeriesContext/SeriesLabelDisplay.js +60 -0
- package/build/dist/Types/Monitor/SeriesContext/SeriesLabelDisplay.js.map +1 -1
- package/build/dist/Types/Monitor/VMwareAlertTemplates.js +775 -0
- package/build/dist/Types/Monitor/VMwareAlertTemplates.js.map +1 -0
- package/build/dist/Types/Monitor/VMwareMetricCatalog.js +799 -0
- package/build/dist/Types/Monitor/VMwareMetricCatalog.js.map +1 -0
- package/build/dist/Types/OnCallDutyPolicy/ScheduleShiftUtil.js +25 -0
- package/build/dist/Types/OnCallDutyPolicy/ScheduleShiftUtil.js.map +1 -1
- package/build/dist/Types/OnCallDutyPolicy/UserOverrideUtil.js +5 -0
- package/build/dist/Types/OnCallDutyPolicy/UserOverrideUtil.js.map +1 -1
- package/build/dist/Types/Password.js +63 -5
- package/build/dist/Types/Password.js.map +1 -1
- package/build/dist/Types/Permission.js +234 -0
- package/build/dist/Types/Permission.js.map +1 -1
- package/build/dist/Types/Probe/RequestFailedDetails.js +7 -0
- package/build/dist/Types/Probe/RequestFailedDetails.js.map +1 -1
- package/build/dist/Types/Rules/RuleCriteria.js +18 -0
- package/build/dist/Types/Rules/RuleCriteria.js.map +1 -0
- package/build/dist/Types/Rules/RuleCriteriaFieldRegistry.js +426 -0
- package/build/dist/Types/Rules/RuleCriteriaFieldRegistry.js.map +1 -0
- package/build/dist/Types/Rum/SessionReplay.js +64 -0
- package/build/dist/Types/Rum/SessionReplay.js.map +1 -1
- package/build/dist/Types/Rum/SessionReplayApi.js.map +1 -1
- package/build/dist/Types/SecurityEvent/GoogleSecOpsDiagnostics.js +2 -0
- package/build/dist/Types/SecurityEvent/GoogleSecOpsDiagnostics.js.map +1 -0
- package/build/dist/Types/StatusPage/StatusPageLanguage.js +1 -0
- package/build/dist/Types/StatusPage/StatusPageLanguage.js.map +1 -1
- package/build/dist/Types/Telemetry/EntityType.js +21 -0
- package/build/dist/Types/Telemetry/EntityType.js.map +1 -1
- package/build/dist/Types/Telemetry/ServiceType.js +1 -0
- package/build/dist/Types/Telemetry/ServiceType.js.map +1 -1
- package/build/dist/UI/Components/Alerts/Alert.js +63 -41
- package/build/dist/UI/Components/Alerts/Alert.js.map +1 -1
- package/build/dist/UI/Components/Breadcrumbs/Breadcrumbs.js +2 -2
- package/build/dist/UI/Components/Breadcrumbs/Breadcrumbs.js.map +1 -1
- package/build/dist/UI/Components/Button/Button.js +3 -1
- package/build/dist/UI/Components/Button/Button.js.map +1 -1
- package/build/dist/UI/Components/Calendar/Calendar.js +24 -4
- package/build/dist/UI/Components/Calendar/Calendar.js.map +1 -1
- package/build/dist/UI/Components/Dropdown/Dropdown.js +1 -1
- package/build/dist/UI/Components/Dropdown/Dropdown.js.map +1 -1
- package/build/dist/UI/Components/Feed/Feed.js +4 -1
- package/build/dist/UI/Components/Feed/Feed.js.map +1 -1
- package/build/dist/UI/Components/Feed/useFeedItems.js +137 -0
- package/build/dist/UI/Components/Feed/useFeedItems.js.map +1 -0
- package/build/dist/UI/Components/Forms/BasicForm.js +66 -22
- package/build/dist/UI/Components/Forms/BasicForm.js.map +1 -1
- package/build/dist/UI/Components/Forms/Fields/ColorPicker.js +1 -1
- package/build/dist/UI/Components/Forms/Fields/ColorPicker.js.map +1 -1
- package/build/dist/UI/Components/Forms/Fields/FormField.js +10 -3
- package/build/dist/UI/Components/Forms/Fields/FormField.js.map +1 -1
- package/build/dist/UI/Components/Forms/ModelForm.js +154 -7
- package/build/dist/UI/Components/Forms/ModelForm.js.map +1 -1
- package/build/dist/UI/Components/Graphs/DayUptimeGraph.js +5 -6
- package/build/dist/UI/Components/Graphs/DayUptimeGraph.js.map +1 -1
- package/build/dist/UI/Components/Icon/Icon.js +17 -35
- package/build/dist/UI/Components/Icon/Icon.js.map +1 -1
- package/build/dist/UI/Components/Input/Input.js +37 -8
- package/build/dist/UI/Components/Input/Input.js.map +1 -1
- package/build/dist/UI/Components/LabelRule/ImportLabelRulesModal.js +228 -0
- package/build/dist/UI/Components/LabelRule/ImportLabelRulesModal.js.map +1 -0
- package/build/dist/UI/Components/LabelRule/LabelRuleTable.js +102 -0
- package/build/dist/UI/Components/LabelRule/LabelRuleTable.js.map +1 -0
- package/build/dist/UI/Components/ModelTable/BaseModelTable.js +15 -2
- package/build/dist/UI/Components/ModelTable/BaseModelTable.js.map +1 -1
- package/build/dist/UI/Components/ModelTable/ModelTable.js +25 -6
- package/build/dist/UI/Components/ModelTable/ModelTable.js.map +1 -1
- package/build/dist/UI/Components/MonitorGraphs/Uptime.js +14 -15
- package/build/dist/UI/Components/MonitorGraphs/Uptime.js.map +1 -1
- package/build/dist/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.js +2 -0
- package/build/dist/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.js.map +1 -1
- package/build/dist/UI/Components/Navbar/NavBar.js +1 -0
- package/build/dist/UI/Components/Navbar/NavBar.js.map +1 -1
- package/build/dist/UI/Components/RuleCriteria/RuleCriteriaBuilder.js +383 -0
- package/build/dist/UI/Components/RuleCriteria/RuleCriteriaBuilder.js.map +1 -0
- package/build/dist/UI/Components/RuleCriteria/RuleCriteriaModelForm.js +124 -0
- package/build/dist/UI/Components/RuleCriteria/RuleCriteriaModelForm.js.map +1 -0
- package/build/dist/UI/Components/RuleCriteria/RuleCriteriaModelTable.js +126 -0
- package/build/dist/UI/Components/RuleCriteria/RuleCriteriaModelTable.js.map +1 -0
- package/build/dist/UI/Components/RuleCriteria/RuleCriteriaSummary.js +63 -0
- package/build/dist/UI/Components/RuleCriteria/RuleCriteriaSummary.js.map +1 -0
- package/build/dist/UI/Components/Table/Table.js +1 -1
- package/build/dist/UI/Components/Table/Table.js.map +1 -1
- package/build/dist/UI/Components/Table/TableBody.js +4 -2
- package/build/dist/UI/Components/Table/TableBody.js.map +1 -1
- package/build/dist/UI/Components/Table/TableRow.js +3 -2
- package/build/dist/UI/Components/Table/TableRow.js.map +1 -1
- package/build/dist/UI/Components/Telemetry/TelemetryRetentionConfigForm.js +14 -2
- package/build/dist/UI/Components/Telemetry/TelemetryRetentionConfigForm.js.map +1 -1
- package/build/dist/UI/Components/Tooltip/Tooltip.js +33 -4
- package/build/dist/UI/Components/Tooltip/Tooltip.js.map +1 -1
- package/build/dist/UI/Utils/DashboardStackingLayers.js +44 -0
- package/build/dist/UI/Utils/DashboardStackingLayers.js.map +1 -0
- package/build/dist/UI/Utils/LabelRuleImportExport.js +271 -0
- package/build/dist/UI/Utils/LabelRuleImportExport.js.map +1 -0
- package/build/dist/UI/Utils/ModelAPI/ModelAPI.js +4 -4
- package/build/dist/UI/Utils/ModelAPI/ModelAPI.js.map +1 -1
- package/build/dist/UI/Utils/Navigation.js.map +1 -1
- package/build/dist/UI/Utils/TelemetryService.js +3 -2
- package/build/dist/UI/Utils/TelemetryService.js.map +1 -1
- package/build/dist/UI/Utils/UseDashboardGridDnd.js +2 -1
- package/build/dist/UI/Utils/UseDashboardGridDnd.js.map +1 -1
- package/build/dist/UI/Utils/UserEmailRegistrationStatus.js +21 -4
- package/build/dist/UI/Utils/UserEmailRegistrationStatus.js.map +1 -1
- package/build/dist/UI/Utils/WebAuthn.js +121 -0
- package/build/dist/UI/Utils/WebAuthn.js.map +1 -0
- package/build/dist/Utils/API.js +29 -0
- package/build/dist/Utils/API.js.map +1 -1
- package/build/dist/Utils/Dashboard/Components/DashboardVMwareHostListComponent.js +33 -0
- package/build/dist/Utils/Dashboard/Components/DashboardVMwareHostListComponent.js.map +1 -0
- package/build/dist/Utils/Dashboard/Components/DashboardVMwareResourceListShared.js +54 -0
- package/build/dist/Utils/Dashboard/Components/DashboardVMwareResourceListShared.js.map +1 -0
- package/build/dist/Utils/Dashboard/Components/DashboardVMwareVirtualMachineListComponent.js +60 -0
- package/build/dist/Utils/Dashboard/Components/DashboardVMwareVirtualMachineListComponent.js.map +1 -0
- package/build/dist/Utils/Dashboard/Components/Index.js +8 -0
- package/build/dist/Utils/Dashboard/Components/Index.js.map +1 -1
- package/build/dist/Utils/Faker.js +76 -6
- package/build/dist/Utils/Faker.js.map +1 -1
- package/build/dist/Utils/LabelRuleImportExport.js +510 -0
- package/build/dist/Utils/LabelRuleImportExport.js.map +1 -0
- package/build/dist/Utils/Monitor/MonitorTemplateSyncUtil.js +110 -0
- package/build/dist/Utils/Monitor/MonitorTemplateSyncUtil.js.map +1 -0
- package/build/dist/Utils/NetworkDiscovery/AutoImportRuleMatcher.js +81 -5
- package/build/dist/Utils/NetworkDiscovery/AutoImportRuleMatcher.js.map +1 -1
- package/build/dist/Utils/NetworkDiscovery/DiscoveryScanStatus.js +6 -0
- package/build/dist/Utils/NetworkDiscovery/DiscoveryScanStatus.js.map +1 -1
- package/build/dist/Utils/NetworkSite/CidrMatchUtil.js +77 -0
- package/build/dist/Utils/NetworkSite/CidrMatchUtil.js.map +1 -1
- package/build/dist/Utils/NetworkSite/TypeHierarchyUtil.js +109 -2
- package/build/dist/Utils/NetworkSite/TypeHierarchyUtil.js.map +1 -1
- package/build/dist/Utils/Rules/RuleCriteriaMatcher.js +526 -0
- package/build/dist/Utils/Rules/RuleCriteriaMatcher.js.map +1 -0
- package/build/dist/Utils/Rum/SessionIdentity.js +13 -1
- package/build/dist/Utils/Rum/SessionIdentity.js.map +1 -1
- package/build/dist/Utils/Slo/SloBurnRateRuleState.js +28 -15
- package/build/dist/Utils/Slo/SloBurnRateRuleState.js.map +1 -1
- package/build/dist/Utils/Telemetry/CloudInstanceIdentity.js +88 -0
- package/build/dist/Utils/Telemetry/CloudInstanceIdentity.js.map +1 -0
- package/build/dist/Utils/Telemetry/EntityKey.js +15 -0
- package/build/dist/Utils/Telemetry/EntityKey.js.map +1 -1
- package/build/dist/Utils/Telemetry/EntityRelationship.js +13 -0
- package/build/dist/Utils/Telemetry/EntityRelationship.js.map +1 -1
- package/build/dist/Utils/Telemetry/OriginAllowList.js +61 -0
- package/build/dist/Utils/Telemetry/OriginAllowList.js.map +1 -1
- package/package.json +20 -20
|
@@ -0,0 +1,1179 @@
|
|
|
1
|
+
import DashboardChartType from "../../../Types/Dashboard/Chart/ChartType";
|
|
2
|
+
import DashboardBaseComponent from "../../../Types/Dashboard/DashboardComponents/DashboardBaseComponent";
|
|
3
|
+
import {
|
|
4
|
+
SloWidgetDisplayType,
|
|
5
|
+
SloWidgetMetric,
|
|
6
|
+
} from "../../../Types/Dashboard/DashboardComponents/DashboardSloComponent";
|
|
7
|
+
import { DashboardValueTrendDirection } from "../../../Types/Dashboard/DashboardComponents/DashboardValueComponent";
|
|
8
|
+
import DashboardComponentType from "../../../Types/Dashboard/DashboardComponentType";
|
|
9
|
+
import DashboardVariable, {
|
|
10
|
+
DashboardVariableType,
|
|
11
|
+
} from "../../../Types/Dashboard/DashboardVariable";
|
|
12
|
+
import DashboardViewConfig from "../../../Types/Dashboard/DashboardViewConfig";
|
|
13
|
+
import {
|
|
14
|
+
DashboardTemplate,
|
|
15
|
+
DashboardTemplateCategory,
|
|
16
|
+
DashboardTemplates,
|
|
17
|
+
DashboardTemplateType,
|
|
18
|
+
getDashboardTemplatesByCategory,
|
|
19
|
+
getTemplateConfig,
|
|
20
|
+
} from "../../../Types/Dashboard/DashboardTemplates";
|
|
21
|
+
import IconProp from "../../../Types/Icon/IconProp";
|
|
22
|
+
import AlertMetricType from "../../../Types/Alerts/AlertMetricType";
|
|
23
|
+
import IncidentMetricType from "../../../Types/Incident/IncidentMetricType";
|
|
24
|
+
import { describe, expect, it } from "@jest/globals";
|
|
25
|
+
|
|
26
|
+
/*
|
|
27
|
+
* Editorial invariants for the SLO template specifically. The structural
|
|
28
|
+
* rules every template must satisfy (grid bounds, overlap, unique ids,
|
|
29
|
+
* aggregation spelling) live in DashboardTemplateInvariants — this file
|
|
30
|
+
* pins the things that make THIS template the SLO one: that it carries the
|
|
31
|
+
* Slo widget at all, which of the SLO's three numbers it shows and how,
|
|
32
|
+
* that it ships those widgets unconfigured, and that the metric widgets
|
|
33
|
+
* beside them cannot disagree with the Monitor variable.
|
|
34
|
+
*/
|
|
35
|
+
|
|
36
|
+
/*
|
|
37
|
+
* The persisted strings. Both enums are written verbatim into the saved
|
|
38
|
+
* dashboard's JSON config, so renaming a member's VALUE silently breaks
|
|
39
|
+
* every dashboard already created from this template. Pinned as literals
|
|
40
|
+
* rather than as enum members so that rename fails here instead of
|
|
41
|
+
* shipping.
|
|
42
|
+
*/
|
|
43
|
+
const SLI_METRIC: string = "Sli";
|
|
44
|
+
const ERROR_BUDGET_REMAINING_METRIC: string = "ErrorBudgetRemaining";
|
|
45
|
+
const BURN_RATE_METRIC: string = "BurnRate";
|
|
46
|
+
|
|
47
|
+
const TILE_DISPLAY: string = "Tile";
|
|
48
|
+
const CHART_DISPLAY: string = "Chart";
|
|
49
|
+
|
|
50
|
+
/*
|
|
51
|
+
* The two metric series this template is allowed to query. Both are emitted
|
|
52
|
+
* by MonitorMetricUtil for every probeable monitor, and both carry the bare
|
|
53
|
+
* `monitorName` attribute the Monitor variable binds to.
|
|
54
|
+
*/
|
|
55
|
+
const IS_ONLINE_METRIC: string = "oneuptime.monitor.online";
|
|
56
|
+
const RESPONSE_TIME_METRIC: string = "oneuptime.monitor.response.time";
|
|
57
|
+
|
|
58
|
+
/*
|
|
59
|
+
* Every incident and alert metric, taken from the enums so a member added
|
|
60
|
+
* later is covered without editing this list.
|
|
61
|
+
*
|
|
62
|
+
* Neither family survives this template's Monitor variable.
|
|
63
|
+
* IncidentService stamps its metrics with `monitorNames` (plural,
|
|
64
|
+
* comma-joined) rather than `monitorName`, so a pick would empty every
|
|
65
|
+
* incident tile while the uptime tiles beside them stayed populated.
|
|
66
|
+
* AlertService does write the singular key — but a burn-rate alert is
|
|
67
|
+
* declared with no monitor attached at all, so it carries no `monitorName`
|
|
68
|
+
* and a scoped alert tile would hide precisely the alerts an SLO dashboard
|
|
69
|
+
* exists for.
|
|
70
|
+
*/
|
|
71
|
+
const MONITOR_VARIABLE_HOSTILE_METRICS: Array<string> = [
|
|
72
|
+
...Object.values(IncidentMetricType),
|
|
73
|
+
...Object.values(AlertMetricType),
|
|
74
|
+
];
|
|
75
|
+
|
|
76
|
+
/*
|
|
77
|
+
* The bare attribute key MonitorMetricUtil.buildAttributes writes. It
|
|
78
|
+
* carries no `resource.` prefix, so a variable that guessed
|
|
79
|
+
* "resource.monitorName" would compile and offer an empty picker.
|
|
80
|
+
*/
|
|
81
|
+
const MONITOR_ATTRIBUTE: string = "monitorName";
|
|
82
|
+
|
|
83
|
+
const AVG_AGGREGATION: string = "Avg";
|
|
84
|
+
const MAX_AGGREGATION: string = "Max";
|
|
85
|
+
|
|
86
|
+
const GRID_WIDTH_IN_UNITS: number = 12;
|
|
87
|
+
|
|
88
|
+
// -- Helpers ---------------------------------------------------------------
|
|
89
|
+
|
|
90
|
+
type WidgetArguments = Record<string, unknown>;
|
|
91
|
+
|
|
92
|
+
function getConfig(): DashboardViewConfig {
|
|
93
|
+
const config: DashboardViewConfig | null = getTemplateConfig(
|
|
94
|
+
DashboardTemplateType.Slo,
|
|
95
|
+
);
|
|
96
|
+
expect(config).not.toBeNull();
|
|
97
|
+
return config as DashboardViewConfig;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
function argumentsOf(component: DashboardBaseComponent): WidgetArguments {
|
|
101
|
+
return (component.arguments as WidgetArguments | undefined) || {};
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
/*
|
|
105
|
+
* Every widget family stores its title under a different argument key, and
|
|
106
|
+
* titles are the only stable handle: ids are freshly generated on every
|
|
107
|
+
* call and array positions move whenever a row is inserted. The Slo widget
|
|
108
|
+
* uses `widgetTitle`, which no other family does.
|
|
109
|
+
*/
|
|
110
|
+
const TITLE_ARGUMENT_KEYS: Array<string> = [
|
|
111
|
+
"title",
|
|
112
|
+
"chartTitle",
|
|
113
|
+
"gaugeTitle",
|
|
114
|
+
"tableTitle",
|
|
115
|
+
"widgetTitle",
|
|
116
|
+
"text",
|
|
117
|
+
];
|
|
118
|
+
|
|
119
|
+
function titleOf(component: DashboardBaseComponent): string {
|
|
120
|
+
const args: WidgetArguments = argumentsOf(component);
|
|
121
|
+
|
|
122
|
+
for (const key of TITLE_ARGUMENT_KEYS) {
|
|
123
|
+
const value: unknown = args[key];
|
|
124
|
+
|
|
125
|
+
if (typeof value === "string") {
|
|
126
|
+
return value;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
return "";
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
// Fails loudly (rather than returning undefined) when the widget is gone.
|
|
134
|
+
function findWidget(
|
|
135
|
+
config: DashboardViewConfig,
|
|
136
|
+
title: string,
|
|
137
|
+
): DashboardBaseComponent {
|
|
138
|
+
const matches: Array<DashboardBaseComponent> = config.components.filter(
|
|
139
|
+
(component: DashboardBaseComponent): boolean => {
|
|
140
|
+
return titleOf(component) === title;
|
|
141
|
+
},
|
|
142
|
+
);
|
|
143
|
+
|
|
144
|
+
expect(matches).toHaveLength(1);
|
|
145
|
+
return matches[0] as DashboardBaseComponent;
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
function componentsOfType(
|
|
149
|
+
config: DashboardViewConfig,
|
|
150
|
+
componentType: DashboardComponentType,
|
|
151
|
+
): Array<DashboardBaseComponent> {
|
|
152
|
+
return config.components.filter(
|
|
153
|
+
(component: DashboardBaseComponent): boolean => {
|
|
154
|
+
return component.componentType === componentType;
|
|
155
|
+
},
|
|
156
|
+
);
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
function sloWidgets(
|
|
160
|
+
config: DashboardViewConfig,
|
|
161
|
+
): Array<DashboardBaseComponent> {
|
|
162
|
+
return componentsOfType(config, DashboardComponentType.Slo);
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
function filterDataOf(component: DashboardBaseComponent): WidgetArguments {
|
|
166
|
+
const queryConfig: WidgetArguments =
|
|
167
|
+
(argumentsOf(component)["metricQueryConfig"] as
|
|
168
|
+
| WidgetArguments
|
|
169
|
+
| undefined) || {};
|
|
170
|
+
const queryData: WidgetArguments =
|
|
171
|
+
(queryConfig["metricQueryData"] as WidgetArguments | undefined) || {};
|
|
172
|
+
|
|
173
|
+
return (queryData["filterData"] as WidgetArguments | undefined) || {};
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
function metricNameOf(component: DashboardBaseComponent): string | undefined {
|
|
177
|
+
const value: unknown = filterDataOf(component)["metricName"];
|
|
178
|
+
return typeof value === "string" ? value : undefined;
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
/*
|
|
182
|
+
* The aggregation is stored under the MISSPELLED key `aggegationType`.
|
|
183
|
+
* That misspelling is what the fetch layer reads, so it is the contract.
|
|
184
|
+
*/
|
|
185
|
+
function aggregationOf(component: DashboardBaseComponent): unknown {
|
|
186
|
+
return filterDataOf(component)["aggegationType"];
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
function lowestOccupiedEdge(config: DashboardViewConfig): number {
|
|
190
|
+
return Math.max(
|
|
191
|
+
...config.components.map((component: DashboardBaseComponent): number => {
|
|
192
|
+
return component.topInDashboardUnits + component.heightInDashboardUnits;
|
|
193
|
+
}),
|
|
194
|
+
);
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
// -- Tests -----------------------------------------------------------------
|
|
198
|
+
|
|
199
|
+
describe("SLO dashboard template", () => {
|
|
200
|
+
describe("catalog entry", () => {
|
|
201
|
+
it("is registered exactly once", () => {
|
|
202
|
+
const entries: Array<DashboardTemplate> = DashboardTemplates.filter(
|
|
203
|
+
(template: DashboardTemplate): boolean => {
|
|
204
|
+
return template.type === DashboardTemplateType.Slo;
|
|
205
|
+
},
|
|
206
|
+
);
|
|
207
|
+
|
|
208
|
+
expect(entries).toHaveLength(1);
|
|
209
|
+
});
|
|
210
|
+
|
|
211
|
+
it("is filed under Monitoring with the percent icon the SLO pages use", () => {
|
|
212
|
+
const entry: DashboardTemplate = DashboardTemplates.find(
|
|
213
|
+
(template: DashboardTemplate): boolean => {
|
|
214
|
+
return template.type === DashboardTemplateType.Slo;
|
|
215
|
+
},
|
|
216
|
+
) as DashboardTemplate;
|
|
217
|
+
|
|
218
|
+
expect(entry.name).toBe("SLO Dashboard");
|
|
219
|
+
expect(entry.category).toBe(DashboardTemplateCategory.Monitoring);
|
|
220
|
+
expect(entry.icon).toBe(IconProp.Percent);
|
|
221
|
+
expect(entry.description.trim().length).toBeGreaterThan(0);
|
|
222
|
+
});
|
|
223
|
+
|
|
224
|
+
it("is listed by getDashboardTemplatesByCategory for Monitoring", () => {
|
|
225
|
+
const types: Array<DashboardTemplateType> =
|
|
226
|
+
getDashboardTemplatesByCategory(
|
|
227
|
+
DashboardTemplateCategory.Monitoring,
|
|
228
|
+
).map((template: DashboardTemplate): DashboardTemplateType => {
|
|
229
|
+
return template.type;
|
|
230
|
+
});
|
|
231
|
+
|
|
232
|
+
expect(types).toContain(DashboardTemplateType.Slo);
|
|
233
|
+
});
|
|
234
|
+
|
|
235
|
+
it("resolves to a config rather than to null the way Blank does", () => {
|
|
236
|
+
expect(getTemplateConfig(DashboardTemplateType.Slo)).not.toBeNull();
|
|
237
|
+
});
|
|
238
|
+
|
|
239
|
+
/*
|
|
240
|
+
* The enum value is persisted on the Dashboard row that records which
|
|
241
|
+
* template it was created from, so it is a wire string, not a label.
|
|
242
|
+
*/
|
|
243
|
+
it("uses the persisted enum value 'Slo'", () => {
|
|
244
|
+
expect(DashboardTemplateType.Slo).toBe("Slo");
|
|
245
|
+
});
|
|
246
|
+
});
|
|
247
|
+
|
|
248
|
+
describe("the SLO widgets", () => {
|
|
249
|
+
/*
|
|
250
|
+
* This is the whole reason the template exists. The three SLO numbers
|
|
251
|
+
* live in Postgres and in SloHistory, not in the metric store, so no
|
|
252
|
+
* Chart / Value / Gauge widget can ever render them — only the
|
|
253
|
+
* dedicated Slo widget can.
|
|
254
|
+
*/
|
|
255
|
+
it("carries the Slo widget, which nothing else on a dashboard can stand in for", () => {
|
|
256
|
+
expect(sloWidgets(getConfig()).length).toBeGreaterThan(0);
|
|
257
|
+
});
|
|
258
|
+
|
|
259
|
+
/*
|
|
260
|
+
* Title, metric and display asserted TOGETHER, per widget. Checking
|
|
261
|
+
* only the SET of (metric, display) pairs would pass unchanged if the
|
|
262
|
+
* three titles were permuted across the three metrics — a dashboard
|
|
263
|
+
* whose "Burn Rate" tile reports the SLI, which is the single worst
|
|
264
|
+
* way this template can be wrong and the one a reader cannot see.
|
|
265
|
+
*/
|
|
266
|
+
it("labels each SLO widget with the number it actually reports", () => {
|
|
267
|
+
const config: DashboardViewConfig = getConfig();
|
|
268
|
+
|
|
269
|
+
const expected: Array<[string, string, string]> = [
|
|
270
|
+
["SLI", SLI_METRIC, TILE_DISPLAY],
|
|
271
|
+
["Error Budget Remaining", ERROR_BUDGET_REMAINING_METRIC, TILE_DISPLAY],
|
|
272
|
+
["Burn Rate", BURN_RATE_METRIC, TILE_DISPLAY],
|
|
273
|
+
["SLI Over Time", SLI_METRIC, CHART_DISPLAY],
|
|
274
|
+
[
|
|
275
|
+
"Error Budget Remaining Over Time",
|
|
276
|
+
ERROR_BUDGET_REMAINING_METRIC,
|
|
277
|
+
CHART_DISPLAY,
|
|
278
|
+
],
|
|
279
|
+
["Burn Rate Over Time", BURN_RATE_METRIC, CHART_DISPLAY],
|
|
280
|
+
];
|
|
281
|
+
|
|
282
|
+
for (const [title, metric, display] of expected) {
|
|
283
|
+
const args: WidgetArguments = argumentsOf(findWidget(config, title));
|
|
284
|
+
|
|
285
|
+
expect(`${title} -> ${String(args["sloMetric"])}`).toBe(
|
|
286
|
+
`${title} -> ${metric}`,
|
|
287
|
+
);
|
|
288
|
+
expect(`${title} -> ${String(args["displayType"])}`).toBe(
|
|
289
|
+
`${title} -> ${display}`,
|
|
290
|
+
);
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
// Nothing beyond that table is on the dashboard.
|
|
294
|
+
expect(sloWidgets(config)).toHaveLength(expected.length);
|
|
295
|
+
});
|
|
296
|
+
|
|
297
|
+
/*
|
|
298
|
+
* The titles themselves are the contract the table above is written
|
|
299
|
+
* against, so assert the set independently: a renamed widget must fail
|
|
300
|
+
* here rather than silently making the table above vacuous.
|
|
301
|
+
*/
|
|
302
|
+
it("ships exactly the six SLO widget titles the template documents", () => {
|
|
303
|
+
expect(sloWidgets(getConfig()).map(titleOf).sort()).toEqual(
|
|
304
|
+
[
|
|
305
|
+
"SLI",
|
|
306
|
+
"Error Budget Remaining",
|
|
307
|
+
"Burn Rate",
|
|
308
|
+
"SLI Over Time",
|
|
309
|
+
"Error Budget Remaining Over Time",
|
|
310
|
+
"Burn Rate Over Time",
|
|
311
|
+
].sort(),
|
|
312
|
+
);
|
|
313
|
+
});
|
|
314
|
+
|
|
315
|
+
/*
|
|
316
|
+
* Every member of SloWidgetMetric, not just the three we happen to
|
|
317
|
+
* have written above: a fourth number added to the widget should show
|
|
318
|
+
* up on the template that exists to report SLO numbers, and this fails
|
|
319
|
+
* when it does not.
|
|
320
|
+
*/
|
|
321
|
+
it("leaves none of the widget's supported metrics off the dashboard", () => {
|
|
322
|
+
const metrics: Set<string> = new Set<string>(
|
|
323
|
+
sloWidgets(getConfig()).map(
|
|
324
|
+
(component: DashboardBaseComponent): string => {
|
|
325
|
+
return String(argumentsOf(component)["sloMetric"]);
|
|
326
|
+
},
|
|
327
|
+
),
|
|
328
|
+
);
|
|
329
|
+
|
|
330
|
+
for (const metric of Object.values(SloWidgetMetric)) {
|
|
331
|
+
expect(`${metric} on the dashboard: ${metrics.has(metric)}`).toBe(
|
|
332
|
+
`${metric} on the dashboard: true`,
|
|
333
|
+
);
|
|
334
|
+
}
|
|
335
|
+
});
|
|
336
|
+
|
|
337
|
+
/*
|
|
338
|
+
* A template cannot know which of a project's SLOs a reader means, and
|
|
339
|
+
* an id baked into a shipped template would point at nothing in every
|
|
340
|
+
* project but the one it was copied from. The widget's own setup state
|
|
341
|
+
* ("Click to select an SLO") is the intended first render.
|
|
342
|
+
*/
|
|
343
|
+
it("ships every SLO widget unconfigured, with no SLO id baked in", () => {
|
|
344
|
+
const configured: Array<string> = [];
|
|
345
|
+
|
|
346
|
+
for (const component of sloWidgets(getConfig())) {
|
|
347
|
+
if (argumentsOf(component)["serviceLevelObjectiveId"] !== undefined) {
|
|
348
|
+
configured.push(titleOf(component));
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
|
|
352
|
+
expect(configured).toEqual([]);
|
|
353
|
+
});
|
|
354
|
+
|
|
355
|
+
/*
|
|
356
|
+
* Left untitled, the renderer names a widget "<SLO name> · <metric>",
|
|
357
|
+
* which is nicer once an SLO is picked but leaves all six widgets
|
|
358
|
+
* reading "SLO Widget" in a template the reader has just created and
|
|
359
|
+
* cannot yet tell apart.
|
|
360
|
+
*/
|
|
361
|
+
it("titles every SLO widget so an unconfigured dashboard still reads", () => {
|
|
362
|
+
const widgets: Array<DashboardBaseComponent> = sloWidgets(getConfig());
|
|
363
|
+
|
|
364
|
+
expect(widgets.length).toBeGreaterThan(0);
|
|
365
|
+
|
|
366
|
+
for (const component of widgets) {
|
|
367
|
+
const title: unknown = argumentsOf(component)["widgetTitle"];
|
|
368
|
+
|
|
369
|
+
expect(typeof title).toBe("string");
|
|
370
|
+
expect(String(title).trim().length).toBeGreaterThan(0);
|
|
371
|
+
}
|
|
372
|
+
});
|
|
373
|
+
|
|
374
|
+
it("stores only real SloWidgetMetric and SloWidgetDisplayType values", () => {
|
|
375
|
+
const validMetrics: Array<string> = Object.values(SloWidgetMetric);
|
|
376
|
+
const validDisplays: Array<string> = Object.values(SloWidgetDisplayType);
|
|
377
|
+
|
|
378
|
+
for (const component of sloWidgets(getConfig())) {
|
|
379
|
+
const args: WidgetArguments = argumentsOf(component);
|
|
380
|
+
const label: string = titleOf(component);
|
|
381
|
+
const metric: string = String(args["sloMetric"]);
|
|
382
|
+
const display: string = String(args["displayType"]);
|
|
383
|
+
|
|
384
|
+
expect(`${label} metric=${metric}`).toBe(
|
|
385
|
+
`${label} metric=${
|
|
386
|
+
validMetrics.includes(metric) ? metric : "<not a SloWidgetMetric>"
|
|
387
|
+
}`,
|
|
388
|
+
);
|
|
389
|
+
expect(`${label} display=${display}`).toBe(
|
|
390
|
+
`${label} display=${
|
|
391
|
+
validDisplays.includes(display)
|
|
392
|
+
? display
|
|
393
|
+
: "<not a SloWidgetDisplayType>"
|
|
394
|
+
}`,
|
|
395
|
+
);
|
|
396
|
+
}
|
|
397
|
+
});
|
|
398
|
+
|
|
399
|
+
/*
|
|
400
|
+
* The enum values are persisted verbatim into the dashboard's JSON
|
|
401
|
+
* config. Renaming one compiles everywhere and silently blanks every
|
|
402
|
+
* saved widget, so both directions are pinned.
|
|
403
|
+
*/
|
|
404
|
+
it("pins the persisted metric and display strings", () => {
|
|
405
|
+
expect(SloWidgetMetric.Sli).toBe(SLI_METRIC);
|
|
406
|
+
expect(SloWidgetMetric.ErrorBudgetRemaining).toBe(
|
|
407
|
+
ERROR_BUDGET_REMAINING_METRIC,
|
|
408
|
+
);
|
|
409
|
+
expect(SloWidgetMetric.BurnRate).toBe(BURN_RATE_METRIC);
|
|
410
|
+
expect(SloWidgetDisplayType.Tile).toBe(TILE_DISPLAY);
|
|
411
|
+
expect(SloWidgetDisplayType.Chart).toBe(CHART_DISPLAY);
|
|
412
|
+
expect(DashboardComponentType.Slo).toBe("Slo");
|
|
413
|
+
});
|
|
414
|
+
|
|
415
|
+
it("declares the same minimum footprint the widget's own default does", () => {
|
|
416
|
+
for (const component of sloWidgets(getConfig())) {
|
|
417
|
+
expect(component.minWidthInDashboardUnits).toBe(2);
|
|
418
|
+
expect(component.minHeightInDashboardUnits).toBe(2);
|
|
419
|
+
}
|
|
420
|
+
});
|
|
421
|
+
|
|
422
|
+
/*
|
|
423
|
+
* A tile renders a big number, a status pill and a subline; a chart
|
|
424
|
+
* renders a time series under a title row. Both need more than the
|
|
425
|
+
* 2x2 floor to be legible, and the charts need the extra width a
|
|
426
|
+
* series needs to be readable at all.
|
|
427
|
+
*/
|
|
428
|
+
it("gives the charts a wider tile than the single-number tiles", () => {
|
|
429
|
+
const config: DashboardViewConfig = getConfig();
|
|
430
|
+
const tiles: Array<DashboardBaseComponent> = sloWidgets(config).filter(
|
|
431
|
+
(component: DashboardBaseComponent): boolean => {
|
|
432
|
+
return argumentsOf(component)["displayType"] === TILE_DISPLAY;
|
|
433
|
+
},
|
|
434
|
+
);
|
|
435
|
+
const charts: Array<DashboardBaseComponent> = sloWidgets(config).filter(
|
|
436
|
+
(component: DashboardBaseComponent): boolean => {
|
|
437
|
+
return argumentsOf(component)["displayType"] === CHART_DISPLAY;
|
|
438
|
+
},
|
|
439
|
+
);
|
|
440
|
+
|
|
441
|
+
expect(tiles.length).toBeGreaterThan(0);
|
|
442
|
+
expect(charts.length).toBeGreaterThan(0);
|
|
443
|
+
|
|
444
|
+
for (const tile of tiles) {
|
|
445
|
+
expect(tile.widthInDashboardUnits).toBeGreaterThanOrEqual(3);
|
|
446
|
+
expect(tile.heightInDashboardUnits).toBeGreaterThanOrEqual(3);
|
|
447
|
+
}
|
|
448
|
+
|
|
449
|
+
for (const chart of charts) {
|
|
450
|
+
expect(chart.widthInDashboardUnits).toBeGreaterThanOrEqual(6);
|
|
451
|
+
expect(chart.heightInDashboardUnits).toBeGreaterThanOrEqual(4);
|
|
452
|
+
}
|
|
453
|
+
});
|
|
454
|
+
|
|
455
|
+
/*
|
|
456
|
+
* Dashboard variables never reach the Slo widget — it resolves one SLO
|
|
457
|
+
* from its stored id and has nothing to interpolate. A widget that
|
|
458
|
+
* carried a metric query would be read by the metric fetch layer and
|
|
459
|
+
* scoped by the Monitor variable, which is not what it reports on.
|
|
460
|
+
*/
|
|
461
|
+
it("carries no metric query on any SLO widget", () => {
|
|
462
|
+
for (const component of sloWidgets(getConfig())) {
|
|
463
|
+
expect(argumentsOf(component)["metricQueryConfig"]).toBeUndefined();
|
|
464
|
+
expect(metricNameOf(component)).toBeUndefined();
|
|
465
|
+
}
|
|
466
|
+
});
|
|
467
|
+
|
|
468
|
+
it("reads the objective before the trend: tiles sit above the charts", () => {
|
|
469
|
+
const config: DashboardViewConfig = getConfig();
|
|
470
|
+
const lowestTileEdge: number = Math.max(
|
|
471
|
+
...sloWidgets(config)
|
|
472
|
+
.filter((component: DashboardBaseComponent): boolean => {
|
|
473
|
+
return argumentsOf(component)["displayType"] === TILE_DISPLAY;
|
|
474
|
+
})
|
|
475
|
+
.map((component: DashboardBaseComponent): number => {
|
|
476
|
+
return (
|
|
477
|
+
component.topInDashboardUnits + component.heightInDashboardUnits
|
|
478
|
+
);
|
|
479
|
+
}),
|
|
480
|
+
);
|
|
481
|
+
const highestChartTop: number = Math.min(
|
|
482
|
+
...sloWidgets(config)
|
|
483
|
+
.filter((component: DashboardBaseComponent): boolean => {
|
|
484
|
+
return argumentsOf(component)["displayType"] === CHART_DISPLAY;
|
|
485
|
+
})
|
|
486
|
+
.map((component: DashboardBaseComponent): number => {
|
|
487
|
+
return component.topInDashboardUnits;
|
|
488
|
+
}),
|
|
489
|
+
);
|
|
490
|
+
|
|
491
|
+
expect(highestChartTop).toBeGreaterThanOrEqual(lowestTileEdge);
|
|
492
|
+
});
|
|
493
|
+
});
|
|
494
|
+
|
|
495
|
+
describe("metric queries", () => {
|
|
496
|
+
it("queries only the two monitor series that carry monitorName", () => {
|
|
497
|
+
const config: DashboardViewConfig = getConfig();
|
|
498
|
+
|
|
499
|
+
expect(metricNameOf(findWidget(config, "Monitor Uptime (avg)"))).toBe(
|
|
500
|
+
IS_ONLINE_METRIC,
|
|
501
|
+
);
|
|
502
|
+
expect(metricNameOf(findWidget(config, "Avg Response Time"))).toBe(
|
|
503
|
+
RESPONSE_TIME_METRIC,
|
|
504
|
+
);
|
|
505
|
+
expect(metricNameOf(findWidget(config, "Worst Response Time"))).toBe(
|
|
506
|
+
RESPONSE_TIME_METRIC,
|
|
507
|
+
);
|
|
508
|
+
expect(metricNameOf(findWidget(config, "Monitor Uptime Over Time"))).toBe(
|
|
509
|
+
IS_ONLINE_METRIC,
|
|
510
|
+
);
|
|
511
|
+
expect(metricNameOf(findWidget(config, "Response Time Over Time"))).toBe(
|
|
512
|
+
RESPONSE_TIME_METRIC,
|
|
513
|
+
);
|
|
514
|
+
|
|
515
|
+
const metrics: Array<string> = [];
|
|
516
|
+
|
|
517
|
+
for (const component of config.components) {
|
|
518
|
+
const metric: string | undefined = metricNameOf(component);
|
|
519
|
+
|
|
520
|
+
if (metric) {
|
|
521
|
+
metrics.push(metric);
|
|
522
|
+
}
|
|
523
|
+
}
|
|
524
|
+
|
|
525
|
+
expect(metrics.length).toBeGreaterThan(0);
|
|
526
|
+
expect(Array.from(new Set(metrics)).sort()).toEqual(
|
|
527
|
+
[IS_ONLINE_METRIC, RESPONSE_TIME_METRIC].sort(),
|
|
528
|
+
);
|
|
529
|
+
});
|
|
530
|
+
|
|
531
|
+
/*
|
|
532
|
+
* THE invariant of this template's second half, and it holds for the
|
|
533
|
+
* two families for DIFFERENT reasons.
|
|
534
|
+
*
|
|
535
|
+
* IncidentService stamps its metrics with `monitorNames` (plural,
|
|
536
|
+
* comma-joined) and never the singular key, so picking a monitor in
|
|
537
|
+
* this template's variable empties every incident tile while the
|
|
538
|
+
* uptime tile beside it stays populated — two widgets side by side
|
|
539
|
+
* disagreeing about what is selected.
|
|
540
|
+
*
|
|
541
|
+
* AlertService DOES write the singular `monitorName`, so alert metrics
|
|
542
|
+
* scope correctly for any monitor-attached alert. They are excluded
|
|
543
|
+
* anyway: createBurnRateAlert never sets a monitor, so the burn-rate
|
|
544
|
+
* alerts this dashboard exists for carry no `monitorName` and would be
|
|
545
|
+
* the rows a scoped tile dropped.
|
|
546
|
+
*
|
|
547
|
+
* The incident and alert LISTS read Postgres and are immune to
|
|
548
|
+
* telemetry variables, which is why they are the form those signals
|
|
549
|
+
* take here.
|
|
550
|
+
*/
|
|
551
|
+
it("carries no incident or alert metric, which the Monitor variable would empty", () => {
|
|
552
|
+
const offenders: Array<string> = [];
|
|
553
|
+
|
|
554
|
+
for (const component of getConfig().components) {
|
|
555
|
+
const metric: string | undefined = metricNameOf(component);
|
|
556
|
+
|
|
557
|
+
if (metric && MONITOR_VARIABLE_HOSTILE_METRICS.includes(metric)) {
|
|
558
|
+
offenders.push(`${titleOf(component)} -> ${metric}`);
|
|
559
|
+
}
|
|
560
|
+
}
|
|
561
|
+
|
|
562
|
+
expect(offenders).toEqual([]);
|
|
563
|
+
});
|
|
564
|
+
|
|
565
|
+
it("picks the aggregation that makes each number mean what its title says", () => {
|
|
566
|
+
const config: DashboardViewConfig = getConfig();
|
|
567
|
+
|
|
568
|
+
for (const title of [
|
|
569
|
+
"Monitor Uptime (avg)",
|
|
570
|
+
"Avg Response Time",
|
|
571
|
+
"Monitor Uptime Over Time",
|
|
572
|
+
"Response Time Over Time",
|
|
573
|
+
]) {
|
|
574
|
+
expect(aggregationOf(findWidget(config, title))).toBe(AVG_AGGREGATION);
|
|
575
|
+
}
|
|
576
|
+
|
|
577
|
+
expect(aggregationOf(findWidget(config, "Worst Response Time"))).toBe(
|
|
578
|
+
MAX_AGGREGATION,
|
|
579
|
+
);
|
|
580
|
+
});
|
|
581
|
+
|
|
582
|
+
/*
|
|
583
|
+
* IsOnline is emitted as 0/1 with unit "", so Avg is a RATIO in [0, 1]
|
|
584
|
+
* and not a percent. A widget labelled with a "%" would print "0.99%"
|
|
585
|
+
* for a service that was up all window.
|
|
586
|
+
*/
|
|
587
|
+
it("labels the uptime widgets as an average rather than as a percentage", () => {
|
|
588
|
+
const config: DashboardViewConfig = getConfig();
|
|
589
|
+
|
|
590
|
+
/*
|
|
591
|
+
* Read the titles out of the CONFIG. Looping over a local array of
|
|
592
|
+
* string literals and asserting those literals lack a "%" is a
|
|
593
|
+
* tautology: it tests the test.
|
|
594
|
+
*/
|
|
595
|
+
const uptimeWidgetTitles: Array<string> = config.components
|
|
596
|
+
.filter((component: DashboardBaseComponent): boolean => {
|
|
597
|
+
return metricNameOf(component) === IS_ONLINE_METRIC;
|
|
598
|
+
})
|
|
599
|
+
.map(titleOf);
|
|
600
|
+
|
|
601
|
+
expect(uptimeWidgetTitles.length).toBeGreaterThan(0);
|
|
602
|
+
|
|
603
|
+
for (const title of uptimeWidgetTitles) {
|
|
604
|
+
expect(`${title} contains %: ${title.includes("%")}`).toBe(
|
|
605
|
+
`${title} contains %: false`,
|
|
606
|
+
);
|
|
607
|
+
// "(avg)" or "Over Time" — either way it must not read as a percent.
|
|
608
|
+
expect(title.trim().length).toBeGreaterThan(0);
|
|
609
|
+
}
|
|
610
|
+
|
|
611
|
+
// The single-number tile has to say it is an average outright.
|
|
612
|
+
expect(titleOf(findWidget(config, "Monitor Uptime (avg)"))).toContain(
|
|
613
|
+
"(avg)",
|
|
614
|
+
);
|
|
615
|
+
});
|
|
616
|
+
|
|
617
|
+
/*
|
|
618
|
+
* Nothing anywhere on the dashboard may promise a percentage, because
|
|
619
|
+
* the only percentage-valued numbers here (SLI, error budget) are
|
|
620
|
+
* rendered by the Slo widget, which formats its own units. A metric
|
|
621
|
+
* widget titled with a "%" would be claiming a unit its series does
|
|
622
|
+
* not carry.
|
|
623
|
+
*/
|
|
624
|
+
it("puts no percent sign in any metric widget's title", () => {
|
|
625
|
+
const offenders: Array<string> = [];
|
|
626
|
+
|
|
627
|
+
for (const component of getConfig().components) {
|
|
628
|
+
if (metricNameOf(component) && titleOf(component).includes("%")) {
|
|
629
|
+
offenders.push(titleOf(component));
|
|
630
|
+
}
|
|
631
|
+
}
|
|
632
|
+
|
|
633
|
+
expect(offenders).toEqual([]);
|
|
634
|
+
});
|
|
635
|
+
|
|
636
|
+
it("marks each tile so its trend arrow is colored the right way", () => {
|
|
637
|
+
const config: DashboardViewConfig = getConfig();
|
|
638
|
+
|
|
639
|
+
expect(
|
|
640
|
+
argumentsOf(findWidget(config, "Monitor Uptime (avg)"))[
|
|
641
|
+
"trendDirection"
|
|
642
|
+
],
|
|
643
|
+
).toBe(DashboardValueTrendDirection.HigherIsBetter);
|
|
644
|
+
|
|
645
|
+
for (const title of ["Avg Response Time", "Worst Response Time"]) {
|
|
646
|
+
expect(argumentsOf(findWidget(config, title))["trendDirection"]).toBe(
|
|
647
|
+
DashboardValueTrendDirection.HigherIsWorse,
|
|
648
|
+
);
|
|
649
|
+
}
|
|
650
|
+
});
|
|
651
|
+
|
|
652
|
+
it("stores its aggregation under the misspelled key the fetch layer reads", () => {
|
|
653
|
+
const config: DashboardViewConfig = getConfig();
|
|
654
|
+
let metricWidgets: number = 0;
|
|
655
|
+
|
|
656
|
+
for (const component of config.components) {
|
|
657
|
+
if (!metricNameOf(component)) {
|
|
658
|
+
continue;
|
|
659
|
+
}
|
|
660
|
+
|
|
661
|
+
metricWidgets++;
|
|
662
|
+
|
|
663
|
+
expect(typeof aggregationOf(component)).toBe("string");
|
|
664
|
+
expect(
|
|
665
|
+
Object.prototype.hasOwnProperty.call(
|
|
666
|
+
filterDataOf(component),
|
|
667
|
+
"aggregationType",
|
|
668
|
+
),
|
|
669
|
+
).toBe(false);
|
|
670
|
+
}
|
|
671
|
+
|
|
672
|
+
expect(metricWidgets).toBeGreaterThan(0);
|
|
673
|
+
});
|
|
674
|
+
|
|
675
|
+
/*
|
|
676
|
+
* A dashboard that prints the same figure under two names is a smaller
|
|
677
|
+
* dashboard pretending to be a bigger one. A number paired with its
|
|
678
|
+
* own trend chart is fine — that is a different widget family, not a
|
|
679
|
+
* repeat — so the check is on (family, metric, aggregation).
|
|
680
|
+
*/
|
|
681
|
+
it("never prints the same metric and aggregation twice in the same widget family", () => {
|
|
682
|
+
const seen: Map<string, string> = new Map<string, string>();
|
|
683
|
+
const duplicates: Array<string> = [];
|
|
684
|
+
|
|
685
|
+
for (const component of getConfig().components) {
|
|
686
|
+
const metric: string | undefined = metricNameOf(component);
|
|
687
|
+
|
|
688
|
+
if (!metric) {
|
|
689
|
+
continue;
|
|
690
|
+
}
|
|
691
|
+
|
|
692
|
+
const key: string = `${component.componentType}|${metric}|${String(
|
|
693
|
+
aggregationOf(component),
|
|
694
|
+
)}`;
|
|
695
|
+
const existing: string | undefined = seen.get(key);
|
|
696
|
+
|
|
697
|
+
if (existing) {
|
|
698
|
+
duplicates.push(
|
|
699
|
+
`${key} on "${existing}" and "${titleOf(component)}"`,
|
|
700
|
+
);
|
|
701
|
+
}
|
|
702
|
+
|
|
703
|
+
seen.set(key, titleOf(component));
|
|
704
|
+
}
|
|
705
|
+
|
|
706
|
+
expect(duplicates).toEqual([]);
|
|
707
|
+
});
|
|
708
|
+
|
|
709
|
+
it("gives every widget on the dashboard a distinct, non-empty title", () => {
|
|
710
|
+
const titles: Array<string> = getConfig().components.map(titleOf);
|
|
711
|
+
|
|
712
|
+
expect(
|
|
713
|
+
titles.every((title: string): boolean => {
|
|
714
|
+
return title.trim().length > 0;
|
|
715
|
+
}),
|
|
716
|
+
).toBe(true);
|
|
717
|
+
expect(new Set(titles).size).toBe(titles.length);
|
|
718
|
+
});
|
|
719
|
+
});
|
|
720
|
+
|
|
721
|
+
describe("the entity lists", () => {
|
|
722
|
+
/*
|
|
723
|
+
* An error budget is spent by downtime, and downtime is what incidents
|
|
724
|
+
* and alerts record. These three read Postgres rather than the metric
|
|
725
|
+
* store, so unlike a metric tile they stay correct whatever the
|
|
726
|
+
* Monitor variable is set to.
|
|
727
|
+
*/
|
|
728
|
+
it("puts exactly one monitor, incident and alert list on the dashboard", () => {
|
|
729
|
+
const config: DashboardViewConfig = getConfig();
|
|
730
|
+
|
|
731
|
+
expect(
|
|
732
|
+
componentsOfType(config, DashboardComponentType.MonitorList),
|
|
733
|
+
).toHaveLength(1);
|
|
734
|
+
expect(
|
|
735
|
+
componentsOfType(config, DashboardComponentType.IncidentList),
|
|
736
|
+
).toHaveLength(1);
|
|
737
|
+
expect(
|
|
738
|
+
componentsOfType(config, DashboardComponentType.AlertList),
|
|
739
|
+
).toHaveLength(1);
|
|
740
|
+
});
|
|
741
|
+
|
|
742
|
+
it("renders each list as a list and caps its rows at a positive whole number", () => {
|
|
743
|
+
const config: DashboardViewConfig = getConfig();
|
|
744
|
+
|
|
745
|
+
for (const title of [
|
|
746
|
+
"All Monitors",
|
|
747
|
+
"Latest Incidents",
|
|
748
|
+
"Latest Alerts",
|
|
749
|
+
]) {
|
|
750
|
+
const args: WidgetArguments = argumentsOf(findWidget(config, title));
|
|
751
|
+
|
|
752
|
+
expect(args["viewMode"]).toBe("list");
|
|
753
|
+
expect(typeof args["maxRows"]).toBe("number");
|
|
754
|
+
expect(Number.isInteger(args["maxRows"] as number)).toBe(true);
|
|
755
|
+
expect(args["maxRows"] as number).toBeGreaterThan(0);
|
|
756
|
+
}
|
|
757
|
+
});
|
|
758
|
+
|
|
759
|
+
/*
|
|
760
|
+
* Both lists sort newest first, so an unfiltered list is the record of
|
|
761
|
+
* what the budget was spent on — open and recently resolved alike.
|
|
762
|
+
* Pre-filtering to "unresolved" would hide every incident that has
|
|
763
|
+
* already been closed, which is most of the budget.
|
|
764
|
+
*/
|
|
765
|
+
it("does not pre-filter the incident or alert list to a lifecycle state", () => {
|
|
766
|
+
const config: DashboardViewConfig = getConfig();
|
|
767
|
+
|
|
768
|
+
for (const title of ["Latest Incidents", "Latest Alerts"]) {
|
|
769
|
+
expect(
|
|
770
|
+
argumentsOf(findWidget(config, title))["stateFilter"],
|
|
771
|
+
).toBeUndefined();
|
|
772
|
+
}
|
|
773
|
+
});
|
|
774
|
+
|
|
775
|
+
/*
|
|
776
|
+
* Which monitors back an objective is a per-project question, so the
|
|
777
|
+
* list opens on all of them; the reader narrows it with the widget's
|
|
778
|
+
* own Labels filter.
|
|
779
|
+
*/
|
|
780
|
+
it("does not pin the monitor list to a monitor type or status", () => {
|
|
781
|
+
const args: WidgetArguments = argumentsOf(
|
|
782
|
+
findWidget(getConfig(), "All Monitors"),
|
|
783
|
+
);
|
|
784
|
+
|
|
785
|
+
expect(args["monitorTypes"]).toBeUndefined();
|
|
786
|
+
expect(args["statusFilter"]).toBeUndefined();
|
|
787
|
+
});
|
|
788
|
+
});
|
|
789
|
+
|
|
790
|
+
describe("variables", () => {
|
|
791
|
+
/*
|
|
792
|
+
* The uptime and response-time widgets query series every probeable
|
|
793
|
+
* monitor in the project emits. Unscoped they describe the project,
|
|
794
|
+
* not the objective — this variable is what scopes them.
|
|
795
|
+
*/
|
|
796
|
+
it("ships one multi-select Monitor picker", () => {
|
|
797
|
+
const variables: Array<DashboardVariable> = getConfig().variables || [];
|
|
798
|
+
|
|
799
|
+
expect(
|
|
800
|
+
variables.map((variable: DashboardVariable): string => {
|
|
801
|
+
return variable.name;
|
|
802
|
+
}),
|
|
803
|
+
).toEqual(["monitor"]);
|
|
804
|
+
|
|
805
|
+
const variable: DashboardVariable = variables[0] as DashboardVariable;
|
|
806
|
+
|
|
807
|
+
expect(variable.type).toBe(DashboardVariableType.TelemetryAttribute);
|
|
808
|
+
// An objective is normally backed by several monitors, not one.
|
|
809
|
+
expect(variable.isMultiSelect).toBe(true);
|
|
810
|
+
expect((variable.label || "").trim().length).toBeGreaterThan(0);
|
|
811
|
+
});
|
|
812
|
+
|
|
813
|
+
/*
|
|
814
|
+
* Monitor metrics carry a BARE attribute key — see
|
|
815
|
+
* MonitorMetricUtil.buildAttributes. A variable bound to
|
|
816
|
+
* `resource.monitorName` would compile and offer an empty picker, and
|
|
817
|
+
* one bound to the incident metrics' `monitorNames` would filter the
|
|
818
|
+
* uptime widgets against a key they do not carry.
|
|
819
|
+
*/
|
|
820
|
+
it("binds to the bare monitorName key, not a prefixed or plural one", () => {
|
|
821
|
+
const variable: DashboardVariable = (getConfig().variables ||
|
|
822
|
+
[])[0] as DashboardVariable;
|
|
823
|
+
|
|
824
|
+
expect(variable.attributeKey).toBe(MONITOR_ATTRIBUTE);
|
|
825
|
+
expect(variable.attributeKey).not.toBe("monitorNames");
|
|
826
|
+
expect(variable.attributeKey).not.toBe("resource.monitorName");
|
|
827
|
+
});
|
|
828
|
+
|
|
829
|
+
/*
|
|
830
|
+
* A multi-select resolves from its picks alone and starts with none,
|
|
831
|
+
* so it opens on "All" and a default would never apply — the widgets
|
|
832
|
+
* would look scoped behind a control reading "unfiltered".
|
|
833
|
+
*/
|
|
834
|
+
it("leaves the multi-select variable without a default", () => {
|
|
835
|
+
const variable: DashboardVariable = (getConfig().variables ||
|
|
836
|
+
[])[0] as DashboardVariable;
|
|
837
|
+
|
|
838
|
+
expect(variable.defaultValue ?? "").toBe("");
|
|
839
|
+
});
|
|
840
|
+
});
|
|
841
|
+
|
|
842
|
+
describe("layout", () => {
|
|
843
|
+
it("lays every widget out inside the 12-unit grid", () => {
|
|
844
|
+
for (const component of getConfig().components) {
|
|
845
|
+
expect(component.leftInDashboardUnits).toBeGreaterThanOrEqual(0);
|
|
846
|
+
expect(component.topInDashboardUnits).toBeGreaterThanOrEqual(0);
|
|
847
|
+
expect(component.widthInDashboardUnits).toBeGreaterThan(0);
|
|
848
|
+
expect(component.heightInDashboardUnits).toBeGreaterThan(0);
|
|
849
|
+
expect(
|
|
850
|
+
component.leftInDashboardUnits + component.widthInDashboardUnits,
|
|
851
|
+
).toBeLessThanOrEqual(GRID_WIDTH_IN_UNITS);
|
|
852
|
+
}
|
|
853
|
+
});
|
|
854
|
+
|
|
855
|
+
it("places no two widgets on the same grid cell", () => {
|
|
856
|
+
const occupied: Map<string, string> = new Map<string, string>();
|
|
857
|
+
const collisions: Array<string> = [];
|
|
858
|
+
|
|
859
|
+
for (const component of getConfig().components) {
|
|
860
|
+
for (
|
|
861
|
+
let row: number = component.topInDashboardUnits;
|
|
862
|
+
row <
|
|
863
|
+
component.topInDashboardUnits + component.heightInDashboardUnits;
|
|
864
|
+
row++
|
|
865
|
+
) {
|
|
866
|
+
for (
|
|
867
|
+
let column: number = component.leftInDashboardUnits;
|
|
868
|
+
column <
|
|
869
|
+
component.leftInDashboardUnits + component.widthInDashboardUnits;
|
|
870
|
+
column++
|
|
871
|
+
) {
|
|
872
|
+
const cell: string = `${row}:${column}`;
|
|
873
|
+
const existing: string | undefined = occupied.get(cell);
|
|
874
|
+
|
|
875
|
+
if (existing) {
|
|
876
|
+
collisions.push(
|
|
877
|
+
`cell ${cell} shared by "${existing}" and "${titleOf(component)}"`,
|
|
878
|
+
);
|
|
879
|
+
}
|
|
880
|
+
|
|
881
|
+
occupied.set(cell, titleOf(component));
|
|
882
|
+
}
|
|
883
|
+
}
|
|
884
|
+
}
|
|
885
|
+
|
|
886
|
+
expect(collisions).toEqual([]);
|
|
887
|
+
});
|
|
888
|
+
|
|
889
|
+
/*
|
|
890
|
+
* A band of empty rows in the middle of a template reads as a widget
|
|
891
|
+
* that failed to render rather than as whitespace.
|
|
892
|
+
*/
|
|
893
|
+
it("leaves no empty row between the title and the last widget", () => {
|
|
894
|
+
const config: DashboardViewConfig = getConfig();
|
|
895
|
+
const occupiedRows: Set<number> = new Set<number>();
|
|
896
|
+
|
|
897
|
+
for (const component of config.components) {
|
|
898
|
+
for (
|
|
899
|
+
let row: number = component.topInDashboardUnits;
|
|
900
|
+
row <
|
|
901
|
+
component.topInDashboardUnits + component.heightInDashboardUnits;
|
|
902
|
+
row++
|
|
903
|
+
) {
|
|
904
|
+
occupiedRows.add(row);
|
|
905
|
+
}
|
|
906
|
+
}
|
|
907
|
+
|
|
908
|
+
const emptyRows: Array<number> = [];
|
|
909
|
+
|
|
910
|
+
for (let row: number = 0; row < lowestOccupiedEdge(config); row++) {
|
|
911
|
+
if (!occupiedRows.has(row)) {
|
|
912
|
+
emptyRows.push(row);
|
|
913
|
+
}
|
|
914
|
+
}
|
|
915
|
+
|
|
916
|
+
expect(emptyRows).toEqual([]);
|
|
917
|
+
});
|
|
918
|
+
|
|
919
|
+
it("is tall enough to contain everything on it", () => {
|
|
920
|
+
const config: DashboardViewConfig = getConfig();
|
|
921
|
+
|
|
922
|
+
expect(config.heightInDashboardUnits).toBeGreaterThanOrEqual(
|
|
923
|
+
lowestOccupiedEdge(config),
|
|
924
|
+
);
|
|
925
|
+
});
|
|
926
|
+
|
|
927
|
+
it("renders no widget smaller than the minimum it declares", () => {
|
|
928
|
+
for (const component of getConfig().components) {
|
|
929
|
+
expect(component.widthInDashboardUnits).toBeGreaterThanOrEqual(
|
|
930
|
+
component.minWidthInDashboardUnits,
|
|
931
|
+
);
|
|
932
|
+
expect(component.heightInDashboardUnits).toBeGreaterThanOrEqual(
|
|
933
|
+
component.minHeightInDashboardUnits,
|
|
934
|
+
);
|
|
935
|
+
}
|
|
936
|
+
});
|
|
937
|
+
|
|
938
|
+
it("opens with a bold title row across the full width", () => {
|
|
939
|
+
const title: DashboardBaseComponent = findWidget(
|
|
940
|
+
getConfig(),
|
|
941
|
+
"SLO Dashboard",
|
|
942
|
+
);
|
|
943
|
+
|
|
944
|
+
expect(title.componentType).toBe(DashboardComponentType.Text);
|
|
945
|
+
expect(title.topInDashboardUnits).toBe(0);
|
|
946
|
+
expect(title.leftInDashboardUnits).toBe(0);
|
|
947
|
+
expect(title.widthInDashboardUnits).toBe(GRID_WIDTH_IN_UNITS);
|
|
948
|
+
expect(argumentsOf(title)["isBold"]).toBe(true);
|
|
949
|
+
});
|
|
950
|
+
|
|
951
|
+
/*
|
|
952
|
+
* Rows are asserted, not just boldness: a header that does not sit
|
|
953
|
+
* immediately above the band it names labels the wrong widgets, and
|
|
954
|
+
* checking only componentType/width/isBold cannot see that.
|
|
955
|
+
*/
|
|
956
|
+
it("labels each band with its own bold section header, on the right row", () => {
|
|
957
|
+
const config: DashboardViewConfig = getConfig();
|
|
958
|
+
|
|
959
|
+
const headers: Array<[string, number]> = [
|
|
960
|
+
["Objective Health", 2],
|
|
961
|
+
["Error Budget Trends", 6],
|
|
962
|
+
["Monitor Health", 15],
|
|
963
|
+
];
|
|
964
|
+
|
|
965
|
+
for (const [heading, expectedTop] of headers) {
|
|
966
|
+
const header: DashboardBaseComponent = findWidget(config, heading);
|
|
967
|
+
|
|
968
|
+
expect(header.componentType).toBe(DashboardComponentType.Text);
|
|
969
|
+
expect(header.widthInDashboardUnits).toBe(GRID_WIDTH_IN_UNITS);
|
|
970
|
+
expect(header.leftInDashboardUnits).toBe(0);
|
|
971
|
+
expect(header.heightInDashboardUnits).toBe(1);
|
|
972
|
+
expect(argumentsOf(header)["isBold"]).toBe(true);
|
|
973
|
+
expect(`${heading} top=${header.topInDashboardUnits}`).toBe(
|
|
974
|
+
`${heading} top=${expectedTop}`,
|
|
975
|
+
);
|
|
976
|
+
|
|
977
|
+
/*
|
|
978
|
+
* Something must actually start on the row directly below the
|
|
979
|
+
* header, or it heads an empty band.
|
|
980
|
+
*/
|
|
981
|
+
const bandStarts: Array<DashboardBaseComponent> =
|
|
982
|
+
config.components.filter(
|
|
983
|
+
(component: DashboardBaseComponent): boolean => {
|
|
984
|
+
return component.topInDashboardUnits === expectedTop + 1;
|
|
985
|
+
},
|
|
986
|
+
);
|
|
987
|
+
|
|
988
|
+
expect(`${heading} band widgets=${bandStarts.length > 0}`).toBe(
|
|
989
|
+
`${heading} band widgets=true`,
|
|
990
|
+
);
|
|
991
|
+
}
|
|
992
|
+
|
|
993
|
+
// Headers are in reading order, top to bottom.
|
|
994
|
+
const tops: Array<number> = headers.map(
|
|
995
|
+
([heading]: [string, number]): number => {
|
|
996
|
+
return findWidget(config, heading).topInDashboardUnits;
|
|
997
|
+
},
|
|
998
|
+
);
|
|
999
|
+
|
|
1000
|
+
expect(tops).toEqual(
|
|
1001
|
+
tops.slice().sort((a: number, b: number): number => {
|
|
1002
|
+
return a - b;
|
|
1003
|
+
}),
|
|
1004
|
+
);
|
|
1005
|
+
});
|
|
1006
|
+
|
|
1007
|
+
/*
|
|
1008
|
+
* Every Slo widget on this template is inert until somebody picks an
|
|
1009
|
+
* objective, which no other template has to explain. One guidance row
|
|
1010
|
+
* says it once, directly under the title, instead of leaving six
|
|
1011
|
+
* identical setup placeholders to explain themselves.
|
|
1012
|
+
*/
|
|
1013
|
+
it("carries exactly one non-bold guidance row, directly under the title", () => {
|
|
1014
|
+
const config: DashboardViewConfig = getConfig();
|
|
1015
|
+
const guidance: Array<DashboardBaseComponent> = componentsOfType(
|
|
1016
|
+
config,
|
|
1017
|
+
DashboardComponentType.Text,
|
|
1018
|
+
).filter((component: DashboardBaseComponent): boolean => {
|
|
1019
|
+
return argumentsOf(component)["isBold"] !== true;
|
|
1020
|
+
});
|
|
1021
|
+
|
|
1022
|
+
expect(guidance).toHaveLength(1);
|
|
1023
|
+
|
|
1024
|
+
const row: DashboardBaseComponent = guidance[0] as DashboardBaseComponent;
|
|
1025
|
+
|
|
1026
|
+
expect(row.topInDashboardUnits).toBe(1);
|
|
1027
|
+
expect(row.leftInDashboardUnits).toBe(0);
|
|
1028
|
+
expect(row.widthInDashboardUnits).toBe(GRID_WIDTH_IN_UNITS);
|
|
1029
|
+
const text: string = titleOf(row);
|
|
1030
|
+
|
|
1031
|
+
expect(text.trim().length).toBeGreaterThan(0);
|
|
1032
|
+
|
|
1033
|
+
/*
|
|
1034
|
+
* It must name the SLO widgets it is about, and the EDIT step. The
|
|
1035
|
+
* widgets' own placeholder says "Click to select an SLO", but that
|
|
1036
|
+
* click only opens the settings panel in edit mode — and a dashboard
|
|
1037
|
+
* created from a template opens in view mode, where following the
|
|
1038
|
+
* instruction does nothing. A guidance row that repeats "click"
|
|
1039
|
+
* without naming edit sends the reader down a dead end.
|
|
1040
|
+
*/
|
|
1041
|
+
expect(`guidance names SLO: ${text.includes("SLO")}`).toBe(
|
|
1042
|
+
"guidance names SLO: true",
|
|
1043
|
+
);
|
|
1044
|
+
expect(
|
|
1045
|
+
`guidance names edit: ${text.toLowerCase().includes("edit")}`,
|
|
1046
|
+
).toBe("guidance names edit: true");
|
|
1047
|
+
|
|
1048
|
+
/*
|
|
1049
|
+
* The Text widget scales its font to the widget's height, so a long
|
|
1050
|
+
* sentence wraps out of a height-1 row and is clipped. Keep it short
|
|
1051
|
+
* enough to render on one line at full width.
|
|
1052
|
+
*/
|
|
1053
|
+
expect(`guidance length ${text.length} <= 80`).toBe(
|
|
1054
|
+
`guidance length ${Math.min(text.length, 80)} <= 80`,
|
|
1055
|
+
);
|
|
1056
|
+
});
|
|
1057
|
+
|
|
1058
|
+
/*
|
|
1059
|
+
* The objective is the subject of this dashboard; the monitors,
|
|
1060
|
+
* incidents and alerts are the explanation. Putting a monitor tile
|
|
1061
|
+
* above the SLI would make it a monitor dashboard with an SLO on it.
|
|
1062
|
+
*/
|
|
1063
|
+
it("puts the objective above everything that explains it", () => {
|
|
1064
|
+
const config: DashboardViewConfig = getConfig();
|
|
1065
|
+
const lowestSloEdge: number = Math.max(
|
|
1066
|
+
...sloWidgets(config).map(
|
|
1067
|
+
(component: DashboardBaseComponent): number => {
|
|
1068
|
+
return (
|
|
1069
|
+
component.topInDashboardUnits + component.heightInDashboardUnits
|
|
1070
|
+
);
|
|
1071
|
+
},
|
|
1072
|
+
),
|
|
1073
|
+
);
|
|
1074
|
+
|
|
1075
|
+
for (const title of [
|
|
1076
|
+
"Monitor Uptime (avg)",
|
|
1077
|
+
"Avg Response Time",
|
|
1078
|
+
"Worst Response Time",
|
|
1079
|
+
"Monitor Uptime Over Time",
|
|
1080
|
+
"Response Time Over Time",
|
|
1081
|
+
"All Monitors",
|
|
1082
|
+
"Latest Alerts",
|
|
1083
|
+
]) {
|
|
1084
|
+
expect(
|
|
1085
|
+
`${title} top=${findWidget(config, title).topInDashboardUnits} >= ${lowestSloEdge}`,
|
|
1086
|
+
).toBe(
|
|
1087
|
+
`${title} top=${Math.max(
|
|
1088
|
+
findWidget(config, title).topInDashboardUnits,
|
|
1089
|
+
lowestSloEdge,
|
|
1090
|
+
)} >= ${lowestSloEdge}`,
|
|
1091
|
+
);
|
|
1092
|
+
}
|
|
1093
|
+
});
|
|
1094
|
+
|
|
1095
|
+
/*
|
|
1096
|
+
* A burn-rate rule declares an incident when the budget starts going
|
|
1097
|
+
* fast, so the spike and the record of what was done about it belong
|
|
1098
|
+
* on the same row.
|
|
1099
|
+
*/
|
|
1100
|
+
it("sets the incident list beside the burn rate chart", () => {
|
|
1101
|
+
const config: DashboardViewConfig = getConfig();
|
|
1102
|
+
const burnRateChart: DashboardBaseComponent = findWidget(
|
|
1103
|
+
config,
|
|
1104
|
+
"Burn Rate Over Time",
|
|
1105
|
+
);
|
|
1106
|
+
const incidents: DashboardBaseComponent = findWidget(
|
|
1107
|
+
config,
|
|
1108
|
+
"Latest Incidents",
|
|
1109
|
+
);
|
|
1110
|
+
|
|
1111
|
+
expect(incidents.topInDashboardUnits).toBe(
|
|
1112
|
+
burnRateChart.topInDashboardUnits,
|
|
1113
|
+
);
|
|
1114
|
+
expect(incidents.leftInDashboardUnits).toBe(
|
|
1115
|
+
burnRateChart.leftInDashboardUnits +
|
|
1116
|
+
burnRateChart.widthInDashboardUnits,
|
|
1117
|
+
);
|
|
1118
|
+
});
|
|
1119
|
+
|
|
1120
|
+
it("picks a chart shape that suits each monitor series", () => {
|
|
1121
|
+
const config: DashboardViewConfig = getConfig();
|
|
1122
|
+
|
|
1123
|
+
// A filled area for a ratio that should read as coverage...
|
|
1124
|
+
expect(
|
|
1125
|
+
argumentsOf(findWidget(config, "Monitor Uptime Over Time"))[
|
|
1126
|
+
"chartType"
|
|
1127
|
+
],
|
|
1128
|
+
).toBe(DashboardChartType.Area);
|
|
1129
|
+
// ...and a line for a latency series read against its own history.
|
|
1130
|
+
expect(
|
|
1131
|
+
argumentsOf(findWidget(config, "Response Time Over Time"))["chartType"],
|
|
1132
|
+
).toBe(DashboardChartType.Line);
|
|
1133
|
+
});
|
|
1134
|
+
});
|
|
1135
|
+
|
|
1136
|
+
describe("freshness", () => {
|
|
1137
|
+
/*
|
|
1138
|
+
* Two dashboards created from this template must not share component
|
|
1139
|
+
* or variable ids — they are independent saved rows from the moment
|
|
1140
|
+
* they are created.
|
|
1141
|
+
*/
|
|
1142
|
+
it("generates fresh component and variable ids on every call", () => {
|
|
1143
|
+
const first: DashboardViewConfig = getConfig();
|
|
1144
|
+
const second: DashboardViewConfig = getConfig();
|
|
1145
|
+
|
|
1146
|
+
expect(second.components.length).toBe(first.components.length);
|
|
1147
|
+
|
|
1148
|
+
const firstComponentIds: Set<string> = new Set<string>(
|
|
1149
|
+
first.components.map((component: DashboardBaseComponent): string => {
|
|
1150
|
+
return component.componentId.toString();
|
|
1151
|
+
}),
|
|
1152
|
+
);
|
|
1153
|
+
for (const component of second.components) {
|
|
1154
|
+
expect(firstComponentIds.has(component.componentId.toString())).toBe(
|
|
1155
|
+
false,
|
|
1156
|
+
);
|
|
1157
|
+
}
|
|
1158
|
+
|
|
1159
|
+
const firstVariableIds: Set<string> = new Set<string>(
|
|
1160
|
+
(first.variables || []).map((variable: DashboardVariable): string => {
|
|
1161
|
+
return variable.id;
|
|
1162
|
+
}),
|
|
1163
|
+
);
|
|
1164
|
+
for (const variable of second.variables || []) {
|
|
1165
|
+
expect(firstVariableIds.has(variable.id)).toBe(false);
|
|
1166
|
+
}
|
|
1167
|
+
});
|
|
1168
|
+
|
|
1169
|
+
it("returns the same widget set on every call", () => {
|
|
1170
|
+
const first: DashboardViewConfig = getConfig();
|
|
1171
|
+
const second: DashboardViewConfig = getConfig();
|
|
1172
|
+
|
|
1173
|
+
expect(second.components.map(titleOf)).toEqual(
|
|
1174
|
+
first.components.map(titleOf),
|
|
1175
|
+
);
|
|
1176
|
+
expect(second.heightInDashboardUnits).toBe(first.heightInDashboardUnits);
|
|
1177
|
+
});
|
|
1178
|
+
});
|
|
1179
|
+
});
|