mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
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:
@@ -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);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
@@ -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') {
|
||||
|
||||
Reference in New Issue
Block a user