mirror of
https://github.com/grafana/grafana.git
synced 2025-02-15 01:53:33 -06:00
* Elasticsearch: Fix adding of adhoc filters when jumping to explore * Change NOT operator to - as it is preffered solution
55 lines
1.6 KiB
TypeScript
55 lines
1.6 KiB
TypeScript
import { AbstractLabelOperator, AbstractLabelMatcher, LanguageProvider, AbstractQuery } from '@grafana/data';
|
|
|
|
import { ElasticDatasource } from './datasource';
|
|
import { ElasticsearchQuery } from './types';
|
|
|
|
export default class ElasticsearchLanguageProvider extends LanguageProvider {
|
|
declare request: (url: string, params?: any) => Promise<any>;
|
|
declare start: () => Promise<any[]>;
|
|
datasource: ElasticDatasource;
|
|
|
|
constructor(datasource: ElasticDatasource, initialValues?: any) {
|
|
super();
|
|
this.datasource = datasource;
|
|
|
|
Object.assign(this, initialValues);
|
|
}
|
|
|
|
/**
|
|
* Queries are transformed to an ES Logs query since it's the behaviour most users expect.
|
|
**/
|
|
importFromAbstractQuery(abstractQuery: AbstractQuery): ElasticsearchQuery {
|
|
return {
|
|
metrics: [
|
|
{
|
|
id: '1',
|
|
type: 'logs',
|
|
},
|
|
],
|
|
query: this.getElasticsearchQuery(abstractQuery.labelMatchers),
|
|
refId: abstractQuery.refId,
|
|
};
|
|
}
|
|
|
|
getElasticsearchQuery(labels: AbstractLabelMatcher[]): string {
|
|
return labels
|
|
.map((label) => {
|
|
switch (label.operator) {
|
|
case AbstractLabelOperator.Equal: {
|
|
return label.name + ':"' + label.value + '"';
|
|
}
|
|
case AbstractLabelOperator.NotEqual: {
|
|
return '-' + label.name + ':"' + label.value + '"';
|
|
}
|
|
case AbstractLabelOperator.EqualRegEx: {
|
|
return label.name + ':/' + label.value + '/';
|
|
}
|
|
case AbstractLabelOperator.NotEqualRegEx: {
|
|
return '-' + label.name + ':/' + label.value + '/';
|
|
}
|
|
}
|
|
})
|
|
.join(' AND ');
|
|
}
|
|
}
|