Revert "Loki: do not produce histogram for instant queries (#50019)" (#50182)

This reverts commit b0925ed4ee.
This commit is contained in:
Gábor Farkas 2022-06-06 08:57:36 +02:00 committed by GitHub
parent e3815111ea
commit f8eb3c8720
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 12 additions and 27 deletions

View File

@ -25,7 +25,7 @@ import { CustomVariableModel } from '../../../features/variables/types';
import { isMetricsQuery, LokiDatasource, RangeQueryOptions } from './datasource'; import { isMetricsQuery, LokiDatasource, RangeQueryOptions } from './datasource';
import { makeMockLokiDatasource } from './mocks'; import { makeMockLokiDatasource } from './mocks';
import { LokiQuery, LokiQueryType, LokiResponse, LokiResultType } from './types'; import { LokiQuery, LokiResponse, LokiResultType } from './types';
jest.mock('@grafana/runtime', () => ({ jest.mock('@grafana/runtime', () => ({
// @ts-ignore // @ts-ignore
@ -997,15 +997,6 @@ describe('LokiDatasource', () => {
expect(ds.getLogsVolumeDataProvider(options)).toBeDefined(); 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', () => { describe('importing queries', () => {

View File

@ -139,28 +139,22 @@ export class LokiDatasource
} }
getLogsVolumeDataProvider(request: DataQueryRequest<LokiQuery>): Observable<DataQueryResponse> | undefined { getLogsVolumeDataProvider(request: DataQueryRequest<LokiQuery>): Observable<DataQueryResponse> | undefined {
const isQuerySuitable = (query: LokiQuery) => { const isLogsVolumeAvailable = request.targets.some((target) => target.expr && !isMetricsQuery(target.expr));
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) { if (!isLogsVolumeAvailable) {
return undefined; return undefined;
} }
const logsVolumeRequest = cloneDeep(request); const logsVolumeRequest = cloneDeep(request);
logsVolumeRequest.targets = logsVolumeRequest.targets.filter(isQuerySuitable).map((target) => { logsVolumeRequest.targets = logsVolumeRequest.targets
return { .filter((target) => target.expr && !isMetricsQuery(target.expr))
...target, .map((target) => {
instant: false, return {
volumeQuery: true, ...target,
expr: `sum by (level) (count_over_time(${target.expr}[$__interval]))`, instant: false,
}; volumeQuery: true,
}); expr: `sum by (level) (count_over_time(${target.expr}[$__interval]))`,
};
});
return queryLogsVolume(this, logsVolumeRequest, { return queryLogsVolume(this, logsVolumeRequest, {
extractLevel, extractLevel,