@oneuptime/common 11.5.4 → 11.5.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/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/Models/DatabaseModels/User.ts +47 -0
- 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/1784048917994-AddCreatedByUserToUser.ts +23 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +32 -0
- package/Server/Infrastructure/Queue.ts +82 -4
- package/Server/Infrastructure/Semaphore.ts +62 -1
- package/Server/Middleware/MasterAdminAuthorization.ts +37 -0
- package/Server/Middleware/ProjectAuthorization.ts +40 -15
- 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/TeamMemberService.ts +2 -0
- package/Server/Services/TelemetryExceptionService.ts +323 -116
- package/Server/Services/TraceAggregationService.ts +176 -0
- package/Server/Services/UserService.ts +10 -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/Server/Utils/Monitor/MonitorCriteriaExpectationBuilder.ts +16 -6
- package/Server/Utils/Monitor/MonitorCriteriaMessageBuilder.ts +14 -0
- package/Server/Utils/Monitor/MonitorCriteriaMessageFormatter.ts +14 -3
- package/Server/Utils/Monitor/MonitorCriteriaObservationBuilder.ts +130 -12
- 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/Monitor/MonitorCriteriaExpectationBuilderUnits.test.ts +553 -0
- package/Tests/Server/Utils/Monitor/MonitorCriteriaMessageBuilderUnits.test.ts +590 -0
- package/Tests/Server/Utils/Monitor/MonitorCriteriaMessageFormatterUnits.test.ts +254 -0
- package/Tests/Server/Utils/Monitor/MonitorCriteriaObservationBuilderUnits.test.ts +821 -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/Models/DatabaseModels/User.js +46 -0
- package/build/dist/Models/DatabaseModels/User.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/1784048917994-AddCreatedByUserToUser.js +18 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784048917994-AddCreatedByUserToUser.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +32 -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/Middleware/MasterAdminAuthorization.js +26 -0
- package/build/dist/Server/Middleware/MasterAdminAuthorization.js.map +1 -1
- package/build/dist/Server/Middleware/ProjectAuthorization.js +40 -14
- package/build/dist/Server/Middleware/ProjectAuthorization.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/TeamMemberService.js +2 -0
- package/build/dist/Server/Services/TeamMemberService.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/Services/UserService.js +8 -0
- package/build/dist/Server/Services/UserService.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/Server/Utils/Monitor/MonitorCriteriaExpectationBuilder.js +15 -7
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaExpectationBuilder.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaMessageBuilder.js +12 -1
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaMessageBuilder.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaMessageFormatter.js +8 -3
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaMessageFormatter.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaObservationBuilder.js +96 -12
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaObservationBuilder.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
|
@@ -43,6 +43,18 @@ export interface LLMCompletionRequest {
|
|
|
43
43
|
maxTokens?: number | undefined;
|
|
44
44
|
additionalParams?: JSONObject | undefined;
|
|
45
45
|
tools?: Array<LLMToolDefinition> | undefined;
|
|
46
|
+
/** Per-attempt HTTP timeout. Callers may lower the provider default. */
|
|
47
|
+
requestTimeoutInMs?: number | undefined;
|
|
48
|
+
/** Number of retries after the initial request. */
|
|
49
|
+
requestRetries?: number | undefined;
|
|
50
|
+
/** Re-apply caller-owned request fields after provider-level overrides. */
|
|
51
|
+
protectRequestParameters?: boolean | undefined;
|
|
52
|
+
/**
|
|
53
|
+
* When false, provider HTTP error bodies are neither logged nor included in
|
|
54
|
+
* the exception captured by telemetry. Use this for requests whose provider
|
|
55
|
+
* may echo private prompt content in an error response.
|
|
56
|
+
*/
|
|
57
|
+
includeProviderErrorDetails?: boolean | undefined;
|
|
46
58
|
llmProviderConfig: LLMProviderConfig;
|
|
47
59
|
}
|
|
48
60
|
|
|
@@ -74,6 +86,36 @@ export interface LLMProviderConfig {
|
|
|
74
86
|
}
|
|
75
87
|
|
|
76
88
|
export default class LLMService {
|
|
89
|
+
/*
|
|
90
|
+
* Provider-level parameters allowed on protected, unattended completions.
|
|
91
|
+
* This is deliberately a generation-only allowlist: capability fields such
|
|
92
|
+
* as tools, web_search_options, data_sources, modalities, audio, or future
|
|
93
|
+
* agent extensions must fail closed instead of silently widening egress or
|
|
94
|
+
* output behavior.
|
|
95
|
+
*/
|
|
96
|
+
private static readonly PROTECTED_ADDITIONAL_PARAMETER_ALLOWLIST: Set<string> =
|
|
97
|
+
new Set([
|
|
98
|
+
"frequency_penalty",
|
|
99
|
+
"length_penalty",
|
|
100
|
+
"logit_bias",
|
|
101
|
+
"logprobs",
|
|
102
|
+
"max_completion_tokens",
|
|
103
|
+
"min_p",
|
|
104
|
+
"min_tokens",
|
|
105
|
+
"presence_penalty",
|
|
106
|
+
"random_seed",
|
|
107
|
+
"reasoning_effort",
|
|
108
|
+
"repetition_penalty",
|
|
109
|
+
"response_format",
|
|
110
|
+
"safe_prompt",
|
|
111
|
+
"seed",
|
|
112
|
+
"stop",
|
|
113
|
+
"top_k",
|
|
114
|
+
"top_logprobs",
|
|
115
|
+
"top_p",
|
|
116
|
+
"verbosity",
|
|
117
|
+
]);
|
|
118
|
+
|
|
77
119
|
@CaptureSpan()
|
|
78
120
|
public static async getCompletion(
|
|
79
121
|
request: LLMCompletionRequest,
|
|
@@ -152,6 +194,20 @@ export default class LLMService {
|
|
|
152
194
|
});
|
|
153
195
|
}
|
|
154
196
|
|
|
197
|
+
private static getProtectedAdditionalParameters(
|
|
198
|
+
additionalParams: JSONObject,
|
|
199
|
+
): JSONObject {
|
|
200
|
+
const protectedParams: JSONObject = {};
|
|
201
|
+
|
|
202
|
+
for (const key of Object.keys(additionalParams)) {
|
|
203
|
+
if (this.PROTECTED_ADDITIONAL_PARAMETER_ALLOWLIST.has(key)) {
|
|
204
|
+
protectedParams[key] = additionalParams[key]!;
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
return protectedParams;
|
|
209
|
+
}
|
|
210
|
+
|
|
155
211
|
private static parseOpenAIToolCalls(
|
|
156
212
|
message: JSONObject,
|
|
157
213
|
): Array<LLMToolCall> | undefined {
|
|
@@ -227,9 +283,52 @@ export default class LLMService {
|
|
|
227
283
|
data["tools"] = this.toOpenAITools(request.tools);
|
|
228
284
|
}
|
|
229
285
|
|
|
230
|
-
|
|
286
|
+
/*
|
|
287
|
+
* Provider-configured tuning overrides defaults unless the caller protects
|
|
288
|
+
* its request. Protected callers retain only generation-safe tuning fields
|
|
289
|
+
* so provider-native tools and future capability fields fail closed.
|
|
290
|
+
*/
|
|
231
291
|
if (request.additionalParams) {
|
|
232
|
-
Object.assign(
|
|
292
|
+
Object.assign(
|
|
293
|
+
data,
|
|
294
|
+
request.protectRequestParameters
|
|
295
|
+
? this.getProtectedAdditionalParameters(request.additionalParams)
|
|
296
|
+
: request.additionalParams,
|
|
297
|
+
);
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
if (request.protectRequestParameters) {
|
|
301
|
+
const usesMaxCompletionTokens: boolean =
|
|
302
|
+
data["max_completion_tokens"] !== undefined;
|
|
303
|
+
|
|
304
|
+
data["model"] = modelName;
|
|
305
|
+
data["messages"] = this.toOpenAIMessages(request.messages);
|
|
306
|
+
data["temperature"] = request.temperature ?? 0.7;
|
|
307
|
+
data["stream"] = false;
|
|
308
|
+
data["n"] = 1;
|
|
309
|
+
|
|
310
|
+
if (request.maxTokens) {
|
|
311
|
+
if (usesMaxCompletionTokens) {
|
|
312
|
+
data["max_completion_tokens"] = request.maxTokens;
|
|
313
|
+
delete data["max_tokens"];
|
|
314
|
+
} else {
|
|
315
|
+
data["max_tokens"] = request.maxTokens;
|
|
316
|
+
delete data["max_completion_tokens"];
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
if (request.tools && request.tools.length > 0) {
|
|
321
|
+
data["tools"] = this.toOpenAITools(request.tools);
|
|
322
|
+
} else {
|
|
323
|
+
delete data["tools"];
|
|
324
|
+
delete data["tool_choice"];
|
|
325
|
+
delete data["functions"];
|
|
326
|
+
delete data["function_call"];
|
|
327
|
+
delete data["parallel_tool_calls"];
|
|
328
|
+
}
|
|
329
|
+
|
|
330
|
+
// Legacy compatible APIs may accept this fan-out control separately.
|
|
331
|
+
delete data["best_of"];
|
|
233
332
|
}
|
|
234
333
|
|
|
235
334
|
/*
|
|
@@ -291,6 +390,33 @@ export default class LLMService {
|
|
|
291
390
|
};
|
|
292
391
|
}
|
|
293
392
|
|
|
393
|
+
/**
|
|
394
|
+
* Handle provider HTTP failures before the decorated provider method
|
|
395
|
+
* rejects. Sanitizing here is important: @CaptureSpan records the exception,
|
|
396
|
+
* so redacting it only in AIService would be too late for logs and traces.
|
|
397
|
+
*/
|
|
398
|
+
private static throwProviderHTTPError(data: {
|
|
399
|
+
providerName: string;
|
|
400
|
+
response: HTTPErrorResponse;
|
|
401
|
+
logAttributes: LogAttributes;
|
|
402
|
+
includeProviderErrorDetails?: boolean | undefined;
|
|
403
|
+
}): never {
|
|
404
|
+
logger.error(`Error from ${data.providerName} API:`, data.logAttributes);
|
|
405
|
+
|
|
406
|
+
if (data.includeProviderErrorDetails !== false) {
|
|
407
|
+
logger.error(data.response, data.logAttributes);
|
|
408
|
+
throw new BadDataException(
|
|
409
|
+
`${data.providerName} API error: ${JSON.stringify(
|
|
410
|
+
data.response.jsonData,
|
|
411
|
+
)}`,
|
|
412
|
+
);
|
|
413
|
+
}
|
|
414
|
+
|
|
415
|
+
throw new BadDataException(
|
|
416
|
+
`${data.providerName} API request failed. Review the provider configuration and try again.`,
|
|
417
|
+
);
|
|
418
|
+
}
|
|
419
|
+
|
|
294
420
|
/*
|
|
295
421
|
* Build the chat completions URL for an OpenAI-compatible server from the
|
|
296
422
|
* configured base URL. Users enter the base URL in a few different ways, and
|
|
@@ -436,9 +562,9 @@ export default class LLMService {
|
|
|
436
562
|
: {}),
|
|
437
563
|
},
|
|
438
564
|
options: {
|
|
439
|
-
retries: 2,
|
|
565
|
+
retries: request.requestRetries ?? 2,
|
|
440
566
|
exponentialBackoff: true,
|
|
441
|
-
timeout: 120000,
|
|
567
|
+
timeout: request.requestTimeoutInMs ?? 120000,
|
|
442
568
|
},
|
|
443
569
|
});
|
|
444
570
|
|
|
@@ -448,11 +574,12 @@ export default class LLMService {
|
|
|
448
574
|
};
|
|
449
575
|
|
|
450
576
|
if (response instanceof HTTPErrorResponse) {
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
577
|
+
this.throwProviderHTTPError({
|
|
578
|
+
providerName: config.llmType.toString(),
|
|
579
|
+
response,
|
|
580
|
+
logAttributes,
|
|
581
|
+
includeProviderErrorDetails: request.includeProviderErrorDetails,
|
|
582
|
+
});
|
|
456
583
|
}
|
|
457
584
|
|
|
458
585
|
return this.parseOpenAIResponse(
|
|
@@ -513,9 +640,9 @@ export default class LLMService {
|
|
|
513
640
|
"Content-Type": "application/json",
|
|
514
641
|
},
|
|
515
642
|
options: {
|
|
516
|
-
retries: 2,
|
|
643
|
+
retries: request.requestRetries ?? 2,
|
|
517
644
|
exponentialBackoff: true,
|
|
518
|
-
timeout: 120000,
|
|
645
|
+
timeout: request.requestTimeoutInMs ?? 120000,
|
|
519
646
|
},
|
|
520
647
|
});
|
|
521
648
|
|
|
@@ -525,11 +652,12 @@ export default class LLMService {
|
|
|
525
652
|
};
|
|
526
653
|
|
|
527
654
|
if (response instanceof HTTPErrorResponse) {
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
655
|
+
this.throwProviderHTTPError({
|
|
656
|
+
providerName: "Azure OpenAI",
|
|
657
|
+
response,
|
|
658
|
+
logAttributes,
|
|
659
|
+
includeProviderErrorDetails: request.includeProviderErrorDetails,
|
|
660
|
+
});
|
|
533
661
|
}
|
|
534
662
|
|
|
535
663
|
return this.parseOpenAIResponse(
|
|
@@ -717,9 +845,9 @@ export default class LLMService {
|
|
|
717
845
|
"Content-Type": "application/json",
|
|
718
846
|
},
|
|
719
847
|
options: {
|
|
720
|
-
retries: 2,
|
|
848
|
+
retries: request.requestRetries ?? 2,
|
|
721
849
|
exponentialBackoff: true,
|
|
722
|
-
timeout: 120000,
|
|
850
|
+
timeout: request.requestTimeoutInMs ?? 120000,
|
|
723
851
|
},
|
|
724
852
|
});
|
|
725
853
|
|
|
@@ -729,11 +857,12 @@ export default class LLMService {
|
|
|
729
857
|
};
|
|
730
858
|
|
|
731
859
|
if (response instanceof HTTPErrorResponse) {
|
|
732
|
-
|
|
733
|
-
|
|
734
|
-
|
|
735
|
-
|
|
736
|
-
|
|
860
|
+
this.throwProviderHTTPError({
|
|
861
|
+
providerName: "Anthropic",
|
|
862
|
+
response,
|
|
863
|
+
logAttributes: anthropicLogAttributes,
|
|
864
|
+
includeProviderErrorDetails: request.includeProviderErrorDetails,
|
|
865
|
+
});
|
|
737
866
|
}
|
|
738
867
|
|
|
739
868
|
const jsonData: JSONObject = response.jsonData as JSONObject;
|
|
@@ -855,9 +984,9 @@ export default class LLMService {
|
|
|
855
984
|
"Content-Type": "application/json",
|
|
856
985
|
},
|
|
857
986
|
options: {
|
|
858
|
-
retries: 2,
|
|
987
|
+
retries: request.requestRetries ?? 2,
|
|
859
988
|
exponentialBackoff: true,
|
|
860
|
-
timeout: 300000, //
|
|
989
|
+
timeout: request.requestTimeoutInMs ?? 300000, // Ollama may be slower
|
|
861
990
|
},
|
|
862
991
|
});
|
|
863
992
|
|
|
@@ -867,11 +996,12 @@ export default class LLMService {
|
|
|
867
996
|
};
|
|
868
997
|
|
|
869
998
|
if (response instanceof HTTPErrorResponse) {
|
|
870
|
-
|
|
871
|
-
|
|
872
|
-
|
|
873
|
-
|
|
874
|
-
|
|
999
|
+
this.throwProviderHTTPError({
|
|
1000
|
+
providerName: "Ollama",
|
|
1001
|
+
response,
|
|
1002
|
+
logAttributes: ollamaLogAttributes,
|
|
1003
|
+
includeProviderErrorDetails: request.includeProviderErrorDetails,
|
|
1004
|
+
});
|
|
875
1005
|
}
|
|
876
1006
|
|
|
877
1007
|
const jsonData: JSONObject = response.jsonData as JSONObject;
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
import DataToProcess from "../DataToProcess";
|
|
2
|
+
import CompareCriteria from "./CompareCriteria";
|
|
3
|
+
import {
|
|
4
|
+
CheckOn,
|
|
5
|
+
CriteriaFilter,
|
|
6
|
+
} from "../../../../Types/Monitor/CriteriaFilter";
|
|
7
|
+
import SqlMonitorResponse from "../../../../Types/Monitor/SqlMonitor/SqlMonitorResponse";
|
|
8
|
+
import ProbeMonitorResponse from "../../../../Types/Probe/ProbeMonitorResponse";
|
|
9
|
+
import CaptureSpan from "../../Telemetry/CaptureSpan";
|
|
10
|
+
|
|
11
|
+
export default class SqlMonitorCriteria {
|
|
12
|
+
@CaptureSpan()
|
|
13
|
+
public static async isMonitorInstanceCriteriaFilterMet(input: {
|
|
14
|
+
dataToProcess: DataToProcess;
|
|
15
|
+
criteriaFilter: CriteriaFilter;
|
|
16
|
+
}): Promise<string | null> {
|
|
17
|
+
let threshold: number | string | undefined | null =
|
|
18
|
+
input.criteriaFilter.value;
|
|
19
|
+
|
|
20
|
+
const dataToProcess: ProbeMonitorResponse =
|
|
21
|
+
input.dataToProcess as ProbeMonitorResponse;
|
|
22
|
+
|
|
23
|
+
const sqlResponse: SqlMonitorResponse | undefined =
|
|
24
|
+
dataToProcess.sqlQueryMonitorResponse;
|
|
25
|
+
|
|
26
|
+
// Is the database reachable / did the check succeed?
|
|
27
|
+
if (input.criteriaFilter.checkOn === CheckOn.SqlIsOnline) {
|
|
28
|
+
return CompareCriteria.compareCriteriaBoolean({
|
|
29
|
+
value: dataToProcess.isOnline as boolean,
|
|
30
|
+
criteriaFilter: input.criteriaFilter,
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
// Number of rows the query returned.
|
|
35
|
+
if (input.criteriaFilter.checkOn === CheckOn.SqlQueryRowCount) {
|
|
36
|
+
threshold = CompareCriteria.convertToNumber(threshold);
|
|
37
|
+
|
|
38
|
+
if (threshold === null || threshold === undefined) {
|
|
39
|
+
return null;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
if (
|
|
43
|
+
sqlResponse?.rowCount === null ||
|
|
44
|
+
sqlResponse?.rowCount === undefined
|
|
45
|
+
) {
|
|
46
|
+
return null;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
return CompareCriteria.compareCriteriaNumbers({
|
|
50
|
+
value: sqlResponse.rowCount,
|
|
51
|
+
threshold: threshold as number,
|
|
52
|
+
criteriaFilter: input.criteriaFilter,
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
// Query execution time (in ms).
|
|
57
|
+
if (input.criteriaFilter.checkOn === CheckOn.SqlQueryExecutionTime) {
|
|
58
|
+
threshold = CompareCriteria.convertToNumber(threshold);
|
|
59
|
+
|
|
60
|
+
if (threshold === null || threshold === undefined) {
|
|
61
|
+
return null;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
const executionTime: number | undefined =
|
|
65
|
+
sqlResponse?.responseTimeInMs ?? dataToProcess.responseTimeInMs;
|
|
66
|
+
|
|
67
|
+
if (executionTime === null || executionTime === undefined) {
|
|
68
|
+
return null;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
return CompareCriteria.compareCriteriaNumbers({
|
|
72
|
+
value: executionTime,
|
|
73
|
+
threshold: threshold as number,
|
|
74
|
+
criteriaFilter: input.criteriaFilter,
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/*
|
|
79
|
+
* The first column of the first row — the natural target for a
|
|
80
|
+
* COUNT(*)-style query. Compared numerically when both sides look
|
|
81
|
+
* numeric, otherwise as strings.
|
|
82
|
+
*/
|
|
83
|
+
if (input.criteriaFilter.checkOn === CheckOn.SqlQueryScalarValue) {
|
|
84
|
+
const scalarValue: string | number | boolean | null | undefined =
|
|
85
|
+
sqlResponse?.scalarValue;
|
|
86
|
+
|
|
87
|
+
if (scalarValue === null || scalarValue === undefined) {
|
|
88
|
+
return null;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
const numericThreshold: number | null =
|
|
92
|
+
CompareCriteria.convertToNumber(threshold);
|
|
93
|
+
const scalarAsNumber: number = Number(scalarValue);
|
|
94
|
+
|
|
95
|
+
if (
|
|
96
|
+
numericThreshold !== null &&
|
|
97
|
+
typeof scalarValue !== "boolean" &&
|
|
98
|
+
!isNaN(scalarAsNumber)
|
|
99
|
+
) {
|
|
100
|
+
const numericResult: string | null =
|
|
101
|
+
CompareCriteria.compareCriteriaNumbers({
|
|
102
|
+
value: scalarAsNumber,
|
|
103
|
+
threshold: numericThreshold,
|
|
104
|
+
criteriaFilter: input.criteriaFilter,
|
|
105
|
+
});
|
|
106
|
+
|
|
107
|
+
if (numericResult) {
|
|
108
|
+
return numericResult;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
if (threshold !== null && threshold !== undefined) {
|
|
113
|
+
return CompareCriteria.compareCriteriaStrings({
|
|
114
|
+
value: String(scalarValue),
|
|
115
|
+
threshold: String(threshold),
|
|
116
|
+
criteriaFilter: input.criteriaFilter,
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
return null;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
// The query error message (present when the query failed).
|
|
124
|
+
if (input.criteriaFilter.checkOn === CheckOn.SqlQueryError) {
|
|
125
|
+
const emptyNotEmptyResult: string | null =
|
|
126
|
+
CompareCriteria.compareEmptyAndNotEmpty({
|
|
127
|
+
value: sqlResponse?.queryError,
|
|
128
|
+
criteriaFilter: input.criteriaFilter,
|
|
129
|
+
});
|
|
130
|
+
|
|
131
|
+
if (emptyNotEmptyResult) {
|
|
132
|
+
return emptyNotEmptyResult;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
if (
|
|
136
|
+
threshold !== null &&
|
|
137
|
+
threshold !== undefined &&
|
|
138
|
+
typeof sqlResponse?.queryError === "string"
|
|
139
|
+
) {
|
|
140
|
+
return CompareCriteria.compareCriteriaStrings({
|
|
141
|
+
value: sqlResponse.queryError,
|
|
142
|
+
threshold: threshold.toString(),
|
|
143
|
+
criteriaFilter: input.criteriaFilter,
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
return null;
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
return null;
|
|
151
|
+
}
|
|
152
|
+
}
|
|
@@ -20,6 +20,7 @@ import SnmpMonitorCriteria from "./Criteria/SnmpMonitorCriteria";
|
|
|
20
20
|
import DnsMonitorCriteria from "./Criteria/DnsMonitorCriteria";
|
|
21
21
|
import DomainMonitorCriteria from "./Criteria/DomainMonitorCriteria";
|
|
22
22
|
import DnssecMonitorCriteria from "./Criteria/DnssecMonitorCriteria";
|
|
23
|
+
import SqlMonitorCriteria from "./Criteria/SqlMonitorCriteria";
|
|
23
24
|
import ExternalStatusPageMonitorCriteria from "./Criteria/ExternalStatusPageMonitorCriteria";
|
|
24
25
|
import MonitorCriteriaMessageBuilder from "./MonitorCriteriaMessageBuilder";
|
|
25
26
|
import MonitorCriteriaDataExtractor from "./MonitorCriteriaDataExtractor";
|
|
@@ -41,6 +42,7 @@ import ProbeApiIngestResponse, {
|
|
|
41
42
|
import ProbeMonitorResponse from "../../../Types/Probe/ProbeMonitorResponse";
|
|
42
43
|
import RequestFailedDetails from "../../../Types/Probe/RequestFailedDetails";
|
|
43
44
|
import IncomingMonitorRequest from "../../../Types/Monitor/IncomingMonitor/IncomingMonitorRequest";
|
|
45
|
+
import SqlMonitorResponse from "../../../Types/Monitor/SqlMonitor/SqlMonitorResponse";
|
|
44
46
|
import MonitorType from "../../../Types/Monitor/MonitorType";
|
|
45
47
|
import { CheckOn, CriteriaFilter } from "../../../Types/Monitor/CriteriaFilter";
|
|
46
48
|
import OneUptimeDate from "../../../Types/Date";
|
|
@@ -578,6 +580,21 @@ ${contextBlock}
|
|
|
578
580
|
};
|
|
579
581
|
}
|
|
580
582
|
|
|
583
|
+
if (input.monitor.monitorType === MonitorType.SQLQuery) {
|
|
584
|
+
const sqlResponse: SqlMonitorResponse | undefined = (
|
|
585
|
+
input.dataToProcess as ProbeMonitorResponse
|
|
586
|
+
).sqlQueryMonitorResponse;
|
|
587
|
+
|
|
588
|
+
storageMap = {
|
|
589
|
+
rowCount: sqlResponse?.rowCount,
|
|
590
|
+
scalarValue: sqlResponse?.scalarValue,
|
|
591
|
+
firstRow: sqlResponse?.firstRow,
|
|
592
|
+
executionTimeInMs: sqlResponse?.responseTimeInMs,
|
|
593
|
+
queryError: sqlResponse?.queryError,
|
|
594
|
+
isOnline: (input.dataToProcess as ProbeMonitorResponse).isOnline,
|
|
595
|
+
};
|
|
596
|
+
}
|
|
597
|
+
|
|
581
598
|
let expression: string = input.criteriaFilter.value as string;
|
|
582
599
|
expression = VMUtil.replaceValueInPlace(storageMap, expression, false);
|
|
583
600
|
|
|
@@ -823,6 +840,18 @@ ${contextBlock}
|
|
|
823
840
|
}
|
|
824
841
|
}
|
|
825
842
|
|
|
843
|
+
if (input.monitor.monitorType === MonitorType.SQLQuery) {
|
|
844
|
+
const sqlMonitorResult: string | null =
|
|
845
|
+
await SqlMonitorCriteria.isMonitorInstanceCriteriaFilterMet({
|
|
846
|
+
dataToProcess: input.dataToProcess,
|
|
847
|
+
criteriaFilter: input.criteriaFilter,
|
|
848
|
+
});
|
|
849
|
+
|
|
850
|
+
if (sqlMonitorResult) {
|
|
851
|
+
return sqlMonitorResult;
|
|
852
|
+
}
|
|
853
|
+
}
|
|
854
|
+
|
|
826
855
|
if (input.monitor.monitorType === MonitorType.ExternalStatusPage) {
|
|
827
856
|
const externalStatusPageResult: string | null =
|
|
828
857
|
await ExternalStatusPageMonitorCriteria.isMonitorInstanceCriteriaFilterMet(
|
|
@@ -22,6 +22,7 @@ export default class MonitorCriteriaExpectationBuilder {
|
|
|
22
22
|
|
|
23
23
|
public static describeCriteriaExpectation(
|
|
24
24
|
criteriaFilter: CriteriaFilter,
|
|
25
|
+
options?: { unit?: string | undefined },
|
|
25
26
|
): string | null {
|
|
26
27
|
if (!criteriaFilter.filterType) {
|
|
27
28
|
return null;
|
|
@@ -31,24 +32,33 @@ export default class MonitorCriteriaExpectationBuilder {
|
|
|
31
32
|
|
|
32
33
|
const value: string | number | undefined = criteriaFilter.value;
|
|
33
34
|
|
|
35
|
+
/*
|
|
36
|
+
* Suffix numeric-threshold comparisons with the metric's display unit
|
|
37
|
+
* (e.g. "greater than 5 sec") so the threshold reads in the same unit
|
|
38
|
+
* as the observed value. Only the value-comparison filter types below
|
|
39
|
+
* carry a numeric threshold — the others (empty, boolean, heartbeat
|
|
40
|
+
* windows, …) supply their own wording and get no suffix.
|
|
41
|
+
*/
|
|
42
|
+
const unitSuffix: string = options?.unit ? ` ${options.unit}` : "";
|
|
43
|
+
|
|
34
44
|
switch (criteriaFilter.filterType) {
|
|
35
45
|
case FilterType.GreaterThan:
|
|
36
|
-
expectation = `to be greater than ${value}`;
|
|
46
|
+
expectation = `to be greater than ${value}${unitSuffix}`;
|
|
37
47
|
break;
|
|
38
48
|
case FilterType.GreaterThanOrEqualTo:
|
|
39
|
-
expectation = `to be greater than or equal to ${value}`;
|
|
49
|
+
expectation = `to be greater than or equal to ${value}${unitSuffix}`;
|
|
40
50
|
break;
|
|
41
51
|
case FilterType.LessThan:
|
|
42
|
-
expectation = `to be less than ${value}`;
|
|
52
|
+
expectation = `to be less than ${value}${unitSuffix}`;
|
|
43
53
|
break;
|
|
44
54
|
case FilterType.LessThanOrEqualTo:
|
|
45
|
-
expectation = `to be less than or equal to ${value}`;
|
|
55
|
+
expectation = `to be less than or equal to ${value}${unitSuffix}`;
|
|
46
56
|
break;
|
|
47
57
|
case FilterType.EqualTo:
|
|
48
|
-
expectation = `to equal ${value}`;
|
|
58
|
+
expectation = `to equal ${value}${unitSuffix}`;
|
|
49
59
|
break;
|
|
50
60
|
case FilterType.NotEqualTo:
|
|
51
|
-
expectation = `to not equal ${value}`;
|
|
61
|
+
expectation = `to not equal ${value}${unitSuffix}`;
|
|
52
62
|
break;
|
|
53
63
|
case FilterType.Contains:
|
|
54
64
|
expectation = `to contain ${value}`;
|
|
@@ -53,9 +53,23 @@ export default class MonitorCriteriaMessageBuilder {
|
|
|
53
53
|
dataToProcess: DataToProcess;
|
|
54
54
|
monitorStep: MonitorStep;
|
|
55
55
|
}): string | null {
|
|
56
|
+
/*
|
|
57
|
+
* Resolve the metric's display unit (undefined for non-metric criteria)
|
|
58
|
+
* so the threshold in the expectation clause reads in the same unit as
|
|
59
|
+
* the observed value — "recorded latest 0.06 sec (expected to be greater
|
|
60
|
+
* than 5 sec)" rather than the unitless "0.06 (expected ... 5)".
|
|
61
|
+
*/
|
|
62
|
+
const metricDisplayUnit: string | undefined =
|
|
63
|
+
MonitorCriteriaObservationBuilder.getMetricValueDisplayUnit({
|
|
64
|
+
criteriaFilter: input.criteriaFilter,
|
|
65
|
+
dataToProcess: input.dataToProcess,
|
|
66
|
+
monitorStep: input.monitorStep,
|
|
67
|
+
});
|
|
68
|
+
|
|
56
69
|
const expectation: string | null =
|
|
57
70
|
MonitorCriteriaExpectationBuilder.describeCriteriaExpectation(
|
|
58
71
|
input.criteriaFilter,
|
|
72
|
+
{ unit: metricDisplayUnit },
|
|
59
73
|
);
|
|
60
74
|
|
|
61
75
|
const observation: string | null =
|
|
@@ -136,7 +136,10 @@ export default class MonitorCriteriaMessageFormatter {
|
|
|
136
136
|
return null;
|
|
137
137
|
}
|
|
138
138
|
|
|
139
|
-
public static summarizeNumericSeries(
|
|
139
|
+
public static summarizeNumericSeries(
|
|
140
|
+
values: Array<number>,
|
|
141
|
+
unit?: string | undefined,
|
|
142
|
+
): string | null {
|
|
140
143
|
if (!values.length) {
|
|
141
144
|
return null;
|
|
142
145
|
}
|
|
@@ -147,12 +150,18 @@ export default class MonitorCriteriaMessageFormatter {
|
|
|
147
150
|
return null;
|
|
148
151
|
}
|
|
149
152
|
|
|
153
|
+
/*
|
|
154
|
+
* Suffix each value with its unit (e.g. "0.06 sec") so the reader knows
|
|
155
|
+
* what the numbers mean. Empty when the metric has no known unit.
|
|
156
|
+
*/
|
|
157
|
+
const unitSuffix: string = unit ? ` ${unit}` : "";
|
|
158
|
+
|
|
150
159
|
const latestFormatted: string | null =
|
|
151
160
|
MonitorCriteriaMessageFormatter.formatNumber(latest, {
|
|
152
161
|
maximumFractionDigits: 2,
|
|
153
162
|
});
|
|
154
163
|
|
|
155
|
-
let summary: string = `latest ${latestFormatted ?? latest}`;
|
|
164
|
+
let summary: string = `latest ${latestFormatted ?? latest}${unitSuffix}`;
|
|
156
165
|
|
|
157
166
|
if (values.length > 1) {
|
|
158
167
|
const min: number = Math.min(...values);
|
|
@@ -167,7 +176,9 @@ export default class MonitorCriteriaMessageFormatter {
|
|
|
167
176
|
maximumFractionDigits: 2,
|
|
168
177
|
});
|
|
169
178
|
|
|
170
|
-
summary += ` (min ${minFormatted ?? min}, max ${
|
|
179
|
+
summary += ` (min ${minFormatted ?? min}${unitSuffix}, max ${
|
|
180
|
+
maxFormatted ?? max
|
|
181
|
+
}${unitSuffix})`;
|
|
171
182
|
}
|
|
172
183
|
|
|
173
184
|
summary += ` across ${values.length} data point${
|