@oneuptime/common 11.5.4 → 11.5.5
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/AIAgentTaskPullRequest.ts +56 -45
- package/Models/DatabaseModels/AIInsight.ts +748 -0
- package/Models/DatabaseModels/AIRun.ts +262 -0
- package/Models/DatabaseModels/CodeRepository.ts +42 -0
- package/Models/DatabaseModels/GlobalConfig.ts +105 -0
- package/Models/DatabaseModels/Index.ts +4 -8
- package/Models/DatabaseModels/InstanceHealthLog.ts +277 -0
- package/Models/DatabaseModels/LlmLog.ts +33 -0
- package/Models/DatabaseModels/Project.ts +123 -6
- package/Models/DatabaseModels/Runbook.ts +1 -1
- package/Server/API/AIAgentDataAPI.ts +802 -140
- package/Server/API/AIAgentTaskAPI.ts +132 -69
- package/Server/API/AIAgentTaskLogAPI.ts +65 -41
- package/Server/API/AIAgentTaskPullRequestAPI.ts +41 -0
- package/Server/API/AIInsightAPI.ts +220 -0
- package/Server/API/AIInvestigationAPI.ts +363 -1
- package/Server/API/CodeFixRunAPI.ts +251 -0
- package/Server/API/GitHubAPI.ts +246 -3
- package/Server/API/TelemetryExceptionAPI.ts +193 -48
- package/Server/EnvironmentConfig.ts +1 -1
- package/Server/Infrastructure/Postgres/SchemaMigrations/1783943300000-DropServiceCodeRepository.ts +26 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1783947444597-CodeFixRunsOnAIRun.ts +73 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1783950962813-AddCodeFixTaskType.ts +29 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1783954040984-AddInstrumentationFixTasksFlag.ts +31 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1783957160597-MigrationName.ts +51 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1783958542237-AddTaskContextToAIRun.ts +25 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1783965945957-AddInvestigationVerdictAndGrade.ts +47 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1783970619301-AddFixGuardrailColumns.ts +53 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1783970619302-DropLegacyAIAgentTaskTables.ts +31 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1783977781677-AddCiStatusToFixPullRequests.ts +37 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1783990000000-AddCompletionTokensToLlmLog.ts +25 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1784010274993-AddSentinelInsight.ts +75 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1784010274994-AddSentinelInsightFlags.ts +37 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1784030612266-RenameSentinelToAI.ts +203 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1784033837629-MigrationName.ts +163 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +30 -0
- package/Server/Infrastructure/Queue.ts +82 -4
- package/Server/Infrastructure/Semaphore.ts +62 -1
- package/Server/Services/AIAgentService.ts +32 -0
- package/Server/Services/AIAgentTaskPullRequestService.ts +117 -0
- package/Server/Services/AIInsightService.ts +174 -0
- package/Server/Services/AIRunEventService.ts +63 -0
- package/Server/Services/AIRunService.ts +259 -1
- package/Server/Services/AIService.ts +249 -7
- package/Server/Services/AlertService.ts +4 -4
- package/Server/Services/CodeRepositoryService.ts +209 -0
- package/Server/Services/GlobalConfigService.ts +148 -0
- package/Server/Services/IncidentService.ts +183 -38
- package/Server/Services/IncidentStateTimelineService.ts +24 -4
- package/Server/Services/Index.ts +4 -4
- package/Server/Services/{AIAgentTaskLogService.ts → InstanceHealthLogService.ts} +1 -1
- package/Server/Services/LlmLogService.ts +27 -0
- package/Server/Services/LlmProviderService.ts +108 -0
- package/Server/Services/MetricBaselineService.ts +123 -0
- package/Server/Services/MonitorService.ts +15 -0
- package/Server/Services/TelemetryExceptionService.ts +323 -116
- package/Server/Services/TraceAggregationService.ts +176 -0
- package/Server/Types/Workflow/ComponentCode.ts +6 -0
- package/Server/Types/Workflow/Components/AI/GenerateText.ts +326 -0
- package/Server/Types/Workflow/Components/Index.ts +2 -0
- package/Server/Utils/AI/Chat/ObservabilityAssistant.ts +1 -1
- package/Server/Utils/AI/CodeFix/CodeAgentWorkspaceGuard.ts +71 -0
- package/Server/Utils/AI/CodeFix/CodeFixAgentCompletion.ts +243 -0
- package/Server/Utils/AI/CodeFix/CodeFixRunQueue.ts +131 -0
- package/Server/Utils/AI/CodeFix/FixRunBudget.ts +148 -0
- package/Server/Utils/AI/CodeFix/OpenPullRequestCap.ts +117 -0
- package/Server/Utils/AI/Eval/EvalCorpus.ts +369 -0
- package/Server/Utils/AI/Eval/EvalScores.ts +172 -0
- package/Server/Utils/AI/Eval/ReplayInvestigation.ts +87 -0
- package/Server/Utils/AI/PerfEvidence/SpanTreeAnalyzer.ts +676 -0
- package/Server/Utils/AI/{Sentinel/SentinelInvestigationEngine.ts → SRE/AIInvestigationEngine.ts} +58 -37
- package/Server/Utils/AI/{Sentinel/SentinelMemory.ts → SRE/AIMemory.ts} +3 -3
- package/Server/Utils/AI/{Sentinel → SRE}/AlertInvestigationRunner.ts +50 -20
- package/Server/Utils/AI/SRE/ConfidenceSignal.ts +293 -0
- package/Server/Utils/AI/SRE/FixFromIncidentTaskTrigger.ts +115 -0
- package/Server/Utils/AI/SRE/FixPerformanceTaskTrigger.ts +223 -0
- package/Server/Utils/AI/{Sentinel → SRE}/IncidentInvestigationRunner.ts +71 -21
- package/Server/Utils/AI/{Sentinel → SRE}/IncidentPostmortemRunner.ts +8 -8
- package/Server/Utils/AI/SRE/Insights/Detectors/ErrorLogSpikeDetector.ts +364 -0
- package/Server/Utils/AI/SRE/Insights/Detectors/ExceptionSpikeDetector.ts +317 -0
- package/Server/Utils/AI/SRE/Insights/Detectors/Index.ts +27 -0
- package/Server/Utils/AI/SRE/Insights/Detectors/MetricDriftDetector.ts +221 -0
- package/Server/Utils/AI/SRE/Insights/Detectors/NewExceptionDetector.ts +238 -0
- package/Server/Utils/AI/SRE/Insights/Detectors/TraceLatencyRegressionDetector.ts +521 -0
- package/Server/Utils/AI/SRE/Insights/FixRouting.ts +242 -0
- package/Server/Utils/AI/SRE/Insights/InsightScanner.ts +290 -0
- package/Server/Utils/AI/SRE/Insights/InsightStore.ts +283 -0
- package/Server/Utils/AI/SRE/Insights/InsightTriageRunner.ts +242 -0
- package/Server/Utils/AI/SRE/Insights/Triage.ts +162 -0
- package/Server/Utils/AI/SRE/Insights/Types.ts +49 -0
- package/Server/Utils/AI/SRE/InstrumentationTaskTrigger.ts +212 -0
- package/Server/Utils/AI/SRE/InvestigationGrader.ts +282 -0
- package/Server/Utils/AI/{Sentinel → SRE}/InvestigationQueue.ts +114 -19
- package/Server/Utils/AI/{Sentinel → SRE}/README.md +4 -4
- package/Server/Utils/AI/SRE/SubjectCodeFixRun.ts +172 -0
- package/Server/Utils/AI/Toolbox/{SentinelActionTools.ts → AIActionTools.ts} +22 -1
- package/Server/Utils/AI/Toolbox/Index.ts +2 -2
- package/Server/Utils/AnalyticsDatabase/ClickhouseCapacity.ts +526 -0
- package/Server/Utils/CodeRepository/GitHub/GitHub.ts +319 -1
- package/Server/Utils/CodeRepository/ServiceRepoLinkSuggester.ts +221 -0
- package/Server/Utils/CodeRepository/StackTraceRepoResolver.ts +571 -0
- package/Server/Utils/Execute.ts +2 -1
- package/Server/Utils/LLM/LLMService.ts +160 -30
- package/Server/Utils/Monitor/Criteria/SqlMonitorCriteria.ts +152 -0
- package/Server/Utils/Monitor/MonitorCriteriaEvaluator.ts +29 -0
- package/Tests/Server/Infrastructure/Queue.test.ts +227 -0
- package/Tests/Server/Infrastructure/SemaphorePermit.test.ts +159 -0
- package/Tests/Server/Services/AIAgentTaskPullRequestOutcomeStats.test.ts +154 -0
- package/Tests/Server/Services/AIInsightService.test.ts +324 -0
- package/Tests/Server/Services/AIRunCodeFixClaim.test.ts +401 -0
- package/Tests/Server/Services/AIRunHumanVerdict.test.ts +161 -0
- package/Tests/Server/Services/AIServiceDailyBudget.test.ts +95 -5
- package/Tests/Server/Services/AIServiceProjectAccess.test.ts +259 -0
- package/Tests/Server/Services/FixFromIncidentTaskTrigger.test.ts +249 -0
- package/Tests/Server/Services/FixPerformanceTaskTrigger.test.ts +274 -0
- package/Tests/Server/Services/GlobalConfigService.test.ts +80 -0
- package/Tests/Server/Services/IncidentInternalNoteAnnouncement.test.ts +1 -1
- package/Tests/Server/Services/InstrumentationTaskTrigger.test.ts +313 -0
- package/Tests/Server/Services/LlmProviderProjectOwned.test.ts +132 -0
- package/Tests/Server/Services/TelemetryExceptionAIFixReadiness.test.ts +405 -0
- package/Tests/Server/Services/TelemetryExceptionCodeFixRun.test.ts +322 -0
- package/Tests/Server/Services/TraceServiceLatencyProfile.test.ts +278 -0
- package/Tests/Server/Types/Workflow/Components/AIGenerateText.test.ts +722 -0
- package/Tests/Server/Utils/AI/{SentinelAlertGating.test.ts → AIAlertGating.test.ts} +19 -19
- package/Tests/Server/Utils/AI/AIConfidenceSignal.test.ts +362 -0
- package/Tests/Server/Utils/AI/{SentinelInvestigationQueue.test.ts → AIInvestigationQueue.test.ts} +19 -19
- package/Tests/Server/Utils/AI/CodeAgentWorkspaceGuard.test.ts +138 -0
- package/Tests/Server/Utils/AI/CodeFixAgentCompletion.test.ts +335 -0
- package/Tests/Server/Utils/AI/CodeFixRunQueue.test.ts +134 -0
- package/Tests/Server/Utils/AI/EvalCorpus.test.ts +209 -0
- package/Tests/Server/Utils/AI/EvalScores.test.ts +343 -0
- package/Tests/Server/Utils/AI/FixRunBudget.test.ts +218 -0
- package/Tests/Server/Utils/AI/Insights/ErrorLogSpikeDetector.test.ts +437 -0
- package/Tests/Server/Utils/AI/Insights/ExceptionSpikeDetector.test.ts +287 -0
- package/Tests/Server/Utils/AI/Insights/InsightDetectorsIndex.test.ts +34 -0
- package/Tests/Server/Utils/AI/Insights/InsightFixRouting.test.ts +572 -0
- package/Tests/Server/Utils/AI/Insights/InsightNeverThrowsHardening.test.ts +344 -0
- package/Tests/Server/Utils/AI/Insights/InsightScanner.test.ts +720 -0
- package/Tests/Server/Utils/AI/Insights/InsightStore.test.ts +467 -0
- package/Tests/Server/Utils/AI/Insights/InsightStoreHardening.test.ts +370 -0
- package/Tests/Server/Utils/AI/Insights/InsightTriage.test.ts +210 -0
- package/Tests/Server/Utils/AI/Insights/InsightTriageRunner.test.ts +221 -0
- package/Tests/Server/Utils/AI/Insights/InvestigationQueueInsightSubject.test.ts +328 -0
- package/Tests/Server/Utils/AI/Insights/MetricBaselineDrift.test.ts +182 -0
- package/Tests/Server/Utils/AI/Insights/MetricDriftDetector.test.ts +280 -0
- package/Tests/Server/Utils/AI/Insights/NewExceptionDetector.test.ts +259 -0
- package/Tests/Server/Utils/AI/Insights/TraceLatencyRegressionDetector.test.ts +770 -0
- package/Tests/Server/Utils/AI/InvestigationGrader.test.ts +343 -0
- package/Tests/Server/Utils/AI/LLMServiceRequestPolicy.test.ts +307 -0
- package/Tests/Server/Utils/AI/OpenPullRequestCap.test.ts +170 -0
- package/Tests/Server/Utils/AI/SpanTreeAnalyzer.test.ts +559 -0
- package/Tests/Server/Utils/AnalyticsDatabase/ClickhouseCapacity.test.ts +158 -0
- package/Tests/Server/Utils/GitHubCheckRunsConclusion.test.ts +100 -0
- package/Tests/Server/Utils/GitHubPullRequestStateMapping.test.ts +50 -0
- package/Tests/Server/Utils/Monitor/Criteria/SqlMonitorCriteria.test.ts +266 -0
- package/Tests/Server/Utils/ServiceRepoLinkSuggester.test.ts +167 -0
- package/Tests/Server/Utils/StackTraceRepoResolver.test.ts +527 -0
- package/Tests/Types/AI/AIChatPermissionMode.test.ts +112 -0
- package/Tests/Types/AI/CodeFixTaskType.test.ts +152 -0
- package/Tests/Types/AI/FixPullRequestCiStatus.test.ts +181 -0
- package/Tests/Types/Monitor/MonitorStepSqlMonitor.test.ts +110 -0
- package/Tests/Types/Monitor/SqlDatabaseType.test.ts +55 -0
- package/Tests/Types/Workflow/AIGenerateTextMetadata.test.ts +180 -0
- package/Tests/UI/Components/TableBulkCsvExport.test.tsx +168 -0
- package/Tests/UI/Utils/TableColumnsToCsv.test.ts +523 -0
- package/Types/AI/AIChatTypes.ts +8 -0
- package/Types/AI/AIInsightEvidence.ts +77 -0
- package/Types/AI/AIInsightHumanVerdict.ts +15 -0
- package/Types/AI/AIInsightSeverity.ts +13 -0
- package/Types/AI/AIInsightStatus.ts +38 -0
- package/Types/AI/AIInsightType.ts +41 -0
- package/Types/AI/AIRunAutoGrade.ts +18 -0
- package/Types/AI/AIRunEventType.ts +5 -0
- package/Types/AI/AIRunHumanVerdict.ts +17 -0
- package/Types/AI/AIRunType.ts +6 -0
- package/Types/AI/CodeFixTaskContext.ts +88 -0
- package/Types/AI/CodeFixTaskType.ts +132 -0
- package/Types/AI/FixPullRequestCiStatus.ts +132 -0
- package/Types/BaseDatabase/AggregationIntervalUtil.ts +67 -0
- package/Types/Incident/IncidentMetricType.ts +7 -0
- package/Types/Monitor/CriteriaFilter.ts +8 -0
- package/Types/Monitor/MonitorCriteriaInstance.ts +67 -0
- package/Types/Monitor/MonitorStep.ts +38 -0
- package/Types/Monitor/MonitorStepSqlMonitor.ts +141 -0
- package/Types/Monitor/MonitorType.ts +17 -0
- package/Types/Monitor/SqlDatabaseType.ts +49 -0
- package/Types/Monitor/SqlMonitor/SqlMonitorResponse.ts +28 -0
- package/Types/Permission.ts +11 -95
- package/Types/Probe/ProbeMonitorResponse.ts +2 -0
- package/Types/Runbook/RunbookStep.ts +26 -2
- package/Types/Runbook/RunbookStepType.ts +1 -0
- package/Types/Workflow/Component.ts +13 -0
- package/Types/Workflow/ComponentID.ts +1 -0
- package/Types/Workflow/Components/AI.ts +148 -0
- package/Types/Workflow/Components.ts +8 -0
- package/UI/Components/AI/GenerateFromAIModal.tsx +1 -1
- package/UI/Components/Markdown.tsx/MarkdownViewer.tsx +11 -0
- package/UI/Components/MoreMenu/MoreMenu.tsx +1 -1
- package/UI/Components/Table/Table.tsx +38 -2
- package/UI/Utils/TableColumnsToCsv.ts +385 -0
- package/Utils/Monitor/MonitorMetricType.ts +1 -0
- package/build/dist/Models/DatabaseModels/AIAgentTaskPullRequest.js +59 -45
- package/build/dist/Models/DatabaseModels/AIAgentTaskPullRequest.js.map +1 -1
- package/build/dist/Models/DatabaseModels/AIInsight.js +795 -0
- package/build/dist/Models/DatabaseModels/AIInsight.js.map +1 -0
- package/build/dist/Models/DatabaseModels/AIRun.js +274 -0
- package/build/dist/Models/DatabaseModels/AIRun.js.map +1 -1
- package/build/dist/Models/DatabaseModels/CodeRepository.js +43 -0
- package/build/dist/Models/DatabaseModels/CodeRepository.js.map +1 -1
- package/build/dist/Models/DatabaseModels/GlobalConfig.js +110 -0
- package/build/dist/Models/DatabaseModels/GlobalConfig.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Index.js +4 -8
- package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
- package/build/dist/Models/DatabaseModels/InstanceHealthLog.js +304 -0
- package/build/dist/Models/DatabaseModels/InstanceHealthLog.js.map +1 -0
- package/build/dist/Models/DatabaseModels/LlmLog.js +35 -0
- package/build/dist/Models/DatabaseModels/LlmLog.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Project.js +127 -6
- package/build/dist/Models/DatabaseModels/Project.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Runbook.js +1 -1
- package/build/dist/Models/DatabaseModels/Runbook.js.map +1 -1
- package/build/dist/Server/API/AIAgentDataAPI.js +568 -85
- package/build/dist/Server/API/AIAgentDataAPI.js.map +1 -1
- package/build/dist/Server/API/AIAgentTaskAPI.js +100 -44
- package/build/dist/Server/API/AIAgentTaskAPI.js.map +1 -1
- package/build/dist/Server/API/AIAgentTaskLogAPI.js +49 -25
- package/build/dist/Server/API/AIAgentTaskLogAPI.js.map +1 -1
- package/build/dist/Server/API/AIAgentTaskPullRequestAPI.js +27 -0
- package/build/dist/Server/API/AIAgentTaskPullRequestAPI.js.map +1 -1
- package/build/dist/Server/API/AIInsightAPI.js +140 -0
- package/build/dist/Server/API/AIInsightAPI.js.map +1 -0
- package/build/dist/Server/API/AIInvestigationAPI.js +257 -1
- package/build/dist/Server/API/AIInvestigationAPI.js.map +1 -1
- package/build/dist/Server/API/CodeFixRunAPI.js +181 -0
- package/build/dist/Server/API/CodeFixRunAPI.js.map +1 -0
- package/build/dist/Server/API/GitHubAPI.js +164 -2
- package/build/dist/Server/API/GitHubAPI.js.map +1 -1
- package/build/dist/Server/API/TelemetryExceptionAPI.js +148 -43
- package/build/dist/Server/API/TelemetryExceptionAPI.js.map +1 -1
- package/build/dist/Server/EnvironmentConfig.js +1 -1
- package/build/dist/Server/EnvironmentConfig.js.map +1 -1
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783943300000-DropServiceCodeRepository.js +23 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783943300000-DropServiceCodeRepository.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783947444597-CodeFixRunsOnAIRun.js +32 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783947444597-CodeFixRunsOnAIRun.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783950962813-AddCodeFixTaskType.js +16 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783950962813-AddCodeFixTaskType.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783954040984-AddInstrumentationFixTasksFlag.js +16 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783954040984-AddInstrumentationFixTasksFlag.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783957160597-MigrationName.js +24 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783957160597-MigrationName.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783958542237-AddTaskContextToAIRun.js +16 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783958542237-AddTaskContextToAIRun.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783965945957-AddInvestigationVerdictAndGrade.js +24 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783965945957-AddInvestigationVerdictAndGrade.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783970619301-AddFixGuardrailColumns.js +24 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783970619301-AddFixGuardrailColumns.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783970619302-DropLegacyAIAgentTaskTables.js +24 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783970619302-DropLegacyAIAgentTaskTables.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783977781677-AddCiStatusToFixPullRequests.js +18 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783977781677-AddCiStatusToFixPullRequests.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783990000000-AddCompletionTokensToLlmLog.js +18 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783990000000-AddCompletionTokensToLlmLog.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784010274993-AddSentinelInsight.js +32 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784010274993-AddSentinelInsight.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784010274994-AddSentinelInsightFlags.js +18 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784010274994-AddSentinelInsightFlags.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784030612266-RenameSentinelToAI.js +125 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784030612266-RenameSentinelToAI.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784033837629-MigrationName.js +62 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784033837629-MigrationName.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +30 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
- package/build/dist/Server/Infrastructure/Queue.js +73 -3
- package/build/dist/Server/Infrastructure/Queue.js.map +1 -1
- package/build/dist/Server/Infrastructure/Semaphore.js +44 -1
- package/build/dist/Server/Infrastructure/Semaphore.js.map +1 -1
- package/build/dist/Server/Services/AIAgentService.js +29 -0
- package/build/dist/Server/Services/AIAgentService.js.map +1 -1
- package/build/dist/Server/Services/AIAgentTaskPullRequestService.js +78 -0
- package/build/dist/Server/Services/AIAgentTaskPullRequestService.js.map +1 -1
- package/build/dist/Server/Services/AIInsightService.js +164 -0
- package/build/dist/Server/Services/AIInsightService.js.map +1 -0
- package/build/dist/Server/Services/AIRunEventService.js +49 -0
- package/build/dist/Server/Services/AIRunEventService.js.map +1 -1
- package/build/dist/Server/Services/AIRunService.js +221 -0
- package/build/dist/Server/Services/AIRunService.js.map +1 -1
- package/build/dist/Server/Services/AIService.js +198 -11
- package/build/dist/Server/Services/AIService.js.map +1 -1
- package/build/dist/Server/Services/AlertService.js +4 -4
- package/build/dist/Server/Services/AlertService.js.map +1 -1
- package/build/dist/Server/Services/CodeRepositoryService.js +180 -0
- package/build/dist/Server/Services/CodeRepositoryService.js.map +1 -1
- package/build/dist/Server/Services/GlobalConfigService.js +84 -0
- package/build/dist/Server/Services/GlobalConfigService.js.map +1 -1
- package/build/dist/Server/Services/IncidentService.js +149 -37
- package/build/dist/Server/Services/IncidentService.js.map +1 -1
- package/build/dist/Server/Services/IncidentStateTimelineService.js +24 -4
- package/build/dist/Server/Services/IncidentStateTimelineService.js.map +1 -1
- package/build/dist/Server/Services/Index.js +4 -4
- package/build/dist/Server/Services/Index.js.map +1 -1
- package/build/dist/Server/Services/{AIAgentTaskLogService.js → InstanceHealthLogService.js} +2 -2
- package/build/dist/Server/Services/InstanceHealthLogService.js.map +1 -0
- package/build/dist/Server/Services/LlmLogService.js +23 -0
- package/build/dist/Server/Services/LlmLogService.js.map +1 -1
- package/build/dist/Server/Services/LlmProviderService.js +96 -0
- package/build/dist/Server/Services/LlmProviderService.js.map +1 -1
- package/build/dist/Server/Services/MetricBaselineService.js +65 -0
- package/build/dist/Server/Services/MetricBaselineService.js.map +1 -1
- package/build/dist/Server/Services/MonitorService.js +9 -1
- package/build/dist/Server/Services/MonitorService.js.map +1 -1
- package/build/dist/Server/Services/TelemetryExceptionService.js +243 -82
- package/build/dist/Server/Services/TelemetryExceptionService.js.map +1 -1
- package/build/dist/Server/Services/TraceAggregationService.js +124 -0
- package/build/dist/Server/Services/TraceAggregationService.js.map +1 -1
- package/build/dist/Server/Types/Workflow/ComponentCode.js.map +1 -1
- package/build/dist/Server/Types/Workflow/Components/AI/GenerateText.js +240 -0
- package/build/dist/Server/Types/Workflow/Components/AI/GenerateText.js.map +1 -0
- package/build/dist/Server/Types/Workflow/Components/Index.js +2 -0
- package/build/dist/Server/Types/Workflow/Components/Index.js.map +1 -1
- package/build/dist/Server/Utils/AI/CodeFix/CodeAgentWorkspaceGuard.js +48 -0
- package/build/dist/Server/Utils/AI/CodeFix/CodeAgentWorkspaceGuard.js.map +1 -0
- package/build/dist/Server/Utils/AI/CodeFix/CodeFixAgentCompletion.js +174 -0
- package/build/dist/Server/Utils/AI/CodeFix/CodeFixAgentCompletion.js.map +1 -0
- package/build/dist/Server/Utils/AI/CodeFix/CodeFixRunQueue.js +126 -0
- package/build/dist/Server/Utils/AI/CodeFix/CodeFixRunQueue.js.map +1 -0
- package/build/dist/Server/Utils/AI/CodeFix/FixRunBudget.js +131 -0
- package/build/dist/Server/Utils/AI/CodeFix/FixRunBudget.js.map +1 -0
- package/build/dist/Server/Utils/AI/CodeFix/OpenPullRequestCap.js +99 -0
- package/build/dist/Server/Utils/AI/CodeFix/OpenPullRequestCap.js.map +1 -0
- package/build/dist/Server/Utils/AI/Eval/EvalCorpus.js +245 -0
- package/build/dist/Server/Utils/AI/Eval/EvalCorpus.js.map +1 -0
- package/build/dist/Server/Utils/AI/Eval/EvalScores.js +83 -0
- package/build/dist/Server/Utils/AI/Eval/EvalScores.js.map +1 -0
- package/build/dist/Server/Utils/AI/Eval/ReplayInvestigation.js +12 -0
- package/build/dist/Server/Utils/AI/Eval/ReplayInvestigation.js.map +1 -0
- package/build/dist/Server/Utils/AI/PerfEvidence/SpanTreeAnalyzer.js +439 -0
- package/build/dist/Server/Utils/AI/PerfEvidence/SpanTreeAnalyzer.js.map +1 -0
- package/build/dist/Server/Utils/AI/{Sentinel/SentinelInvestigationEngine.js → SRE/AIInvestigationEngine.js} +47 -31
- package/build/dist/Server/Utils/AI/SRE/AIInvestigationEngine.js.map +1 -0
- package/build/dist/Server/Utils/AI/{Sentinel/SentinelMemory.js → SRE/AIMemory.js} +5 -5
- package/build/dist/Server/Utils/AI/SRE/AIMemory.js.map +1 -0
- package/build/dist/Server/Utils/AI/{Sentinel → SRE}/AlertInvestigationRunner.js +42 -19
- package/build/dist/Server/Utils/AI/SRE/AlertInvestigationRunner.js.map +1 -0
- package/build/dist/Server/Utils/AI/SRE/ConfidenceSignal.js +226 -0
- package/build/dist/Server/Utils/AI/SRE/ConfidenceSignal.js.map +1 -0
- package/build/dist/Server/Utils/AI/SRE/FixFromIncidentTaskTrigger.js +100 -0
- package/build/dist/Server/Utils/AI/SRE/FixFromIncidentTaskTrigger.js.map +1 -0
- package/build/dist/Server/Utils/AI/SRE/FixPerformanceTaskTrigger.js +174 -0
- package/build/dist/Server/Utils/AI/SRE/FixPerformanceTaskTrigger.js.map +1 -0
- package/build/dist/Server/Utils/AI/{Sentinel → SRE}/IncidentInvestigationRunner.js +60 -22
- package/build/dist/Server/Utils/AI/SRE/IncidentInvestigationRunner.js.map +1 -0
- package/build/dist/Server/Utils/AI/{Sentinel → SRE}/IncidentPostmortemRunner.js +9 -9
- package/build/dist/Server/Utils/AI/SRE/IncidentPostmortemRunner.js.map +1 -0
- package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/ErrorLogSpikeDetector.js +268 -0
- package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/ErrorLogSpikeDetector.js.map +1 -0
- package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/ExceptionSpikeDetector.js +226 -0
- package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/ExceptionSpikeDetector.js.map +1 -0
- package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/Index.js +26 -0
- package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/Index.js.map +1 -0
- package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/MetricDriftDetector.js +159 -0
- package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/MetricDriftDetector.js.map +1 -0
- package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/NewExceptionDetector.js +177 -0
- package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/NewExceptionDetector.js.map +1 -0
- package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/TraceLatencyRegressionDetector.js +384 -0
- package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/TraceLatencyRegressionDetector.js.map +1 -0
- package/build/dist/Server/Utils/AI/SRE/Insights/FixRouting.js +180 -0
- package/build/dist/Server/Utils/AI/SRE/Insights/FixRouting.js.map +1 -0
- package/build/dist/Server/Utils/AI/SRE/Insights/InsightScanner.js +269 -0
- package/build/dist/Server/Utils/AI/SRE/Insights/InsightScanner.js.map +1 -0
- package/build/dist/Server/Utils/AI/SRE/Insights/InsightStore.js +231 -0
- package/build/dist/Server/Utils/AI/SRE/Insights/InsightStore.js.map +1 -0
- package/build/dist/Server/Utils/AI/SRE/Insights/InsightTriageRunner.js +206 -0
- package/build/dist/Server/Utils/AI/SRE/Insights/InsightTriageRunner.js.map +1 -0
- package/build/dist/Server/Utils/AI/SRE/Insights/Triage.js +121 -0
- package/build/dist/Server/Utils/AI/SRE/Insights/Triage.js.map +1 -0
- package/build/dist/Server/Utils/AI/SRE/Insights/Types.js +2 -0
- package/build/dist/Server/Utils/AI/SRE/Insights/Types.js.map +1 -0
- package/build/dist/Server/Utils/AI/SRE/InstrumentationTaskTrigger.js +148 -0
- package/build/dist/Server/Utils/AI/SRE/InstrumentationTaskTrigger.js.map +1 -0
- package/build/dist/Server/Utils/AI/SRE/InvestigationGrader.js +231 -0
- package/build/dist/Server/Utils/AI/SRE/InvestigationGrader.js.map +1 -0
- package/build/dist/Server/Utils/AI/{Sentinel → SRE}/InvestigationQueue.js +102 -23
- package/build/dist/Server/Utils/AI/SRE/InvestigationQueue.js.map +1 -0
- package/build/dist/Server/Utils/AI/SRE/SubjectCodeFixRun.js +167 -0
- package/build/dist/Server/Utils/AI/SRE/SubjectCodeFixRun.js.map +1 -0
- package/build/dist/Server/Utils/AI/Toolbox/{SentinelActionTools.js → AIActionTools.js} +18 -2
- package/build/dist/Server/Utils/AI/Toolbox/AIActionTools.js.map +1 -0
- package/build/dist/Server/Utils/AI/Toolbox/Index.js +2 -2
- package/build/dist/Server/Utils/AI/Toolbox/Index.js.map +1 -1
- package/build/dist/Server/Utils/AnalyticsDatabase/ClickhouseCapacity.js +301 -0
- package/build/dist/Server/Utils/AnalyticsDatabase/ClickhouseCapacity.js.map +1 -0
- package/build/dist/Server/Utils/CodeRepository/GitHub/GitHub.js +240 -2
- package/build/dist/Server/Utils/CodeRepository/GitHub/GitHub.js.map +1 -1
- package/build/dist/Server/Utils/CodeRepository/ServiceRepoLinkSuggester.js +127 -0
- package/build/dist/Server/Utils/CodeRepository/ServiceRepoLinkSuggester.js.map +1 -0
- package/build/dist/Server/Utils/CodeRepository/StackTraceRepoResolver.js +336 -0
- package/build/dist/Server/Utils/CodeRepository/StackTraceRepoResolver.js.map +1 -0
- package/build/dist/Server/Utils/Execute.js.map +1 -1
- package/build/dist/Server/Utils/LLM/LLMService.js +125 -25
- package/build/dist/Server/Utils/LLM/LLMService.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/Criteria/SqlMonitorCriteria.js +120 -0
- package/build/dist/Server/Utils/Monitor/Criteria/SqlMonitorCriteria.js.map +1 -0
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js +21 -0
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js.map +1 -1
- package/build/dist/Types/AI/AIInsightEvidence.js +2 -0
- package/build/dist/Types/AI/AIInsightEvidence.js.map +1 -0
- package/build/dist/Types/AI/AIInsightHumanVerdict.js +16 -0
- package/build/dist/Types/AI/AIInsightHumanVerdict.js.map +1 -0
- package/build/dist/Types/AI/AIInsightSeverity.js +14 -0
- package/build/dist/Types/AI/AIInsightSeverity.js.map +1 -0
- package/build/dist/Types/AI/AIInsightStatus.js +36 -0
- package/build/dist/Types/AI/AIInsightStatus.js.map +1 -0
- package/build/dist/Types/AI/AIInsightType.js +42 -0
- package/build/dist/Types/AI/AIInsightType.js.map +1 -0
- package/build/dist/Types/AI/AIRunAutoGrade.js +19 -0
- package/build/dist/Types/AI/AIRunAutoGrade.js.map +1 -0
- package/build/dist/Types/AI/AIRunEventType.js +5 -0
- package/build/dist/Types/AI/AIRunEventType.js.map +1 -1
- package/build/dist/Types/AI/AIRunHumanVerdict.js +18 -0
- package/build/dist/Types/AI/AIRunHumanVerdict.js.map +1 -0
- package/build/dist/Types/AI/AIRunType.js +6 -0
- package/build/dist/Types/AI/AIRunType.js.map +1 -1
- package/build/dist/Types/AI/CodeFixTaskContext.js +29 -0
- package/build/dist/Types/AI/CodeFixTaskContext.js.map +1 -0
- package/build/dist/Types/AI/CodeFixTaskType.js +122 -0
- package/build/dist/Types/AI/CodeFixTaskType.js.map +1 -0
- package/build/dist/Types/AI/FixPullRequestCiStatus.js +102 -0
- package/build/dist/Types/AI/FixPullRequestCiStatus.js.map +1 -0
- package/build/dist/Types/BaseDatabase/AggregationIntervalUtil.js +55 -0
- package/build/dist/Types/BaseDatabase/AggregationIntervalUtil.js.map +1 -1
- package/build/dist/Types/Incident/IncidentMetricType.js +7 -0
- package/build/dist/Types/Incident/IncidentMetricType.js.map +1 -1
- package/build/dist/Types/Monitor/CriteriaFilter.js +7 -0
- package/build/dist/Types/Monitor/CriteriaFilter.js.map +1 -1
- package/build/dist/Types/Monitor/MonitorCriteriaInstance.js +62 -0
- package/build/dist/Types/Monitor/MonitorCriteriaInstance.js.map +1 -1
- package/build/dist/Types/Monitor/MonitorStep.js +28 -0
- package/build/dist/Types/Monitor/MonitorStep.js.map +1 -1
- package/build/dist/Types/Monitor/MonitorStepSqlMonitor.js +93 -0
- package/build/dist/Types/Monitor/MonitorStepSqlMonitor.js.map +1 -0
- package/build/dist/Types/Monitor/MonitorType.js +15 -0
- package/build/dist/Types/Monitor/MonitorType.js.map +1 -1
- package/build/dist/Types/Monitor/SqlDatabaseType.js +47 -0
- package/build/dist/Types/Monitor/SqlDatabaseType.js.map +1 -0
- package/build/dist/Types/Monitor/SqlMonitor/SqlMonitorResponse.js +2 -0
- package/build/dist/Types/Monitor/SqlMonitor/SqlMonitorResponse.js.map +1 -0
- package/build/dist/Types/Permission.js +10 -84
- package/build/dist/Types/Permission.js.map +1 -1
- package/build/dist/Types/Runbook/RunbookStepType.js +1 -0
- package/build/dist/Types/Runbook/RunbookStepType.js.map +1 -1
- package/build/dist/Types/Workflow/ComponentID.js +1 -0
- package/build/dist/Types/Workflow/ComponentID.js.map +1 -1
- package/build/dist/Types/Workflow/Components/AI.js +135 -0
- package/build/dist/Types/Workflow/Components/AI.js.map +1 -0
- package/build/dist/Types/Workflow/Components.js +7 -0
- package/build/dist/Types/Workflow/Components.js.map +1 -1
- package/build/dist/UI/Components/AI/GenerateFromAIModal.js +1 -1
- package/build/dist/UI/Components/AI/GenerateFromAIModal.js.map +1 -1
- package/build/dist/UI/Components/Markdown.tsx/MarkdownViewer.js +9 -0
- package/build/dist/UI/Components/Markdown.tsx/MarkdownViewer.js.map +1 -1
- package/build/dist/UI/Components/MoreMenu/MoreMenu.js +1 -1
- package/build/dist/UI/Components/Table/Table.js +28 -2
- package/build/dist/UI/Components/Table/Table.js.map +1 -1
- package/build/dist/UI/Utils/TableColumnsToCsv.js +291 -0
- package/build/dist/UI/Utils/TableColumnsToCsv.js.map +1 -0
- package/build/dist/Utils/Monitor/MonitorMetricType.js +1 -0
- package/build/dist/Utils/Monitor/MonitorMetricType.js.map +1 -1
- package/package.json +1 -1
- package/Models/DatabaseModels/AIAgentTask.ts +0 -660
- package/Models/DatabaseModels/AIAgentTaskLog.ts +0 -426
- package/Models/DatabaseModels/AIAgentTaskTelemetryException.ts +0 -399
- package/Models/DatabaseModels/ServiceCodeRepository.ts +0 -647
- package/Server/Services/AIAgentTaskService.ts +0 -240
- package/Server/Services/AIAgentTaskTelemetryExceptionService.ts +0 -39
- package/Server/Services/ServiceCodeRepositoryService.ts +0 -55
- package/Tests/Server/Services/AIAgentTaskServiceClaim.test.ts +0 -146
- package/Types/AI/AIAgentTaskMetadata.ts +0 -25
- package/Types/AI/AIAgentTaskType.ts +0 -40
- package/build/dist/Models/DatabaseModels/AIAgentTask.js +0 -691
- package/build/dist/Models/DatabaseModels/AIAgentTask.js.map +0 -1
- package/build/dist/Models/DatabaseModels/AIAgentTaskLog.js +0 -447
- package/build/dist/Models/DatabaseModels/AIAgentTaskLog.js.map +0 -1
- package/build/dist/Models/DatabaseModels/AIAgentTaskTelemetryException.js +0 -415
- package/build/dist/Models/DatabaseModels/AIAgentTaskTelemetryException.js.map +0 -1
- package/build/dist/Models/DatabaseModels/ServiceCodeRepository.js +0 -665
- package/build/dist/Models/DatabaseModels/ServiceCodeRepository.js.map +0 -1
- package/build/dist/Server/Services/AIAgentTaskLogService.js.map +0 -1
- package/build/dist/Server/Services/AIAgentTaskService.js +0 -217
- package/build/dist/Server/Services/AIAgentTaskService.js.map +0 -1
- package/build/dist/Server/Services/AIAgentTaskTelemetryExceptionService.js +0 -36
- package/build/dist/Server/Services/AIAgentTaskTelemetryExceptionService.js.map +0 -1
- package/build/dist/Server/Services/ServiceCodeRepositoryService.js +0 -54
- package/build/dist/Server/Services/ServiceCodeRepositoryService.js.map +0 -1
- package/build/dist/Server/Utils/AI/Sentinel/AlertInvestigationRunner.js.map +0 -1
- package/build/dist/Server/Utils/AI/Sentinel/IncidentInvestigationRunner.js.map +0 -1
- package/build/dist/Server/Utils/AI/Sentinel/IncidentPostmortemRunner.js.map +0 -1
- package/build/dist/Server/Utils/AI/Sentinel/InvestigationQueue.js.map +0 -1
- package/build/dist/Server/Utils/AI/Sentinel/SentinelInvestigationEngine.js.map +0 -1
- package/build/dist/Server/Utils/AI/Sentinel/SentinelMemory.js.map +0 -1
- package/build/dist/Server/Utils/AI/Toolbox/SentinelActionTools.js.map +0 -1
- package/build/dist/Types/AI/AIAgentTaskMetadata.js +0 -6
- package/build/dist/Types/AI/AIAgentTaskMetadata.js.map +0 -1
- package/build/dist/Types/AI/AIAgentTaskType.js +0 -29
- package/build/dist/Types/AI/AIAgentTaskType.js.map +0 -1
|
@@ -1,9 +1,189 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
8
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
9
|
+
};
|
|
1
10
|
import DatabaseService from "./DatabaseService";
|
|
2
11
|
import Model from "../../Models/DatabaseModels/CodeRepository";
|
|
12
|
+
import LIMIT_MAX from "../../Types/Database/LimitMax";
|
|
13
|
+
import CodeRepositoryType from "../../Types/CodeRepository/CodeRepositoryType";
|
|
14
|
+
import URL from "../../Types/API/URL";
|
|
15
|
+
import logger from "../Utils/Logger";
|
|
16
|
+
import CaptureSpan from "../Utils/Telemetry/CaptureSpan";
|
|
17
|
+
import { resolveRepositoryForExceptionFix, } from "../Utils/CodeRepository/StackTraceRepoResolver";
|
|
18
|
+
import GitHubUtil from "../Utils/CodeRepository/GitHub/GitHub";
|
|
3
19
|
export class Service extends DatabaseService {
|
|
4
20
|
constructor() {
|
|
5
21
|
super(Model);
|
|
6
22
|
}
|
|
23
|
+
/*
|
|
24
|
+
* Imports all repositories accessible to a GitHub App installation into a
|
|
25
|
+
* project. Repositories that already exist for the project (matched on
|
|
26
|
+
* organizationName + repositoryName) are skipped. Never deletes anything.
|
|
27
|
+
*/
|
|
28
|
+
async importReposFromInstallation(data) {
|
|
29
|
+
const installationRepositories = await GitHubUtil.listRepositoriesForInstallation(data.installationId);
|
|
30
|
+
// Fetch existing repositories once so we can skip duplicates and de-dupe display names.
|
|
31
|
+
const existingRepositories = await this.findBy({
|
|
32
|
+
query: {
|
|
33
|
+
projectId: data.projectId,
|
|
34
|
+
},
|
|
35
|
+
select: {
|
|
36
|
+
_id: true,
|
|
37
|
+
name: true,
|
|
38
|
+
organizationName: true,
|
|
39
|
+
repositoryName: true,
|
|
40
|
+
},
|
|
41
|
+
limit: LIMIT_MAX,
|
|
42
|
+
skip: 0,
|
|
43
|
+
props: {
|
|
44
|
+
isRoot: true,
|
|
45
|
+
},
|
|
46
|
+
});
|
|
47
|
+
const existingRepositoryKeys = new Set(existingRepositories.map((repository) => {
|
|
48
|
+
var _a, _b;
|
|
49
|
+
return `${(_a = repository.organizationName) === null || _a === void 0 ? void 0 : _a.toLowerCase()}/${(_b = repository.repositoryName) === null || _b === void 0 ? void 0 : _b.toLowerCase()}`;
|
|
50
|
+
}));
|
|
51
|
+
const existingDisplayNames = new Set(existingRepositories
|
|
52
|
+
.map((repository) => {
|
|
53
|
+
var _a;
|
|
54
|
+
return ((_a = repository.name) === null || _a === void 0 ? void 0 : _a.toLowerCase()) || "";
|
|
55
|
+
})
|
|
56
|
+
.filter((name) => {
|
|
57
|
+
return Boolean(name);
|
|
58
|
+
}));
|
|
59
|
+
let imported = 0;
|
|
60
|
+
let skipped = 0;
|
|
61
|
+
for (const repository of installationRepositories) {
|
|
62
|
+
const repositoryKey = `${repository.ownerLogin.toLowerCase()}/${repository.name.toLowerCase()}`;
|
|
63
|
+
if (existingRepositoryKeys.has(repositoryKey)) {
|
|
64
|
+
skipped++;
|
|
65
|
+
continue;
|
|
66
|
+
}
|
|
67
|
+
/*
|
|
68
|
+
* Display name is unique per project. If a repository with the same
|
|
69
|
+
* name exists (e.g. same repo name in a different org), fall back to
|
|
70
|
+
* the org-qualified name, then a numeric suffix.
|
|
71
|
+
*/
|
|
72
|
+
let displayName = repository.name;
|
|
73
|
+
if (existingDisplayNames.has(displayName.toLowerCase())) {
|
|
74
|
+
displayName = repository.fullName;
|
|
75
|
+
}
|
|
76
|
+
let suffix = 2;
|
|
77
|
+
while (existingDisplayNames.has(displayName.toLowerCase())) {
|
|
78
|
+
displayName = `${repository.fullName} (${suffix})`;
|
|
79
|
+
suffix++;
|
|
80
|
+
}
|
|
81
|
+
const codeRepository = new Model();
|
|
82
|
+
codeRepository.projectId = data.projectId;
|
|
83
|
+
codeRepository.name = displayName;
|
|
84
|
+
codeRepository.repositoryHostedAt = CodeRepositoryType.GitHub;
|
|
85
|
+
codeRepository.organizationName = repository.ownerLogin;
|
|
86
|
+
codeRepository.repositoryName = repository.name;
|
|
87
|
+
codeRepository.mainBranchName = repository.defaultBranch || "main";
|
|
88
|
+
codeRepository.gitHubAppInstallationId = data.installationId;
|
|
89
|
+
if (repository.htmlUrl) {
|
|
90
|
+
codeRepository.repositoryUrl = URL.fromString(repository.htmlUrl);
|
|
91
|
+
}
|
|
92
|
+
if (repository.description) {
|
|
93
|
+
codeRepository.description = repository.description;
|
|
94
|
+
}
|
|
95
|
+
try {
|
|
96
|
+
await this.create({
|
|
97
|
+
data: codeRepository,
|
|
98
|
+
props: {
|
|
99
|
+
isRoot: true,
|
|
100
|
+
},
|
|
101
|
+
});
|
|
102
|
+
existingRepositoryKeys.add(repositoryKey);
|
|
103
|
+
existingDisplayNames.add(displayName.toLowerCase());
|
|
104
|
+
imported++;
|
|
105
|
+
}
|
|
106
|
+
catch (error) {
|
|
107
|
+
// One bad repository should not abort the whole import.
|
|
108
|
+
logger.error(`Failed to import repository ${repository.fullName} from GitHub App installation ${data.installationId} into project ${data.projectId.toString()}:`);
|
|
109
|
+
logger.error(error);
|
|
110
|
+
skipped++;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
return { imported, skipped };
|
|
114
|
+
}
|
|
115
|
+
/*
|
|
116
|
+
* Resolve which of the project's repositories an exception's code lives
|
|
117
|
+
* in, AT RUNTIME — stack-trace path matching over cached git trees, with
|
|
118
|
+
* exact-name-match and only-repository fallbacks. This replaces the old
|
|
119
|
+
* manual ServiceCodeRepository mapping table.
|
|
120
|
+
*/
|
|
121
|
+
async resolveRepositoryForException(data) {
|
|
122
|
+
const repositories = await this.findBy({
|
|
123
|
+
query: {
|
|
124
|
+
projectId: data.projectId,
|
|
125
|
+
},
|
|
126
|
+
select: {
|
|
127
|
+
_id: true,
|
|
128
|
+
name: true,
|
|
129
|
+
organizationName: true,
|
|
130
|
+
repositoryName: true,
|
|
131
|
+
mainBranchName: true,
|
|
132
|
+
gitHubAppInstallationId: true,
|
|
133
|
+
repositoryHostedAt: true,
|
|
134
|
+
},
|
|
135
|
+
skip: 0,
|
|
136
|
+
limit: LIMIT_MAX,
|
|
137
|
+
props: {
|
|
138
|
+
isRoot: true,
|
|
139
|
+
},
|
|
140
|
+
});
|
|
141
|
+
// Only GitHub-App-connected repos can be cloned/pushed by the agent.
|
|
142
|
+
const resolvable = repositories
|
|
143
|
+
.filter((repository) => {
|
|
144
|
+
return (repository.repositoryHostedAt === CodeRepositoryType.GitHub &&
|
|
145
|
+
Boolean(repository.gitHubAppInstallationId) &&
|
|
146
|
+
Boolean(repository.id));
|
|
147
|
+
})
|
|
148
|
+
.map((repository) => {
|
|
149
|
+
return {
|
|
150
|
+
id: repository.id.toString(),
|
|
151
|
+
name: repository.name || "",
|
|
152
|
+
organizationName: repository.organizationName || "",
|
|
153
|
+
repositoryName: repository.repositoryName || "",
|
|
154
|
+
mainBranchName: repository.mainBranchName || "main",
|
|
155
|
+
gitHubAppInstallationId: repository.gitHubAppInstallationId || null,
|
|
156
|
+
};
|
|
157
|
+
});
|
|
158
|
+
if (resolvable.length === 0) {
|
|
159
|
+
return null;
|
|
160
|
+
}
|
|
161
|
+
return resolveRepositoryForExceptionFix({
|
|
162
|
+
stackTrace: data.stackTrace,
|
|
163
|
+
serviceName: data.serviceName,
|
|
164
|
+
repositories: resolvable,
|
|
165
|
+
getTreePaths: (repository) => {
|
|
166
|
+
return GitHubUtil.getRepositoryTreePaths({
|
|
167
|
+
installationId: repository.gitHubAppInstallationId,
|
|
168
|
+
organizationName: repository.organizationName,
|
|
169
|
+
repositoryName: repository.repositoryName,
|
|
170
|
+
branchName: repository.mainBranchName,
|
|
171
|
+
});
|
|
172
|
+
},
|
|
173
|
+
});
|
|
174
|
+
}
|
|
7
175
|
}
|
|
176
|
+
__decorate([
|
|
177
|
+
CaptureSpan(),
|
|
178
|
+
__metadata("design:type", Function),
|
|
179
|
+
__metadata("design:paramtypes", [Object]),
|
|
180
|
+
__metadata("design:returntype", Promise)
|
|
181
|
+
], Service.prototype, "importReposFromInstallation", null);
|
|
182
|
+
__decorate([
|
|
183
|
+
CaptureSpan(),
|
|
184
|
+
__metadata("design:type", Function),
|
|
185
|
+
__metadata("design:paramtypes", [Object]),
|
|
186
|
+
__metadata("design:returntype", Promise)
|
|
187
|
+
], Service.prototype, "resolveRepositoryForException", null);
|
|
8
188
|
export default new Service();
|
|
9
189
|
//# sourceMappingURL=CodeRepositoryService.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CodeRepositoryService.js","sourceRoot":"","sources":["../../../../Server/Services/CodeRepositoryService.ts"],"names":[],"mappings":"AAAA,OAAO,eAAe,MAAM,mBAAmB,CAAC;AAChD,OAAO,KAAK,MAAM,4CAA4C,CAAC;AAE/D,MAAM,OAAO,OAAQ,SAAQ,eAAsB;IACjD;QACE,KAAK,CAAC,KAAK,CAAC,CAAC;IACf,CAAC;CACF;
|
|
1
|
+
{"version":3,"file":"CodeRepositoryService.js","sourceRoot":"","sources":["../../../../Server/Services/CodeRepositoryService.ts"],"names":[],"mappings":"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"}
|
|
@@ -11,6 +11,7 @@ import DatabaseService from "./DatabaseService";
|
|
|
11
11
|
import Model from "../../Models/DatabaseModels/GlobalConfig";
|
|
12
12
|
import InMemoryTTLCache from "../Infrastructure/InMemoryTTLCache";
|
|
13
13
|
import CaptureSpan from "../Utils/Telemetry/CaptureSpan";
|
|
14
|
+
import BadDataException from "../../Types/Exception/BadDataException";
|
|
14
15
|
export class Service extends DatabaseService {
|
|
15
16
|
constructor() {
|
|
16
17
|
super(Model);
|
|
@@ -40,6 +41,83 @@ export class Service extends DatabaseService {
|
|
|
40
41
|
this.requireSsoForLoginCache.set(key, value, 60000);
|
|
41
42
|
return value;
|
|
42
43
|
}
|
|
44
|
+
async onBeforeUpdate(updateBy) {
|
|
45
|
+
const capacitySettingKeys = [
|
|
46
|
+
"clickhouseCapacityNotificationEnabled",
|
|
47
|
+
"clickhouseCapacityNotificationThresholdPercent",
|
|
48
|
+
"clickhouseDataPruningEnabled",
|
|
49
|
+
"clickhouseDataPruningThresholdPercent",
|
|
50
|
+
"clickhouseDataPruningTargetPercent",
|
|
51
|
+
];
|
|
52
|
+
const isCapacitySettingUpdate = capacitySettingKeys.some((key) => {
|
|
53
|
+
return updateBy.data[key] !== undefined;
|
|
54
|
+
});
|
|
55
|
+
if (!isCapacitySettingUpdate) {
|
|
56
|
+
return {
|
|
57
|
+
updateBy,
|
|
58
|
+
carryForward: null,
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
/*
|
|
62
|
+
* GlobalConfig updates are partial. Load the current singleton values so
|
|
63
|
+
* cross-field validation still compares the effective pruning threshold
|
|
64
|
+
* and target when the request changes only one of them.
|
|
65
|
+
*/
|
|
66
|
+
const currentConfig = await this.findOneBy({
|
|
67
|
+
query: updateBy.query,
|
|
68
|
+
select: {
|
|
69
|
+
clickhouseCapacityNotificationThresholdPercent: true,
|
|
70
|
+
clickhouseDataPruningThresholdPercent: true,
|
|
71
|
+
clickhouseDataPruningTargetPercent: true,
|
|
72
|
+
},
|
|
73
|
+
props: {
|
|
74
|
+
isRoot: true,
|
|
75
|
+
},
|
|
76
|
+
});
|
|
77
|
+
const normalizePercent = (value, fieldName) => {
|
|
78
|
+
let normalizedValue = value;
|
|
79
|
+
if (typeof normalizedValue === "string") {
|
|
80
|
+
const trimmedValue = normalizedValue.trim();
|
|
81
|
+
normalizedValue =
|
|
82
|
+
trimmedValue === "" ? Number.NaN : Number(trimmedValue);
|
|
83
|
+
}
|
|
84
|
+
if (typeof normalizedValue !== "number" ||
|
|
85
|
+
!Number.isFinite(normalizedValue) ||
|
|
86
|
+
!Number.isInteger(normalizedValue) ||
|
|
87
|
+
normalizedValue < 1 ||
|
|
88
|
+
normalizedValue > 100) {
|
|
89
|
+
throw new BadDataException(`${fieldName} must be an integer between 1 and 100.`);
|
|
90
|
+
}
|
|
91
|
+
return normalizedValue;
|
|
92
|
+
};
|
|
93
|
+
if (updateBy.data.clickhouseCapacityNotificationThresholdPercent !== undefined) {
|
|
94
|
+
updateBy.data.clickhouseCapacityNotificationThresholdPercent =
|
|
95
|
+
normalizePercent(updateBy.data
|
|
96
|
+
.clickhouseCapacityNotificationThresholdPercent, "ClickHouse capacity notification threshold");
|
|
97
|
+
}
|
|
98
|
+
if (updateBy.data.clickhouseDataPruningThresholdPercent !== undefined) {
|
|
99
|
+
updateBy.data.clickhouseDataPruningThresholdPercent = normalizePercent(updateBy.data.clickhouseDataPruningThresholdPercent, "ClickHouse data pruning threshold");
|
|
100
|
+
}
|
|
101
|
+
if (updateBy.data.clickhouseDataPruningTargetPercent !== undefined) {
|
|
102
|
+
updateBy.data.clickhouseDataPruningTargetPercent = normalizePercent(updateBy.data.clickhouseDataPruningTargetPercent, "ClickHouse data pruning target");
|
|
103
|
+
}
|
|
104
|
+
const getEffectivePercent = (updatedValue, currentValue, defaultValue, fieldName) => {
|
|
105
|
+
const value = updatedValue !== undefined
|
|
106
|
+
? updatedValue
|
|
107
|
+
: currentValue !== null && currentValue !== void 0 ? currentValue : defaultValue;
|
|
108
|
+
return normalizePercent(value, fieldName);
|
|
109
|
+
};
|
|
110
|
+
getEffectivePercent(updateBy.data.clickhouseCapacityNotificationThresholdPercent, currentConfig === null || currentConfig === void 0 ? void 0 : currentConfig.clickhouseCapacityNotificationThresholdPercent, 80, "ClickHouse capacity notification threshold");
|
|
111
|
+
const pruningThresholdPercent = getEffectivePercent(updateBy.data.clickhouseDataPruningThresholdPercent, currentConfig === null || currentConfig === void 0 ? void 0 : currentConfig.clickhouseDataPruningThresholdPercent, 90, "ClickHouse data pruning threshold");
|
|
112
|
+
const pruningTargetPercent = getEffectivePercent(updateBy.data.clickhouseDataPruningTargetPercent, currentConfig === null || currentConfig === void 0 ? void 0 : currentConfig.clickhouseDataPruningTargetPercent, 80, "ClickHouse data pruning target");
|
|
113
|
+
if (pruningTargetPercent >= pruningThresholdPercent) {
|
|
114
|
+
throw new BadDataException("ClickHouse data pruning target must be lower than the pruning threshold.");
|
|
115
|
+
}
|
|
116
|
+
return {
|
|
117
|
+
updateBy,
|
|
118
|
+
carryForward: null,
|
|
119
|
+
};
|
|
120
|
+
}
|
|
43
121
|
async onUpdateSuccess(onUpdate, _updatedItemIds) {
|
|
44
122
|
if (onUpdate.updateBy.data
|
|
45
123
|
.requireSsoForLogin !== undefined) {
|
|
@@ -54,6 +132,12 @@ __decorate([
|
|
|
54
132
|
__metadata("design:paramtypes", []),
|
|
55
133
|
__metadata("design:returntype", Promise)
|
|
56
134
|
], Service.prototype, "getRequireSsoForLogin", null);
|
|
135
|
+
__decorate([
|
|
136
|
+
CaptureSpan(),
|
|
137
|
+
__metadata("design:type", Function),
|
|
138
|
+
__metadata("design:paramtypes", [Object]),
|
|
139
|
+
__metadata("design:returntype", Promise)
|
|
140
|
+
], Service.prototype, "onBeforeUpdate", null);
|
|
57
141
|
__decorate([
|
|
58
142
|
CaptureSpan(),
|
|
59
143
|
__metadata("design:type", Function),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GlobalConfigService.js","sourceRoot":"","sources":["../../../../Server/Services/GlobalConfigService.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,eAAe,MAAM,mBAAmB,CAAC;AAChD,OAAO,KAAK,MAAM,0CAA0C,CAAC;AAC7D,OAAO,gBAAgB,MAAM,oCAAoC,CAAC;AAGlE,OAAO,WAAW,MAAM,gCAAgC,CAAC;AAEzD,MAAM,OAAO,OAAQ,SAAQ,eAAsB;IASjD;QACE,KAAK,CAAC,KAAK,CAAC,CAAC;QATf;;;;WAIG;QACK,4BAAuB,GAC7B,IAAI,gBAAgB,CAAC,KAAM,CAAC,CAAC;IAI/B,CAAC;IAED;;;OAGG;IAEU,AAAN,KAAK,CAAC,qBAAqB;QAChC,MAAM,GAAG,GAAW,QAAQ,CAAC;QAC7B,MAAM,MAAM,GAAwB,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC1E,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzB,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,MAAM,MAAM,GAAiB,MAAM,IAAI,CAAC,SAAS,CAAC;YAChD,KAAK,EAAE,EAAE;YACT,MAAM,EAAE,EAAE,kBAAkB,EAAE,IAAI,EAAE;YACpC,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;SACxB,CAAC,CAAC;QAEH,MAAM,KAAK,GAAY,OAAO,CAAC,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,kBAAkB,CAAC,CAAC;QAC3D,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,KAAM,CAAC,CAAC;QACrD,OAAO,KAAK,CAAC;IACf,CAAC;IAGwB,AAAN,KAAK,CAAC,eAAe,CACtC,QAAyB,EACzB,eAAgC;QAEhC,IACG,QAAQ,CAAC,QAAQ,CAAC,IAAyC;aACzD,kBAAkB,KAAK,SAAS,EACnC,CAAC;YACD,IAAI,CAAC,uBAAuB,CAAC,KAAK,EAAE,CAAC;QACvC,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;CACF;
|
|
1
|
+
{"version":3,"file":"GlobalConfigService.js","sourceRoot":"","sources":["../../../../Server/Services/GlobalConfigService.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,6 +10,9 @@ var __metadata = (this && this.__metadata) || function (k, v) {
|
|
|
10
10
|
import DatabaseConfig from "../DatabaseConfig";
|
|
11
11
|
import QueryHelper from "../Types/Database/QueryHelper";
|
|
12
12
|
import DatabaseService from "./DatabaseService";
|
|
13
|
+
import AIRunService from "./AIRunService";
|
|
14
|
+
import AIRunType from "../../Types/AI/AIRunType";
|
|
15
|
+
import AIRunStatus from "../../Types/AI/AIRunStatus";
|
|
13
16
|
import IncidentOwnerTeamService from "./IncidentOwnerTeamService";
|
|
14
17
|
import IncidentOwnerUserService from "./IncidentOwnerUserService";
|
|
15
18
|
import IncidentStateService from "./IncidentStateService";
|
|
@@ -73,7 +76,7 @@ import OnCallDutyPolicy from "../../Models/DatabaseModels/OnCallDutyPolicy";
|
|
|
73
76
|
import ProjectService from "./ProjectService";
|
|
74
77
|
import IncidentTemplateService from "./IncidentTemplateService";
|
|
75
78
|
import AIService from "./AIService";
|
|
76
|
-
import
|
|
79
|
+
import AIIncidentInvestigationRunner from "../Utils/AI/SRE/IncidentInvestigationRunner";
|
|
77
80
|
import IncidentAIContextBuilder from "../Utils/AI/IncidentAIContextBuilder";
|
|
78
81
|
export class Service extends DatabaseService {
|
|
79
82
|
constructor() {
|
|
@@ -940,21 +943,21 @@ export class Service extends DatabaseService {
|
|
|
940
943
|
.then(async () => {
|
|
941
944
|
var _a, _b;
|
|
942
945
|
/*
|
|
943
|
-
*
|
|
946
|
+
* AI (AI SRE): automatically investigate the new incident and post
|
|
944
947
|
* a cited root cause analysis to the incident timeline + Slack/Teams.
|
|
945
948
|
* Runs last so the workspace channels already exist, and is gated per
|
|
946
949
|
* project (opt-in) + requires a configured LLM provider. Read-only.
|
|
947
950
|
*/
|
|
948
951
|
try {
|
|
949
952
|
if (createdItem.projectId && createdItem.id) {
|
|
950
|
-
await
|
|
953
|
+
await AIIncidentInvestigationRunner.investigateNewIncident({
|
|
951
954
|
incidentId: createdItem.id,
|
|
952
955
|
projectId: createdItem.projectId,
|
|
953
956
|
});
|
|
954
957
|
}
|
|
955
958
|
}
|
|
956
959
|
catch (error) {
|
|
957
|
-
logger.error(`
|
|
960
|
+
logger.error(`AI incident investigation failed in IncidentService.onCreateSuccess: ${error}`, {
|
|
958
961
|
projectId: (_a = createdItem.projectId) === null || _a === void 0 ? void 0 : _a.toString(),
|
|
959
962
|
incidentId: (_b = createdItem.id) === null || _b === void 0 ? void 0 : _b.toString(),
|
|
960
963
|
});
|
|
@@ -2070,12 +2073,21 @@ ${incidentSeverity.name}
|
|
|
2070
2073
|
}
|
|
2071
2074
|
return Service.DEFAULT_METRIC_RETENTION_DAYS;
|
|
2072
2075
|
}
|
|
2073
|
-
|
|
2074
|
-
|
|
2076
|
+
/*
|
|
2077
|
+
* Load the incident + its owners and build the attribute set shared by
|
|
2078
|
+
* every incident metric (all values strings for ClickHouse
|
|
2079
|
+
* Map(String, String) storage; arrays joined comma-separated). Factored
|
|
2080
|
+
* out of refreshIncidentMetrics so one-off metric writers — e.g. the
|
|
2081
|
+
* AI time-to-rca metric recorded when an investigation posts its
|
|
2082
|
+
* analysis — record the exact same attribute shape.
|
|
2083
|
+
*/
|
|
2084
|
+
async getIncidentMetricContext(data) {
|
|
2085
|
+
var _a, _b, _c, _d, _e, _f;
|
|
2075
2086
|
const incident = await this.findOneById({
|
|
2076
2087
|
id: data.incidentId,
|
|
2077
2088
|
select: {
|
|
2078
2089
|
projectId: true,
|
|
2090
|
+
createdAt: true,
|
|
2079
2091
|
declaredAt: true,
|
|
2080
2092
|
postmortemPostedAt: true,
|
|
2081
2093
|
monitors: {
|
|
@@ -2164,6 +2176,115 @@ ${incidentSeverity.name}
|
|
|
2164
2176
|
.filter((name) => {
|
|
2165
2177
|
return Boolean(name);
|
|
2166
2178
|
});
|
|
2179
|
+
/*
|
|
2180
|
+
* common attributes shared by all incident metrics
|
|
2181
|
+
* All values must be strings for ClickHouse Map(String, String) storage.
|
|
2182
|
+
* Arrays are joined as comma-separated strings.
|
|
2183
|
+
*/
|
|
2184
|
+
const baseMetricAttributes = {
|
|
2185
|
+
incidentId: data.incidentId.toString(),
|
|
2186
|
+
projectId: incident.projectId.toString(),
|
|
2187
|
+
monitorIds: (((_a = incident.monitors) === null || _a === void 0 ? void 0 : _a.map((monitor) => {
|
|
2188
|
+
var _a;
|
|
2189
|
+
return (_a = monitor._id) === null || _a === void 0 ? void 0 : _a.toString();
|
|
2190
|
+
}).filter(Boolean)) || []).join(", "),
|
|
2191
|
+
monitorNames: (((_b = incident.monitors) === null || _b === void 0 ? void 0 : _b.map((monitor) => {
|
|
2192
|
+
var _a;
|
|
2193
|
+
return (_a = monitor.name) === null || _a === void 0 ? void 0 : _a.toString();
|
|
2194
|
+
}).filter(Boolean)) || []).join(", "),
|
|
2195
|
+
incidentSeverityId: (_d = (_c = incident.incidentSeverity) === null || _c === void 0 ? void 0 : _c._id) === null || _d === void 0 ? void 0 : _d.toString(),
|
|
2196
|
+
incidentSeverityName: (_f = (_e = incident.incidentSeverity) === null || _e === void 0 ? void 0 : _e.name) === null || _f === void 0 ? void 0 : _f.toString(),
|
|
2197
|
+
ownerUserIds: ownerUserIds.join(", "),
|
|
2198
|
+
ownerUserNames: ownerUserNames.join(", "),
|
|
2199
|
+
ownerTeamIds: ownerTeamIds.join(", "),
|
|
2200
|
+
ownerTeamNames: ownerTeamNames.join(", "),
|
|
2201
|
+
};
|
|
2202
|
+
return { incident, baseMetricAttributes };
|
|
2203
|
+
}
|
|
2204
|
+
/*
|
|
2205
|
+
* AI measurement layer: record how long the incident waited for its
|
|
2206
|
+
* AI root-cause analysis — seconds from incident creation to now, written
|
|
2207
|
+
* once from IncidentInvestigationRunner.postAnalysis. Deliberately NOT
|
|
2208
|
+
* part of refreshIncidentMetrics: the refresh's replace-list excludes
|
|
2209
|
+
* this metric name, so refreshes never tombstone it.
|
|
2210
|
+
*/
|
|
2211
|
+
async recordTimeToRootCausePostedMetric(data) {
|
|
2212
|
+
const { incident, baseMetricAttributes, } = await this.getIncidentMetricContext({ incidentId: data.incidentId });
|
|
2213
|
+
const now = OneUptimeDate.getCurrentDate();
|
|
2214
|
+
const incidentCreatedAt = incident.createdAt || incident.declaredAt || now;
|
|
2215
|
+
const metricRetentionDays = await this.getMetricRetentionDays();
|
|
2216
|
+
const retentionDate = OneUptimeDate.addRemoveDays(OneUptimeDate.getCurrentDate(), metricRetentionDays);
|
|
2217
|
+
const timeToRcaMetric = new MutableMetric();
|
|
2218
|
+
timeToRcaMetric.projectId = incident.projectId;
|
|
2219
|
+
timeToRcaMetric.primaryEntityId = incident.id;
|
|
2220
|
+
timeToRcaMetric.primaryEntityType = ServiceType.Incident;
|
|
2221
|
+
timeToRcaMetric.name = IncidentMetricType.TimeToRootCausePosted;
|
|
2222
|
+
timeToRcaMetric.metricPointId = IncidentMetricType.TimeToRootCausePosted;
|
|
2223
|
+
timeToRcaMetric.value = OneUptimeDate.getDifferenceInSeconds(now, incidentCreatedAt);
|
|
2224
|
+
timeToRcaMetric.attributes = Object.assign(Object.assign({}, baseMetricAttributes), {
|
|
2225
|
+
// Every time-to-rca point is AI-posted by construction.
|
|
2226
|
+
aiInvestigated: "true" });
|
|
2227
|
+
timeToRcaMetric.attributeKeys = TelemetryUtil.getAttributeKeys(timeToRcaMetric.attributes);
|
|
2228
|
+
timeToRcaMetric.time = now;
|
|
2229
|
+
timeToRcaMetric.timeUnixNano = OneUptimeDate.toUnixNano(now);
|
|
2230
|
+
timeToRcaMetric.metricPointType = MetricPointType.Sum;
|
|
2231
|
+
timeToRcaMetric.retentionDate = retentionDate;
|
|
2232
|
+
await MutableMetricService.createMutableMetrics({
|
|
2233
|
+
metrics: [timeToRcaMetric],
|
|
2234
|
+
});
|
|
2235
|
+
// Register the metric type so it shows up in the type catalog.
|
|
2236
|
+
const metricType = new MetricType();
|
|
2237
|
+
metricType.name = IncidentMetricType.TimeToRootCausePosted;
|
|
2238
|
+
metricType.description =
|
|
2239
|
+
"Time from incident creation to the AI investigation's posted root-cause analysis";
|
|
2240
|
+
metricType.unit = "seconds";
|
|
2241
|
+
TelemetryUtil.indexMetricNameServiceNameMap({
|
|
2242
|
+
metricNameServiceNameMap: {
|
|
2243
|
+
[IncidentMetricType.TimeToRootCausePosted]: metricType,
|
|
2244
|
+
},
|
|
2245
|
+
projectId: incident.projectId,
|
|
2246
|
+
}).catch((err) => {
|
|
2247
|
+
var _a, _b;
|
|
2248
|
+
logger.error(err, {
|
|
2249
|
+
projectId: (_a = incident.projectId) === null || _a === void 0 ? void 0 : _a.toString(),
|
|
2250
|
+
incidentId: (_b = incident.id) === null || _b === void 0 ? void 0 : _b.toString(),
|
|
2251
|
+
});
|
|
2252
|
+
});
|
|
2253
|
+
}
|
|
2254
|
+
async refreshIncidentMetrics(data) {
|
|
2255
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q;
|
|
2256
|
+
const { incident, baseMetricAttributes, } = await this.getIncidentMetricContext({ incidentId: data.incidentId });
|
|
2257
|
+
// getIncidentMetricContext guarantees this; re-checked for TS narrowing.
|
|
2258
|
+
if (!incident.projectId) {
|
|
2259
|
+
throw new BadDataException("Incident Project ID not found");
|
|
2260
|
+
}
|
|
2261
|
+
/*
|
|
2262
|
+
* aiInvestigated dimension for MTTA/MTTR (AI measurement layer):
|
|
2263
|
+
* did a completed AI investigation run for this incident? One
|
|
2264
|
+
* indexed countBy per metric refresh (triggeredByIncidentId is indexed)
|
|
2265
|
+
* — acceptable at refresh frequency. Failure must never break metric
|
|
2266
|
+
* recording, so this is best-effort false.
|
|
2267
|
+
*/
|
|
2268
|
+
let aiInvestigated = false;
|
|
2269
|
+
try {
|
|
2270
|
+
const completedInvestigationCount = await AIRunService.countBy({
|
|
2271
|
+
query: {
|
|
2272
|
+
runType: AIRunType.Investigation,
|
|
2273
|
+
status: AIRunStatus.Completed,
|
|
2274
|
+
triggeredByIncidentId: data.incidentId,
|
|
2275
|
+
},
|
|
2276
|
+
props: {
|
|
2277
|
+
isRoot: true,
|
|
2278
|
+
},
|
|
2279
|
+
});
|
|
2280
|
+
aiInvestigated = completedInvestigationCount.toNumber() > 0;
|
|
2281
|
+
}
|
|
2282
|
+
catch (err) {
|
|
2283
|
+
logger.error(err, {
|
|
2284
|
+
projectId: (_a = incident.projectId) === null || _a === void 0 ? void 0 : _a.toString(),
|
|
2285
|
+
incidentId: (_b = incident.id) === null || _b === void 0 ? void 0 : _b.toString(),
|
|
2286
|
+
});
|
|
2287
|
+
}
|
|
2167
2288
|
// get incident state timeline
|
|
2168
2289
|
const incidentStateTimelines = await IncidentStateTimelineService.findBy({
|
|
2169
2290
|
query: {
|
|
@@ -2208,8 +2329,8 @@ ${incidentSeverity.name}
|
|
|
2208
2329
|
}
|
|
2209
2330
|
catch (err) {
|
|
2210
2331
|
logger.error(err, {
|
|
2211
|
-
projectId: (
|
|
2212
|
-
incidentId: (
|
|
2332
|
+
projectId: (_c = incident.projectId) === null || _c === void 0 ? void 0 : _c.toString(),
|
|
2333
|
+
incidentId: (_d = incident.id) === null || _d === void 0 ? void 0 : _d.toString(),
|
|
2213
2334
|
});
|
|
2214
2335
|
}
|
|
2215
2336
|
try {
|
|
@@ -2222,29 +2343,6 @@ ${incidentSeverity.name}
|
|
|
2222
2343
|
incident.createdAt ||
|
|
2223
2344
|
OneUptimeDate.getCurrentDate();
|
|
2224
2345
|
const metricTypesMap = {};
|
|
2225
|
-
/*
|
|
2226
|
-
* common attributes shared by all incident metrics
|
|
2227
|
-
* All values must be strings for ClickHouse Map(String, String) storage.
|
|
2228
|
-
* Arrays are joined as comma-separated strings.
|
|
2229
|
-
*/
|
|
2230
|
-
const baseMetricAttributes = {
|
|
2231
|
-
incidentId: data.incidentId.toString(),
|
|
2232
|
-
projectId: incident.projectId.toString(),
|
|
2233
|
-
monitorIds: (((_c = incident.monitors) === null || _c === void 0 ? void 0 : _c.map((monitor) => {
|
|
2234
|
-
var _a;
|
|
2235
|
-
return (_a = monitor._id) === null || _a === void 0 ? void 0 : _a.toString();
|
|
2236
|
-
}).filter(Boolean)) || []).join(", "),
|
|
2237
|
-
monitorNames: (((_d = incident.monitors) === null || _d === void 0 ? void 0 : _d.map((monitor) => {
|
|
2238
|
-
var _a;
|
|
2239
|
-
return (_a = monitor.name) === null || _a === void 0 ? void 0 : _a.toString();
|
|
2240
|
-
}).filter(Boolean)) || []).join(", "),
|
|
2241
|
-
incidentSeverityId: (_f = (_e = incident.incidentSeverity) === null || _e === void 0 ? void 0 : _e._id) === null || _f === void 0 ? void 0 : _f.toString(),
|
|
2242
|
-
incidentSeverityName: (_h = (_g = incident.incidentSeverity) === null || _g === void 0 ? void 0 : _g.name) === null || _h === void 0 ? void 0 : _h.toString(),
|
|
2243
|
-
ownerUserIds: ownerUserIds.join(", "),
|
|
2244
|
-
ownerUserNames: ownerUserNames.join(", "),
|
|
2245
|
-
ownerTeamIds: ownerTeamIds.join(", "),
|
|
2246
|
-
ownerTeamNames: ownerTeamNames.join(", "),
|
|
2247
|
-
};
|
|
2248
2346
|
const incidentCountMetric = new MutableMetric();
|
|
2249
2347
|
incidentCountMetric.projectId = incident.projectId;
|
|
2250
2348
|
incidentCountMetric.primaryEntityId = incident.id;
|
|
@@ -2292,7 +2390,8 @@ ${incidentSeverity.name}
|
|
|
2292
2390
|
IncidentMetricType.TimeToAcknowledge;
|
|
2293
2391
|
timeToAcknowledgeMetric.value = OneUptimeDate.getDifferenceInSeconds((ackIncidentStateTimeline === null || ackIncidentStateTimeline === void 0 ? void 0 : ackIncidentStateTimeline.startsAt) ||
|
|
2294
2392
|
OneUptimeDate.getCurrentDate(), incidentStartsAt);
|
|
2295
|
-
|
|
2393
|
+
// aiInvestigated: the MTTA with/without-AI dimension.
|
|
2394
|
+
timeToAcknowledgeMetric.attributes = Object.assign(Object.assign({}, baseMetricAttributes), { aiInvestigated: aiInvestigated.toString() });
|
|
2296
2395
|
timeToAcknowledgeMetric.attributeKeys =
|
|
2297
2396
|
TelemetryUtil.getAttributeKeys(timeToAcknowledgeMetric.attributes);
|
|
2298
2397
|
timeToAcknowledgeMetric.time =
|
|
@@ -2330,7 +2429,8 @@ ${incidentSeverity.name}
|
|
|
2330
2429
|
timeToResolveMetric.metricPointId = IncidentMetricType.TimeToResolve;
|
|
2331
2430
|
timeToResolveMetric.value = OneUptimeDate.getDifferenceInSeconds((resolvedIncidentStateTimeline === null || resolvedIncidentStateTimeline === void 0 ? void 0 : resolvedIncidentStateTimeline.startsAt) ||
|
|
2332
2431
|
OneUptimeDate.getCurrentDate(), incidentStartsAt);
|
|
2333
|
-
|
|
2432
|
+
// aiInvestigated: the MTTR with/without-AI dimension.
|
|
2433
|
+
timeToResolveMetric.attributes = Object.assign(Object.assign({}, baseMetricAttributes), { aiInvestigated: aiInvestigated.toString() });
|
|
2334
2434
|
timeToResolveMetric.attributeKeys = TelemetryUtil.getAttributeKeys(timeToResolveMetric.attributes);
|
|
2335
2435
|
timeToResolveMetric.time =
|
|
2336
2436
|
(resolvedIncidentStateTimeline === null || resolvedIncidentStateTimeline === void 0 ? void 0 : resolvedIncidentStateTimeline.startsAt) ||
|
|
@@ -2397,7 +2497,7 @@ ${incidentSeverity.name}
|
|
|
2397
2497
|
if (!timeline.startsAt || !timeline.endsAt) {
|
|
2398
2498
|
continue;
|
|
2399
2499
|
}
|
|
2400
|
-
const stateName = ((
|
|
2500
|
+
const stateName = ((_f = (_e = timeline.incidentState) === null || _e === void 0 ? void 0 : _e.name) === null || _f === void 0 ? void 0 : _f.toString()) || "Unknown";
|
|
2401
2501
|
const timeInStateMetric = new MutableMetric();
|
|
2402
2502
|
timeInStateMetric.projectId = incident.projectId;
|
|
2403
2503
|
timeInStateMetric.primaryEntityId = incident.id;
|
|
@@ -2405,7 +2505,7 @@ ${incidentSeverity.name}
|
|
|
2405
2505
|
timeInStateMetric.name = IncidentMetricType.TimeInState;
|
|
2406
2506
|
timeInStateMetric.metricPointId = `time-in-state:${timeline.id.toString()}`;
|
|
2407
2507
|
timeInStateMetric.value = OneUptimeDate.getDifferenceInSeconds(timeline.endsAt, timeline.startsAt);
|
|
2408
|
-
timeInStateMetric.attributes = Object.assign(Object.assign({}, baseMetricAttributes), { incidentStateName: stateName, incidentStateId: (
|
|
2508
|
+
timeInStateMetric.attributes = Object.assign(Object.assign({}, baseMetricAttributes), { incidentStateName: stateName, incidentStateId: (_g = timeline.incidentStateId) === null || _g === void 0 ? void 0 : _g.toString(), isCreatedState: ((_j = (_h = timeline.incidentState) === null || _h === void 0 ? void 0 : _h.isCreatedState) === null || _j === void 0 ? void 0 : _j.toString()) || "false", isAcknowledgedState: ((_l = (_k = timeline.incidentState) === null || _k === void 0 ? void 0 : _k.isAcknowledgedState) === null || _l === void 0 ? void 0 : _l.toString()) || "false", isResolvedState: ((_o = (_m = timeline.incidentState) === null || _m === void 0 ? void 0 : _m.isResolvedState) === null || _o === void 0 ? void 0 : _o.toString()) || "false" });
|
|
2409
2509
|
timeInStateMetric.attributeKeys = TelemetryUtil.getAttributeKeys(timeInStateMetric.attributes);
|
|
2410
2510
|
timeInStateMetric.time = timeline.startsAt;
|
|
2411
2511
|
timeInStateMetric.timeUnixNano = OneUptimeDate.toUnixNano(timeInStateMetric.time);
|
|
@@ -2457,8 +2557,8 @@ ${incidentSeverity.name}
|
|
|
2457
2557
|
}
|
|
2458
2558
|
catch (err) {
|
|
2459
2559
|
logger.error(err, {
|
|
2460
|
-
projectId: (
|
|
2461
|
-
incidentId: (
|
|
2560
|
+
projectId: (_p = incident.projectId) === null || _p === void 0 ? void 0 : _p.toString(),
|
|
2561
|
+
incidentId: (_q = incident.id) === null || _q === void 0 ? void 0 : _q.toString(),
|
|
2462
2562
|
});
|
|
2463
2563
|
}
|
|
2464
2564
|
}
|
|
@@ -2760,6 +2860,18 @@ __decorate([
|
|
|
2760
2860
|
__metadata("design:paramtypes", [Object]),
|
|
2761
2861
|
__metadata("design:returntype", Promise)
|
|
2762
2862
|
], Service.prototype, "changeIncidentState", null);
|
|
2863
|
+
__decorate([
|
|
2864
|
+
CaptureSpan(),
|
|
2865
|
+
__metadata("design:type", Function),
|
|
2866
|
+
__metadata("design:paramtypes", [Object]),
|
|
2867
|
+
__metadata("design:returntype", Promise)
|
|
2868
|
+
], Service.prototype, "getIncidentMetricContext", null);
|
|
2869
|
+
__decorate([
|
|
2870
|
+
CaptureSpan(),
|
|
2871
|
+
__metadata("design:type", Function),
|
|
2872
|
+
__metadata("design:paramtypes", [Object]),
|
|
2873
|
+
__metadata("design:returntype", Promise)
|
|
2874
|
+
], Service.prototype, "recordTimeToRootCausePostedMetric", null);
|
|
2763
2875
|
__decorate([
|
|
2764
2876
|
CaptureSpan(),
|
|
2765
2877
|
__metadata("design:type", Function),
|