mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
QueryService: Add feature toggles to better support testing (#86493)
This commit is contained in:
@@ -214,9 +214,7 @@ export class GrafanaBootConfig implements GrafanaConfig {
|
||||
systemDateFormats.update(this.dateFormats);
|
||||
}
|
||||
|
||||
if (this.buildInfo.env === 'development') {
|
||||
overrideFeatureTogglesFromUrl(this);
|
||||
}
|
||||
overrideFeatureTogglesFromUrl(this);
|
||||
overrideFeatureTogglesFromLocalStorage(this);
|
||||
|
||||
if (this.featureToggles.disableAngular) {
|
||||
@@ -253,15 +251,11 @@ function overrideFeatureTogglesFromUrl(config: GrafanaBootConfig) {
|
||||
return;
|
||||
}
|
||||
|
||||
const migrationFeatureFlags = new Set([
|
||||
'autoMigrateOldPanels',
|
||||
'autoMigrateGraphPanel',
|
||||
'autoMigrateTablePanel',
|
||||
'autoMigratePiechartPanel',
|
||||
'autoMigrateWorldmapPanel',
|
||||
'autoMigrateStatPanel',
|
||||
'disableAngular',
|
||||
]);
|
||||
const isDevelopment = config.buildInfo.env === 'development';
|
||||
|
||||
// Although most flags can not be changed from the URL in production,
|
||||
// some of them are safe (and useful!) to change dynamically from the browser URL
|
||||
const safeRuntimeFeatureFlags = new Set(['queryServiceFromUI']);
|
||||
|
||||
const params = new URLSearchParams(window.location.search);
|
||||
params.forEach((value, key) => {
|
||||
@@ -269,15 +263,14 @@ function overrideFeatureTogglesFromUrl(config: GrafanaBootConfig) {
|
||||
const featureToggles = config.featureToggles as Record<string, boolean>;
|
||||
const featureName = key.substring(10);
|
||||
|
||||
// skip the migration feature flags
|
||||
if (migrationFeatureFlags.has(featureName)) {
|
||||
return;
|
||||
}
|
||||
|
||||
const toggleState = value === 'true' || value === ''; // browser rewrites true as ''
|
||||
if (toggleState !== featureToggles[key]) {
|
||||
featureToggles[featureName] = toggleState;
|
||||
console.log(`Setting feature toggle ${featureName} = ${toggleState} via url`);
|
||||
if (isDevelopment || safeRuntimeFeatureFlags.has(featureName)) {
|
||||
featureToggles[featureName] = toggleState;
|
||||
console.log(`Setting feature toggle ${featureName} = ${toggleState} via url`);
|
||||
} else {
|
||||
console.log(`Unable to change feature toggle ${featureName} via url in production.`);
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
@@ -207,6 +207,18 @@ class DataSourceWithBackend<
|
||||
|
||||
let url = '/api/ds/query?ds_type=' + this.type;
|
||||
|
||||
// Use the new query service
|
||||
if (config.featureToggles.queryServiceFromUI) {
|
||||
if (!(config.featureToggles.queryService || config.featureToggles.grafanaAPIServerWithExperimentalAPIs)) {
|
||||
console.warn('feature toggle queryServiceFromUI also requires the queryService to be running');
|
||||
} else {
|
||||
if (!hasExpr && dsUIDs.size === 1) {
|
||||
// TODO? can we talk directly to the apiserver?
|
||||
}
|
||||
url = `/apis/query.grafana.app/v0alpha1/namespaces/${config.namespace}/query?ds_type=' + this.type`;
|
||||
}
|
||||
}
|
||||
|
||||
if (hasExpr) {
|
||||
headers[PluginRequestHeaders.FromExpression] = 'true';
|
||||
url += '&expression=true';
|
||||
|
||||
Reference in New Issue
Block a user