diff --git a/packages/grafana-runtime/src/config.ts b/packages/grafana-runtime/src/config.ts index 20da3e00667..8a55a128763 100644 --- a/packages/grafana-runtime/src/config.ts +++ b/packages/grafana-runtime/src/config.ts @@ -179,6 +179,7 @@ export class GrafanaBootConfig implements GrafanaConfig { rootFolderUID: string | undefined; localFileSystemAvailable: boolean | undefined; cloudMigrationIsTarget: boolean | undefined; + cloudMigrationFeedbackURL = ''; reportingStaticContext?: Record; exploreDefaultTimeOffset = '1h'; diff --git a/pkg/api/dtos/frontend_settings.go b/pkg/api/dtos/frontend_settings.go index e241d9af7cb..60a4964b56e 100644 --- a/pkg/api/dtos/frontend_settings.go +++ b/pkg/api/dtos/frontend_settings.go @@ -256,7 +256,8 @@ type FrontendSettingsDTO struct { PublicDashboardAccessToken string `json:"publicDashboardAccessToken"` PublicDashboardsEnabled bool `json:"publicDashboardsEnabled"` - CloudMigrationIsTarget bool `json:"cloudMigrationIsTarget"` + CloudMigrationIsTarget bool `json:"cloudMigrationIsTarget"` + CloudMigrationFeedbackURL string `json:"cloudMigrationFeedbackURL"` DateFormats setting.DateFormats `json:"dateFormats,omitempty"` diff --git a/pkg/api/frontendsettings.go b/pkg/api/frontendsettings.go index 18fca78c7fb..750ec9a9f11 100644 --- a/pkg/api/frontendsettings.go +++ b/pkg/api/frontendsettings.go @@ -223,6 +223,7 @@ func (hs *HTTPServer) getFrontendSettings(c *contextmodel.ReqContext) (*dtos.Fro PublicDashboardAccessToken: c.PublicDashboardAccessToken, PublicDashboardsEnabled: hs.Cfg.PublicDashboardsEnabled, CloudMigrationIsTarget: isCloudMigrationTarget, + CloudMigrationFeedbackURL: hs.Cfg.CloudMigration.FeedbackURL, SharedWithMeFolderUID: folder.SharedWithMeFolderUID, RootFolderUID: accesscontrol.GeneralFolderUID, LocalFileSystemAvailable: hs.Cfg.LocalFileSystemAvailable, diff --git a/pkg/setting/setting_cloud_migration.go b/pkg/setting/setting_cloud_migration.go index 9434e9cb4ea..66dd1d3c194 100644 --- a/pkg/setting/setting_cloud_migration.go +++ b/pkg/setting/setting_cloud_migration.go @@ -23,6 +23,7 @@ type CloudMigrationSettings struct { CreateTokenTimeout time.Duration DeleteTokenTimeout time.Duration TokenExpiresAfter time.Duration + FeedbackURL string IsDeveloperMode bool } @@ -47,6 +48,7 @@ func (cfg *Cfg) readCloudMigrationSettings() { cfg.CloudMigration.DeleteTokenTimeout = cloudMigration.Key("delete_token_timeout").MustDuration(5 * time.Second) cfg.CloudMigration.TokenExpiresAfter = cloudMigration.Key("token_expires_after").MustDuration(7 * 24 * time.Hour) cfg.CloudMigration.IsDeveloperMode = cloudMigration.Key("developer_mode").MustBool(false) + cfg.CloudMigration.FeedbackURL = cloudMigration.Key("feedback_url").MustString("") if cfg.CloudMigration.SnapshotFolder == "" { homeDir, _ := os.UserHomeDir() diff --git a/public/app/features/migrate-to-cloud/MigrateToCloud.tsx b/public/app/features/migrate-to-cloud/MigrateToCloud.tsx index bbcc8a7e62b..ffd80d48f2f 100644 --- a/public/app/features/migrate-to-cloud/MigrateToCloud.tsx +++ b/public/app/features/migrate-to-cloud/MigrateToCloud.tsx @@ -1,9 +1,33 @@ import { config } from '@grafana/runtime'; +import { Alert } from '@grafana/ui'; import { Page } from 'app/core/components/Page/Page'; +import { Trans, t } from '../../core/internationalization'; + import { Page as CloudPage } from './cloud/Page'; import { Page as OnPremPage } from './onprem/Page'; export default function MigrateToCloud() { - return {config.cloudMigrationIsTarget ? : }; + const feedbackURL = config.cloudMigrationFeedbackURL; + return ( + + { + window.location.href = feedbackURL; + } + : undefined + } + > + + Help us improve this feature by providing feedback and reporting any issues. + + + {config.cloudMigrationIsTarget ? : } + + ); } diff --git a/public/locales/en-US/grafana.json b/public/locales/en-US/grafana.json index baff010eb17..b12ab64d930 100644 --- a/public/locales/en-US/grafana.json +++ b/public/locales/en-US/grafana.json @@ -1070,6 +1070,11 @@ "link-title": "Grafana Cloud pricing", "title": "How much does it cost?" }, + "public-preview": { + "button-text": "Give feedback", + "message": "Help us improve this feature by providing feedback and reporting any issues.", + "title": "Migrate to Grafana Cloud is in public preview" + }, "resource-status": { "error-details-button": "Details", "failed": "Error", diff --git a/public/locales/pseudo-LOCALE/grafana.json b/public/locales/pseudo-LOCALE/grafana.json index 9b9c4e28c40..9bea8e21ee3 100644 --- a/public/locales/pseudo-LOCALE/grafana.json +++ b/public/locales/pseudo-LOCALE/grafana.json @@ -1070,6 +1070,11 @@ "link-title": "Ğřäƒäʼnä Cľőūđ přįčįʼnģ", "title": "Ħőŵ mūčĥ đőęş įŧ čőşŧ?" }, + "public-preview": { + "button-text": "Ğįvę ƒęęđþäčĸ", + "message": "Ħęľp ūş įmpřővę ŧĥįş ƒęäŧūřę þy přővįđįʼnģ ƒęęđþäčĸ äʼnđ řępőřŧįʼnģ äʼny įşşūęş.", + "title": "Mįģřäŧę ŧő Ğřäƒäʼnä Cľőūđ įş įʼn pūþľįč přęvįęŵ" + }, "resource-status": { "error-details-button": "Đęŧäįľş", "failed": "Ēřřőř",