mirror of
https://github.com/grafana/grafana.git
synced 2025-09-26 07:14:10 +08:00

* Add basic implementation * Split import/export query interface * Rename abstract query type * Rename abstract query type * Split loki/prom parsing * Update docs * Test importing abstract queries to Elastic * Test exporting abstract queries from Graphite * Test Prom and Loki query import/export * Give better control to import/export all queries to data sources * Fix unit test * Fix unit test * Filter out non-existing labels when importing queries to Loki * Fix relative imports, names and docs * Fix import type * Move toPromLike query to Prometheus code * Dedup label operator mappings * importAbstractQueries -> importFromAbstractQueries * Fix unit tests
62 lines
2.0 KiB
TypeScript
62 lines
2.0 KiB
TypeScript
import LanguageProvider from './language_provider';
|
|
import { ElasticDatasource } from './datasource';
|
|
import { AbstractLabelOperator, AbstractQuery, DataSourceInstanceSettings } from '@grafana/data';
|
|
import { ElasticsearchOptions, ElasticsearchQuery } from './types';
|
|
import { TemplateSrv } from '../../../features/templating/template_srv';
|
|
|
|
const templateSrvStub = {
|
|
getAdhocFilters: jest.fn(() => [] as any[]),
|
|
replace: jest.fn((a: string) => a),
|
|
} as any;
|
|
|
|
const dataSource = new ElasticDatasource(
|
|
{
|
|
url: 'http://es.com',
|
|
database: '[asd-]YYYY.MM.DD',
|
|
jsonData: {
|
|
interval: 'Daily',
|
|
esVersion: '2.0.0',
|
|
timeField: '@time',
|
|
},
|
|
} as DataSourceInstanceSettings<ElasticsearchOptions>,
|
|
templateSrvStub as TemplateSrv
|
|
);
|
|
|
|
const baseLogsQuery: Partial<ElasticsearchQuery> = {
|
|
metrics: [{ type: 'logs', id: '1' }],
|
|
};
|
|
|
|
describe('transform abstract query to elasticsearch query', () => {
|
|
it('With some labels', () => {
|
|
const instance = new LanguageProvider(dataSource);
|
|
const abstractQuery: AbstractQuery = {
|
|
refId: 'bar',
|
|
labelMatchers: [
|
|
{ name: 'label1', operator: AbstractLabelOperator.Equal, value: 'value1' },
|
|
{ name: 'label2', operator: AbstractLabelOperator.NotEqual, value: 'value2' },
|
|
{ name: 'label3', operator: AbstractLabelOperator.EqualRegEx, value: 'value3' },
|
|
{ name: 'label4', operator: AbstractLabelOperator.NotEqualRegEx, value: 'value4' },
|
|
],
|
|
};
|
|
const result = instance.importFromAbstractQuery(abstractQuery);
|
|
|
|
expect(result).toEqual({
|
|
...baseLogsQuery,
|
|
query: 'label1:"value1" AND NOT label2:"value2" AND label3:/value3/ AND NOT label4:/value4/',
|
|
refId: abstractQuery.refId,
|
|
});
|
|
});
|
|
|
|
it('Empty query', () => {
|
|
const instance = new LanguageProvider(dataSource);
|
|
const abstractQuery = { labelMatchers: [], refId: 'foo' };
|
|
const result = instance.importFromAbstractQuery(abstractQuery);
|
|
|
|
expect(result).toEqual({
|
|
...baseLogsQuery,
|
|
query: '',
|
|
refId: abstractQuery.refId,
|
|
});
|
|
});
|
|
});
|