diff --git a/docs/sources/setup-grafana/configure-grafana/feature-toggles/index.md b/docs/sources/setup-grafana/configure-grafana/feature-toggles/index.md index ef8bc6a3396..46c13858bb3 100644 --- a/docs/sources/setup-grafana/configure-grafana/feature-toggles/index.md +++ b/docs/sources/setup-grafana/configure-grafana/feature-toggles/index.md @@ -191,11 +191,10 @@ Experimental features might be changed or removed without prior notice. | `queryLibrary` | Enables Query Library feature in Explore | | `logsExploreTableDefaultVisualization` | Sets the logs table as default visualisation in logs explore | | `alertingListViewV2` | Enables the new alert list view design | -| `dashboardRestore` | Enables deleted dashboard restore feature (backend only) | +| `dashboardRestore` | Enables deleted dashboard restore feature | | `alertingCentralAlertHistory` | Enables the new central alert history. | | `failWrongDSUID` | Throws an error if a datasource has an invalid UIDs | | `alertingApiServer` | Register Alerting APIs with the K8s API server | -| `dashboardRestoreUI` | Enables the frontend to be able to restore a recently deleted dashboard | | `dataplaneAggregator` | Enable grafana dataplane aggregator | | `newFiltersUI` | Enables new combobox style UI for the Ad hoc filters variable in scenes architecture | | `lokiSendDashboardPanelNames` | Send dashboard and panel names to Loki when querying | diff --git a/packages/grafana-data/src/types/featureToggles.gen.ts b/packages/grafana-data/src/types/featureToggles.gen.ts index b8124c22120..6283847aa1a 100644 --- a/packages/grafana-data/src/types/featureToggles.gen.ts +++ b/packages/grafana-data/src/types/featureToggles.gen.ts @@ -198,7 +198,6 @@ export interface FeatureToggles { zanzana?: boolean; passScopeToDashboardApi?: boolean; alertingApiServer?: boolean; - dashboardRestoreUI?: boolean; cloudWatchRoundUpEndTime?: boolean; cloudwatchMetricInsightsCrossAccount?: boolean; prometheusAzureOverrideAudience?: boolean; diff --git a/pkg/services/featuremgmt/registry.go b/pkg/services/featuremgmt/registry.go index ba68086a0af..1d289b98596 100644 --- a/pkg/services/featuremgmt/registry.go +++ b/pkg/services/featuremgmt/registry.go @@ -1255,10 +1255,11 @@ var ( }, { Name: "dashboardRestore", - Description: "Enables deleted dashboard restore feature (backend only)", + Description: "Enables deleted dashboard restore feature", Stage: FeatureStageExperimental, Owner: grafanaSearchAndStorageSquad, HideFromAdminPage: true, + Expression: "false", // enabled by default }, { Name: "datasourceProxyDisableRBAC", @@ -1367,13 +1368,6 @@ var ( Owner: grafanaAlertingSquad, RequiresRestart: true, }, - { - Name: "dashboardRestoreUI", - Description: "Enables the frontend to be able to restore a recently deleted dashboard", - Stage: FeatureStageExperimental, - Owner: grafanaFrontendPlatformSquad, - Expression: "false", // enabled by default - }, { Name: "cloudWatchRoundUpEndTime", Description: "Round up end time for metric queries to the next minute to avoid missing data", diff --git a/pkg/services/featuremgmt/toggles_gen.csv b/pkg/services/featuremgmt/toggles_gen.csv index 27dc4bcdf2a..3dd5ee565ce 100644 --- a/pkg/services/featuremgmt/toggles_gen.csv +++ b/pkg/services/featuremgmt/toggles_gen.csv @@ -179,7 +179,6 @@ failWrongDSUID,experimental,@grafana/plugins-platform-backend,false,false,false zanzana,experimental,@grafana/identity-access-team,false,false,false passScopeToDashboardApi,experimental,@grafana/dashboards-squad,false,false,false alertingApiServer,experimental,@grafana/alerting-squad,false,true,false -dashboardRestoreUI,experimental,@grafana/grafana-frontend-platform,false,false,false cloudWatchRoundUpEndTime,GA,@grafana/aws-datasources,false,false,false cloudwatchMetricInsightsCrossAccount,preview,@grafana/aws-datasources,false,false,true prometheusAzureOverrideAudience,deprecated,@grafana/partner-datasources,false,false,false diff --git a/pkg/services/featuremgmt/toggles_gen.go b/pkg/services/featuremgmt/toggles_gen.go index 147d0f4681e..1aee2335aee 100644 --- a/pkg/services/featuremgmt/toggles_gen.go +++ b/pkg/services/featuremgmt/toggles_gen.go @@ -668,7 +668,7 @@ const ( FlagNotificationBanner = "notificationBanner" // FlagDashboardRestore - // Enables deleted dashboard restore feature (backend only) + // Enables deleted dashboard restore feature FlagDashboardRestore = "dashboardRestore" // FlagDatasourceProxyDisableRBAC @@ -727,10 +727,6 @@ const ( // Register Alerting APIs with the K8s API server FlagAlertingApiServer = "alertingApiServer" - // FlagDashboardRestoreUI - // Enables the frontend to be able to restore a recently deleted dashboard - FlagDashboardRestoreUI = "dashboardRestoreUI" - // FlagCloudWatchRoundUpEndTime // Round up end time for metric queries to the next minute to avoid missing data FlagCloudWatchRoundUpEndTime = "cloudWatchRoundUpEndTime" diff --git a/pkg/services/featuremgmt/toggles_gen.json b/pkg/services/featuremgmt/toggles_gen.json index 797f974e49d..52088db76da 100644 --- a/pkg/services/featuremgmt/toggles_gen.json +++ b/pkg/services/featuremgmt/toggles_gen.json @@ -808,17 +808,18 @@ { "metadata": { "name": "dashboardRestore", - "resourceVersion": "1719321877748", + "resourceVersion": "1728397491294", "creationTimestamp": "2024-05-16T17:36:26Z", "annotations": { - "grafana.app/updatedTimestamp": "2024-06-25 13:24:37.748284 +0000 UTC" + "grafana.app/updatedTimestamp": "2024-10-08 14:24:51.294668 +0000 UTC" } }, "spec": { - "description": "Enables deleted dashboard restore feature (backend only)", + "description": "Enables deleted dashboard restore feature", "stage": "experimental", "codeowner": "@grafana/search-and-storage", - "hideFromAdminPage": true + "hideFromAdminPage": true, + "expression": "false" } }, { @@ -826,6 +827,7 @@ "name": "dashboardRestoreUI", "resourceVersion": "1720021873452", "creationTimestamp": "2024-06-25T14:43:13Z", + "deletionTimestamp": "2024-10-08T14:24:51Z", "annotations": { "grafana.app/updatedTimestamp": "2024-07-03 15:51:13.452477 +0000 UTC" } diff --git a/pkg/services/navtree/navtreeimpl/navtree.go b/pkg/services/navtree/navtreeimpl/navtree.go index e4bdfcf2bfc..4441b75d658 100644 --- a/pkg/services/navtree/navtreeimpl/navtree.go +++ b/pkg/services/navtree/navtreeimpl/navtree.go @@ -389,7 +389,7 @@ func (s *ServiceImpl) buildDashboardNavLinks(c *contextmodel.ReqContext) []*navt }) } - if s.features.IsEnabled(c.Req.Context(), featuremgmt.FlagDashboardRestoreUI) && (c.SignedInUser.GetOrgRole() == org.RoleAdmin || c.IsGrafanaAdmin) { + if s.features.IsEnabled(c.Req.Context(), featuremgmt.FlagDashboardRestore) && (c.SignedInUser.GetOrgRole() == org.RoleAdmin || c.IsGrafanaAdmin) { dashboardChildNavs = append(dashboardChildNavs, &navtree.NavLink{ Text: "Recently deleted", SubTitle: "Any items listed here for more than 30 days will be automatically deleted.", diff --git a/public/app/features/browse-dashboards/BrowseDashboardsPage.tsx b/public/app/features/browse-dashboards/BrowseDashboardsPage.tsx index 6d8d2b14e26..cb56a761ab9 100644 --- a/public/app/features/browse-dashboards/BrowseDashboardsPage.tsx +++ b/public/app/features/browse-dashboards/BrowseDashboardsPage.tsx @@ -121,7 +121,7 @@ const BrowseDashboardsPage = memo(() => { onEditTitle={showEditTitle ? onEditTitle : undefined} actions={ <> - {config.featureToggles.dashboardRestore && config.featureToggles.dashboardRestoreUI && hasAdminRights && ( + {config.featureToggles.dashboardRestore && hasAdminRights && (

diff --git a/public/app/features/dashboard-scene/settings/DeleteDashboardButton.tsx b/public/app/features/dashboard-scene/settings/DeleteDashboardButton.tsx index 19494d5663d..de55bc59a64 100644 --- a/public/app/features/dashboard-scene/settings/DeleteDashboardButton.tsx +++ b/public/app/features/dashboard-scene/settings/DeleteDashboardButton.tsx @@ -33,7 +33,7 @@ export function DeleteDashboardButton({ dashboard }: ButtonProps) { dashboard: 1, }, source: 'dashboard_scene_settings', - restore_enabled: config.featureToggles.dashboardRestoreUI, + restore_enabled: config.featureToggles.dashboardRestore, }); toggleModal(); if (dashboard.state.uid) { diff --git a/public/app/features/dashboard/components/DeleteDashboard/DeleteDashboardModal.tsx b/public/app/features/dashboard/components/DeleteDashboard/DeleteDashboardModal.tsx index d82f4fd56a0..2d777ba0bc2 100644 --- a/public/app/features/dashboard/components/DeleteDashboard/DeleteDashboardModal.tsx +++ b/public/app/features/dashboard/components/DeleteDashboard/DeleteDashboardModal.tsx @@ -34,7 +34,7 @@ const DeleteDashboardModalUnconnected = ({ hideModal, cleanUpDashboardAndVariabl dashboard: 1, }, source: 'dashboard_settings', - restore_enabled: config.featureToggles.dashboardRestoreUI, + restore_enabled: config.featureToggles.dashboardRestore, }); await deleteItems({ selectedItems: { diff --git a/public/app/features/dashboard/components/SaveDashboard/SaveDashboardErrorProxy.tsx b/public/app/features/dashboard/components/SaveDashboard/SaveDashboardErrorProxy.tsx index 2a5941c82e9..d65ad7a9cb0 100644 --- a/public/app/features/dashboard/components/SaveDashboard/SaveDashboardErrorProxy.tsx +++ b/public/app/features/dashboard/components/SaveDashboard/SaveDashboardErrorProxy.tsx @@ -31,7 +31,7 @@ export const SaveDashboardErrorProxy = ({ setErrorIsHandled, }: SaveDashboardErrorProxyProps) => { const { onDashboardSave } = useDashboardSave(); - const isRestoreDashboardsEnabled = config.featureToggles.dashboardRestore && config.featureToggles.dashboardRestoreUI; + const isRestoreDashboardsEnabled = config.featureToggles.dashboardRestore; return ( <> {error.data && error.data.status === 'version-mismatch' && ( diff --git a/public/app/routes/routes.tsx b/public/app/routes/routes.tsx index e5661244077..3355616189d 100644 --- a/public/app/routes/routes.tsx +++ b/public/app/routes/routes.tsx @@ -444,9 +444,9 @@ export function getAppRoutes(): RouteDescriptor[] { () => import(/* webpackChunkName: "SnapshotListPage" */ 'app/features/manage-dashboards/SnapshotListPage') ), }, - config.featureToggles.dashboardRestoreUI && { + config.featureToggles.dashboardRestore && { path: '/dashboard/recently-deleted', - roles: () => ['Admin'], + roles: () => ['Admin', 'ServerAdmin'], component: SafeDynamicImport( () => import(/* webpackChunkName: "RecentlyDeletedPage" */ 'app/features/browse-dashboards/RecentlyDeletedPage') ),