@oneuptime/common 12.0.5 → 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 +33 -0
- package/Models/DatabaseModels/DataSource.ts +744 -0
- package/Models/DatabaseModels/Index.ts +3 -0
- package/Models/DatabaseModels/ProjectCallSMSConfig.ts +10 -2
- 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/AIInsightAPI.ts +47 -4
- package/Server/API/AIInvestigationAPI.ts +25 -0
- package/Server/API/DashboardAPI.ts +176 -492
- package/Server/API/DataSourceAPI.ts +268 -0
- package/Server/API/StatusPageAPI.ts +11 -1
- package/Server/API/UserAPI.ts +119 -0
- package/Server/Infrastructure/ClickhouseConfig.ts +59 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1786303472848-AddDataSourceTable.ts +39 -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 +6 -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 +34 -0
- package/Server/Services/AIService.ts +17 -2
- package/Server/Services/AlertService.ts +38 -32
- package/Server/Services/AnalyticsDatabaseService.ts +8 -4
- package/Server/Services/DataSourceService.ts +200 -0
- package/Server/Services/HostService.ts +92 -0
- package/Server/Services/IncidentService.ts +45 -0
- package/Server/Services/Index.ts +2 -0
- 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/CodeFix/FixRunBudget.ts +2 -2
- package/Server/Utils/AI/SRE/AIInvestigationEngine.ts +90 -11
- package/Server/Utils/AI/SRE/AlertInvestigationRunner.ts +1 -0
- package/Server/Utils/AI/SRE/IncidentInvestigationRunner.ts +1 -0
- 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/InvestigationTldr.ts +352 -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/MonitorMetricUtil.ts +58 -0
- package/Server/Utils/Monitor/MonitorResource.ts +14 -0
- 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/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/IncidentsSideMenu.test.tsx +447 -0
- package/Tests/App/Dashboard/InvestigationPanel.test.tsx +514 -3
- 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/StatusPageResourceExplorer.test.tsx +1858 -0
- package/Tests/Models/DatabaseModels/DataSourceModelSecrets.test.ts +70 -0
- package/Tests/Server/API/AIInvestigationAPI.test.ts +187 -0
- 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/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/AIServiceDailyBudget.test.ts +4 -0
- package/Tests/Server/Services/AlertMetricResourceAttributes.test.ts +352 -0
- package/Tests/Server/Services/DataSourceServiceSettings.test.ts +244 -0
- 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/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/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/FixRunBudget.test.ts +2 -2
- 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/NewExceptionDetector.test.ts +361 -10
- package/Tests/Server/Utils/AI/InvestigationSettlement.test.ts +292 -0
- package/Tests/Server/Utils/AI/InvestigationTldr.test.ts +623 -0
- package/Tests/Server/Utils/AI/InvestigationTldrWiring.test.ts +98 -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/MonitorMetricResourceAttributes.test.ts +336 -0
- package/Tests/Server/Utils/OfflineAssetHygiene.test.ts +521 -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/DataSourceComponentTypes.test.ts +618 -0
- package/Tests/Types/DateClickhouseFormat.test.ts +192 -0
- package/Tests/Types/Password.test.ts +363 -0
- package/Tests/UI/Components/ConfirmModal.test.tsx +7 -0
- package/Tests/UI/Components/ErrorBoundary.test.tsx +53 -0
- package/Tests/UI/Components/Modal.test.tsx +281 -1
- package/Tests/UI/Components/ObjectIdFilterPipeline.test.tsx +396 -0
- package/Tests/UI/Components/StatusPage/ResourceGroupNavigator.test.tsx +1147 -0
- package/Tests/UI/Utils/Breadcrumb/fixtures/RealBreadcrumbTrails.ts +116 -1
- package/Tests/UI/Utils/Breadcrumb/fixtures/RealRoutePatterns.ts +2 -0
- package/Tests/Utils/Analytics.test.ts +23 -0
- package/Tests/Utils/Dashboard/Components/DashboardDataSourceComponents.test.ts +640 -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/StatusPage/GroupHierarchyView.test.ts +1452 -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/Types/AI/AIInsightEvidence.ts +6 -0
- 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/Password.ts +64 -0
- package/Types/Permission.ts +46 -0
- package/Types/UserAuthenticationStatus.ts +34 -0
- package/UI/Components/Button/Button.tsx +1 -1
- package/UI/Components/ErrorBoundary.tsx +459 -108
- 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/MoreMenu/MoreMenu.tsx +19 -4
- package/UI/Components/MoreMenu/MoreMenuItem.tsx +6 -1
- 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/ModelAPI/ModelAPI.ts +1 -0
- package/UI/Utils/TestDataSource.ts +61 -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/DataSource/DataSourceQueryText.ts +94 -0
- package/Utils/DataSource/DataSourceValueReducer.ts +156 -0
- package/Utils/Metrics/MetricResourceAttributeUtil.ts +380 -0
- package/Utils/NetworkDiscovery/ScanTargetUtil.ts +8 -6
- package/Utils/StatusPage/GroupHierarchyView.ts +931 -0
- package/Utils/StatusPage/ResourceExplorer.ts +853 -0
- package/build/dist/Models/DatabaseModels/AIRun.js +34 -0
- package/build/dist/Models/DatabaseModels/AIRun.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/Index.js +2 -0
- package/build/dist/Models/DatabaseModels/Index.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/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/AIInsightAPI.js +34 -4
- package/build/dist/Server/API/AIInsightAPI.js.map +1 -1
- package/build/dist/Server/API/AIInvestigationAPI.js +23 -0
- package/build/dist/Server/API/AIInvestigationAPI.js.map +1 -1
- package/build/dist/Server/API/DashboardAPI.js +119 -433
- 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 +11 -1
- 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/Infrastructure/ClickhouseConfig.js +49 -0
- package/build/dist/Server/Infrastructure/ClickhouseConfig.js.map +1 -1
- 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/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 +6 -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 +34 -0
- package/build/dist/Server/Services/AIRunService.js.map +1 -1
- package/build/dist/Server/Services/AIService.js +16 -2
- package/build/dist/Server/Services/AIService.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 +8 -4
- 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/HostService.js +74 -0
- package/build/dist/Server/Services/HostService.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/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/CodeFix/FixRunBudget.js +2 -2
- package/build/dist/Server/Utils/AI/CodeFix/FixRunBudget.js.map +1 -1
- package/build/dist/Server/Utils/AI/SRE/AIInvestigationEngine.js +68 -8
- package/build/dist/Server/Utils/AI/SRE/AIInvestigationEngine.js.map +1 -1
- package/build/dist/Server/Utils/AI/SRE/AlertInvestigationRunner.js +1 -0
- package/build/dist/Server/Utils/AI/SRE/AlertInvestigationRunner.js.map +1 -1
- package/build/dist/Server/Utils/AI/SRE/IncidentInvestigationRunner.js +1 -0
- 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/InvestigationTldr.js +303 -0
- package/build/dist/Server/Utils/AI/SRE/InvestigationTldr.js.map +1 -0
- 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/MonitorMetricUtil.js +34 -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/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/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/Password.js +56 -0
- package/build/dist/Types/Password.js.map +1 -0
- package/build/dist/Types/Permission.js +42 -0
- 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/ErrorBoundary.js +388 -72
- package/build/dist/UI/Components/ErrorBoundary.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/MoreMenu/MoreMenu.js +9 -6
- 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/ModelAPI/ModelAPI.js +3 -8
- package/build/dist/UI/Utils/ModelAPI/ModelAPI.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/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/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/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/ResourceExplorer.js +519 -0
- package/build/dist/Utils/StatusPage/ResourceExplorer.js.map +1 -0
- package/jest.config.json +1 -0
- package/package.json +5 -1
- package/tsconfig.json +12 -10
|
@@ -0,0 +1,560 @@
|
|
|
1
|
+
import StatusPageGroupTreeUtil from "./GroupTree";
|
|
2
|
+
/*
|
|
3
|
+
* The admin side of the status page group hierarchy.
|
|
4
|
+
*
|
|
5
|
+
* Groups nest (Corporate Unit -> Region -> Market -> Site) and the page that
|
|
6
|
+
* manages them used to be a flat table with a "Parent Group" column. A table
|
|
7
|
+
* can tell you that "Market 1001" sits under "Region 1000"; it cannot show you
|
|
8
|
+
* the shape of the thing you are building, which is the only question an
|
|
9
|
+
* operator actually has in front of a hierarchy. So the page draws a tree, and
|
|
10
|
+
* everything the tree needs to know - which rows are visible, how deep each one
|
|
11
|
+
* sits, which guide rails are drawn beside it, which way it may be moved - is
|
|
12
|
+
* worked out here rather than inline in the component.
|
|
13
|
+
*
|
|
14
|
+
* It lives next to GroupNestingLayout (which does the same job for the public
|
|
15
|
+
* status page) for the same reason: this is the part that has to hold at depth 1
|
|
16
|
+
* and still hold at depth 9 against data written straight to the database, and
|
|
17
|
+
* that is worth pinning down in tests rather than in a render.
|
|
18
|
+
*/
|
|
19
|
+
/*
|
|
20
|
+
* Ancestors are joined with this everywhere in the admin (Resources, Monitor
|
|
21
|
+
* Rules, the parent picker), so a path reads the same wherever it is shown.
|
|
22
|
+
*/
|
|
23
|
+
export const STATUS_PAGE_GROUP_PATH_SEPARATOR = " › ";
|
|
24
|
+
class StatusPageGroupHierarchyViewUtil {
|
|
25
|
+
static getIndentColumnCount(data) {
|
|
26
|
+
if (!Number.isFinite(data.depth)) {
|
|
27
|
+
return 0;
|
|
28
|
+
}
|
|
29
|
+
const depth = Math.floor(data.depth);
|
|
30
|
+
if (depth <= 0) {
|
|
31
|
+
return 0;
|
|
32
|
+
}
|
|
33
|
+
return Math.min(depth, this.MaxIndentColumns);
|
|
34
|
+
}
|
|
35
|
+
/*
|
|
36
|
+
* The rows to render, in tree order, with everything each row needs to draw
|
|
37
|
+
* itself. Collapsed subtrees are not in the result at all - the component
|
|
38
|
+
* renders a flat list, so "collapsed" and "absent" have to be the same thing.
|
|
39
|
+
*/
|
|
40
|
+
static getRows(data) {
|
|
41
|
+
const index = StatusPageGroupTreeUtil.buildIndex({
|
|
42
|
+
statusPageGroups: data.statusPageGroups,
|
|
43
|
+
});
|
|
44
|
+
const tree = StatusPageGroupTreeUtil.buildTree({
|
|
45
|
+
statusPageGroups: data.statusPageGroups,
|
|
46
|
+
index: index,
|
|
47
|
+
});
|
|
48
|
+
const searchTerm = this.normalizeSearchText(data.searchText);
|
|
49
|
+
const isSearching = searchTerm.length > 0;
|
|
50
|
+
const matchedIds = isSearching
|
|
51
|
+
? this.getMatchingGroupIds({
|
|
52
|
+
statusPageGroups: data.statusPageGroups,
|
|
53
|
+
searchText: searchTerm,
|
|
54
|
+
})
|
|
55
|
+
: new Set();
|
|
56
|
+
const visibleIds = isSearching
|
|
57
|
+
? this.getSearchVisibleGroupIds({
|
|
58
|
+
statusPageGroups: data.statusPageGroups,
|
|
59
|
+
searchText: searchTerm,
|
|
60
|
+
index: index,
|
|
61
|
+
})
|
|
62
|
+
: null;
|
|
63
|
+
/*
|
|
64
|
+
* An ancestor of a match is opened whatever the operator collapsed earlier:
|
|
65
|
+
* a search that hides its own results behind a collapsed parent is a search
|
|
66
|
+
* that found nothing as far as the operator can tell.
|
|
67
|
+
*/
|
|
68
|
+
const forcedExpandedIds = isSearching
|
|
69
|
+
? this.getAncestorIdsOfMatches({
|
|
70
|
+
statusPageGroups: data.statusPageGroups,
|
|
71
|
+
matchedIds: matchedIds,
|
|
72
|
+
index: index,
|
|
73
|
+
})
|
|
74
|
+
: new Set();
|
|
75
|
+
const expandedGroupIds = data.expandedGroupIds || new Set();
|
|
76
|
+
const rows = [];
|
|
77
|
+
/*
|
|
78
|
+
* Where each group sits among its siblings, worked out once per parent
|
|
79
|
+
* rather than once per row.
|
|
80
|
+
*
|
|
81
|
+
* Without it, a status page whose groups are all at the top level asks for
|
|
82
|
+
* the same fifteen hundred long sibling list fifteen hundred times and
|
|
83
|
+
* scans it each time - two and a quarter million comparisons and fifteen
|
|
84
|
+
* hundred copies of the array, which is seconds of work on every keystroke
|
|
85
|
+
* and every group opened.
|
|
86
|
+
*/
|
|
87
|
+
const siblingsByParentKey = new Map();
|
|
88
|
+
const getSiblingLevel = (statusPageGroup) => {
|
|
89
|
+
const parentId = StatusPageGroupTreeUtil.getParentId(statusPageGroup);
|
|
90
|
+
/*
|
|
91
|
+
* The same key getSiblingGroups resolves to: a group whose parent is not
|
|
92
|
+
* on this status page is a root, and its siblings are the other roots.
|
|
93
|
+
*/
|
|
94
|
+
const parentKey = parentId && index.byId.has(parentId) ? parentId : "";
|
|
95
|
+
const cached = siblingsByParentKey.get(parentKey);
|
|
96
|
+
if (cached) {
|
|
97
|
+
return cached;
|
|
98
|
+
}
|
|
99
|
+
const siblings = this.getSiblingGroups({
|
|
100
|
+
statusPageGroup: statusPageGroup,
|
|
101
|
+
statusPageGroups: data.statusPageGroups,
|
|
102
|
+
index: index,
|
|
103
|
+
});
|
|
104
|
+
const positionById = new Map();
|
|
105
|
+
siblings.forEach((sibling, position) => {
|
|
106
|
+
positionById.set(this.getGroupId(sibling), position);
|
|
107
|
+
});
|
|
108
|
+
const level = {
|
|
109
|
+
siblings: siblings,
|
|
110
|
+
positionById: positionById,
|
|
111
|
+
};
|
|
112
|
+
siblingsByParentKey.set(parentKey, level);
|
|
113
|
+
return level;
|
|
114
|
+
};
|
|
115
|
+
const walk = (nodes, ancestorRails, ancestorNames) => {
|
|
116
|
+
/*
|
|
117
|
+
* Filtered before the positions below are worked out, so "is this the last
|
|
118
|
+
* one" is asked of the rows that are actually drawn. Skipping a whole node
|
|
119
|
+
* is safe: a group is visible whenever anything in its subtree matched, so
|
|
120
|
+
* an invisible node cannot be hiding a visible descendant.
|
|
121
|
+
*/
|
|
122
|
+
const visibleNodes = visibleIds
|
|
123
|
+
? nodes.filter((node) => {
|
|
124
|
+
return visibleIds.has(this.getGroupId(node.group));
|
|
125
|
+
})
|
|
126
|
+
: nodes;
|
|
127
|
+
visibleNodes.forEach((node, position) => {
|
|
128
|
+
const groupId = this.getGroupId(node.group);
|
|
129
|
+
const isLastVisibleSibling = position === visibleNodes.length - 1;
|
|
130
|
+
const visibleChildren = visibleIds
|
|
131
|
+
? node.children.filter((child) => {
|
|
132
|
+
return visibleIds.has(this.getGroupId(child.group));
|
|
133
|
+
})
|
|
134
|
+
: node.children;
|
|
135
|
+
const hasVisibleSubGroups = visibleChildren.length > 0;
|
|
136
|
+
const isExpanded = hasVisibleSubGroups &&
|
|
137
|
+
(expandedGroupIds.has(groupId) || forcedExpandedIds.has(groupId));
|
|
138
|
+
const neighbours = this.getSiblingNeighbours({
|
|
139
|
+
statusPageGroup: node.group,
|
|
140
|
+
statusPageGroups: data.statusPageGroups,
|
|
141
|
+
index: index,
|
|
142
|
+
siblingLevel: getSiblingLevel(node.group),
|
|
143
|
+
});
|
|
144
|
+
rows.push({
|
|
145
|
+
statusPageGroup: node.group,
|
|
146
|
+
id: groupId,
|
|
147
|
+
name: node.group.name || "",
|
|
148
|
+
depth: node.depth,
|
|
149
|
+
hasSubGroups: node.children.length > 0,
|
|
150
|
+
subGroupCount: node.children.length,
|
|
151
|
+
descendantCount: this.countDescendants({ node: node }),
|
|
152
|
+
hasVisibleSubGroups: hasVisibleSubGroups,
|
|
153
|
+
isExpanded: isExpanded,
|
|
154
|
+
ancestorRails: this.trimRails({
|
|
155
|
+
rails: ancestorRails,
|
|
156
|
+
depth: node.depth,
|
|
157
|
+
}),
|
|
158
|
+
isLastVisibleSibling: isLastVisibleSibling,
|
|
159
|
+
visibleSiblingIndex: position,
|
|
160
|
+
visibleSiblingCount: visibleNodes.length,
|
|
161
|
+
ancestorNames: [...ancestorNames],
|
|
162
|
+
isSearchMatch: !isSearching || matchedIds.has(groupId),
|
|
163
|
+
previousSiblingId: neighbours.previousSiblingId,
|
|
164
|
+
nextSiblingId: neighbours.nextSiblingId,
|
|
165
|
+
canMoveUp: neighbours.previousSiblingId !== null,
|
|
166
|
+
canMoveDown: neighbours.nextSiblingId !== null,
|
|
167
|
+
});
|
|
168
|
+
if (isExpanded) {
|
|
169
|
+
walk(node.children, [...ancestorRails, !isLastVisibleSibling], [...ancestorNames, node.group.name || ""]);
|
|
170
|
+
}
|
|
171
|
+
});
|
|
172
|
+
};
|
|
173
|
+
walk(tree, [], []);
|
|
174
|
+
return rows;
|
|
175
|
+
}
|
|
176
|
+
/*
|
|
177
|
+
* Groups whose name or description contains the search text. Case and
|
|
178
|
+
* surrounding whitespace are ignored - an operator hunting for a group they
|
|
179
|
+
* half remember should not have to match its capitalisation.
|
|
180
|
+
*/
|
|
181
|
+
static getMatchingGroupIds(data) {
|
|
182
|
+
const searchTerm = this.normalizeSearchText(data.searchText);
|
|
183
|
+
const matchedIds = new Set();
|
|
184
|
+
if (!searchTerm) {
|
|
185
|
+
return matchedIds;
|
|
186
|
+
}
|
|
187
|
+
for (const group of data.statusPageGroups) {
|
|
188
|
+
if (this.matchesSearch({ statusPageGroup: group, searchText: searchTerm })) {
|
|
189
|
+
matchedIds.add(this.getGroupId(group));
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
return matchedIds;
|
|
193
|
+
}
|
|
194
|
+
static matchesSearch(data) {
|
|
195
|
+
const searchTerm = this.normalizeSearchText(data.searchText);
|
|
196
|
+
if (!searchTerm) {
|
|
197
|
+
return true;
|
|
198
|
+
}
|
|
199
|
+
const haystack = [
|
|
200
|
+
data.statusPageGroup.name || "",
|
|
201
|
+
data.statusPageGroup.description || "",
|
|
202
|
+
]
|
|
203
|
+
.join(" ")
|
|
204
|
+
.toLowerCase();
|
|
205
|
+
return haystack.includes(searchTerm);
|
|
206
|
+
}
|
|
207
|
+
/*
|
|
208
|
+
* Everything a search puts on screen: the matches, the ancestors that give
|
|
209
|
+
* each match its place in the hierarchy, and the matches' own subtrees.
|
|
210
|
+
*
|
|
211
|
+
* The subtrees are there because a hierarchy is what the operator is looking
|
|
212
|
+
* at. Searching "Region 1000" and being shown a Region with no contents would
|
|
213
|
+
* be answering a different question from the one that was asked.
|
|
214
|
+
*/
|
|
215
|
+
static getSearchVisibleGroupIds(data) {
|
|
216
|
+
const index = this.resolveIndex(data);
|
|
217
|
+
const matchedIds = this.getMatchingGroupIds({
|
|
218
|
+
statusPageGroups: data.statusPageGroups,
|
|
219
|
+
searchText: data.searchText,
|
|
220
|
+
});
|
|
221
|
+
const visibleIds = new Set();
|
|
222
|
+
for (const group of data.statusPageGroups) {
|
|
223
|
+
if (!matchedIds.has(this.getGroupId(group))) {
|
|
224
|
+
continue;
|
|
225
|
+
}
|
|
226
|
+
visibleIds.add(this.getGroupId(group));
|
|
227
|
+
for (const ancestor of StatusPageGroupTreeUtil.getAncestorGroups({
|
|
228
|
+
statusPageGroup: group,
|
|
229
|
+
statusPageGroups: data.statusPageGroups,
|
|
230
|
+
index: index,
|
|
231
|
+
})) {
|
|
232
|
+
visibleIds.add(this.getGroupId(ancestor));
|
|
233
|
+
}
|
|
234
|
+
for (const descendant of StatusPageGroupTreeUtil.getDescendantGroups({
|
|
235
|
+
statusPageGroup: group,
|
|
236
|
+
statusPageGroups: data.statusPageGroups,
|
|
237
|
+
index: index,
|
|
238
|
+
})) {
|
|
239
|
+
visibleIds.add(this.getGroupId(descendant));
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
return visibleIds;
|
|
243
|
+
}
|
|
244
|
+
/* Every group that has sub groups - what "Expand all" turns on. */
|
|
245
|
+
static getExpandableGroupIds(data) {
|
|
246
|
+
const index = this.resolveIndex(data);
|
|
247
|
+
const expandableIds = new Set();
|
|
248
|
+
const visit = (nodes) => {
|
|
249
|
+
for (const node of nodes) {
|
|
250
|
+
if (node.children.length > 0) {
|
|
251
|
+
expandableIds.add(this.getGroupId(node.group));
|
|
252
|
+
}
|
|
253
|
+
visit(node.children);
|
|
254
|
+
}
|
|
255
|
+
};
|
|
256
|
+
visit(StatusPageGroupTreeUtil.buildTree({
|
|
257
|
+
statusPageGroups: data.statusPageGroups,
|
|
258
|
+
index: index,
|
|
259
|
+
}));
|
|
260
|
+
return expandableIds;
|
|
261
|
+
}
|
|
262
|
+
/*
|
|
263
|
+
* What the page opens with.
|
|
264
|
+
*
|
|
265
|
+
* Everything down to maxAutoExpandDepth is open, and deeper levels start
|
|
266
|
+
* shut. A hierarchy that is fully expanded on arrival is unreadable at any
|
|
267
|
+
* real size, and one that is fully collapsed hides the fact that it nests at
|
|
268
|
+
* all - which is the single thing this page exists to show.
|
|
269
|
+
*/
|
|
270
|
+
static getDefaultExpandedGroupIds(data) {
|
|
271
|
+
const index = this.resolveIndex(data);
|
|
272
|
+
const maxAutoExpandDepth = data.maxAutoExpandDepth === undefined ? 1 : data.maxAutoExpandDepth;
|
|
273
|
+
const expandedIds = new Set();
|
|
274
|
+
const visit = (nodes) => {
|
|
275
|
+
for (const node of nodes) {
|
|
276
|
+
if (node.children.length > 0 && node.depth <= maxAutoExpandDepth) {
|
|
277
|
+
expandedIds.add(this.getGroupId(node.group));
|
|
278
|
+
}
|
|
279
|
+
visit(node.children);
|
|
280
|
+
}
|
|
281
|
+
};
|
|
282
|
+
visit(StatusPageGroupTreeUtil.buildTree({
|
|
283
|
+
statusPageGroups: data.statusPageGroups,
|
|
284
|
+
index: index,
|
|
285
|
+
}));
|
|
286
|
+
return expandedIds;
|
|
287
|
+
}
|
|
288
|
+
static getSummary(data) {
|
|
289
|
+
const index = this.resolveIndex(data);
|
|
290
|
+
let topLevelCount = 0;
|
|
291
|
+
let deepestDepth = -1;
|
|
292
|
+
const visit = (nodes) => {
|
|
293
|
+
for (const node of nodes) {
|
|
294
|
+
if (node.depth === 0) {
|
|
295
|
+
topLevelCount++;
|
|
296
|
+
}
|
|
297
|
+
if (node.depth > deepestDepth) {
|
|
298
|
+
deepestDepth = node.depth;
|
|
299
|
+
}
|
|
300
|
+
visit(node.children);
|
|
301
|
+
}
|
|
302
|
+
};
|
|
303
|
+
visit(StatusPageGroupTreeUtil.buildTree({
|
|
304
|
+
statusPageGroups: data.statusPageGroups,
|
|
305
|
+
index: index,
|
|
306
|
+
}));
|
|
307
|
+
const totalCount = data.statusPageGroups.length;
|
|
308
|
+
return {
|
|
309
|
+
totalCount: totalCount,
|
|
310
|
+
topLevelCount: topLevelCount,
|
|
311
|
+
nestedCount: totalCount - topLevelCount,
|
|
312
|
+
levelCount: deepestDepth + 1,
|
|
313
|
+
};
|
|
314
|
+
}
|
|
315
|
+
/* "Corporate › Region 1000 › Market 1001", the group itself last. */
|
|
316
|
+
static getGroupPathLabel(data) {
|
|
317
|
+
const ancestors = StatusPageGroupTreeUtil.getAncestorGroups({
|
|
318
|
+
statusPageGroup: data.statusPageGroup,
|
|
319
|
+
statusPageGroups: data.statusPageGroups,
|
|
320
|
+
index: this.resolveIndex(data),
|
|
321
|
+
}).reverse();
|
|
322
|
+
return [
|
|
323
|
+
...ancestors.map((ancestor) => {
|
|
324
|
+
return ancestor.name || "";
|
|
325
|
+
}),
|
|
326
|
+
data.statusPageGroup.name || "",
|
|
327
|
+
].join(STATUS_PAGE_GROUP_PATH_SEPARATOR);
|
|
328
|
+
}
|
|
329
|
+
/*
|
|
330
|
+
* The groups that may legally be picked as a parent, in tree order.
|
|
331
|
+
*
|
|
332
|
+
* StatusPageGroupService is the only place that can decide this for real - it
|
|
333
|
+
* is the one that sees the tree at write time - so this is not validation, it
|
|
334
|
+
* is the picker refusing to offer a choice it already knows the API will
|
|
335
|
+
* reject. The three rules it applies are the same three the service enforces:
|
|
336
|
+
* a group is not its own parent, a group does not move under its own sub
|
|
337
|
+
* group, and the moved subtree still has to fit inside MaxNestingDepth.
|
|
338
|
+
*/
|
|
339
|
+
static getParentGroupCandidates(data) {
|
|
340
|
+
const index = this.resolveIndex(data);
|
|
341
|
+
const statusPageGroupId = data.statusPageGroupId || "";
|
|
342
|
+
const group = statusPageGroupId
|
|
343
|
+
? index.byId.get(statusPageGroupId)
|
|
344
|
+
: undefined;
|
|
345
|
+
const excludedIds = new Set();
|
|
346
|
+
let subtreeHeight = 0;
|
|
347
|
+
if (group) {
|
|
348
|
+
excludedIds.add(statusPageGroupId);
|
|
349
|
+
for (const descendant of StatusPageGroupTreeUtil.getDescendantGroups({
|
|
350
|
+
statusPageGroup: group,
|
|
351
|
+
statusPageGroups: data.statusPageGroups,
|
|
352
|
+
index: index,
|
|
353
|
+
})) {
|
|
354
|
+
excludedIds.add(this.getGroupId(descendant));
|
|
355
|
+
}
|
|
356
|
+
subtreeHeight = this.getSubtreeHeight({
|
|
357
|
+
statusPageGroup: group,
|
|
358
|
+
statusPageGroups: data.statusPageGroups,
|
|
359
|
+
index: index,
|
|
360
|
+
});
|
|
361
|
+
}
|
|
362
|
+
const candidates = [];
|
|
363
|
+
const visit = (nodes) => {
|
|
364
|
+
for (const node of nodes) {
|
|
365
|
+
const nodeId = this.getGroupId(node.group);
|
|
366
|
+
if (excludedIds.has(nodeId)) {
|
|
367
|
+
/*
|
|
368
|
+
* Its whole subtree is excluded too, and buildTree already nested
|
|
369
|
+
* them under it, so there is nothing below worth walking.
|
|
370
|
+
*/
|
|
371
|
+
continue;
|
|
372
|
+
}
|
|
373
|
+
if (node.depth + 1 + subtreeHeight <
|
|
374
|
+
StatusPageGroupTreeUtil.MaxNestingDepth) {
|
|
375
|
+
candidates.push(node.group);
|
|
376
|
+
}
|
|
377
|
+
visit(node.children);
|
|
378
|
+
}
|
|
379
|
+
};
|
|
380
|
+
visit(StatusPageGroupTreeUtil.buildTree({
|
|
381
|
+
statusPageGroups: data.statusPageGroups,
|
|
382
|
+
index: index,
|
|
383
|
+
}));
|
|
384
|
+
return candidates;
|
|
385
|
+
}
|
|
386
|
+
/*
|
|
387
|
+
* How many levels hang below this group. 0 for a leaf, 1 for a group whose
|
|
388
|
+
* children are all leaves. This is the part of a move the server also has to
|
|
389
|
+
* account for: a group carries its subtree with it.
|
|
390
|
+
*/
|
|
391
|
+
static getSubtreeHeight(data) {
|
|
392
|
+
const index = this.resolveIndex(data);
|
|
393
|
+
const ownDepth = StatusPageGroupTreeUtil.getDepth({
|
|
394
|
+
statusPageGroup: data.statusPageGroup,
|
|
395
|
+
statusPageGroups: data.statusPageGroups,
|
|
396
|
+
index: index,
|
|
397
|
+
});
|
|
398
|
+
let height = 0;
|
|
399
|
+
for (const descendant of StatusPageGroupTreeUtil.getDescendantGroups({
|
|
400
|
+
statusPageGroup: data.statusPageGroup,
|
|
401
|
+
statusPageGroups: data.statusPageGroups,
|
|
402
|
+
index: index,
|
|
403
|
+
})) {
|
|
404
|
+
const relativeDepth = StatusPageGroupTreeUtil.getDepth({
|
|
405
|
+
statusPageGroup: descendant,
|
|
406
|
+
statusPageGroups: data.statusPageGroups,
|
|
407
|
+
index: index,
|
|
408
|
+
}) - ownDepth;
|
|
409
|
+
if (relativeDepth > height) {
|
|
410
|
+
height = relativeDepth;
|
|
411
|
+
}
|
|
412
|
+
}
|
|
413
|
+
return height;
|
|
414
|
+
}
|
|
415
|
+
/*
|
|
416
|
+
* The `order` a group has to be given to swap places with the sibling above
|
|
417
|
+
* or below it.
|
|
418
|
+
*
|
|
419
|
+
* `order` is one flat sequence across the whole status page rather than one
|
|
420
|
+
* per parent, so a sibling's own order is the correct target: the service
|
|
421
|
+
* renumbers everything between the two, which is what keeps every other
|
|
422
|
+
* group's relative position intact.
|
|
423
|
+
*/
|
|
424
|
+
static getReorderTargetOrder(data) {
|
|
425
|
+
const index = this.resolveIndex(data);
|
|
426
|
+
const group = index.byId.get(data.statusPageGroupId);
|
|
427
|
+
if (!group) {
|
|
428
|
+
return null;
|
|
429
|
+
}
|
|
430
|
+
const neighbours = this.getSiblingNeighbours({
|
|
431
|
+
statusPageGroup: group,
|
|
432
|
+
statusPageGroups: data.statusPageGroups,
|
|
433
|
+
index: index,
|
|
434
|
+
});
|
|
435
|
+
const neighbourId = data.direction === "up"
|
|
436
|
+
? neighbours.previousSiblingId
|
|
437
|
+
: neighbours.nextSiblingId;
|
|
438
|
+
if (!neighbourId) {
|
|
439
|
+
return null;
|
|
440
|
+
}
|
|
441
|
+
const neighbour = index.byId.get(neighbourId);
|
|
442
|
+
if (!neighbour || typeof neighbour.order !== "number") {
|
|
443
|
+
return null;
|
|
444
|
+
}
|
|
445
|
+
return neighbour.order;
|
|
446
|
+
}
|
|
447
|
+
/*
|
|
448
|
+
* The groups drawn beside this one under the same parent, in render order.
|
|
449
|
+
*
|
|
450
|
+
* Top level rows read their neighbours from getRootGroups rather than from
|
|
451
|
+
* the parent buckets, because that is the list buildTree put them in: an
|
|
452
|
+
* orphan (a group whose parent was not fetched, or was deleted from under it)
|
|
453
|
+
* renders at the top level, and reading the bucket for its dangling parent id
|
|
454
|
+
* would tell it that it has no neighbours at all.
|
|
455
|
+
*/
|
|
456
|
+
static getSiblingGroups(data) {
|
|
457
|
+
const index = this.resolveIndex(data);
|
|
458
|
+
const parentId = StatusPageGroupTreeUtil.getParentId(data.statusPageGroup);
|
|
459
|
+
if (parentId && index.byId.has(parentId)) {
|
|
460
|
+
return StatusPageGroupTreeUtil.getChildGroups({
|
|
461
|
+
statusPageGroupId: parentId,
|
|
462
|
+
statusPageGroups: data.statusPageGroups,
|
|
463
|
+
index: index,
|
|
464
|
+
});
|
|
465
|
+
}
|
|
466
|
+
return StatusPageGroupTreeUtil.getRootGroups({
|
|
467
|
+
statusPageGroups: data.statusPageGroups,
|
|
468
|
+
index: index,
|
|
469
|
+
});
|
|
470
|
+
}
|
|
471
|
+
static getSiblingNeighbours(data) {
|
|
472
|
+
var _a, _b;
|
|
473
|
+
const siblings = ((_a = data.siblingLevel) === null || _a === void 0 ? void 0 : _a.siblings) ||
|
|
474
|
+
this.getSiblingGroups({
|
|
475
|
+
statusPageGroup: data.statusPageGroup,
|
|
476
|
+
statusPageGroups: data.statusPageGroups,
|
|
477
|
+
index: data.index,
|
|
478
|
+
});
|
|
479
|
+
const groupId = this.getGroupId(data.statusPageGroup);
|
|
480
|
+
const cachedPosition = (_b = data.siblingLevel) === null || _b === void 0 ? void 0 : _b.positionById.get(groupId);
|
|
481
|
+
const position = cachedPosition === undefined
|
|
482
|
+
? siblings.findIndex((sibling) => {
|
|
483
|
+
return this.getGroupId(sibling) === groupId;
|
|
484
|
+
})
|
|
485
|
+
: cachedPosition;
|
|
486
|
+
if (position < 0) {
|
|
487
|
+
return { previousSiblingId: null, nextSiblingId: null };
|
|
488
|
+
}
|
|
489
|
+
const previous = siblings[position - 1];
|
|
490
|
+
const next = siblings[position + 1];
|
|
491
|
+
return {
|
|
492
|
+
previousSiblingId: previous ? this.getGroupId(previous) : null,
|
|
493
|
+
nextSiblingId: next ? this.getGroupId(next) : null,
|
|
494
|
+
};
|
|
495
|
+
}
|
|
496
|
+
static getAncestorIdsOfMatches(data) {
|
|
497
|
+
const ancestorIds = new Set();
|
|
498
|
+
for (const group of data.statusPageGroups) {
|
|
499
|
+
if (!data.matchedIds.has(this.getGroupId(group))) {
|
|
500
|
+
continue;
|
|
501
|
+
}
|
|
502
|
+
for (const ancestor of StatusPageGroupTreeUtil.getAncestorGroups({
|
|
503
|
+
statusPageGroup: group,
|
|
504
|
+
statusPageGroups: data.statusPageGroups,
|
|
505
|
+
index: data.index,
|
|
506
|
+
})) {
|
|
507
|
+
ancestorIds.add(this.getGroupId(ancestor));
|
|
508
|
+
}
|
|
509
|
+
}
|
|
510
|
+
return ancestorIds;
|
|
511
|
+
}
|
|
512
|
+
static countDescendants(data) {
|
|
513
|
+
let count = 0;
|
|
514
|
+
for (const child of data.node.children) {
|
|
515
|
+
count += 1 + this.countDescendants({ node: child });
|
|
516
|
+
}
|
|
517
|
+
return count;
|
|
518
|
+
}
|
|
519
|
+
/*
|
|
520
|
+
* Past MaxIndentColumns the outermost rails are dropped rather than the
|
|
521
|
+
* nearest ones: the columns closest to the row are the ones that say where it
|
|
522
|
+
* sits, and a row that has walked off the right of the card says nothing at
|
|
523
|
+
* all.
|
|
524
|
+
*/
|
|
525
|
+
static trimRails(data) {
|
|
526
|
+
const columnCount = this.getIndentColumnCount({
|
|
527
|
+
depth: data.depth,
|
|
528
|
+
});
|
|
529
|
+
/* One column is this row's own connector; the rest are ancestor rails. */
|
|
530
|
+
const railCount = Math.max(0, columnCount - 1);
|
|
531
|
+
if (data.rails.length <= railCount) {
|
|
532
|
+
return [...data.rails];
|
|
533
|
+
}
|
|
534
|
+
return data.rails.slice(data.rails.length - railCount);
|
|
535
|
+
}
|
|
536
|
+
static normalizeSearchText(searchText) {
|
|
537
|
+
return (searchText || "").trim().toLowerCase();
|
|
538
|
+
}
|
|
539
|
+
static getGroupId(statusPageGroup) {
|
|
540
|
+
var _a;
|
|
541
|
+
return ((_a = statusPageGroup._id) === null || _a === void 0 ? void 0 : _a.toString()) || "";
|
|
542
|
+
}
|
|
543
|
+
static resolveIndex(data) {
|
|
544
|
+
return (data.index ||
|
|
545
|
+
StatusPageGroupTreeUtil.buildIndex({
|
|
546
|
+
statusPageGroups: data.statusPageGroups,
|
|
547
|
+
}));
|
|
548
|
+
}
|
|
549
|
+
}
|
|
550
|
+
/*
|
|
551
|
+
* How many indent columns a row may draw before the tree stops stepping
|
|
552
|
+
* right. Nesting is capped on write at StatusPageGroupTreeUtil.MaxNestingDepth
|
|
553
|
+
* (10, so the deepest legal row sits at depth 9 and needs 9 columns), but rows
|
|
554
|
+
* written straight to the database are not capped, and a row that indents
|
|
555
|
+
* itself off the right of the card is worse than a row whose outermost rails
|
|
556
|
+
* are elided.
|
|
557
|
+
*/
|
|
558
|
+
StatusPageGroupHierarchyViewUtil.MaxIndentColumns = 10;
|
|
559
|
+
export default StatusPageGroupHierarchyViewUtil;
|
|
560
|
+
//# sourceMappingURL=GroupHierarchyView.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GroupHierarchyView.js","sourceRoot":"","sources":["../../../../Utils/StatusPage/GroupHierarchyView.ts"],"names":[],"mappings":"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"}
|