Merge pull request #13990 from grafana/exporter-fix-13891

Exporter bug fix
This commit is contained in:
Torkel Ödegaard 2018-11-07 20:33:22 +01:00 committed by GitHub
commit 4e49c453b9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 34 additions and 13 deletions

View File

@ -29,19 +29,36 @@ export class DashboardExporter {
} }
const templateizeDatasourceUsage = obj => { const templateizeDatasourceUsage = obj => {
let datasource = obj.datasource;
let datasourceVariable = null;
// ignore data source properties that contain a variable // ignore data source properties that contain a variable
if (obj.datasource && obj.datasource.indexOf('$') === 0) { if (datasource && datasource.indexOf('$') === 0) {
if (variableLookup[obj.datasource.substring(1)]) { datasourceVariable = variableLookup[datasource.substring(1)];
return; if (datasourceVariable && datasourceVariable.current) {
datasource = datasourceVariable.current.value;
} }
} }
promises.push( promises.push(
this.datasourceSrv.get(obj.datasource).then(ds => { this.datasourceSrv.get(datasource).then(ds => {
if (ds.meta.builtIn) { if (ds.meta.builtIn) {
return; return;
} }
// add data source type to require list
requires['datasource' + ds.meta.id] = {
type: 'datasource',
id: ds.meta.id,
name: ds.meta.name,
version: ds.meta.info.version || '1.0.0',
};
// if used via variable we can skip templatizing usage
if (datasourceVariable) {
return;
}
const refName = 'DS_' + ds.name.replace(' ', '_').toUpperCase(); const refName = 'DS_' + ds.name.replace(' ', '_').toUpperCase();
datasources[refName] = { datasources[refName] = {
name: refName, name: refName,
@ -51,14 +68,8 @@ export class DashboardExporter {
pluginId: ds.meta.id, pluginId: ds.meta.id,
pluginName: ds.meta.name, pluginName: ds.meta.name,
}; };
obj.datasource = '${' + refName + '}';
requires['datasource' + ds.meta.id] = { obj.datasource = '${' + refName + '}';
type: 'datasource',
id: ds.meta.id,
name: ds.meta.name,
version: ds.meta.info.version || '1.0.0',
};
}) })
); );
}; };

View File

@ -32,8 +32,8 @@ describe('given dashboard with repeated panels', () => {
{ {
name: 'ds', name: 'ds',
type: 'datasource', type: 'datasource',
query: 'testdb', query: 'other2',
current: { value: 'prod', text: 'prod' }, current: { value: 'other2', text: 'other2' },
options: [], options: [],
}, },
], ],
@ -205,6 +205,11 @@ describe('given dashboard with repeated panels', () => {
expect(variable.options[0].text).toBe('${VAR_PREFIX}'); expect(variable.options[0].text).toBe('${VAR_PREFIX}');
expect(variable.options[0].value).toBe('${VAR_PREFIX}'); expect(variable.options[0].value).toBe('${VAR_PREFIX}');
}); });
it('should add datasources only use via datasource variable to requires', () => {
const require = _.find(exported.__requires, { name: 'OtherDB_2' });
expect(require.id).toBe('other2');
});
}); });
// Stub responses // Stub responses
@ -219,6 +224,11 @@ stubs['other'] = {
meta: { id: 'other', info: { version: '1.2.1' }, name: 'OtherDB' }, meta: { id: 'other', info: { version: '1.2.1' }, name: 'OtherDB' },
}; };
stubs['other2'] = {
name: 'other2',
meta: { id: 'other2', info: { version: '1.2.1' }, name: 'OtherDB_2' },
};
stubs['-- Mixed --'] = { stubs['-- Mixed --'] = {
name: 'mixed', name: 'mixed',
meta: { meta: {