@oneuptime/common 12.0.4 → 12.0.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/AIRun.ts +38 -1
- package/Models/DatabaseModels/AlertFeed.ts +30 -0
- package/Models/DatabaseModels/Dashboard.ts +28 -0
- package/Models/DatabaseModels/Incident.ts +2 -0
- package/Models/DatabaseModels/IncidentEpisode.ts +1 -0
- package/Models/DatabaseModels/IncidentEpisodePublicNote.ts +1 -0
- package/Models/DatabaseModels/IncidentEpisodeStateTimeline.ts +1 -0
- package/Models/DatabaseModels/IncidentFeed.ts +30 -0
- package/Models/DatabaseModels/IncidentPublicNote.ts +1 -0
- package/Models/DatabaseModels/IncidentStateTimeline.ts +1 -0
- package/Models/DatabaseModels/LogSavedView.ts +33 -0
- package/Models/DatabaseModels/Project.ts +231 -9
- package/Models/DatabaseModels/ScheduledMaintenance.ts +1 -0
- package/Models/DatabaseModels/ScheduledMaintenancePublicNote.ts +1 -0
- package/Models/DatabaseModels/ScheduledMaintenanceStateTimeline.ts +1 -0
- package/Models/DatabaseModels/ScheduledMaintenanceTemplateOwnerUser.ts +4 -4
- package/Models/DatabaseModels/StatusPage.ts +28 -0
- package/Models/DatabaseModels/StatusPageAnnouncement.ts +1 -0
- package/Server/API/AIAgentDataAPI.ts +44 -55
- package/Server/API/AIInvestigationAPI.ts +175 -17
- package/Server/API/DashboardAPI.ts +10 -10
- package/Server/API/StatusPageAPI.ts +38 -19
- package/Server/EnvironmentConfig.ts +16 -0
- package/Server/Infrastructure/ClickhouseConfig.ts +15 -1
- package/Server/Infrastructure/ClickhouseDatabase.ts +1 -1
- package/Server/Infrastructure/Postgres/SchemaMigrations/1786096660558-AddTimeRangeToLogSavedView.ts +27 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1786101798351-MigrationName.ts +89 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1786105470826-MigrationName.ts +27 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1786400000000-AddMasterPasswordSalt.ts +40 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1786500000000-AddInvestigationCodeFixRecommendation.ts +26 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +10 -0
- package/Server/Services/AIRunService.ts +78 -10
- package/Server/Services/AIService.ts +94 -22
- package/Server/Services/AlertFeedService.ts +5 -0
- package/Server/Services/AnalyticsDatabaseService.ts +29 -0
- package/Server/Services/DatabaseService.ts +43 -2
- package/Server/Services/IncidentFeedService.ts +5 -0
- package/Server/Services/LlmLogService.ts +46 -2
- package/Server/Utils/AI/Chat/ObservabilityAssistant.ts +6 -0
- package/Server/Utils/AI/CodeFix/CodeFixAgentCompletion.ts +4 -0
- package/Server/Utils/AI/CodeFix/CodeFixReadiness.ts +8 -5
- package/Server/Utils/AI/CodeFix/FixRunBudget.ts +90 -16
- package/Server/Utils/AI/Remediation/RemediationExecutionRunner.ts +2 -0
- package/Server/Utils/AI/Remediation/RemediationPlanRunner.ts +2 -0
- package/Server/Utils/AI/SRE/AIInvestigationEngine.ts +223 -22
- package/Server/Utils/AI/SRE/AlertInvestigationRunner.ts +25 -24
- package/Server/Utils/AI/SRE/ConfidenceSignal.ts +182 -71
- package/Server/Utils/AI/SRE/FixFromIncidentTaskTrigger.ts +252 -43
- package/Server/Utils/AI/SRE/IncidentInvestigationRunner.ts +25 -24
- package/Server/Utils/AI/SRE/InstrumentationTaskTrigger.ts +47 -13
- package/Server/Utils/AI/SRE/InvestigationGrader.ts +9 -5
- package/Server/Utils/AI/SRE/InvestigationQueue.ts +141 -24
- package/Server/Utils/AI/SRE/InvestigationSubjectLock.ts +66 -0
- package/Server/Utils/AI/SRE/PostedRootCause.ts +94 -3
- package/Server/Utils/AI/SRE/README.md +1 -1
- package/Server/Utils/AI/SRE/SubjectCodeFixRun.ts +132 -10
- package/Server/Utils/AnalyticsDatabase/ClusterConfig.ts +24 -0
- package/Server/Utils/Monitor/Criteria/APIRequestCriteria.ts +29 -0
- package/Server/Utils/Monitor/Criteria/DomainMonitorCriteria.ts +56 -0
- package/Server/Utils/Monitor/MonitorMetricUtil.ts +46 -0
- package/Server/Utils/Monitor/MonitorTemplateUtil.ts +1 -0
- package/Server/Utils/PasswordHash.ts +28 -4
- package/Tests/App/Dashboard/AIInvestigationHeaderStatus.test.tsx +251 -0
- package/Tests/App/Dashboard/EventStatusPanel.test.tsx +747 -0
- package/Tests/App/Dashboard/InvestigationFeedRefresh.test.tsx +480 -0
- package/Tests/App/Dashboard/InvestigationPanel.test.tsx +1184 -0
- package/Tests/App/Dashboard/InvestigationPanelStatus.test.tsx +500 -0
- package/Tests/App/Dashboard/PortMonitorCriteriaFilter.test.ts +93 -0
- package/Tests/App/StatusPage/PublicStatusPageAPIErrorHandling.test.ts +117 -0
- package/Tests/App/StatusPage/StatusPageModelAPIPolymorphism.test.ts +223 -0
- package/Tests/Models/DatabaseModels/PermissionCatalogueCoverage.test.ts +243 -0
- package/Tests/Server/API/AIAgentDataFixFromIncidentContext.test.ts +266 -0
- package/Tests/Server/API/AIInvestigationAPI.test.ts +594 -0
- package/Tests/Server/API/AIInvestigationCreateFixTask.test.ts +80 -0
- package/Tests/Server/API/DashboardMasterPasswordAPI.test.ts +172 -1
- package/Tests/Server/API/StatusPageMasterPasswordAPI.test.ts +335 -0
- package/Tests/Server/Services/AIRunCodeFixClaim.test.ts +59 -5
- package/Tests/Server/Services/AIRunHumanVerdict.test.ts +127 -58
- package/Tests/Server/Services/AIServiceDailyBudget.test.ts +396 -20
- package/Tests/Server/Services/AddMasterPasswordSaltMigration.test.ts +283 -0
- package/Tests/Server/Services/AnalyticsDatabaseService.test.ts +25 -1
- package/Tests/Server/Services/DatabaseServicePerUserPasswordSalt.test.ts +45 -35
- package/Tests/Server/Services/DatabaseServiceUpdateColumnsWithoutHooks.test.ts +54 -0
- package/Tests/Server/Services/FeedAIRunAssociation.test.ts +125 -0
- package/Tests/Server/Services/FixFromIncidentTaskTrigger.test.ts +418 -57
- package/Tests/Server/Services/InstrumentationTaskTrigger.test.ts +173 -14
- package/Tests/Server/Services/MasterPasswordScrypt.test.ts +567 -0
- package/Tests/Server/Services/SeparateIncidentAlertAiSettingsMigration.test.ts +194 -0
- package/Tests/Server/Utils/AI/AIAlertGating.test.ts +37 -4
- package/Tests/Server/Utils/AI/AIConfidenceSignal.test.ts +330 -29
- package/Tests/Server/Utils/AI/AIIncidentGating.test.ts +25 -0
- package/Tests/Server/Utils/AI/AIInvestigationQueue.test.ts +293 -5
- package/Tests/Server/Utils/AI/CodeFixAgentCompletion.test.ts +59 -1
- package/Tests/Server/Utils/AI/FixFromIncidentAutoTrigger.test.ts +342 -19
- package/Tests/Server/Utils/AI/FixRunBudget.test.ts +214 -30
- package/Tests/Server/Utils/AI/Insights/InvestigationQueueInsightSubject.test.ts +2 -0
- package/Tests/Server/Utils/AI/InvestigationGrader.test.ts +65 -17
- package/Tests/Server/Utils/AI/InvestigationQueueRemediationExecution.test.ts +3 -0
- package/Tests/Server/Utils/AI/InvestigationSettlement.test.ts +313 -20
- package/Tests/Server/Utils/AI/PostedRootCause.test.ts +254 -0
- package/Tests/Server/Utils/AI/RemediationExecutionRunner.test.ts +4 -0
- package/Tests/Server/Utils/AI/RemediationPlanRunner.test.ts +2 -0
- package/Tests/Server/Utils/AI/SubjectCodeFixRunDedupe.test.ts +44 -0
- package/Tests/Server/Utils/AnalyticsDatabase/ClusterAwareSchema.test.ts +30 -0
- package/Tests/Server/Utils/Monitor/Criteria/APIRequestCriteriaPortTimings.test.ts +212 -0
- package/Tests/Server/Utils/Monitor/Criteria/DomainMonitorCriteria.test.ts +401 -0
- package/Tests/Server/Utils/Monitor/MonitorMetricUtilPortTimings.test.ts +243 -0
- package/Tests/Server/Utils/PasswordHash.test.ts +30 -0
- package/Tests/Types/Dashboard/DashboardTemplates.test.ts +111 -0
- package/Tests/Types/Monitor/CephMetricCatalog.test.ts +104 -0
- package/Tests/Types/Monitor/CriteriaFilter.test.ts +4 -0
- package/Tests/Types/Monitor/DockerMetricCatalog.test.ts +109 -0
- package/Tests/Types/Monitor/DockerSwarmMetricCatalog.test.ts +118 -0
- package/Tests/Types/Monitor/HostMetricCatalog.test.ts +104 -0
- package/Tests/Types/Monitor/IotMetricCatalog.test.ts +104 -0
- package/Tests/Types/Monitor/KubernetesMetricCatalog.test.ts +118 -0
- package/Tests/Types/Monitor/MonitorCriteriaInstance.test.ts +42 -0
- package/Tests/Types/Monitor/MonitorStep.test.ts +38 -0
- package/Tests/Types/Monitor/MonitorStepDomainMonitor.test.ts +75 -0
- package/Tests/Types/Monitor/PodmanMetricCatalog.test.ts +109 -0
- package/Tests/Types/Monitor/ProxmoxMetricCatalog.test.ts +107 -0
- package/Tests/Types/Monitor/SnmpMonitor/SnmpVendorTemplate.test.ts +151 -0
- package/Tests/Types/Permission.test.ts +137 -0
- package/Tests/Types/Rum/SessionReplayMaskingMode.test.ts +101 -0
- package/Tests/UI/Components/AiInvestigationSettingsCard.test.tsx +5 -5
- package/Tests/UI/Components/CardModelDetailEdit.test.tsx +3 -5
- package/Tests/UI/Components/ErrorBoundary.test.tsx +158 -0
- package/Tests/UI/Components/FeedItemSafeMode.test.tsx +74 -0
- package/Tests/UI/Components/MoreMenu.test.tsx +756 -0
- package/Tests/UI/Components/StatusPage/ResourceGroupSection.test.tsx +62 -0
- package/Tests/UI/Monitor/PortMonitorView.test.tsx +237 -0
- package/Tests/UI/Telemetry/TelemetrySnapshotWindowAlert.test.tsx +91 -0
- package/Tests/UI/Utils/DownloadFile.test.ts +103 -0
- package/Tests/UI/Utils/ErrorSupportBundle.test.ts +582 -0
- package/Tests/UI/Utils/Project.test.ts +31 -0
- package/Tests/UI/Utils/StatusPageModelAPIInjection.test.ts +245 -0
- package/Tests/UI/Utils/UseDashboardGridDnd.test.tsx +820 -0
- package/Tests/Utils/Dashboard/DashboardViewConfig.test.ts +329 -0
- package/Tests/Utils/Dashboard/GridLayout.test.ts +951 -0
- package/Tests/Utils/Monitor/MonitorMetricType.test.ts +117 -0
- package/Tests/Utils/RecordingRuleExpression.test.ts +327 -0
- package/Tests/Utils/StatusPage/GroupNestingLayout.test.ts +186 -0
- package/Tests/Utils/StatusPage/GroupTree.test.ts +456 -0
- package/Tests/Utils/StatusPage/OverviewGroupHierarchyVisibility.test.ts +588 -0
- package/Tests/Utils/Telemetry/SavedViewTimeRange.test.ts +244 -0
- package/Tests/Utils/Telemetry/TelemetryQueryTimeRange.test.ts +825 -0
- package/Types/AI/AIRunCodeFixRecommendation.ts +17 -0
- package/Types/AI/CodeFixTaskContext.ts +63 -3
- package/Types/AI/CodeFixTaskType.ts +3 -3
- package/Types/HashedString.ts +4 -3
- package/Types/Monitor/CriteriaFilter.ts +4 -0
- package/Types/Monitor/DomainMonitor/DomainLookupMethod.ts +23 -0
- package/Types/Monitor/DomainMonitor/DomainMonitorResponse.ts +7 -0
- package/Types/Monitor/MonitorCriteriaInstance.ts +24 -7
- package/Types/Monitor/MonitorMetricType.ts +8 -0
- package/Types/Monitor/MonitorStep.ts +10 -1
- package/Types/Monitor/MonitorStepDomainMonitor.ts +21 -0
- package/Types/Monitor/PortMonitor/PortMonitorTimings.ts +10 -0
- package/Types/Permission.ts +23 -175
- package/Types/Probe/ProbeMonitorResponse.ts +6 -0
- package/UI/Components/BulkUpdate/BulkUpdateForm.tsx +2 -3
- package/UI/Components/ErrorBoundary.tsx +138 -11
- package/UI/Components/Feed/FeedItem.tsx +9 -2
- package/UI/Components/ModelDetail/CardModelDetail.tsx +0 -12
- package/UI/Components/ModelTable/BaseModelTable.tsx +1 -1
- package/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.ts +12 -2
- package/UI/Components/MoreMenu/MoreMenu.tsx +285 -97
- package/UI/Components/MoreMenu/MoreMenuItem.tsx +8 -5
- package/UI/Utils/DownloadFile.ts +16 -8
- package/UI/Utils/ErrorSupportBundle.ts +805 -0
- package/UI/Utils/ModelAPI/ModelAPI.ts +19 -8
- package/UI/Utils/Project.ts +4 -0
- package/UI/Utils/StatusPage.ts +8 -2
- package/UI/Utils/UseDashboardGridDnd.ts +917 -0
- package/Utils/Dashboard/DashboardViewConfig.ts +80 -36
- package/Utils/Dashboard/GridLayout.ts +523 -0
- package/Utils/Metrics/RecordingRuleExpression.ts +19 -17
- package/Utils/Monitor/MonitorMetricType.ts +44 -2
- package/Utils/StatusPage/GroupNestingLayout.ts +69 -0
- package/Utils/StatusPage/GroupTree.ts +157 -66
- package/Utils/StatusPage/ResourceUptime.ts +37 -2
- package/Utils/Telemetry/SavedViewTimeRange.ts +114 -0
- package/Utils/Telemetry/TelemetryQueryTimeRange.ts +334 -0
- package/build/dist/Models/DatabaseModels/AIRun.js +39 -1
- package/build/dist/Models/DatabaseModels/AIRun.js.map +1 -1
- package/build/dist/Models/DatabaseModels/AlertFeed.js +32 -0
- package/build/dist/Models/DatabaseModels/AlertFeed.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Dashboard.js +29 -0
- package/build/dist/Models/DatabaseModels/Dashboard.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Incident.js +2 -0
- package/build/dist/Models/DatabaseModels/Incident.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncidentEpisode.js +1 -0
- package/build/dist/Models/DatabaseModels/IncidentEpisode.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncidentEpisodePublicNote.js +1 -0
- package/build/dist/Models/DatabaseModels/IncidentEpisodePublicNote.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncidentEpisodeStateTimeline.js +1 -0
- package/build/dist/Models/DatabaseModels/IncidentEpisodeStateTimeline.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncidentFeed.js +32 -0
- package/build/dist/Models/DatabaseModels/IncidentFeed.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncidentPublicNote.js +1 -0
- package/build/dist/Models/DatabaseModels/IncidentPublicNote.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncidentStateTimeline.js +1 -0
- package/build/dist/Models/DatabaseModels/IncidentStateTimeline.js.map +1 -1
- package/build/dist/Models/DatabaseModels/LogSavedView.js +33 -0
- package/build/dist/Models/DatabaseModels/LogSavedView.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Project.js +241 -11
- package/build/dist/Models/DatabaseModels/Project.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ScheduledMaintenance.js +1 -0
- package/build/dist/Models/DatabaseModels/ScheduledMaintenance.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ScheduledMaintenancePublicNote.js +1 -0
- package/build/dist/Models/DatabaseModels/ScheduledMaintenancePublicNote.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ScheduledMaintenanceStateTimeline.js +1 -0
- package/build/dist/Models/DatabaseModels/ScheduledMaintenanceStateTimeline.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ScheduledMaintenanceTemplateOwnerUser.js +4 -4
- package/build/dist/Models/DatabaseModels/StatusPage.js +29 -0
- package/build/dist/Models/DatabaseModels/StatusPage.js.map +1 -1
- package/build/dist/Models/DatabaseModels/StatusPageAnnouncement.js +1 -0
- package/build/dist/Models/DatabaseModels/StatusPageAnnouncement.js.map +1 -1
- package/build/dist/Server/API/AIAgentDataAPI.js +28 -46
- package/build/dist/Server/API/AIAgentDataAPI.js.map +1 -1
- package/build/dist/Server/API/AIInvestigationAPI.js +111 -11
- package/build/dist/Server/API/AIInvestigationAPI.js.map +1 -1
- package/build/dist/Server/API/DashboardAPI.js +8 -5
- package/build/dist/Server/API/DashboardAPI.js.map +1 -1
- package/build/dist/Server/API/StatusPageAPI.js +29 -11
- package/build/dist/Server/API/StatusPageAPI.js.map +1 -1
- package/build/dist/Server/EnvironmentConfig.js +14 -0
- package/build/dist/Server/EnvironmentConfig.js.map +1 -1
- package/build/dist/Server/Infrastructure/ClickhouseConfig.js +12 -1
- package/build/dist/Server/Infrastructure/ClickhouseConfig.js.map +1 -1
- package/build/dist/Server/Infrastructure/ClickhouseDatabase.js +1 -1
- package/build/dist/Server/Infrastructure/ClickhouseDatabase.js.map +1 -1
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786096660558-AddTimeRangeToLogSavedView.js +22 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786096660558-AddTimeRangeToLogSavedView.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786101798351-MigrationName.js +36 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786101798351-MigrationName.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786105470826-MigrationName.js +18 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786105470826-MigrationName.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786400000000-AddMasterPasswordSalt.js +19 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786400000000-AddMasterPasswordSalt.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786500000000-AddInvestigationCodeFixRecommendation.js +19 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786500000000-AddInvestigationCodeFixRecommendation.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +10 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
- package/build/dist/Server/Services/AIRunService.js +58 -12
- package/build/dist/Server/Services/AIRunService.js.map +1 -1
- package/build/dist/Server/Services/AIService.js +74 -21
- package/build/dist/Server/Services/AIService.js.map +1 -1
- package/build/dist/Server/Services/AlertFeedService.js +3 -0
- package/build/dist/Server/Services/AlertFeedService.js.map +1 -1
- package/build/dist/Server/Services/AnalyticsDatabaseService.js +29 -1
- package/build/dist/Server/Services/AnalyticsDatabaseService.js.map +1 -1
- package/build/dist/Server/Services/DatabaseService.js +21 -2
- package/build/dist/Server/Services/DatabaseService.js.map +1 -1
- package/build/dist/Server/Services/IncidentFeedService.js +3 -0
- package/build/dist/Server/Services/IncidentFeedService.js.map +1 -1
- package/build/dist/Server/Services/LlmLogService.js +22 -1
- package/build/dist/Server/Services/LlmLogService.js.map +1 -1
- package/build/dist/Server/Utils/AI/Chat/ObservabilityAssistant.js +3 -0
- package/build/dist/Server/Utils/AI/Chat/ObservabilityAssistant.js.map +1 -1
- package/build/dist/Server/Utils/AI/CodeFix/CodeFixAgentCompletion.js +4 -0
- package/build/dist/Server/Utils/AI/CodeFix/CodeFixAgentCompletion.js.map +1 -1
- package/build/dist/Server/Utils/AI/CodeFix/CodeFixReadiness.js +8 -5
- package/build/dist/Server/Utils/AI/CodeFix/CodeFixReadiness.js.map +1 -1
- package/build/dist/Server/Utils/AI/CodeFix/FixRunBudget.js +63 -24
- package/build/dist/Server/Utils/AI/CodeFix/FixRunBudget.js.map +1 -1
- package/build/dist/Server/Utils/AI/Remediation/RemediationExecutionRunner.js +2 -0
- package/build/dist/Server/Utils/AI/Remediation/RemediationExecutionRunner.js.map +1 -1
- package/build/dist/Server/Utils/AI/Remediation/RemediationPlanRunner.js +2 -0
- package/build/dist/Server/Utils/AI/Remediation/RemediationPlanRunner.js.map +1 -1
- package/build/dist/Server/Utils/AI/SRE/AIInvestigationEngine.js +156 -28
- package/build/dist/Server/Utils/AI/SRE/AIInvestigationEngine.js.map +1 -1
- package/build/dist/Server/Utils/AI/SRE/AlertInvestigationRunner.js +21 -19
- package/build/dist/Server/Utils/AI/SRE/AlertInvestigationRunner.js.map +1 -1
- package/build/dist/Server/Utils/AI/SRE/ConfidenceSignal.js +128 -49
- package/build/dist/Server/Utils/AI/SRE/ConfidenceSignal.js.map +1 -1
- package/build/dist/Server/Utils/AI/SRE/FixFromIncidentTaskTrigger.js +170 -31
- package/build/dist/Server/Utils/AI/SRE/FixFromIncidentTaskTrigger.js.map +1 -1
- package/build/dist/Server/Utils/AI/SRE/IncidentInvestigationRunner.js +21 -19
- package/build/dist/Server/Utils/AI/SRE/IncidentInvestigationRunner.js.map +1 -1
- package/build/dist/Server/Utils/AI/SRE/InstrumentationTaskTrigger.js +33 -9
- package/build/dist/Server/Utils/AI/SRE/InstrumentationTaskTrigger.js.map +1 -1
- package/build/dist/Server/Utils/AI/SRE/InvestigationGrader.js +9 -5
- package/build/dist/Server/Utils/AI/SRE/InvestigationGrader.js.map +1 -1
- package/build/dist/Server/Utils/AI/SRE/InvestigationQueue.js +121 -41
- package/build/dist/Server/Utils/AI/SRE/InvestigationQueue.js.map +1 -1
- package/build/dist/Server/Utils/AI/SRE/InvestigationSubjectLock.js +46 -0
- package/build/dist/Server/Utils/AI/SRE/InvestigationSubjectLock.js.map +1 -0
- package/build/dist/Server/Utils/AI/SRE/PostedRootCause.js +61 -14
- package/build/dist/Server/Utils/AI/SRE/PostedRootCause.js.map +1 -1
- package/build/dist/Server/Utils/AI/SRE/SubjectCodeFixRun.js +79 -1
- package/build/dist/Server/Utils/AI/SRE/SubjectCodeFixRun.js.map +1 -1
- package/build/dist/Server/Utils/AnalyticsDatabase/ClusterConfig.js +21 -0
- package/build/dist/Server/Utils/AnalyticsDatabase/ClusterConfig.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/Criteria/APIRequestCriteria.js +20 -3
- package/build/dist/Server/Utils/Monitor/Criteria/APIRequestCriteria.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/Criteria/DomainMonitorCriteria.js +43 -0
- package/build/dist/Server/Utils/Monitor/Criteria/DomainMonitorCriteria.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorMetricUtil.js +33 -0
- package/build/dist/Server/Utils/Monitor/MonitorMetricUtil.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorTemplateUtil.js +1 -0
- package/build/dist/Server/Utils/Monitor/MonitorTemplateUtil.js.map +1 -1
- package/build/dist/Server/Utils/PasswordHash.js +25 -4
- package/build/dist/Server/Utils/PasswordHash.js.map +1 -1
- package/build/dist/Types/AI/AIRunCodeFixRecommendation.js +18 -0
- package/build/dist/Types/AI/AIRunCodeFixRecommendation.js.map +1 -0
- package/build/dist/Types/AI/CodeFixTaskContext.js +23 -3
- package/build/dist/Types/AI/CodeFixTaskContext.js.map +1 -1
- package/build/dist/Types/AI/CodeFixTaskType.js +3 -3
- package/build/dist/Types/HashedString.js +4 -3
- package/build/dist/Types/HashedString.js.map +1 -1
- package/build/dist/Types/Monitor/CriteriaFilter.js +4 -0
- package/build/dist/Types/Monitor/CriteriaFilter.js.map +1 -1
- package/build/dist/Types/Monitor/DomainMonitor/DomainLookupMethod.js +24 -0
- package/build/dist/Types/Monitor/DomainMonitor/DomainLookupMethod.js.map +1 -0
- package/build/dist/Types/Monitor/MonitorCriteriaInstance.js +24 -7
- package/build/dist/Types/Monitor/MonitorCriteriaInstance.js.map +1 -1
- package/build/dist/Types/Monitor/MonitorMetricType.js +7 -0
- package/build/dist/Types/Monitor/MonitorMetricType.js.map +1 -1
- package/build/dist/Types/Monitor/MonitorStep.js +6 -1
- package/build/dist/Types/Monitor/MonitorStep.js.map +1 -1
- package/build/dist/Types/Monitor/MonitorStepDomainMonitor.js +15 -0
- package/build/dist/Types/Monitor/MonitorStepDomainMonitor.js.map +1 -1
- package/build/dist/Types/Monitor/PortMonitor/PortMonitorTimings.js +2 -0
- package/build/dist/Types/Monitor/PortMonitor/PortMonitorTimings.js.map +1 -0
- package/build/dist/Types/Permission.js +23 -155
- package/build/dist/Types/Permission.js.map +1 -1
- package/build/dist/UI/Components/BulkUpdate/BulkUpdateForm.js +2 -5
- package/build/dist/UI/Components/BulkUpdate/BulkUpdateForm.js.map +1 -1
- package/build/dist/UI/Components/ErrorBoundary.js +67 -8
- package/build/dist/UI/Components/ErrorBoundary.js.map +1 -1
- package/build/dist/UI/Components/Feed/FeedItem.js +2 -2
- package/build/dist/UI/Components/Feed/FeedItem.js.map +1 -1
- package/build/dist/UI/Components/ModelDetail/CardModelDetail.js +0 -12
- package/build/dist/UI/Components/ModelDetail/CardModelDetail.js.map +1 -1
- package/build/dist/UI/Components/ModelTable/BaseModelTable.js +1 -1
- package/build/dist/UI/Components/ModelTable/BaseModelTable.js.map +1 -1
- package/build/dist/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.js +12 -2
- package/build/dist/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.js.map +1 -1
- package/build/dist/UI/Components/MoreMenu/MoreMenu.js +193 -65
- package/build/dist/UI/Components/MoreMenu/MoreMenu.js.map +1 -1
- package/build/dist/UI/Components/MoreMenu/MoreMenuItem.js +1 -1
- package/build/dist/UI/Components/MoreMenu/MoreMenuItem.js.map +1 -1
- package/build/dist/UI/Utils/DownloadFile.js +15 -8
- package/build/dist/UI/Utils/DownloadFile.js.map +1 -1
- package/build/dist/UI/Utils/ErrorSupportBundle.js +476 -0
- package/build/dist/UI/Utils/ErrorSupportBundle.js.map +1 -0
- package/build/dist/UI/Utils/ModelAPI/ModelAPI.js +18 -8
- package/build/dist/UI/Utils/ModelAPI/ModelAPI.js.map +1 -1
- package/build/dist/UI/Utils/Project.js +3 -0
- package/build/dist/UI/Utils/Project.js.map +1 -1
- package/build/dist/UI/Utils/StatusPage.js +4 -4
- package/build/dist/UI/Utils/StatusPage.js.map +1 -1
- package/build/dist/UI/Utils/UseDashboardGridDnd.js +551 -0
- package/build/dist/UI/Utils/UseDashboardGridDnd.js.map +1 -0
- package/build/dist/Utils/Dashboard/DashboardViewConfig.js +42 -26
- package/build/dist/Utils/Dashboard/DashboardViewConfig.js.map +1 -1
- package/build/dist/Utils/Dashboard/GridLayout.js +338 -0
- package/build/dist/Utils/Dashboard/GridLayout.js.map +1 -0
- package/build/dist/Utils/Metrics/RecordingRuleExpression.js +19 -17
- package/build/dist/Utils/Metrics/RecordingRuleExpression.js.map +1 -1
- package/build/dist/Utils/Monitor/MonitorMetricType.js +38 -6
- package/build/dist/Utils/Monitor/MonitorMetricType.js.map +1 -1
- package/build/dist/Utils/StatusPage/GroupNestingLayout.js +46 -0
- package/build/dist/Utils/StatusPage/GroupNestingLayout.js.map +1 -1
- package/build/dist/Utils/StatusPage/GroupTree.js +79 -34
- package/build/dist/Utils/StatusPage/GroupTree.js.map +1 -1
- package/build/dist/Utils/StatusPage/ResourceUptime.js +22 -1
- package/build/dist/Utils/StatusPage/ResourceUptime.js.map +1 -1
- package/build/dist/Utils/Telemetry/SavedViewTimeRange.js +79 -0
- package/build/dist/Utils/Telemetry/SavedViewTimeRange.js.map +1 -0
- package/build/dist/Utils/Telemetry/TelemetryQueryTimeRange.js +236 -0
- package/build/dist/Utils/Telemetry/TelemetryQueryTimeRange.js.map +1 -0
- package/package.json +1 -1
|
@@ -3,16 +3,32 @@ import AIRunType from "../../../../Types/AI/AIRunType";
|
|
|
3
3
|
import AIRunStatus, {
|
|
4
4
|
AIRunStatusHelper,
|
|
5
5
|
} from "../../../../Types/AI/AIRunStatus";
|
|
6
|
+
import AIRunCodeFixRecommendation from "../../../../Types/AI/AIRunCodeFixRecommendation";
|
|
6
7
|
import CodeFixTaskType from "../../../../Types/AI/CodeFixTaskType";
|
|
7
|
-
import CodeFixTaskContext
|
|
8
|
+
import CodeFixTaskContext, {
|
|
9
|
+
getInvestigationCodeFixTaskSnapshot,
|
|
10
|
+
InvestigationCodeFixTaskSnapshot,
|
|
11
|
+
} from "../../../../Types/AI/CodeFixTaskContext";
|
|
8
12
|
import CodeRepositoryType from "../../../../Types/CodeRepository/CodeRepositoryType";
|
|
13
|
+
import BadDataException from "../../../../Types/Exception/BadDataException";
|
|
9
14
|
import { LIMIT_PER_PROJECT } from "../../../../Types/Database/LimitMax";
|
|
15
|
+
import SortOrder from "../../../../Types/BaseDatabase/SortOrder";
|
|
10
16
|
import AIRun from "../../../../Models/DatabaseModels/AIRun";
|
|
11
17
|
import AIRunService from "../../../Services/AIRunService";
|
|
12
18
|
import CodeRepositoryService from "../../../Services/CodeRepositoryService";
|
|
13
19
|
import FixRunBudget from "../CodeFix/FixRunBudget";
|
|
14
20
|
import QueryHelper from "../../../Types/Database/QueryHelper";
|
|
15
21
|
import CaptureSpan from "../../Telemetry/CaptureSpan";
|
|
22
|
+
import InvestigationSubjectLock from "./InvestigationSubjectLock";
|
|
23
|
+
|
|
24
|
+
interface SubjectCodeFixRunInput {
|
|
25
|
+
projectId: ObjectID;
|
|
26
|
+
taskType: CodeFixTaskType;
|
|
27
|
+
incidentId?: ObjectID | undefined;
|
|
28
|
+
alertId?: ObjectID | undefined;
|
|
29
|
+
userId?: ObjectID | undefined;
|
|
30
|
+
taskContext?: CodeFixTaskContext | undefined;
|
|
31
|
+
}
|
|
16
32
|
|
|
17
33
|
/*
|
|
18
34
|
* Shared plumbing for the non-exception CodeFix recipes: the incident/alert
|
|
@@ -60,6 +76,12 @@ export default class SubjectCodeFixRun {
|
|
|
60
76
|
incidentId?: ObjectID | undefined;
|
|
61
77
|
alertId?: ObjectID | undefined;
|
|
62
78
|
}): Promise<AIRun | null> {
|
|
79
|
+
if (Boolean(data.incidentId) === Boolean(data.alertId)) {
|
|
80
|
+
throw new BadDataException(
|
|
81
|
+
"Exactly one incident or alert subject is required to find an existing fix task.",
|
|
82
|
+
);
|
|
83
|
+
}
|
|
84
|
+
|
|
63
85
|
return AIRunService.findOneBy({
|
|
64
86
|
query: {
|
|
65
87
|
runType: AIRunType.CodeFix,
|
|
@@ -160,15 +182,59 @@ export default class SubjectCodeFixRun {
|
|
|
160
182
|
* its never-throws wrapper as the backstop.
|
|
161
183
|
*/
|
|
162
184
|
@CaptureSpan()
|
|
163
|
-
public static async enqueueSubjectCodeFixRun(
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
incidentId
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
185
|
+
public static async enqueueSubjectCodeFixRun(
|
|
186
|
+
data: SubjectCodeFixRunInput,
|
|
187
|
+
): Promise<AIRun> {
|
|
188
|
+
if (data.incidentId && data.alertId) {
|
|
189
|
+
throw new BadDataException(
|
|
190
|
+
"A fix task cannot belong to both an incident and an alert.",
|
|
191
|
+
);
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
/*
|
|
195
|
+
* FixFromIncident has both human and automatic writers, and its source
|
|
196
|
+
* authorization depends on which Investigation is latest. Serialize the
|
|
197
|
+
* final dedupe + source revalidation + INSERT with Investigation enqueue
|
|
198
|
+
* for this subject. Redis is a correctness dependency: lock acquisition
|
|
199
|
+
* failure fails closed instead of falling back to a racy write.
|
|
200
|
+
*/
|
|
201
|
+
if (data.taskType === CodeFixTaskType.FixFromIncident) {
|
|
202
|
+
return InvestigationSubjectLock.runExclusive(
|
|
203
|
+
{
|
|
204
|
+
projectId: data.projectId,
|
|
205
|
+
incidentId: data.incidentId,
|
|
206
|
+
alertId: data.alertId,
|
|
207
|
+
},
|
|
208
|
+
async (): Promise<AIRun> => {
|
|
209
|
+
const existingRun: AIRun | null =
|
|
210
|
+
await this.findNonTerminalRunForSubject({
|
|
211
|
+
taskType: data.taskType,
|
|
212
|
+
incidentId: data.incidentId,
|
|
213
|
+
alertId: data.alertId,
|
|
214
|
+
});
|
|
215
|
+
|
|
216
|
+
if (existingRun) {
|
|
217
|
+
throw new BadDataException(
|
|
218
|
+
"A fix pull request task is already queued or running for this subject.",
|
|
219
|
+
);
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
return this.createSubjectCodeFixRun(data, true);
|
|
223
|
+
},
|
|
224
|
+
);
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
return this.createSubjectCodeFixRun(data, false);
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
private static async createSubjectCodeFixRun(
|
|
231
|
+
data: SubjectCodeFixRunInput,
|
|
232
|
+
revalidateInvestigationSource: boolean,
|
|
233
|
+
): Promise<AIRun> {
|
|
234
|
+
await FixRunBudget.assertWithinBudget(data.projectId, {
|
|
235
|
+
incidentId: data.incidentId,
|
|
236
|
+
alertId: data.alertId,
|
|
237
|
+
});
|
|
172
238
|
|
|
173
239
|
const run: AIRun = new AIRun();
|
|
174
240
|
run.projectId = data.projectId;
|
|
@@ -190,9 +256,65 @@ export default class SubjectCodeFixRun {
|
|
|
190
256
|
run.taskContext = data.taskContext;
|
|
191
257
|
}
|
|
192
258
|
|
|
259
|
+
if (revalidateInvestigationSource) {
|
|
260
|
+
/* No awaited work may be added between this gate and the INSERT. */
|
|
261
|
+
await this.assertLatestRecommendedInvestigationSource(data);
|
|
262
|
+
}
|
|
263
|
+
|
|
193
264
|
return AIRunService.create({
|
|
194
265
|
data: run,
|
|
195
266
|
props: { isRoot: true },
|
|
196
267
|
});
|
|
197
268
|
}
|
|
269
|
+
|
|
270
|
+
private static async assertLatestRecommendedInvestigationSource(
|
|
271
|
+
data: SubjectCodeFixRunInput,
|
|
272
|
+
): Promise<void> {
|
|
273
|
+
const requestedSnapshot: InvestigationCodeFixTaskSnapshot | null =
|
|
274
|
+
getInvestigationCodeFixTaskSnapshot(data.taskContext);
|
|
275
|
+
|
|
276
|
+
if (!requestedSnapshot) {
|
|
277
|
+
throw new BadDataException(
|
|
278
|
+
"A complete Recommended investigation snapshot is required to create a fix task.",
|
|
279
|
+
);
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
const latestInvestigation: AIRun | null = await AIRunService.findOneBy({
|
|
283
|
+
query: {
|
|
284
|
+
projectId: data.projectId,
|
|
285
|
+
runType: AIRunType.Investigation,
|
|
286
|
+
...(data.incidentId
|
|
287
|
+
? { triggeredByIncidentId: data.incidentId }
|
|
288
|
+
: { triggeredByAlertId: data.alertId! }),
|
|
289
|
+
},
|
|
290
|
+
select: {
|
|
291
|
+
_id: true,
|
|
292
|
+
status: true,
|
|
293
|
+
codeFixRecommendation: true,
|
|
294
|
+
taskContext: true,
|
|
295
|
+
},
|
|
296
|
+
sort: { createdAt: SortOrder.Descending },
|
|
297
|
+
props: { isRoot: true },
|
|
298
|
+
});
|
|
299
|
+
const persistedSnapshot: InvestigationCodeFixTaskSnapshot | null =
|
|
300
|
+
getInvestigationCodeFixTaskSnapshot(latestInvestigation?.taskContext);
|
|
301
|
+
|
|
302
|
+
if (
|
|
303
|
+
!latestInvestigation?.id ||
|
|
304
|
+
latestInvestigation.id.toString() !==
|
|
305
|
+
requestedSnapshot.investigationRunId ||
|
|
306
|
+
latestInvestigation.status !== AIRunStatus.Completed ||
|
|
307
|
+
latestInvestigation.codeFixRecommendation !==
|
|
308
|
+
AIRunCodeFixRecommendation.Recommended ||
|
|
309
|
+
!persistedSnapshot ||
|
|
310
|
+
persistedSnapshot.investigationRunId !==
|
|
311
|
+
requestedSnapshot.investigationRunId ||
|
|
312
|
+
persistedSnapshot.investigationAnalysisMarkdown !==
|
|
313
|
+
requestedSnapshot.investigationAnalysisMarkdown
|
|
314
|
+
) {
|
|
315
|
+
throw new BadDataException(
|
|
316
|
+
"The source investigation is no longer the latest durably Recommended analysis. Refresh and try again.",
|
|
317
|
+
);
|
|
318
|
+
}
|
|
319
|
+
}
|
|
198
320
|
}
|
|
@@ -27,6 +27,8 @@ import AnalyticsTableEngine from "../../../Types/AnalyticsDatabase/AnalyticsTabl
|
|
|
27
27
|
export const DEFAULT_CLICKHOUSE_CLUSTER_NAME: string = "oneuptime";
|
|
28
28
|
export const DEFAULT_CLICKHOUSE_SHARDING_KEY: string = "cityHash64(projectId)";
|
|
29
29
|
export const DEFAULT_CLICKHOUSE_DATABASE: string = "oneuptime";
|
|
30
|
+
// Matches the ClickHouse server default for distributed_ddl_task_timeout.
|
|
31
|
+
export const DEFAULT_DISTRIBUTED_DDL_TASK_TIMEOUT_SECONDS: number = 180;
|
|
30
32
|
|
|
31
33
|
// Suffix appended to a model's tableName to name its local (data) table.
|
|
32
34
|
export const LOCAL_TABLE_SUFFIX: string = "Local";
|
|
@@ -49,6 +51,28 @@ export function getClickhouseDatabaseName(): string {
|
|
|
49
51
|
return process.env["CLICKHOUSE_DATABASE"] || DEFAULT_CLICKHOUSE_DATABASE;
|
|
50
52
|
}
|
|
51
53
|
|
|
54
|
+
/*
|
|
55
|
+
* How long the initiator of an ON CLUSTER DDL statement waits for every host
|
|
56
|
+
* to report completion (CLICKHOUSE_DISTRIBUTED_DDL_TASK_TIMEOUT_SECONDS,
|
|
57
|
+
* default 180 — the ClickHouse server default). ClickHouse semantics: 0
|
|
58
|
+
* enqueues the task and returns immediately; a negative value removes the
|
|
59
|
+
* server-side wait limit, but the confirmation wait streams zero bytes, so
|
|
60
|
+
* the client still gives up at the migration pool's socket-idle ceiling
|
|
61
|
+
* (30-minute floor, scaled up with this value — see ClickhouseConfig.ts).
|
|
62
|
+
* Prefer a finite value. Raising it helps on clusters whose DDL queue drains
|
|
63
|
+
* slowly (each host's DDLWorker processes the queue sequentially by default,
|
|
64
|
+
* so one slow task delays all later ones).
|
|
65
|
+
*/
|
|
66
|
+
export function getDistributedDdlTaskTimeoutSeconds(): number {
|
|
67
|
+
const raw: string = (
|
|
68
|
+
process.env["CLICKHOUSE_DISTRIBUTED_DDL_TASK_TIMEOUT_SECONDS"] || ""
|
|
69
|
+
).trim();
|
|
70
|
+
const parsed: number = parseInt(raw, 10);
|
|
71
|
+
return Number.isFinite(parsed)
|
|
72
|
+
? parsed
|
|
73
|
+
: DEFAULT_DISTRIBUTED_DDL_TASK_TIMEOUT_SECONDS;
|
|
74
|
+
}
|
|
75
|
+
|
|
52
76
|
/*
|
|
53
77
|
* The `ON CLUSTER '<name>'` clause (with a leading space), emitted on every
|
|
54
78
|
* object-lifecycle DDL statement (CREATE TABLE / CREATE MATERIALIZED VIEW /
|
|
@@ -88,6 +88,35 @@ export default class APIRequestCriteria {
|
|
|
88
88
|
});
|
|
89
89
|
}
|
|
90
90
|
|
|
91
|
+
if (
|
|
92
|
+
input.criteriaFilter.checkOn === CheckOn.PortDnsLookupTime ||
|
|
93
|
+
input.criteriaFilter.checkOn === CheckOn.PortTcpConnectTime
|
|
94
|
+
) {
|
|
95
|
+
const portTimings: ProbeMonitorResponse["portTimings"] = (
|
|
96
|
+
input.dataToProcess as ProbeMonitorResponse
|
|
97
|
+
).portTimings;
|
|
98
|
+
|
|
99
|
+
const currentValue: number | undefined =
|
|
100
|
+
input.criteriaFilter.checkOn === CheckOn.PortDnsLookupTime
|
|
101
|
+
? portTimings?.dnsLookupInMs
|
|
102
|
+
: portTimings?.tcpConnectInMs;
|
|
103
|
+
|
|
104
|
+
const value: Array<number> | number | undefined =
|
|
105
|
+
(overTimeValue as Array<number> | number | undefined) ?? currentValue;
|
|
106
|
+
|
|
107
|
+
if (value === undefined) {
|
|
108
|
+
return null;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
threshold = CompareCriteria.convertToNumber(threshold);
|
|
112
|
+
|
|
113
|
+
return CompareCriteria.compareCriteriaNumbers({
|
|
114
|
+
value: value,
|
|
115
|
+
threshold: threshold as number,
|
|
116
|
+
criteriaFilter: input.criteriaFilter,
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
|
|
91
120
|
// check packet loss (Ping/IP monitors with multi-packet checks)
|
|
92
121
|
if (input.criteriaFilter.checkOn === CheckOn.PacketLossPercent) {
|
|
93
122
|
const packetLossPercent: number | undefined = (
|
|
@@ -8,6 +8,8 @@ import {
|
|
|
8
8
|
import DomainMonitorResponse from "../../../../Types/Monitor/DomainMonitor/DomainMonitorResponse";
|
|
9
9
|
import ProbeMonitorResponse from "../../../../Types/Probe/ProbeMonitorResponse";
|
|
10
10
|
import CaptureSpan from "../../Telemetry/CaptureSpan";
|
|
11
|
+
import EvaluateOverTime from "./EvaluateOverTime";
|
|
12
|
+
import logger from "../../Logger";
|
|
11
13
|
|
|
12
14
|
export default class DomainMonitorCriteria {
|
|
13
15
|
@CaptureSpan()
|
|
@@ -24,6 +26,60 @@ export default class DomainMonitorCriteria {
|
|
|
24
26
|
const domainResponse: DomainMonitorResponse | undefined =
|
|
25
27
|
dataToProcess.domainResponse;
|
|
26
28
|
|
|
29
|
+
let overTimeValue: Array<number | boolean> | number | boolean | undefined =
|
|
30
|
+
undefined;
|
|
31
|
+
|
|
32
|
+
if (
|
|
33
|
+
input.criteriaFilter.evaluateOverTime &&
|
|
34
|
+
input.criteriaFilter.evaluateOverTimeOptions
|
|
35
|
+
) {
|
|
36
|
+
try {
|
|
37
|
+
overTimeValue = await EvaluateOverTime.getValueOverTime({
|
|
38
|
+
projectId: dataToProcess.projectId,
|
|
39
|
+
monitorId: input.dataToProcess.monitorId!,
|
|
40
|
+
evaluateOverTimeOptions: input.criteriaFilter.evaluateOverTimeOptions,
|
|
41
|
+
metricType: input.criteriaFilter.checkOn,
|
|
42
|
+
});
|
|
43
|
+
|
|
44
|
+
if (Array.isArray(overTimeValue) && overTimeValue.length === 0) {
|
|
45
|
+
overTimeValue = undefined;
|
|
46
|
+
}
|
|
47
|
+
} catch (err) {
|
|
48
|
+
logger.error(
|
|
49
|
+
`Error in getting over time value for ${input.criteriaFilter.checkOn}`,
|
|
50
|
+
);
|
|
51
|
+
logger.error(err);
|
|
52
|
+
overTimeValue = undefined;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/*
|
|
57
|
+
* Whether the registration lookup itself succeeded. Without this, a
|
|
58
|
+
* domain whose TLD has no working WHOIS or RDAP service produces a
|
|
59
|
+
* response with no expiry date, every Domain* filter below returns null,
|
|
60
|
+
* and the monitor silently keeps its previous status - which is what
|
|
61
|
+
* made an unsupported TLD look healthy.
|
|
62
|
+
*/
|
|
63
|
+
if (input.criteriaFilter.checkOn === CheckOn.IsOnline) {
|
|
64
|
+
const currentIsOnline: boolean | Array<boolean> =
|
|
65
|
+
(overTimeValue as Array<boolean>) || dataToProcess.isOnline;
|
|
66
|
+
|
|
67
|
+
return CompareCriteria.compareCriteriaBoolean({
|
|
68
|
+
value: currentIsOnline,
|
|
69
|
+
criteriaFilter: input.criteriaFilter,
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
if (input.criteriaFilter.checkOn === CheckOn.IsRequestTimeout) {
|
|
74
|
+
const currentIsTimeout: boolean | Array<boolean> =
|
|
75
|
+
(overTimeValue as Array<boolean>) || dataToProcess.isTimeout;
|
|
76
|
+
|
|
77
|
+
return CompareCriteria.compareCriteriaBoolean({
|
|
78
|
+
value: currentIsTimeout,
|
|
79
|
+
criteriaFilter: input.criteriaFilter,
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
|
|
27
83
|
// Check domain expires in days
|
|
28
84
|
if (input.criteriaFilter.checkOn === CheckOn.DomainExpiresDaysIn) {
|
|
29
85
|
threshold = CompareCriteria.convertToNumber(threshold);
|
|
@@ -17,6 +17,7 @@ import CapturedMetric from "../../../Types/Monitor/CustomCodeMonitor/CapturedMet
|
|
|
17
17
|
import HttpPhaseTimings from "../../../Types/Monitor/HttpPhaseTimings";
|
|
18
18
|
import MonitorMetricType from "../../../Types/Monitor/MonitorMetricType";
|
|
19
19
|
import PingMonitorResponse from "../../../Types/Monitor/PingMonitor/PingMonitorResponse";
|
|
20
|
+
import PortMonitorTimings from "../../../Types/Monitor/PortMonitor/PortMonitorTimings";
|
|
20
21
|
import SnmpInterface from "../../../Types/Monitor/SnmpMonitor/SnmpInterface";
|
|
21
22
|
import { SnmpOidResponse } from "../../../Types/Monitor/SnmpMonitor/SnmpMonitorResponse";
|
|
22
23
|
import ProbeMonitorResponse from "../../../Types/Probe/ProbeMonitorResponse";
|
|
@@ -1093,6 +1094,51 @@ export default class MonitorMetricUtil {
|
|
|
1093
1094
|
}
|
|
1094
1095
|
}
|
|
1095
1096
|
|
|
1097
|
+
const portTimings: PortMonitorTimings | undefined = (
|
|
1098
|
+
data.dataToProcess as ProbeMonitorResponse
|
|
1099
|
+
).portTimings;
|
|
1100
|
+
|
|
1101
|
+
if (portTimings) {
|
|
1102
|
+
const extraAttributes: JSONObject = {
|
|
1103
|
+
probeId: (
|
|
1104
|
+
data.dataToProcess as ProbeMonitorResponse
|
|
1105
|
+
).probeId.toString(),
|
|
1106
|
+
};
|
|
1107
|
+
|
|
1108
|
+
const phaseMetrics: Array<{
|
|
1109
|
+
metricName: MonitorMetricType;
|
|
1110
|
+
value: number | undefined;
|
|
1111
|
+
description: string;
|
|
1112
|
+
}> = [
|
|
1113
|
+
{
|
|
1114
|
+
metricName: MonitorMetricType.PortDnsLookupTime,
|
|
1115
|
+
value: portTimings.dnsLookupInMs,
|
|
1116
|
+
description: "DNS lookup time for this Port monitor",
|
|
1117
|
+
},
|
|
1118
|
+
{
|
|
1119
|
+
metricName: MonitorMetricType.PortTcpConnectTime,
|
|
1120
|
+
value: portTimings.tcpConnectInMs,
|
|
1121
|
+
description: "TCP connect time for this Port monitor",
|
|
1122
|
+
},
|
|
1123
|
+
];
|
|
1124
|
+
|
|
1125
|
+
for (const phaseMetric of phaseMetrics) {
|
|
1126
|
+
await this.pushMonitorMetric({
|
|
1127
|
+
projectId: data.projectId,
|
|
1128
|
+
monitorId: data.monitorId,
|
|
1129
|
+
monitorName: data.monitorName,
|
|
1130
|
+
probeName: data.probeName,
|
|
1131
|
+
metricName: phaseMetric.metricName,
|
|
1132
|
+
value: phaseMetric.value,
|
|
1133
|
+
description: phaseMetric.description,
|
|
1134
|
+
unit: "ms",
|
|
1135
|
+
extraAttributes: extraAttributes,
|
|
1136
|
+
metricRows: metricRows,
|
|
1137
|
+
metricNameServiceNameMap: metricNameServiceNameMap,
|
|
1138
|
+
});
|
|
1139
|
+
}
|
|
1140
|
+
}
|
|
1141
|
+
|
|
1096
1142
|
if ((data.dataToProcess as ProbeMonitorResponse).pingResponse) {
|
|
1097
1143
|
const pingResponse: PingMonitorResponse = (
|
|
1098
1144
|
data.dataToProcess as ProbeMonitorResponse
|
|
@@ -241,9 +241,12 @@ export default class PasswordHash {
|
|
|
241
241
|
* salted SHA `SHA256("v2:" + salt + ":" + secret + ":" + password)`.
|
|
242
242
|
* bare SHA `SHA256(secret + password)`, from before salts existed.
|
|
243
243
|
*
|
|
244
|
-
*
|
|
245
|
-
*
|
|
246
|
-
*
|
|
244
|
+
* Normally the last two are told apart by whether the row has a salt,
|
|
245
|
+
* which is the rule they were written under. During a rolling deployment,
|
|
246
|
+
* however, an old pod can write a bare SHA digest while leaving a new pod's
|
|
247
|
+
* salt behind. Anything without a recognised scheme prefix therefore tries
|
|
248
|
+
* the selected legacy scheme first and the bare scheme as a compatibility
|
|
249
|
+
* fallback.
|
|
247
250
|
*/
|
|
248
251
|
public static async verify(data: {
|
|
249
252
|
plainValue: string;
|
|
@@ -259,11 +262,32 @@ export default class PasswordHash {
|
|
|
259
262
|
);
|
|
260
263
|
|
|
261
264
|
if (!parsed) {
|
|
265
|
+
const matchesSelectedLegacyScheme: boolean =
|
|
266
|
+
await HashedString.verifyValue({
|
|
267
|
+
plainValue: data.plainValue,
|
|
268
|
+
hashedValue: data.storedValue,
|
|
269
|
+
encryptionSecret: EncryptionSecret,
|
|
270
|
+
salt: data.salt || null,
|
|
271
|
+
});
|
|
272
|
+
|
|
273
|
+
if (matchesSelectedLegacyScheme || !data.salt) {
|
|
274
|
+
return matchesSelectedLegacyScheme;
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
/*
|
|
278
|
+
* Rolling-deploy compatibility. A pod running the pre-salt write path
|
|
279
|
+
* can replace a password with the original bare SHA-256 digest while a
|
|
280
|
+
* salt written by a newer pod remains on the row. A bare digest carries
|
|
281
|
+
* no scheme marker, so trying only the salted-SHA construction would
|
|
282
|
+
* lock that resource out permanently. Fall back to the original scheme
|
|
283
|
+
* when a supplied salt does not match; the successful caller upgrades
|
|
284
|
+
* the row to scrypt immediately afterwards.
|
|
285
|
+
*/
|
|
262
286
|
return await HashedString.verifyValue({
|
|
263
287
|
plainValue: data.plainValue,
|
|
264
288
|
hashedValue: data.storedValue,
|
|
265
289
|
encryptionSecret: EncryptionSecret,
|
|
266
|
-
salt:
|
|
290
|
+
salt: null,
|
|
267
291
|
});
|
|
268
292
|
}
|
|
269
293
|
|