mirror of
https://github.com/grafana/grafana.git
synced 2025-02-03 12:11:09 -06:00
Loki: do not produce histogram for instant queries (#50019)
* loki: no histogram for instant queries * added test
This commit is contained in:
parent
467e375fe6
commit
b0925ed4ee
@ -25,7 +25,7 @@ import { CustomVariableModel } from '../../../features/variables/types';
|
||||
|
||||
import { isMetricsQuery, LokiDatasource, RangeQueryOptions } from './datasource';
|
||||
import { makeMockLokiDatasource } from './mocks';
|
||||
import { LokiQuery, LokiResponse, LokiResultType } from './types';
|
||||
import { LokiQuery, LokiQueryType, LokiResponse, LokiResultType } from './types';
|
||||
|
||||
jest.mock('@grafana/runtime', () => ({
|
||||
// @ts-ignore
|
||||
@ -997,6 +997,15 @@ describe('LokiDatasource', () => {
|
||||
|
||||
expect(ds.getLogsVolumeDataProvider(options)).toBeDefined();
|
||||
});
|
||||
|
||||
it('does not create provider if there is only an instant logs query', () => {
|
||||
const ds = createLokiDSForTests();
|
||||
const options = getQueryOptions<LokiQuery>({
|
||||
targets: [{ expr: '{label=value', refId: 'A', queryType: LokiQueryType.Instant }],
|
||||
});
|
||||
|
||||
expect(ds.getLogsVolumeDataProvider(options)).not.toBeDefined();
|
||||
});
|
||||
});
|
||||
|
||||
describe('importing queries', () => {
|
||||
|
@ -141,22 +141,28 @@ export class LokiDatasource
|
||||
}
|
||||
|
||||
getLogsVolumeDataProvider(request: DataQueryRequest<LokiQuery>): Observable<DataQueryResponse> | undefined {
|
||||
const isLogsVolumeAvailable = request.targets.some((target) => target.expr && !isMetricsQuery(target.expr));
|
||||
const isQuerySuitable = (query: LokiQuery) => {
|
||||
const normalized = getNormalizedLokiQuery(query);
|
||||
const { expr } = normalized;
|
||||
// it has to be a logs-producing range-query
|
||||
return expr && !isMetricsQuery(expr) && normalized.queryType === LokiQueryType.Range;
|
||||
};
|
||||
|
||||
const isLogsVolumeAvailable = request.targets.some(isQuerySuitable);
|
||||
|
||||
if (!isLogsVolumeAvailable) {
|
||||
return undefined;
|
||||
}
|
||||
|
||||
const logsVolumeRequest = cloneDeep(request);
|
||||
logsVolumeRequest.targets = logsVolumeRequest.targets
|
||||
.filter((target) => target.expr && !isMetricsQuery(target.expr))
|
||||
.map((target) => {
|
||||
return {
|
||||
...target,
|
||||
instant: false,
|
||||
volumeQuery: true,
|
||||
expr: `sum by (level) (count_over_time(${target.expr}[$__interval]))`,
|
||||
};
|
||||
});
|
||||
logsVolumeRequest.targets = logsVolumeRequest.targets.filter(isQuerySuitable).map((target) => {
|
||||
return {
|
||||
...target,
|
||||
instant: false,
|
||||
volumeQuery: true,
|
||||
expr: `sum by (level) (count_over_time(${target.expr}[$__interval]))`,
|
||||
};
|
||||
});
|
||||
|
||||
return queryLogsVolume(this, logsVolumeRequest, {
|
||||
extractLevel,
|
||||
|
Loading…
Reference in New Issue
Block a user