grafana/public/app/plugins/datasource/elasticsearch/LanguageProvider.ts
Ivana Huckova c289cd136c
Elasticsearch: Fix adding of adhoc filters when jumping to explore (#60691)
* Elasticsearch: Fix adding of adhoc filters when jumping to explore

* Change NOT operator to - as it is preffered solution
2022-12-22 16:06:30 +01:00

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 ');
}
}