diff --git a/pkg/services/featuremgmt/models.go b/pkg/services/featuremgmt/models.go index ca5985f1eb7..f3f15ee7a11 100644 --- a/pkg/services/featuremgmt/models.go +++ b/pkg/services/featuremgmt/models.go @@ -4,6 +4,7 @@ import ( "bytes" "context" "encoding/json" + "time" ) type FeatureToggles interface { @@ -110,6 +111,7 @@ type FeatureFlag struct { Description string `json:"description"` Stage FeatureFlagStage `json:"stage,omitempty"` DocsURL string `json:"docsURL,omitempty"` + Created time.Time `json:"created,omitempty"` // when the flag was introduced // Owner person or team that owns this feature flag Owner codeowner `json:"-"` diff --git a/pkg/services/featuremgmt/registry.go b/pkg/services/featuremgmt/registry.go index 22004e59248..0cb1951ced1 100644 --- a/pkg/services/featuremgmt/registry.go +++ b/pkg/services/featuremgmt/registry.go @@ -6,6 +6,10 @@ package featuremgmt +import ( + "time" +) + var ( falsePtr = boolPtr(false) truePtr = boolPtr(true) @@ -18,6 +22,7 @@ var ( Owner: grafanaAsCodeSquad, HideFromAdminPage: true, AllowSelfServe: falsePtr, + Created: time.Date(2022, time.May, 24, 12, 0, 0, 0, time.UTC), }, { Name: "live-service-web-worker", @@ -25,6 +30,7 @@ var ( Stage: FeatureStageExperimental, FrontendOnly: true, Owner: grafanaAppPlatformSquad, + Created: time.Date(2021, time.November, 9, 12, 0, 0, 0, time.UTC), }, { Name: "queryOverLive", @@ -32,6 +38,7 @@ var ( Stage: FeatureStageExperimental, FrontendOnly: true, Owner: grafanaAppPlatformSquad, + Created: time.Date(2022, time.January, 5, 12, 0, 0, 0, time.UTC), }, { Name: "panelTitleSearch", @@ -39,6 +46,7 @@ var ( Stage: FeatureStagePublicPreview, Owner: grafanaAppPlatformSquad, HideFromAdminPage: true, + Created: time.Date(2022, time.February, 15, 12, 0, 0, 0, time.UTC), }, { Name: "publicDashboards", @@ -47,6 +55,7 @@ var ( Owner: grafanaSharingSquad, Expression: "true", // enabled by default AllowSelfServe: truePtr, + Created: time.Date(2022, time.April, 7, 12, 0, 0, 0, time.UTC), }, { Name: "publicDashboardsEmailSharing", @@ -56,12 +65,14 @@ var ( Owner: grafanaSharingSquad, HideFromDocs: true, HideFromAdminPage: true, + Created: time.Date(2022, time.December, 21, 12, 0, 0, 0, time.UTC), }, { Name: "lokiExperimentalStreaming", Description: "Support new streaming approach for loki (prototype, needs special loki build)", Stage: FeatureStageExperimental, Owner: grafanaObservabilityLogsSquad, + Created: time.Date(2023, time.June, 19, 12, 0, 0, 0, time.UTC), }, { Name: "featureHighlights", @@ -69,24 +80,28 @@ var ( Stage: FeatureStageGeneralAvailability, Owner: grafanaAsCodeSquad, AllowSelfServe: truePtr, + Created: time.Date(2022, time.February, 3, 12, 0, 0, 0, time.UTC), }, { Name: "migrationLocking", Description: "Lock database during migrations", Stage: FeatureStagePublicPreview, Owner: grafanaBackendPlatformSquad, + Created: time.Date(2022, time.February, 15, 12, 0, 0, 0, time.UTC), }, { Name: "storage", Description: "Configurable storage for dashboards, datasources, and resources", Stage: FeatureStageExperimental, Owner: grafanaAppPlatformSquad, + Created: time.Date(2022, time.March, 17, 12, 0, 0, 0, time.UTC), }, { Name: "correlations", Description: "Correlations page", Stage: FeatureStagePublicPreview, Owner: grafanaExploreSquad, + Created: time.Date(2022, time.September, 16, 12, 0, 0, 0, time.UTC), }, { Name: "exploreContentOutline", @@ -96,12 +111,14 @@ var ( Expression: "true", // enabled by default FrontendOnly: true, AllowSelfServe: truePtr, + Created: time.Date(2023, time.November, 3, 12, 0, 0, 0, time.UTC), }, { Name: "datasourceQueryMultiStatus", Description: "Introduce HTTP 207 Multi Status for api/ds/query", Stage: FeatureStageExperimental, Owner: grafanaPluginsPlatformSquad, + Created: time.Date(2022, time.May, 3, 12, 0, 0, 0, time.UTC), }, { Name: "traceToMetrics", @@ -109,6 +126,7 @@ var ( Stage: FeatureStageExperimental, FrontendOnly: true, Owner: grafanaObservabilityTracesAndProfilingSquad, + Created: time.Date(2022, time.March, 7, 12, 0, 0, 0, time.UTC), }, { Name: "autoMigrateOldPanels", @@ -116,6 +134,7 @@ var ( Stage: FeatureStagePublicPreview, FrontendOnly: true, Owner: grafanaDatavizSquad, + Created: time.Date(2022, time.June, 11, 12, 0, 0, 0, time.UTC), }, { Name: "disableAngular", @@ -124,6 +143,7 @@ var ( FrontendOnly: true, Owner: grafanaDatavizSquad, HideFromAdminPage: true, + Created: time.Date(2023, time.March, 23, 12, 0, 0, 0, time.UTC), }, { Name: "canvasPanelNesting", @@ -132,6 +152,7 @@ var ( FrontendOnly: true, Owner: grafanaDatavizSquad, HideFromAdminPage: true, + Created: time.Date(2022, time.May, 31, 12, 0, 0, 0, time.UTC), }, { Name: "newVizTooltips", @@ -140,6 +161,7 @@ var ( FrontendOnly: true, Owner: grafanaDatavizSquad, AllowSelfServe: truePtr, + Created: time.Date(2023, time.November, 3, 12, 0, 0, 0, time.UTC), }, { Name: "scenes", @@ -147,6 +169,7 @@ var ( Stage: FeatureStageExperimental, FrontendOnly: true, Owner: grafanaDashboardsSquad, + Created: time.Date(2022, time.July, 7, 12, 0, 0, 0, time.UTC), }, { Name: "disableSecretsCompatibility", @@ -154,12 +177,14 @@ var ( Stage: FeatureStageExperimental, RequiresRestart: true, Owner: hostedGrafanaTeam, + Created: time.Date(2022, time.July, 13, 12, 0, 0, 0, time.UTC), }, { Name: "logRequestsInstrumentedAsUnknown", Description: "Logs the path for requests that are instrumented as unknown", Stage: FeatureStageExperimental, Owner: hostedGrafanaTeam, + Created: time.Date(2022, time.June, 10, 12, 0, 0, 0, time.UTC), }, { Name: "dataConnectionsConsole", @@ -168,6 +193,7 @@ var ( Expression: "true", // turned on by default Owner: grafanaPluginsPlatformSquad, AllowSelfServe: truePtr, + Created: time.Date(2022, time.June, 1, 12, 0, 0, 0, time.UTC), }, { // Some plugins rely on topnav feature flag being enabled, so we cannot remove this until we @@ -177,6 +203,7 @@ var ( Stage: FeatureStageDeprecated, Expression: "true", // enabled by default Owner: grafanaFrontendPlatformSquad, + Created: time.Date(2022, time.June, 20, 12, 0, 0, 0, time.UTC), }, { Name: "dockedMegaMenu", @@ -184,6 +211,7 @@ var ( Stage: FeatureStageExperimental, FrontendOnly: true, Owner: grafanaFrontendPlatformSquad, + Created: time.Date(2023, time.September, 18, 12, 0, 0, 0, time.UTC), }, { Name: "grpcServer", @@ -191,6 +219,7 @@ var ( Stage: FeatureStagePublicPreview, Owner: grafanaAppPlatformSquad, HideFromAdminPage: true, + Created: time.Date(2022, time.September, 27, 12, 0, 0, 0, time.UTC), }, { Name: "entityStore", @@ -198,6 +227,7 @@ var ( Stage: FeatureStageExperimental, RequiresDevMode: true, Owner: grafanaAppPlatformSquad, + Created: time.Date(2022, time.December, 1, 12, 0, 0, 0, time.UTC), }, { Name: "cloudWatchCrossAccountQuerying", @@ -206,6 +236,7 @@ var ( Expression: "true", // enabled by default Owner: awsDatasourcesSquad, AllowSelfServe: truePtr, + Created: time.Date(2022, time.November, 28, 12, 0, 0, 0, time.UTC), }, { Name: "redshiftAsyncQueryDataSupport", @@ -214,6 +245,7 @@ var ( Expression: "true", // enabled by default Owner: awsDatasourcesSquad, AllowSelfServe: falsePtr, + Created: time.Date(2022, time.August, 27, 12, 0, 0, 0, time.UTC), }, { Name: "athenaAsyncQueryDataSupport", @@ -223,24 +255,28 @@ var ( FrontendOnly: true, Owner: awsDatasourcesSquad, AllowSelfServe: falsePtr, + Created: time.Date(2022, time.August, 27, 12, 0, 0, 0, time.UTC), }, { Name: "cloudwatchNewRegionsHandler", Description: "Refactor of /regions endpoint, no user-facing changes", Stage: FeatureStageExperimental, Owner: awsDatasourcesSquad, + Created: time.Date(2023, time.September, 25, 12, 0, 0, 0, time.UTC), }, { Name: "showDashboardValidationWarnings", Description: "Show warnings when dashboards do not validate against the schema", Stage: FeatureStageExperimental, Owner: grafanaDashboardsSquad, + Created: time.Date(2022, time.October, 14, 12, 0, 0, 0, time.UTC), }, { Name: "mysqlAnsiQuotes", Description: "Use double quotes to escape keyword in a MySQL query", Stage: FeatureStageExperimental, Owner: grafanaBackendPlatformSquad, + Created: time.Date(2022, time.October, 12, 12, 0, 0, 0, time.UTC), }, { Name: "accessControlOnCall", @@ -248,12 +284,14 @@ var ( Stage: FeatureStagePublicPreview, Owner: identityAccessTeam, HideFromAdminPage: true, + Created: time.Date(2022, time.October, 19, 12, 0, 0, 0, time.UTC), }, { Name: "nestedFolders", Description: "Enable folder nesting", Stage: FeatureStagePublicPreview, Owner: grafanaBackendPlatformSquad, + Created: time.Date(2022, time.October, 22, 12, 0, 0, 0, time.UTC), }, { Name: "nestedFolderPicker", @@ -263,6 +301,7 @@ var ( FrontendOnly: true, Expression: "true", // enabled by default AllowSelfServe: truePtr, + Created: time.Date(2023, time.July, 24, 12, 0, 0, 0, time.UTC), }, { Name: "accessTokenExpirationCheck", @@ -270,6 +309,7 @@ var ( Stage: FeatureStageGeneralAvailability, Owner: identityAccessTeam, AllowSelfServe: falsePtr, + Created: time.Date(2022, time.November, 14, 12, 0, 0, 0, time.UTC), }, { Name: "emptyDashboardPage", @@ -280,6 +320,7 @@ var ( Owner: grafanaDashboardsSquad, AllowSelfServe: falsePtr, HideFromAdminPage: true, + Created: time.Date(2023, time.March, 28, 12, 0, 0, 0, time.UTC), }, { Name: "disablePrometheusExemplarSampling", @@ -287,12 +328,14 @@ var ( Stage: FeatureStageGeneralAvailability, Owner: grafanaObservabilityMetricsSquad, AllowSelfServe: truePtr, + Created: time.Date(2022, time.December, 19, 12, 0, 0, 0, time.UTC), }, { Name: "alertingBacktesting", Description: "Rule backtesting API for alerting", Stage: FeatureStageExperimental, Owner: grafanaAlertingSquad, + Created: time.Date(2022, time.October, 20, 12, 0, 0, 0, time.UTC), }, { Name: "editPanelCSVDragAndDrop", @@ -300,6 +343,7 @@ var ( FrontendOnly: true, Stage: FeatureStageExperimental, Owner: grafanaBiSquad, + Created: time.Date(2022, time.December, 20, 12, 0, 0, 0, time.UTC), }, { Name: "alertingNoNormalState", @@ -308,6 +352,7 @@ var ( RequiresRestart: false, Owner: grafanaAlertingSquad, HideFromAdminPage: true, + Created: time.Date(2023, time.January, 14, 12, 0, 0, 0, time.UTC), }, { Name: "logsContextDatasourceUi", @@ -317,6 +362,7 @@ var ( Owner: grafanaObservabilityLogsSquad, Expression: "true", // turned on by default AllowSelfServe: truePtr, + Created: time.Date(2023, time.January, 27, 12, 0, 0, 0, time.UTC), }, { Name: "lokiQuerySplitting", @@ -326,6 +372,7 @@ var ( Owner: grafanaObservabilityLogsSquad, Expression: "true", // turned on by default AllowSelfServe: truePtr, + Created: time.Date(2023, time.February, 9, 12, 0, 0, 0, time.UTC), }, { Name: "lokiQuerySplittingConfig", @@ -333,12 +380,14 @@ var ( Stage: FeatureStageExperimental, FrontendOnly: true, Owner: grafanaObservabilityLogsSquad, + Created: time.Date(2023, time.March, 20, 12, 0, 0, 0, time.UTC), }, { Name: "individualCookiePreferences", Description: "Support overriding cookie preferences per user", Stage: FeatureStageExperimental, Owner: grafanaBackendPlatformSquad, + Created: time.Date(2023, time.February, 23, 12, 0, 0, 0, time.UTC), }, { Name: "prometheusMetricEncyclopedia", @@ -348,6 +397,7 @@ var ( FrontendOnly: true, Owner: grafanaObservabilityMetricsSquad, AllowSelfServe: truePtr, + Created: time.Date(2023, time.March, 7, 12, 0, 0, 0, time.UTC), }, { Name: "influxdbBackendMigration", @@ -357,12 +407,14 @@ var ( Owner: grafanaObservabilityMetricsSquad, Expression: "true", // enabled by default AllowSelfServe: falsePtr, + Created: time.Date(2023, time.March, 15, 12, 0, 0, 0, time.UTC), }, { Name: "influxqlStreamingParser", Description: "Enable streaming JSON parser for InfluxDB datasource InfluxQL query language", Stage: FeatureStageExperimental, Owner: grafanaObservabilityMetricsSquad, + Created: time.Date(2023, time.November, 29, 12, 0, 0, 0, time.UTC), }, { Name: "clientTokenRotation", @@ -371,6 +423,7 @@ var ( Expression: "true", Owner: identityAccessTeam, AllowSelfServe: falsePtr, + Created: time.Date(2023, time.March, 23, 12, 0, 0, 0, time.UTC), }, { Name: "prometheusDataplane", @@ -379,6 +432,7 @@ var ( Stage: FeatureStageGeneralAvailability, Owner: grafanaObservabilityMetricsSquad, AllowSelfServe: truePtr, + Created: time.Date(2023, time.March, 29, 12, 0, 0, 0, time.UTC), }, { Name: "lokiMetricDataplane", @@ -387,12 +441,14 @@ var ( Expression: "true", Owner: grafanaObservabilityLogsSquad, AllowSelfServe: truePtr, + Created: time.Date(2023, time.April, 13, 12, 0, 0, 0, time.UTC), }, { Name: "lokiLogsDataplane", Description: "Changes logs responses from Loki to be compliant with the dataplane specification.", Stage: FeatureStageExperimental, Owner: grafanaObservabilityLogsSquad, + Created: time.Date(2023, time.July, 13, 12, 0, 0, 0, time.UTC), }, { Name: "dataplaneFrontendFallback", @@ -402,36 +458,42 @@ var ( Expression: "true", Owner: grafanaObservabilityMetricsSquad, AllowSelfServe: truePtr, + Created: time.Date(2023, time.April, 24, 12, 0, 0, 0, time.UTC), }, { Name: "disableSSEDataplane", Description: "Disables dataplane specific processing in server side expressions.", Stage: FeatureStageExperimental, Owner: grafanaObservabilityMetricsSquad, + Created: time.Date(2023, time.April, 24, 12, 0, 0, 0, time.UTC), }, { Name: "alertStateHistoryLokiSecondary", Description: "Enable Grafana to write alert state history to an external Loki instance in addition to Grafana annotations.", Stage: FeatureStageExperimental, Owner: grafanaAlertingSquad, + Created: time.Date(2023, time.March, 30, 12, 0, 0, 0, time.UTC), }, { Name: "alertStateHistoryLokiPrimary", Description: "Enable a remote Loki instance as the primary source for state history reads.", Stage: FeatureStageExperimental, Owner: grafanaAlertingSquad, + Created: time.Date(2023, time.March, 30, 12, 0, 0, 0, time.UTC), }, { Name: "alertStateHistoryLokiOnly", Description: "Disable Grafana alerts from emitting annotations when a remote Loki instance is available.", Stage: FeatureStageExperimental, Owner: grafanaAlertingSquad, + Created: time.Date(2023, time.March, 30, 12, 0, 0, 0, time.UTC), }, { Name: "unifiedRequestLog", Description: "Writes error logs to the request logger", Stage: FeatureStageExperimental, Owner: grafanaBackendPlatformSquad, + Created: time.Date(2023, time.March, 31, 12, 0, 0, 0, time.UTC), }, { Name: "renderAuthJWT", @@ -439,6 +501,7 @@ var ( Stage: FeatureStagePublicPreview, Owner: grafanaAsCodeSquad, HideFromAdminPage: true, + Created: time.Date(2023, time.April, 3, 12, 0, 0, 0, time.UTC), }, { Name: "externalServiceAuth", @@ -446,6 +509,7 @@ var ( Stage: FeatureStageExperimental, RequiresDevMode: true, Owner: identityAccessTeam, + Created: time.Date(2023, time.April, 11, 12, 0, 0, 0, time.UTC), }, { Name: "refactorVariablesTimeRange", @@ -453,6 +517,7 @@ var ( Stage: FeatureStagePublicPreview, Owner: grafanaDashboardsSquad, HideFromAdminPage: true, // Non-feature, used to test out a bug fix that impacts the performance of template variables. + Created: time.Date(2023, time.June, 6, 12, 0, 0, 0, time.UTC), }, { Name: "useCachingService", @@ -462,6 +527,7 @@ var ( RequiresRestart: true, Expression: "true", // enabled by default AllowSelfServe: falsePtr, + Created: time.Date(2023, time.April, 12, 12, 0, 0, 0, time.UTC), }, { Name: "enableElasticsearchBackendQuerying", @@ -470,6 +536,7 @@ var ( Owner: grafanaObservabilityLogsSquad, Expression: "true", // enabled by default AllowSelfServe: truePtr, + Created: time.Date(2023, time.April, 14, 12, 0, 0, 0, time.UTC), }, { Name: "advancedDataSourcePicker", @@ -480,6 +547,7 @@ var ( Owner: grafanaDashboardsSquad, AllowSelfServe: falsePtr, HideFromAdminPage: true, + Created: time.Date(2023, time.April, 14, 12, 0, 0, 0, time.UTC), }, { Name: "faroDatasourceSelector", @@ -487,6 +555,7 @@ var ( Stage: FeatureStagePublicPreview, FrontendOnly: true, Owner: appO11ySquad, + Created: time.Date(2023, time.May, 4, 12, 0, 0, 0, time.UTC), }, { Name: "enableDatagridEditing", @@ -494,6 +563,7 @@ var ( FrontendOnly: true, Stage: FeatureStagePublicPreview, Owner: grafanaBiSquad, + Created: time.Date(2023, time.April, 24, 12, 0, 0, 0, time.UTC), }, { Name: "extraThemes", @@ -501,6 +571,7 @@ var ( FrontendOnly: true, Stage: FeatureStageExperimental, Owner: grafanaFrontendPlatformSquad, + Created: time.Date(2023, time.May, 10, 12, 0, 0, 0, time.UTC), }, { Name: "lokiPredefinedOperations", @@ -508,6 +579,7 @@ var ( FrontendOnly: true, Stage: FeatureStageExperimental, Owner: grafanaObservabilityLogsSquad, + Created: time.Date(2023, time.June, 2, 12, 0, 0, 0, time.UTC), }, { Name: "pluginsFrontendSandbox", @@ -515,6 +587,7 @@ var ( Stage: FeatureStageExperimental, FrontendOnly: true, Owner: grafanaPluginsPlatformSquad, + Created: time.Date(2023, time.June, 5, 12, 0, 0, 0, time.UTC), }, { Name: "dashboardEmbed", @@ -522,6 +595,7 @@ var ( FrontendOnly: true, Stage: FeatureStageExperimental, Owner: grafanaAsCodeSquad, + Created: time.Date(2023, time.July, 6, 12, 0, 0, 0, time.UTC), }, { Name: "frontendSandboxMonitorOnly", @@ -529,6 +603,7 @@ var ( Stage: FeatureStageExperimental, FrontendOnly: true, Owner: grafanaPluginsPlatformSquad, + Created: time.Date(2023, time.July, 5, 12, 0, 0, 0, time.UTC), }, { Name: "sqlDatasourceDatabaseSelection", @@ -537,6 +612,7 @@ var ( Stage: FeatureStagePublicPreview, Owner: grafanaBiSquad, HideFromAdminPage: true, + Created: time.Date(2023, time.June, 6, 12, 0, 0, 0, time.UTC), }, { Name: "lokiFormatQuery", @@ -544,6 +620,7 @@ var ( FrontendOnly: true, Stage: FeatureStageExperimental, Owner: grafanaObservabilityLogsSquad, + Created: time.Date(2023, time.June, 21, 12, 0, 0, 0, time.UTC), }, { Name: "cloudWatchLogsMonacoEditor", @@ -553,6 +630,7 @@ var ( Expression: "true", // enabled by default Owner: awsDatasourcesSquad, AllowSelfServe: truePtr, + Created: time.Date(2023, time.June, 12, 12, 0, 0, 0, time.UTC), }, { Name: "exploreScrollableLogsContainer", @@ -560,6 +638,7 @@ var ( Stage: FeatureStageExperimental, FrontendOnly: true, Owner: grafanaObservabilityLogsSquad, + Created: time.Date(2023, time.June, 15, 12, 0, 0, 0, time.UTC), }, { Name: "recordedQueriesMulti", @@ -568,6 +647,7 @@ var ( Expression: "true", Owner: grafanaObservabilityMetricsSquad, AllowSelfServe: falsePtr, + Created: time.Date(2023, time.June, 14, 12, 0, 0, 0, time.UTC), }, { Name: "pluginsDynamicAngularDetectionPatterns", @@ -575,6 +655,7 @@ var ( Stage: FeatureStageExperimental, FrontendOnly: false, Owner: grafanaPluginsPlatformSquad, + Created: time.Date(2023, time.June, 26, 12, 0, 0, 0, time.UTC), }, { Name: "vizAndWidgetSplit", @@ -582,6 +663,7 @@ var ( Stage: FeatureStageExperimental, FrontendOnly: true, Owner: grafanaDashboardsSquad, + Created: time.Date(2023, time.June, 27, 12, 0, 0, 0, time.UTC), }, { Name: "prometheusIncrementalQueryInstrumentation", @@ -589,6 +671,7 @@ var ( FrontendOnly: true, Stage: FeatureStageExperimental, Owner: grafanaObservabilityMetricsSquad, + Created: time.Date(2023, time.July, 5, 12, 0, 0, 0, time.UTC), }, { Name: "logsExploreTableVisualisation", @@ -596,12 +679,14 @@ var ( Stage: FeatureStageExperimental, FrontendOnly: true, Owner: grafanaObservabilityLogsSquad, + Created: time.Date(2023, time.July, 12, 12, 0, 0, 0, time.UTC), }, { Name: "awsDatasourcesTempCredentials", Description: "Support temporary security credentials in AWS plugins for Grafana Cloud customers", Stage: FeatureStageExperimental, Owner: awsDatasourcesSquad, + Created: time.Date(2023, time.July, 6, 12, 0, 0, 0, time.UTC), }, { Name: "transformationsRedesign", @@ -611,6 +696,7 @@ var ( Expression: "true", // enabled by default Owner: grafanaObservabilityMetricsSquad, AllowSelfServe: truePtr, + Created: time.Date(2023, time.July, 12, 12, 0, 0, 0, time.UTC), }, { Name: "mlExpressions", @@ -618,6 +704,7 @@ var ( Stage: FeatureStageExperimental, FrontendOnly: false, Owner: grafanaAlertingSquad, + Created: time.Date(2023, time.July, 13, 12, 0, 0, 0, time.UTC), }, { Name: "traceQLStreaming", @@ -625,6 +712,7 @@ var ( Stage: FeatureStageExperimental, FrontendOnly: true, Owner: grafanaObservabilityTracesAndProfilingSquad, + Created: time.Date(2023, time.July, 26, 12, 0, 0, 0, time.UTC), }, { Name: "metricsSummary", @@ -632,6 +720,7 @@ var ( Stage: FeatureStageExperimental, FrontendOnly: true, Owner: grafanaObservabilityTracesAndProfilingSquad, + Created: time.Date(2023, time.August, 28, 12, 0, 0, 0, time.UTC), }, { Name: "grafanaAPIServer", @@ -639,6 +728,7 @@ var ( Stage: FeatureStageExperimental, FrontendOnly: false, Owner: grafanaAppPlatformSquad, + Created: time.Date(2023, time.July, 14, 12, 0, 0, 0, time.UTC), }, { Name: "grafanaAPIServerWithExperimentalAPIs", @@ -646,6 +736,7 @@ var ( Stage: FeatureStageExperimental, FrontendOnly: false, Owner: grafanaAppPlatformSquad, + Created: time.Date(2023, time.October, 6, 12, 0, 0, 0, time.UTC), }, { Name: "featureToggleAdminPage", @@ -654,12 +745,14 @@ var ( FrontendOnly: false, Owner: grafanaOperatorExperienceSquad, RequiresRestart: true, + Created: time.Date(2023, time.July, 18, 12, 0, 0, 0, time.UTC), }, { Name: "awsAsyncQueryCaching", Description: "Enable caching for async queries for Redshift and Athena. Requires that the `useCachingService` feature toggle is enabled and the datasource has caching and async query support enabled", Stage: FeatureStagePublicPreview, Owner: awsDatasourcesSquad, + Created: time.Date(2023, time.July, 21, 12, 0, 0, 0, time.UTC), }, { Name: "splitScopes", @@ -669,6 +762,7 @@ var ( Owner: identityAccessTeam, RequiresRestart: true, HideFromAdminPage: true, // This is internal work to speed up dashboard search, and is not ready for wider use + Created: time.Date(2023, time.July, 21, 12, 0, 0, 0, time.UTC), }, { Name: "traceToProfiles", @@ -676,6 +770,7 @@ var ( Stage: FeatureStageExperimental, FrontendOnly: true, Owner: grafanaObservabilityTracesAndProfilingSquad, + Created: time.Date(2023, time.November, 1, 12, 0, 0, 0, time.UTC), }, { Name: "tracesEmbeddedFlameGraph", @@ -683,12 +778,14 @@ var ( Stage: FeatureStageExperimental, FrontendOnly: true, Owner: grafanaObservabilityTracesAndProfilingSquad, + Created: time.Date(2023, time.November, 2, 12, 0, 0, 0, time.UTC), }, { Name: "permissionsFilterRemoveSubquery", Description: "Alternative permission filter implementation that does not use subqueries for fetching the dashboard folder", Stage: FeatureStageExperimental, Owner: grafanaBackendPlatformSquad, + Created: time.Date(2023, time.August, 2, 12, 0, 0, 0, time.UTC), }, { Name: "prometheusConfigOverhaulAuth", @@ -697,6 +794,7 @@ var ( Stage: FeatureStageGeneralAvailability, Expression: "true", // on by default AllowSelfServe: falsePtr, + Created: time.Date(2023, time.July, 21, 12, 0, 0, 0, time.UTC), }, { Name: "configurableSchedulerTick", @@ -706,6 +804,7 @@ var ( Owner: grafanaAlertingSquad, RequiresRestart: true, HideFromDocs: true, + Created: time.Date(2023, time.July, 26, 12, 0, 0, 0, time.UTC), }, { Name: "influxdbSqlSupport", @@ -714,6 +813,7 @@ var ( FrontendOnly: false, Owner: grafanaObservabilityMetricsSquad, RequiresRestart: false, + Created: time.Date(2023, time.August, 2, 12, 0, 0, 0, time.UTC), }, { Name: "alertingNoDataErrorExecution", @@ -723,6 +823,7 @@ var ( Owner: grafanaAlertingSquad, RequiresRestart: true, Enabled: true, + Created: time.Date(2023, time.August, 15, 12, 0, 0, 0, time.UTC), }, { Name: "angularDeprecationUI", @@ -730,6 +831,7 @@ var ( Stage: FeatureStageExperimental, FrontendOnly: true, Owner: grafanaPluginsPlatformSquad, + Created: time.Date(2023, time.August, 29, 12, 0, 0, 0, time.UTC), }, { Name: "dashgpt", @@ -737,6 +839,7 @@ var ( Stage: FeatureStagePublicPreview, FrontendOnly: true, Owner: grafanaDashboardsSquad, + Created: time.Date(2023, time.November, 17, 12, 0, 0, 0, time.UTC), }, { Name: "reportingRetries", @@ -745,12 +848,14 @@ var ( FrontendOnly: false, Owner: grafanaSharingSquad, RequiresRestart: true, + Created: time.Date(2023, time.August, 31, 12, 0, 0, 0, time.UTC), }, { Name: "sseGroupByDatasource", Description: "Send query to the same datasource in a single request when using server side expressions", Stage: FeatureStageExperimental, Owner: grafanaObservabilityMetricsSquad, + Created: time.Date(2023, time.September, 7, 12, 0, 0, 0, time.UTC), }, { Name: "requestInstrumentationStatusSource", @@ -758,6 +863,7 @@ var ( Stage: FeatureStageExperimental, FrontendOnly: false, Owner: grafanaPluginsPlatformSquad, + Created: time.Date(2023, time.September, 11, 12, 0, 0, 0, time.UTC), }, { Name: "libraryPanelRBAC", @@ -766,6 +872,7 @@ var ( FrontendOnly: false, Owner: grafanaDashboardsSquad, RequiresRestart: true, + Created: time.Date(2023, time.October, 11, 12, 0, 0, 0, time.UTC), }, { Name: "lokiRunQueriesInParallel", @@ -773,6 +880,7 @@ var ( Stage: FeatureStagePrivatePreview, FrontendOnly: false, Owner: grafanaObservabilityLogsSquad, + Created: time.Date(2023, time.September, 19, 12, 0, 0, 0, time.UTC), }, { Name: "wargamesTesting", @@ -780,6 +888,7 @@ var ( Stage: FeatureStageExperimental, FrontendOnly: false, Owner: hostedGrafanaTeam, + Created: time.Date(2023, time.September, 13, 12, 0, 0, 0, time.UTC), }, { Name: "alertingInsights", @@ -790,12 +899,14 @@ var ( Expression: "true", // enabled by default AllowSelfServe: falsePtr, HideFromAdminPage: true, // This is moving away from being a feature toggle. + Created: time.Date(2023, time.September, 14, 12, 0, 0, 0, time.UTC), }, { Name: "externalCorePlugins", Description: "Allow core plugins to be loaded as external", Stage: FeatureStageExperimental, Owner: grafanaPluginsPlatformSquad, + Created: time.Date(2023, time.September, 22, 12, 0, 0, 0, time.UTC), }, { Name: "pluginsAPIMetrics", @@ -803,6 +914,7 @@ var ( FrontendOnly: true, Stage: FeatureStageExperimental, Owner: grafanaPluginsPlatformSquad, + Created: time.Date(2023, time.September, 21, 12, 0, 0, 0, time.UTC), }, { Name: "httpSLOLevels", @@ -811,6 +923,7 @@ var ( FrontendOnly: false, Owner: hostedGrafanaTeam, RequiresRestart: true, + Created: time.Date(2023, time.September, 22, 12, 0, 0, 0, time.UTC), }, { Name: "idForwarding", @@ -818,6 +931,7 @@ var ( Stage: FeatureStageExperimental, Owner: identityAccessTeam, RequiresDevMode: true, + Created: time.Date(2023, time.September, 25, 12, 0, 0, 0, time.UTC), }, { Name: "cloudWatchWildCardDimensionValues", @@ -826,6 +940,7 @@ var ( Expression: "true", // enabled by default Owner: awsDatasourcesSquad, AllowSelfServe: truePtr, + Created: time.Date(2023, time.September, 27, 12, 0, 0, 0, time.UTC), }, { Name: "externalServiceAccounts", @@ -833,6 +948,7 @@ var ( Stage: FeatureStageExperimental, RequiresDevMode: true, Owner: identityAccessTeam, + Created: time.Date(2023, time.September, 28, 12, 0, 0, 0, time.UTC), }, { Name: "panelMonitoring", @@ -840,6 +956,7 @@ var ( Stage: FeatureStageExperimental, Owner: grafanaDatavizSquad, FrontendOnly: true, + Created: time.Date(2023, time.October, 8, 12, 0, 0, 0, time.UTC), }, { Name: "enableNativeHTTPHistogram", @@ -847,6 +964,7 @@ var ( Stage: FeatureStageExperimental, FrontendOnly: false, Owner: hostedGrafanaTeam, + Created: time.Date(2023, time.October, 3, 12, 0, 0, 0, time.UTC), }, { Name: "formatString", @@ -854,6 +972,7 @@ var ( Stage: FeatureStageExperimental, FrontendOnly: true, Owner: grafanaBiSquad, + Created: time.Date(2023, time.October, 13, 12, 0, 0, 0, time.UTC), }, { Name: "transformationsVariableSupport", @@ -861,6 +980,7 @@ var ( FrontendOnly: true, Stage: FeatureStagePublicPreview, Owner: grafanaBiSquad, + Created: time.Date(2023, time.October, 4, 12, 0, 0, 0, time.UTC), }, { Name: "kubernetesPlaylists", @@ -868,12 +988,14 @@ var ( Stage: FeatureStageExperimental, Owner: grafanaAppPlatformSquad, RequiresRestart: true, // changes the API routing + Created: time.Date(2023, time.November, 8, 12, 0, 0, 0, time.UTC), }, { Name: "cloudWatchBatchQueries", Description: "Runs CloudWatch metrics queries as separate batches", Stage: FeatureStagePublicPreview, Owner: awsDatasourcesSquad, + Created: time.Date(2023, time.October, 20, 12, 0, 0, 0, time.UTC), }, { Name: "recoveryThreshold", @@ -882,6 +1004,7 @@ var ( FrontendOnly: false, Owner: grafanaAlertingSquad, RequiresRestart: true, + Created: time.Date(2023, time.October, 10, 12, 0, 0, 0, time.UTC), }, { Name: "lokiStructuredMetadata", @@ -889,6 +1012,7 @@ var ( Stage: FeatureStageExperimental, FrontendOnly: false, Owner: grafanaObservabilityLogsSquad, + Created: time.Date(2023, time.November, 16, 12, 0, 0, 0, time.UTC), }, { Name: "teamHttpHeaders", @@ -896,6 +1020,7 @@ var ( Stage: FeatureStageExperimental, FrontendOnly: false, Owner: identityAccessTeam, + Created: time.Date(2023, time.October, 17, 12, 0, 0, 0, time.UTC), }, { Name: "awsDatasourcesNewFormStyling", @@ -903,6 +1028,7 @@ var ( Stage: FeatureStageExperimental, FrontendOnly: true, Owner: awsDatasourcesSquad, + Created: time.Date(2023, time.October, 12, 12, 0, 0, 0, time.UTC), }, { Name: "cachingOptimizeSerializationMemoryUsage", @@ -910,6 +1036,7 @@ var ( Stage: FeatureStageExperimental, Owner: grafanaOperatorExperienceSquad, FrontendOnly: false, + Created: time.Date(2023, time.October, 12, 12, 0, 0, 0, time.UTC), }, { Name: "panelTitleSearchInV1", @@ -917,6 +1044,7 @@ var ( RequiresDevMode: true, Stage: FeatureStageExperimental, Owner: grafanaBackendPlatformSquad, + Created: time.Date(2023, time.October, 13, 12, 0, 0, 0, time.UTC), }, { Name: "pluginsInstrumentationStatusSource", @@ -924,6 +1052,7 @@ var ( FrontendOnly: false, Stage: FeatureStageExperimental, Owner: grafanaPluginsPlatformSquad, + Created: time.Date(2023, time.October, 17, 12, 0, 0, 0, time.UTC), }, { Name: "costManagementUi", @@ -931,6 +1060,7 @@ var ( Stage: FeatureStageExperimental, FrontendOnly: false, Owner: grafanaDatabasesFrontend, + Created: time.Date(2023, time.October, 17, 12, 0, 0, 0, time.UTC), }, { Name: "managedPluginsInstall", @@ -938,6 +1068,7 @@ var ( Stage: FeatureStageExperimental, RequiresDevMode: false, Owner: grafanaPluginsPlatformSquad, + Created: time.Date(2023, time.October, 18, 12, 0, 0, 0, time.UTC), }, { Name: "prometheusPromQAIL", @@ -945,6 +1076,7 @@ var ( Stage: FeatureStageExperimental, FrontendOnly: true, Owner: grafanaObservabilityMetricsSquad, + Created: time.Date(2023, time.October, 19, 12, 0, 0, 0, time.UTC), }, { Name: "addFieldFromCalculationStatFunctions", @@ -952,24 +1084,28 @@ var ( Stage: FeatureStageExperimental, FrontendOnly: true, Owner: grafanaBiSquad, + Created: time.Date(2023, time.November, 3, 12, 0, 0, 0, time.UTC), }, { Name: "alertmanagerRemoteSecondary", Description: "Enable Grafana to sync configuration and state with a remote Alertmanager.", Stage: FeatureStageExperimental, Owner: grafanaAlertingSquad, + Created: time.Date(2023, time.October, 30, 12, 0, 0, 0, time.UTC), }, { Name: "alertmanagerRemotePrimary", Description: "Enable Grafana to have a remote Alertmanager instance as the primary Alertmanager.", Stage: FeatureStageExperimental, Owner: grafanaAlertingSquad, + Created: time.Date(2023, time.October, 30, 12, 0, 0, 0, time.UTC), }, { Name: "alertmanagerRemoteOnly", Description: "Disable the internal Alertmanager and only use the external one defined.", Stage: FeatureStageExperimental, Owner: grafanaAlertingSquad, + Created: time.Date(2023, time.October, 30, 12, 0, 0, 0, time.UTC), }, { Name: "annotationPermissionUpdate", @@ -977,6 +1113,7 @@ var ( Stage: FeatureStageExperimental, RequiresDevMode: false, Owner: identityAccessTeam, + Created: time.Date(2023, time.October, 31, 12, 0, 0, 0, time.UTC), }, { Name: "extractFieldsNameDeduplication", @@ -984,6 +1121,7 @@ var ( Stage: FeatureStageExperimental, FrontendOnly: true, Owner: grafanaBiSquad, + Created: time.Date(2023, time.November, 2, 12, 0, 0, 0, time.UTC), }, { Name: "dashboardSceneForViewers", @@ -991,6 +1129,7 @@ var ( Stage: FeatureStageExperimental, FrontendOnly: true, Owner: grafanaDashboardsSquad, + Created: time.Date(2023, time.November, 2, 12, 0, 0, 0, time.UTC), }, { Name: "dashboardScene", @@ -998,6 +1137,7 @@ var ( Stage: FeatureStageExperimental, FrontendOnly: true, Owner: grafanaDashboardsSquad, + Created: time.Date(2023, time.November, 13, 12, 0, 0, 0, time.UTC), }, { Name: "panelFilterVariable", @@ -1006,6 +1146,7 @@ var ( FrontendOnly: true, Owner: grafanaDashboardsSquad, HideFromDocs: true, + Created: time.Date(2023, time.November, 3, 12, 0, 0, 0, time.UTC), }, { Name: "pdfTables", @@ -1013,6 +1154,7 @@ var ( Stage: FeatureStagePrivatePreview, FrontendOnly: false, Owner: grafanaSharingSquad, + Created: time.Date(2023, time.November, 6, 12, 0, 0, 0, time.UTC), }, { Name: "ssoSettingsApi", @@ -1021,6 +1163,7 @@ var ( Stage: FeatureStageExperimental, FrontendOnly: false, Owner: identityAccessTeam, + Created: time.Date(2023, time.November, 8, 12, 0, 0, 0, time.UTC), }, { Name: "logsInfiniteScrolling", @@ -1028,6 +1171,7 @@ var ( Stage: FeatureStageExperimental, FrontendOnly: true, Owner: grafanaObservabilityLogsSquad, + Created: time.Date(2023, time.November, 9, 12, 0, 0, 0, time.UTC), }, { Name: "flameGraphItemCollapsing", @@ -1035,6 +1179,7 @@ var ( Stage: FeatureStageExperimental, FrontendOnly: true, Owner: grafanaObservabilityTracesAndProfilingSquad, + Created: time.Date(2023, time.November, 9, 12, 0, 0, 0, time.UTC), }, { Name: "alertingDetailsViewV2", @@ -1043,6 +1188,7 @@ var ( FrontendOnly: true, Owner: grafanaAlertingSquad, HideFromDocs: true, + Created: time.Date(2023, time.November, 9, 12, 0, 0, 0, time.UTC), }, { Name: "datatrails", @@ -1051,6 +1197,7 @@ var ( FrontendOnly: true, Owner: grafanaDashboardsSquad, HideFromDocs: true, + Created: time.Date(2023, time.November, 15, 12, 0, 0, 0, time.UTC), }, { Name: "alertingSimplifiedRouting", @@ -1059,6 +1206,7 @@ var ( FrontendOnly: false, Owner: grafanaAlertingSquad, HideFromDocs: true, + Created: time.Date(2023, time.November, 10, 12, 0, 0, 0, time.UTC), }, { Name: "logRowsPopoverMenu", @@ -1066,6 +1214,7 @@ var ( Stage: FeatureStageExperimental, FrontendOnly: true, Owner: grafanaObservabilityLogsSquad, + Created: time.Date(2023, time.November, 16, 12, 0, 0, 0, time.UTC), }, { Name: "pluginsSkipHostEnvVars", @@ -1073,6 +1222,7 @@ var ( Stage: FeatureStageExperimental, FrontendOnly: false, Owner: grafanaPluginsPlatformSquad, + Created: time.Date(2023, time.November, 15, 12, 0, 0, 0, time.UTC), }, { Name: "regressionTransformation", @@ -1080,6 +1230,7 @@ var ( Stage: FeatureStageExperimental, FrontendOnly: true, Owner: grafanaBiSquad, + Created: time.Date(2023, time.November, 24, 12, 0, 0, 0, time.UTC), }, { Name: "displayAnonymousStats", @@ -1087,6 +1238,7 @@ var ( Stage: FeatureStageExperimental, FrontendOnly: true, Owner: identityAccessTeam, + Created: time.Date(2023, time.November, 29, 12, 0, 0, 0, time.UTC), }, } ) diff --git a/pkg/services/featuremgmt/toggles_gen.csv b/pkg/services/featuremgmt/toggles_gen.csv index 34fd3bc6048..3458bc1df3f 100644 --- a/pkg/services/featuremgmt/toggles_gen.csv +++ b/pkg/services/featuremgmt/toggles_gen.csv @@ -1,149 +1,149 @@ -Name,Stage,Owner,requiresDevMode,RequiresLicense,RequiresRestart,FrontendOnly -disableEnvelopeEncryption,GA,@grafana/grafana-as-code,false,false,false,false -live-service-web-worker,experimental,@grafana/grafana-app-platform-squad,false,false,false,true -queryOverLive,experimental,@grafana/grafana-app-platform-squad,false,false,false,true -panelTitleSearch,preview,@grafana/grafana-app-platform-squad,false,false,false,false -publicDashboards,GA,@grafana/sharing-squad,false,false,false,false -publicDashboardsEmailSharing,preview,@grafana/sharing-squad,false,true,false,false -lokiExperimentalStreaming,experimental,@grafana/observability-logs,false,false,false,false -featureHighlights,GA,@grafana/grafana-as-code,false,false,false,false -migrationLocking,preview,@grafana/backend-platform,false,false,false,false -storage,experimental,@grafana/grafana-app-platform-squad,false,false,false,false -correlations,preview,@grafana/explore-squad,false,false,false,false -exploreContentOutline,GA,@grafana/explore-squad,false,false,false,true -datasourceQueryMultiStatus,experimental,@grafana/plugins-platform-backend,false,false,false,false -traceToMetrics,experimental,@grafana/observability-traces-and-profiling,false,false,false,true -autoMigrateOldPanels,preview,@grafana/dataviz-squad,false,false,false,true -disableAngular,preview,@grafana/dataviz-squad,false,false,false,true -canvasPanelNesting,experimental,@grafana/dataviz-squad,false,false,false,true -newVizTooltips,GA,@grafana/dataviz-squad,false,false,false,true -scenes,experimental,@grafana/dashboards-squad,false,false,false,true -disableSecretsCompatibility,experimental,@grafana/hosted-grafana-team,false,false,true,false -logRequestsInstrumentedAsUnknown,experimental,@grafana/hosted-grafana-team,false,false,false,false -dataConnectionsConsole,GA,@grafana/plugins-platform-backend,false,false,false,false -topnav,deprecated,@grafana/grafana-frontend-platform,false,false,false,false -dockedMegaMenu,experimental,@grafana/grafana-frontend-platform,false,false,false,true -grpcServer,preview,@grafana/grafana-app-platform-squad,false,false,false,false -entityStore,experimental,@grafana/grafana-app-platform-squad,true,false,false,false -cloudWatchCrossAccountQuerying,GA,@grafana/aws-datasources,false,false,false,false -redshiftAsyncQueryDataSupport,GA,@grafana/aws-datasources,false,false,false,false -athenaAsyncQueryDataSupport,GA,@grafana/aws-datasources,false,false,false,true -cloudwatchNewRegionsHandler,experimental,@grafana/aws-datasources,false,false,false,false -showDashboardValidationWarnings,experimental,@grafana/dashboards-squad,false,false,false,false -mysqlAnsiQuotes,experimental,@grafana/backend-platform,false,false,false,false -accessControlOnCall,preview,@grafana/identity-access-team,false,false,false,false -nestedFolders,preview,@grafana/backend-platform,false,false,false,false -nestedFolderPicker,GA,@grafana/grafana-frontend-platform,false,false,false,true -accessTokenExpirationCheck,GA,@grafana/identity-access-team,false,false,false,false -emptyDashboardPage,GA,@grafana/dashboards-squad,false,false,false,true -disablePrometheusExemplarSampling,GA,@grafana/observability-metrics,false,false,false,false -alertingBacktesting,experimental,@grafana/alerting-squad,false,false,false,false -editPanelCSVDragAndDrop,experimental,@grafana/grafana-bi-squad,false,false,false,true -alertingNoNormalState,preview,@grafana/alerting-squad,false,false,false,false -logsContextDatasourceUi,GA,@grafana/observability-logs,false,false,false,true -lokiQuerySplitting,GA,@grafana/observability-logs,false,false,false,true -lokiQuerySplittingConfig,experimental,@grafana/observability-logs,false,false,false,true -individualCookiePreferences,experimental,@grafana/backend-platform,false,false,false,false -prometheusMetricEncyclopedia,GA,@grafana/observability-metrics,false,false,false,true -influxdbBackendMigration,GA,@grafana/observability-metrics,false,false,false,true -influxqlStreamingParser,experimental,@grafana/observability-metrics,false,false,false,false -clientTokenRotation,GA,@grafana/identity-access-team,false,false,false,false -prometheusDataplane,GA,@grafana/observability-metrics,false,false,false,false -lokiMetricDataplane,GA,@grafana/observability-logs,false,false,false,false -lokiLogsDataplane,experimental,@grafana/observability-logs,false,false,false,false -dataplaneFrontendFallback,GA,@grafana/observability-metrics,false,false,false,true -disableSSEDataplane,experimental,@grafana/observability-metrics,false,false,false,false -alertStateHistoryLokiSecondary,experimental,@grafana/alerting-squad,false,false,false,false -alertStateHistoryLokiPrimary,experimental,@grafana/alerting-squad,false,false,false,false -alertStateHistoryLokiOnly,experimental,@grafana/alerting-squad,false,false,false,false -unifiedRequestLog,experimental,@grafana/backend-platform,false,false,false,false -renderAuthJWT,preview,@grafana/grafana-as-code,false,false,false,false -externalServiceAuth,experimental,@grafana/identity-access-team,true,false,false,false -refactorVariablesTimeRange,preview,@grafana/dashboards-squad,false,false,false,false -useCachingService,GA,@grafana/grafana-operator-experience-squad,false,false,true,false -enableElasticsearchBackendQuerying,GA,@grafana/observability-logs,false,false,false,false -advancedDataSourcePicker,GA,@grafana/dashboards-squad,false,false,false,true -faroDatasourceSelector,preview,@grafana/app-o11y,false,false,false,true -enableDatagridEditing,preview,@grafana/grafana-bi-squad,false,false,false,true -extraThemes,experimental,@grafana/grafana-frontend-platform,false,false,false,true -lokiPredefinedOperations,experimental,@grafana/observability-logs,false,false,false,true -pluginsFrontendSandbox,experimental,@grafana/plugins-platform-backend,false,false,false,true -dashboardEmbed,experimental,@grafana/grafana-as-code,false,false,false,true -frontendSandboxMonitorOnly,experimental,@grafana/plugins-platform-backend,false,false,false,true -sqlDatasourceDatabaseSelection,preview,@grafana/grafana-bi-squad,false,false,false,true -lokiFormatQuery,experimental,@grafana/observability-logs,false,false,false,true -cloudWatchLogsMonacoEditor,GA,@grafana/aws-datasources,false,false,false,true -exploreScrollableLogsContainer,experimental,@grafana/observability-logs,false,false,false,true -recordedQueriesMulti,GA,@grafana/observability-metrics,false,false,false,false -pluginsDynamicAngularDetectionPatterns,experimental,@grafana/plugins-platform-backend,false,false,false,false -vizAndWidgetSplit,experimental,@grafana/dashboards-squad,false,false,false,true -prometheusIncrementalQueryInstrumentation,experimental,@grafana/observability-metrics,false,false,false,true -logsExploreTableVisualisation,experimental,@grafana/observability-logs,false,false,false,true -awsDatasourcesTempCredentials,experimental,@grafana/aws-datasources,false,false,false,false -transformationsRedesign,GA,@grafana/observability-metrics,false,false,false,true -mlExpressions,experimental,@grafana/alerting-squad,false,false,false,false -traceQLStreaming,experimental,@grafana/observability-traces-and-profiling,false,false,false,true -metricsSummary,experimental,@grafana/observability-traces-and-profiling,false,false,false,true -grafanaAPIServer,experimental,@grafana/grafana-app-platform-squad,false,false,false,false -grafanaAPIServerWithExperimentalAPIs,experimental,@grafana/grafana-app-platform-squad,false,false,false,false -featureToggleAdminPage,experimental,@grafana/grafana-operator-experience-squad,false,false,true,false -awsAsyncQueryCaching,preview,@grafana/aws-datasources,false,false,false,false -splitScopes,preview,@grafana/identity-access-team,false,false,true,false -traceToProfiles,experimental,@grafana/observability-traces-and-profiling,false,false,false,true -tracesEmbeddedFlameGraph,experimental,@grafana/observability-traces-and-profiling,false,false,false,true -permissionsFilterRemoveSubquery,experimental,@grafana/backend-platform,false,false,false,false -prometheusConfigOverhaulAuth,GA,@grafana/observability-metrics,false,false,false,false -configurableSchedulerTick,experimental,@grafana/alerting-squad,false,false,true,false -influxdbSqlSupport,experimental,@grafana/observability-metrics,false,false,false,false -alertingNoDataErrorExecution,privatePreview,@grafana/alerting-squad,false,false,true,false -angularDeprecationUI,experimental,@grafana/plugins-platform-backend,false,false,false,true -dashgpt,preview,@grafana/dashboards-squad,false,false,false,true -reportingRetries,preview,@grafana/sharing-squad,false,false,true,false -sseGroupByDatasource,experimental,@grafana/observability-metrics,false,false,false,false -requestInstrumentationStatusSource,experimental,@grafana/plugins-platform-backend,false,false,false,false -libraryPanelRBAC,experimental,@grafana/dashboards-squad,false,false,true,false -lokiRunQueriesInParallel,privatePreview,@grafana/observability-logs,false,false,false,false -wargamesTesting,experimental,@grafana/hosted-grafana-team,false,false,false,false -alertingInsights,GA,@grafana/alerting-squad,false,false,false,true -externalCorePlugins,experimental,@grafana/plugins-platform-backend,false,false,false,false -pluginsAPIMetrics,experimental,@grafana/plugins-platform-backend,false,false,false,true -httpSLOLevels,experimental,@grafana/hosted-grafana-team,false,false,true,false -idForwarding,experimental,@grafana/identity-access-team,true,false,false,false -cloudWatchWildCardDimensionValues,GA,@grafana/aws-datasources,false,false,false,false -externalServiceAccounts,experimental,@grafana/identity-access-team,true,false,false,false -panelMonitoring,experimental,@grafana/dataviz-squad,false,false,false,true -enableNativeHTTPHistogram,experimental,@grafana/hosted-grafana-team,false,false,false,false -formatString,experimental,@grafana/grafana-bi-squad,false,false,false,true -transformationsVariableSupport,preview,@grafana/grafana-bi-squad,false,false,false,true -kubernetesPlaylists,experimental,@grafana/grafana-app-platform-squad,false,false,true,false -cloudWatchBatchQueries,preview,@grafana/aws-datasources,false,false,false,false -recoveryThreshold,experimental,@grafana/alerting-squad,false,false,true,false -lokiStructuredMetadata,experimental,@grafana/observability-logs,false,false,false,false -teamHttpHeaders,experimental,@grafana/identity-access-team,false,false,false,false -awsDatasourcesNewFormStyling,experimental,@grafana/aws-datasources,false,false,false,true -cachingOptimizeSerializationMemoryUsage,experimental,@grafana/grafana-operator-experience-squad,false,false,false,false -panelTitleSearchInV1,experimental,@grafana/backend-platform,true,false,false,false -pluginsInstrumentationStatusSource,experimental,@grafana/plugins-platform-backend,false,false,false,false -costManagementUi,experimental,@grafana/databases-frontend,false,false,false,false -managedPluginsInstall,experimental,@grafana/plugins-platform-backend,false,false,false,false -prometheusPromQAIL,experimental,@grafana/observability-metrics,false,false,false,true -addFieldFromCalculationStatFunctions,experimental,@grafana/grafana-bi-squad,false,false,false,true -alertmanagerRemoteSecondary,experimental,@grafana/alerting-squad,false,false,false,false -alertmanagerRemotePrimary,experimental,@grafana/alerting-squad,false,false,false,false -alertmanagerRemoteOnly,experimental,@grafana/alerting-squad,false,false,false,false -annotationPermissionUpdate,experimental,@grafana/identity-access-team,false,false,false,false -extractFieldsNameDeduplication,experimental,@grafana/grafana-bi-squad,false,false,false,true -dashboardSceneForViewers,experimental,@grafana/dashboards-squad,false,false,false,true -dashboardScene,experimental,@grafana/dashboards-squad,false,false,false,true -panelFilterVariable,experimental,@grafana/dashboards-squad,false,false,false,true -pdfTables,privatePreview,@grafana/sharing-squad,false,false,false,false -ssoSettingsApi,experimental,@grafana/identity-access-team,true,false,false,false -logsInfiniteScrolling,experimental,@grafana/observability-logs,false,false,false,true -flameGraphItemCollapsing,experimental,@grafana/observability-traces-and-profiling,false,false,false,true -alertingDetailsViewV2,experimental,@grafana/alerting-squad,false,false,false,true -datatrails,experimental,@grafana/dashboards-squad,false,false,false,true -alertingSimplifiedRouting,experimental,@grafana/alerting-squad,false,false,false,false -logRowsPopoverMenu,experimental,@grafana/observability-logs,false,false,false,true -pluginsSkipHostEnvVars,experimental,@grafana/plugins-platform-backend,false,false,false,false -regressionTransformation,experimental,@grafana/grafana-bi-squad,false,false,false,true -displayAnonymousStats,experimental,@grafana/identity-access-team,false,false,false,true +Name,Stage,Owner,Created,requiresDevMode,RequiresLicense,RequiresRestart,FrontendOnly +disableEnvelopeEncryption,GA,@grafana/grafana-as-code,2022-05-24,false,false,false,false +live-service-web-worker,experimental,@grafana/grafana-app-platform-squad,2021-11-09,false,false,false,true +queryOverLive,experimental,@grafana/grafana-app-platform-squad,2022-01-05,false,false,false,true +panelTitleSearch,preview,@grafana/grafana-app-platform-squad,2022-02-15,false,false,false,false +publicDashboards,GA,@grafana/sharing-squad,2022-04-07,false,false,false,false +publicDashboardsEmailSharing,preview,@grafana/sharing-squad,2022-12-21,false,true,false,false +lokiExperimentalStreaming,experimental,@grafana/observability-logs,2023-06-19,false,false,false,false +featureHighlights,GA,@grafana/grafana-as-code,2022-02-03,false,false,false,false +migrationLocking,preview,@grafana/backend-platform,2022-02-15,false,false,false,false +storage,experimental,@grafana/grafana-app-platform-squad,2022-03-17,false,false,false,false +correlations,preview,@grafana/explore-squad,2022-09-16,false,false,false,false +exploreContentOutline,GA,@grafana/explore-squad,2023-11-03,false,false,false,true +datasourceQueryMultiStatus,experimental,@grafana/plugins-platform-backend,2022-05-03,false,false,false,false +traceToMetrics,experimental,@grafana/observability-traces-and-profiling,2022-03-07,false,false,false,true +autoMigrateOldPanels,preview,@grafana/dataviz-squad,2022-06-11,false,false,false,true +disableAngular,preview,@grafana/dataviz-squad,2023-03-23,false,false,false,true +canvasPanelNesting,experimental,@grafana/dataviz-squad,2022-05-31,false,false,false,true +newVizTooltips,GA,@grafana/dataviz-squad,2023-11-03,false,false,false,true +scenes,experimental,@grafana/dashboards-squad,2022-07-07,false,false,false,true +disableSecretsCompatibility,experimental,@grafana/hosted-grafana-team,2022-07-13,false,false,true,false +logRequestsInstrumentedAsUnknown,experimental,@grafana/hosted-grafana-team,2022-06-10,false,false,false,false +dataConnectionsConsole,GA,@grafana/plugins-platform-backend,2022-06-01,false,false,false,false +topnav,deprecated,@grafana/grafana-frontend-platform,2022-06-20,false,false,false,false +dockedMegaMenu,experimental,@grafana/grafana-frontend-platform,2023-09-18,false,false,false,true +grpcServer,preview,@grafana/grafana-app-platform-squad,2022-09-27,false,false,false,false +entityStore,experimental,@grafana/grafana-app-platform-squad,2022-12-01,true,false,false,false +cloudWatchCrossAccountQuerying,GA,@grafana/aws-datasources,2022-11-28,false,false,false,false +redshiftAsyncQueryDataSupport,GA,@grafana/aws-datasources,2022-08-27,false,false,false,false +athenaAsyncQueryDataSupport,GA,@grafana/aws-datasources,2022-08-27,false,false,false,true +cloudwatchNewRegionsHandler,experimental,@grafana/aws-datasources,2023-09-25,false,false,false,false +showDashboardValidationWarnings,experimental,@grafana/dashboards-squad,2022-10-14,false,false,false,false +mysqlAnsiQuotes,experimental,@grafana/backend-platform,2022-10-12,false,false,false,false +accessControlOnCall,preview,@grafana/identity-access-team,2022-10-19,false,false,false,false +nestedFolders,preview,@grafana/backend-platform,2022-10-22,false,false,false,false +nestedFolderPicker,GA,@grafana/grafana-frontend-platform,2023-07-24,false,false,false,true +accessTokenExpirationCheck,GA,@grafana/identity-access-team,2022-11-14,false,false,false,false +emptyDashboardPage,GA,@grafana/dashboards-squad,2023-03-28,false,false,false,true +disablePrometheusExemplarSampling,GA,@grafana/observability-metrics,2022-12-19,false,false,false,false +alertingBacktesting,experimental,@grafana/alerting-squad,2022-10-20,false,false,false,false +editPanelCSVDragAndDrop,experimental,@grafana/grafana-bi-squad,2022-12-20,false,false,false,true +alertingNoNormalState,preview,@grafana/alerting-squad,2023-01-14,false,false,false,false +logsContextDatasourceUi,GA,@grafana/observability-logs,2023-01-27,false,false,false,true +lokiQuerySplitting,GA,@grafana/observability-logs,2023-02-09,false,false,false,true +lokiQuerySplittingConfig,experimental,@grafana/observability-logs,2023-03-20,false,false,false,true +individualCookiePreferences,experimental,@grafana/backend-platform,2023-02-23,false,false,false,false +prometheusMetricEncyclopedia,GA,@grafana/observability-metrics,2023-03-07,false,false,false,true +influxdbBackendMigration,GA,@grafana/observability-metrics,2023-03-15,false,false,false,true +influxqlStreamingParser,experimental,@grafana/observability-metrics,2023-11-29,false,false,false,false +clientTokenRotation,GA,@grafana/identity-access-team,2023-03-23,false,false,false,false +prometheusDataplane,GA,@grafana/observability-metrics,2023-03-29,false,false,false,false +lokiMetricDataplane,GA,@grafana/observability-logs,2023-04-13,false,false,false,false +lokiLogsDataplane,experimental,@grafana/observability-logs,2023-07-13,false,false,false,false +dataplaneFrontendFallback,GA,@grafana/observability-metrics,2023-04-24,false,false,false,true +disableSSEDataplane,experimental,@grafana/observability-metrics,2023-04-24,false,false,false,false +alertStateHistoryLokiSecondary,experimental,@grafana/alerting-squad,2023-03-30,false,false,false,false +alertStateHistoryLokiPrimary,experimental,@grafana/alerting-squad,2023-03-30,false,false,false,false +alertStateHistoryLokiOnly,experimental,@grafana/alerting-squad,2023-03-30,false,false,false,false +unifiedRequestLog,experimental,@grafana/backend-platform,2023-03-31,false,false,false,false +renderAuthJWT,preview,@grafana/grafana-as-code,2023-04-03,false,false,false,false +externalServiceAuth,experimental,@grafana/identity-access-team,2023-04-11,true,false,false,false +refactorVariablesTimeRange,preview,@grafana/dashboards-squad,2023-06-06,false,false,false,false +useCachingService,GA,@grafana/grafana-operator-experience-squad,2023-04-12,false,false,true,false +enableElasticsearchBackendQuerying,GA,@grafana/observability-logs,2023-04-14,false,false,false,false +advancedDataSourcePicker,GA,@grafana/dashboards-squad,2023-04-14,false,false,false,true +faroDatasourceSelector,preview,@grafana/app-o11y,2023-05-04,false,false,false,true +enableDatagridEditing,preview,@grafana/grafana-bi-squad,2023-04-24,false,false,false,true +extraThemes,experimental,@grafana/grafana-frontend-platform,2023-05-10,false,false,false,true +lokiPredefinedOperations,experimental,@grafana/observability-logs,2023-06-02,false,false,false,true +pluginsFrontendSandbox,experimental,@grafana/plugins-platform-backend,2023-06-05,false,false,false,true +dashboardEmbed,experimental,@grafana/grafana-as-code,2023-07-06,false,false,false,true +frontendSandboxMonitorOnly,experimental,@grafana/plugins-platform-backend,2023-07-05,false,false,false,true +sqlDatasourceDatabaseSelection,preview,@grafana/grafana-bi-squad,2023-06-06,false,false,false,true +lokiFormatQuery,experimental,@grafana/observability-logs,2023-06-21,false,false,false,true +cloudWatchLogsMonacoEditor,GA,@grafana/aws-datasources,2023-06-12,false,false,false,true +exploreScrollableLogsContainer,experimental,@grafana/observability-logs,2023-06-15,false,false,false,true +recordedQueriesMulti,GA,@grafana/observability-metrics,2023-06-14,false,false,false,false +pluginsDynamicAngularDetectionPatterns,experimental,@grafana/plugins-platform-backend,2023-06-26,false,false,false,false +vizAndWidgetSplit,experimental,@grafana/dashboards-squad,2023-06-27,false,false,false,true +prometheusIncrementalQueryInstrumentation,experimental,@grafana/observability-metrics,2023-07-05,false,false,false,true +logsExploreTableVisualisation,experimental,@grafana/observability-logs,2023-07-12,false,false,false,true +awsDatasourcesTempCredentials,experimental,@grafana/aws-datasources,2023-07-06,false,false,false,false +transformationsRedesign,GA,@grafana/observability-metrics,2023-07-12,false,false,false,true +mlExpressions,experimental,@grafana/alerting-squad,2023-07-13,false,false,false,false +traceQLStreaming,experimental,@grafana/observability-traces-and-profiling,2023-07-26,false,false,false,true +metricsSummary,experimental,@grafana/observability-traces-and-profiling,2023-08-28,false,false,false,true +grafanaAPIServer,experimental,@grafana/grafana-app-platform-squad,2023-07-14,false,false,false,false +grafanaAPIServerWithExperimentalAPIs,experimental,@grafana/grafana-app-platform-squad,2023-10-06,false,false,false,false +featureToggleAdminPage,experimental,@grafana/grafana-operator-experience-squad,2023-07-18,false,false,true,false +awsAsyncQueryCaching,preview,@grafana/aws-datasources,2023-07-21,false,false,false,false +splitScopes,preview,@grafana/identity-access-team,2023-07-21,false,false,true,false +traceToProfiles,experimental,@grafana/observability-traces-and-profiling,2023-11-01,false,false,false,true +tracesEmbeddedFlameGraph,experimental,@grafana/observability-traces-and-profiling,2023-11-02,false,false,false,true +permissionsFilterRemoveSubquery,experimental,@grafana/backend-platform,2023-08-02,false,false,false,false +prometheusConfigOverhaulAuth,GA,@grafana/observability-metrics,2023-07-21,false,false,false,false +configurableSchedulerTick,experimental,@grafana/alerting-squad,2023-07-26,false,false,true,false +influxdbSqlSupport,experimental,@grafana/observability-metrics,2023-08-02,false,false,false,false +alertingNoDataErrorExecution,privatePreview,@grafana/alerting-squad,2023-08-15,false,false,true,false +angularDeprecationUI,experimental,@grafana/plugins-platform-backend,2023-08-29,false,false,false,true +dashgpt,preview,@grafana/dashboards-squad,2023-11-17,false,false,false,true +reportingRetries,preview,@grafana/sharing-squad,2023-08-31,false,false,true,false +sseGroupByDatasource,experimental,@grafana/observability-metrics,2023-09-07,false,false,false,false +requestInstrumentationStatusSource,experimental,@grafana/plugins-platform-backend,2023-09-11,false,false,false,false +libraryPanelRBAC,experimental,@grafana/dashboards-squad,2023-10-11,false,false,true,false +lokiRunQueriesInParallel,privatePreview,@grafana/observability-logs,2023-09-19,false,false,false,false +wargamesTesting,experimental,@grafana/hosted-grafana-team,2023-09-13,false,false,false,false +alertingInsights,GA,@grafana/alerting-squad,2023-09-14,false,false,false,true +externalCorePlugins,experimental,@grafana/plugins-platform-backend,2023-09-22,false,false,false,false +pluginsAPIMetrics,experimental,@grafana/plugins-platform-backend,2023-09-21,false,false,false,true +httpSLOLevels,experimental,@grafana/hosted-grafana-team,2023-09-22,false,false,true,false +idForwarding,experimental,@grafana/identity-access-team,2023-09-25,true,false,false,false +cloudWatchWildCardDimensionValues,GA,@grafana/aws-datasources,2023-09-27,false,false,false,false +externalServiceAccounts,experimental,@grafana/identity-access-team,2023-09-28,true,false,false,false +panelMonitoring,experimental,@grafana/dataviz-squad,2023-10-08,false,false,false,true +enableNativeHTTPHistogram,experimental,@grafana/hosted-grafana-team,2023-10-03,false,false,false,false +formatString,experimental,@grafana/grafana-bi-squad,2023-10-13,false,false,false,true +transformationsVariableSupport,preview,@grafana/grafana-bi-squad,2023-10-04,false,false,false,true +kubernetesPlaylists,experimental,@grafana/grafana-app-platform-squad,2023-11-08,false,false,true,false +cloudWatchBatchQueries,preview,@grafana/aws-datasources,2023-10-20,false,false,false,false +recoveryThreshold,experimental,@grafana/alerting-squad,2023-10-10,false,false,true,false +lokiStructuredMetadata,experimental,@grafana/observability-logs,2023-11-16,false,false,false,false +teamHttpHeaders,experimental,@grafana/identity-access-team,2023-10-17,false,false,false,false +awsDatasourcesNewFormStyling,experimental,@grafana/aws-datasources,2023-10-12,false,false,false,true +cachingOptimizeSerializationMemoryUsage,experimental,@grafana/grafana-operator-experience-squad,2023-10-12,false,false,false,false +panelTitleSearchInV1,experimental,@grafana/backend-platform,2023-10-13,true,false,false,false +pluginsInstrumentationStatusSource,experimental,@grafana/plugins-platform-backend,2023-10-17,false,false,false,false +costManagementUi,experimental,@grafana/databases-frontend,2023-10-17,false,false,false,false +managedPluginsInstall,experimental,@grafana/plugins-platform-backend,2023-10-18,false,false,false,false +prometheusPromQAIL,experimental,@grafana/observability-metrics,2023-10-19,false,false,false,true +addFieldFromCalculationStatFunctions,experimental,@grafana/grafana-bi-squad,2023-11-03,false,false,false,true +alertmanagerRemoteSecondary,experimental,@grafana/alerting-squad,2023-10-30,false,false,false,false +alertmanagerRemotePrimary,experimental,@grafana/alerting-squad,2023-10-30,false,false,false,false +alertmanagerRemoteOnly,experimental,@grafana/alerting-squad,2023-10-30,false,false,false,false +annotationPermissionUpdate,experimental,@grafana/identity-access-team,2023-10-31,false,false,false,false +extractFieldsNameDeduplication,experimental,@grafana/grafana-bi-squad,2023-11-02,false,false,false,true +dashboardSceneForViewers,experimental,@grafana/dashboards-squad,2023-11-02,false,false,false,true +dashboardScene,experimental,@grafana/dashboards-squad,2023-11-13,false,false,false,true +panelFilterVariable,experimental,@grafana/dashboards-squad,2023-11-03,false,false,false,true +pdfTables,privatePreview,@grafana/sharing-squad,2023-11-06,false,false,false,false +ssoSettingsApi,experimental,@grafana/identity-access-team,2023-11-08,true,false,false,false +logsInfiniteScrolling,experimental,@grafana/observability-logs,2023-11-09,false,false,false,true +flameGraphItemCollapsing,experimental,@grafana/observability-traces-and-profiling,2023-11-09,false,false,false,true +alertingDetailsViewV2,experimental,@grafana/alerting-squad,2023-11-09,false,false,false,true +datatrails,experimental,@grafana/dashboards-squad,2023-11-15,false,false,false,true +alertingSimplifiedRouting,experimental,@grafana/alerting-squad,2023-11-10,false,false,false,false +logRowsPopoverMenu,experimental,@grafana/observability-logs,2023-11-16,false,false,false,true +pluginsSkipHostEnvVars,experimental,@grafana/plugins-platform-backend,2023-11-15,false,false,false,false +regressionTransformation,experimental,@grafana/grafana-bi-squad,2023-11-24,false,false,false,true +displayAnonymousStats,experimental,@grafana/identity-access-team,2023-11-29,false,false,false,true diff --git a/pkg/services/featuremgmt/toggles_gen_test.go b/pkg/services/featuremgmt/toggles_gen_test.go index 7d950b048bc..9d258c5d8c6 100644 --- a/pkg/services/featuremgmt/toggles_gen_test.go +++ b/pkg/services/featuremgmt/toggles_gen_test.go @@ -11,6 +11,7 @@ import ( "strconv" "strings" "testing" + "time" "github.com/google/go-cmp/cmp" "github.com/olekukonko/tablewriter" @@ -25,7 +26,6 @@ func TestFeatureToggleFiles(t *testing.T) { "service-accounts": true, "database_metrics": true, "live-service-web-worker": true, - "k8s": true, // Camel case does not like this one } t.Run("check registry constraints", func(t *testing.T) { @@ -51,6 +51,10 @@ func TestFeatureToggleFiles(t *testing.T) { if flag.AllowSelfServe != nil && flag.Stage != FeatureStageGeneralAvailability { t.Errorf("only allow self-serving GA toggles") } + if flag.Created.Year() < 2021 { + t.Errorf("flag requires a reasonable created date. See: %s (%s)", + flag.Name, flag.Created.Format(time.DateOnly)) + } } }) @@ -216,8 +220,9 @@ func generateCSV() string { w := csv.NewWriter(&buf) if err := w.Write([]string{ "Name", - "Stage", //flag.Stage.String(), - "Owner", //string(flag.Owner), + "Stage", //flag.Stage.String(), + "Owner", //string(flag.Owner), + "Created", "requiresDevMode", //strconv.FormatBool(flag.RequiresDevMode), "RequiresLicense", //strconv.FormatBool(flag.RequiresLicense), "RequiresRestart", //strconv.FormatBool(flag.RequiresRestart), @@ -226,11 +231,19 @@ func generateCSV() string { log.Fatalln("error writing record to csv:", err) } + dateFormatter := func(t time.Time) string { + if t.Year() < 2020 { // fake year + return "" + } + return t.Format(time.DateOnly) + } + for _, flag := range standardFeatureFlags { if err := w.Write([]string{ flag.Name, flag.Stage.String(), string(flag.Owner), + dateFormatter(flag.Created), strconv.FormatBool(flag.RequiresDevMode), strconv.FormatBool(flag.RequiresLicense), strconv.FormatBool(flag.RequiresRestart),