@oneuptime/common 12.0.3 → 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/CephCluster.ts +14 -0
- package/Models/DatabaseModels/CodeRepository.ts +14 -6
- package/Models/DatabaseModels/Dashboard.ts +28 -0
- package/Models/DatabaseModels/DockerHost.ts +14 -0
- package/Models/DatabaseModels/GlobalOidcProject.ts +18 -0
- package/Models/DatabaseModels/GlobalSsoProject.ts +18 -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/IoTFleet.ts +14 -0
- package/Models/DatabaseModels/KubernetesCluster.ts +14 -0
- package/Models/DatabaseModels/LogSavedView.ts +33 -0
- package/Models/DatabaseModels/NetworkDevice.ts +14 -0
- package/Models/DatabaseModels/NetworkInterface.ts +18 -0
- package/Models/DatabaseModels/Project.ts +247 -11
- package/Models/DatabaseModels/ProxmoxCluster.ts +14 -0
- 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/Service.ts +30 -0
- package/Models/DatabaseModels/StatusPage.ts +28 -0
- package/Models/DatabaseModels/StatusPageAnnouncement.ts +1 -0
- package/Models/DatabaseModels/StatusPagePrivateUser.ts +30 -0
- package/Models/DatabaseModels/User.ts +30 -0
- package/Server/API/AIAgentDataAPI.ts +75 -55
- package/Server/API/AIInvestigationAPI.ts +175 -17
- package/Server/API/DashboardAPI.ts +429 -22
- package/Server/API/GitHubAPI.ts +119 -283
- package/Server/API/StatusPageAPI.ts +38 -19
- package/Server/API/UserAPI.ts +263 -1
- package/Server/EnvironmentConfig.ts +23 -3
- package/Server/Infrastructure/ClickhouseConfig.ts +15 -1
- package/Server/Infrastructure/ClickhouseDatabase.ts +1 -1
- package/Server/Infrastructure/GlobalCache.ts +37 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1786018109307-AddPerUserPasswordSalt.ts +21 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1786023262402-WidenHashedStringColumnsForScrypt.ts +68 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1786096660558-AddTimeRangeToLogSavedView.ts +27 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1786100000000-RestoreServiceLowerNameIndex.ts +100 -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/1786200000000-RestoreDroppedUniqueIndexes.ts +214 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1786300000000-QuarantineUnboundGitHubInstallations.ts +69 -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 +20 -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 +101 -1
- package/Server/Services/CodeRepositoryService.ts +105 -2
- package/Server/Services/DatabaseService.ts +227 -3
- package/Server/Services/IncidentFeedService.ts +5 -0
- package/Server/Services/LlmLogService.ts +46 -2
- package/Server/Services/OpenTelemetryIngestService.ts +230 -26
- package/Server/Services/UserService.ts +184 -0
- 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/AI/Toolbox/CodeTools.ts +45 -4
- package/Server/Utils/AnalyticsDatabase/ClusterConfig.ts +24 -0
- package/Server/Utils/AnalyticsDatabase/StatementGenerator.ts +13 -0
- package/Server/Utils/CodeRepository/GitHub/GitHub.ts +157 -4
- package/Server/Utils/CodeRepository/GitHub/GitHubInstallationBinding.ts +130 -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 +330 -0
- 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/OverviewCustomFields.test.tsx +333 -0
- package/Tests/App/Dashboard/PortMonitorCriteriaFilter.test.ts +93 -0
- package/Tests/App/Dashboard/UserCustomFields.test.tsx +392 -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/AIAgentDataRepositoryToken.test.ts +381 -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/DashboardPublicAttributeValuesAPI.test.ts +943 -0
- package/Tests/Server/API/DashboardPublicMetricsAggregateAPI.test.ts +1296 -0
- package/Tests/Server/API/DashboardPublicTemplatePayloads.test.ts +598 -0
- package/Tests/Server/API/GitHubAppInstallationBindingAPI.test.ts +539 -0
- package/Tests/Server/API/Helpers.ts +6 -1
- package/Tests/Server/API/StatusPageMasterPasswordAPI.test.ts +335 -0
- package/Tests/Server/API/UserProjectsAPI.test.ts +852 -0
- package/Tests/Server/Infrastructure/GlobalCache.test.ts +128 -0
- package/Tests/Server/Infrastructure/SemaphoreMutex.test.ts +215 -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/AddPerUserPasswordSaltMigration.test.ts +178 -0
- package/Tests/Server/Services/AnalyticsDatabasePaginationStability.test.ts +582 -0
- package/Tests/Server/Services/AnalyticsDatabaseService.test.ts +30 -1
- package/Tests/Server/Services/CodeRepositoryInstallationBinding.test.ts +305 -0
- package/Tests/Server/Services/CodeRepositoryResolutionBinding.test.ts +147 -0
- package/Tests/Server/Services/DatabaseServicePerUserPasswordSalt.test.ts +880 -0
- 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/OpenTelemetryServiceResolutionCache.test.ts +568 -0
- package/Tests/Server/Services/RestoreDroppedUniqueIndexesMigration.test.ts +386 -0
- package/Tests/Server/Services/RestoreServiceLowerNameIndexMigration.test.ts +240 -0
- package/Tests/Server/Services/SeparateIncidentAlertAiSettingsMigration.test.ts +194 -0
- package/Tests/Server/Services/UserServiceFirstMasterAdminElection.test.ts +885 -0
- package/Tests/Server/Services/WidenHashedStringColumnsForScryptMigration.test.ts +220 -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/CodeTools.test.ts +47 -1
- package/Tests/Server/Utils/AI/CodeWriteTools.test.ts +10 -0
- 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/AnalyticsDatabase/StatementGenerator.test.ts +120 -0
- package/Tests/Server/Utils/CodeRepository/GitHubInstallationBinding.test.ts +292 -0
- package/Tests/Server/Utils/GitHubInstallationOwnershipVerification.test.ts +340 -0
- package/Tests/Server/Utils/GitHubWebhookAndTreeCacheIsolation.test.ts +250 -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 +585 -0
- package/Tests/Types/Dashboard/DashboardTemplates.test.ts +111 -0
- package/Tests/Types/Database/ColumnLength.test.ts +7 -1
- package/Tests/Types/HashedStringPerUserSalt.test.ts +476 -0
- package/Tests/Types/Monitor/CephMetricCatalog.test.ts +104 -0
- package/Tests/Types/Monitor/CriteriaFilter.test.ts +4 -0
- package/Tests/Types/Monitor/DockerAlertTemplates.test.ts +293 -0
- package/Tests/Types/Monitor/DockerMetricCatalog.test.ts +109 -0
- package/Tests/Types/Monitor/DockerSwarmMetricCatalog.test.ts +118 -0
- package/Tests/Types/Monitor/HostAlertTemplates.test.ts +249 -0
- package/Tests/Types/Monitor/HostMetricCatalog.test.ts +104 -0
- package/Tests/Types/Monitor/IotAlertTemplates.test.ts +320 -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/PodmanAlertTemplates.test.ts +271 -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/CustomFields/CustomFieldsDetail.test.tsx +696 -0
- 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/UI/Utils/UserProjectsModelAPI.test.ts +714 -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/TeamMembersByProject.test.ts +655 -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/Database/ColumnLength.ts +9 -1
- package/Types/Database/TableColumn.ts +11 -0
- package/Types/Database/UnsynchronizedIndex.ts +48 -0
- package/Types/HashedString.ts +140 -4
- 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/CustomFields/CustomFieldsDetail.tsx +85 -11
- 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/Components/Navbar/NavBar.tsx +12 -2
- package/UI/Components/Navbar/NavBarMenuModal.tsx +19 -7
- 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/ModelAPI/UserProjectsModelAPI.ts +257 -0
- 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/TeamMembersByProject.ts +237 -0
- 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/CephCluster.js +16 -1
- package/build/dist/Models/DatabaseModels/CephCluster.js.map +1 -1
- package/build/dist/Models/DatabaseModels/CodeRepository.js +14 -6
- package/build/dist/Models/DatabaseModels/CodeRepository.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/DockerHost.js +16 -1
- package/build/dist/Models/DatabaseModels/DockerHost.js.map +1 -1
- package/build/dist/Models/DatabaseModels/GlobalOidcProject.js +16 -1
- package/build/dist/Models/DatabaseModels/GlobalOidcProject.js.map +1 -1
- package/build/dist/Models/DatabaseModels/GlobalSsoProject.js +16 -1
- package/build/dist/Models/DatabaseModels/GlobalSsoProject.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/IoTFleet.js +16 -1
- package/build/dist/Models/DatabaseModels/IoTFleet.js.map +1 -1
- package/build/dist/Models/DatabaseModels/KubernetesCluster.js +16 -1
- package/build/dist/Models/DatabaseModels/KubernetesCluster.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/NetworkDevice.js +16 -1
- package/build/dist/Models/DatabaseModels/NetworkDevice.js.map +1 -1
- package/build/dist/Models/DatabaseModels/NetworkInterface.js +16 -1
- package/build/dist/Models/DatabaseModels/NetworkInterface.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Project.js +257 -13
- package/build/dist/Models/DatabaseModels/Project.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ProxmoxCluster.js +16 -1
- package/build/dist/Models/DatabaseModels/ProxmoxCluster.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/Service.js +28 -1
- package/build/dist/Models/DatabaseModels/Service.js.map +1 -1
- package/build/dist/Models/DatabaseModels/StatusPage.js +29 -0
- package/build/dist/Models/DatabaseModels/StatusPage.js.map +1 -1
- package/build/dist/Models/DatabaseModels/StatusPageAnnouncement.js +1 -0
- package/build/dist/Models/DatabaseModels/StatusPageAnnouncement.js.map +1 -1
- package/build/dist/Models/DatabaseModels/StatusPagePrivateUser.js +32 -0
- package/build/dist/Models/DatabaseModels/StatusPagePrivateUser.js.map +1 -1
- package/build/dist/Models/DatabaseModels/User.js +32 -0
- package/build/dist/Models/DatabaseModels/User.js.map +1 -1
- package/build/dist/Server/API/AIAgentDataAPI.js +49 -48
- 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 +312 -15
- package/build/dist/Server/API/DashboardAPI.js.map +1 -1
- package/build/dist/Server/API/GitHubAPI.js +94 -167
- package/build/dist/Server/API/GitHubAPI.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/API/UserAPI.js +187 -2
- package/build/dist/Server/API/UserAPI.js.map +1 -1
- package/build/dist/Server/EnvironmentConfig.js +21 -3
- 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/GlobalCache.js +29 -0
- package/build/dist/Server/Infrastructure/GlobalCache.js.map +1 -1
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786018109307-AddPerUserPasswordSalt.js +14 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786018109307-AddPerUserPasswordSalt.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786023262402-WidenHashedStringColumnsForScrypt.js +59 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786023262402-WidenHashedStringColumnsForScrypt.js.map +1 -0
- 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/1786100000000-RestoreServiceLowerNameIndex.js +93 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786100000000-RestoreServiceLowerNameIndex.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/1786200000000-RestoreDroppedUniqueIndexes.js +101 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786200000000-RestoreDroppedUniqueIndexes.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786300000000-QuarantineUnboundGitHubInstallations.js +66 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786300000000-QuarantineUnboundGitHubInstallations.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 +20 -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 +86 -2
- package/build/dist/Server/Services/AnalyticsDatabaseService.js.map +1 -1
- package/build/dist/Server/Services/CodeRepositoryService.js +90 -2
- package/build/dist/Server/Services/CodeRepositoryService.js.map +1 -1
- package/build/dist/Server/Services/DatabaseService.js +180 -3
- 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/Services/OpenTelemetryIngestService.js +155 -25
- package/build/dist/Server/Services/OpenTelemetryIngestService.js.map +1 -1
- package/build/dist/Server/Services/UserService.js +165 -0
- package/build/dist/Server/Services/UserService.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/AI/Toolbox/CodeTools.js +31 -1
- package/build/dist/Server/Utils/AI/Toolbox/CodeTools.js.map +1 -1
- package/build/dist/Server/Utils/AnalyticsDatabase/ClusterConfig.js +21 -0
- package/build/dist/Server/Utils/AnalyticsDatabase/ClusterConfig.js.map +1 -1
- package/build/dist/Server/Utils/AnalyticsDatabase/StatementGenerator.js +13 -0
- package/build/dist/Server/Utils/AnalyticsDatabase/StatementGenerator.js.map +1 -1
- package/build/dist/Server/Utils/CodeRepository/GitHub/GitHub.js +126 -4
- package/build/dist/Server/Utils/CodeRepository/GitHub/GitHub.js.map +1 -1
- package/build/dist/Server/Utils/CodeRepository/GitHub/GitHubInstallationBinding.js +136 -0
- package/build/dist/Server/Utils/CodeRepository/GitHub/GitHubInstallationBinding.js.map +1 -0
- package/build/dist/Server/Utils/Monitor/Criteria/APIRequestCriteria.js +20 -3
- package/build/dist/Server/Utils/Monitor/Criteria/APIRequestCriteria.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/Criteria/DomainMonitorCriteria.js +43 -0
- package/build/dist/Server/Utils/Monitor/Criteria/DomainMonitorCriteria.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorMetricUtil.js +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 +258 -0
- package/build/dist/Server/Utils/PasswordHash.js.map +1 -0
- 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/Database/ColumnLength.js +9 -1
- package/build/dist/Types/Database/ColumnLength.js.map +1 -1
- package/build/dist/Types/Database/TableColumn.js.map +1 -1
- package/build/dist/Types/Database/UnsynchronizedIndex.js +46 -0
- package/build/dist/Types/Database/UnsynchronizedIndex.js.map +1 -0
- package/build/dist/Types/HashedString.js +96 -5
- 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/CustomFields/CustomFieldsDetail.js +51 -10
- package/build/dist/UI/Components/CustomFields/CustomFieldsDetail.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/Components/Navbar/NavBar.js +3 -1
- package/build/dist/UI/Components/Navbar/NavBar.js.map +1 -1
- package/build/dist/UI/Components/Navbar/NavBarMenuModal.js +19 -7
- package/build/dist/UI/Components/Navbar/NavBarMenuModal.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/ModelAPI/UserProjectsModelAPI.js +156 -0
- package/build/dist/UI/Utils/ModelAPI/UserProjectsModelAPI.js.map +1 -0
- 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/TeamMembersByProject.js +145 -0
- package/build/dist/Utils/TeamMembersByProject.js.map +1 -0
- 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
|
@@ -6,7 +6,7 @@ import StatusPageResource from "../../Models/DatabaseModels/StatusPageResource";
|
|
|
6
6
|
import Dictionary from "../../Types/Dictionary";
|
|
7
7
|
import UptimePrecision from "../../Types/StatusPage/UptimePrecision";
|
|
8
8
|
import StatusPageGroup from "../../Models/DatabaseModels/StatusPageGroup";
|
|
9
|
-
import StatusPageGroupTreeUtil from "./GroupTree";
|
|
9
|
+
import StatusPageGroupTreeUtil, { StatusPageGroupTreeIndex } from "./GroupTree";
|
|
10
10
|
import UptimeUtil, { UptimeWindow } from "../Uptime/UptimeUtil";
|
|
11
11
|
|
|
12
12
|
export default class StatusPageResourceUptimeUtil {
|
|
@@ -81,6 +81,12 @@ export default class StatusPageResourceUptimeUtil {
|
|
|
81
81
|
* (or pass only this group) to look at the group's own resources.
|
|
82
82
|
*/
|
|
83
83
|
allStatusPageGroups?: Array<StatusPageGroup> | undefined;
|
|
84
|
+
/*
|
|
85
|
+
* A prebuilt parent -> children index over allStatusPageGroups. Optional,
|
|
86
|
+
* and worth passing from any caller that asks this per group: without it
|
|
87
|
+
* every call re-buckets the whole group list.
|
|
88
|
+
*/
|
|
89
|
+
statusPageGroupTreeIndex?: StatusPageGroupTreeIndex | undefined;
|
|
84
90
|
}): MonitorStatus {
|
|
85
91
|
let currentStatus: MonitorStatus = new MonitorStatus();
|
|
86
92
|
currentStatus.name = "Operational";
|
|
@@ -91,6 +97,7 @@ export default class StatusPageResourceUptimeUtil {
|
|
|
91
97
|
statusPageGroup: data.statusPageGroup,
|
|
92
98
|
statusPageResources: data.statusPageResources,
|
|
93
99
|
allStatusPageGroups: data.allStatusPageGroups,
|
|
100
|
+
statusPageGroupTreeIndex: data.statusPageGroupTreeIndex,
|
|
94
101
|
});
|
|
95
102
|
|
|
96
103
|
for (const resource of resourcesInGroup) {
|
|
@@ -187,6 +194,8 @@ export default class StatusPageResourceUptimeUtil {
|
|
|
187
194
|
* makes each level of the hierarchy show a rolled up availability.
|
|
188
195
|
*/
|
|
189
196
|
allStatusPageGroups?: Array<StatusPageGroup> | undefined;
|
|
197
|
+
/* See getCurrentStatusPageGroupStatus. */
|
|
198
|
+
statusPageGroupTreeIndex?: StatusPageGroupTreeIndex | undefined;
|
|
190
199
|
}): number | null {
|
|
191
200
|
if (!data.statusPageGroup.showUptimePercent) {
|
|
192
201
|
return null;
|
|
@@ -197,6 +206,7 @@ export default class StatusPageResourceUptimeUtil {
|
|
|
197
206
|
statusPageGroup: data.statusPageGroup,
|
|
198
207
|
statusPageResources: data.statusPageResources,
|
|
199
208
|
allStatusPageGroups: data.allStatusPageGroups,
|
|
209
|
+
statusPageGroupTreeIndex: data.statusPageGroupTreeIndex,
|
|
200
210
|
});
|
|
201
211
|
|
|
202
212
|
if (resourcesInGroup.length === 0) {
|
|
@@ -276,11 +286,24 @@ export default class StatusPageResourceUptimeUtil {
|
|
|
276
286
|
statusPageGroup: StatusPageGroup;
|
|
277
287
|
statusPageResources: Array<StatusPageResource>;
|
|
278
288
|
allStatusPageGroups?: Array<StatusPageGroup> | undefined;
|
|
289
|
+
/* See getCurrentStatusPageGroupStatus. */
|
|
290
|
+
statusPageGroupTreeIndex?: StatusPageGroupTreeIndex | undefined;
|
|
279
291
|
}): Array<StatusPageResource> {
|
|
292
|
+
const statusPageGroups: Array<StatusPageGroup> =
|
|
293
|
+
data.allStatusPageGroups || [data.statusPageGroup];
|
|
294
|
+
|
|
280
295
|
const groupsToInclude: Array<StatusPageGroup> =
|
|
281
296
|
StatusPageGroupTreeUtil.getGroupAndDescendants({
|
|
282
297
|
statusPageGroup: data.statusPageGroup,
|
|
283
|
-
statusPageGroups:
|
|
298
|
+
statusPageGroups: statusPageGroups,
|
|
299
|
+
/*
|
|
300
|
+
* An index built over a different list than the one in play would
|
|
301
|
+
* answer for the wrong hierarchy, and allStatusPageGroups is what the
|
|
302
|
+
* caller's index is built from.
|
|
303
|
+
*/
|
|
304
|
+
index: data.allStatusPageGroups
|
|
305
|
+
? data.statusPageGroupTreeIndex
|
|
306
|
+
: undefined,
|
|
284
307
|
});
|
|
285
308
|
|
|
286
309
|
const groupIds: Set<string> = new Set<string>(
|
|
@@ -319,6 +342,15 @@ export default class StatusPageResourceUptimeUtil {
|
|
|
319
342
|
|
|
320
343
|
const allUptimePercent: Array<number> = [];
|
|
321
344
|
|
|
345
|
+
/*
|
|
346
|
+
* One index for the whole descent below, rather than one re-bucketing of
|
|
347
|
+
* the group list per level and per reporting group.
|
|
348
|
+
*/
|
|
349
|
+
const groupTreeIndex: StatusPageGroupTreeIndex =
|
|
350
|
+
StatusPageGroupTreeUtil.buildIndex({
|
|
351
|
+
statusPageGroups: data.resourceGroups,
|
|
352
|
+
});
|
|
353
|
+
|
|
322
354
|
/*
|
|
323
355
|
* Calculate for groups first. Groups nest, and a group that reports uptime
|
|
324
356
|
* already averages its whole subtree - so descend only until the first
|
|
@@ -341,6 +373,7 @@ export default class StatusPageResourceUptimeUtil {
|
|
|
341
373
|
monitorsInGroup: data.monitorsInGroup,
|
|
342
374
|
uptimeWindow: data.uptimeWindow,
|
|
343
375
|
allStatusPageGroups: data.resourceGroups,
|
|
376
|
+
statusPageGroupTreeIndex: groupTreeIndex,
|
|
344
377
|
});
|
|
345
378
|
|
|
346
379
|
if (groupUptimePercent !== null) {
|
|
@@ -354,6 +387,7 @@ export default class StatusPageResourceUptimeUtil {
|
|
|
354
387
|
StatusPageGroupTreeUtil.getChildGroups({
|
|
355
388
|
statusPageGroupId: group._id?.toString() || "",
|
|
356
389
|
statusPageGroups: data.resourceGroups,
|
|
390
|
+
index: groupTreeIndex,
|
|
357
391
|
}),
|
|
358
392
|
);
|
|
359
393
|
}
|
|
@@ -362,6 +396,7 @@ export default class StatusPageResourceUptimeUtil {
|
|
|
362
396
|
collectGroupUptime(
|
|
363
397
|
StatusPageGroupTreeUtil.getRootGroups({
|
|
364
398
|
statusPageGroups: data.resourceGroups,
|
|
399
|
+
index: groupTreeIndex,
|
|
365
400
|
}),
|
|
366
401
|
);
|
|
367
402
|
|
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
import Project from "../Models/DatabaseModels/Project";
|
|
2
|
+
import Team from "../Models/DatabaseModels/Team";
|
|
3
|
+
import TeamMember from "../Models/DatabaseModels/TeamMember";
|
|
4
|
+
import ObjectID from "../Types/ObjectID";
|
|
5
|
+
|
|
6
|
+
/*
|
|
7
|
+
* TeamMember is a (user, team) pair, so "every membership this user has" is not
|
|
8
|
+
* the same list as "every project this user belongs to": someone on three teams
|
|
9
|
+
* of the same project has three memberships but is in one project.
|
|
10
|
+
*
|
|
11
|
+
* These helpers collapse a user's memberships into one row per project, carrying
|
|
12
|
+
* every team they belong to in that project. The Admin Dashboard's
|
|
13
|
+
* User > Projects page is the list this exists for, and the master-admin
|
|
14
|
+
* `POST /user/:userId/projects` endpoint is what runs it.
|
|
15
|
+
*
|
|
16
|
+
* This is the project-side mirror of TeamMembersByUser (which collapses a
|
|
17
|
+
* project's memberships into one row per user). They are kept apart rather than
|
|
18
|
+
* generalised into one grouper because the aggregate each side needs is
|
|
19
|
+
* different - one carries teams, the other carries teams *and* the project - and
|
|
20
|
+
* a shared abstraction would be read by neither caller.
|
|
21
|
+
*/
|
|
22
|
+
export interface UserProjectMembership {
|
|
23
|
+
/*
|
|
24
|
+
* Identity of the row. The lowest of the user's membership ids in this
|
|
25
|
+
* project, so the row carries the same id whatever order the memberships came
|
|
26
|
+
* back in - a first-seen id would change between two reads sorted differently
|
|
27
|
+
* and break every id-keyed thing on top of it (row selection, delete).
|
|
28
|
+
*/
|
|
29
|
+
id: string | undefined;
|
|
30
|
+
projectId: ObjectID | undefined;
|
|
31
|
+
project: Project | undefined;
|
|
32
|
+
// Every team this user belongs to in this project, sorted by name.
|
|
33
|
+
teams: Array<Team>;
|
|
34
|
+
// The ids of every membership folded into this row.
|
|
35
|
+
teamMemberIds: Array<string>;
|
|
36
|
+
/*
|
|
37
|
+
* True as soon as ONE of the memberships has been accepted: a person who has
|
|
38
|
+
* accepted their invitation to any team of the project is in the project.
|
|
39
|
+
*/
|
|
40
|
+
hasAcceptedInvitation: boolean;
|
|
41
|
+
// How many of the memberships are still unaccepted invitations.
|
|
42
|
+
pendingTeamCount: number;
|
|
43
|
+
// When the user was first invited to this project (earliest membership).
|
|
44
|
+
joinedAt: Date | undefined;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
export default class TeamMembersByProject {
|
|
48
|
+
/**
|
|
49
|
+
* The project a membership is grouped under. Null when the membership carries
|
|
50
|
+
* no project at all - those rows are never merged, because merging them would
|
|
51
|
+
* put memberships of unrelated projects on one line.
|
|
52
|
+
*/
|
|
53
|
+
public static getGroupKey(teamMember: TeamMember): string | null {
|
|
54
|
+
const projectId: string =
|
|
55
|
+
teamMember.projectId?.toString() ||
|
|
56
|
+
teamMember.project?._id?.toString() ||
|
|
57
|
+
"";
|
|
58
|
+
|
|
59
|
+
return projectId || null;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* The name this row reads and sorts under. Falls back to the project id so a
|
|
64
|
+
* row whose project could not be joined still lands somewhere deterministic
|
|
65
|
+
* rather than sorting as a blank.
|
|
66
|
+
*/
|
|
67
|
+
public static getProjectName(row: UserProjectMembership): string {
|
|
68
|
+
return (
|
|
69
|
+
row.project?.name?.toString() ||
|
|
70
|
+
row.projectId?.toString() ||
|
|
71
|
+
row.project?._id?.toString() ||
|
|
72
|
+
""
|
|
73
|
+
);
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* One row per project, in the order each project was first seen. The input
|
|
78
|
+
* order is whatever the caller sorted the memberships by, so first-seen order
|
|
79
|
+
* keeps that sort intact.
|
|
80
|
+
*/
|
|
81
|
+
public static groupByProject(
|
|
82
|
+
teamMembers: Array<TeamMember>,
|
|
83
|
+
): Array<UserProjectMembership> {
|
|
84
|
+
const rowsByGroupKey: Map<string, UserProjectMembership> = new Map<
|
|
85
|
+
string,
|
|
86
|
+
UserProjectMembership
|
|
87
|
+
>();
|
|
88
|
+
const rows: Array<UserProjectMembership> = [];
|
|
89
|
+
|
|
90
|
+
/*
|
|
91
|
+
* Which teams are already on a row. Tracked separately rather than
|
|
92
|
+
* re-derived from `teams`, because a membership identifies its team by
|
|
93
|
+
* `teamId` while the team object it carries identifies itself by `_id`, and
|
|
94
|
+
* either one can be missing from a given select.
|
|
95
|
+
*/
|
|
96
|
+
const teamKeysByRow: Map<UserProjectMembership, Set<string>> = new Map<
|
|
97
|
+
UserProjectMembership,
|
|
98
|
+
Set<string>
|
|
99
|
+
>();
|
|
100
|
+
|
|
101
|
+
for (const teamMember of teamMembers) {
|
|
102
|
+
const groupKey: string | null = this.getGroupKey(teamMember);
|
|
103
|
+
|
|
104
|
+
let row: UserProjectMembership | undefined = groupKey
|
|
105
|
+
? rowsByGroupKey.get(groupKey)
|
|
106
|
+
: undefined;
|
|
107
|
+
|
|
108
|
+
if (!row) {
|
|
109
|
+
row = {
|
|
110
|
+
id: undefined,
|
|
111
|
+
projectId: teamMember.projectId || undefined,
|
|
112
|
+
project: teamMember.project || undefined,
|
|
113
|
+
teams: [],
|
|
114
|
+
teamMemberIds: [],
|
|
115
|
+
hasAcceptedInvitation: false,
|
|
116
|
+
pendingTeamCount: 0,
|
|
117
|
+
joinedAt: undefined,
|
|
118
|
+
};
|
|
119
|
+
|
|
120
|
+
teamKeysByRow.set(row, new Set<string>());
|
|
121
|
+
|
|
122
|
+
if (groupKey) {
|
|
123
|
+
rowsByGroupKey.set(groupKey, row);
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
rows.push(row);
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
this.addMembershipToRow(row, teamMember, teamKeysByRow.get(row)!);
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
for (const row of rows) {
|
|
133
|
+
this.finalizeRow(row);
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
return rows;
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
/**
|
|
140
|
+
* Alphabetical by project name, case-insensitively. Rows with no name at all
|
|
141
|
+
* sort last so the list does not open on a run of blanks.
|
|
142
|
+
*
|
|
143
|
+
* Returns a new array; the input is left alone.
|
|
144
|
+
*/
|
|
145
|
+
public static sortByProjectName(
|
|
146
|
+
rows: Array<UserProjectMembership>,
|
|
147
|
+
): Array<UserProjectMembership> {
|
|
148
|
+
return [...rows].sort(
|
|
149
|
+
(a: UserProjectMembership, b: UserProjectMembership) => {
|
|
150
|
+
const nameA: string = this.getProjectName(a).toLowerCase();
|
|
151
|
+
const nameB: string = this.getProjectName(b).toLowerCase();
|
|
152
|
+
|
|
153
|
+
if (!nameA && !nameB) {
|
|
154
|
+
return 0;
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
if (!nameA) {
|
|
158
|
+
return 1;
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
if (!nameB) {
|
|
162
|
+
return -1;
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
return nameA.localeCompare(nameB);
|
|
166
|
+
},
|
|
167
|
+
);
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
private static addMembershipToRow(
|
|
171
|
+
row: UserProjectMembership,
|
|
172
|
+
teamMember: TeamMember,
|
|
173
|
+
teamKeys: Set<string>,
|
|
174
|
+
): void {
|
|
175
|
+
if (teamMember.hasAcceptedInvitation) {
|
|
176
|
+
row.hasAcceptedInvitation = true;
|
|
177
|
+
} else {
|
|
178
|
+
row.pendingTeamCount = row.pendingTeamCount + 1;
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
/*
|
|
182
|
+
* A later membership can carry the joined project when the first one did
|
|
183
|
+
* not (different selects, or a nullified relation), so fill in whatever is
|
|
184
|
+
* still missing rather than trusting the first membership seen.
|
|
185
|
+
*/
|
|
186
|
+
if (!row.project && teamMember.project) {
|
|
187
|
+
row.project = teamMember.project;
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
if (!row.projectId && teamMember.projectId) {
|
|
191
|
+
row.projectId = teamMember.projectId;
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
const membershipId: string = teamMember._id?.toString() || "";
|
|
195
|
+
|
|
196
|
+
if (membershipId) {
|
|
197
|
+
row.teamMemberIds.push(membershipId);
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
const createdAt: Date | undefined = teamMember.createdAt;
|
|
201
|
+
|
|
202
|
+
if (createdAt && (!row.joinedAt || createdAt < row.joinedAt)) {
|
|
203
|
+
row.joinedAt = createdAt;
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
const team: Team | undefined = teamMember.team;
|
|
207
|
+
|
|
208
|
+
if (!team) {
|
|
209
|
+
return;
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
const teamKey: string =
|
|
213
|
+
teamMember.teamId?.toString() ||
|
|
214
|
+
team._id?.toString() ||
|
|
215
|
+
team.name?.toString() ||
|
|
216
|
+
"";
|
|
217
|
+
|
|
218
|
+
if (!teamKey || teamKeys.has(teamKey)) {
|
|
219
|
+
return;
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
teamKeys.add(teamKey);
|
|
223
|
+
row.teams.push(team);
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
private static finalizeRow(row: UserProjectMembership): void {
|
|
227
|
+
row.teams.sort((a: Team, b: Team) => {
|
|
228
|
+
return (a.name?.toString() || "")
|
|
229
|
+
.toLowerCase()
|
|
230
|
+
.localeCompare((b.name?.toString() || "").toLowerCase());
|
|
231
|
+
});
|
|
232
|
+
|
|
233
|
+
if (row.teamMemberIds.length > 0) {
|
|
234
|
+
row.id = [...row.teamMemberIds].sort()[0]!;
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import InBetween from "../../Types/BaseDatabase/InBetween";
|
|
2
|
+
import { TelemetrySavedViewTimeRange } from "../../Types/Telemetry/TelemetrySavedViewState";
|
|
3
|
+
import RangeStartAndEndDateTime from "../../Types/Time/RangeStartAndEndDateTime";
|
|
4
|
+
import TimeRange from "../../Types/Time/TimeRange";
|
|
5
|
+
|
|
6
|
+
/*
|
|
7
|
+
* Saved views (logs, metrics, traces) must remember the time *selection*, not
|
|
8
|
+
* the window that selection happened to resolve to when the view was saved.
|
|
9
|
+
* "Past 1 Hour" saved today has to still mean the last hour next week, so only
|
|
10
|
+
* a Custom range carries absolute timestamps; every rolling range is stored as
|
|
11
|
+
* its token alone and re-resolved against the clock each time it is applied.
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
export const DEFAULT_SAVED_VIEW_TIME_RANGE: TimeRange = TimeRange.PAST_ONE_HOUR;
|
|
15
|
+
|
|
16
|
+
export function serializeSavedViewTimeRange(
|
|
17
|
+
timeRange: RangeStartAndEndDateTime,
|
|
18
|
+
): TelemetrySavedViewTimeRange {
|
|
19
|
+
const serialized: TelemetrySavedViewTimeRange = { range: timeRange.range };
|
|
20
|
+
|
|
21
|
+
if (timeRange.range === TimeRange.CUSTOM && timeRange.startAndEndDate) {
|
|
22
|
+
serialized.startValue = toIsoString(timeRange.startAndEndDate.startValue);
|
|
23
|
+
serialized.endValue = toIsoString(timeRange.startAndEndDate.endValue);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
return serialized;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/*
|
|
30
|
+
* Read a stored time selection, or undefined when there is nothing usable
|
|
31
|
+
* there. The input is whatever came back out of a JSON column, so nothing
|
|
32
|
+
* about its shape is guaranteed. Callers that have another source to fall
|
|
33
|
+
* back on (e.g. a legacy absolute window) use this; callers that do not use
|
|
34
|
+
* deserializeSavedViewTimeRange below, which substitutes the default.
|
|
35
|
+
*/
|
|
36
|
+
export function readSavedViewTimeRange(
|
|
37
|
+
saved: TelemetrySavedViewTimeRange | unknown,
|
|
38
|
+
): RangeStartAndEndDateTime | undefined {
|
|
39
|
+
if (!saved || typeof saved !== "object") {
|
|
40
|
+
return undefined;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
const rawRange: unknown = (saved as Record<string, unknown>)["range"];
|
|
44
|
+
|
|
45
|
+
if (typeof rawRange !== "string") {
|
|
46
|
+
return undefined;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
const knownRanges: Array<string> = Object.values(TimeRange);
|
|
50
|
+
|
|
51
|
+
if (!knownRanges.includes(rawRange)) {
|
|
52
|
+
return undefined;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
const range: TimeRange = rawRange as TimeRange;
|
|
56
|
+
|
|
57
|
+
if (range !== TimeRange.CUSTOM) {
|
|
58
|
+
return { range: range };
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
const start: Date | null = toDate(
|
|
62
|
+
(saved as Record<string, unknown>)["startValue"],
|
|
63
|
+
);
|
|
64
|
+
const end: Date | null = toDate(
|
|
65
|
+
(saved as Record<string, unknown>)["endValue"],
|
|
66
|
+
);
|
|
67
|
+
|
|
68
|
+
if (!start || !end) {
|
|
69
|
+
// A Custom range without a usable window says nothing about when to look.
|
|
70
|
+
return undefined;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
return {
|
|
74
|
+
range: TimeRange.CUSTOM,
|
|
75
|
+
startAndEndDate: new InBetween<Date>(start, end),
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
/*
|
|
80
|
+
* Rebuild a RangeStartAndEndDateTime from saved state. Unknown or malformed
|
|
81
|
+
* values fall back to the default (past one hour) rather than throwing or
|
|
82
|
+
* producing a nonsensical window.
|
|
83
|
+
*/
|
|
84
|
+
export function deserializeSavedViewTimeRange(
|
|
85
|
+
saved: TelemetrySavedViewTimeRange | unknown,
|
|
86
|
+
): RangeStartAndEndDateTime {
|
|
87
|
+
return (
|
|
88
|
+
readSavedViewTimeRange(saved) || { range: DEFAULT_SAVED_VIEW_TIME_RANGE }
|
|
89
|
+
);
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
function toIsoString(value: Date | string): string {
|
|
93
|
+
if (value instanceof Date) {
|
|
94
|
+
return value.toISOString();
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
// Dates round-tripped through JSON come back as strings.
|
|
98
|
+
const parsed: Date = new Date(value);
|
|
99
|
+
return isNaN(parsed.getTime()) ? String(value) : parsed.toISOString();
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
function toDate(value: unknown): Date | null {
|
|
103
|
+
if (value instanceof Date) {
|
|
104
|
+
return isNaN(value.getTime()) ? null : value;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
if (typeof value !== "string" || value.length === 0) {
|
|
108
|
+
return null;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
const parsed: Date = new Date(value);
|
|
112
|
+
|
|
113
|
+
return isNaN(parsed.getTime()) ? null : parsed;
|
|
114
|
+
}
|