@oneuptime/common 12.0.4 → 12.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Models/DatabaseModels/AIRun.ts +71 -1
- package/Models/DatabaseModels/AlertFeed.ts +30 -0
- package/Models/DatabaseModels/Dashboard.ts +28 -0
- package/Models/DatabaseModels/DataSource.ts +744 -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/Index.ts +3 -0
- package/Models/DatabaseModels/LogSavedView.ts +33 -0
- package/Models/DatabaseModels/Project.ts +231 -9
- package/Models/DatabaseModels/ProjectCallSMSConfig.ts +10 -2
- 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/Models/DatabaseModels/User.ts +2 -0
- package/Models/DatabaseModels/UserOnCallLog.ts +2 -0
- package/Models/DatabaseModels/UserOnCallLogTimeline.ts +2 -0
- package/Models/DatabaseModels/UserSession.ts +2 -0
- package/Models/DatabaseModels/UserTotpAuth.ts +6 -4
- package/Models/DatabaseModels/UserWebAuthn.ts +5 -3
- package/Server/API/AIAgentDataAPI.ts +44 -55
- package/Server/API/AIInsightAPI.ts +47 -4
- package/Server/API/AIInvestigationAPI.ts +200 -17
- package/Server/API/DashboardAPI.ts +186 -502
- package/Server/API/DataSourceAPI.ts +268 -0
- package/Server/API/StatusPageAPI.ts +49 -20
- package/Server/API/UserAPI.ts +119 -0
- package/Server/EnvironmentConfig.ts +16 -0
- package/Server/Infrastructure/ClickhouseConfig.ts +74 -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/1786303472848-AddDataSourceTable.ts +39 -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/1786600000000-AddInvestigationAnalysisTldr.ts +24 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1786700000000-DropProjectCallSMSConfigCredentialUniques.ts +76 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +16 -0
- package/Server/Infrastructure/Queue.ts +26 -0
- package/Server/Infrastructure/QueueWorker.ts +17 -0
- package/Server/Middleware/TelemetryIngest.ts +8 -3
- package/Server/Services/AIInsightService.ts +132 -12
- package/Server/Services/AIRunService.ts +112 -10
- package/Server/Services/AIService.ts +109 -22
- package/Server/Services/AlertFeedService.ts +5 -0
- package/Server/Services/AlertService.ts +38 -32
- package/Server/Services/AnalyticsDatabaseService.ts +37 -4
- package/Server/Services/DataSourceService.ts +200 -0
- package/Server/Services/DatabaseService.ts +43 -2
- package/Server/Services/HostService.ts +92 -0
- package/Server/Services/IncidentFeedService.ts +5 -0
- package/Server/Services/IncidentService.ts +45 -0
- package/Server/Services/Index.ts +2 -0
- package/Server/Services/LlmLogService.ts +46 -2
- package/Server/Services/MonitorService.ts +49 -0
- package/Server/Services/MonitorStatusService.ts +166 -0
- package/Server/Services/OpenTelemetryIngestService.ts +255 -184
- package/Server/Services/RumSessionPinService.ts +7 -21
- package/Server/Services/StatusPageSubscriberService.ts +13 -0
- package/Server/Services/UserService.ts +280 -9
- package/Server/Static/Vendor/README.md +62 -0
- package/Server/Static/Vendor/fonts/InterVariable.woff2 +0 -0
- package/Server/Static/Vendor/highlight/highlight.min.js +1244 -0
- package/Server/Static/Vendor/highlight/languages/apache.min.js +15 -0
- package/Server/Static/Vendor/highlight/languages/bash.min.js +21 -0
- package/Server/Static/Vendor/highlight/languages/c.min.js +41 -0
- package/Server/Static/Vendor/highlight/languages/cpp.min.js +47 -0
- package/Server/Static/Vendor/highlight/languages/csharp.min.js +49 -0
- package/Server/Static/Vendor/highlight/languages/css.min.js +31 -0
- package/Server/Static/Vendor/highlight/languages/diff.min.js +9 -0
- package/Server/Static/Vendor/highlight/languages/dns.min.js +11 -0
- package/Server/Static/Vendor/highlight/languages/dockerfile.min.js +8 -0
- package/Server/Static/Vendor/highlight/languages/go.min.js +20 -0
- package/Server/Static/Vendor/highlight/languages/graphql.min.js +12 -0
- package/Server/Static/Vendor/highlight/languages/http.min.js +14 -0
- package/Server/Static/Vendor/highlight/languages/ini.min.js +15 -0
- package/Server/Static/Vendor/highlight/languages/java.min.js +38 -0
- package/Server/Static/Vendor/highlight/languages/javascript.min.js +81 -0
- package/Server/Static/Vendor/highlight/languages/json.min.js +8 -0
- package/Server/Static/Vendor/highlight/languages/kotlin.min.js +46 -0
- package/Server/Static/Vendor/highlight/languages/lua.min.js +15 -0
- package/Server/Static/Vendor/highlight/languages/makefile.min.js +14 -0
- package/Server/Static/Vendor/highlight/languages/nginx.min.js +21 -0
- package/Server/Static/Vendor/highlight/languages/perl.min.js +41 -0
- package/Server/Static/Vendor/highlight/languages/php.min.js +59 -0
- package/Server/Static/Vendor/highlight/languages/powershell.min.js +39 -0
- package/Server/Static/Vendor/highlight/languages/python.min.js +42 -0
- package/Server/Static/Vendor/highlight/languages/r.min.js +26 -0
- package/Server/Static/Vendor/highlight/languages/ruby.min.js +54 -0
- package/Server/Static/Vendor/highlight/languages/rust.min.js +27 -0
- package/Server/Static/Vendor/highlight/languages/scala.min.js +28 -0
- package/Server/Static/Vendor/highlight/languages/sql.min.js +21 -0
- package/Server/Static/Vendor/highlight/languages/swift.min.js +68 -0
- package/Server/Static/Vendor/highlight/languages/typescript.min.js +99 -0
- package/Server/Static/Vendor/highlight/languages/xml.min.js +29 -0
- package/Server/Static/Vendor/highlight/languages/yaml.min.js +28 -0
- package/Server/Static/Vendor/highlight/styles/github-dark.min.css +10 -0
- package/Server/Static/Vendor/highlight/styles/vs2015.min.css +1 -0
- package/Server/Static/Vendor/tailwind/tailwind-3.4.5.js +21028 -0
- package/Server/Types/Database/Permissions/BasePermission.ts +7 -0
- package/Server/Types/Database/Permissions/DeletePermission.ts +2 -0
- package/Server/Types/Database/Permissions/ReadPermission.ts +3 -0
- package/Server/Types/Database/Permissions/TenantPermission.ts +101 -16
- 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 +311 -31
- package/Server/Utils/AI/SRE/AlertInvestigationRunner.ts +26 -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 +26 -24
- package/Server/Utils/AI/SRE/Insights/Detectors/ExceptionIdentity.ts +125 -0
- package/Server/Utils/AI/SRE/Insights/Detectors/ExceptionSpikeDetector.ts +25 -15
- package/Server/Utils/AI/SRE/Insights/Detectors/NewExceptionDetector.ts +256 -57
- package/Server/Utils/AI/SRE/Insights/InsightStore.ts +76 -18
- 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/InvestigationTldr.ts +352 -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/AnalyticsDatabase/InsertDedupContext.ts +7 -2
- package/Server/Utils/Dashboard/PublicDashboardResourceListPolicy.ts +1793 -0
- package/Server/Utils/Dashboard/PublicDashboardViewConfig.ts +65 -0
- package/Server/Utils/DataSource/ConnectorRegistry.ts +53 -0
- package/Server/Utils/DataSource/Connectors/ClickHouseConnector.ts +338 -0
- package/Server/Utils/DataSource/Connectors/ElasticsearchConnector.ts +717 -0
- package/Server/Utils/DataSource/Connectors/LokiConnector.ts +606 -0
- package/Server/Utils/DataSource/Connectors/MySqlConnector.ts +307 -0
- package/Server/Utils/DataSource/Connectors/PostgresConnector.ts +260 -0
- package/Server/Utils/DataSource/Connectors/PrometheusConnector.ts +555 -0
- package/Server/Utils/DataSource/Connectors/RestApiConnector.ts +597 -0
- package/Server/Utils/DataSource/Connectors/SqlServerConnector.ts +318 -0
- package/Server/Utils/DataSource/EgressGuard.ts +446 -0
- package/Server/Utils/DataSource/HttpFetch.ts +221 -0
- package/Server/Utils/DataSource/SqlQueryGuard.ts +383 -0
- package/Server/Utils/DataSource/SqlResultShaper.ts +372 -0
- package/Server/Utils/DataSource/Types.ts +93 -0
- package/Server/Utils/Database/PostgresErrorTranslator.ts +172 -17
- package/Server/Utils/InProcessMemo.ts +141 -0
- package/Server/Utils/InstanceHealth/TelemetryIngestion.ts +628 -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 +104 -0
- package/Server/Utils/Monitor/MonitorResource.ts +14 -0
- package/Server/Utils/Monitor/MonitorTemplateUtil.ts +1 -0
- package/Server/Utils/PasswordHash.ts +28 -4
- package/Server/Utils/Response.ts +12 -1
- package/Server/Utils/SSRFProtection.ts +237 -0
- package/Server/Utils/StartServer.ts +8 -0
- package/Server/Utils/StatusPageSubscriberWebhook.ts +30 -0
- package/Server/Utils/Telemetry/CaptureSpan.ts +30 -18
- package/Server/Utils/Telemetry/IngestionTimestamp.ts +75 -0
- package/Server/Utils/Telemetry/ResourceHeartbeat.ts +99 -7
- package/Server/Utils/Telemetry/Telemetry.ts +112 -1
- package/Server/Utils/Telemetry.ts +104 -3
- package/Server/Utils/VendorAssets.ts +165 -0
- package/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.ts +28 -5
- package/Server/Utils/Workspace/Slack/Slack.ts +5 -0
- package/Server/Views/Partials/Head.ejs +21 -7
- package/Tests/App/AdminDashboard/AdminProjectsIdFilter.test.tsx +207 -0
- package/Tests/App/AdminDashboard/AdminUsersIdFilter.test.tsx +216 -0
- package/Tests/App/Dashboard/AIInsightViewActions.test.tsx +422 -0
- package/Tests/App/Dashboard/AIInvestigationHeaderStatus.test.tsx +251 -0
- package/Tests/App/Dashboard/AddWidgetModal.test.tsx +10 -3
- package/Tests/App/Dashboard/AlertsSideMenu.test.tsx +387 -0
- package/Tests/App/Dashboard/ChatActivityFeed.test.tsx +199 -0
- package/Tests/App/Dashboard/DataSourceChartSyntheticConfig.test.tsx +736 -0
- package/Tests/App/Dashboard/DataSourceQueryEditor.test.tsx +868 -0
- package/Tests/App/Dashboard/DataSourceWidgetCatalog.test.ts +440 -0
- package/Tests/App/Dashboard/DataSourceWidgetFetching.test.tsx +2109 -0
- package/Tests/App/Dashboard/DataSourceWidgetViews.test.tsx +726 -0
- package/Tests/App/Dashboard/EventStatusPanel.test.tsx +747 -0
- package/Tests/App/Dashboard/IncidentsSideMenu.test.tsx +447 -0
- package/Tests/App/Dashboard/InvestigationFeedRefresh.test.tsx +480 -0
- package/Tests/App/Dashboard/InvestigationPanel.test.tsx +1695 -0
- package/Tests/App/Dashboard/InvestigationPanelStatus.test.tsx +500 -0
- package/Tests/App/Dashboard/PortMonitorCriteriaFilter.test.ts +93 -0
- package/Tests/App/Dashboard/ProductMenuBreadcrumbs.test.tsx +391 -0
- package/Tests/App/Dashboard/ScheduledMaintenanceSideMenu.test.tsx +326 -0
- package/Tests/App/Dashboard/SideMenuHarness.tsx +187 -0
- package/Tests/App/Dashboard/WidgetCatalog.test.ts +6 -1
- package/Tests/App/StatusPage/PublicStatusPageAPIErrorHandling.test.ts +117 -0
- package/Tests/App/StatusPage/StatusPageModelAPIPolymorphism.test.ts +223 -0
- package/Tests/App/StatusPage/StatusPageResourceExplorer.test.tsx +1858 -0
- package/Tests/Models/DatabaseModels/DataSourceModelSecrets.test.ts +70 -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 +781 -0
- package/Tests/Server/API/AIInvestigationCreateFixTask.test.ts +80 -0
- package/Tests/Server/API/DashboardMasterPasswordAPI.test.ts +172 -1
- package/Tests/Server/API/DashboardPublicDataSourceStrip.test.ts +686 -0
- package/Tests/Server/API/DashboardPublicResourceListAPI.test.ts +585 -823
- package/Tests/Server/API/DataSourceAPIRoutes.test.ts +486 -0
- package/Tests/Server/API/StatusPageMasterPasswordAPI.test.ts +335 -0
- package/Tests/Server/API/StatusPageSubscriberOwnership.test.ts +291 -0
- package/Tests/Server/API/UserAuthenticationAPI.test.ts +641 -0
- package/Tests/Server/Infrastructure/ClickhouseKeepAliveOptions.test.ts +441 -0
- package/Tests/Server/Middleware/TelemetryIngestTokenLog.test.ts +140 -0
- package/Tests/Server/Services/AIInsightService.test.ts +266 -11
- package/Tests/Server/Services/AIRunAnalysisTldrPersistence.test.ts +160 -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 +400 -20
- package/Tests/Server/Services/AddMasterPasswordSaltMigration.test.ts +283 -0
- package/Tests/Server/Services/AlertMetricResourceAttributes.test.ts +352 -0
- package/Tests/Server/Services/AnalyticsDatabaseService.test.ts +25 -1
- package/Tests/Server/Services/DataSourceServiceSettings.test.ts +244 -0
- 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/HostServiceFindOrCreateMemo.test.ts +397 -0
- package/Tests/Server/Services/HostServiceUpdateLastSeen.test.ts +41 -2
- package/Tests/Server/Services/IncidentMetricResourceAttributes.test.ts +408 -0
- package/Tests/Server/Services/InstrumentationTaskTrigger.test.ts +173 -14
- package/Tests/Server/Services/MasterPasswordScrypt.test.ts +567 -0
- package/Tests/Server/Services/MonitorStatusServiceDeleteReferenceCleanup.test.ts +351 -0
- package/Tests/Server/Services/MonitorStatusServiceValidation.test.ts +171 -0
- package/Tests/Server/Services/OpenTelemetryResourceRetentionMemo.test.ts +398 -0
- package/Tests/Server/Services/OpenTelemetryServiceResolutionCache.test.ts +19 -0
- package/Tests/Server/Services/ProjectCallSMSConfigCredentialUniqueness.test.ts +305 -0
- package/Tests/Server/Services/ResourceUpdateLastSeenLivenessFallback.test.ts +36 -1
- package/Tests/Server/Services/RumSessionPinUniqueViolationRecovery.test.ts +163 -0
- package/Tests/Server/Services/SeparateIncidentAlertAiSettingsMigration.test.ts +194 -0
- package/Tests/Server/Services/UserAuthenticationService.test.ts +973 -0
- package/Tests/Server/Types/Database/ObjectIdColumnQuery.test.ts +262 -0
- package/Tests/Server/Types/Database/Permissions/TenantPermission.test.ts +358 -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/ExceptionSpikeDetector.test.ts +6 -1
- package/Tests/Server/Utils/AI/Insights/InsightStore.test.ts +121 -4
- package/Tests/Server/Utils/AI/Insights/InvestigationQueueInsightSubject.test.ts +2 -0
- package/Tests/Server/Utils/AI/Insights/NewExceptionDetector.test.ts +361 -10
- 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 +605 -20
- package/Tests/Server/Utils/AI/InvestigationTldr.test.ts +623 -0
- package/Tests/Server/Utils/AI/InvestigationTldrWiring.test.ts +98 -0
- 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/Dashboard/PublicDashboardResourceListPolicy.test.ts +857 -0
- package/Tests/Server/Utils/Dashboard/PublicDashboardViewConfig.test.ts +480 -0
- package/Tests/Server/Utils/DataSource/ClickHouseConnector.test.ts +759 -0
- package/Tests/Server/Utils/DataSource/ConnectorRegistry.test.ts +37 -0
- package/Tests/Server/Utils/DataSource/EgressGuard.test.ts +645 -0
- package/Tests/Server/Utils/DataSource/ElasticsearchConnector.test.ts +1206 -0
- package/Tests/Server/Utils/DataSource/HttpFetch.test.ts +616 -0
- package/Tests/Server/Utils/DataSource/LokiConnector.test.ts +970 -0
- package/Tests/Server/Utils/DataSource/MySqlConnector.test.ts +935 -0
- package/Tests/Server/Utils/DataSource/PostgresConnector.test.ts +854 -0
- package/Tests/Server/Utils/DataSource/PrometheusConnector.test.ts +881 -0
- package/Tests/Server/Utils/DataSource/RestApiConnector.test.ts +1020 -0
- package/Tests/Server/Utils/DataSource/SqlQueryGuard.test.ts +425 -0
- package/Tests/Server/Utils/DataSource/SqlResultShaper.test.ts +555 -0
- package/Tests/Server/Utils/DataSource/SqlServerConnector.test.ts +934 -0
- package/Tests/Server/Utils/Database/PostgresErrorTranslator.test.ts +228 -7
- package/Tests/Server/Utils/InProcessMemo.test.ts +292 -0
- package/Tests/Server/Utils/InstanceHealth/TelemetryIngestion.test.ts +960 -0
- package/Tests/Server/Utils/MicrosoftTeamsWebhookUrlValidation.test.ts +103 -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/MonitorMetricResourceAttributes.test.ts +336 -0
- package/Tests/Server/Utils/Monitor/MonitorMetricUtilPortTimings.test.ts +243 -0
- package/Tests/Server/Utils/OfflineAssetHygiene.test.ts +521 -0
- package/Tests/Server/Utils/PasswordHash.test.ts +30 -0
- package/Tests/Server/Utils/ResponseRenderAnalytics.test.ts +143 -0
- package/Tests/Server/Utils/SSRFProtection.test.ts +193 -0
- package/Tests/Server/Utils/StatusPageSubscriberWebhook.test.ts +101 -0
- package/Tests/Server/Utils/TailwindBuildCopy.test.ts +225 -0
- package/Tests/Server/Utils/Telemetry/ResourceHeartbeatL1Memo.test.ts +355 -0
- package/Tests/Server/Utils/Telemetry/TelemetryFanInWriter.test.ts +128 -0
- package/Tests/Server/Utils/Telemetry/TelemetryUtilAttributeKeys.test.ts +381 -0
- package/Tests/Server/Utils/Telemetry.test.ts +87 -0
- package/Tests/Server/Utils/VendorAssetIntegrity.test.ts +343 -0
- package/Tests/Server/Utils/VendorAssets.test.ts +671 -0
- package/Tests/Server/Views/OfflineRender.test.ts +297 -0
- package/Tests/Types/Dashboard/DashboardTemplates.test.ts +111 -0
- package/Tests/Types/Dashboard/DataSourceComponentTypes.test.ts +618 -0
- package/Tests/Types/DateClickhouseFormat.test.ts +192 -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/Password.test.ts +363 -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/ConfirmModal.test.tsx +7 -0
- package/Tests/UI/Components/ErrorBoundary.test.tsx +211 -0
- package/Tests/UI/Components/FeedItemSafeMode.test.tsx +74 -0
- package/Tests/UI/Components/Modal.test.tsx +281 -1
- package/Tests/UI/Components/MoreMenu.test.tsx +756 -0
- package/Tests/UI/Components/ObjectIdFilterPipeline.test.tsx +396 -0
- package/Tests/UI/Components/StatusPage/ResourceGroupNavigator.test.tsx +1147 -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/Breadcrumb/fixtures/RealBreadcrumbTrails.ts +116 -1
- package/Tests/UI/Utils/Breadcrumb/fixtures/RealRoutePatterns.ts +2 -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/Analytics.test.ts +23 -0
- package/Tests/Utils/Dashboard/Components/DashboardDataSourceComponents.test.ts +640 -0
- package/Tests/Utils/Dashboard/DashboardViewConfig.test.ts +329 -0
- package/Tests/Utils/Dashboard/GridLayout.test.ts +951 -0
- package/Tests/Utils/DataSource/DataSourceQueryText.test.ts +138 -0
- package/Tests/Utils/DataSource/DataSourceValueReducer.test.ts +526 -0
- package/Tests/Utils/Metrics/MetricResourceAttributeUtil.test.ts +691 -0
- package/Tests/Utils/Monitor/MonitorMetricType.test.ts +117 -0
- package/Tests/Utils/RecordingRuleExpression.test.ts +327 -0
- package/Tests/Utils/StatusPage/GroupHierarchyView.test.ts +1452 -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/StatusPage/ResourceExplorer.test.ts +931 -0
- package/Tests/Utils/Telemetry/CaptureSpanExportGating.test.ts +288 -0
- package/Tests/Utils/Telemetry/IngestionTimestamp.test.ts +170 -0
- package/Tests/Utils/Telemetry/SavedViewTimeRange.test.ts +244 -0
- package/Tests/Utils/Telemetry/TelemetryQueryTimeRange.test.ts +825 -0
- package/Types/AI/AIInsightEvidence.ts +6 -0
- package/Types/AI/AIRunCodeFixRecommendation.ts +17 -0
- package/Types/AI/CodeFixTaskContext.ts +63 -3
- package/Types/AI/CodeFixTaskType.ts +3 -3
- package/Types/Analytics/RevenueEvent.ts +31 -0
- package/Types/Dashboard/DashboardComponentType.ts +31 -0
- package/Types/Dashboard/DashboardComponents/DashboardDataSourceChartComponent.ts +27 -0
- package/Types/Dashboard/DashboardComponents/DashboardDataSourceGaugeComponent.ts +32 -0
- package/Types/Dashboard/DashboardComponents/DashboardDataSourceTableComponent.ts +30 -0
- package/Types/Dashboard/DashboardComponents/DashboardDataSourceValueComponent.ts +55 -0
- package/Types/DataSource/DataSourceLimits.ts +62 -0
- package/Types/DataSource/DataSourceQueryConfig.ts +41 -0
- package/Types/DataSource/DataSourceTableResult.ts +38 -0
- package/Types/DataSource/DataSourceType.ts +213 -0
- package/Types/Date.ts +43 -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/Password.ts +64 -0
- package/Types/Permission.ts +69 -175
- package/Types/Probe/ProbeMonitorResponse.ts +6 -0
- package/Types/UserAuthenticationStatus.ts +34 -0
- package/UI/Components/BulkUpdate/BulkUpdateForm.tsx +2 -3
- package/UI/Components/Button/Button.tsx +1 -1
- package/UI/Components/ErrorBoundary.tsx +549 -71
- package/UI/Components/Feed/FeedItem.tsx +9 -2
- package/UI/Components/Icon/Icon.tsx +10 -9
- package/UI/Components/Modal/ConfirmModal.tsx +6 -1
- package/UI/Components/Modal/Modal.tsx +267 -35
- package/UI/Components/Modal/ModalFooter.tsx +6 -1
- 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 +301 -98
- package/UI/Components/MoreMenu/MoreMenuItem.tsx +13 -5
- package/UI/Components/StatusPage/ResourceGrid.tsx +314 -0
- package/UI/Components/StatusPage/ResourceGroupNavigator.tsx +808 -0
- package/UI/Components/StatusPage/ResourceList.tsx +570 -0
- package/UI/Styles/Theme.css +18 -0
- package/UI/Utils/API/RequestOptions.ts +7 -0
- package/UI/Utils/AnalyticsModelAPI/AnalyticsModelAPI.ts +1 -0
- package/UI/Utils/DownloadFile.ts +16 -8
- package/UI/Utils/ErrorSupportBundle.ts +805 -0
- package/UI/Utils/ModelAPI/ModelAPI.ts +20 -8
- package/UI/Utils/Project.ts +4 -0
- package/UI/Utils/StatusPage.ts +8 -2
- package/UI/Utils/TestDataSource.ts +61 -0
- package/UI/Utils/UseDashboardGridDnd.ts +917 -0
- package/UI/esbuild-config.js +45 -0
- package/Utils/Analytics.ts +15 -0
- package/Utils/Dashboard/Components/DashboardDataSourceChartComponent.ts +88 -0
- package/Utils/Dashboard/Components/DashboardDataSourceGaugeComponent.ts +123 -0
- package/Utils/Dashboard/Components/DashboardDataSourceShared.ts +16 -0
- package/Utils/Dashboard/Components/DashboardDataSourceTableComponent.ts +72 -0
- package/Utils/Dashboard/Components/DashboardDataSourceValueComponent.ts +126 -0
- package/Utils/Dashboard/Components/Index.ts +28 -0
- package/Utils/Dashboard/DashboardViewConfig.ts +80 -36
- package/Utils/Dashboard/GridLayout.ts +523 -0
- package/Utils/DataSource/DataSourceQueryText.ts +94 -0
- package/Utils/DataSource/DataSourceValueReducer.ts +156 -0
- package/Utils/Metrics/MetricResourceAttributeUtil.ts +380 -0
- package/Utils/Metrics/RecordingRuleExpression.ts +19 -17
- package/Utils/Monitor/MonitorMetricType.ts +44 -2
- package/Utils/NetworkDiscovery/ScanTargetUtil.ts +8 -6
- package/Utils/StatusPage/GroupHierarchyView.ts +931 -0
- package/Utils/StatusPage/GroupNestingLayout.ts +69 -0
- package/Utils/StatusPage/GroupTree.ts +157 -66
- package/Utils/StatusPage/ResourceExplorer.ts +853 -0
- 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 +73 -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/DataSource.js +774 -0
- package/build/dist/Models/DatabaseModels/DataSource.js.map +1 -0
- 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/Index.js +2 -0
- package/build/dist/Models/DatabaseModels/Index.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/ProjectCallSMSConfig.js +14 -4
- package/build/dist/Models/DatabaseModels/ProjectCallSMSConfig.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/Models/DatabaseModels/User.js +2 -0
- package/build/dist/Models/DatabaseModels/User.js.map +1 -1
- package/build/dist/Models/DatabaseModels/UserOnCallLog.js +2 -0
- package/build/dist/Models/DatabaseModels/UserOnCallLog.js.map +1 -1
- package/build/dist/Models/DatabaseModels/UserOnCallLogTimeline.js +2 -0
- package/build/dist/Models/DatabaseModels/UserOnCallLogTimeline.js.map +1 -1
- package/build/dist/Models/DatabaseModels/UserSession.js +2 -0
- package/build/dist/Models/DatabaseModels/UserSession.js.map +1 -1
- package/build/dist/Models/DatabaseModels/UserTotpAuth.js +6 -4
- package/build/dist/Models/DatabaseModels/UserTotpAuth.js.map +1 -1
- package/build/dist/Models/DatabaseModels/UserWebAuthn.js +5 -3
- package/build/dist/Models/DatabaseModels/UserWebAuthn.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/AIInsightAPI.js +34 -4
- package/build/dist/Server/API/AIInsightAPI.js.map +1 -1
- package/build/dist/Server/API/AIInvestigationAPI.js +134 -11
- package/build/dist/Server/API/AIInvestigationAPI.js.map +1 -1
- package/build/dist/Server/API/DashboardAPI.js +127 -438
- package/build/dist/Server/API/DashboardAPI.js.map +1 -1
- package/build/dist/Server/API/DataSourceAPI.js +173 -0
- package/build/dist/Server/API/DataSourceAPI.js.map +1 -0
- package/build/dist/Server/API/StatusPageAPI.js +40 -12
- package/build/dist/Server/API/StatusPageAPI.js.map +1 -1
- package/build/dist/Server/API/UserAPI.js +94 -2
- package/build/dist/Server/API/UserAPI.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 +61 -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/1786303472848-AddDataSourceTable.js +20 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786303472848-AddDataSourceTable.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/1786600000000-AddInvestigationAnalysisTldr.js +19 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786600000000-AddInvestigationAnalysisTldr.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786700000000-DropProjectCallSMSConfigCredentialUniques.js +64 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786700000000-DropProjectCallSMSConfigCredentialUniques.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +16 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
- package/build/dist/Server/Infrastructure/Queue.js +27 -0
- package/build/dist/Server/Infrastructure/Queue.js.map +1 -1
- package/build/dist/Server/Infrastructure/QueueWorker.js +13 -0
- package/build/dist/Server/Infrastructure/QueueWorker.js.map +1 -1
- package/build/dist/Server/Middleware/TelemetryIngest.js +8 -3
- package/build/dist/Server/Middleware/TelemetryIngest.js.map +1 -1
- package/build/dist/Server/Services/AIInsightService.js +110 -10
- package/build/dist/Server/Services/AIInsightService.js.map +1 -1
- package/build/dist/Server/Services/AIRunService.js +92 -12
- package/build/dist/Server/Services/AIRunService.js.map +1 -1
- package/build/dist/Server/Services/AIService.js +88 -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/AlertService.js +28 -35
- package/build/dist/Server/Services/AlertService.js.map +1 -1
- package/build/dist/Server/Services/AnalyticsDatabaseService.js +37 -5
- package/build/dist/Server/Services/AnalyticsDatabaseService.js.map +1 -1
- package/build/dist/Server/Services/DataSourceService.js +159 -0
- package/build/dist/Server/Services/DataSourceService.js.map +1 -0
- package/build/dist/Server/Services/DatabaseService.js +21 -2
- package/build/dist/Server/Services/DatabaseService.js.map +1 -1
- package/build/dist/Server/Services/HostService.js +74 -0
- package/build/dist/Server/Services/HostService.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/IncidentService.js +35 -24
- package/build/dist/Server/Services/IncidentService.js.map +1 -1
- package/build/dist/Server/Services/Index.js +2 -0
- package/build/dist/Server/Services/Index.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/MonitorService.js +45 -0
- package/build/dist/Server/Services/MonitorService.js.map +1 -1
- package/build/dist/Server/Services/MonitorStatusService.js +129 -0
- package/build/dist/Server/Services/MonitorStatusService.js.map +1 -1
- package/build/dist/Server/Services/OpenTelemetryIngestService.js +222 -159
- package/build/dist/Server/Services/OpenTelemetryIngestService.js.map +1 -1
- package/build/dist/Server/Services/RumSessionPinService.js +7 -15
- package/build/dist/Server/Services/RumSessionPinService.js.map +1 -1
- package/build/dist/Server/Services/StatusPageSubscriberService.js +10 -0
- package/build/dist/Server/Services/StatusPageSubscriberService.js.map +1 -1
- package/build/dist/Server/Services/UserService.js +241 -10
- package/build/dist/Server/Services/UserService.js.map +1 -1
- package/build/dist/Server/Types/Database/Permissions/BasePermission.js +6 -0
- package/build/dist/Server/Types/Database/Permissions/BasePermission.js.map +1 -1
- package/build/dist/Server/Types/Database/Permissions/DeletePermission.js +1 -0
- package/build/dist/Server/Types/Database/Permissions/DeletePermission.js.map +1 -1
- package/build/dist/Server/Types/Database/Permissions/ReadPermission.js +2 -0
- package/build/dist/Server/Types/Database/Permissions/ReadPermission.js.map +1 -1
- package/build/dist/Server/Types/Database/Permissions/TenantPermission.js +68 -12
- package/build/dist/Server/Types/Database/Permissions/TenantPermission.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 +222 -34
- package/build/dist/Server/Utils/AI/SRE/AIInvestigationEngine.js.map +1 -1
- package/build/dist/Server/Utils/AI/SRE/AlertInvestigationRunner.js +22 -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 +22 -19
- package/build/dist/Server/Utils/AI/SRE/IncidentInvestigationRunner.js.map +1 -1
- package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/ExceptionIdentity.js +97 -0
- package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/ExceptionIdentity.js.map +1 -0
- package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/ExceptionSpikeDetector.js +17 -15
- package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/ExceptionSpikeDetector.js.map +1 -1
- package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/NewExceptionDetector.js +178 -54
- package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/NewExceptionDetector.js.map +1 -1
- package/build/dist/Server/Utils/AI/SRE/Insights/InsightStore.js +65 -16
- package/build/dist/Server/Utils/AI/SRE/Insights/InsightStore.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/InvestigationTldr.js +303 -0
- package/build/dist/Server/Utils/AI/SRE/InvestigationTldr.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/AnalyticsDatabase/InsertDedupContext.js.map +1 -1
- package/build/dist/Server/Utils/Dashboard/PublicDashboardResourceListPolicy.js +1261 -0
- package/build/dist/Server/Utils/Dashboard/PublicDashboardResourceListPolicy.js.map +1 -0
- package/build/dist/Server/Utils/Dashboard/PublicDashboardViewConfig.js +47 -0
- package/build/dist/Server/Utils/Dashboard/PublicDashboardViewConfig.js.map +1 -0
- package/build/dist/Server/Utils/DataSource/ConnectorRegistry.js +42 -0
- package/build/dist/Server/Utils/DataSource/ConnectorRegistry.js.map +1 -0
- package/build/dist/Server/Utils/DataSource/Connectors/ClickHouseConnector.js +187 -0
- package/build/dist/Server/Utils/DataSource/Connectors/ClickHouseConnector.js.map +1 -0
- package/build/dist/Server/Utils/DataSource/Connectors/ElasticsearchConnector.js +493 -0
- package/build/dist/Server/Utils/DataSource/Connectors/ElasticsearchConnector.js.map +1 -0
- package/build/dist/Server/Utils/DataSource/Connectors/LokiConnector.js +399 -0
- package/build/dist/Server/Utils/DataSource/Connectors/LokiConnector.js.map +1 -0
- package/build/dist/Server/Utils/DataSource/Connectors/MySqlConnector.js +195 -0
- package/build/dist/Server/Utils/DataSource/Connectors/MySqlConnector.js.map +1 -0
- package/build/dist/Server/Utils/DataSource/Connectors/PostgresConnector.js +149 -0
- package/build/dist/Server/Utils/DataSource/Connectors/PostgresConnector.js.map +1 -0
- package/build/dist/Server/Utils/DataSource/Connectors/PrometheusConnector.js +362 -0
- package/build/dist/Server/Utils/DataSource/Connectors/PrometheusConnector.js.map +1 -0
- package/build/dist/Server/Utils/DataSource/Connectors/RestApiConnector.js +342 -0
- package/build/dist/Server/Utils/DataSource/Connectors/RestApiConnector.js.map +1 -0
- package/build/dist/Server/Utils/DataSource/Connectors/SqlServerConnector.js +186 -0
- package/build/dist/Server/Utils/DataSource/Connectors/SqlServerConnector.js.map +1 -0
- package/build/dist/Server/Utils/DataSource/EgressGuard.js +305 -0
- package/build/dist/Server/Utils/DataSource/EgressGuard.js.map +1 -0
- package/build/dist/Server/Utils/DataSource/HttpFetch.js +134 -0
- package/build/dist/Server/Utils/DataSource/HttpFetch.js.map +1 -0
- package/build/dist/Server/Utils/DataSource/SqlQueryGuard.js +331 -0
- package/build/dist/Server/Utils/DataSource/SqlQueryGuard.js.map +1 -0
- package/build/dist/Server/Utils/DataSource/SqlResultShaper.js +280 -0
- package/build/dist/Server/Utils/DataSource/SqlResultShaper.js.map +1 -0
- package/build/dist/Server/Utils/DataSource/Types.js +2 -0
- package/build/dist/Server/Utils/DataSource/Types.js.map +1 -0
- package/build/dist/Server/Utils/Database/PostgresErrorTranslator.js +103 -9
- package/build/dist/Server/Utils/Database/PostgresErrorTranslator.js.map +1 -1
- package/build/dist/Server/Utils/InProcessMemo.js +113 -0
- package/build/dist/Server/Utils/InProcessMemo.js.map +1 -0
- package/build/dist/Server/Utils/InstanceHealth/TelemetryIngestion.js +406 -0
- package/build/dist/Server/Utils/InstanceHealth/TelemetryIngestion.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 +67 -0
- package/build/dist/Server/Utils/Monitor/MonitorMetricUtil.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorResource.js +14 -0
- package/build/dist/Server/Utils/Monitor/MonitorResource.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/Server/Utils/Response.js +9 -1
- package/build/dist/Server/Utils/Response.js.map +1 -1
- package/build/dist/Server/Utils/SSRFProtection.js +192 -0
- package/build/dist/Server/Utils/SSRFProtection.js.map +1 -0
- package/build/dist/Server/Utils/StartServer.js +7 -0
- package/build/dist/Server/Utils/StartServer.js.map +1 -1
- package/build/dist/Server/Utils/StatusPageSubscriberWebhook.js +24 -0
- package/build/dist/Server/Utils/StatusPageSubscriberWebhook.js.map +1 -1
- package/build/dist/Server/Utils/Telemetry/CaptureSpan.js +25 -11
- package/build/dist/Server/Utils/Telemetry/CaptureSpan.js.map +1 -1
- package/build/dist/Server/Utils/Telemetry/IngestionTimestamp.js +32 -0
- package/build/dist/Server/Utils/Telemetry/IngestionTimestamp.js.map +1 -0
- package/build/dist/Server/Utils/Telemetry/ResourceHeartbeat.js +92 -5
- package/build/dist/Server/Utils/Telemetry/ResourceHeartbeat.js.map +1 -1
- package/build/dist/Server/Utils/Telemetry/Telemetry.js +92 -6
- package/build/dist/Server/Utils/Telemetry/Telemetry.js.map +1 -1
- package/build/dist/Server/Utils/Telemetry.js +93 -6
- package/build/dist/Server/Utils/Telemetry.js.map +1 -1
- package/build/dist/Server/Utils/VendorAssets.js +121 -0
- package/build/dist/Server/Utils/VendorAssets.js.map +1 -0
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.js +25 -4
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.js.map +1 -1
- package/build/dist/Server/Utils/Workspace/Slack/Slack.js +5 -0
- package/build/dist/Server/Utils/Workspace/Slack/Slack.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/Analytics/RevenueEvent.js +26 -0
- package/build/dist/Types/Analytics/RevenueEvent.js.map +1 -0
- package/build/dist/Types/Dashboard/DashboardComponentType.js +27 -0
- package/build/dist/Types/Dashboard/DashboardComponentType.js.map +1 -1
- package/build/dist/Types/Dashboard/DashboardComponents/DashboardDataSourceChartComponent.js +2 -0
- package/build/dist/Types/Dashboard/DashboardComponents/DashboardDataSourceChartComponent.js.map +1 -0
- package/build/dist/Types/Dashboard/DashboardComponents/DashboardDataSourceGaugeComponent.js +2 -0
- package/build/dist/Types/Dashboard/DashboardComponents/DashboardDataSourceGaugeComponent.js.map +1 -0
- package/build/dist/Types/Dashboard/DashboardComponents/DashboardDataSourceTableComponent.js +2 -0
- package/build/dist/Types/Dashboard/DashboardComponents/DashboardDataSourceTableComponent.js.map +1 -0
- package/build/dist/Types/Dashboard/DashboardComponents/DashboardDataSourceValueComponent.js +16 -0
- package/build/dist/Types/Dashboard/DashboardComponents/DashboardDataSourceValueComponent.js.map +1 -0
- package/build/dist/Types/DataSource/DataSourceLimits.js +47 -0
- package/build/dist/Types/DataSource/DataSourceLimits.js.map +1 -0
- package/build/dist/Types/DataSource/DataSourceQueryConfig.js +10 -0
- package/build/dist/Types/DataSource/DataSourceQueryConfig.js.map +1 -0
- package/build/dist/Types/DataSource/DataSourceTableResult.js +14 -0
- package/build/dist/Types/DataSource/DataSourceTableResult.js.map +1 -0
- package/build/dist/Types/DataSource/DataSourceType.js +183 -0
- package/build/dist/Types/DataSource/DataSourceType.js.map +1 -0
- package/build/dist/Types/Date.js +38 -3
- package/build/dist/Types/Date.js.map +1 -1
- 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/Password.js +56 -0
- package/build/dist/Types/Password.js.map +1 -0
- package/build/dist/Types/Permission.js +65 -155
- package/build/dist/Types/Permission.js.map +1 -1
- package/build/dist/Types/UserAuthenticationStatus.js +2 -0
- package/build/dist/Types/UserAuthenticationStatus.js.map +1 -0
- 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 +427 -52
- 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/Icon/Icon.js +10 -4
- package/build/dist/UI/Components/Icon/Icon.js.map +1 -1
- package/build/dist/UI/Components/Modal/ConfirmModal.js +1 -1
- package/build/dist/UI/Components/Modal/ConfirmModal.js.map +1 -1
- package/build/dist/UI/Components/Modal/Modal.js +178 -19
- package/build/dist/UI/Components/Modal/Modal.js.map +1 -1
- package/build/dist/UI/Components/Modal/ModalFooter.js +3 -1
- package/build/dist/UI/Components/Modal/ModalFooter.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 +197 -66
- package/build/dist/UI/Components/MoreMenu/MoreMenu.js.map +1 -1
- package/build/dist/UI/Components/MoreMenu/MoreMenuItem.js +7 -1
- package/build/dist/UI/Components/MoreMenu/MoreMenuItem.js.map +1 -1
- package/build/dist/UI/Components/StatusPage/ResourceGrid.js +119 -0
- package/build/dist/UI/Components/StatusPage/ResourceGrid.js.map +1 -0
- package/build/dist/UI/Components/StatusPage/ResourceGroupNavigator.js +354 -0
- package/build/dist/UI/Components/StatusPage/ResourceGroupNavigator.js.map +1 -0
- package/build/dist/UI/Components/StatusPage/ResourceList.js +203 -0
- package/build/dist/UI/Components/StatusPage/ResourceList.js.map +1 -0
- package/build/dist/UI/Utils/AnalyticsModelAPI/AnalyticsModelAPI.js +1 -6
- package/build/dist/UI/Utils/AnalyticsModelAPI/AnalyticsModelAPI.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 +20 -15
- 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/TestDataSource.js +39 -0
- package/build/dist/UI/Utils/TestDataSource.js.map +1 -0
- package/build/dist/UI/Utils/UseDashboardGridDnd.js +551 -0
- package/build/dist/UI/Utils/UseDashboardGridDnd.js.map +1 -0
- package/build/dist/Utils/Analytics.js +4 -0
- package/build/dist/Utils/Analytics.js.map +1 -1
- package/build/dist/Utils/Dashboard/Components/DashboardDataSourceChartComponent.js +79 -0
- package/build/dist/Utils/Dashboard/Components/DashboardDataSourceChartComponent.js.map +1 -0
- package/build/dist/Utils/Dashboard/Components/DashboardDataSourceGaugeComponent.js +111 -0
- package/build/dist/Utils/Dashboard/Components/DashboardDataSourceGaugeComponent.js.map +1 -0
- package/build/dist/Utils/Dashboard/Components/DashboardDataSourceShared.js +15 -0
- package/build/dist/Utils/Dashboard/Components/DashboardDataSourceShared.js.map +1 -0
- package/build/dist/Utils/Dashboard/Components/DashboardDataSourceTableComponent.js +62 -0
- package/build/dist/Utils/Dashboard/Components/DashboardDataSourceTableComponent.js.map +1 -0
- package/build/dist/Utils/Dashboard/Components/DashboardDataSourceValueComponent.js +112 -0
- package/build/dist/Utils/Dashboard/Components/DashboardDataSourceValueComponent.js.map +1 -0
- package/build/dist/Utils/Dashboard/Components/Index.js +16 -0
- package/build/dist/Utils/Dashboard/Components/Index.js.map +1 -1
- 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/DataSource/DataSourceQueryText.js +64 -0
- package/build/dist/Utils/DataSource/DataSourceQueryText.js.map +1 -0
- package/build/dist/Utils/DataSource/DataSourceValueReducer.js +124 -0
- package/build/dist/Utils/DataSource/DataSourceValueReducer.js.map +1 -0
- package/build/dist/Utils/Metrics/MetricResourceAttributeUtil.js +281 -0
- package/build/dist/Utils/Metrics/MetricResourceAttributeUtil.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/NetworkDiscovery/ScanTargetUtil.js +8 -6
- package/build/dist/Utils/NetworkDiscovery/ScanTargetUtil.js.map +1 -1
- package/build/dist/Utils/StatusPage/GroupHierarchyView.js +560 -0
- package/build/dist/Utils/StatusPage/GroupHierarchyView.js.map +1 -0
- 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/ResourceExplorer.js +519 -0
- package/build/dist/Utils/StatusPage/ResourceExplorer.js.map +1 -0
- 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/jest.config.json +1 -0
- package/package.json +5 -1
- package/tsconfig.json +12 -10
|
@@ -39,6 +39,7 @@ import { IsBillingEnabled } from "../EnvironmentConfig";
|
|
|
39
39
|
import logger, { LogAttributes } from "../Utils/Logger";
|
|
40
40
|
import Semaphore, { SemaphoreMutex } from "../Infrastructure/Semaphore";
|
|
41
41
|
import TelemetryUtil from "../Utils/Telemetry/Telemetry";
|
|
42
|
+
import MetricResourceAttributeUtil from "../../Utils/Metrics/MetricResourceAttributeUtil";
|
|
42
43
|
import MutableMetricService from "./MutableMetricService";
|
|
43
44
|
import GlobalConfigService from "./GlobalConfigService";
|
|
44
45
|
import GlobalConfig from "../../Models/DatabaseModels/GlobalConfig";
|
|
@@ -1616,6 +1617,16 @@ ${alertSeverity.name}
|
|
|
1616
1617
|
_id: true,
|
|
1617
1618
|
name: true,
|
|
1618
1619
|
},
|
|
1620
|
+
/*
|
|
1621
|
+
* A project's own taxonomy. Both become metric attributes below so
|
|
1622
|
+
* dashboards can group MTTA/MTTR by the dimensions the project
|
|
1623
|
+
* actually thinks in.
|
|
1624
|
+
*/
|
|
1625
|
+
labels: {
|
|
1626
|
+
_id: true,
|
|
1627
|
+
name: true,
|
|
1628
|
+
},
|
|
1629
|
+
customFields: true,
|
|
1619
1630
|
},
|
|
1620
1631
|
props: {
|
|
1621
1632
|
isRoot: true,
|
|
@@ -1692,6 +1703,29 @@ ${alertSeverity.name}
|
|
|
1692
1703
|
metricRetentionDays,
|
|
1693
1704
|
);
|
|
1694
1705
|
|
|
1706
|
+
/*
|
|
1707
|
+
* Dimensions shared by every alert metric. Built once so all four
|
|
1708
|
+
* metrics below record the identical attribute set — a dashboard that
|
|
1709
|
+
* groups by oneuptime.label.product must not find the dimension on
|
|
1710
|
+
* AlertCount but missing from TimeToResolve.
|
|
1711
|
+
*/
|
|
1712
|
+
const baseMetricAttributes: JSONObject = {
|
|
1713
|
+
alertId: data.alertId.toString(),
|
|
1714
|
+
projectId: alert.projectId.toString(),
|
|
1715
|
+
monitorId: alert.monitor?._id?.toString(),
|
|
1716
|
+
monitorName: alert.monitor?.name?.toString(),
|
|
1717
|
+
alertSeverityId: alert.alertSeverity?._id?.toString(),
|
|
1718
|
+
alertSeverityName: alert.alertSeverity?.name?.toString(),
|
|
1719
|
+
/*
|
|
1720
|
+
* oneuptime.label.* / oneuptime.customField.* — namespaced, so they can
|
|
1721
|
+
* never collide with the unprefixed dimensions above.
|
|
1722
|
+
*/
|
|
1723
|
+
...MetricResourceAttributeUtil.getResourceAttributes({
|
|
1724
|
+
labels: alert.labels,
|
|
1725
|
+
customFields: alert.customFields,
|
|
1726
|
+
}),
|
|
1727
|
+
};
|
|
1728
|
+
|
|
1695
1729
|
// now we need to create new metrics for this alert - TimeToAcknowledge, TimeToResolve, AlertCount, AlertDuration
|
|
1696
1730
|
const alertStartsAt: Date =
|
|
1697
1731
|
firstAlertStateTimeline?.startsAt ||
|
|
@@ -1714,14 +1748,7 @@ ${alertSeverity.name}
|
|
|
1714
1748
|
alertCountMetric.name = AlertMetricType.AlertCount;
|
|
1715
1749
|
alertCountMetric.metricPointId = AlertMetricType.AlertCount;
|
|
1716
1750
|
alertCountMetric.value = 1;
|
|
1717
|
-
alertCountMetric.attributes = {
|
|
1718
|
-
alertId: data.alertId.toString(),
|
|
1719
|
-
projectId: alert.projectId.toString(),
|
|
1720
|
-
monitorId: alert.monitor?._id?.toString(),
|
|
1721
|
-
monitorName: alert.monitor?.name?.toString(),
|
|
1722
|
-
alertSeverityId: alert.alertSeverity?._id?.toString(),
|
|
1723
|
-
alertSeverityName: alert.alertSeverity?.name?.toString(),
|
|
1724
|
-
};
|
|
1751
|
+
alertCountMetric.attributes = { ...baseMetricAttributes };
|
|
1725
1752
|
alertCountMetric.attributeKeys = TelemetryUtil.getAttributeKeys(
|
|
1726
1753
|
alertCountMetric.attributes,
|
|
1727
1754
|
);
|
|
@@ -1768,14 +1795,7 @@ ${alertSeverity.name}
|
|
|
1768
1795
|
ackAlertStateTimeline?.startsAt || OneUptimeDate.getCurrentDate(),
|
|
1769
1796
|
alertStartsAt,
|
|
1770
1797
|
);
|
|
1771
|
-
timeToAcknowledgeMetric.attributes = {
|
|
1772
|
-
alertId: data.alertId.toString(),
|
|
1773
|
-
projectId: alert.projectId.toString(),
|
|
1774
|
-
monitorId: alert.monitor?._id?.toString(),
|
|
1775
|
-
monitorName: alert.monitor?.name?.toString(),
|
|
1776
|
-
alertSeverityId: alert.alertSeverity?._id?.toString(),
|
|
1777
|
-
alertSeverityName: alert.alertSeverity?.name?.toString(),
|
|
1778
|
-
};
|
|
1798
|
+
timeToAcknowledgeMetric.attributes = { ...baseMetricAttributes };
|
|
1779
1799
|
timeToAcknowledgeMetric.attributeKeys =
|
|
1780
1800
|
TelemetryUtil.getAttributeKeys(timeToAcknowledgeMetric.attributes);
|
|
1781
1801
|
|
|
@@ -1825,14 +1845,7 @@ ${alertSeverity.name}
|
|
|
1825
1845
|
OneUptimeDate.getCurrentDate(),
|
|
1826
1846
|
alertStartsAt,
|
|
1827
1847
|
);
|
|
1828
|
-
timeToResolveMetric.attributes = {
|
|
1829
|
-
alertId: data.alertId.toString(),
|
|
1830
|
-
projectId: alert.projectId.toString(),
|
|
1831
|
-
monitorId: alert.monitor?._id?.toString(),
|
|
1832
|
-
monitorName: alert.monitor?.name?.toString(),
|
|
1833
|
-
alertSeverityId: alert.alertSeverity?._id?.toString(),
|
|
1834
|
-
alertSeverityName: alert.alertSeverity?.name?.toString(),
|
|
1835
|
-
};
|
|
1848
|
+
timeToResolveMetric.attributes = { ...baseMetricAttributes };
|
|
1836
1849
|
timeToResolveMetric.attributeKeys = TelemetryUtil.getAttributeKeys(
|
|
1837
1850
|
timeToResolveMetric.attributes,
|
|
1838
1851
|
);
|
|
@@ -1872,14 +1885,7 @@ ${alertSeverity.name}
|
|
|
1872
1885
|
alertEndsAt,
|
|
1873
1886
|
alertStartsAt,
|
|
1874
1887
|
);
|
|
1875
|
-
alertDurationMetric.attributes = {
|
|
1876
|
-
alertId: data.alertId.toString(),
|
|
1877
|
-
projectId: alert.projectId.toString(),
|
|
1878
|
-
monitorId: alert.monitor?._id?.toString(),
|
|
1879
|
-
monitorName: alert.monitor?.name?.toString(),
|
|
1880
|
-
alertSeverityId: alert.alertSeverity?._id?.toString(),
|
|
1881
|
-
alertSeverityName: alert.alertSeverity?.name?.toString(),
|
|
1882
|
-
};
|
|
1888
|
+
alertDurationMetric.attributes = { ...baseMetricAttributes };
|
|
1883
1889
|
alertDurationMetric.attributeKeys = TelemetryUtil.getAttributeKeys(
|
|
1884
1890
|
alertDurationMetric.attributes,
|
|
1885
1891
|
);
|
|
@@ -34,6 +34,7 @@ import {
|
|
|
34
34
|
TimeoutOverflowMode,
|
|
35
35
|
} from "../Utils/AnalyticsDatabase/QuerySettingsHelper";
|
|
36
36
|
import {
|
|
37
|
+
getDistributedDdlTaskTimeoutSeconds,
|
|
37
38
|
getStorageTableName,
|
|
38
39
|
onClusterClause,
|
|
39
40
|
} from "../Utils/AnalyticsDatabase/ClusterConfig";
|
|
@@ -137,6 +138,34 @@ export const MigrationExecuteOptions: ClickhouseExecuteOptions = {
|
|
|
137
138
|
* migration pool's 30-minute idle ceiling.
|
|
138
139
|
*/
|
|
139
140
|
http_headers_progress_interval_ms: "10000",
|
|
141
|
+
/*
|
|
142
|
+
* ON CLUSTER DDL is queued in Keeper and executed by each host's DDLWorker
|
|
143
|
+
* sequentially, so on a busy or backlogged cluster a host can be healthy
|
|
144
|
+
* yet not reach the task within the wait window. The server default output
|
|
145
|
+
* mode (`throw`) turns that into TIMEOUT_EXCEEDED (code 159) and aborts
|
|
146
|
+
* the whole migrate run — even though the task stays queued and the hosts
|
|
147
|
+
* execute it in the background (until the DDL queue evicts it:
|
|
148
|
+
* task_max_lifetime, one week, or falling more than max_tasks_in_queue
|
|
149
|
+
* entries behind). `null_status_on_timeout` returns NULL for the hosts
|
|
150
|
+
* that haven't finished yet instead of throwing, while a real DDL failure
|
|
151
|
+
* on any host that did run it within the window still throws. Safe because
|
|
152
|
+
* every schema statement here is idempotent (IF NOT EXISTS / OR REPLACE)
|
|
153
|
+
* and, with the default `distributed_ddl.pool_size = 1`, later DDL queues
|
|
154
|
+
* strictly behind earlier DDL on each host. Migrate.ts additionally warns
|
|
155
|
+
* at end of run when the DDL queue still has unfinished tasks. Note these
|
|
156
|
+
* options are also reused by runtime ALTER ... DELETE mutations (session
|
|
157
|
+
* erasure / pin materialization); timeout-as-success is acceptable there
|
|
158
|
+
* too since a mutation is durable once enqueued. Requires ClickHouse >=
|
|
159
|
+
* 21.4 (older servers reject the setting as unknown).
|
|
160
|
+
*/
|
|
161
|
+
distributed_ddl_output_mode: "null_status_on_timeout",
|
|
162
|
+
/*
|
|
163
|
+
* Int64 settings are typed as strings by @clickhouse/client. Read at
|
|
164
|
+
* module load; env is static for the life of the process. The migration
|
|
165
|
+
* pool's socket-idle ceiling scales with this value (ClickhouseConfig.ts)
|
|
166
|
+
* so a raised wait isn't killed client-side.
|
|
167
|
+
*/
|
|
168
|
+
distributed_ddl_task_timeout: String(getDistributedDdlTaskTimeoutSeconds()),
|
|
140
169
|
},
|
|
141
170
|
};
|
|
142
171
|
|
|
@@ -146,10 +175,14 @@ export const MigrationExecuteOptions: ClickhouseExecuteOptions = {
|
|
|
146
175
|
* TelemetryFanInWriter can consume deterministic tokens without an import
|
|
147
176
|
* cycle. Re-exported here for existing callers.
|
|
148
177
|
*
|
|
149
|
-
*
|
|
150
|
-
* (
|
|
151
|
-
*
|
|
152
|
-
*
|
|
178
|
+
* The ack mode is independent of tokening: TELEMETRY_WAIT_FOR_ASYNC_INSERT
|
|
179
|
+
* (shouldWaitForAsyncInsert below) is applied to EVERY insertJsonRows call,
|
|
180
|
+
* with or without a dedup token. Whether a telemetry queue job's writes
|
|
181
|
+
* carry per-job tokens from this context is a separate policy decided in
|
|
182
|
+
* the worker: the high-volume signals (traces/logs/metrics) run untokened
|
|
183
|
+
* so the fan-in writer can merge them into cross-job INSERTs under minted
|
|
184
|
+
* per-batch tokens — see shouldUseInsertDedup in
|
|
185
|
+
* App/FeatureSet/Telemetry/Jobs/TelemetryIngest/ProcessTelemetry.ts.
|
|
153
186
|
*/
|
|
154
187
|
export {
|
|
155
188
|
runWithInsertDedup,
|
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
import DatabaseService from "./DatabaseService";
|
|
2
|
+
import Model from "../../Models/DatabaseModels/DataSource";
|
|
3
|
+
import CreateBy from "../Types/Database/CreateBy";
|
|
4
|
+
import UpdateBy from "../Types/Database/UpdateBy";
|
|
5
|
+
import { OnCreate, OnUpdate } from "../Types/Database/Hooks";
|
|
6
|
+
import BadDataException from "../../Types/Exception/BadDataException";
|
|
7
|
+
import ObjectID from "../../Types/ObjectID";
|
|
8
|
+
import DataSourceType, {
|
|
9
|
+
DataSourceTypeUtil,
|
|
10
|
+
} from "../../Types/DataSource/DataSourceType";
|
|
11
|
+
import { DataSourceConnectionSettings } from "../Utils/DataSource/Types";
|
|
12
|
+
import Dictionary from "../../Types/Dictionary";
|
|
13
|
+
import { JSONObject } from "../../Types/JSON";
|
|
14
|
+
import CaptureSpan from "../Utils/Telemetry/CaptureSpan";
|
|
15
|
+
|
|
16
|
+
export class Service extends DatabaseService<Model> {
|
|
17
|
+
public constructor() {
|
|
18
|
+
super(Model);
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
/*
|
|
22
|
+
* Per-type shape validation so a broken data source fails at save time
|
|
23
|
+
* with a clear message, not at first query with a connector error.
|
|
24
|
+
*/
|
|
25
|
+
private validateDataSourceShape(data: {
|
|
26
|
+
dataSourceType?: DataSourceType | undefined;
|
|
27
|
+
url?: string | undefined;
|
|
28
|
+
databaseHost?: string | undefined;
|
|
29
|
+
}): void {
|
|
30
|
+
const dataSourceType: DataSourceType | undefined = data.dataSourceType;
|
|
31
|
+
|
|
32
|
+
if (!dataSourceType) {
|
|
33
|
+
return; // updates that don't touch the type/host/url skip validation.
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
if (!DataSourceTypeUtil.getAllDataSourceTypes().includes(dataSourceType)) {
|
|
37
|
+
throw new BadDataException(`Unknown data source type: ${dataSourceType}`);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
if (DataSourceTypeUtil.isHttpBasedType(dataSourceType) && !data.url) {
|
|
41
|
+
throw new BadDataException(
|
|
42
|
+
`${dataSourceType} data sources require a URL.`,
|
|
43
|
+
);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
if (
|
|
47
|
+
DataSourceTypeUtil.isDatabaseType(dataSourceType) &&
|
|
48
|
+
!data.databaseHost
|
|
49
|
+
) {
|
|
50
|
+
throw new BadDataException(
|
|
51
|
+
`${dataSourceType} data sources require a database host.`,
|
|
52
|
+
);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
protected override async onBeforeCreate(
|
|
57
|
+
createBy: CreateBy<Model>,
|
|
58
|
+
): Promise<OnCreate<Model>> {
|
|
59
|
+
this.validateDataSourceShape({
|
|
60
|
+
dataSourceType: createBy.data.dataSourceType,
|
|
61
|
+
url: createBy.data.url,
|
|
62
|
+
databaseHost: createBy.data.databaseHost,
|
|
63
|
+
});
|
|
64
|
+
|
|
65
|
+
return { createBy, carryForward: null };
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
protected override async onBeforeUpdate(
|
|
69
|
+
updateBy: UpdateBy<Model>,
|
|
70
|
+
): Promise<OnUpdate<Model>> {
|
|
71
|
+
/*
|
|
72
|
+
* Only validate when the update touches the fields that participate in
|
|
73
|
+
* shape validation. Changing the TYPE of an existing source without
|
|
74
|
+
* also sending url/host can produce a source that fails validation on
|
|
75
|
+
* its own merits — so when dataSourceType changes, re-validate against
|
|
76
|
+
* the stored row's values merged with the update.
|
|
77
|
+
*/
|
|
78
|
+
const data: {
|
|
79
|
+
dataSourceType?: DataSourceType | undefined;
|
|
80
|
+
url?: string | undefined;
|
|
81
|
+
databaseHost?: string | undefined;
|
|
82
|
+
} = updateBy.data as unknown as {
|
|
83
|
+
dataSourceType?: DataSourceType | undefined;
|
|
84
|
+
url?: string | undefined;
|
|
85
|
+
databaseHost?: string | undefined;
|
|
86
|
+
};
|
|
87
|
+
|
|
88
|
+
/*
|
|
89
|
+
* Presence check, not truthiness — an update that CLEARS url or
|
|
90
|
+
* databaseHost (null / empty string) must still be validated, or an
|
|
91
|
+
* HTTP source could be stripped of its URL and break at query time.
|
|
92
|
+
*/
|
|
93
|
+
const updateData: Record<string, unknown> = updateBy.data as Record<
|
|
94
|
+
string,
|
|
95
|
+
unknown
|
|
96
|
+
>;
|
|
97
|
+
const touchesShape: boolean =
|
|
98
|
+
"dataSourceType" in updateData ||
|
|
99
|
+
"url" in updateData ||
|
|
100
|
+
"databaseHost" in updateData;
|
|
101
|
+
|
|
102
|
+
if (touchesShape) {
|
|
103
|
+
const existing: Model | null = await this.findOneBy({
|
|
104
|
+
query: updateBy.query,
|
|
105
|
+
select: {
|
|
106
|
+
_id: true,
|
|
107
|
+
dataSourceType: true,
|
|
108
|
+
url: true,
|
|
109
|
+
databaseHost: true,
|
|
110
|
+
},
|
|
111
|
+
props: { isRoot: true },
|
|
112
|
+
});
|
|
113
|
+
|
|
114
|
+
/*
|
|
115
|
+
* A field present in the update wins even when cleared (null/"" →
|
|
116
|
+
* undefined, which validation treats as missing); an absent field
|
|
117
|
+
* falls back to the stored row.
|
|
118
|
+
*/
|
|
119
|
+
this.validateDataSourceShape({
|
|
120
|
+
dataSourceType: data.dataSourceType || existing?.dataSourceType,
|
|
121
|
+
url: "url" in updateData ? data.url || undefined : existing?.url,
|
|
122
|
+
databaseHost:
|
|
123
|
+
"databaseHost" in updateData
|
|
124
|
+
? data.databaseHost || undefined
|
|
125
|
+
: existing?.databaseHost,
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
return { updateBy, carryForward: null };
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
/*
|
|
133
|
+
* Decrypted connection settings for the server-side connector paths
|
|
134
|
+
* (/test and /query). ROOT read — the caller MUST have already performed
|
|
135
|
+
* a user-scoped access check on this id (the LlmProviderAPI two-phase
|
|
136
|
+
* pattern). The returned object holds plaintext secrets: never serialize
|
|
137
|
+
* it into a response or a log line.
|
|
138
|
+
*/
|
|
139
|
+
@CaptureSpan()
|
|
140
|
+
public async getConnectionSettingsById(
|
|
141
|
+
dataSourceId: ObjectID,
|
|
142
|
+
): Promise<DataSourceConnectionSettings | null> {
|
|
143
|
+
if (!ObjectID.isValidUUID(dataSourceId.toString())) {
|
|
144
|
+
/*
|
|
145
|
+
* A non-uuid string in a uuid column is a Postgres cast error, not
|
|
146
|
+
* an empty result — shape-check before querying.
|
|
147
|
+
*/
|
|
148
|
+
return null;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
const dataSource: Model | null = await this.findOneById({
|
|
152
|
+
id: dataSourceId,
|
|
153
|
+
select: {
|
|
154
|
+
_id: true,
|
|
155
|
+
projectId: true,
|
|
156
|
+
dataSourceType: true,
|
|
157
|
+
url: true,
|
|
158
|
+
databaseHost: true,
|
|
159
|
+
databasePort: true,
|
|
160
|
+
databaseName: true,
|
|
161
|
+
username: true,
|
|
162
|
+
password: true,
|
|
163
|
+
apiToken: true,
|
|
164
|
+
customHeaders: true,
|
|
165
|
+
additionalOptions: true,
|
|
166
|
+
},
|
|
167
|
+
props: { isRoot: true },
|
|
168
|
+
});
|
|
169
|
+
|
|
170
|
+
if (!dataSource || !dataSource.dataSourceType) {
|
|
171
|
+
return null;
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
let customHeaders: Dictionary<string> | undefined = undefined;
|
|
175
|
+
if (dataSource.customHeaders) {
|
|
176
|
+
customHeaders = {};
|
|
177
|
+
const headers: JSONObject = dataSource.customHeaders;
|
|
178
|
+
for (const key of Object.keys(headers)) {
|
|
179
|
+
if (headers[key] !== null && headers[key] !== undefined) {
|
|
180
|
+
customHeaders[key] = headers[key]!.toString();
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
return {
|
|
186
|
+
dataSourceType: dataSource.dataSourceType,
|
|
187
|
+
url: dataSource.url,
|
|
188
|
+
databaseHost: dataSource.databaseHost,
|
|
189
|
+
databasePort: dataSource.databasePort,
|
|
190
|
+
databaseName: dataSource.databaseName,
|
|
191
|
+
username: dataSource.username,
|
|
192
|
+
password: dataSource.password,
|
|
193
|
+
apiToken: dataSource.apiToken,
|
|
194
|
+
customHeaders: customHeaders,
|
|
195
|
+
additionalOptions: dataSource.additionalOptions,
|
|
196
|
+
};
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
export default new Service();
|
|
@@ -334,7 +334,8 @@ class DatabaseService<TBaseModel extends BaseModel> extends BaseService {
|
|
|
334
334
|
* generated — session refresh tokens and the like. They keep the fast
|
|
335
335
|
* SHA-256 hash, which is the right tool for them: there is nothing to guess,
|
|
336
336
|
* and they have to stay searchable by hash because that is how they are
|
|
337
|
-
* looked up.
|
|
337
|
+
* looked up. Every human-chosen credential, including dashboard and status
|
|
338
|
+
* page master passwords, declares a salt column and takes the scrypt path.
|
|
338
339
|
*
|
|
339
340
|
* The salt is written onto the SAME payload as the hash, so the pair can
|
|
340
341
|
* never be persisted out of step with each other.
|
|
@@ -468,6 +469,10 @@ class DatabaseService<TBaseModel extends BaseModel> extends BaseService {
|
|
|
468
469
|
}),
|
|
469
470
|
[saltColumnName]: newSalt,
|
|
470
471
|
} as unknown as PartialEntity<TBaseModel>,
|
|
472
|
+
expectedData: {
|
|
473
|
+
[data.columnName]: storedHash,
|
|
474
|
+
[saltColumnName]: salt,
|
|
475
|
+
} as unknown as PartialEntity<TBaseModel>,
|
|
471
476
|
skipUpdateDateColumn: true,
|
|
472
477
|
});
|
|
473
478
|
} catch (err) {
|
|
@@ -2502,6 +2507,14 @@ class DatabaseService<TBaseModel extends BaseModel> extends BaseService {
|
|
|
2502
2507
|
public async updateColumnsByIdWithoutHooks(input: {
|
|
2503
2508
|
id: ObjectID;
|
|
2504
2509
|
data: PartialEntity<TBaseModel>;
|
|
2510
|
+
/*
|
|
2511
|
+
* Optional compare-and-set guard. Every supplied property is added to
|
|
2512
|
+
* the WHERE clause with null-safe equality, so the update is skipped if
|
|
2513
|
+
* another writer changed the row after the caller read it. Password-hash
|
|
2514
|
+
* upgrades use this to avoid overwriting a concurrently changed
|
|
2515
|
+
* credential with a re-hash of the old password.
|
|
2516
|
+
*/
|
|
2517
|
+
expectedData?: PartialEntity<TBaseModel>;
|
|
2505
2518
|
/*
|
|
2506
2519
|
* Leave `updatedAt` untouched. For passive bookkeeping writes (liveness
|
|
2507
2520
|
* timestamps, ingest health markers) where consumers key change
|
|
@@ -2576,9 +2589,37 @@ class DatabaseService<TBaseModel extends BaseModel> extends BaseService {
|
|
|
2576
2589
|
metadata.primaryColumns[0]?.databaseName || "_id";
|
|
2577
2590
|
params.push(input.id.toString());
|
|
2578
2591
|
|
|
2592
|
+
const whereClauses: Array<string> = [
|
|
2593
|
+
`"${primaryColumnName}" = $${params.length}`,
|
|
2594
|
+
];
|
|
2595
|
+
|
|
2596
|
+
for (const [propertyName, value] of Object.entries(
|
|
2597
|
+
(input.expectedData || {}) as ObjectLiteral,
|
|
2598
|
+
)) {
|
|
2599
|
+
const column: ColumnMetadata | undefined =
|
|
2600
|
+
metadata.findColumnWithPropertyName(propertyName);
|
|
2601
|
+
|
|
2602
|
+
if (!column) {
|
|
2603
|
+
throw new BadDataException(
|
|
2604
|
+
`updateColumnsByIdWithoutHooks: unknown expected column "${propertyName}" on "${metadata.tableName}"`,
|
|
2605
|
+
);
|
|
2606
|
+
}
|
|
2607
|
+
|
|
2608
|
+
if (typeof value === "function") {
|
|
2609
|
+
throw new BadDataException(
|
|
2610
|
+
`updateColumnsByIdWithoutHooks: SQL-expression expected values are not supported (column "${propertyName}"); pass a literal value.`,
|
|
2611
|
+
);
|
|
2612
|
+
}
|
|
2613
|
+
|
|
2614
|
+
params.push(driver.preparePersistentValue(value, column));
|
|
2615
|
+
whereClauses.push(
|
|
2616
|
+
`"${column.databaseName}" IS NOT DISTINCT FROM $${params.length}`,
|
|
2617
|
+
);
|
|
2618
|
+
}
|
|
2619
|
+
|
|
2579
2620
|
const sql: string = `UPDATE "${metadata.tableName}" SET ${setClauses.join(
|
|
2580
2621
|
", ",
|
|
2581
|
-
)} WHERE
|
|
2622
|
+
)} WHERE ${whereClauses.join(" AND ")}`;
|
|
2582
2623
|
|
|
2583
2624
|
await repository.manager.query(sql, params);
|
|
2584
2625
|
}
|
|
@@ -11,6 +11,7 @@ import QueryHelper from "../Types/Database/QueryHelper";
|
|
|
11
11
|
import OneUptimeDate from "../../Types/Date";
|
|
12
12
|
import LIMIT_MAX from "../../Types/Database/LimitMax";
|
|
13
13
|
import GlobalCache from "../Infrastructure/GlobalCache";
|
|
14
|
+
import InProcessMemo from "../Utils/InProcessMemo";
|
|
14
15
|
import logger, { LogAttributes } from "../Utils/Logger";
|
|
15
16
|
import { canonicalizeEntityValue } from "../../Utils/Telemetry/EntityKey";
|
|
16
17
|
import crypto from "crypto";
|
|
@@ -21,6 +22,46 @@ const LAST_SEEN_THROTTLE_SECONDS: number = 60;
|
|
|
21
22
|
const LABELS_APPLIED_CACHE_NAMESPACE: string = "host-labels-applied";
|
|
22
23
|
const LABELS_APPLIED_CACHE_TTL_SECONDS: number = 60;
|
|
23
24
|
|
|
25
|
+
/*
|
|
26
|
+
* What `findOrCreateByHostIdentifier` memoizes: the resolved row's id plus
|
|
27
|
+
* the identifier it converged to. A flat shape rather than the Model itself
|
|
28
|
+
* so a memo hit hands every caller a FRESH Model instance — the resolving
|
|
29
|
+
* call and a memoed call must not share one mutable entity object.
|
|
30
|
+
*/
|
|
31
|
+
interface HostResolution {
|
|
32
|
+
hostIdStr: string;
|
|
33
|
+
hostIdentifier: string;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/*
|
|
37
|
+
* Per-process memo for `(projectId, canonical hostIdentifier) -> Host`.
|
|
38
|
+
*
|
|
39
|
+
* `findOrCreateByHostIdentifier` ran an unconditional Postgres SELECT per
|
|
40
|
+
* call, and the metrics ingest path calls it once per unique host per job
|
|
41
|
+
* (the host-enrichment aggregation loop) on top of `autoDiscoverHost`'s
|
|
42
|
+
* Redis-cache misses — for a fleet of workers chewing hostmetrics batches
|
|
43
|
+
* that is a steady stream of identical case-insensitive lookups for rows
|
|
44
|
+
* that change never. Same L1 shape as the service-resolution memo in
|
|
45
|
+
* OpenTelemetryIngestService: 60-second TTL, bounded because host
|
|
46
|
+
* identifiers arrive from collector-controlled resource attributes.
|
|
47
|
+
*
|
|
48
|
+
* ONLY positive resolutions (the host exists / was just created) are
|
|
49
|
+
* memoized, and only on success. There is deliberately no negative
|
|
50
|
+
* caching: the miss path must keep falling through to the create, so a
|
|
51
|
+
* create that loses a concurrent race still throws its unique-violation
|
|
52
|
+
* into the existing catch-and-refetch handling unchanged. Staleness is a
|
|
53
|
+
* non-issue for the id itself (ids are immutable); a deleted host keeps
|
|
54
|
+
* resolving for up to the TTL, which the 24-hour host-id Redis cache in
|
|
55
|
+
* OtelIngestBaseService already dwarfs.
|
|
56
|
+
*/
|
|
57
|
+
const HOST_RESOLUTION_MEMO_TTL_IN_MS: number = 60 * 1000;
|
|
58
|
+
const HOST_RESOLUTION_MEMO_MAX_ENTRIES: number = 10_000;
|
|
59
|
+
const hostResolutionInProcessMemo: InProcessMemo<HostResolution> =
|
|
60
|
+
new InProcessMemo<HostResolution>({
|
|
61
|
+
ttlInMs: HOST_RESOLUTION_MEMO_TTL_IN_MS,
|
|
62
|
+
maxEntries: HOST_RESOLUTION_MEMO_MAX_ENTRIES,
|
|
63
|
+
});
|
|
64
|
+
|
|
24
65
|
export class Service extends DatabaseService<Model> {
|
|
25
66
|
public constructor() {
|
|
26
67
|
super(Model);
|
|
@@ -75,6 +116,24 @@ export class Service extends DatabaseService<Model> {
|
|
|
75
116
|
*/
|
|
76
117
|
const hostIdentifier: string = canonicalizeEntityValue(data.hostIdentifier);
|
|
77
118
|
|
|
119
|
+
/*
|
|
120
|
+
* L1: in-process memo. The canonical identifier is the memo key, so
|
|
121
|
+
* every casing of one host collapses onto the entry the previous batch
|
|
122
|
+
* wrote — the same folding the SQL predicate below performs. A hit
|
|
123
|
+
* skips the SELECT (and the already-converged identifier write) that
|
|
124
|
+
* the resolving call performed within the last minute.
|
|
125
|
+
*/
|
|
126
|
+
const memoKey: string = `${data.projectId.toString()}:${hostIdentifier}`;
|
|
127
|
+
const memoedResolution: HostResolution | undefined =
|
|
128
|
+
hostResolutionInProcessMemo.get(memoKey);
|
|
129
|
+
if (memoedResolution) {
|
|
130
|
+
const memoedHost: Model = new Model();
|
|
131
|
+
memoedHost._id = memoedResolution.hostIdStr;
|
|
132
|
+
memoedHost.projectId = data.projectId;
|
|
133
|
+
memoedHost.hostIdentifier = memoedResolution.hostIdentifier;
|
|
134
|
+
return memoedHost;
|
|
135
|
+
}
|
|
136
|
+
|
|
78
137
|
/*
|
|
79
138
|
* Look up case-insensitively. The unique guard on name/hostIdentifier
|
|
80
139
|
* (DatabaseService.checkUniqueColumnBy -> QueryHelper.findWithSameText)
|
|
@@ -131,6 +190,18 @@ export class Service extends DatabaseService<Model> {
|
|
|
131
190
|
}
|
|
132
191
|
}
|
|
133
192
|
|
|
193
|
+
/*
|
|
194
|
+
* Memoize the identifier the row ACTUALLY holds (post-convergence,
|
|
195
|
+
* or the legacy casing when the best-effort update failed) so a memo
|
|
196
|
+
* hit returns exactly what a repeated lookup would have.
|
|
197
|
+
*/
|
|
198
|
+
if (existingHost._id) {
|
|
199
|
+
hostResolutionInProcessMemo.set(memoKey, {
|
|
200
|
+
hostIdStr: existingHost._id.toString(),
|
|
201
|
+
hostIdentifier: existingHost.hostIdentifier || hostIdentifier,
|
|
202
|
+
});
|
|
203
|
+
}
|
|
204
|
+
|
|
134
205
|
return existingHost;
|
|
135
206
|
}
|
|
136
207
|
|
|
@@ -149,6 +220,13 @@ export class Service extends DatabaseService<Model> {
|
|
|
149
220
|
},
|
|
150
221
|
});
|
|
151
222
|
|
|
223
|
+
if (createdHost._id) {
|
|
224
|
+
hostResolutionInProcessMemo.set(memoKey, {
|
|
225
|
+
hostIdStr: createdHost._id.toString(),
|
|
226
|
+
hostIdentifier: hostIdentifier,
|
|
227
|
+
});
|
|
228
|
+
}
|
|
229
|
+
|
|
152
230
|
return createdHost;
|
|
153
231
|
} catch {
|
|
154
232
|
/*
|
|
@@ -173,6 +251,20 @@ export class Service extends DatabaseService<Model> {
|
|
|
173
251
|
});
|
|
174
252
|
|
|
175
253
|
if (reFetchedHost) {
|
|
254
|
+
/*
|
|
255
|
+
* The refetch after a lost create race emits the same SELECT as
|
|
256
|
+
* the cold lookup, and a first-contact stampede on a brand-new
|
|
257
|
+
* host is exactly when this branch runs hot — memoize it like the
|
|
258
|
+
* other two resolution paths (mirrors the service-resolution
|
|
259
|
+
* cache's create-race handling).
|
|
260
|
+
*/
|
|
261
|
+
if (reFetchedHost._id) {
|
|
262
|
+
hostResolutionInProcessMemo.set(memoKey, {
|
|
263
|
+
hostIdStr: reFetchedHost._id.toString(),
|
|
264
|
+
hostIdentifier: reFetchedHost.hostIdentifier || hostIdentifier,
|
|
265
|
+
});
|
|
266
|
+
}
|
|
267
|
+
|
|
176
268
|
return reFetchedHost;
|
|
177
269
|
}
|
|
178
270
|
|
|
@@ -84,6 +84,7 @@ export class Service extends DatabaseService<IncidentFeed> {
|
|
|
84
84
|
displayColor?: Color | undefined;
|
|
85
85
|
userId?: ObjectID | undefined;
|
|
86
86
|
postedAt?: Date | undefined;
|
|
87
|
+
aiRunId?: ObjectID | undefined;
|
|
87
88
|
// send notifificatin to slack and teams. This is optional
|
|
88
89
|
workspaceNotification?:
|
|
89
90
|
| {
|
|
@@ -131,6 +132,10 @@ export class Service extends DatabaseService<IncidentFeed> {
|
|
|
131
132
|
incidentFeed.incidentFeedEventType = data.incidentFeedEventType;
|
|
132
133
|
incidentFeed.projectId = data.projectId;
|
|
133
134
|
|
|
135
|
+
if (data.aiRunId) {
|
|
136
|
+
incidentFeed.aiRunId = data.aiRunId;
|
|
137
|
+
}
|
|
138
|
+
|
|
134
139
|
if (!data.postedAt) {
|
|
135
140
|
incidentFeed.postedAt = OneUptimeDate.getCurrentDate();
|
|
136
141
|
}
|