@oneuptime/common 12.0.4 → 12.0.6
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/DatabaseModels/AIRun.ts +71 -1
- package/Models/DatabaseModels/AlertFeed.ts +30 -0
- package/Models/DatabaseModels/Dashboard.ts +28 -0
- package/Models/DatabaseModels/DataSource.ts +744 -0
- package/Models/DatabaseModels/Incident.ts +2 -0
- package/Models/DatabaseModels/IncidentEpisode.ts +1 -0
- package/Models/DatabaseModels/IncidentEpisodePublicNote.ts +1 -0
- package/Models/DatabaseModels/IncidentEpisodeStateTimeline.ts +1 -0
- package/Models/DatabaseModels/IncidentFeed.ts +30 -0
- package/Models/DatabaseModels/IncidentPublicNote.ts +1 -0
- package/Models/DatabaseModels/IncidentStateTimeline.ts +1 -0
- package/Models/DatabaseModels/Index.ts +3 -0
- package/Models/DatabaseModels/LogSavedView.ts +33 -0
- package/Models/DatabaseModels/Project.ts +231 -9
- package/Models/DatabaseModels/ProjectCallSMSConfig.ts +10 -2
- package/Models/DatabaseModels/ScheduledMaintenance.ts +1 -0
- package/Models/DatabaseModels/ScheduledMaintenancePublicNote.ts +1 -0
- package/Models/DatabaseModels/ScheduledMaintenanceStateTimeline.ts +1 -0
- package/Models/DatabaseModels/ScheduledMaintenanceTemplateOwnerUser.ts +4 -4
- package/Models/DatabaseModels/StatusPage.ts +28 -0
- package/Models/DatabaseModels/StatusPageAnnouncement.ts +1 -0
- package/Models/DatabaseModels/User.ts +2 -0
- package/Models/DatabaseModels/UserOnCallLog.ts +2 -0
- package/Models/DatabaseModels/UserOnCallLogTimeline.ts +2 -0
- package/Models/DatabaseModels/UserSession.ts +2 -0
- package/Models/DatabaseModels/UserTotpAuth.ts +6 -4
- package/Models/DatabaseModels/UserWebAuthn.ts +5 -3
- package/Server/API/AIAgentDataAPI.ts +44 -55
- package/Server/API/AIInsightAPI.ts +47 -4
- package/Server/API/AIInvestigationAPI.ts +200 -17
- package/Server/API/DashboardAPI.ts +186 -502
- package/Server/API/DataSourceAPI.ts +268 -0
- package/Server/API/StatusPageAPI.ts +49 -20
- package/Server/API/UserAPI.ts +119 -0
- package/Server/EnvironmentConfig.ts +16 -0
- package/Server/Infrastructure/ClickhouseConfig.ts +74 -1
- package/Server/Infrastructure/ClickhouseDatabase.ts +1 -1
- package/Server/Infrastructure/Postgres/SchemaMigrations/1786096660558-AddTimeRangeToLogSavedView.ts +27 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1786101798351-MigrationName.ts +89 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1786105470826-MigrationName.ts +27 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1786303472848-AddDataSourceTable.ts +39 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1786400000000-AddMasterPasswordSalt.ts +40 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1786500000000-AddInvestigationCodeFixRecommendation.ts +26 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1786600000000-AddInvestigationAnalysisTldr.ts +24 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1786700000000-DropProjectCallSMSConfigCredentialUniques.ts +76 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +16 -0
- package/Server/Infrastructure/Queue.ts +26 -0
- package/Server/Infrastructure/QueueWorker.ts +17 -0
- package/Server/Middleware/TelemetryIngest.ts +8 -3
- package/Server/Services/AIInsightService.ts +132 -12
- package/Server/Services/AIRunService.ts +112 -10
- package/Server/Services/AIService.ts +109 -22
- package/Server/Services/AlertFeedService.ts +5 -0
- package/Server/Services/AlertService.ts +38 -32
- package/Server/Services/AnalyticsDatabaseService.ts +37 -4
- package/Server/Services/DataSourceService.ts +200 -0
- package/Server/Services/DatabaseService.ts +43 -2
- package/Server/Services/HostService.ts +92 -0
- package/Server/Services/IncidentFeedService.ts +5 -0
- package/Server/Services/IncidentService.ts +45 -0
- package/Server/Services/Index.ts +2 -0
- package/Server/Services/LlmLogService.ts +46 -2
- package/Server/Services/MonitorService.ts +49 -0
- package/Server/Services/MonitorStatusService.ts +166 -0
- package/Server/Services/OpenTelemetryIngestService.ts +255 -184
- package/Server/Services/RumSessionPinService.ts +7 -21
- package/Server/Services/StatusPageSubscriberService.ts +13 -0
- package/Server/Services/UserService.ts +280 -9
- package/Server/Static/Vendor/README.md +62 -0
- package/Server/Static/Vendor/fonts/InterVariable.woff2 +0 -0
- package/Server/Static/Vendor/highlight/highlight.min.js +1244 -0
- package/Server/Static/Vendor/highlight/languages/apache.min.js +15 -0
- package/Server/Static/Vendor/highlight/languages/bash.min.js +21 -0
- package/Server/Static/Vendor/highlight/languages/c.min.js +41 -0
- package/Server/Static/Vendor/highlight/languages/cpp.min.js +47 -0
- package/Server/Static/Vendor/highlight/languages/csharp.min.js +49 -0
- package/Server/Static/Vendor/highlight/languages/css.min.js +31 -0
- package/Server/Static/Vendor/highlight/languages/diff.min.js +9 -0
- package/Server/Static/Vendor/highlight/languages/dns.min.js +11 -0
- package/Server/Static/Vendor/highlight/languages/dockerfile.min.js +8 -0
- package/Server/Static/Vendor/highlight/languages/go.min.js +20 -0
- package/Server/Static/Vendor/highlight/languages/graphql.min.js +12 -0
- package/Server/Static/Vendor/highlight/languages/http.min.js +14 -0
- package/Server/Static/Vendor/highlight/languages/ini.min.js +15 -0
- package/Server/Static/Vendor/highlight/languages/java.min.js +38 -0
- package/Server/Static/Vendor/highlight/languages/javascript.min.js +81 -0
- package/Server/Static/Vendor/highlight/languages/json.min.js +8 -0
- package/Server/Static/Vendor/highlight/languages/kotlin.min.js +46 -0
- package/Server/Static/Vendor/highlight/languages/lua.min.js +15 -0
- package/Server/Static/Vendor/highlight/languages/makefile.min.js +14 -0
- package/Server/Static/Vendor/highlight/languages/nginx.min.js +21 -0
- package/Server/Static/Vendor/highlight/languages/perl.min.js +41 -0
- package/Server/Static/Vendor/highlight/languages/php.min.js +59 -0
- package/Server/Static/Vendor/highlight/languages/powershell.min.js +39 -0
- package/Server/Static/Vendor/highlight/languages/python.min.js +42 -0
- package/Server/Static/Vendor/highlight/languages/r.min.js +26 -0
- package/Server/Static/Vendor/highlight/languages/ruby.min.js +54 -0
- package/Server/Static/Vendor/highlight/languages/rust.min.js +27 -0
- package/Server/Static/Vendor/highlight/languages/scala.min.js +28 -0
- package/Server/Static/Vendor/highlight/languages/sql.min.js +21 -0
- package/Server/Static/Vendor/highlight/languages/swift.min.js +68 -0
- package/Server/Static/Vendor/highlight/languages/typescript.min.js +99 -0
- package/Server/Static/Vendor/highlight/languages/xml.min.js +29 -0
- package/Server/Static/Vendor/highlight/languages/yaml.min.js +28 -0
- package/Server/Static/Vendor/highlight/styles/github-dark.min.css +10 -0
- package/Server/Static/Vendor/highlight/styles/vs2015.min.css +1 -0
- package/Server/Static/Vendor/tailwind/tailwind-3.4.5.js +21028 -0
- package/Server/Types/Database/Permissions/BasePermission.ts +7 -0
- package/Server/Types/Database/Permissions/DeletePermission.ts +2 -0
- package/Server/Types/Database/Permissions/ReadPermission.ts +3 -0
- package/Server/Types/Database/Permissions/TenantPermission.ts +101 -16
- package/Server/Utils/AI/Chat/ObservabilityAssistant.ts +6 -0
- package/Server/Utils/AI/CodeFix/CodeFixAgentCompletion.ts +4 -0
- package/Server/Utils/AI/CodeFix/CodeFixReadiness.ts +8 -5
- package/Server/Utils/AI/CodeFix/FixRunBudget.ts +90 -16
- package/Server/Utils/AI/Remediation/RemediationExecutionRunner.ts +2 -0
- package/Server/Utils/AI/Remediation/RemediationPlanRunner.ts +2 -0
- package/Server/Utils/AI/SRE/AIInvestigationEngine.ts +311 -31
- package/Server/Utils/AI/SRE/AlertInvestigationRunner.ts +26 -24
- package/Server/Utils/AI/SRE/ConfidenceSignal.ts +182 -71
- package/Server/Utils/AI/SRE/FixFromIncidentTaskTrigger.ts +252 -43
- package/Server/Utils/AI/SRE/IncidentInvestigationRunner.ts +26 -24
- package/Server/Utils/AI/SRE/Insights/Detectors/ExceptionIdentity.ts +125 -0
- package/Server/Utils/AI/SRE/Insights/Detectors/ExceptionSpikeDetector.ts +25 -15
- package/Server/Utils/AI/SRE/Insights/Detectors/NewExceptionDetector.ts +256 -57
- package/Server/Utils/AI/SRE/Insights/InsightStore.ts +76 -18
- package/Server/Utils/AI/SRE/InstrumentationTaskTrigger.ts +47 -13
- package/Server/Utils/AI/SRE/InvestigationGrader.ts +9 -5
- package/Server/Utils/AI/SRE/InvestigationQueue.ts +141 -24
- package/Server/Utils/AI/SRE/InvestigationSubjectLock.ts +66 -0
- package/Server/Utils/AI/SRE/InvestigationTldr.ts +352 -0
- package/Server/Utils/AI/SRE/PostedRootCause.ts +94 -3
- package/Server/Utils/AI/SRE/README.md +1 -1
- package/Server/Utils/AI/SRE/SubjectCodeFixRun.ts +132 -10
- package/Server/Utils/AnalyticsDatabase/ClusterConfig.ts +24 -0
- package/Server/Utils/AnalyticsDatabase/InsertDedupContext.ts +7 -2
- package/Server/Utils/Dashboard/PublicDashboardResourceListPolicy.ts +1793 -0
- package/Server/Utils/Dashboard/PublicDashboardViewConfig.ts +65 -0
- package/Server/Utils/DataSource/ConnectorRegistry.ts +53 -0
- package/Server/Utils/DataSource/Connectors/ClickHouseConnector.ts +338 -0
- package/Server/Utils/DataSource/Connectors/ElasticsearchConnector.ts +717 -0
- package/Server/Utils/DataSource/Connectors/LokiConnector.ts +606 -0
- package/Server/Utils/DataSource/Connectors/MySqlConnector.ts +307 -0
- package/Server/Utils/DataSource/Connectors/PostgresConnector.ts +260 -0
- package/Server/Utils/DataSource/Connectors/PrometheusConnector.ts +555 -0
- package/Server/Utils/DataSource/Connectors/RestApiConnector.ts +597 -0
- package/Server/Utils/DataSource/Connectors/SqlServerConnector.ts +318 -0
- package/Server/Utils/DataSource/EgressGuard.ts +446 -0
- package/Server/Utils/DataSource/HttpFetch.ts +221 -0
- package/Server/Utils/DataSource/SqlQueryGuard.ts +383 -0
- package/Server/Utils/DataSource/SqlResultShaper.ts +372 -0
- package/Server/Utils/DataSource/Types.ts +93 -0
- package/Server/Utils/Database/PostgresErrorTranslator.ts +172 -17
- package/Server/Utils/InProcessMemo.ts +141 -0
- package/Server/Utils/InstanceHealth/TelemetryIngestion.ts +628 -0
- package/Server/Utils/Monitor/Criteria/APIRequestCriteria.ts +29 -0
- package/Server/Utils/Monitor/Criteria/DomainMonitorCriteria.ts +56 -0
- package/Server/Utils/Monitor/MonitorMetricUtil.ts +104 -0
- package/Server/Utils/Monitor/MonitorResource.ts +14 -0
- package/Server/Utils/Monitor/MonitorTemplateUtil.ts +1 -0
- package/Server/Utils/PasswordHash.ts +28 -4
- package/Server/Utils/Response.ts +12 -1
- package/Server/Utils/SSRFProtection.ts +237 -0
- package/Server/Utils/StartServer.ts +8 -0
- package/Server/Utils/StatusPageSubscriberWebhook.ts +30 -0
- package/Server/Utils/Telemetry/CaptureSpan.ts +30 -18
- package/Server/Utils/Telemetry/IngestionTimestamp.ts +75 -0
- package/Server/Utils/Telemetry/ResourceHeartbeat.ts +99 -7
- package/Server/Utils/Telemetry/Telemetry.ts +112 -1
- package/Server/Utils/Telemetry.ts +104 -3
- package/Server/Utils/VendorAssets.ts +165 -0
- package/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.ts +28 -5
- package/Server/Utils/Workspace/Slack/Slack.ts +5 -0
- package/Server/Views/Partials/Head.ejs +21 -7
- package/Tests/App/AdminDashboard/AdminProjectsIdFilter.test.tsx +207 -0
- package/Tests/App/AdminDashboard/AdminUsersIdFilter.test.tsx +216 -0
- package/Tests/App/Dashboard/AIInsightViewActions.test.tsx +422 -0
- package/Tests/App/Dashboard/AIInvestigationHeaderStatus.test.tsx +251 -0
- package/Tests/App/Dashboard/AddWidgetModal.test.tsx +10 -3
- package/Tests/App/Dashboard/AlertsSideMenu.test.tsx +387 -0
- package/Tests/App/Dashboard/ChatActivityFeed.test.tsx +199 -0
- package/Tests/App/Dashboard/DataSourceChartSyntheticConfig.test.tsx +736 -0
- package/Tests/App/Dashboard/DataSourceQueryEditor.test.tsx +868 -0
- package/Tests/App/Dashboard/DataSourceWidgetCatalog.test.ts +440 -0
- package/Tests/App/Dashboard/DataSourceWidgetFetching.test.tsx +2109 -0
- package/Tests/App/Dashboard/DataSourceWidgetViews.test.tsx +726 -0
- package/Tests/App/Dashboard/EventStatusPanel.test.tsx +747 -0
- package/Tests/App/Dashboard/IncidentsSideMenu.test.tsx +447 -0
- package/Tests/App/Dashboard/InvestigationFeedRefresh.test.tsx +480 -0
- package/Tests/App/Dashboard/InvestigationPanel.test.tsx +1695 -0
- package/Tests/App/Dashboard/InvestigationPanelStatus.test.tsx +500 -0
- package/Tests/App/Dashboard/PortMonitorCriteriaFilter.test.ts +93 -0
- package/Tests/App/Dashboard/ProductMenuBreadcrumbs.test.tsx +391 -0
- package/Tests/App/Dashboard/ScheduledMaintenanceSideMenu.test.tsx +326 -0
- package/Tests/App/Dashboard/SideMenuHarness.tsx +187 -0
- package/Tests/App/Dashboard/WidgetCatalog.test.ts +6 -1
- package/Tests/App/StatusPage/PublicStatusPageAPIErrorHandling.test.ts +117 -0
- package/Tests/App/StatusPage/StatusPageModelAPIPolymorphism.test.ts +223 -0
- package/Tests/App/StatusPage/StatusPageResourceExplorer.test.tsx +1858 -0
- package/Tests/Models/DatabaseModels/DataSourceModelSecrets.test.ts +70 -0
- package/Tests/Models/DatabaseModels/PermissionCatalogueCoverage.test.ts +243 -0
- package/Tests/Server/API/AIAgentDataFixFromIncidentContext.test.ts +266 -0
- package/Tests/Server/API/AIInvestigationAPI.test.ts +781 -0
- package/Tests/Server/API/AIInvestigationCreateFixTask.test.ts +80 -0
- package/Tests/Server/API/DashboardMasterPasswordAPI.test.ts +172 -1
- package/Tests/Server/API/DashboardPublicDataSourceStrip.test.ts +686 -0
- package/Tests/Server/API/DashboardPublicResourceListAPI.test.ts +585 -823
- package/Tests/Server/API/DataSourceAPIRoutes.test.ts +486 -0
- package/Tests/Server/API/StatusPageMasterPasswordAPI.test.ts +335 -0
- package/Tests/Server/API/StatusPageSubscriberOwnership.test.ts +291 -0
- package/Tests/Server/API/UserAuthenticationAPI.test.ts +641 -0
- package/Tests/Server/Infrastructure/ClickhouseKeepAliveOptions.test.ts +441 -0
- package/Tests/Server/Middleware/TelemetryIngestTokenLog.test.ts +140 -0
- package/Tests/Server/Services/AIInsightService.test.ts +266 -11
- package/Tests/Server/Services/AIRunAnalysisTldrPersistence.test.ts +160 -0
- package/Tests/Server/Services/AIRunCodeFixClaim.test.ts +59 -5
- package/Tests/Server/Services/AIRunHumanVerdict.test.ts +127 -58
- package/Tests/Server/Services/AIServiceDailyBudget.test.ts +400 -20
- package/Tests/Server/Services/AddMasterPasswordSaltMigration.test.ts +283 -0
- package/Tests/Server/Services/AlertMetricResourceAttributes.test.ts +352 -0
- package/Tests/Server/Services/AnalyticsDatabaseService.test.ts +25 -1
- package/Tests/Server/Services/DataSourceServiceSettings.test.ts +244 -0
- package/Tests/Server/Services/DatabaseServicePerUserPasswordSalt.test.ts +45 -35
- package/Tests/Server/Services/DatabaseServiceUpdateColumnsWithoutHooks.test.ts +54 -0
- package/Tests/Server/Services/FeedAIRunAssociation.test.ts +125 -0
- package/Tests/Server/Services/FixFromIncidentTaskTrigger.test.ts +418 -57
- package/Tests/Server/Services/HostServiceFindOrCreateMemo.test.ts +397 -0
- package/Tests/Server/Services/HostServiceUpdateLastSeen.test.ts +41 -2
- package/Tests/Server/Services/IncidentMetricResourceAttributes.test.ts +408 -0
- package/Tests/Server/Services/InstrumentationTaskTrigger.test.ts +173 -14
- package/Tests/Server/Services/MasterPasswordScrypt.test.ts +567 -0
- package/Tests/Server/Services/MonitorStatusServiceDeleteReferenceCleanup.test.ts +351 -0
- package/Tests/Server/Services/MonitorStatusServiceValidation.test.ts +171 -0
- package/Tests/Server/Services/OpenTelemetryResourceRetentionMemo.test.ts +398 -0
- package/Tests/Server/Services/OpenTelemetryServiceResolutionCache.test.ts +19 -0
- package/Tests/Server/Services/ProjectCallSMSConfigCredentialUniqueness.test.ts +305 -0
- package/Tests/Server/Services/ResourceUpdateLastSeenLivenessFallback.test.ts +36 -1
- package/Tests/Server/Services/RumSessionPinUniqueViolationRecovery.test.ts +163 -0
- package/Tests/Server/Services/SeparateIncidentAlertAiSettingsMigration.test.ts +194 -0
- package/Tests/Server/Services/UserAuthenticationService.test.ts +973 -0
- package/Tests/Server/Types/Database/ObjectIdColumnQuery.test.ts +262 -0
- package/Tests/Server/Types/Database/Permissions/TenantPermission.test.ts +358 -0
- package/Tests/Server/Utils/AI/AIAlertGating.test.ts +37 -4
- package/Tests/Server/Utils/AI/AIConfidenceSignal.test.ts +330 -29
- package/Tests/Server/Utils/AI/AIIncidentGating.test.ts +25 -0
- package/Tests/Server/Utils/AI/AIInvestigationQueue.test.ts +293 -5
- package/Tests/Server/Utils/AI/CodeFixAgentCompletion.test.ts +59 -1
- package/Tests/Server/Utils/AI/FixFromIncidentAutoTrigger.test.ts +342 -19
- package/Tests/Server/Utils/AI/FixRunBudget.test.ts +214 -30
- package/Tests/Server/Utils/AI/Insights/ExceptionSpikeDetector.test.ts +6 -1
- package/Tests/Server/Utils/AI/Insights/InsightStore.test.ts +121 -4
- package/Tests/Server/Utils/AI/Insights/InvestigationQueueInsightSubject.test.ts +2 -0
- package/Tests/Server/Utils/AI/Insights/NewExceptionDetector.test.ts +361 -10
- package/Tests/Server/Utils/AI/InvestigationGrader.test.ts +65 -17
- package/Tests/Server/Utils/AI/InvestigationQueueRemediationExecution.test.ts +3 -0
- package/Tests/Server/Utils/AI/InvestigationSettlement.test.ts +605 -20
- package/Tests/Server/Utils/AI/InvestigationTldr.test.ts +623 -0
- package/Tests/Server/Utils/AI/InvestigationTldrWiring.test.ts +98 -0
- package/Tests/Server/Utils/AI/PostedRootCause.test.ts +254 -0
- package/Tests/Server/Utils/AI/RemediationExecutionRunner.test.ts +4 -0
- package/Tests/Server/Utils/AI/RemediationPlanRunner.test.ts +2 -0
- package/Tests/Server/Utils/AI/SubjectCodeFixRunDedupe.test.ts +44 -0
- package/Tests/Server/Utils/AnalyticsDatabase/ClusterAwareSchema.test.ts +30 -0
- package/Tests/Server/Utils/Dashboard/PublicDashboardResourceListPolicy.test.ts +857 -0
- package/Tests/Server/Utils/Dashboard/PublicDashboardViewConfig.test.ts +480 -0
- package/Tests/Server/Utils/DataSource/ClickHouseConnector.test.ts +759 -0
- package/Tests/Server/Utils/DataSource/ConnectorRegistry.test.ts +37 -0
- package/Tests/Server/Utils/DataSource/EgressGuard.test.ts +645 -0
- package/Tests/Server/Utils/DataSource/ElasticsearchConnector.test.ts +1206 -0
- package/Tests/Server/Utils/DataSource/HttpFetch.test.ts +616 -0
- package/Tests/Server/Utils/DataSource/LokiConnector.test.ts +970 -0
- package/Tests/Server/Utils/DataSource/MySqlConnector.test.ts +935 -0
- package/Tests/Server/Utils/DataSource/PostgresConnector.test.ts +854 -0
- package/Tests/Server/Utils/DataSource/PrometheusConnector.test.ts +881 -0
- package/Tests/Server/Utils/DataSource/RestApiConnector.test.ts +1020 -0
- package/Tests/Server/Utils/DataSource/SqlQueryGuard.test.ts +425 -0
- package/Tests/Server/Utils/DataSource/SqlResultShaper.test.ts +555 -0
- package/Tests/Server/Utils/DataSource/SqlServerConnector.test.ts +934 -0
- package/Tests/Server/Utils/Database/PostgresErrorTranslator.test.ts +228 -7
- package/Tests/Server/Utils/InProcessMemo.test.ts +292 -0
- package/Tests/Server/Utils/InstanceHealth/TelemetryIngestion.test.ts +960 -0
- package/Tests/Server/Utils/MicrosoftTeamsWebhookUrlValidation.test.ts +103 -0
- package/Tests/Server/Utils/Monitor/Criteria/APIRequestCriteriaPortTimings.test.ts +212 -0
- package/Tests/Server/Utils/Monitor/Criteria/DomainMonitorCriteria.test.ts +401 -0
- package/Tests/Server/Utils/Monitor/MonitorMetricResourceAttributes.test.ts +336 -0
- package/Tests/Server/Utils/Monitor/MonitorMetricUtilPortTimings.test.ts +243 -0
- package/Tests/Server/Utils/OfflineAssetHygiene.test.ts +521 -0
- package/Tests/Server/Utils/PasswordHash.test.ts +30 -0
- package/Tests/Server/Utils/ResponseRenderAnalytics.test.ts +143 -0
- package/Tests/Server/Utils/SSRFProtection.test.ts +193 -0
- package/Tests/Server/Utils/StatusPageSubscriberWebhook.test.ts +101 -0
- package/Tests/Server/Utils/TailwindBuildCopy.test.ts +225 -0
- package/Tests/Server/Utils/Telemetry/ResourceHeartbeatL1Memo.test.ts +355 -0
- package/Tests/Server/Utils/Telemetry/TelemetryFanInWriter.test.ts +128 -0
- package/Tests/Server/Utils/Telemetry/TelemetryUtilAttributeKeys.test.ts +381 -0
- package/Tests/Server/Utils/Telemetry.test.ts +87 -0
- package/Tests/Server/Utils/VendorAssetIntegrity.test.ts +343 -0
- package/Tests/Server/Utils/VendorAssets.test.ts +671 -0
- package/Tests/Server/Views/OfflineRender.test.ts +297 -0
- package/Tests/Types/Dashboard/DashboardTemplates.test.ts +111 -0
- package/Tests/Types/Dashboard/DataSourceComponentTypes.test.ts +618 -0
- package/Tests/Types/DateClickhouseFormat.test.ts +192 -0
- package/Tests/Types/Monitor/CephMetricCatalog.test.ts +104 -0
- package/Tests/Types/Monitor/CriteriaFilter.test.ts +4 -0
- package/Tests/Types/Monitor/DockerMetricCatalog.test.ts +109 -0
- package/Tests/Types/Monitor/DockerSwarmMetricCatalog.test.ts +118 -0
- package/Tests/Types/Monitor/HostMetricCatalog.test.ts +104 -0
- package/Tests/Types/Monitor/IotMetricCatalog.test.ts +104 -0
- package/Tests/Types/Monitor/KubernetesMetricCatalog.test.ts +118 -0
- package/Tests/Types/Monitor/MonitorCriteriaInstance.test.ts +42 -0
- package/Tests/Types/Monitor/MonitorStep.test.ts +38 -0
- package/Tests/Types/Monitor/MonitorStepDomainMonitor.test.ts +75 -0
- package/Tests/Types/Monitor/PodmanMetricCatalog.test.ts +109 -0
- package/Tests/Types/Monitor/ProxmoxMetricCatalog.test.ts +107 -0
- package/Tests/Types/Monitor/SnmpMonitor/SnmpVendorTemplate.test.ts +151 -0
- package/Tests/Types/Password.test.ts +363 -0
- package/Tests/Types/Permission.test.ts +137 -0
- package/Tests/Types/Rum/SessionReplayMaskingMode.test.ts +101 -0
- package/Tests/UI/Components/AiInvestigationSettingsCard.test.tsx +5 -5
- package/Tests/UI/Components/CardModelDetailEdit.test.tsx +3 -5
- package/Tests/UI/Components/ConfirmModal.test.tsx +7 -0
- package/Tests/UI/Components/ErrorBoundary.test.tsx +211 -0
- package/Tests/UI/Components/FeedItemSafeMode.test.tsx +74 -0
- package/Tests/UI/Components/Modal.test.tsx +281 -1
- package/Tests/UI/Components/MoreMenu.test.tsx +756 -0
- package/Tests/UI/Components/ObjectIdFilterPipeline.test.tsx +396 -0
- package/Tests/UI/Components/StatusPage/ResourceGroupNavigator.test.tsx +1147 -0
- package/Tests/UI/Components/StatusPage/ResourceGroupSection.test.tsx +62 -0
- package/Tests/UI/Monitor/PortMonitorView.test.tsx +237 -0
- package/Tests/UI/Telemetry/TelemetrySnapshotWindowAlert.test.tsx +91 -0
- package/Tests/UI/Utils/Breadcrumb/fixtures/RealBreadcrumbTrails.ts +116 -1
- package/Tests/UI/Utils/Breadcrumb/fixtures/RealRoutePatterns.ts +2 -0
- package/Tests/UI/Utils/DownloadFile.test.ts +103 -0
- package/Tests/UI/Utils/ErrorSupportBundle.test.ts +582 -0
- package/Tests/UI/Utils/Project.test.ts +31 -0
- package/Tests/UI/Utils/StatusPageModelAPIInjection.test.ts +245 -0
- package/Tests/UI/Utils/UseDashboardGridDnd.test.tsx +820 -0
- package/Tests/Utils/Analytics.test.ts +23 -0
- package/Tests/Utils/Dashboard/Components/DashboardDataSourceComponents.test.ts +640 -0
- package/Tests/Utils/Dashboard/DashboardViewConfig.test.ts +329 -0
- package/Tests/Utils/Dashboard/GridLayout.test.ts +951 -0
- package/Tests/Utils/DataSource/DataSourceQueryText.test.ts +138 -0
- package/Tests/Utils/DataSource/DataSourceValueReducer.test.ts +526 -0
- package/Tests/Utils/Metrics/MetricResourceAttributeUtil.test.ts +691 -0
- package/Tests/Utils/Monitor/MonitorMetricType.test.ts +117 -0
- package/Tests/Utils/RecordingRuleExpression.test.ts +327 -0
- package/Tests/Utils/StatusPage/GroupHierarchyView.test.ts +1452 -0
- package/Tests/Utils/StatusPage/GroupNestingLayout.test.ts +186 -0
- package/Tests/Utils/StatusPage/GroupTree.test.ts +456 -0
- package/Tests/Utils/StatusPage/OverviewGroupHierarchyVisibility.test.ts +588 -0
- package/Tests/Utils/StatusPage/ResourceExplorer.test.ts +931 -0
- package/Tests/Utils/Telemetry/CaptureSpanExportGating.test.ts +288 -0
- package/Tests/Utils/Telemetry/IngestionTimestamp.test.ts +170 -0
- package/Tests/Utils/Telemetry/SavedViewTimeRange.test.ts +244 -0
- package/Tests/Utils/Telemetry/TelemetryQueryTimeRange.test.ts +825 -0
- package/Types/AI/AIInsightEvidence.ts +6 -0
- package/Types/AI/AIRunCodeFixRecommendation.ts +17 -0
- package/Types/AI/CodeFixTaskContext.ts +63 -3
- package/Types/AI/CodeFixTaskType.ts +3 -3
- package/Types/Analytics/RevenueEvent.ts +31 -0
- package/Types/Dashboard/DashboardComponentType.ts +31 -0
- package/Types/Dashboard/DashboardComponents/DashboardDataSourceChartComponent.ts +27 -0
- package/Types/Dashboard/DashboardComponents/DashboardDataSourceGaugeComponent.ts +32 -0
- package/Types/Dashboard/DashboardComponents/DashboardDataSourceTableComponent.ts +30 -0
- package/Types/Dashboard/DashboardComponents/DashboardDataSourceValueComponent.ts +55 -0
- package/Types/DataSource/DataSourceLimits.ts +62 -0
- package/Types/DataSource/DataSourceQueryConfig.ts +41 -0
- package/Types/DataSource/DataSourceTableResult.ts +38 -0
- package/Types/DataSource/DataSourceType.ts +213 -0
- package/Types/Date.ts +43 -3
- package/Types/HashedString.ts +4 -3
- package/Types/Monitor/CriteriaFilter.ts +4 -0
- package/Types/Monitor/DomainMonitor/DomainLookupMethod.ts +23 -0
- package/Types/Monitor/DomainMonitor/DomainMonitorResponse.ts +7 -0
- package/Types/Monitor/MonitorCriteriaInstance.ts +24 -7
- package/Types/Monitor/MonitorMetricType.ts +8 -0
- package/Types/Monitor/MonitorStep.ts +10 -1
- package/Types/Monitor/MonitorStepDomainMonitor.ts +21 -0
- package/Types/Monitor/PortMonitor/PortMonitorTimings.ts +10 -0
- package/Types/Password.ts +64 -0
- package/Types/Permission.ts +69 -175
- package/Types/Probe/ProbeMonitorResponse.ts +6 -0
- package/Types/UserAuthenticationStatus.ts +34 -0
- package/UI/Components/BulkUpdate/BulkUpdateForm.tsx +2 -3
- package/UI/Components/Button/Button.tsx +1 -1
- package/UI/Components/ErrorBoundary.tsx +549 -71
- package/UI/Components/Feed/FeedItem.tsx +9 -2
- package/UI/Components/Icon/Icon.tsx +10 -9
- package/UI/Components/Modal/ConfirmModal.tsx +6 -1
- package/UI/Components/Modal/Modal.tsx +267 -35
- package/UI/Components/Modal/ModalFooter.tsx +6 -1
- package/UI/Components/ModelDetail/CardModelDetail.tsx +0 -12
- package/UI/Components/ModelTable/BaseModelTable.tsx +1 -1
- package/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.ts +12 -2
- package/UI/Components/MoreMenu/MoreMenu.tsx +301 -98
- package/UI/Components/MoreMenu/MoreMenuItem.tsx +13 -5
- package/UI/Components/StatusPage/ResourceGrid.tsx +314 -0
- package/UI/Components/StatusPage/ResourceGroupNavigator.tsx +808 -0
- package/UI/Components/StatusPage/ResourceList.tsx +570 -0
- package/UI/Styles/Theme.css +18 -0
- package/UI/Utils/API/RequestOptions.ts +7 -0
- package/UI/Utils/AnalyticsModelAPI/AnalyticsModelAPI.ts +1 -0
- package/UI/Utils/DownloadFile.ts +16 -8
- package/UI/Utils/ErrorSupportBundle.ts +805 -0
- package/UI/Utils/ModelAPI/ModelAPI.ts +20 -8
- package/UI/Utils/Project.ts +4 -0
- package/UI/Utils/StatusPage.ts +8 -2
- package/UI/Utils/TestDataSource.ts +61 -0
- package/UI/Utils/UseDashboardGridDnd.ts +917 -0
- package/UI/esbuild-config.js +45 -0
- package/Utils/Analytics.ts +15 -0
- package/Utils/Dashboard/Components/DashboardDataSourceChartComponent.ts +88 -0
- package/Utils/Dashboard/Components/DashboardDataSourceGaugeComponent.ts +123 -0
- package/Utils/Dashboard/Components/DashboardDataSourceShared.ts +16 -0
- package/Utils/Dashboard/Components/DashboardDataSourceTableComponent.ts +72 -0
- package/Utils/Dashboard/Components/DashboardDataSourceValueComponent.ts +126 -0
- package/Utils/Dashboard/Components/Index.ts +28 -0
- package/Utils/Dashboard/DashboardViewConfig.ts +80 -36
- package/Utils/Dashboard/GridLayout.ts +523 -0
- package/Utils/DataSource/DataSourceQueryText.ts +94 -0
- package/Utils/DataSource/DataSourceValueReducer.ts +156 -0
- package/Utils/Metrics/MetricResourceAttributeUtil.ts +380 -0
- package/Utils/Metrics/RecordingRuleExpression.ts +19 -17
- package/Utils/Monitor/MonitorMetricType.ts +44 -2
- package/Utils/NetworkDiscovery/ScanTargetUtil.ts +8 -6
- package/Utils/StatusPage/GroupHierarchyView.ts +931 -0
- package/Utils/StatusPage/GroupNestingLayout.ts +69 -0
- package/Utils/StatusPage/GroupTree.ts +157 -66
- package/Utils/StatusPage/ResourceExplorer.ts +853 -0
- package/Utils/StatusPage/ResourceUptime.ts +37 -2
- package/Utils/Telemetry/SavedViewTimeRange.ts +114 -0
- package/Utils/Telemetry/TelemetryQueryTimeRange.ts +334 -0
- package/build/dist/Models/DatabaseModels/AIRun.js +73 -1
- package/build/dist/Models/DatabaseModels/AIRun.js.map +1 -1
- package/build/dist/Models/DatabaseModels/AlertFeed.js +32 -0
- package/build/dist/Models/DatabaseModels/AlertFeed.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Dashboard.js +29 -0
- package/build/dist/Models/DatabaseModels/Dashboard.js.map +1 -1
- package/build/dist/Models/DatabaseModels/DataSource.js +774 -0
- package/build/dist/Models/DatabaseModels/DataSource.js.map +1 -0
- package/build/dist/Models/DatabaseModels/Incident.js +2 -0
- package/build/dist/Models/DatabaseModels/Incident.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncidentEpisode.js +1 -0
- package/build/dist/Models/DatabaseModels/IncidentEpisode.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncidentEpisodePublicNote.js +1 -0
- package/build/dist/Models/DatabaseModels/IncidentEpisodePublicNote.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncidentEpisodeStateTimeline.js +1 -0
- package/build/dist/Models/DatabaseModels/IncidentEpisodeStateTimeline.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncidentFeed.js +32 -0
- package/build/dist/Models/DatabaseModels/IncidentFeed.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncidentPublicNote.js +1 -0
- package/build/dist/Models/DatabaseModels/IncidentPublicNote.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncidentStateTimeline.js +1 -0
- package/build/dist/Models/DatabaseModels/IncidentStateTimeline.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Index.js +2 -0
- package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
- package/build/dist/Models/DatabaseModels/LogSavedView.js +33 -0
- package/build/dist/Models/DatabaseModels/LogSavedView.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Project.js +241 -11
- package/build/dist/Models/DatabaseModels/Project.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ProjectCallSMSConfig.js +14 -4
- package/build/dist/Models/DatabaseModels/ProjectCallSMSConfig.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ScheduledMaintenance.js +1 -0
- package/build/dist/Models/DatabaseModels/ScheduledMaintenance.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ScheduledMaintenancePublicNote.js +1 -0
- package/build/dist/Models/DatabaseModels/ScheduledMaintenancePublicNote.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ScheduledMaintenanceStateTimeline.js +1 -0
- package/build/dist/Models/DatabaseModels/ScheduledMaintenanceStateTimeline.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ScheduledMaintenanceTemplateOwnerUser.js +4 -4
- package/build/dist/Models/DatabaseModels/StatusPage.js +29 -0
- package/build/dist/Models/DatabaseModels/StatusPage.js.map +1 -1
- package/build/dist/Models/DatabaseModels/StatusPageAnnouncement.js +1 -0
- package/build/dist/Models/DatabaseModels/StatusPageAnnouncement.js.map +1 -1
- package/build/dist/Models/DatabaseModels/User.js +2 -0
- package/build/dist/Models/DatabaseModels/User.js.map +1 -1
- package/build/dist/Models/DatabaseModels/UserOnCallLog.js +2 -0
- package/build/dist/Models/DatabaseModels/UserOnCallLog.js.map +1 -1
- package/build/dist/Models/DatabaseModels/UserOnCallLogTimeline.js +2 -0
- package/build/dist/Models/DatabaseModels/UserOnCallLogTimeline.js.map +1 -1
- package/build/dist/Models/DatabaseModels/UserSession.js +2 -0
- package/build/dist/Models/DatabaseModels/UserSession.js.map +1 -1
- package/build/dist/Models/DatabaseModels/UserTotpAuth.js +6 -4
- package/build/dist/Models/DatabaseModels/UserTotpAuth.js.map +1 -1
- package/build/dist/Models/DatabaseModels/UserWebAuthn.js +5 -3
- package/build/dist/Models/DatabaseModels/UserWebAuthn.js.map +1 -1
- package/build/dist/Server/API/AIAgentDataAPI.js +28 -46
- package/build/dist/Server/API/AIAgentDataAPI.js.map +1 -1
- package/build/dist/Server/API/AIInsightAPI.js +34 -4
- package/build/dist/Server/API/AIInsightAPI.js.map +1 -1
- package/build/dist/Server/API/AIInvestigationAPI.js +134 -11
- package/build/dist/Server/API/AIInvestigationAPI.js.map +1 -1
- package/build/dist/Server/API/DashboardAPI.js +127 -438
- package/build/dist/Server/API/DashboardAPI.js.map +1 -1
- package/build/dist/Server/API/DataSourceAPI.js +173 -0
- package/build/dist/Server/API/DataSourceAPI.js.map +1 -0
- package/build/dist/Server/API/StatusPageAPI.js +40 -12
- package/build/dist/Server/API/StatusPageAPI.js.map +1 -1
- package/build/dist/Server/API/UserAPI.js +94 -2
- package/build/dist/Server/API/UserAPI.js.map +1 -1
- package/build/dist/Server/EnvironmentConfig.js +14 -0
- package/build/dist/Server/EnvironmentConfig.js.map +1 -1
- package/build/dist/Server/Infrastructure/ClickhouseConfig.js +61 -1
- package/build/dist/Server/Infrastructure/ClickhouseConfig.js.map +1 -1
- package/build/dist/Server/Infrastructure/ClickhouseDatabase.js +1 -1
- package/build/dist/Server/Infrastructure/ClickhouseDatabase.js.map +1 -1
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786096660558-AddTimeRangeToLogSavedView.js +22 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786096660558-AddTimeRangeToLogSavedView.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786101798351-MigrationName.js +36 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786101798351-MigrationName.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786105470826-MigrationName.js +18 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786105470826-MigrationName.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786303472848-AddDataSourceTable.js +20 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786303472848-AddDataSourceTable.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786400000000-AddMasterPasswordSalt.js +19 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786400000000-AddMasterPasswordSalt.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786500000000-AddInvestigationCodeFixRecommendation.js +19 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786500000000-AddInvestigationCodeFixRecommendation.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786600000000-AddInvestigationAnalysisTldr.js +19 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786600000000-AddInvestigationAnalysisTldr.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786700000000-DropProjectCallSMSConfigCredentialUniques.js +64 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786700000000-DropProjectCallSMSConfigCredentialUniques.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +16 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
- package/build/dist/Server/Infrastructure/Queue.js +27 -0
- package/build/dist/Server/Infrastructure/Queue.js.map +1 -1
- package/build/dist/Server/Infrastructure/QueueWorker.js +13 -0
- package/build/dist/Server/Infrastructure/QueueWorker.js.map +1 -1
- package/build/dist/Server/Middleware/TelemetryIngest.js +8 -3
- package/build/dist/Server/Middleware/TelemetryIngest.js.map +1 -1
- package/build/dist/Server/Services/AIInsightService.js +110 -10
- package/build/dist/Server/Services/AIInsightService.js.map +1 -1
- package/build/dist/Server/Services/AIRunService.js +92 -12
- package/build/dist/Server/Services/AIRunService.js.map +1 -1
- package/build/dist/Server/Services/AIService.js +88 -21
- package/build/dist/Server/Services/AIService.js.map +1 -1
- package/build/dist/Server/Services/AlertFeedService.js +3 -0
- package/build/dist/Server/Services/AlertFeedService.js.map +1 -1
- package/build/dist/Server/Services/AlertService.js +28 -35
- package/build/dist/Server/Services/AlertService.js.map +1 -1
- package/build/dist/Server/Services/AnalyticsDatabaseService.js +37 -5
- package/build/dist/Server/Services/AnalyticsDatabaseService.js.map +1 -1
- package/build/dist/Server/Services/DataSourceService.js +159 -0
- package/build/dist/Server/Services/DataSourceService.js.map +1 -0
- package/build/dist/Server/Services/DatabaseService.js +21 -2
- package/build/dist/Server/Services/DatabaseService.js.map +1 -1
- package/build/dist/Server/Services/HostService.js +74 -0
- package/build/dist/Server/Services/HostService.js.map +1 -1
- package/build/dist/Server/Services/IncidentFeedService.js +3 -0
- package/build/dist/Server/Services/IncidentFeedService.js.map +1 -1
- package/build/dist/Server/Services/IncidentService.js +35 -24
- package/build/dist/Server/Services/IncidentService.js.map +1 -1
- package/build/dist/Server/Services/Index.js +2 -0
- package/build/dist/Server/Services/Index.js.map +1 -1
- package/build/dist/Server/Services/LlmLogService.js +22 -1
- package/build/dist/Server/Services/LlmLogService.js.map +1 -1
- package/build/dist/Server/Services/MonitorService.js +45 -0
- package/build/dist/Server/Services/MonitorService.js.map +1 -1
- package/build/dist/Server/Services/MonitorStatusService.js +129 -0
- package/build/dist/Server/Services/MonitorStatusService.js.map +1 -1
- package/build/dist/Server/Services/OpenTelemetryIngestService.js +222 -159
- package/build/dist/Server/Services/OpenTelemetryIngestService.js.map +1 -1
- package/build/dist/Server/Services/RumSessionPinService.js +7 -15
- package/build/dist/Server/Services/RumSessionPinService.js.map +1 -1
- package/build/dist/Server/Services/StatusPageSubscriberService.js +10 -0
- package/build/dist/Server/Services/StatusPageSubscriberService.js.map +1 -1
- package/build/dist/Server/Services/UserService.js +241 -10
- package/build/dist/Server/Services/UserService.js.map +1 -1
- package/build/dist/Server/Types/Database/Permissions/BasePermission.js +6 -0
- package/build/dist/Server/Types/Database/Permissions/BasePermission.js.map +1 -1
- package/build/dist/Server/Types/Database/Permissions/DeletePermission.js +1 -0
- package/build/dist/Server/Types/Database/Permissions/DeletePermission.js.map +1 -1
- package/build/dist/Server/Types/Database/Permissions/ReadPermission.js +2 -0
- package/build/dist/Server/Types/Database/Permissions/ReadPermission.js.map +1 -1
- package/build/dist/Server/Types/Database/Permissions/TenantPermission.js +68 -12
- package/build/dist/Server/Types/Database/Permissions/TenantPermission.js.map +1 -1
- package/build/dist/Server/Utils/AI/Chat/ObservabilityAssistant.js +3 -0
- package/build/dist/Server/Utils/AI/Chat/ObservabilityAssistant.js.map +1 -1
- package/build/dist/Server/Utils/AI/CodeFix/CodeFixAgentCompletion.js +4 -0
- package/build/dist/Server/Utils/AI/CodeFix/CodeFixAgentCompletion.js.map +1 -1
- package/build/dist/Server/Utils/AI/CodeFix/CodeFixReadiness.js +8 -5
- package/build/dist/Server/Utils/AI/CodeFix/CodeFixReadiness.js.map +1 -1
- package/build/dist/Server/Utils/AI/CodeFix/FixRunBudget.js +63 -24
- package/build/dist/Server/Utils/AI/CodeFix/FixRunBudget.js.map +1 -1
- package/build/dist/Server/Utils/AI/Remediation/RemediationExecutionRunner.js +2 -0
- package/build/dist/Server/Utils/AI/Remediation/RemediationExecutionRunner.js.map +1 -1
- package/build/dist/Server/Utils/AI/Remediation/RemediationPlanRunner.js +2 -0
- package/build/dist/Server/Utils/AI/Remediation/RemediationPlanRunner.js.map +1 -1
- package/build/dist/Server/Utils/AI/SRE/AIInvestigationEngine.js +222 -34
- package/build/dist/Server/Utils/AI/SRE/AIInvestigationEngine.js.map +1 -1
- package/build/dist/Server/Utils/AI/SRE/AlertInvestigationRunner.js +22 -19
- package/build/dist/Server/Utils/AI/SRE/AlertInvestigationRunner.js.map +1 -1
- package/build/dist/Server/Utils/AI/SRE/ConfidenceSignal.js +128 -49
- package/build/dist/Server/Utils/AI/SRE/ConfidenceSignal.js.map +1 -1
- package/build/dist/Server/Utils/AI/SRE/FixFromIncidentTaskTrigger.js +170 -31
- package/build/dist/Server/Utils/AI/SRE/FixFromIncidentTaskTrigger.js.map +1 -1
- package/build/dist/Server/Utils/AI/SRE/IncidentInvestigationRunner.js +22 -19
- package/build/dist/Server/Utils/AI/SRE/IncidentInvestigationRunner.js.map +1 -1
- package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/ExceptionIdentity.js +97 -0
- package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/ExceptionIdentity.js.map +1 -0
- package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/ExceptionSpikeDetector.js +17 -15
- package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/ExceptionSpikeDetector.js.map +1 -1
- package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/NewExceptionDetector.js +178 -54
- package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/NewExceptionDetector.js.map +1 -1
- package/build/dist/Server/Utils/AI/SRE/Insights/InsightStore.js +65 -16
- package/build/dist/Server/Utils/AI/SRE/Insights/InsightStore.js.map +1 -1
- package/build/dist/Server/Utils/AI/SRE/InstrumentationTaskTrigger.js +33 -9
- package/build/dist/Server/Utils/AI/SRE/InstrumentationTaskTrigger.js.map +1 -1
- package/build/dist/Server/Utils/AI/SRE/InvestigationGrader.js +9 -5
- package/build/dist/Server/Utils/AI/SRE/InvestigationGrader.js.map +1 -1
- package/build/dist/Server/Utils/AI/SRE/InvestigationQueue.js +121 -41
- package/build/dist/Server/Utils/AI/SRE/InvestigationQueue.js.map +1 -1
- package/build/dist/Server/Utils/AI/SRE/InvestigationSubjectLock.js +46 -0
- package/build/dist/Server/Utils/AI/SRE/InvestigationSubjectLock.js.map +1 -0
- package/build/dist/Server/Utils/AI/SRE/InvestigationTldr.js +303 -0
- package/build/dist/Server/Utils/AI/SRE/InvestigationTldr.js.map +1 -0
- package/build/dist/Server/Utils/AI/SRE/PostedRootCause.js +61 -14
- package/build/dist/Server/Utils/AI/SRE/PostedRootCause.js.map +1 -1
- package/build/dist/Server/Utils/AI/SRE/SubjectCodeFixRun.js +79 -1
- package/build/dist/Server/Utils/AI/SRE/SubjectCodeFixRun.js.map +1 -1
- package/build/dist/Server/Utils/AnalyticsDatabase/ClusterConfig.js +21 -0
- package/build/dist/Server/Utils/AnalyticsDatabase/ClusterConfig.js.map +1 -1
- package/build/dist/Server/Utils/AnalyticsDatabase/InsertDedupContext.js.map +1 -1
- package/build/dist/Server/Utils/Dashboard/PublicDashboardResourceListPolicy.js +1261 -0
- package/build/dist/Server/Utils/Dashboard/PublicDashboardResourceListPolicy.js.map +1 -0
- package/build/dist/Server/Utils/Dashboard/PublicDashboardViewConfig.js +47 -0
- package/build/dist/Server/Utils/Dashboard/PublicDashboardViewConfig.js.map +1 -0
- package/build/dist/Server/Utils/DataSource/ConnectorRegistry.js +42 -0
- package/build/dist/Server/Utils/DataSource/ConnectorRegistry.js.map +1 -0
- package/build/dist/Server/Utils/DataSource/Connectors/ClickHouseConnector.js +187 -0
- package/build/dist/Server/Utils/DataSource/Connectors/ClickHouseConnector.js.map +1 -0
- package/build/dist/Server/Utils/DataSource/Connectors/ElasticsearchConnector.js +493 -0
- package/build/dist/Server/Utils/DataSource/Connectors/ElasticsearchConnector.js.map +1 -0
- package/build/dist/Server/Utils/DataSource/Connectors/LokiConnector.js +399 -0
- package/build/dist/Server/Utils/DataSource/Connectors/LokiConnector.js.map +1 -0
- package/build/dist/Server/Utils/DataSource/Connectors/MySqlConnector.js +195 -0
- package/build/dist/Server/Utils/DataSource/Connectors/MySqlConnector.js.map +1 -0
- package/build/dist/Server/Utils/DataSource/Connectors/PostgresConnector.js +149 -0
- package/build/dist/Server/Utils/DataSource/Connectors/PostgresConnector.js.map +1 -0
- package/build/dist/Server/Utils/DataSource/Connectors/PrometheusConnector.js +362 -0
- package/build/dist/Server/Utils/DataSource/Connectors/PrometheusConnector.js.map +1 -0
- package/build/dist/Server/Utils/DataSource/Connectors/RestApiConnector.js +342 -0
- package/build/dist/Server/Utils/DataSource/Connectors/RestApiConnector.js.map +1 -0
- package/build/dist/Server/Utils/DataSource/Connectors/SqlServerConnector.js +186 -0
- package/build/dist/Server/Utils/DataSource/Connectors/SqlServerConnector.js.map +1 -0
- package/build/dist/Server/Utils/DataSource/EgressGuard.js +305 -0
- package/build/dist/Server/Utils/DataSource/EgressGuard.js.map +1 -0
- package/build/dist/Server/Utils/DataSource/HttpFetch.js +134 -0
- package/build/dist/Server/Utils/DataSource/HttpFetch.js.map +1 -0
- package/build/dist/Server/Utils/DataSource/SqlQueryGuard.js +331 -0
- package/build/dist/Server/Utils/DataSource/SqlQueryGuard.js.map +1 -0
- package/build/dist/Server/Utils/DataSource/SqlResultShaper.js +280 -0
- package/build/dist/Server/Utils/DataSource/SqlResultShaper.js.map +1 -0
- package/build/dist/Server/Utils/DataSource/Types.js +2 -0
- package/build/dist/Server/Utils/DataSource/Types.js.map +1 -0
- package/build/dist/Server/Utils/Database/PostgresErrorTranslator.js +103 -9
- package/build/dist/Server/Utils/Database/PostgresErrorTranslator.js.map +1 -1
- package/build/dist/Server/Utils/InProcessMemo.js +113 -0
- package/build/dist/Server/Utils/InProcessMemo.js.map +1 -0
- package/build/dist/Server/Utils/InstanceHealth/TelemetryIngestion.js +406 -0
- package/build/dist/Server/Utils/InstanceHealth/TelemetryIngestion.js.map +1 -0
- package/build/dist/Server/Utils/Monitor/Criteria/APIRequestCriteria.js +20 -3
- package/build/dist/Server/Utils/Monitor/Criteria/APIRequestCriteria.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/Criteria/DomainMonitorCriteria.js +43 -0
- package/build/dist/Server/Utils/Monitor/Criteria/DomainMonitorCriteria.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorMetricUtil.js +67 -0
- package/build/dist/Server/Utils/Monitor/MonitorMetricUtil.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorResource.js +14 -0
- package/build/dist/Server/Utils/Monitor/MonitorResource.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/PasswordHash.js +25 -4
- package/build/dist/Server/Utils/PasswordHash.js.map +1 -1
- package/build/dist/Server/Utils/Response.js +9 -1
- package/build/dist/Server/Utils/Response.js.map +1 -1
- package/build/dist/Server/Utils/SSRFProtection.js +192 -0
- package/build/dist/Server/Utils/SSRFProtection.js.map +1 -0
- package/build/dist/Server/Utils/StartServer.js +7 -0
- package/build/dist/Server/Utils/StartServer.js.map +1 -1
- package/build/dist/Server/Utils/StatusPageSubscriberWebhook.js +24 -0
- package/build/dist/Server/Utils/StatusPageSubscriberWebhook.js.map +1 -1
- package/build/dist/Server/Utils/Telemetry/CaptureSpan.js +25 -11
- package/build/dist/Server/Utils/Telemetry/CaptureSpan.js.map +1 -1
- package/build/dist/Server/Utils/Telemetry/IngestionTimestamp.js +32 -0
- package/build/dist/Server/Utils/Telemetry/IngestionTimestamp.js.map +1 -0
- package/build/dist/Server/Utils/Telemetry/ResourceHeartbeat.js +92 -5
- package/build/dist/Server/Utils/Telemetry/ResourceHeartbeat.js.map +1 -1
- package/build/dist/Server/Utils/Telemetry/Telemetry.js +92 -6
- package/build/dist/Server/Utils/Telemetry/Telemetry.js.map +1 -1
- package/build/dist/Server/Utils/Telemetry.js +93 -6
- package/build/dist/Server/Utils/Telemetry.js.map +1 -1
- package/build/dist/Server/Utils/VendorAssets.js +121 -0
- package/build/dist/Server/Utils/VendorAssets.js.map +1 -0
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.js +25 -4
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.js.map +1 -1
- package/build/dist/Server/Utils/Workspace/Slack/Slack.js +5 -0
- package/build/dist/Server/Utils/Workspace/Slack/Slack.js.map +1 -1
- package/build/dist/Types/AI/AIRunCodeFixRecommendation.js +18 -0
- package/build/dist/Types/AI/AIRunCodeFixRecommendation.js.map +1 -0
- package/build/dist/Types/AI/CodeFixTaskContext.js +23 -3
- package/build/dist/Types/AI/CodeFixTaskContext.js.map +1 -1
- package/build/dist/Types/AI/CodeFixTaskType.js +3 -3
- package/build/dist/Types/Analytics/RevenueEvent.js +26 -0
- package/build/dist/Types/Analytics/RevenueEvent.js.map +1 -0
- package/build/dist/Types/Dashboard/DashboardComponentType.js +27 -0
- package/build/dist/Types/Dashboard/DashboardComponentType.js.map +1 -1
- package/build/dist/Types/Dashboard/DashboardComponents/DashboardDataSourceChartComponent.js +2 -0
- package/build/dist/Types/Dashboard/DashboardComponents/DashboardDataSourceChartComponent.js.map +1 -0
- package/build/dist/Types/Dashboard/DashboardComponents/DashboardDataSourceGaugeComponent.js +2 -0
- package/build/dist/Types/Dashboard/DashboardComponents/DashboardDataSourceGaugeComponent.js.map +1 -0
- package/build/dist/Types/Dashboard/DashboardComponents/DashboardDataSourceTableComponent.js +2 -0
- package/build/dist/Types/Dashboard/DashboardComponents/DashboardDataSourceTableComponent.js.map +1 -0
- package/build/dist/Types/Dashboard/DashboardComponents/DashboardDataSourceValueComponent.js +16 -0
- package/build/dist/Types/Dashboard/DashboardComponents/DashboardDataSourceValueComponent.js.map +1 -0
- package/build/dist/Types/DataSource/DataSourceLimits.js +47 -0
- package/build/dist/Types/DataSource/DataSourceLimits.js.map +1 -0
- package/build/dist/Types/DataSource/DataSourceQueryConfig.js +10 -0
- package/build/dist/Types/DataSource/DataSourceQueryConfig.js.map +1 -0
- package/build/dist/Types/DataSource/DataSourceTableResult.js +14 -0
- package/build/dist/Types/DataSource/DataSourceTableResult.js.map +1 -0
- package/build/dist/Types/DataSource/DataSourceType.js +183 -0
- package/build/dist/Types/DataSource/DataSourceType.js.map +1 -0
- package/build/dist/Types/Date.js +38 -3
- package/build/dist/Types/Date.js.map +1 -1
- package/build/dist/Types/HashedString.js +4 -3
- package/build/dist/Types/HashedString.js.map +1 -1
- package/build/dist/Types/Monitor/CriteriaFilter.js +4 -0
- package/build/dist/Types/Monitor/CriteriaFilter.js.map +1 -1
- package/build/dist/Types/Monitor/DomainMonitor/DomainLookupMethod.js +24 -0
- package/build/dist/Types/Monitor/DomainMonitor/DomainLookupMethod.js.map +1 -0
- package/build/dist/Types/Monitor/MonitorCriteriaInstance.js +24 -7
- package/build/dist/Types/Monitor/MonitorCriteriaInstance.js.map +1 -1
- package/build/dist/Types/Monitor/MonitorMetricType.js +7 -0
- package/build/dist/Types/Monitor/MonitorMetricType.js.map +1 -1
- package/build/dist/Types/Monitor/MonitorStep.js +6 -1
- package/build/dist/Types/Monitor/MonitorStep.js.map +1 -1
- package/build/dist/Types/Monitor/MonitorStepDomainMonitor.js +15 -0
- package/build/dist/Types/Monitor/MonitorStepDomainMonitor.js.map +1 -1
- package/build/dist/Types/Monitor/PortMonitor/PortMonitorTimings.js +2 -0
- package/build/dist/Types/Monitor/PortMonitor/PortMonitorTimings.js.map +1 -0
- package/build/dist/Types/Password.js +56 -0
- package/build/dist/Types/Password.js.map +1 -0
- package/build/dist/Types/Permission.js +65 -155
- package/build/dist/Types/Permission.js.map +1 -1
- package/build/dist/Types/UserAuthenticationStatus.js +2 -0
- package/build/dist/Types/UserAuthenticationStatus.js.map +1 -0
- package/build/dist/UI/Components/BulkUpdate/BulkUpdateForm.js +2 -5
- package/build/dist/UI/Components/BulkUpdate/BulkUpdateForm.js.map +1 -1
- package/build/dist/UI/Components/ErrorBoundary.js +427 -52
- package/build/dist/UI/Components/ErrorBoundary.js.map +1 -1
- package/build/dist/UI/Components/Feed/FeedItem.js +2 -2
- package/build/dist/UI/Components/Feed/FeedItem.js.map +1 -1
- package/build/dist/UI/Components/Icon/Icon.js +10 -4
- package/build/dist/UI/Components/Icon/Icon.js.map +1 -1
- package/build/dist/UI/Components/Modal/ConfirmModal.js +1 -1
- package/build/dist/UI/Components/Modal/ConfirmModal.js.map +1 -1
- package/build/dist/UI/Components/Modal/Modal.js +178 -19
- package/build/dist/UI/Components/Modal/Modal.js.map +1 -1
- package/build/dist/UI/Components/Modal/ModalFooter.js +3 -1
- package/build/dist/UI/Components/Modal/ModalFooter.js.map +1 -1
- package/build/dist/UI/Components/ModelDetail/CardModelDetail.js +0 -12
- package/build/dist/UI/Components/ModelDetail/CardModelDetail.js.map +1 -1
- package/build/dist/UI/Components/ModelTable/BaseModelTable.js +1 -1
- package/build/dist/UI/Components/ModelTable/BaseModelTable.js.map +1 -1
- package/build/dist/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.js +12 -2
- package/build/dist/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.js.map +1 -1
- package/build/dist/UI/Components/MoreMenu/MoreMenu.js +197 -66
- package/build/dist/UI/Components/MoreMenu/MoreMenu.js.map +1 -1
- package/build/dist/UI/Components/MoreMenu/MoreMenuItem.js +7 -1
- package/build/dist/UI/Components/MoreMenu/MoreMenuItem.js.map +1 -1
- package/build/dist/UI/Components/StatusPage/ResourceGrid.js +119 -0
- package/build/dist/UI/Components/StatusPage/ResourceGrid.js.map +1 -0
- package/build/dist/UI/Components/StatusPage/ResourceGroupNavigator.js +354 -0
- package/build/dist/UI/Components/StatusPage/ResourceGroupNavigator.js.map +1 -0
- package/build/dist/UI/Components/StatusPage/ResourceList.js +203 -0
- package/build/dist/UI/Components/StatusPage/ResourceList.js.map +1 -0
- package/build/dist/UI/Utils/AnalyticsModelAPI/AnalyticsModelAPI.js +1 -6
- package/build/dist/UI/Utils/AnalyticsModelAPI/AnalyticsModelAPI.js.map +1 -1
- package/build/dist/UI/Utils/DownloadFile.js +15 -8
- package/build/dist/UI/Utils/DownloadFile.js.map +1 -1
- package/build/dist/UI/Utils/ErrorSupportBundle.js +476 -0
- package/build/dist/UI/Utils/ErrorSupportBundle.js.map +1 -0
- package/build/dist/UI/Utils/ModelAPI/ModelAPI.js +20 -15
- package/build/dist/UI/Utils/ModelAPI/ModelAPI.js.map +1 -1
- package/build/dist/UI/Utils/Project.js +3 -0
- package/build/dist/UI/Utils/Project.js.map +1 -1
- package/build/dist/UI/Utils/StatusPage.js +4 -4
- package/build/dist/UI/Utils/StatusPage.js.map +1 -1
- package/build/dist/UI/Utils/TestDataSource.js +39 -0
- package/build/dist/UI/Utils/TestDataSource.js.map +1 -0
- package/build/dist/UI/Utils/UseDashboardGridDnd.js +551 -0
- package/build/dist/UI/Utils/UseDashboardGridDnd.js.map +1 -0
- package/build/dist/Utils/Analytics.js +4 -0
- package/build/dist/Utils/Analytics.js.map +1 -1
- package/build/dist/Utils/Dashboard/Components/DashboardDataSourceChartComponent.js +79 -0
- package/build/dist/Utils/Dashboard/Components/DashboardDataSourceChartComponent.js.map +1 -0
- package/build/dist/Utils/Dashboard/Components/DashboardDataSourceGaugeComponent.js +111 -0
- package/build/dist/Utils/Dashboard/Components/DashboardDataSourceGaugeComponent.js.map +1 -0
- package/build/dist/Utils/Dashboard/Components/DashboardDataSourceShared.js +15 -0
- package/build/dist/Utils/Dashboard/Components/DashboardDataSourceShared.js.map +1 -0
- package/build/dist/Utils/Dashboard/Components/DashboardDataSourceTableComponent.js +62 -0
- package/build/dist/Utils/Dashboard/Components/DashboardDataSourceTableComponent.js.map +1 -0
- package/build/dist/Utils/Dashboard/Components/DashboardDataSourceValueComponent.js +112 -0
- package/build/dist/Utils/Dashboard/Components/DashboardDataSourceValueComponent.js.map +1 -0
- package/build/dist/Utils/Dashboard/Components/Index.js +16 -0
- package/build/dist/Utils/Dashboard/Components/Index.js.map +1 -1
- package/build/dist/Utils/Dashboard/DashboardViewConfig.js +42 -26
- package/build/dist/Utils/Dashboard/DashboardViewConfig.js.map +1 -1
- package/build/dist/Utils/Dashboard/GridLayout.js +338 -0
- package/build/dist/Utils/Dashboard/GridLayout.js.map +1 -0
- package/build/dist/Utils/DataSource/DataSourceQueryText.js +64 -0
- package/build/dist/Utils/DataSource/DataSourceQueryText.js.map +1 -0
- package/build/dist/Utils/DataSource/DataSourceValueReducer.js +124 -0
- package/build/dist/Utils/DataSource/DataSourceValueReducer.js.map +1 -0
- package/build/dist/Utils/Metrics/MetricResourceAttributeUtil.js +281 -0
- package/build/dist/Utils/Metrics/MetricResourceAttributeUtil.js.map +1 -0
- package/build/dist/Utils/Metrics/RecordingRuleExpression.js +19 -17
- package/build/dist/Utils/Metrics/RecordingRuleExpression.js.map +1 -1
- package/build/dist/Utils/Monitor/MonitorMetricType.js +38 -6
- package/build/dist/Utils/Monitor/MonitorMetricType.js.map +1 -1
- package/build/dist/Utils/NetworkDiscovery/ScanTargetUtil.js +8 -6
- package/build/dist/Utils/NetworkDiscovery/ScanTargetUtil.js.map +1 -1
- package/build/dist/Utils/StatusPage/GroupHierarchyView.js +560 -0
- package/build/dist/Utils/StatusPage/GroupHierarchyView.js.map +1 -0
- package/build/dist/Utils/StatusPage/GroupNestingLayout.js +46 -0
- package/build/dist/Utils/StatusPage/GroupNestingLayout.js.map +1 -1
- package/build/dist/Utils/StatusPage/GroupTree.js +79 -34
- package/build/dist/Utils/StatusPage/GroupTree.js.map +1 -1
- package/build/dist/Utils/StatusPage/ResourceExplorer.js +519 -0
- package/build/dist/Utils/StatusPage/ResourceExplorer.js.map +1 -0
- package/build/dist/Utils/StatusPage/ResourceUptime.js +22 -1
- package/build/dist/Utils/StatusPage/ResourceUptime.js.map +1 -1
- package/build/dist/Utils/Telemetry/SavedViewTimeRange.js +79 -0
- package/build/dist/Utils/Telemetry/SavedViewTimeRange.js.map +1 -0
- package/build/dist/Utils/Telemetry/TelemetryQueryTimeRange.js +236 -0
- package/build/dist/Utils/Telemetry/TelemetryQueryTimeRange.js.map +1 -0
- package/jest.config.json +1 -0
- package/package.json +5 -1
- package/tsconfig.json +12 -10
|
@@ -1,7 +1,13 @@
|
|
|
1
1
|
import ObjectID from "../../../../Types/ObjectID";
|
|
2
2
|
import AIRunType from "../../../../Types/AI/AIRunType";
|
|
3
3
|
import AIRunStatus from "../../../../Types/AI/AIRunStatus";
|
|
4
|
+
import AIRunCodeFixRecommendation from "../../../../Types/AI/AIRunCodeFixRecommendation";
|
|
5
|
+
import CodeFixTaskContext, {
|
|
6
|
+
getInvestigationCodeFixTaskSnapshot,
|
|
7
|
+
InvestigationCodeFixTaskSnapshot,
|
|
8
|
+
} from "../../../../Types/AI/CodeFixTaskContext";
|
|
4
9
|
import CodeFixTaskType from "../../../../Types/AI/CodeFixTaskType";
|
|
10
|
+
import SortOrder from "../../../../Types/BaseDatabase/SortOrder";
|
|
5
11
|
import BadDataException from "../../../../Types/Exception/BadDataException";
|
|
6
12
|
import AIRun from "../../../../Models/DatabaseModels/AIRun";
|
|
7
13
|
import Project from "../../../../Models/DatabaseModels/Project";
|
|
@@ -9,6 +15,7 @@ import AIRunService from "../../../Services/AIRunService";
|
|
|
9
15
|
import ProjectService from "../../../Services/ProjectService";
|
|
10
16
|
import FixRunBudget, { FixRunBudgetDecision } from "../CodeFix/FixRunBudget";
|
|
11
17
|
import SubjectCodeFixRun from "./SubjectCodeFixRun";
|
|
18
|
+
import PostedRootCause from "./PostedRootCause";
|
|
12
19
|
import logger from "../../Logger";
|
|
13
20
|
import CaptureSpan from "../../Telemetry/CaptureSpan";
|
|
14
21
|
|
|
@@ -17,28 +24,32 @@ import CaptureSpan from "../../Telemetry/CaptureSpan";
|
|
|
17
24
|
* capability, vision §4.8), in two forms:
|
|
18
25
|
*
|
|
19
26
|
* HUMAN-TRIGGERED: after an AI investigation posts a root-cause analysis on
|
|
20
|
-
* an incident or alert
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
* No project opt-in flag is needed for
|
|
24
|
-
*
|
|
25
|
-
*
|
|
26
|
-
* message when a gate is not met.
|
|
27
|
+
* an incident or alert and records a Recommended code-fix decision, the user
|
|
28
|
+
* can click "Open Fix PR from this analysis" on the investigation panel: the
|
|
29
|
+
* agent takes the immutable stored copy of that posted analysis as its
|
|
30
|
+
* context and opens a fix pull request. No project opt-in flag is needed for
|
|
31
|
+
* this form, but the durable recommendation remains a server-side gate so a
|
|
32
|
+
* stale or forged client cannot turn a non-code investigation into a PR.
|
|
27
33
|
*
|
|
28
|
-
* AUTOMATIC: for projects that opted in
|
|
29
|
-
* default FALSE — G11 posture:
|
|
30
|
-
*
|
|
31
|
-
*
|
|
32
|
-
*
|
|
33
|
-
*
|
|
34
|
-
*
|
|
34
|
+
* AUTOMATIC: for projects that opted in through the subject lane's incident
|
|
35
|
+
* or alert automatic-code-fix setting (default FALSE — G11 posture:
|
|
36
|
+
* autonomous PR creation is opt-in only), an
|
|
37
|
+
* investigation that ends with a POSITIVE code-fix classification (per the
|
|
38
|
+
* structured G6 signal, never a regex over the analysis prose) enqueues the
|
|
39
|
+
* same FixFromIncident task with no human click. Confidence alone is not
|
|
40
|
+
* sufficient: operational and other non-code causes do not open PRs. Like its
|
|
41
|
+
* InstrumentationTaskTrigger sibling it runs only after the Recommended
|
|
42
|
+
* decision and snapshot are durable, and it never throws. The PR still opens as a
|
|
35
43
|
* DRAFT and is always human-reviewed — the opt-in moves the human gate from
|
|
36
44
|
* PR creation to PR review, never past it.
|
|
37
45
|
*/
|
|
38
46
|
|
|
39
47
|
export interface AutoFixTaskGateInput {
|
|
40
|
-
// The project row with enableAi +
|
|
48
|
+
// The project row with enableAi + the subject lane's opt-in selected.
|
|
41
49
|
project: Project | null;
|
|
50
|
+
// Exactly one subject selects the incident or alert opt-in.
|
|
51
|
+
incidentId?: ObjectID | undefined;
|
|
52
|
+
alertId?: ObjectID | undefined;
|
|
42
53
|
// Whether the project has at least one GitHub-App-connected repository.
|
|
43
54
|
hasConnectedRepository: boolean;
|
|
44
55
|
// A non-terminal FixFromIncident run for the same subject, if any.
|
|
@@ -59,19 +70,27 @@ export default class FixFromIncidentTaskTrigger {
|
|
|
59
70
|
* incidentId/alertId is expected; userId is the clicking user
|
|
60
71
|
* (attribution on the run).
|
|
61
72
|
*
|
|
62
|
-
* Throws BadDataException naming the failed gate: no
|
|
63
|
-
* investigation, no GitHub-App repository, or a
|
|
73
|
+
* Throws BadDataException naming the failed gate: no latest
|
|
74
|
+
* completed/recommended investigation, no GitHub-App repository, or a
|
|
75
|
+
* duplicate active run.
|
|
64
76
|
*/
|
|
65
77
|
@CaptureSpan()
|
|
66
78
|
public static async createFixTaskFromInvestigation(data: {
|
|
67
79
|
projectId: ObjectID;
|
|
80
|
+
investigationRunId: ObjectID;
|
|
68
81
|
incidentId?: ObjectID | undefined;
|
|
69
82
|
alertId?: ObjectID | undefined;
|
|
70
83
|
userId: ObjectID;
|
|
71
84
|
}): Promise<AIRun> {
|
|
72
|
-
if (!data.
|
|
85
|
+
if (!data.investigationRunId) {
|
|
73
86
|
throw new BadDataException(
|
|
74
|
-
"An
|
|
87
|
+
"An investigation run id is required to create a fix task.",
|
|
88
|
+
);
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
if (Boolean(data.incidentId) === Boolean(data.alertId)) {
|
|
92
|
+
throw new BadDataException(
|
|
93
|
+
"Exactly one incident or alert subject is required to create a fix task.",
|
|
75
94
|
);
|
|
76
95
|
}
|
|
77
96
|
|
|
@@ -80,28 +99,119 @@ export default class FixFromIncidentTaskTrigger {
|
|
|
80
99
|
: "alert";
|
|
81
100
|
|
|
82
101
|
/*
|
|
83
|
-
* Gate 1:
|
|
84
|
-
*
|
|
85
|
-
*
|
|
102
|
+
* Gate 1: inspect the LATEST investigation for the subject, matching the
|
|
103
|
+
* run shown by the dashboard panel. Its durable recommendation is the
|
|
104
|
+
* server-authored decision about whether a code fix is appropriate, and
|
|
105
|
+
* its taskContext carries the exact posted analysis that decision covered.
|
|
106
|
+
* An older Recommended run must never override a newer NotRecommended,
|
|
107
|
+
* Running or failed result.
|
|
86
108
|
*/
|
|
87
|
-
const
|
|
109
|
+
const latestInvestigation: AIRun | null = await AIRunService.findOneBy({
|
|
88
110
|
query: {
|
|
111
|
+
projectId: data.projectId,
|
|
89
112
|
runType: AIRunType.Investigation,
|
|
90
|
-
status: AIRunStatus.Completed,
|
|
91
113
|
...(data.incidentId
|
|
92
114
|
? { triggeredByIncidentId: data.incidentId }
|
|
93
115
|
: { triggeredByAlertId: data.alertId! }),
|
|
94
116
|
},
|
|
95
|
-
select: {
|
|
117
|
+
select: {
|
|
118
|
+
_id: true,
|
|
119
|
+
completedAt: true,
|
|
120
|
+
status: true,
|
|
121
|
+
codeFixRecommendation: true,
|
|
122
|
+
taskContext: true,
|
|
123
|
+
},
|
|
124
|
+
sort: { createdAt: SortOrder.Descending },
|
|
96
125
|
props: { isRoot: true },
|
|
97
126
|
});
|
|
98
127
|
|
|
99
|
-
if (!
|
|
128
|
+
if (!latestInvestigation) {
|
|
100
129
|
throw new BadDataException(
|
|
101
130
|
`No completed AI investigation exists for this ${subjectLabel} — the fix task uses the investigation's posted analysis as its context. Wait for the investigation to complete, or enable AI investigations in the AI settings.`,
|
|
102
131
|
);
|
|
103
132
|
}
|
|
104
133
|
|
|
134
|
+
if (
|
|
135
|
+
latestInvestigation.id?.toString() !== data.investigationRunId.toString()
|
|
136
|
+
) {
|
|
137
|
+
throw new BadDataException(
|
|
138
|
+
`A newer AI investigation is now available for this ${subjectLabel}. Refresh the page before creating a fix task.`,
|
|
139
|
+
);
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
if (latestInvestigation.status !== AIRunStatus.Completed) {
|
|
143
|
+
throw new BadDataException(
|
|
144
|
+
`The latest AI investigation for this ${subjectLabel} has not completed, so a fix task cannot be created from an older analysis. Wait for the latest investigation to complete successfully.`,
|
|
145
|
+
);
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
if (
|
|
149
|
+
latestInvestigation.codeFixRecommendation ===
|
|
150
|
+
AIRunCodeFixRecommendation.Pending
|
|
151
|
+
) {
|
|
152
|
+
throw new BadDataException(
|
|
153
|
+
`The latest AI investigation for this ${subjectLabel} is still deciding whether a code fix is appropriate. Wait for that recommendation to finish before creating a fix task.`,
|
|
154
|
+
);
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
if (
|
|
158
|
+
latestInvestigation.codeFixRecommendation !==
|
|
159
|
+
AIRunCodeFixRecommendation.Recommended
|
|
160
|
+
) {
|
|
161
|
+
throw new BadDataException(
|
|
162
|
+
`The latest AI investigation for this ${subjectLabel} did not recommend a code fix, so a fix pull request task cannot be created from it.`,
|
|
163
|
+
);
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
/*
|
|
167
|
+
* Gate the same immutable pair the worker will consume. A Recommended
|
|
168
|
+
* row without a complete snapshot (or whose snapshot names another run)
|
|
169
|
+
* is unsafe: looking up the subject's latest feed item would allow a
|
|
170
|
+
* later investigation to change the task after this authorization check.
|
|
171
|
+
*/
|
|
172
|
+
const investigationSnapshot: InvestigationCodeFixTaskSnapshot | null =
|
|
173
|
+
getInvestigationCodeFixTaskSnapshot(latestInvestigation.taskContext);
|
|
174
|
+
|
|
175
|
+
if (
|
|
176
|
+
!latestInvestigation.id ||
|
|
177
|
+
!investigationSnapshot ||
|
|
178
|
+
investigationSnapshot.investigationRunId !==
|
|
179
|
+
latestInvestigation.id.toString()
|
|
180
|
+
) {
|
|
181
|
+
throw new BadDataException(
|
|
182
|
+
`The latest AI investigation for this ${subjectLabel} has no complete stored analysis snapshot, so a fix task cannot be created safely. Run a new investigation and try again.`,
|
|
183
|
+
);
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
/*
|
|
187
|
+
* The feed item is the published report the user actually saw. Resolve
|
|
188
|
+
* it by the exact run association added to the feed model, then require
|
|
189
|
+
* it to match the durable recommendation snapshot. A missing or
|
|
190
|
+
* mismatched report fails closed instead of silently borrowing a newer
|
|
191
|
+
* subject-level RootCause.
|
|
192
|
+
*/
|
|
193
|
+
const analysisMarkdown: string | null =
|
|
194
|
+
await PostedRootCause.getForInvestigation({
|
|
195
|
+
incidentId: data.incidentId,
|
|
196
|
+
alertId: data.alertId,
|
|
197
|
+
aiRunId: data.investigationRunId,
|
|
198
|
+
runCompletedAt: latestInvestigation.completedAt,
|
|
199
|
+
});
|
|
200
|
+
|
|
201
|
+
if (!analysisMarkdown) {
|
|
202
|
+
throw new BadDataException(
|
|
203
|
+
`No posted investigation analysis exists for this ${subjectLabel} and investigation run. Refresh the page and wait for the report to finish publishing before creating a fix task.`,
|
|
204
|
+
);
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
if (
|
|
208
|
+
analysisMarkdown !== investigationSnapshot.investigationAnalysisMarkdown
|
|
209
|
+
) {
|
|
210
|
+
throw new BadDataException(
|
|
211
|
+
`The posted investigation analysis for this ${subjectLabel} does not match its durable recommendation snapshot. Run a new investigation before creating a fix task.`,
|
|
212
|
+
);
|
|
213
|
+
}
|
|
214
|
+
|
|
105
215
|
// Gate 2: a repository the agent can actually open a PR against.
|
|
106
216
|
const hasConnectedRepository: boolean =
|
|
107
217
|
await SubjectCodeFixRun.hasGitHubAppConnectedRepository(data.projectId);
|
|
@@ -136,6 +246,10 @@ export default class FixFromIncidentTaskTrigger {
|
|
|
136
246
|
incidentId: data.incidentId,
|
|
137
247
|
alertId: data.alertId,
|
|
138
248
|
userId: data.userId,
|
|
249
|
+
taskContext: {
|
|
250
|
+
sourceInvestigationRunId: data.investigationRunId.toString(),
|
|
251
|
+
sourceInvestigationAnalysisMarkdown: analysisMarkdown,
|
|
252
|
+
},
|
|
139
253
|
});
|
|
140
254
|
}
|
|
141
255
|
|
|
@@ -143,9 +257,8 @@ export default class FixFromIncidentTaskTrigger {
|
|
|
143
257
|
* The pure trigger decision for the AUTOMATIC form, separated from IO so
|
|
144
258
|
* it can be tested directly: strict opt-in (default FALSE), a repository
|
|
145
259
|
* the agent can actually open a PR against, and the per-subject dedupe
|
|
146
|
-
* guard. The caller has already established the
|
|
147
|
-
*
|
|
148
|
-
* by AIConfidenceSignal.shouldAutoEnqueueCodeFixTask).
|
|
260
|
+
* guard. The caller has already established and durably persisted the
|
|
261
|
+
* code-fix-recommended investigation prerequisite.
|
|
149
262
|
*/
|
|
150
263
|
public static shouldAutoEnqueueFixTask(
|
|
151
264
|
input: AutoFixTaskGateInput,
|
|
@@ -162,10 +275,21 @@ export default class FixFromIncidentTaskTrigger {
|
|
|
162
275
|
* Strict opt-in — the column defaults to false, so unset/legacy rows
|
|
163
276
|
* never enqueue. Autonomous PR creation must never be default-on.
|
|
164
277
|
*/
|
|
165
|
-
if (input.
|
|
278
|
+
if (Boolean(input.incidentId) === Boolean(input.alertId)) {
|
|
279
|
+
return {
|
|
280
|
+
enqueue: false,
|
|
281
|
+
reason: "exactly one incident or alert subject is required",
|
|
282
|
+
};
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
const automaticCodeFixesEnabled: boolean = input.incidentId
|
|
286
|
+
? input.project.enableAutomaticIncidentCodeFixes === true
|
|
287
|
+
: input.project.enableAutomaticAlertCodeFixes === true;
|
|
288
|
+
|
|
289
|
+
if (!automaticCodeFixesEnabled) {
|
|
166
290
|
return {
|
|
167
291
|
enqueue: false,
|
|
168
|
-
reason:
|
|
292
|
+
reason: `project has not opted in to automatic ${input.incidentId ? "incident" : "alert"} code fixes`,
|
|
169
293
|
};
|
|
170
294
|
}
|
|
171
295
|
|
|
@@ -197,31 +321,52 @@ export default class FixFromIncidentTaskTrigger {
|
|
|
197
321
|
|
|
198
322
|
/*
|
|
199
323
|
* The AUTOMATIC form: enqueue a FixFromIncident run for a subject whose
|
|
200
|
-
* investigation
|
|
324
|
+
* latest investigation durably recommends a repository code fix. Exactly one of
|
|
201
325
|
* incidentId/alertId is expected. NEVER throws — every failure is logged
|
|
202
|
-
* and swallowed, because this
|
|
203
|
-
*
|
|
326
|
+
* and swallowed, because this is a best-effort post-recommendation
|
|
327
|
+
* follow-up and must not fail the investigation. No userId: the run stays
|
|
204
328
|
* system-authored.
|
|
205
329
|
*/
|
|
206
330
|
@CaptureSpan()
|
|
207
|
-
public static async
|
|
331
|
+
public static async autoEnqueueFromRecommendedInvestigation(data: {
|
|
208
332
|
projectId: ObjectID;
|
|
333
|
+
investigationRunId: ObjectID;
|
|
334
|
+
analysisMarkdown: string;
|
|
209
335
|
incidentId?: ObjectID | undefined;
|
|
210
336
|
alertId?: ObjectID | undefined;
|
|
211
337
|
}): Promise<void> {
|
|
212
338
|
const { projectId } = data;
|
|
213
339
|
|
|
214
340
|
try {
|
|
215
|
-
if (
|
|
341
|
+
if (Boolean(data.incidentId) === Boolean(data.alertId)) {
|
|
342
|
+
return;
|
|
343
|
+
}
|
|
344
|
+
|
|
345
|
+
const taskContext: CodeFixTaskContext = {
|
|
346
|
+
sourceInvestigationRunId: data.investigationRunId?.toString(),
|
|
347
|
+
sourceInvestigationAnalysisMarkdown: data.analysisMarkdown,
|
|
348
|
+
};
|
|
349
|
+
const investigationSnapshot: InvestigationCodeFixTaskSnapshot | null =
|
|
350
|
+
getInvestigationCodeFixTaskSnapshot(taskContext);
|
|
351
|
+
|
|
352
|
+
if (!investigationSnapshot) {
|
|
353
|
+
logger.error(
|
|
354
|
+
`AI: not auto-enqueueing fix task for project ${projectId.toString()} — the recommended investigation has no complete stored analysis snapshot.`,
|
|
355
|
+
);
|
|
216
356
|
return;
|
|
217
357
|
}
|
|
218
358
|
|
|
219
359
|
const project: Project | null = await ProjectService.findOneById({
|
|
220
360
|
id: projectId,
|
|
221
|
-
select:
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
361
|
+
select: data.incidentId
|
|
362
|
+
? {
|
|
363
|
+
enableAi: true,
|
|
364
|
+
enableAutomaticIncidentCodeFixes: true,
|
|
365
|
+
}
|
|
366
|
+
: {
|
|
367
|
+
enableAi: true,
|
|
368
|
+
enableAutomaticAlertCodeFixes: true,
|
|
369
|
+
},
|
|
225
370
|
props: { isRoot: true },
|
|
226
371
|
});
|
|
227
372
|
|
|
@@ -232,6 +377,8 @@ export default class FixFromIncidentTaskTrigger {
|
|
|
232
377
|
const optInDecision: AutoFixTaskGateDecision =
|
|
233
378
|
this.shouldAutoEnqueueFixTask({
|
|
234
379
|
project,
|
|
380
|
+
incidentId: data.incidentId,
|
|
381
|
+
alertId: data.alertId,
|
|
235
382
|
hasConnectedRepository: true,
|
|
236
383
|
existingRun: null,
|
|
237
384
|
});
|
|
@@ -243,17 +390,73 @@ export default class FixFromIncidentTaskTrigger {
|
|
|
243
390
|
return;
|
|
244
391
|
}
|
|
245
392
|
|
|
393
|
+
/*
|
|
394
|
+
* Re-read the authoritative latest source after the engine has durably
|
|
395
|
+
* settled it. This prevents an older overlapping investigation from
|
|
396
|
+
* auto-authorizing a task after a newer run became authoritative, and
|
|
397
|
+
* guarantees a task is never claimable while its source is Pending.
|
|
398
|
+
*/
|
|
399
|
+
const latestInvestigation: AIRun | null = await AIRunService.findOneBy({
|
|
400
|
+
query: {
|
|
401
|
+
projectId,
|
|
402
|
+
runType: AIRunType.Investigation,
|
|
403
|
+
...(data.incidentId
|
|
404
|
+
? { triggeredByIncidentId: data.incidentId }
|
|
405
|
+
: { triggeredByAlertId: data.alertId! }),
|
|
406
|
+
},
|
|
407
|
+
select: {
|
|
408
|
+
_id: true,
|
|
409
|
+
status: true,
|
|
410
|
+
codeFixRecommendation: true,
|
|
411
|
+
taskContext: true,
|
|
412
|
+
},
|
|
413
|
+
sort: { createdAt: SortOrder.Descending },
|
|
414
|
+
props: { isRoot: true },
|
|
415
|
+
});
|
|
416
|
+
const persistedSnapshot: InvestigationCodeFixTaskSnapshot | null =
|
|
417
|
+
getInvestigationCodeFixTaskSnapshot(latestInvestigation?.taskContext);
|
|
418
|
+
|
|
419
|
+
if (
|
|
420
|
+
!latestInvestigation?.id ||
|
|
421
|
+
latestInvestigation.id.toString() !==
|
|
422
|
+
data.investigationRunId.toString() ||
|
|
423
|
+
latestInvestigation.status !== AIRunStatus.Completed ||
|
|
424
|
+
latestInvestigation.codeFixRecommendation !==
|
|
425
|
+
AIRunCodeFixRecommendation.Recommended ||
|
|
426
|
+
!persistedSnapshot ||
|
|
427
|
+
persistedSnapshot.investigationRunId !==
|
|
428
|
+
data.investigationRunId.toString() ||
|
|
429
|
+
persistedSnapshot.investigationAnalysisMarkdown !==
|
|
430
|
+
investigationSnapshot.investigationAnalysisMarkdown
|
|
431
|
+
) {
|
|
432
|
+
logger.debug(
|
|
433
|
+
`AI: not auto-enqueueing fix task for project ${projectId.toString()} — the source is no longer the latest durably Recommended investigation.`,
|
|
434
|
+
);
|
|
435
|
+
return;
|
|
436
|
+
}
|
|
437
|
+
|
|
246
438
|
/*
|
|
247
439
|
* G11 guardrail: the per-project daily fix-run budget. For this
|
|
248
440
|
* AUTOMATIC trigger, over-budget is a logged skip — never an error
|
|
249
441
|
* thrown into the investigation.
|
|
250
442
|
*/
|
|
251
|
-
const budget: FixRunBudgetDecision =
|
|
252
|
-
|
|
443
|
+
const budget: FixRunBudgetDecision = await FixRunBudget.getBudgetStatus(
|
|
444
|
+
projectId,
|
|
445
|
+
{
|
|
446
|
+
incidentId: data.incidentId,
|
|
447
|
+
alertId: data.alertId,
|
|
448
|
+
},
|
|
449
|
+
);
|
|
253
450
|
|
|
254
451
|
if (!budget.allowed) {
|
|
255
452
|
logger.debug(
|
|
256
|
-
`AI: not auto-enqueueing fix task for project ${projectId.toString()} — ${FixRunBudget.describeRejection(
|
|
453
|
+
`AI: not auto-enqueueing fix task for project ${projectId.toString()} — ${FixRunBudget.describeRejection(
|
|
454
|
+
budget,
|
|
455
|
+
{
|
|
456
|
+
incidentId: data.incidentId,
|
|
457
|
+
alertId: data.alertId,
|
|
458
|
+
},
|
|
459
|
+
)}`,
|
|
257
460
|
);
|
|
258
461
|
return;
|
|
259
462
|
}
|
|
@@ -270,6 +473,8 @@ export default class FixFromIncidentTaskTrigger {
|
|
|
270
473
|
|
|
271
474
|
const decision: AutoFixTaskGateDecision = this.shouldAutoEnqueueFixTask({
|
|
272
475
|
project,
|
|
476
|
+
incidentId: data.incidentId,
|
|
477
|
+
alertId: data.alertId,
|
|
273
478
|
hasConnectedRepository,
|
|
274
479
|
existingRun,
|
|
275
480
|
});
|
|
@@ -287,6 +492,10 @@ export default class FixFromIncidentTaskTrigger {
|
|
|
287
492
|
taskType: CodeFixTaskType.FixFromIncident,
|
|
288
493
|
incidentId: data.incidentId,
|
|
289
494
|
alertId: data.alertId,
|
|
495
|
+
taskContext: {
|
|
496
|
+
sourceInvestigationRunId: data.investigationRunId.toString(),
|
|
497
|
+
sourceInvestigationAnalysisMarkdown: data.analysisMarkdown,
|
|
498
|
+
},
|
|
290
499
|
});
|
|
291
500
|
|
|
292
501
|
logger.debug(
|
|
@@ -216,6 +216,8 @@ export default class AIIncidentInvestigationRunner {
|
|
|
216
216
|
projectId,
|
|
217
217
|
monitorId: QueryHelper.any(monitorIds),
|
|
218
218
|
runType: AIRunType.Investigation,
|
|
219
|
+
triggeredByIncidentId: QueryHelper.notNull(),
|
|
220
|
+
triggeredByAlertId: QueryHelper.isNull(),
|
|
219
221
|
createdAt: QueryHelper.greaterThan(windowStart),
|
|
220
222
|
},
|
|
221
223
|
props: { isRoot: true },
|
|
@@ -349,7 +351,10 @@ export default class AIIncidentInvestigationRunner {
|
|
|
349
351
|
request: {
|
|
350
352
|
// Persisted LlmLog label — owned by AIService (G4 budget list).
|
|
351
353
|
feature: AI_INCIDENT_INVESTIGATION_FEATURE,
|
|
354
|
+
incidentId,
|
|
352
355
|
contextSummary,
|
|
356
|
+
persistCodeFixRecommendation: true,
|
|
357
|
+
persistAnalysisTldr: true,
|
|
353
358
|
postAnalysis: async (postData: {
|
|
354
359
|
analysisMarkdown: string;
|
|
355
360
|
confidence: ConfidenceSignal;
|
|
@@ -358,6 +363,7 @@ export default class AIIncidentInvestigationRunner {
|
|
|
358
363
|
await IncidentFeedService.createIncidentFeedItem({
|
|
359
364
|
incidentId,
|
|
360
365
|
projectId,
|
|
366
|
+
aiRunId,
|
|
361
367
|
incidentFeedEventType: IncidentFeedEventType.RootCause,
|
|
362
368
|
displayColor: Blue500,
|
|
363
369
|
feedInfoInMarkdown: postData.analysisMarkdown,
|
|
@@ -421,7 +427,7 @@ export default class AIIncidentInvestigationRunner {
|
|
|
421
427
|
|
|
422
428
|
/*
|
|
423
429
|
* Inconclusive means the telemetry was insufficient — for
|
|
424
|
-
* opted-in projects (
|
|
430
|
+
* opted-in projects (the incident instrumentation-fix setting,
|
|
425
431
|
* default false), queue an ImproveInstrumentation fix task that
|
|
426
432
|
* opens a PR adding the missing observability. Runs strictly
|
|
427
433
|
* AFTER the analysis is posted, and the trigger never throws, so
|
|
@@ -442,29 +448,25 @@ export default class AIIncidentInvestigationRunner {
|
|
|
442
448
|
},
|
|
443
449
|
);
|
|
444
450
|
}
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
incidentId,
|
|
465
|
-
},
|
|
466
|
-
);
|
|
467
|
-
}
|
|
451
|
+
},
|
|
452
|
+
/*
|
|
453
|
+
* The engine calls this only after it atomically persists Recommended
|
|
454
|
+
* with the exact posted analysis snapshot. That durable decision is
|
|
455
|
+
* the prerequisite for the optional automatic FixFromIncident task;
|
|
456
|
+
* the trigger then applies the incident lane's independent opt-in and
|
|
457
|
+
* remaining repository, budget and dedupe gates.
|
|
458
|
+
*/
|
|
459
|
+
onCodeFixRecommended: async (data: {
|
|
460
|
+
analysisMarkdown: string;
|
|
461
|
+
}): Promise<void> => {
|
|
462
|
+
await FixFromIncidentTaskTrigger.autoEnqueueFromRecommendedInvestigation(
|
|
463
|
+
{
|
|
464
|
+
projectId,
|
|
465
|
+
investigationRunId: aiRunId,
|
|
466
|
+
analysisMarkdown: data.analysisMarkdown,
|
|
467
|
+
incidentId,
|
|
468
|
+
},
|
|
469
|
+
);
|
|
468
470
|
},
|
|
469
471
|
/*
|
|
470
472
|
* RCA-first ordering: auto-remediation for this incident was
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
import ObjectID from "../../../../../../Types/ObjectID";
|
|
2
|
+
import Crypto from "../../../../../../Utils/Crypto";
|
|
3
|
+
import { normalizeExceptionText } from "../../../../Telemetry/ExceptionSanitizer";
|
|
4
|
+
|
|
5
|
+
/*
|
|
6
|
+
* Shared exception identity for the two exception detectors (NewException and
|
|
7
|
+
* ExceptionSpike).
|
|
8
|
+
*
|
|
9
|
+
* THE PROBLEM THIS SOLVES. A TelemetryException GROUP is keyed at ingest on
|
|
10
|
+
* sha256(projectId + primaryEntityId + normalizedMessage + normalizedStackTrace
|
|
11
|
+
* + exceptionType) — the STACK TRACE is part of that key. One logical failure
|
|
12
|
+
* raised from several call sites is therefore several groups, and a detector
|
|
13
|
+
* that emits one insight per group files the same finding several times over.
|
|
14
|
+
* Worse, the insight TITLE used to be the exceptionType alone, so those rows
|
|
15
|
+
* were not merely duplicated, they were indistinguishable: a service whose
|
|
16
|
+
* instrumentation reports `exception.type = "401"` produced a wall of
|
|
17
|
+
* identical "New exception: 401 in api" rows.
|
|
18
|
+
*
|
|
19
|
+
* THE FAILURE MODE is the unit a human actually triages: one service, one
|
|
20
|
+
* exception type, one normalized message. Everything below that (which call
|
|
21
|
+
* stack it surfaced on) is detail that belongs inside the insight, not a
|
|
22
|
+
* separate row in the inbox.
|
|
23
|
+
*/
|
|
24
|
+
|
|
25
|
+
/*
|
|
26
|
+
* How much of the message rides in the insight title. Titles must stay
|
|
27
|
+
* scannable in a list, but they must also carry enough of the message to tell
|
|
28
|
+
* two findings apart — the type alone frequently cannot (HTTP status codes,
|
|
29
|
+
* bare `Error`, `Exception`).
|
|
30
|
+
*/
|
|
31
|
+
export const EXCEPTION_LABEL_MESSAGE_MAX_LENGTH: number = 80;
|
|
32
|
+
|
|
33
|
+
/*
|
|
34
|
+
* Human label for an exception: the type AND the message, because either one
|
|
35
|
+
* alone collides. `TypeError` is not a finding; `TypeError: Cannot read
|
|
36
|
+
* properties of undefined (reading 'user')` is.
|
|
37
|
+
*
|
|
38
|
+
* Only the message is truncated (the type is short by construction), so a
|
|
39
|
+
* label is never longer than the type plus the cap plus the separator.
|
|
40
|
+
*/
|
|
41
|
+
export function buildExceptionLabel(
|
|
42
|
+
exceptionType: string | undefined,
|
|
43
|
+
message: string | undefined,
|
|
44
|
+
messageMaxLength: number = EXCEPTION_LABEL_MESSAGE_MAX_LENGTH,
|
|
45
|
+
): string {
|
|
46
|
+
const type: string = (exceptionType || "").trim();
|
|
47
|
+
const fullMessage: string = (message || "").trim();
|
|
48
|
+
|
|
49
|
+
if (!type && !fullMessage) {
|
|
50
|
+
return "Unknown exception";
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
if (!fullMessage) {
|
|
54
|
+
return type;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
const shortMessage: string =
|
|
58
|
+
fullMessage.length <= messageMaxLength
|
|
59
|
+
? fullMessage
|
|
60
|
+
: `${fullMessage.slice(0, messageMaxLength)}…`;
|
|
61
|
+
|
|
62
|
+
if (!type) {
|
|
63
|
+
return shortMessage;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/*
|
|
67
|
+
* Runtimes routinely prefix the message with the type ("Error: connect
|
|
68
|
+
* ECONNREFUSED", "ValueError: invalid literal"), and some SDKs report the
|
|
69
|
+
* message as the type verbatim. Saying it twice reads as a bug.
|
|
70
|
+
*/
|
|
71
|
+
const lowerType: string = type.toLowerCase();
|
|
72
|
+
const lowerMessage: string = fullMessage.toLowerCase();
|
|
73
|
+
|
|
74
|
+
if (
|
|
75
|
+
lowerMessage === lowerType ||
|
|
76
|
+
lowerMessage.startsWith(`${lowerType}:`) ||
|
|
77
|
+
lowerMessage.startsWith(`${lowerType} `)
|
|
78
|
+
) {
|
|
79
|
+
return shortMessage;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
return `${type}: ${shortMessage}`;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
/*
|
|
86
|
+
* Stable identity of a FAILURE MODE — the dedupe key insights are filed under.
|
|
87
|
+
*
|
|
88
|
+
* (entity, type, normalized message) and deliberately NOT the stack trace:
|
|
89
|
+
* collapsing stack-trace-only variants of one failure into one insight is the
|
|
90
|
+
* entire point. The entity id stays in the clear so a fingerprint is greppable
|
|
91
|
+
* back to a service, and it guarantees the key can never collide across
|
|
92
|
+
* services; the type+message half is hashed so an unbounded telemetry string
|
|
93
|
+
* cannot blow past the fingerprint column.
|
|
94
|
+
*
|
|
95
|
+
* `${exceptionType}|${normalizeExceptionText(message)}` is the SAME signature
|
|
96
|
+
* TelemetryExceptionService.validateNoOpenFixForSimilarException already uses
|
|
97
|
+
* to stop the fix lane opening near-identical pull requests for one throw site
|
|
98
|
+
* ("observed: 15 near-identical PRs for one invalid-uuid throw site"). The
|
|
99
|
+
* insight lane had no equivalent — this is that same rule, applied one stage
|
|
100
|
+
* earlier so the duplicates never reach the inbox in the first place.
|
|
101
|
+
*
|
|
102
|
+
* The RAW message is normalized here rather than the sanitized one: the
|
|
103
|
+
* fingerprint is an identity that MUST stay byte-for-byte stable across ticks
|
|
104
|
+
* and releases (a key that drifts files a duplicate on every drift), and
|
|
105
|
+
* normalizeExceptionText carries exactly that stability contract, while the
|
|
106
|
+
* secret redactor layered on top of it for display does not.
|
|
107
|
+
*/
|
|
108
|
+
export function buildExceptionFailureModeKey(data: {
|
|
109
|
+
primaryEntityId: ObjectID | undefined;
|
|
110
|
+
exceptionType: string | undefined;
|
|
111
|
+
message: string | undefined;
|
|
112
|
+
}): string {
|
|
113
|
+
const entityId: string =
|
|
114
|
+
data.primaryEntityId?.toString() || "unattributed-entity";
|
|
115
|
+
const type: string = (data.exceptionType || "").trim();
|
|
116
|
+
const normalizedMessage: string = normalizeExceptionText(
|
|
117
|
+
(data.message || "").trim(),
|
|
118
|
+
);
|
|
119
|
+
|
|
120
|
+
const contentHash: string = Crypto.getSha256Hash(
|
|
121
|
+
`${type}|${normalizedMessage}`,
|
|
122
|
+
);
|
|
123
|
+
|
|
124
|
+
return `${entityId}:${contentHash}`;
|
|
125
|
+
}
|