Elasticsearch: Run version check thorugh backend if enableElasticsearchBackendQuerying enabled (#67679)

* Elasticsearch: Run getDBversion trough resource calls

* Update

* Update

* Fix lint

* Close response body

* Fix lint

* Refactor
This commit is contained in:
Ivana Huckova
2023-05-03 18:09:18 +02:00
committed by GitHub
parent 681925fb63
commit 4d7c0904ef
3 changed files with 111 additions and 3 deletions

View File

@@ -18,7 +18,7 @@ import {
TimeRange,
toUtc,
} from '@grafana/data';
import { BackendSrvRequest, FetchResponse, reportInteraction } from '@grafana/runtime';
import { BackendSrvRequest, FetchResponse, reportInteraction, config } from '@grafana/runtime';
import { backendSrv } from 'app/core/services/backend_srv'; // will use the version in __mocks__
import { TimeSrv } from 'app/features/dashboard/services/TimeSrv';
import { TemplateSrv } from 'app/features/templating/template_srv';
@@ -31,6 +31,8 @@ import { Filters, ElasticsearchOptions, ElasticsearchQuery } from './types';
const ELASTICSEARCH_MOCK_URL = 'http://elasticsearch.local';
const originalConsoleError = console.error;
jest.mock('@grafana/runtime', () => ({
...jest.requireActual('@grafana/runtime'),
getBackendSrv: () => backendSrv,
@@ -1291,3 +1293,37 @@ const logsResponse = {
],
},
};
describe('ElasticDatasource using backend', () => {
beforeEach(() => {
console.error = jest.fn();
config.featureToggles.enableElasticsearchBackendQuerying = true;
});
afterEach(() => {
console.error = originalConsoleError;
config.featureToggles.enableElasticsearchBackendQuerying = false;
});
describe('getDatabaseVersion', () => {
it('should correctly get db version', async () => {
const { ds } = getTestContext();
ds.getResource = jest.fn().mockResolvedValue({ version: { number: '8.0.0' } });
const version = await ds.getDatabaseVersion();
expect(version?.raw).toBe('8.0.0');
});
it('should correctly return null if invalid numeric version', async () => {
const { ds } = getTestContext();
ds.getResource = jest.fn().mockResolvedValue({ version: { number: 8 } });
const version = await ds.getDatabaseVersion();
expect(version).toBe(null);
});
it('should correctly return null if rejected request', async () => {
const { ds } = getTestContext();
ds.getResource = jest.fn().mockRejectedValue({});
const version = await ds.getDatabaseVersion();
expect(version).toBe(null);
});
});
});

View File

@@ -1,5 +1,5 @@
import { cloneDeep, find, first as _first, isObject, isString, map as _map } from 'lodash';
import { generate, lastValueFrom, Observable, of } from 'rxjs';
import { from, generate, lastValueFrom, Observable, of } from 'rxjs';
import { catchError, first, map, mergeMap, skipWhile, throwIfEmpty, tap } from 'rxjs/operators';
import { SemVer } from 'semver';
@@ -739,7 +739,11 @@ export class ElasticDatasource
private getDatabaseVersionUncached(): Promise<SemVer | null> {
// we want this function to never fail
return lastValueFrom(this.legacyQueryRunner.request('GET', '/')).then(
const getDbVersionObservable = config.featureToggles.enableElasticsearchBackendQuerying
? from(this.getResource(''))
: this.legacyQueryRunner.request('GET', '/');
return lastValueFrom(getDbVersionObservable).then(
(data) => {
const versionNumber = data?.version?.number;
if (typeof versionNumber !== 'string') {