mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
Loki: Fix show context not working in some occasions (#52458)
* added missing `languageProvider.start` call * moved `languageProvider.start`
This commit is contained in:
@@ -7646,8 +7646,7 @@ exports[`better eslint`] = {
|
||||
[0, 0, 0, "Unexpected any. Specify a different type.", "10"],
|
||||
[0, 0, 0, "Unexpected any. Specify a different type.", "11"],
|
||||
[0, 0, 0, "Unexpected any. Specify a different type.", "12"],
|
||||
[0, 0, 0, "Unexpected any. Specify a different type.", "13"],
|
||||
[0, 0, 0, "Unexpected any. Specify a different type.", "14"]
|
||||
[0, 0, 0, "Unexpected any. Specify a different type.", "13"]
|
||||
],
|
||||
"public/app/plugins/datasource/loki/datasource.ts:5381": [
|
||||
[0, 0, 0, "Unexpected any. Specify a different type.", "0"],
|
||||
|
||||
@@ -703,7 +703,7 @@ describe('LokiDatasource', () => {
|
||||
|
||||
describe('prepareLogRowContextQueryTarget', () => {
|
||||
const ds = createLokiDSForTests();
|
||||
it('creates query with only labels from /labels API', () => {
|
||||
it('creates query with only labels from /labels API', async () => {
|
||||
const row: LogRowModel = {
|
||||
rowIndex: 0,
|
||||
dataFrame: new MutableDataFrame({
|
||||
@@ -717,15 +717,39 @@ describe('LokiDatasource', () => {
|
||||
}),
|
||||
labels: { bar: 'baz', foo: 'uniqueParsedLabel' },
|
||||
uid: '1',
|
||||
} as any;
|
||||
} as unknown as LogRowModel;
|
||||
|
||||
//Mock stored labels to only include "bar" label
|
||||
jest.spyOn(ds.languageProvider, 'start').mockImplementation(() => Promise.resolve([]));
|
||||
jest.spyOn(ds.languageProvider, 'getLabelKeys').mockImplementation(() => ['bar']);
|
||||
const contextQuery = ds.prepareLogRowContextQueryTarget(row, 10, 'BACKWARD');
|
||||
const contextQuery = await ds.prepareLogRowContextQueryTarget(row, 10, 'BACKWARD');
|
||||
|
||||
expect(contextQuery.query.expr).toContain('baz');
|
||||
expect(contextQuery.query.expr).not.toContain('uniqueParsedLabel');
|
||||
});
|
||||
|
||||
it('should call languageProvider.start to fetch labels', async () => {
|
||||
const row: LogRowModel = {
|
||||
rowIndex: 0,
|
||||
dataFrame: new MutableDataFrame({
|
||||
fields: [
|
||||
{
|
||||
name: 'ts',
|
||||
type: FieldType.time,
|
||||
values: [0],
|
||||
},
|
||||
],
|
||||
}),
|
||||
labels: { bar: 'baz', foo: 'uniqueParsedLabel' },
|
||||
uid: '1',
|
||||
} as unknown as LogRowModel;
|
||||
|
||||
//Mock stored labels to only include "bar" label
|
||||
jest.spyOn(ds.languageProvider, 'start').mockImplementation(() => Promise.resolve([]));
|
||||
await ds.prepareLogRowContextQueryTarget(row, 10, 'BACKWARD');
|
||||
|
||||
expect(ds.languageProvider.start).toBeCalled();
|
||||
});
|
||||
});
|
||||
|
||||
describe('logs volume data provider', () => {
|
||||
|
||||
@@ -431,10 +431,10 @@ export class LokiDatasource
|
||||
return Math.ceil(date.valueOf() * 1e6);
|
||||
}
|
||||
|
||||
getLogRowContext = (row: LogRowModel, options?: RowContextOptions): Promise<{ data: DataFrame[] }> => {
|
||||
getLogRowContext = async (row: LogRowModel, options?: RowContextOptions): Promise<{ data: DataFrame[] }> => {
|
||||
const direction = (options && options.direction) || 'BACKWARD';
|
||||
const limit = (options && options.limit) || 10;
|
||||
const { query, range } = this.prepareLogRowContextQueryTarget(row, limit, direction);
|
||||
const { query, range } = await this.prepareLogRowContextQueryTarget(row, limit, direction);
|
||||
|
||||
const processDataFrame = (frame: DataFrame): DataFrame => {
|
||||
// log-row-context requires specific field-names to work, so we set them here: "ts", "line", "id"
|
||||
@@ -497,11 +497,13 @@ export class LokiDatasource
|
||||
);
|
||||
};
|
||||
|
||||
prepareLogRowContextQueryTarget = (
|
||||
prepareLogRowContextQueryTarget = async (
|
||||
row: LogRowModel,
|
||||
limit: number,
|
||||
direction: 'BACKWARD' | 'FORWARD'
|
||||
): { query: LokiQuery; range: TimeRange } => {
|
||||
): Promise<{ query: LokiQuery; range: TimeRange }> => {
|
||||
// need to await the languageProvider to be started to have all labels. This call is not blocking after it has been called once.
|
||||
await this.languageProvider.start();
|
||||
const labels = this.languageProvider.getLabelKeys();
|
||||
const expr = Object.keys(row.labels)
|
||||
.map((label: string) => {
|
||||
|
||||
Reference in New Issue
Block a user