@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
|
@@ -15,15 +15,15 @@ import Response from "../Utils/Response";
|
|
|
15
15
|
import BaseAPI from "./BaseAPI";
|
|
16
16
|
import BadDataException from "../../Types/Exception/BadDataException";
|
|
17
17
|
import NotFoundException from "../../Types/Exception/NotFoundException";
|
|
18
|
-
import HashedString from "../../Types/HashedString";
|
|
19
18
|
import ObjectID from "../../Types/ObjectID";
|
|
20
19
|
import Dashboard from "../../Models/DatabaseModels/Dashboard";
|
|
21
20
|
import DashboardDomain from "../../Models/DatabaseModels/DashboardDomain";
|
|
22
|
-
import { EncryptionSecret } from "../EnvironmentConfig";
|
|
23
21
|
import { DASHBOARD_MASTER_PASSWORD_INVALID_MESSAGE } from "../../Types/Dashboard/MasterPassword";
|
|
24
22
|
import NotAuthenticatedException from "../../Types/Exception/NotAuthenticatedException";
|
|
25
23
|
import ForbiddenException from "../../Types/Exception/ForbiddenException";
|
|
26
24
|
import JSONFunctions from "../../Types/JSONFunctions";
|
|
25
|
+
import DashboardViewConfig from "../../Types/Dashboard/DashboardViewConfig";
|
|
26
|
+
import PublicDashboardViewConfig from "../Utils/Dashboard/PublicDashboardViewConfig";
|
|
27
27
|
import TelemetryAttributeService from "../Services/TelemetryAttributeService";
|
|
28
28
|
import TelemetryType from "../../Types/Telemetry/TelemetryType";
|
|
29
29
|
import { JSONObject } from "../../Types/JSON";
|
|
@@ -70,26 +70,24 @@ import SpanService from "../Services/SpanService";
|
|
|
70
70
|
import LogService from "../Services/LogService";
|
|
71
71
|
import DashboardComponentType from "../../Types/Dashboard/DashboardComponentType";
|
|
72
72
|
import { DashboardVariableType } from "../../Types/Dashboard/DashboardVariable";
|
|
73
|
-
import
|
|
73
|
+
import PublicDashboardResourceListPolicy, {
|
|
74
|
+
PublicDashboardResourceListPolicyResult,
|
|
75
|
+
} from "../Utils/Dashboard/PublicDashboardResourceListPolicy";
|
|
76
|
+
import { applyIncidentSelfPrivacyFilter } from "../Utils/Incident/IncidentPrivacyFilter";
|
|
77
|
+
import { applyAlertSelfPrivacyFilter } from "../Utils/Alert/AlertPrivacyFilter";
|
|
74
78
|
|
|
75
79
|
/*
|
|
76
80
|
* Registry of the non-metric widgets a public dashboard may render.
|
|
77
81
|
*
|
|
78
|
-
* Nothing on this endpoint is taken from the client except a narrow set of
|
|
79
|
-
* filter values:
|
|
80
|
-
*
|
|
81
|
-
* - `select` is the FIXED set of columns the corresponding widget displays,
|
|
82
|
-
* so an anonymous viewer can only ever read these columns.
|
|
83
82
|
* - `widgets` lists the dashboard widgets that render this resource, mapped
|
|
84
83
|
* to the `kind` each one shows (null when the model is not partitioned by
|
|
85
84
|
* kind). The dashboard must actually contain one of these widgets before
|
|
86
85
|
* the endpoint will serve the resource at all, and the query is pinned to
|
|
87
86
|
* the kinds those widgets render. Adding a widget to a public dashboard is
|
|
88
87
|
* therefore the owner's explicit — and only — opt-in to exposing this data.
|
|
89
|
-
*
|
|
90
|
-
*
|
|
91
|
-
*
|
|
92
|
-
* widget never exposes.
|
|
88
|
+
* Query, select, sort and pagination policy are rebuilt from the exact stored
|
|
89
|
+
* widget by PublicDashboardResourceListPolicy. Client copies of those fields
|
|
90
|
+
* are never authoritative on this unauthenticated route.
|
|
93
91
|
*/
|
|
94
92
|
interface PublicDashboardResourceConfig {
|
|
95
93
|
modelType: { new (): BaseModel | AnalyticsDataModel };
|
|
@@ -97,12 +95,8 @@ interface PublicDashboardResourceConfig {
|
|
|
97
95
|
findBy: (findBy: any) => Promise<Array<BaseModel | AnalyticsDataModel>>;
|
|
98
96
|
};
|
|
99
97
|
widgets: Partial<Record<DashboardComponentType, string | null>>;
|
|
100
|
-
allowedQueryKeys: Array<string>;
|
|
101
|
-
select: JSONObject;
|
|
102
98
|
}
|
|
103
99
|
|
|
104
|
-
const DEFAULT_DASHBOARD_RESOURCE_LIMIT: number = 100;
|
|
105
|
-
|
|
106
100
|
const PUBLIC_DASHBOARD_RESOURCES: Record<
|
|
107
101
|
string,
|
|
108
102
|
PublicDashboardResourceConfig
|
|
@@ -113,20 +107,6 @@ const PUBLIC_DASHBOARD_RESOURCES: Record<
|
|
|
113
107
|
widgets: {
|
|
114
108
|
[DashboardComponentType.IncidentList]: null,
|
|
115
109
|
},
|
|
116
|
-
allowedQueryKeys: [
|
|
117
|
-
"currentIncidentState",
|
|
118
|
-
"currentIncidentStateId",
|
|
119
|
-
"incidentSeverityId",
|
|
120
|
-
"monitors",
|
|
121
|
-
"labels",
|
|
122
|
-
],
|
|
123
|
-
select: {
|
|
124
|
-
_id: true,
|
|
125
|
-
title: true,
|
|
126
|
-
createdAt: true,
|
|
127
|
-
currentIncidentState: { name: true, color: true },
|
|
128
|
-
incidentSeverity: { name: true, color: true },
|
|
129
|
-
},
|
|
130
110
|
},
|
|
131
111
|
alert: {
|
|
132
112
|
modelType: Alert,
|
|
@@ -134,20 +114,6 @@ const PUBLIC_DASHBOARD_RESOURCES: Record<
|
|
|
134
114
|
widgets: {
|
|
135
115
|
[DashboardComponentType.AlertList]: null,
|
|
136
116
|
},
|
|
137
|
-
allowedQueryKeys: [
|
|
138
|
-
"currentAlertState",
|
|
139
|
-
"currentAlertStateId",
|
|
140
|
-
"alertSeverityId",
|
|
141
|
-
"monitorId",
|
|
142
|
-
"labels",
|
|
143
|
-
],
|
|
144
|
-
select: {
|
|
145
|
-
_id: true,
|
|
146
|
-
title: true,
|
|
147
|
-
createdAt: true,
|
|
148
|
-
currentAlertState: { name: true, color: true },
|
|
149
|
-
alertSeverity: { name: true, color: true },
|
|
150
|
-
},
|
|
151
117
|
},
|
|
152
118
|
monitor: {
|
|
153
119
|
modelType: Monitor,
|
|
@@ -155,18 +121,6 @@ const PUBLIC_DASHBOARD_RESOURCES: Record<
|
|
|
155
121
|
widgets: {
|
|
156
122
|
[DashboardComponentType.MonitorList]: null,
|
|
157
123
|
},
|
|
158
|
-
allowedQueryKeys: [
|
|
159
|
-
"currentMonitorStatus",
|
|
160
|
-
"currentMonitorStatusId",
|
|
161
|
-
"monitorType",
|
|
162
|
-
"labels",
|
|
163
|
-
],
|
|
164
|
-
select: {
|
|
165
|
-
_id: true,
|
|
166
|
-
name: true,
|
|
167
|
-
monitorType: true,
|
|
168
|
-
currentMonitorStatus: { name: true, color: true },
|
|
169
|
-
},
|
|
170
124
|
},
|
|
171
125
|
"network-site": {
|
|
172
126
|
modelType: NetworkSite,
|
|
@@ -174,36 +128,6 @@ const PUBLIC_DASHBOARD_RESOURCES: Record<
|
|
|
174
128
|
widgets: {
|
|
175
129
|
[DashboardComponentType.NetworkMap]: null,
|
|
176
130
|
},
|
|
177
|
-
/*
|
|
178
|
-
* The map filters by site type and by whether the rolled-up status is
|
|
179
|
-
* operational — nothing else. Notably NOT `parentSiteId` or
|
|
180
|
-
* `materializedPath`: the widget draws a flat set of pins rather than
|
|
181
|
-
* walking a hierarchy, so exposing the tree shape here would hand an
|
|
182
|
-
* anonymous viewer a structure the map never shows them.
|
|
183
|
-
*/
|
|
184
|
-
allowedQueryKeys: [
|
|
185
|
-
"networkSiteTypeId",
|
|
186
|
-
"currentMonitorStatus",
|
|
187
|
-
"currentMonitorStatusId",
|
|
188
|
-
],
|
|
189
|
-
select: {
|
|
190
|
-
_id: true,
|
|
191
|
-
name: true,
|
|
192
|
-
/*
|
|
193
|
-
* The type NAME comes from the networkSiteType relation. NetworkSite
|
|
194
|
-
* .siteType is the deprecated pre-lookup-table string and is dropped
|
|
195
|
-
* in a follow-up PR, so it must not be read from new code.
|
|
196
|
-
*/
|
|
197
|
-
networkSiteType: { name: true },
|
|
198
|
-
latitude: true,
|
|
199
|
-
longitude: true,
|
|
200
|
-
currentMonitorStatus: {
|
|
201
|
-
name: true,
|
|
202
|
-
color: true,
|
|
203
|
-
priority: true,
|
|
204
|
-
isOperationalState: true,
|
|
205
|
-
},
|
|
206
|
-
},
|
|
207
131
|
},
|
|
208
132
|
host: {
|
|
209
133
|
modelType: Host,
|
|
@@ -211,23 +135,6 @@ const PUBLIC_DASHBOARD_RESOURCES: Record<
|
|
|
211
135
|
widgets: {
|
|
212
136
|
[DashboardComponentType.HostList]: null,
|
|
213
137
|
},
|
|
214
|
-
allowedQueryKeys: [
|
|
215
|
-
"name",
|
|
216
|
-
"hostIdentifier",
|
|
217
|
-
"otelCollectorStatus",
|
|
218
|
-
"osType",
|
|
219
|
-
],
|
|
220
|
-
select: {
|
|
221
|
-
_id: true,
|
|
222
|
-
name: true,
|
|
223
|
-
hostIdentifier: true,
|
|
224
|
-
otelCollectorStatus: true,
|
|
225
|
-
osType: true,
|
|
226
|
-
osVersion: true,
|
|
227
|
-
cpuCores: true,
|
|
228
|
-
totalMemoryBytes: true,
|
|
229
|
-
lastSeenAt: true,
|
|
230
|
-
},
|
|
231
138
|
},
|
|
232
139
|
"kubernetes-resource": {
|
|
233
140
|
modelType: KubernetesResource,
|
|
@@ -242,33 +149,6 @@ const PUBLIC_DASHBOARD_RESOURCES: Record<
|
|
|
242
149
|
[DashboardComponentType.KubernetesJobList]: "Job",
|
|
243
150
|
[DashboardComponentType.KubernetesCronJobList]: "CronJob",
|
|
244
151
|
},
|
|
245
|
-
allowedQueryKeys: [
|
|
246
|
-
"kubernetesClusterId",
|
|
247
|
-
"namespaceKey",
|
|
248
|
-
"name",
|
|
249
|
-
"phase",
|
|
250
|
-
"isReady",
|
|
251
|
-
],
|
|
252
|
-
select: {
|
|
253
|
-
_id: true,
|
|
254
|
-
name: true,
|
|
255
|
-
namespaceKey: true,
|
|
256
|
-
kind: true,
|
|
257
|
-
phase: true,
|
|
258
|
-
isReady: true,
|
|
259
|
-
hasMemoryPressure: true,
|
|
260
|
-
hasDiskPressure: true,
|
|
261
|
-
hasPidPressure: true,
|
|
262
|
-
containerCount: true,
|
|
263
|
-
latestCpuPercent: true,
|
|
264
|
-
latestMemoryBytes: true,
|
|
265
|
-
controllerDeploymentName: true,
|
|
266
|
-
controllerCronJobName: true,
|
|
267
|
-
resourceCreationTimestamp: true,
|
|
268
|
-
lastSeenAt: true,
|
|
269
|
-
kubernetesClusterId: true,
|
|
270
|
-
kubernetesCluster: { name: true },
|
|
271
|
-
},
|
|
272
152
|
},
|
|
273
153
|
"docker-host": {
|
|
274
154
|
modelType: DockerHost,
|
|
@@ -276,17 +156,6 @@ const PUBLIC_DASHBOARD_RESOURCES: Record<
|
|
|
276
156
|
widgets: {
|
|
277
157
|
[DashboardComponentType.DockerHostList]: null,
|
|
278
158
|
},
|
|
279
|
-
allowedQueryKeys: ["name", "otelCollectorStatus"],
|
|
280
|
-
select: {
|
|
281
|
-
_id: true,
|
|
282
|
-
name: true,
|
|
283
|
-
otelCollectorStatus: true,
|
|
284
|
-
containersRunning: true,
|
|
285
|
-
containersStopped: true,
|
|
286
|
-
containersPaused: true,
|
|
287
|
-
osType: true,
|
|
288
|
-
osVersion: true,
|
|
289
|
-
},
|
|
290
159
|
},
|
|
291
160
|
"docker-container": {
|
|
292
161
|
modelType: DockerResource,
|
|
@@ -294,17 +163,6 @@ const PUBLIC_DASHBOARD_RESOURCES: Record<
|
|
|
294
163
|
widgets: {
|
|
295
164
|
[DashboardComponentType.DockerContainerList]: "Container",
|
|
296
165
|
},
|
|
297
|
-
allowedQueryKeys: ["dockerHostId", "name", "imageName"],
|
|
298
|
-
select: {
|
|
299
|
-
_id: true,
|
|
300
|
-
name: true,
|
|
301
|
-
imageName: true,
|
|
302
|
-
state: true,
|
|
303
|
-
latestCpuPercent: true,
|
|
304
|
-
latestMemoryBytes: true,
|
|
305
|
-
dockerHostId: true,
|
|
306
|
-
dockerHost: { name: true },
|
|
307
|
-
},
|
|
308
166
|
},
|
|
309
167
|
"docker-image": {
|
|
310
168
|
modelType: DockerResource,
|
|
@@ -312,14 +170,6 @@ const PUBLIC_DASHBOARD_RESOURCES: Record<
|
|
|
312
170
|
widgets: {
|
|
313
171
|
[DashboardComponentType.DockerImageList]: "Image",
|
|
314
172
|
},
|
|
315
|
-
allowedQueryKeys: ["dockerHostId", "name"],
|
|
316
|
-
select: {
|
|
317
|
-
_id: true,
|
|
318
|
-
name: true,
|
|
319
|
-
containerId: true,
|
|
320
|
-
dockerHostId: true,
|
|
321
|
-
dockerHost: { name: true },
|
|
322
|
-
},
|
|
323
173
|
},
|
|
324
174
|
"docker-network": {
|
|
325
175
|
modelType: DockerResource,
|
|
@@ -327,14 +177,6 @@ const PUBLIC_DASHBOARD_RESOURCES: Record<
|
|
|
327
177
|
widgets: {
|
|
328
178
|
[DashboardComponentType.DockerNetworkList]: "Network",
|
|
329
179
|
},
|
|
330
|
-
allowedQueryKeys: ["dockerHostId"],
|
|
331
|
-
select: {
|
|
332
|
-
_id: true,
|
|
333
|
-
name: true,
|
|
334
|
-
state: true,
|
|
335
|
-
dockerHostId: true,
|
|
336
|
-
dockerHost: { name: true },
|
|
337
|
-
},
|
|
338
180
|
},
|
|
339
181
|
"docker-volume": {
|
|
340
182
|
modelType: DockerResource,
|
|
@@ -342,14 +184,6 @@ const PUBLIC_DASHBOARD_RESOURCES: Record<
|
|
|
342
184
|
widgets: {
|
|
343
185
|
[DashboardComponentType.DockerVolumeList]: "Volume",
|
|
344
186
|
},
|
|
345
|
-
allowedQueryKeys: ["dockerHostId"],
|
|
346
|
-
select: {
|
|
347
|
-
_id: true,
|
|
348
|
-
name: true,
|
|
349
|
-
state: true,
|
|
350
|
-
dockerHostId: true,
|
|
351
|
-
dockerHost: { name: true },
|
|
352
|
-
},
|
|
353
187
|
},
|
|
354
188
|
"podman-host": {
|
|
355
189
|
modelType: PodmanHost,
|
|
@@ -357,17 +191,6 @@ const PUBLIC_DASHBOARD_RESOURCES: Record<
|
|
|
357
191
|
widgets: {
|
|
358
192
|
[DashboardComponentType.PodmanHostList]: null,
|
|
359
193
|
},
|
|
360
|
-
allowedQueryKeys: ["name", "otelCollectorStatus"],
|
|
361
|
-
select: {
|
|
362
|
-
_id: true,
|
|
363
|
-
name: true,
|
|
364
|
-
otelCollectorStatus: true,
|
|
365
|
-
containersRunning: true,
|
|
366
|
-
containersStopped: true,
|
|
367
|
-
containersPaused: true,
|
|
368
|
-
osType: true,
|
|
369
|
-
osVersion: true,
|
|
370
|
-
},
|
|
371
194
|
},
|
|
372
195
|
"podman-container": {
|
|
373
196
|
modelType: PodmanResource,
|
|
@@ -375,17 +198,6 @@ const PUBLIC_DASHBOARD_RESOURCES: Record<
|
|
|
375
198
|
widgets: {
|
|
376
199
|
[DashboardComponentType.PodmanContainerList]: "Container",
|
|
377
200
|
},
|
|
378
|
-
allowedQueryKeys: ["podmanHostId", "name", "imageName"],
|
|
379
|
-
select: {
|
|
380
|
-
_id: true,
|
|
381
|
-
name: true,
|
|
382
|
-
imageName: true,
|
|
383
|
-
state: true,
|
|
384
|
-
latestCpuPercent: true,
|
|
385
|
-
latestMemoryBytes: true,
|
|
386
|
-
podmanHostId: true,
|
|
387
|
-
podmanHost: { name: true },
|
|
388
|
-
},
|
|
389
201
|
},
|
|
390
202
|
"podman-image": {
|
|
391
203
|
modelType: PodmanResource,
|
|
@@ -393,14 +205,6 @@ const PUBLIC_DASHBOARD_RESOURCES: Record<
|
|
|
393
205
|
widgets: {
|
|
394
206
|
[DashboardComponentType.PodmanImageList]: "Image",
|
|
395
207
|
},
|
|
396
|
-
allowedQueryKeys: ["podmanHostId", "name"],
|
|
397
|
-
select: {
|
|
398
|
-
_id: true,
|
|
399
|
-
name: true,
|
|
400
|
-
containerId: true,
|
|
401
|
-
podmanHostId: true,
|
|
402
|
-
podmanHost: { name: true },
|
|
403
|
-
},
|
|
404
208
|
},
|
|
405
209
|
"podman-network": {
|
|
406
210
|
modelType: PodmanResource,
|
|
@@ -408,14 +212,6 @@ const PUBLIC_DASHBOARD_RESOURCES: Record<
|
|
|
408
212
|
widgets: {
|
|
409
213
|
[DashboardComponentType.PodmanNetworkList]: "Network",
|
|
410
214
|
},
|
|
411
|
-
allowedQueryKeys: ["podmanHostId"],
|
|
412
|
-
select: {
|
|
413
|
-
_id: true,
|
|
414
|
-
name: true,
|
|
415
|
-
state: true,
|
|
416
|
-
podmanHostId: true,
|
|
417
|
-
podmanHost: { name: true },
|
|
418
|
-
},
|
|
419
215
|
},
|
|
420
216
|
"podman-volume": {
|
|
421
217
|
modelType: PodmanResource,
|
|
@@ -423,14 +219,6 @@ const PUBLIC_DASHBOARD_RESOURCES: Record<
|
|
|
423
219
|
widgets: {
|
|
424
220
|
[DashboardComponentType.PodmanVolumeList]: "Volume",
|
|
425
221
|
},
|
|
426
|
-
allowedQueryKeys: ["podmanHostId"],
|
|
427
|
-
select: {
|
|
428
|
-
_id: true,
|
|
429
|
-
name: true,
|
|
430
|
-
state: true,
|
|
431
|
-
podmanHostId: true,
|
|
432
|
-
podmanHost: { name: true },
|
|
433
|
-
},
|
|
434
222
|
},
|
|
435
223
|
"proxmox-resource": {
|
|
436
224
|
modelType: ProxmoxResource,
|
|
@@ -439,23 +227,6 @@ const PUBLIC_DASHBOARD_RESOURCES: Record<
|
|
|
439
227
|
[DashboardComponentType.ProxmoxNodeList]: "Node",
|
|
440
228
|
[DashboardComponentType.ProxmoxGuestList]: "Guest",
|
|
441
229
|
},
|
|
442
|
-
allowedQueryKeys: ["proxmoxClusterId", "guestType", "isUp", "name"],
|
|
443
|
-
select: {
|
|
444
|
-
_id: true,
|
|
445
|
-
name: true,
|
|
446
|
-
externalId: true,
|
|
447
|
-
kind: true,
|
|
448
|
-
vmid: true,
|
|
449
|
-
guestType: true,
|
|
450
|
-
parentNodeName: true,
|
|
451
|
-
isUp: true,
|
|
452
|
-
haState: true,
|
|
453
|
-
latestCpuPercent: true,
|
|
454
|
-
latestMemoryPercent: true,
|
|
455
|
-
lastSeenAt: true,
|
|
456
|
-
proxmoxClusterId: true,
|
|
457
|
-
proxmoxCluster: { name: true },
|
|
458
|
-
},
|
|
459
230
|
},
|
|
460
231
|
"ceph-resource": {
|
|
461
232
|
modelType: CephResource,
|
|
@@ -464,25 +235,6 @@ const PUBLIC_DASHBOARD_RESOURCES: Record<
|
|
|
464
235
|
[DashboardComponentType.CephOsdList]: "Osd",
|
|
465
236
|
[DashboardComponentType.CephPoolList]: "Pool",
|
|
466
237
|
},
|
|
467
|
-
allowedQueryKeys: ["cephClusterId", "isUp", "isIn", "externalId"],
|
|
468
|
-
select: {
|
|
469
|
-
_id: true,
|
|
470
|
-
name: true,
|
|
471
|
-
externalId: true,
|
|
472
|
-
kind: true,
|
|
473
|
-
hostname: true,
|
|
474
|
-
deviceClass: true,
|
|
475
|
-
isUp: true,
|
|
476
|
-
isIn: true,
|
|
477
|
-
statBytes: true,
|
|
478
|
-
statBytesUsed: true,
|
|
479
|
-
storedBytes: true,
|
|
480
|
-
maxAvailBytes: true,
|
|
481
|
-
objects: true,
|
|
482
|
-
lastSeenAt: true,
|
|
483
|
-
cephClusterId: true,
|
|
484
|
-
cephCluster: { name: true },
|
|
485
|
-
},
|
|
486
238
|
},
|
|
487
239
|
"docker-swarm-resource": {
|
|
488
240
|
modelType: DockerSwarmResource,
|
|
@@ -491,30 +243,6 @@ const PUBLIC_DASHBOARD_RESOURCES: Record<
|
|
|
491
243
|
[DashboardComponentType.DockerSwarmNodeList]: "Node",
|
|
492
244
|
[DashboardComponentType.DockerSwarmServiceList]: "Service",
|
|
493
245
|
},
|
|
494
|
-
allowedQueryKeys: [
|
|
495
|
-
"dockerSwarmClusterId",
|
|
496
|
-
"role",
|
|
497
|
-
"serviceMode",
|
|
498
|
-
"isReady",
|
|
499
|
-
],
|
|
500
|
-
select: {
|
|
501
|
-
_id: true,
|
|
502
|
-
name: true,
|
|
503
|
-
externalId: true,
|
|
504
|
-
kind: true,
|
|
505
|
-
role: true,
|
|
506
|
-
state: true,
|
|
507
|
-
serviceMode: true,
|
|
508
|
-
desiredReplicas: true,
|
|
509
|
-
runningReplicas: true,
|
|
510
|
-
image: true,
|
|
511
|
-
isReady: true,
|
|
512
|
-
latestCpuPercent: true,
|
|
513
|
-
latestMemoryPercent: true,
|
|
514
|
-
lastSeenAt: true,
|
|
515
|
-
dockerSwarmClusterId: true,
|
|
516
|
-
dockerSwarmCluster: { name: true },
|
|
517
|
-
},
|
|
518
246
|
},
|
|
519
247
|
span: {
|
|
520
248
|
modelType: Span,
|
|
@@ -522,17 +250,6 @@ const PUBLIC_DASHBOARD_RESOURCES: Record<
|
|
|
522
250
|
widgets: {
|
|
523
251
|
[DashboardComponentType.TraceList]: null,
|
|
524
252
|
},
|
|
525
|
-
allowedQueryKeys: ["startTime", "statusCode"],
|
|
526
|
-
select: {
|
|
527
|
-
startTime: true,
|
|
528
|
-
name: true,
|
|
529
|
-
statusCode: true,
|
|
530
|
-
durationUnixNano: true,
|
|
531
|
-
traceId: true,
|
|
532
|
-
spanId: true,
|
|
533
|
-
kind: true,
|
|
534
|
-
primaryEntityId: true,
|
|
535
|
-
},
|
|
536
253
|
},
|
|
537
254
|
log: {
|
|
538
255
|
modelType: Log,
|
|
@@ -540,16 +257,6 @@ const PUBLIC_DASHBOARD_RESOURCES: Record<
|
|
|
540
257
|
widgets: {
|
|
541
258
|
[DashboardComponentType.LogStream]: null,
|
|
542
259
|
},
|
|
543
|
-
allowedQueryKeys: ["time", "severityText", "body", "attributes"],
|
|
544
|
-
select: {
|
|
545
|
-
time: true,
|
|
546
|
-
severityText: true,
|
|
547
|
-
body: true,
|
|
548
|
-
primaryEntityId: true,
|
|
549
|
-
traceId: true,
|
|
550
|
-
spanId: true,
|
|
551
|
-
attributes: true,
|
|
552
|
-
},
|
|
553
260
|
},
|
|
554
261
|
};
|
|
555
262
|
|
|
@@ -765,24 +472,25 @@ export default class DashboardAPI extends BaseAPI<
|
|
|
765
472
|
/*
|
|
766
473
|
* Everything below is derived from columns the public /metadata and
|
|
767
474
|
* /view-config endpoints already serve to anonymous viewers — the
|
|
768
|
-
* overview only reshapes them into a single GET-able document
|
|
475
|
+
* overview only reshapes them into a single GET-able document, and
|
|
476
|
+
* applies the same external-Data-Source strip /view-config does.
|
|
769
477
|
*/
|
|
478
|
+
const publicViewConfig: DashboardViewConfig | null =
|
|
479
|
+
PublicDashboardViewConfig.sanitize(dashboard.dashboardViewConfig);
|
|
480
|
+
|
|
770
481
|
return Response.sendJsonObjectResponse(req, res, {
|
|
771
482
|
_id: dashboard._id?.toString() || "",
|
|
772
483
|
name: dashboard.name || "Dashboard",
|
|
773
484
|
description: dashboard.description || "",
|
|
774
485
|
pageTitle: dashboard.pageTitle || "",
|
|
775
486
|
pageDescription: dashboard.pageDescription || "",
|
|
776
|
-
components:
|
|
777
|
-
|
|
778
|
-
),
|
|
487
|
+
components:
|
|
488
|
+
DashboardAPI.buildPublicComponentSummaries(publicViewConfig),
|
|
779
489
|
metricsUsed: Array.from(
|
|
780
|
-
DashboardAPI.collectDashboardMetricNames(
|
|
781
|
-
dashboard.dashboardViewConfig,
|
|
782
|
-
),
|
|
490
|
+
DashboardAPI.collectDashboardMetricNames(publicViewConfig),
|
|
783
491
|
).sort(),
|
|
784
|
-
dashboardViewConfig:
|
|
785
|
-
? JSONFunctions.serialize(
|
|
492
|
+
dashboardViewConfig: publicViewConfig
|
|
493
|
+
? JSONFunctions.serialize(publicViewConfig as any)
|
|
786
494
|
: null,
|
|
787
495
|
});
|
|
788
496
|
} catch (err) {
|
|
@@ -968,6 +676,9 @@ export default class DashboardAPI extends BaseAPI<
|
|
|
968
676
|
throw new NotFoundException("Dashboard not found");
|
|
969
677
|
}
|
|
970
678
|
|
|
679
|
+
const publicViewConfig: DashboardViewConfig | null =
|
|
680
|
+
PublicDashboardViewConfig.sanitize(dashboard.dashboardViewConfig);
|
|
681
|
+
|
|
971
682
|
return Response.sendJsonObjectResponse(req, res, {
|
|
972
683
|
_id: dashboard._id?.toString() || "",
|
|
973
684
|
name: dashboard.name || "Dashboard",
|
|
@@ -977,8 +688,19 @@ export default class DashboardAPI extends BaseAPI<
|
|
|
977
688
|
logoFile: DashboardAPI.getFileAsBase64JSONObject(
|
|
978
689
|
dashboard.logoFile,
|
|
979
690
|
),
|
|
980
|
-
|
|
981
|
-
|
|
691
|
+
/*
|
|
692
|
+
* External Data Source widgets are stripped: they cannot render
|
|
693
|
+
* for an anonymous viewer, and their config IS the query — raw
|
|
694
|
+
* SQL / PromQL naming internal tables, jobs, and instances.
|
|
695
|
+
*
|
|
696
|
+
* The null stays null. JSONFunctions.serialize(null) returns
|
|
697
|
+
* `{}`, and the public page falls back to a default config only
|
|
698
|
+
* on a FALSY value — an empty object is truthy, so it would sail
|
|
699
|
+
* through and the canvas would read `.components.length` off
|
|
700
|
+
* undefined.
|
|
701
|
+
*/
|
|
702
|
+
dashboardViewConfig: publicViewConfig
|
|
703
|
+
? JSONFunctions.serialize(publicViewConfig as any)
|
|
982
704
|
: null,
|
|
983
705
|
});
|
|
984
706
|
} catch (err) {
|
|
@@ -1496,8 +1218,8 @@ export default class DashboardAPI extends BaseAPI<
|
|
|
1496
1218
|
* Public resource lists for non-metric dashboard widgets (incident /
|
|
1497
1219
|
* alert / monitor / trace / log / kubernetes / docker / host lists).
|
|
1498
1220
|
*
|
|
1499
|
-
* Each widget renders a fixed set of columns; the server
|
|
1500
|
-
* to exactly those columns
|
|
1221
|
+
* Each widget renders a fixed set of columns; the server-owned widget
|
|
1222
|
+
* policy pins the select to exactly those columns and forces the
|
|
1501
1223
|
* project scope to the dashboard's project, so a public viewer can only
|
|
1502
1224
|
* read the data the widget was built to show, for this dashboard's
|
|
1503
1225
|
* project. Authorization reuses DashboardService.hasReadAccess.
|
|
@@ -1541,10 +1263,9 @@ export default class DashboardAPI extends BaseAPI<
|
|
|
1541
1263
|
req.params["dashboardId"] as string,
|
|
1542
1264
|
);
|
|
1543
1265
|
|
|
1544
|
-
const password:
|
|
1545
|
-
req.body && (req.body["password"] as string);
|
|
1266
|
+
const password: unknown = req.body && req.body["password"];
|
|
1546
1267
|
|
|
1547
|
-
if (!password) {
|
|
1268
|
+
if (typeof password !== "string" || !password) {
|
|
1548
1269
|
throw new BadDataException("Master password is required.");
|
|
1549
1270
|
}
|
|
1550
1271
|
|
|
@@ -1556,6 +1277,7 @@ export default class DashboardAPI extends BaseAPI<
|
|
|
1556
1277
|
projectId: true,
|
|
1557
1278
|
enableMasterPassword: true,
|
|
1558
1279
|
masterPassword: true,
|
|
1280
|
+
masterPasswordSalt: true,
|
|
1559
1281
|
isPublicDashboard: true,
|
|
1560
1282
|
},
|
|
1561
1283
|
props: {
|
|
@@ -1579,12 +1301,14 @@ export default class DashboardAPI extends BaseAPI<
|
|
|
1579
1301
|
);
|
|
1580
1302
|
}
|
|
1581
1303
|
|
|
1582
|
-
const
|
|
1583
|
-
|
|
1584
|
-
|
|
1585
|
-
|
|
1304
|
+
const isMasterPasswordValid: boolean =
|
|
1305
|
+
await DashboardService.verifyHashedColumnValue({
|
|
1306
|
+
item: dashboard,
|
|
1307
|
+
columnName: "masterPassword",
|
|
1308
|
+
plainValue: password,
|
|
1309
|
+
});
|
|
1586
1310
|
|
|
1587
|
-
if (
|
|
1311
|
+
if (!isMasterPasswordValid) {
|
|
1588
1312
|
throw new BadDataException(
|
|
1589
1313
|
DASHBOARD_MASTER_PASSWORD_INVALID_MESSAGE,
|
|
1590
1314
|
);
|
|
@@ -1926,119 +1650,130 @@ export default class DashboardAPI extends BaseAPI<
|
|
|
1926
1650
|
}
|
|
1927
1651
|
|
|
1928
1652
|
/*
|
|
1929
|
-
*
|
|
1930
|
-
*
|
|
1931
|
-
*
|
|
1932
|
-
* dashboard was actually built to show — a dashboard with a monitor list
|
|
1933
|
-
* on it must not double as a project-wide log or incident reader.
|
|
1653
|
+
* Read only the real, top-level dashboard components. Recursively scanning
|
|
1654
|
+
* arbitrary widget arguments would let a nested object carrying a
|
|
1655
|
+
* `componentType` masquerade as a widget and become an authorization input.
|
|
1934
1656
|
*/
|
|
1935
|
-
private static
|
|
1657
|
+
private static collectDashboardWidgets(
|
|
1936
1658
|
dashboardViewConfig: unknown,
|
|
1937
|
-
):
|
|
1938
|
-
|
|
1939
|
-
|
|
1940
|
-
|
|
1941
|
-
|
|
1942
|
-
|
|
1943
|
-
|
|
1944
|
-
|
|
1945
|
-
if (Array.isArray(node)) {
|
|
1946
|
-
for (const item of node) {
|
|
1947
|
-
walk(item);
|
|
1948
|
-
}
|
|
1949
|
-
return;
|
|
1950
|
-
}
|
|
1951
|
-
|
|
1952
|
-
const obj: Record<string, unknown> = node as Record<string, unknown>;
|
|
1953
|
-
|
|
1954
|
-
const componentType: unknown = obj["componentType"];
|
|
1955
|
-
if (typeof componentType === "string" && componentType.length > 0) {
|
|
1956
|
-
componentTypes.add(componentType);
|
|
1957
|
-
}
|
|
1659
|
+
): Array<JSONObject> {
|
|
1660
|
+
if (
|
|
1661
|
+
!dashboardViewConfig ||
|
|
1662
|
+
typeof dashboardViewConfig !== "object" ||
|
|
1663
|
+
Array.isArray(dashboardViewConfig)
|
|
1664
|
+
) {
|
|
1665
|
+
return [];
|
|
1666
|
+
}
|
|
1958
1667
|
|
|
1959
|
-
|
|
1960
|
-
|
|
1961
|
-
|
|
1962
|
-
};
|
|
1668
|
+
const components: unknown = (
|
|
1669
|
+
dashboardViewConfig as Record<string, unknown>
|
|
1670
|
+
)["components"];
|
|
1963
1671
|
|
|
1964
|
-
|
|
1672
|
+
if (!Array.isArray(components)) {
|
|
1673
|
+
return [];
|
|
1674
|
+
}
|
|
1965
1675
|
|
|
1966
|
-
return
|
|
1676
|
+
return components.filter((component: unknown): component is JSONObject => {
|
|
1677
|
+
return Boolean(
|
|
1678
|
+
component && typeof component === "object" && !Array.isArray(component),
|
|
1679
|
+
);
|
|
1680
|
+
});
|
|
1967
1681
|
}
|
|
1968
1682
|
|
|
1969
|
-
|
|
1970
|
-
|
|
1971
|
-
|
|
1972
|
-
|
|
1973
|
-
* column used as a blind oracle — is dropped rather than merged.
|
|
1974
|
-
*/
|
|
1975
|
-
private static sanitizePublicResourceQuery(data: {
|
|
1976
|
-
query: unknown;
|
|
1977
|
-
allowedQueryKeys: Array<string>;
|
|
1978
|
-
}): JSONObject {
|
|
1979
|
-
const { query, allowedQueryKeys } = data;
|
|
1683
|
+
private static readDashboardWidgetComponentId(
|
|
1684
|
+
widget: JSONObject,
|
|
1685
|
+
): string | null {
|
|
1686
|
+
const componentId: unknown = widget["componentId"];
|
|
1980
1687
|
|
|
1981
|
-
|
|
1688
|
+
if (componentId instanceof ObjectID) {
|
|
1689
|
+
return componentId.toString();
|
|
1690
|
+
}
|
|
1982
1691
|
|
|
1983
|
-
if (
|
|
1984
|
-
return
|
|
1692
|
+
if (typeof componentId === "string" && componentId.length > 0) {
|
|
1693
|
+
return componentId;
|
|
1985
1694
|
}
|
|
1986
1695
|
|
|
1987
|
-
|
|
1988
|
-
|
|
1989
|
-
|
|
1990
|
-
|
|
1991
|
-
|
|
1992
|
-
|
|
1993
|
-
|
|
1994
|
-
|
|
1995
|
-
|
|
1996
|
-
) {
|
|
1997
|
-
sanitized[key] = queryObject[key];
|
|
1696
|
+
if (
|
|
1697
|
+
componentId &&
|
|
1698
|
+
typeof componentId === "object" &&
|
|
1699
|
+
!Array.isArray(componentId)
|
|
1700
|
+
) {
|
|
1701
|
+
const value: unknown = (componentId as Record<string, unknown>)["value"];
|
|
1702
|
+
|
|
1703
|
+
if (typeof value === "string" && value.length > 0) {
|
|
1704
|
+
return value;
|
|
1998
1705
|
}
|
|
1999
1706
|
}
|
|
2000
1707
|
|
|
2001
|
-
return
|
|
1708
|
+
return null;
|
|
2002
1709
|
}
|
|
2003
1710
|
|
|
2004
1711
|
/*
|
|
2005
|
-
*
|
|
2006
|
-
*
|
|
2007
|
-
*
|
|
1712
|
+
* Select the exact stored widget whose policy will be executed. A legacy
|
|
1713
|
+
* caller may omit componentId only when there is exactly one matching
|
|
1714
|
+
* widget, so two differently-filtered widgets are never conflated.
|
|
2008
1715
|
*/
|
|
2009
|
-
private static
|
|
2010
|
-
|
|
2011
|
-
|
|
1716
|
+
private static selectPublicResourceWidget(data: {
|
|
1717
|
+
dashboardViewConfig: unknown;
|
|
1718
|
+
config: PublicDashboardResourceConfig;
|
|
1719
|
+
requestedComponentId: unknown;
|
|
2012
1720
|
}): JSONObject {
|
|
2013
|
-
const
|
|
1721
|
+
const matchingWidgets: Array<JSONObject> =
|
|
1722
|
+
DashboardAPI.collectDashboardWidgets(data.dashboardViewConfig).filter(
|
|
1723
|
+
(widget: JSONObject): boolean => {
|
|
1724
|
+
const componentType: unknown = widget["componentType"];
|
|
1725
|
+
|
|
1726
|
+
return (
|
|
1727
|
+
typeof componentType === "string" &&
|
|
1728
|
+
Object.prototype.hasOwnProperty.call(
|
|
1729
|
+
data.config.widgets,
|
|
1730
|
+
componentType,
|
|
1731
|
+
)
|
|
1732
|
+
);
|
|
1733
|
+
},
|
|
1734
|
+
);
|
|
1735
|
+
|
|
1736
|
+
if (matchingWidgets.length === 0) {
|
|
1737
|
+
throw new BadDataException(
|
|
1738
|
+
"This resource is not part of this dashboard.",
|
|
1739
|
+
);
|
|
1740
|
+
}
|
|
2014
1741
|
|
|
2015
|
-
|
|
1742
|
+
if (
|
|
1743
|
+
data.requestedComponentId === undefined ||
|
|
1744
|
+
data.requestedComponentId === null
|
|
1745
|
+
) {
|
|
1746
|
+
if (matchingWidgets.length === 1) {
|
|
1747
|
+
return matchingWidgets[0] as JSONObject;
|
|
1748
|
+
}
|
|
2016
1749
|
|
|
2017
|
-
|
|
2018
|
-
|
|
1750
|
+
throw new BadDataException(
|
|
1751
|
+
"A componentId is required to read this resource from this dashboard.",
|
|
1752
|
+
);
|
|
2019
1753
|
}
|
|
2020
1754
|
|
|
2021
|
-
|
|
1755
|
+
if (typeof data.requestedComponentId !== "string") {
|
|
1756
|
+
throw new BadDataException("componentId must be a string UUID.");
|
|
1757
|
+
}
|
|
2022
1758
|
|
|
2023
|
-
|
|
2024
|
-
// Only scalar columns of the fixed select are sortable.
|
|
2025
|
-
if (select[key] !== true) {
|
|
2026
|
-
continue;
|
|
2027
|
-
}
|
|
1759
|
+
ObjectID.validateUUID(data.requestedComponentId);
|
|
2028
1760
|
|
|
2029
|
-
|
|
1761
|
+
const selectedWidget: JSONObject | undefined = matchingWidgets.find(
|
|
1762
|
+
(widget: JSONObject): boolean => {
|
|
1763
|
+
return (
|
|
1764
|
+
DashboardAPI.readDashboardWidgetComponentId(widget) ===
|
|
1765
|
+
data.requestedComponentId
|
|
1766
|
+
);
|
|
1767
|
+
},
|
|
1768
|
+
);
|
|
2030
1769
|
|
|
2031
|
-
|
|
2032
|
-
|
|
2033
|
-
|
|
2034
|
-
)
|
|
2035
|
-
sanitized[key] = SortOrder.Descending;
|
|
2036
|
-
} else {
|
|
2037
|
-
sanitized[key] = SortOrder.Ascending;
|
|
2038
|
-
}
|
|
1770
|
+
if (!selectedWidget) {
|
|
1771
|
+
throw new BadDataException(
|
|
1772
|
+
"This resource is not part of this dashboard.",
|
|
1773
|
+
);
|
|
2039
1774
|
}
|
|
2040
1775
|
|
|
2041
|
-
return
|
|
1776
|
+
return selectedWidget;
|
|
2042
1777
|
}
|
|
2043
1778
|
|
|
2044
1779
|
/*
|
|
@@ -2087,117 +1822,66 @@ export default class DashboardAPI extends BaseAPI<
|
|
|
2087
1822
|
throw new NotFoundException("Dashboard not found");
|
|
2088
1823
|
}
|
|
2089
1824
|
|
|
2090
|
-
|
|
2091
|
-
|
|
2092
|
-
|
|
2093
|
-
|
|
2094
|
-
|
|
2095
|
-
* allowlist.
|
|
2096
|
-
*/
|
|
2097
|
-
const dashboardComponentTypes: Set<string> =
|
|
2098
|
-
DashboardAPI.collectDashboardComponentTypes(
|
|
2099
|
-
dashboard.dashboardViewConfig,
|
|
2100
|
-
);
|
|
2101
|
-
|
|
2102
|
-
const presentWidgets: Array<string> = Object.keys(config.widgets).filter(
|
|
2103
|
-
(componentType: string) => {
|
|
2104
|
-
return dashboardComponentTypes.has(componentType);
|
|
2105
|
-
},
|
|
2106
|
-
);
|
|
2107
|
-
|
|
2108
|
-
if (presentWidgets.length === 0) {
|
|
2109
|
-
throw new BadDataException(
|
|
2110
|
-
"This resource is not part of this dashboard.",
|
|
2111
|
-
);
|
|
2112
|
-
}
|
|
1825
|
+
const widget: JSONObject = DashboardAPI.selectPublicResourceWidget({
|
|
1826
|
+
dashboardViewConfig: dashboard.dashboardViewConfig,
|
|
1827
|
+
config,
|
|
1828
|
+
requestedComponentId: req.body ? req.body["componentId"] : undefined,
|
|
1829
|
+
});
|
|
2113
1830
|
|
|
2114
|
-
const
|
|
1831
|
+
const requestedQuery: JSONObject =
|
|
2115
1832
|
req.body && req.body["query"]
|
|
2116
1833
|
? (JSONFunctions.deserialize(
|
|
2117
1834
|
req.body["query"] as JSONObject,
|
|
2118
1835
|
) as JSONObject)
|
|
2119
1836
|
: {};
|
|
2120
1837
|
|
|
2121
|
-
const
|
|
2122
|
-
|
|
2123
|
-
|
|
2124
|
-
|
|
2125
|
-
|
|
2126
|
-
|
|
2127
|
-
* Security: pin to the dashboard's project; never trust a client-supplied
|
|
2128
|
-
* projectId on a public, unauthenticated endpoint.
|
|
2129
|
-
*/
|
|
2130
|
-
(query as Record<string, unknown>)["projectId"] = dashboard.projectId;
|
|
2131
|
-
|
|
2132
|
-
/*
|
|
2133
|
-
* Models that pack several resource kinds into one table (Kubernetes,
|
|
2134
|
-
* Docker, Podman, Proxmox, Ceph, Swarm) are constrained to the kinds the
|
|
2135
|
-
* dashboard's widgets render, so a "volumes" widget cannot be used to
|
|
2136
|
-
* list containers. A widget may pick one of those kinds; anything else is
|
|
2137
|
-
* rejected, and a request that names no kind gets all of them.
|
|
2138
|
-
*/
|
|
2139
|
-
const allowedKinds: Array<string> = presentWidgets
|
|
2140
|
-
.map((componentType: string) => {
|
|
2141
|
-
return config.widgets[componentType as DashboardComponentType];
|
|
2142
|
-
})
|
|
2143
|
-
.filter((kind: string | null | undefined): kind is string => {
|
|
2144
|
-
return Boolean(kind);
|
|
1838
|
+
const policy: PublicDashboardResourceListPolicyResult =
|
|
1839
|
+
PublicDashboardResourceListPolicy.build({
|
|
1840
|
+
widget,
|
|
1841
|
+
dashboardViewConfig: dashboard.dashboardViewConfig,
|
|
1842
|
+
requestedVariables: req.body ? req.body["variables"] : undefined,
|
|
1843
|
+
requestedQuery,
|
|
2145
1844
|
});
|
|
2146
1845
|
|
|
2147
|
-
|
|
2148
|
-
const requestedKind: unknown = (clientQuery as Record<string, unknown>)[
|
|
2149
|
-
"kind"
|
|
2150
|
-
];
|
|
2151
|
-
|
|
2152
|
-
if (requestedKind !== undefined && requestedKind !== null) {
|
|
2153
|
-
if (
|
|
2154
|
-
typeof requestedKind !== "string" ||
|
|
2155
|
-
!allowedKinds.includes(requestedKind)
|
|
2156
|
-
) {
|
|
2157
|
-
throw new BadDataException(
|
|
2158
|
-
"This resource is not part of this dashboard.",
|
|
2159
|
-
);
|
|
2160
|
-
}
|
|
1846
|
+
const requestedResourceType: string = req.params["resourceType"] as string;
|
|
2161
1847
|
|
|
2162
|
-
|
|
2163
|
-
|
|
2164
|
-
|
|
2165
|
-
|
|
2166
|
-
(query as Record<string, unknown>)["kind"] = new Includes(allowedKinds);
|
|
2167
|
-
}
|
|
1848
|
+
if (policy.resourceType !== requestedResourceType) {
|
|
1849
|
+
throw new BadDataException(
|
|
1850
|
+
"This resource is not part of this dashboard.",
|
|
1851
|
+
);
|
|
2168
1852
|
}
|
|
2169
1853
|
|
|
2170
|
-
|
|
2171
|
-
|
|
2172
|
-
|
|
2173
|
-
? JSONFunctions.deserialize(req.body["sort"] as JSONObject)
|
|
2174
|
-
: {},
|
|
2175
|
-
select: config.select,
|
|
2176
|
-
});
|
|
1854
|
+
let query: JSONObject = {
|
|
1855
|
+
...policy.query,
|
|
1856
|
+
};
|
|
2177
1857
|
|
|
2178
|
-
|
|
2179
|
-
|
|
2180
|
-
|
|
2181
|
-
|
|
2182
|
-
|
|
2183
|
-
|
|
2184
|
-
|
|
2185
|
-
|
|
2186
|
-
)
|
|
1858
|
+
/*
|
|
1859
|
+
* IncidentService and AlertService normally apply privacy in their
|
|
1860
|
+
* onBeforeFind hooks. The root read below intentionally bypasses those
|
|
1861
|
+
* hooks' user context, so apply the anonymous form explicitly first:
|
|
1862
|
+
* public dashboards may show public rows, never private tenant rows.
|
|
1863
|
+
*/
|
|
1864
|
+
if (requestedResourceType === "incident") {
|
|
1865
|
+
query = applyIncidentSelfPrivacyFilter(query, {});
|
|
1866
|
+
} else if (requestedResourceType === "alert") {
|
|
1867
|
+
query = applyAlertSelfPrivacyFilter(query, {});
|
|
1868
|
+
}
|
|
2187
1869
|
|
|
2188
|
-
|
|
2189
|
-
|
|
2190
|
-
|
|
2191
|
-
|
|
2192
|
-
|
|
1870
|
+
/*
|
|
1871
|
+
* Project scope is the final query invariant. Neither the request nor a
|
|
1872
|
+
* future policy builder may redirect this root read to another project.
|
|
1873
|
+
* Resource kind, where applicable, comes solely from the selected
|
|
1874
|
+
* widget's policy query.
|
|
1875
|
+
*/
|
|
1876
|
+
query["projectId"] = dashboard.projectId;
|
|
2193
1877
|
|
|
2194
1878
|
const list: Array<BaseModel | AnalyticsDataModel> =
|
|
2195
1879
|
await config.service.findBy({
|
|
2196
1880
|
query: query,
|
|
2197
|
-
select:
|
|
2198
|
-
sort: sort,
|
|
2199
|
-
limit: limit,
|
|
2200
|
-
skip:
|
|
1881
|
+
select: policy.select,
|
|
1882
|
+
sort: policy.sort,
|
|
1883
|
+
limit: policy.limit,
|
|
1884
|
+
skip: 0,
|
|
2201
1885
|
props: {
|
|
2202
1886
|
isRoot: true,
|
|
2203
1887
|
},
|