@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
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* The durable code-fix recommendation for an incident/alert investigation.
|
|
3
|
+
* Stored on AIRun so the dashboard and the manual fix-task endpoint consume
|
|
4
|
+
* the same server-authored decision instead of interpreting analysis prose.
|
|
5
|
+
*
|
|
6
|
+
* Every run starts NotRecommended. The investigation engine atomically moves
|
|
7
|
+
* a winning incident/alert run to Pending with its Completed transition, then
|
|
8
|
+
* settles the posted analysis to a terminal recommendation. This keeps all
|
|
9
|
+
* error, legacy and non-investigation paths fail closed.
|
|
10
|
+
*/
|
|
11
|
+
enum AIRunCodeFixRecommendation {
|
|
12
|
+
Pending = "Pending",
|
|
13
|
+
Recommended = "Recommended",
|
|
14
|
+
NotRecommended = "NotRecommended",
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export default AIRunCodeFixRecommendation;
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
/*
|
|
2
|
-
* The JSON persisted on AIRun.taskContext for
|
|
3
|
-
*
|
|
4
|
-
* subject
|
|
2
|
+
* The JSON persisted on AIRun.taskContext for tasks whose exact working
|
|
3
|
+
* context must survive until a worker claims them. Some recipes have no
|
|
4
|
+
* durable subject record; others, such as FixFromIncident, deliberately pin
|
|
5
|
+
* a snapshot instead of re-reading mutable subject state at execution time.
|
|
5
6
|
*
|
|
6
7
|
* First user: the FixPerformance recipe. Its evidence is computed
|
|
7
8
|
* DETERMINISTICALLY from a trace's span tree when the user clicks "Fix
|
|
@@ -74,7 +75,29 @@ export interface PerformanceCodeLocation {
|
|
|
74
75
|
lineNumber?: number | undefined;
|
|
75
76
|
}
|
|
76
77
|
|
|
78
|
+
/*
|
|
79
|
+
* The immutable investigation snapshot consumed by FixFromIncident. Both
|
|
80
|
+
* fields travel together: the run id proves which Recommended decision was
|
|
81
|
+
* gated, and the markdown is the exact posted analysis that decision covered.
|
|
82
|
+
*/
|
|
83
|
+
export interface InvestigationCodeFixTaskSnapshot {
|
|
84
|
+
investigationRunId: string;
|
|
85
|
+
investigationAnalysisMarkdown: string;
|
|
86
|
+
}
|
|
87
|
+
|
|
77
88
|
export interface CodeFixTaskContext {
|
|
89
|
+
/*
|
|
90
|
+
* FixFromIncident: the exact investigation whose published RootCause is
|
|
91
|
+
* the task's context. This prevents a later re-investigation from changing
|
|
92
|
+
* the report between the user's click and the worker claiming the task.
|
|
93
|
+
*/
|
|
94
|
+
sourceInvestigationRunId?: string | undefined;
|
|
95
|
+
/*
|
|
96
|
+
* Snapshot of that run's published analysis. Fix tasks can wait in the
|
|
97
|
+
* queue, so reading the feed again when the worker claims the task would
|
|
98
|
+
* let a later re-investigation silently change the requested fix.
|
|
99
|
+
*/
|
|
100
|
+
sourceInvestigationAnalysisMarkdown?: string | undefined;
|
|
78
101
|
// FixPerformance: the analyzed trace.
|
|
79
102
|
traceId?: string | undefined;
|
|
80
103
|
// Best-effort service attribution resolved from the trace's spans.
|
|
@@ -91,4 +114,41 @@ export interface CodeFixTaskContext {
|
|
|
91
114
|
telemetryServiceId?: string | undefined;
|
|
92
115
|
}
|
|
93
116
|
|
|
117
|
+
/*
|
|
118
|
+
* Canonical JSON shape persisted for a Recommended investigation. Unlike the
|
|
119
|
+
* normalized snapshot returned below, these names are the established
|
|
120
|
+
* AIRun.taskContext wire contract.
|
|
121
|
+
*/
|
|
122
|
+
export type InvestigationCodeFixTaskContext = CodeFixTaskContext & {
|
|
123
|
+
sourceInvestigationRunId: string;
|
|
124
|
+
sourceInvestigationAnalysisMarkdown: string;
|
|
125
|
+
};
|
|
126
|
+
|
|
127
|
+
/*
|
|
128
|
+
* Treat partial, empty and malformed JSON as no snapshot. The same validator
|
|
129
|
+
* is shared by the trigger, claim guard and task-details reader so none of
|
|
130
|
+
* those boundaries can silently fall back to a different investigation.
|
|
131
|
+
*/
|
|
132
|
+
export function getInvestigationCodeFixTaskSnapshot(
|
|
133
|
+
taskContext: CodeFixTaskContext | null | undefined,
|
|
134
|
+
): InvestigationCodeFixTaskSnapshot | null {
|
|
135
|
+
const investigationRunId: unknown = taskContext?.sourceInvestigationRunId;
|
|
136
|
+
const investigationAnalysisMarkdown: unknown =
|
|
137
|
+
taskContext?.sourceInvestigationAnalysisMarkdown;
|
|
138
|
+
|
|
139
|
+
if (
|
|
140
|
+
typeof investigationRunId !== "string" ||
|
|
141
|
+
investigationRunId.trim().length === 0 ||
|
|
142
|
+
typeof investigationAnalysisMarkdown !== "string" ||
|
|
143
|
+
investigationAnalysisMarkdown.trim().length === 0
|
|
144
|
+
) {
|
|
145
|
+
return null;
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
return {
|
|
149
|
+
investigationRunId,
|
|
150
|
+
investigationAnalysisMarkdown,
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
|
|
94
154
|
export default CodeFixTaskContext;
|
|
@@ -26,9 +26,9 @@ enum CodeFixTaskType {
|
|
|
26
26
|
* Add the observability an INCONCLUSIVE AI investigation was missing
|
|
27
27
|
* (structured logs, spans, metric counters on the implicated code paths).
|
|
28
28
|
* NOT user-triggerable from the exception page — it has its own automatic
|
|
29
|
-
* trigger: an inconclusive investigation on a project that opted in
|
|
30
|
-
*
|
|
31
|
-
* AI/InstrumentationTaskTrigger.ts). Its subject is the triggering
|
|
29
|
+
* trigger: an inconclusive investigation on a project that opted in through
|
|
30
|
+
* the incident/alert instrumentation fix setting (see Common/Server/Utils/
|
|
31
|
+
* AI/SRE/InstrumentationTaskTrigger.ts). Its subject is the triggering
|
|
32
32
|
* incident/alert, NOT a telemetry exception.
|
|
33
33
|
*/
|
|
34
34
|
ImproveInstrumentation = "ImproveInstrumentation",
|
package/Types/HashedString.ts
CHANGED
|
@@ -24,9 +24,10 @@ import { FindOperator } from "typeorm";
|
|
|
24
24
|
* salted `SHA256("v2:" + salt + ":" + secret + ":" + value)`.
|
|
25
25
|
*
|
|
26
26
|
* Neither records its scheme in the digest — it is a bare hex SHA-256 either
|
|
27
|
-
* way — so
|
|
28
|
-
*
|
|
29
|
-
*
|
|
27
|
+
* way — so callers normally select the scheme by whether the row carries a
|
|
28
|
+
* salt. PasswordHash also has a bare-hash fallback for rolling deployments,
|
|
29
|
+
* where an old pod can write the original scheme while leaving a newer salt
|
|
30
|
+
* behind. The "v2" prefix and separators exist for domain separation.
|
|
30
31
|
*/
|
|
31
32
|
const SALTED_HASH_SCHEME_VERSION: string = "v2";
|
|
32
33
|
|
|
@@ -5,6 +5,8 @@ export enum CheckOn {
|
|
|
5
5
|
ResponseTime = "Response Time (in ms)",
|
|
6
6
|
PacketLossPercent = "Packet Loss (in %)",
|
|
7
7
|
Jitter = "Jitter (in ms)",
|
|
8
|
+
PortDnsLookupTime = "Port DNS Lookup Time (in ms)",
|
|
9
|
+
PortTcpConnectTime = "Port TCP Connect Time (in ms)",
|
|
8
10
|
ResponseStatusCode = "Response Status Code",
|
|
9
11
|
ResponseHeader = "Response Header",
|
|
10
12
|
ResponseHeaderValue = "Response Header Value",
|
|
@@ -399,6 +401,8 @@ export class CriteriaFilterUtil {
|
|
|
399
401
|
checkOn === CheckOn.ResponseTime ||
|
|
400
402
|
checkOn === CheckOn.PacketLossPercent ||
|
|
401
403
|
checkOn === CheckOn.Jitter ||
|
|
404
|
+
checkOn === CheckOn.PortDnsLookupTime ||
|
|
405
|
+
checkOn === CheckOn.PortTcpConnectTime ||
|
|
402
406
|
checkOn === CheckOn.DiskUsagePercent ||
|
|
403
407
|
checkOn === CheckOn.CPUUsagePercent ||
|
|
404
408
|
checkOn === CheckOn.MemoryUsagePercent ||
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Which protocol the probe uses to read a domain's registration record.
|
|
3
|
+
*
|
|
4
|
+
* WHOIS is the legacy protocol and its server list is not authoritative:
|
|
5
|
+
* clients ship a static map of TLD -> WHOIS host, and registries move. Every
|
|
6
|
+
* Identity Digital TLD (.digital, .email, .life, .today, .zone, ~290 more)
|
|
7
|
+
* still points at the retired whois.donuts.co in most of those maps, and that
|
|
8
|
+
* host now answers every query with the literal text "TLD is not supported."
|
|
9
|
+
* instead of a record. RDAP (RFC 9083) is the ICANN-mandated replacement and
|
|
10
|
+
* is discovered from the IANA bootstrap registry (RFC 9224), so it stays
|
|
11
|
+
* correct as registries move.
|
|
12
|
+
*
|
|
13
|
+
* Plenty of ccTLDs (.io, .co, .de, .ch, .jp, ...) publish no RDAP service at
|
|
14
|
+
* all, which is why Auto - RDAP when the TLD has one, WHOIS otherwise - is
|
|
15
|
+
* the default rather than RDAP.
|
|
16
|
+
*/
|
|
17
|
+
enum DomainLookupMethod {
|
|
18
|
+
Auto = "Auto",
|
|
19
|
+
RDAP = "RDAP",
|
|
20
|
+
WHOIS = "WHOIS",
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export default DomainLookupMethod;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import ProbeAttempt from "../../Probe/ProbeAttempt";
|
|
2
|
+
import DomainLookupMethod from "./DomainLookupMethod";
|
|
2
3
|
|
|
3
4
|
export default interface DomainMonitorResponse {
|
|
4
5
|
isOnline: boolean;
|
|
@@ -16,4 +17,10 @@ export default interface DomainMonitorResponse {
|
|
|
16
17
|
isTimeout?: boolean | undefined;
|
|
17
18
|
probeAttempts?: Array<ProbeAttempt> | undefined;
|
|
18
19
|
totalAttempts?: number | undefined;
|
|
20
|
+
/*
|
|
21
|
+
* Which protocol actually produced this record. With the Auto lookup
|
|
22
|
+
* method the answer varies by TLD, so it is worth surfacing rather than
|
|
23
|
+
* leaving the operator to guess.
|
|
24
|
+
*/
|
|
25
|
+
lookupMethod?: DomainLookupMethod | undefined;
|
|
19
26
|
}
|
|
@@ -505,6 +505,12 @@ export default class MonitorCriteriaInstance extends DatabaseProperty {
|
|
|
505
505
|
monitorStatusId: arg.monitorStatusId,
|
|
506
506
|
filterCondition: FilterCondition.All,
|
|
507
507
|
filters: [
|
|
508
|
+
// The registration lookup itself has to have worked.
|
|
509
|
+
{
|
|
510
|
+
checkOn: CheckOn.IsOnline,
|
|
511
|
+
filterType: FilterType.True,
|
|
512
|
+
value: undefined,
|
|
513
|
+
},
|
|
508
514
|
{
|
|
509
515
|
checkOn: CheckOn.DomainIsExpired,
|
|
510
516
|
filterType: FilterType.False,
|
|
@@ -517,7 +523,7 @@ export default class MonitorCriteriaInstance extends DatabaseProperty {
|
|
|
517
523
|
changeMonitorStatus: true,
|
|
518
524
|
createIncidents: false,
|
|
519
525
|
name: `Check if ${arg.monitorName} is not expired`,
|
|
520
|
-
description: `This criteria checks if the ${arg.monitorName} domain registration is not expired`,
|
|
526
|
+
description: `This criteria checks if the ${arg.monitorName} domain registration was read successfully and is not expired`,
|
|
521
527
|
};
|
|
522
528
|
|
|
523
529
|
return monitorCriteriaInstance;
|
|
@@ -774,11 +780,22 @@ export default class MonitorCriteriaInstance extends DatabaseProperty {
|
|
|
774
780
|
filterType: FilterType.True,
|
|
775
781
|
value: undefined,
|
|
776
782
|
},
|
|
783
|
+
/*
|
|
784
|
+
* Without this, a lookup that returns no registration data at all
|
|
785
|
+
* leaves every Domain* filter unable to decide, and the monitor
|
|
786
|
+
* keeps whatever status it had - so a domain whose registration
|
|
787
|
+
* data cannot be read looks exactly like a healthy one.
|
|
788
|
+
*/
|
|
789
|
+
{
|
|
790
|
+
checkOn: CheckOn.IsOnline,
|
|
791
|
+
filterType: FilterType.False,
|
|
792
|
+
value: undefined,
|
|
793
|
+
},
|
|
777
794
|
],
|
|
778
795
|
incidents: [
|
|
779
796
|
{
|
|
780
|
-
title: `${arg.monitorName} domain
|
|
781
|
-
description: `${arg.monitorName} domain registration has expired.`,
|
|
797
|
+
title: `${arg.monitorName} domain check failed`,
|
|
798
|
+
description: `${arg.monitorName} domain registration has expired, or its registration data could not be retrieved.`,
|
|
782
799
|
incidentSeverityId: arg.incidentSeverityId,
|
|
783
800
|
autoResolveIncident: true,
|
|
784
801
|
id: ObjectID.generate().toString(),
|
|
@@ -790,16 +807,16 @@ export default class MonitorCriteriaInstance extends DatabaseProperty {
|
|
|
790
807
|
createAlerts: false,
|
|
791
808
|
alerts: [
|
|
792
809
|
{
|
|
793
|
-
title: `${arg.monitorName} domain
|
|
794
|
-
description: `${arg.monitorName} domain registration has expired.`,
|
|
810
|
+
title: `${arg.monitorName} domain check failed`,
|
|
811
|
+
description: `${arg.monitorName} domain registration has expired, or its registration data could not be retrieved.`,
|
|
795
812
|
alertSeverityId: arg.alertSeverityId,
|
|
796
813
|
autoResolveAlert: true,
|
|
797
814
|
id: ObjectID.generate().toString(),
|
|
798
815
|
onCallPolicyIds: [],
|
|
799
816
|
},
|
|
800
817
|
],
|
|
801
|
-
name: `Check if ${arg.monitorName} domain
|
|
802
|
-
description: `This criteria checks if the ${arg.monitorName} domain registration has expired`,
|
|
818
|
+
name: `Check if ${arg.monitorName} domain check failed`,
|
|
819
|
+
description: `This criteria checks if the ${arg.monitorName} domain registration has expired or could not be read`,
|
|
803
820
|
};
|
|
804
821
|
}
|
|
805
822
|
|
|
@@ -24,6 +24,14 @@ enum MonitorMetricType {
|
|
|
24
24
|
TimeToFirstByte = "oneuptime.monitor.http.time.to.first.byte",
|
|
25
25
|
DownloadTime = "oneuptime.monitor.http.download.time",
|
|
26
26
|
|
|
27
|
+
/*
|
|
28
|
+
* Port-monitor connection phases. These intentionally use a Port-specific
|
|
29
|
+
* namespace instead of the HTTP phase metrics above: Port TCP timing can
|
|
30
|
+
* include automatic address-family fallback and has no HTTP request phase.
|
|
31
|
+
*/
|
|
32
|
+
PortDnsLookupTime = "oneuptime.monitor.port.dns.lookup.time",
|
|
33
|
+
PortTcpConnectTime = "oneuptime.monitor.port.tcp.connect.time",
|
|
34
|
+
|
|
27
35
|
/*
|
|
28
36
|
* Per-interface SNMP metrics. Emitted when interface monitoring is enabled
|
|
29
37
|
* on an SNMP monitor; one series per interface (interfaceName attribute).
|
|
@@ -1144,8 +1144,17 @@ export default class MonitorStep extends DatabaseProperty {
|
|
|
1144
1144
|
dnsMonitor: json["dnsMonitor"]
|
|
1145
1145
|
? (json["dnsMonitor"] as JSONObject)
|
|
1146
1146
|
: undefined,
|
|
1147
|
+
/*
|
|
1148
|
+
* Normalized rather than passed through raw: steps saved before the
|
|
1149
|
+
* lookupMethod option existed carry no such key, and the probe would
|
|
1150
|
+
* otherwise receive a config that does not satisfy its own type.
|
|
1151
|
+
*/
|
|
1147
1152
|
domainMonitor: json["domainMonitor"]
|
|
1148
|
-
? (
|
|
1153
|
+
? MonitorStepDomainMonitorUtil.toJSON(
|
|
1154
|
+
MonitorStepDomainMonitorUtil.fromJSON(
|
|
1155
|
+
json["domainMonitor"] as JSONObject,
|
|
1156
|
+
),
|
|
1157
|
+
)
|
|
1149
1158
|
: undefined,
|
|
1150
1159
|
dnssecMonitor: json["dnssecMonitor"]
|
|
1151
1160
|
? (json["dnssecMonitor"] as JSONObject)
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { JSONObject } from "../JSON";
|
|
2
|
+
import DomainLookupMethod from "./DomainMonitor/DomainLookupMethod";
|
|
2
3
|
|
|
3
4
|
export default interface MonitorStepDomainMonitor {
|
|
4
5
|
domainName: string;
|
|
6
|
+
lookupMethod: DomainLookupMethod;
|
|
5
7
|
timeout: number;
|
|
6
8
|
retries: number;
|
|
7
9
|
}
|
|
@@ -10,6 +12,7 @@ export class MonitorStepDomainMonitorUtil {
|
|
|
10
12
|
public static getDefault(): MonitorStepDomainMonitor {
|
|
11
13
|
return {
|
|
12
14
|
domainName: "",
|
|
15
|
+
lookupMethod: DomainLookupMethod.Auto,
|
|
13
16
|
timeout: 10000,
|
|
14
17
|
retries: 3,
|
|
15
18
|
};
|
|
@@ -18,6 +21,13 @@ export class MonitorStepDomainMonitorUtil {
|
|
|
18
21
|
public static fromJSON(json: JSONObject): MonitorStepDomainMonitor {
|
|
19
22
|
return {
|
|
20
23
|
domainName: (json["domainName"] as string) || "",
|
|
24
|
+
/*
|
|
25
|
+
* Monitors saved before RDAP support existed carry no lookupMethod at
|
|
26
|
+
* all, and Auto is the behaviour they should get.
|
|
27
|
+
*/
|
|
28
|
+
lookupMethod: MonitorStepDomainMonitorUtil.parseLookupMethod(
|
|
29
|
+
json["lookupMethod"],
|
|
30
|
+
),
|
|
21
31
|
timeout: (json["timeout"] as number) || 10000,
|
|
22
32
|
retries: (json["retries"] as number) || 3,
|
|
23
33
|
};
|
|
@@ -26,8 +36,19 @@ export class MonitorStepDomainMonitorUtil {
|
|
|
26
36
|
public static toJSON(monitor: MonitorStepDomainMonitor): JSONObject {
|
|
27
37
|
return {
|
|
28
38
|
domainName: monitor.domainName,
|
|
39
|
+
lookupMethod: monitor.lookupMethod,
|
|
29
40
|
timeout: monitor.timeout,
|
|
30
41
|
retries: monitor.retries,
|
|
31
42
|
};
|
|
32
43
|
}
|
|
44
|
+
|
|
45
|
+
public static parseLookupMethod(value: unknown): DomainLookupMethod {
|
|
46
|
+
const values: Array<string> = Object.values(DomainLookupMethod);
|
|
47
|
+
|
|
48
|
+
if (typeof value === "string" && values.includes(value)) {
|
|
49
|
+
return value as DomainLookupMethod;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
return DomainLookupMethod.Auto;
|
|
53
|
+
}
|
|
33
54
|
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Per-phase breakdown of a Port monitor connection, in milliseconds. DNS is
|
|
3
|
+
* absent when the destination is already an IP address. Fields are optional
|
|
4
|
+
* so partial timing evidence can be represented when a connection fails.
|
|
5
|
+
*/
|
|
6
|
+
export default interface PortMonitorTimings {
|
|
7
|
+
dnsLookupInMs?: number | undefined;
|
|
8
|
+
tcpConnectInMs?: number | undefined;
|
|
9
|
+
totalConnectionInMs?: number | undefined;
|
|
10
|
+
}
|
package/Types/Permission.ts
CHANGED
|
@@ -402,12 +402,24 @@ enum Permission {
|
|
|
402
402
|
EditScheduledMaintenanceOwnerUser = "EditScheduledMaintenanceOwnerUser",
|
|
403
403
|
ReadScheduledMaintenanceOwnerUser = "ReadScheduledMaintenanceOwnerUser",
|
|
404
404
|
|
|
405
|
-
|
|
405
|
+
/*
|
|
406
|
+
* The two Create members below shipped with the value of their non-template
|
|
407
|
+
* counterparts (2024-09-09, "Add new migration for ScheduledMaintenanceTemplate"),
|
|
408
|
+
* so `CreateScheduledMaintenanceTemplateOwnerUser === CreateScheduledMaintenanceOwnerUser`
|
|
409
|
+
* at runtime and the two capabilities were one permission wearing two names.
|
|
410
|
+
* Granting either conferred create on BOTH the template owner table and the
|
|
411
|
+
* real scheduled-maintenance owner table — and since owner rows drive the
|
|
412
|
+
* Owned permission scope, that widened access to events the holder did not
|
|
413
|
+
* own. Their Delete/Edit/Read siblings were always correct; only Create was
|
|
414
|
+
* mis-keyed. AddScheduledMaintenanceTemplateOwnerPermissions backfills the
|
|
415
|
+
* stored grants so no install loses access when these values changed.
|
|
416
|
+
*/
|
|
417
|
+
CreateScheduledMaintenanceTemplateOwnerUser = "CreateScheduledMaintenanceTemplateOwnerUser",
|
|
406
418
|
DeleteScheduledMaintenanceTemplateOwnerUser = "DeleteScheduledMaintenanceTemplateOwnerUser",
|
|
407
419
|
EditScheduledMaintenanceTemplateOwnerUser = "EditScheduledMaintenanceTemplateOwnerUser",
|
|
408
420
|
ReadScheduledMaintenanceTemplateOwnerUser = "ReadScheduledMaintenanceTemplateOwnerUser",
|
|
409
421
|
|
|
410
|
-
CreateScheduledMaintenanceTemplateOwnerTeam = "
|
|
422
|
+
CreateScheduledMaintenanceTemplateOwnerTeam = "CreateScheduledMaintenanceTemplateOwnerTeam",
|
|
411
423
|
DeleteScheduledMaintenanceTemplateOwnerTeam = "DeleteScheduledMaintenanceTemplateOwnerTeam",
|
|
412
424
|
EditScheduledMaintenanceTemplateOwnerTeam = "EditScheduledMaintenanceTemplateOwnerTeam",
|
|
413
425
|
ReadScheduledMaintenanceTemplateOwnerTeam = "ReadScheduledMaintenanceTemplateOwnerTeam",
|
|
@@ -3287,88 +3299,6 @@ export class PermissionHelper {
|
|
|
3287
3299
|
group: PermissionGroup.Monitor,
|
|
3288
3300
|
},
|
|
3289
3301
|
|
|
3290
|
-
{
|
|
3291
|
-
permission: Permission.CreateStatusPageAnnouncement,
|
|
3292
|
-
title: "Create Status Page Announcement",
|
|
3293
|
-
description:
|
|
3294
|
-
"This permission can create Status Page Announcement this project.",
|
|
3295
|
-
isAssignableToTenant: true,
|
|
3296
|
-
isAccessControlPermission: false,
|
|
3297
|
-
isRolePermission: false,
|
|
3298
|
-
group: PermissionGroup.StatusPage,
|
|
3299
|
-
},
|
|
3300
|
-
{
|
|
3301
|
-
permission: Permission.DeleteStatusPageAnnouncement,
|
|
3302
|
-
title: "Delete Status Page Announcement",
|
|
3303
|
-
description:
|
|
3304
|
-
"This permission can delete Status Page Announcement of this project.",
|
|
3305
|
-
isAssignableToTenant: true,
|
|
3306
|
-
isAccessControlPermission: false,
|
|
3307
|
-
isRolePermission: false,
|
|
3308
|
-
group: PermissionGroup.StatusPage,
|
|
3309
|
-
},
|
|
3310
|
-
{
|
|
3311
|
-
permission: Permission.EditStatusPageAnnouncement,
|
|
3312
|
-
title: "Edit Status Page Announcement",
|
|
3313
|
-
description:
|
|
3314
|
-
"This permission can edit Status Page Announcement of this project.",
|
|
3315
|
-
isAssignableToTenant: true,
|
|
3316
|
-
isAccessControlPermission: false,
|
|
3317
|
-
isRolePermission: false,
|
|
3318
|
-
group: PermissionGroup.StatusPage,
|
|
3319
|
-
},
|
|
3320
|
-
{
|
|
3321
|
-
permission: Permission.ReadStatusPageAnnouncement,
|
|
3322
|
-
title: "Read Status Page Announcement",
|
|
3323
|
-
description:
|
|
3324
|
-
"This permission can read Status Page Announcement of this project.",
|
|
3325
|
-
isAssignableToTenant: true,
|
|
3326
|
-
isAccessControlPermission: false,
|
|
3327
|
-
isRolePermission: false,
|
|
3328
|
-
group: PermissionGroup.StatusPage,
|
|
3329
|
-
},
|
|
3330
|
-
|
|
3331
|
-
{
|
|
3332
|
-
permission: Permission.CreateStatusPageAnnouncementTemplate,
|
|
3333
|
-
title: "Create Status Page Announcement Template",
|
|
3334
|
-
description:
|
|
3335
|
-
"This permission can create Status Page Announcement Templates in this project.",
|
|
3336
|
-
isAssignableToTenant: true,
|
|
3337
|
-
isAccessControlPermission: false,
|
|
3338
|
-
isRolePermission: false,
|
|
3339
|
-
group: PermissionGroup.StatusPage,
|
|
3340
|
-
},
|
|
3341
|
-
{
|
|
3342
|
-
permission: Permission.DeleteStatusPageAnnouncementTemplate,
|
|
3343
|
-
title: "Delete Status Page Announcement Template",
|
|
3344
|
-
description:
|
|
3345
|
-
"This permission can delete Status Page Announcement Templates of this project.",
|
|
3346
|
-
isAssignableToTenant: true,
|
|
3347
|
-
isAccessControlPermission: false,
|
|
3348
|
-
isRolePermission: false,
|
|
3349
|
-
group: PermissionGroup.StatusPage,
|
|
3350
|
-
},
|
|
3351
|
-
{
|
|
3352
|
-
permission: Permission.EditStatusPageAnnouncementTemplate,
|
|
3353
|
-
title: "Edit Status Page Announcement Template",
|
|
3354
|
-
description:
|
|
3355
|
-
"This permission can edit Status Page Announcement Templates of this project.",
|
|
3356
|
-
isAssignableToTenant: true,
|
|
3357
|
-
isAccessControlPermission: false,
|
|
3358
|
-
isRolePermission: false,
|
|
3359
|
-
group: PermissionGroup.StatusPage,
|
|
3360
|
-
},
|
|
3361
|
-
{
|
|
3362
|
-
permission: Permission.ReadStatusPageAnnouncementTemplate,
|
|
3363
|
-
title: "Read Status Page Announcement Template",
|
|
3364
|
-
description:
|
|
3365
|
-
"This permission can read Status Page Announcement Templates of this project.",
|
|
3366
|
-
isAssignableToTenant: true,
|
|
3367
|
-
isAccessControlPermission: false,
|
|
3368
|
-
isRolePermission: false,
|
|
3369
|
-
group: PermissionGroup.StatusPage,
|
|
3370
|
-
},
|
|
3371
|
-
|
|
3372
3302
|
{
|
|
3373
3303
|
permission: Permission.CreateStatusPageAnnouncement,
|
|
3374
3304
|
title: "Create Status Page Announcement",
|
|
@@ -4841,47 +4771,6 @@ export class PermissionHelper {
|
|
|
4841
4771
|
group: PermissionGroup.Settings,
|
|
4842
4772
|
},
|
|
4843
4773
|
|
|
4844
|
-
{
|
|
4845
|
-
permission: Permission.CreateStatusPageDomain,
|
|
4846
|
-
title: "Create Status Page Domain",
|
|
4847
|
-
description:
|
|
4848
|
-
"This permission can create Status Page Domain in this project.",
|
|
4849
|
-
isAssignableToTenant: true,
|
|
4850
|
-
isAccessControlPermission: false,
|
|
4851
|
-
isRolePermission: false,
|
|
4852
|
-
group: PermissionGroup.StatusPage,
|
|
4853
|
-
},
|
|
4854
|
-
{
|
|
4855
|
-
permission: Permission.DeleteStatusPageDomain,
|
|
4856
|
-
title: "Delete Status Page Domain",
|
|
4857
|
-
description:
|
|
4858
|
-
"This permission can delete Status Page Domain in this project.",
|
|
4859
|
-
isAssignableToTenant: true,
|
|
4860
|
-
isAccessControlPermission: false,
|
|
4861
|
-
isRolePermission: false,
|
|
4862
|
-
group: PermissionGroup.StatusPage,
|
|
4863
|
-
},
|
|
4864
|
-
{
|
|
4865
|
-
permission: Permission.EditStatusPageDomain,
|
|
4866
|
-
title: "Edit Status Page Domain",
|
|
4867
|
-
description:
|
|
4868
|
-
"This permission can edit Status Page Domain in this project.",
|
|
4869
|
-
isAssignableToTenant: true,
|
|
4870
|
-
isAccessControlPermission: false,
|
|
4871
|
-
isRolePermission: false,
|
|
4872
|
-
group: PermissionGroup.StatusPage,
|
|
4873
|
-
},
|
|
4874
|
-
{
|
|
4875
|
-
permission: Permission.ReadStatusPageDomain,
|
|
4876
|
-
title: "Read Status Page Domain",
|
|
4877
|
-
description:
|
|
4878
|
-
"This permission can read Status Page Domain in this project.",
|
|
4879
|
-
isAssignableToTenant: true,
|
|
4880
|
-
isAccessControlPermission: false,
|
|
4881
|
-
isRolePermission: false,
|
|
4882
|
-
group: PermissionGroup.StatusPage,
|
|
4883
|
-
},
|
|
4884
|
-
|
|
4885
4774
|
{
|
|
4886
4775
|
permission: Permission.CreateIncidentSeverity,
|
|
4887
4776
|
title: "Create Incident Severity",
|
|
@@ -10046,7 +9935,7 @@ export class PermissionHelper {
|
|
|
10046
9935
|
permission: Permission.CreateScheduledMaintenanceTemplateOwnerUser,
|
|
10047
9936
|
title: "Create Scheduled Maintenance Template User Owner",
|
|
10048
9937
|
description:
|
|
10049
|
-
"This permission can create Scheduled Maintenance Template User Owner this project.",
|
|
9938
|
+
"This permission can create Scheduled Maintenance Template User Owner in this project.",
|
|
10050
9939
|
isAssignableToTenant: true,
|
|
10051
9940
|
isAccessControlPermission: false,
|
|
10052
9941
|
isRolePermission: false,
|
|
@@ -10085,9 +9974,9 @@ export class PermissionHelper {
|
|
|
10085
9974
|
|
|
10086
9975
|
{
|
|
10087
9976
|
permission: Permission.CreateScheduledMaintenanceTemplateOwnerTeam,
|
|
10088
|
-
title: "Create Scheduled Maintenance Template
|
|
9977
|
+
title: "Create Scheduled Maintenance Template Team Owner",
|
|
10089
9978
|
description:
|
|
10090
|
-
"This permission can create Scheduled Maintenance Template
|
|
9979
|
+
"This permission can create Scheduled Maintenance Template Team Owner in this project.",
|
|
10091
9980
|
isAssignableToTenant: true,
|
|
10092
9981
|
isAccessControlPermission: false,
|
|
10093
9982
|
isRolePermission: false,
|
|
@@ -10095,9 +9984,9 @@ export class PermissionHelper {
|
|
|
10095
9984
|
},
|
|
10096
9985
|
{
|
|
10097
9986
|
permission: Permission.DeleteScheduledMaintenanceTemplateOwnerTeam,
|
|
10098
|
-
title: "Delete Scheduled Maintenance Template
|
|
9987
|
+
title: "Delete Scheduled Maintenance Template Team Owner",
|
|
10099
9988
|
description:
|
|
10100
|
-
"This permission can delete Scheduled Maintenance Template
|
|
9989
|
+
"This permission can delete Scheduled Maintenance Template Team Owner of this project.",
|
|
10101
9990
|
isAssignableToTenant: true,
|
|
10102
9991
|
isAccessControlPermission: false,
|
|
10103
9992
|
isRolePermission: false,
|
|
@@ -10105,9 +9994,9 @@ export class PermissionHelper {
|
|
|
10105
9994
|
},
|
|
10106
9995
|
{
|
|
10107
9996
|
permission: Permission.EditScheduledMaintenanceTemplateOwnerTeam,
|
|
10108
|
-
title: "Edit Scheduled Maintenance Template
|
|
9997
|
+
title: "Edit Scheduled Maintenance Template Team Owner",
|
|
10109
9998
|
description:
|
|
10110
|
-
"This permission can edit Scheduled Maintenance Template
|
|
9999
|
+
"This permission can edit Scheduled Maintenance Template Team Owner of this project.",
|
|
10111
10000
|
isAssignableToTenant: true,
|
|
10112
10001
|
isAccessControlPermission: false,
|
|
10113
10002
|
isRolePermission: false,
|
|
@@ -10115,9 +10004,9 @@ export class PermissionHelper {
|
|
|
10115
10004
|
},
|
|
10116
10005
|
{
|
|
10117
10006
|
permission: Permission.ReadScheduledMaintenanceTemplateOwnerTeam,
|
|
10118
|
-
title: "Read Scheduled Maintenance Template
|
|
10007
|
+
title: "Read Scheduled Maintenance Template Team Owner",
|
|
10119
10008
|
description:
|
|
10120
|
-
"This permission can read Scheduled Maintenance Template
|
|
10009
|
+
"This permission can read Scheduled Maintenance Template Team Owner of this project.",
|
|
10121
10010
|
isAssignableToTenant: true,
|
|
10122
10011
|
isAccessControlPermission: false,
|
|
10123
10012
|
isRolePermission: false,
|
|
@@ -10778,47 +10667,6 @@ export class PermissionHelper {
|
|
|
10778
10667
|
group: PermissionGroup.Incident,
|
|
10779
10668
|
},
|
|
10780
10669
|
|
|
10781
|
-
{
|
|
10782
|
-
permission: Permission.CreateStatusPageOwnerTeam,
|
|
10783
|
-
title: "Create Status Page Team Owner",
|
|
10784
|
-
description:
|
|
10785
|
-
"This permission can create Status Page Team Owner this project.",
|
|
10786
|
-
isAssignableToTenant: true,
|
|
10787
|
-
isAccessControlPermission: false,
|
|
10788
|
-
isRolePermission: false,
|
|
10789
|
-
group: PermissionGroup.StatusPage,
|
|
10790
|
-
},
|
|
10791
|
-
{
|
|
10792
|
-
permission: Permission.DeleteStatusPageOwnerTeam,
|
|
10793
|
-
title: "Delete Status Page Team Owner",
|
|
10794
|
-
description:
|
|
10795
|
-
"This permission can delete Status Page Team Owner of this project.",
|
|
10796
|
-
isAssignableToTenant: true,
|
|
10797
|
-
isAccessControlPermission: false,
|
|
10798
|
-
isRolePermission: false,
|
|
10799
|
-
group: PermissionGroup.StatusPage,
|
|
10800
|
-
},
|
|
10801
|
-
{
|
|
10802
|
-
permission: Permission.EditStatusPageOwnerTeam,
|
|
10803
|
-
title: "Edit Status Page Team Owner",
|
|
10804
|
-
description:
|
|
10805
|
-
"This permission can edit Status Page Team Owner of this project.",
|
|
10806
|
-
isAssignableToTenant: true,
|
|
10807
|
-
isAccessControlPermission: false,
|
|
10808
|
-
isRolePermission: false,
|
|
10809
|
-
group: PermissionGroup.StatusPage,
|
|
10810
|
-
},
|
|
10811
|
-
{
|
|
10812
|
-
permission: Permission.ReadStatusPageOwnerTeam,
|
|
10813
|
-
title: "Read Status Page Team Owner",
|
|
10814
|
-
description:
|
|
10815
|
-
"This permission can read Status Page Team Owner of this project.",
|
|
10816
|
-
isAssignableToTenant: true,
|
|
10817
|
-
isAccessControlPermission: false,
|
|
10818
|
-
isRolePermission: false,
|
|
10819
|
-
group: PermissionGroup.StatusPage,
|
|
10820
|
-
},
|
|
10821
|
-
|
|
10822
10670
|
{
|
|
10823
10671
|
permission: Permission.CreateStatusPageOwnerUser,
|
|
10824
10672
|
title: "Create Status Page User Owner",
|
|
@@ -17,6 +17,7 @@ import ExternalStatusPageMonitorResponse from "../Monitor/ExternalStatusPageMoni
|
|
|
17
17
|
import HttpPhaseTimings from "../Monitor/HttpPhaseTimings";
|
|
18
18
|
import MonitorEvaluationSummary from "../Monitor/MonitorEvaluationSummary";
|
|
19
19
|
import NetworkPathTrace from "../Monitor/NetworkMonitor/NetworkPathTrace";
|
|
20
|
+
import PortMonitorTimings from "../Monitor/PortMonitor/PortMonitorTimings";
|
|
20
21
|
import ObjectID from "../ObjectID";
|
|
21
22
|
import Port from "../Port";
|
|
22
23
|
import ProbeAttempt from "./ProbeAttempt";
|
|
@@ -58,6 +59,11 @@ export default interface ProbeMonitorResponse {
|
|
|
58
59
|
* checks. Absent when the request went through a proxy.
|
|
59
60
|
*/
|
|
60
61
|
httpTimings?: HttpPhaseTimings | undefined;
|
|
62
|
+
/*
|
|
63
|
+
* DNS / TCP / total connection timing for Port checks. DNS is absent for
|
|
64
|
+
* IP literals. Also present when Ping/IP checks use the Port fallback.
|
|
65
|
+
*/
|
|
66
|
+
portTimings?: PortMonitorTimings | undefined;
|
|
61
67
|
dnsResponse?: DnsMonitorResponse | undefined;
|
|
62
68
|
domainResponse?: DomainMonitorResponse | undefined;
|
|
63
69
|
dnssecResponse?: DnssecMonitorResponse | undefined;
|
|
@@ -201,9 +201,7 @@ const BulkUpdateForm: <T extends GenericObject>(
|
|
|
201
201
|
let itemClassName: string = "";
|
|
202
202
|
let iconClassName: string = "";
|
|
203
203
|
|
|
204
|
-
if (isDisabled) {
|
|
205
|
-
itemClassName = "opacity-50 cursor-not-allowed hover:bg-transparent";
|
|
206
|
-
} else if (isDanger) {
|
|
204
|
+
if (!isDisabled && isDanger) {
|
|
207
205
|
itemClassName = "text-red-700 hover:text-red-800 hover:bg-red-50";
|
|
208
206
|
iconClassName = "text-red-400 group-hover:text-red-500";
|
|
209
207
|
}
|
|
@@ -215,6 +213,7 @@ const BulkUpdateForm: <T extends GenericObject>(
|
|
|
215
213
|
icon={button.icon}
|
|
216
214
|
className={itemClassName}
|
|
217
215
|
iconClassName={iconClassName}
|
|
216
|
+
isDisabled={isDisabled}
|
|
218
217
|
onClick={() => {
|
|
219
218
|
triggerButtonClick(button);
|
|
220
219
|
}}
|