[Metrics UI] Fix alerting when a filter query is present (#64575)
This commit is contained in:
parent
2e410d8952
commit
1669a10441
|
@ -51,17 +51,19 @@ const getCurrentValueFromAggregations = (
|
|||
|
||||
const getParsedFilterQuery: (
|
||||
filterQuery: string | undefined
|
||||
) => Record<string, any> = filterQuery => {
|
||||
) => Record<string, any> | Array<Record<string, any>> = filterQuery => {
|
||||
if (!filterQuery) return {};
|
||||
try {
|
||||
return JSON.parse(filterQuery).bool;
|
||||
} catch (e) {
|
||||
return {
|
||||
query_string: {
|
||||
query: filterQuery,
|
||||
analyze_wildcard: true,
|
||||
return [
|
||||
{
|
||||
query_string: {
|
||||
query: filterQuery,
|
||||
analyze_wildcard: true,
|
||||
},
|
||||
},
|
||||
};
|
||||
];
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -159,8 +161,12 @@ export const getElasticsearchMetricQuery = (
|
|||
return {
|
||||
query: {
|
||||
bool: {
|
||||
filter: [...rangeFilters, ...metricFieldFilters],
|
||||
...parsedFilterQuery,
|
||||
filter: [
|
||||
...rangeFilters,
|
||||
...metricFieldFilters,
|
||||
...(Array.isArray(parsedFilterQuery) ? parsedFilterQuery : []),
|
||||
],
|
||||
...(!Array.isArray(parsedFilterQuery) ? parsedFilterQuery : {}),
|
||||
},
|
||||
},
|
||||
size: 0,
|
||||
|
@ -233,6 +239,7 @@ const getMetric: (
|
|||
body: searchBody,
|
||||
index,
|
||||
});
|
||||
|
||||
return { '*': getCurrentValueFromAggregations(result.aggregations, aggType) };
|
||||
} catch (e) {
|
||||
return { '*': undefined }; // Trigger an Error state
|
||||
|
|
|
@ -39,6 +39,7 @@ export default function({ getService }: FtrProviderContext) {
|
|||
});
|
||||
expect(result.error).to.not.be.ok();
|
||||
expect(result.hits).to.be.ok();
|
||||
expect(result.aggregations).to.be.ok();
|
||||
});
|
||||
}
|
||||
it('should work with a filterQuery', async () => {
|
||||
|
@ -53,6 +54,21 @@ export default function({ getService }: FtrProviderContext) {
|
|||
});
|
||||
expect(result.error).to.not.be.ok();
|
||||
expect(result.hits).to.be.ok();
|
||||
expect(result.aggregations).to.be.ok();
|
||||
});
|
||||
it('should work with a filterQuery in KQL format', async () => {
|
||||
const searchBody = getElasticsearchMetricQuery(
|
||||
getSearchParams('avg'),
|
||||
undefined,
|
||||
'"agent.hostname":"foo"'
|
||||
);
|
||||
const result = await client.search({
|
||||
index,
|
||||
body: searchBody,
|
||||
});
|
||||
expect(result.error).to.not.be.ok();
|
||||
expect(result.hits).to.be.ok();
|
||||
expect(result.aggregations).to.be.ok();
|
||||
});
|
||||
});
|
||||
describe('querying with a groupBy parameter', () => {
|
||||
|
@ -65,6 +81,7 @@ export default function({ getService }: FtrProviderContext) {
|
|||
});
|
||||
expect(result.error).to.not.be.ok();
|
||||
expect(result.hits).to.be.ok();
|
||||
expect(result.aggregations).to.be.ok();
|
||||
});
|
||||
}
|
||||
it('should work with a filterQuery', async () => {
|
||||
|
@ -79,6 +96,7 @@ export default function({ getService }: FtrProviderContext) {
|
|||
});
|
||||
expect(result.error).to.not.be.ok();
|
||||
expect(result.hits).to.be.ok();
|
||||
expect(result.aggregations).to.be.ok();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
|
Loading…
Reference in a new issue