Skip to content

Commit 60b6f2d

Browse files
committed
Use fields with timeRange in context, fix tests
1 parent 7bf9a4a commit 60b6f2d

File tree

3 files changed

+24
-27
lines changed

3 files changed

+24
-27
lines changed

src/LogContext/LogContextProvider.ts

Lines changed: 10 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import {
1111
dateTime,
1212
LogRowModel,
1313
rangeUtil,
14+
TimeRange,
1415
} from '@grafana/data';
1516

1617
import { ElasticsearchQuery, Logs, LogsSortDirection} from '../types';
@@ -26,20 +27,16 @@ export enum LogRowContextQueryDirection {
2627
Forward = 'FORWARD',
2728
}
2829

29-
function createContextTimeRange(rowTimeEpochMs: number, direction: string) {
30+
export function createContextTimeRange(rowTimeEpochMs: number, direction?: LogRowContextQueryDirection): TimeRange {
3031
const offset = 7;
31-
// For log context, we want to request data from 7 subsequent/previous indices
32-
if (direction === LogRowContextQueryDirection.Forward) {
33-
return {
34-
from: dateTime(rowTimeEpochMs).utc(),
35-
to: dateTime(rowTimeEpochMs).add(offset, 'hours').utc(),
36-
};
37-
} else {
38-
return {
39-
from: dateTime(rowTimeEpochMs).subtract(offset, 'hours').utc(),
40-
to: dateTime(rowTimeEpochMs).utc(),
41-
};
32+
const timeFrom = dateTime(rowTimeEpochMs)
33+
const timeTo = dateTime(rowTimeEpochMs)
34+
35+
const timeRange = {
36+
from: (direction === LogRowContextQueryDirection.Forward) ? timeFrom.utc() : timeFrom.subtract(offset, 'hours').utc(),
37+
to: (direction === LogRowContextQueryDirection.Backward) ? timeTo.utc() : timeTo.add(offset, 'hours').utc(),
4238
}
39+
return { ...timeRange, raw:timeRange }
4340
}
4441

4542
export class LogContextProvider {
@@ -76,12 +73,7 @@ export class LogContextProvider {
7673
query: this.contextQuery == null ? origQuery?.query : this.contextQuery,
7774
};
7875

79-
const timeRange = createContextTimeRange(row.timeEpochMs, direction);
80-
const range = {
81-
from: timeRange.from,
82-
to: timeRange.to,
83-
raw: timeRange,
84-
};
76+
const range = createContextTimeRange(row.timeEpochMs, direction);
8577

8678
const interval = rangeUtil.calculateInterval(range, 1);
8779

src/LogContext/components/LogContextUI.tsx

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,11 @@ import { css } from "@emotion/css";
77
import { Button } from "@grafana/ui";
88
import { useQueryBuilder } from '@/QueryBuilder/lucene';
99
import { LogContextQueryBuilderSidebar } from "./LogContextQueryBuilderSidebar";
10-
import { DatasourceContext, useRange } from "@/components/QueryEditor/ElasticsearchQueryContext";
10+
import { DatasourceContext } from "@/components/QueryEditor/ElasticsearchQueryContext";
1111
import { BaseQuickwitDataSource } from "@/datasource/base";
1212
import { useDatasourceFields } from "@/datasource/utils";
1313
import { Field, FieldContingency, Filter } from "../types";
14+
import { createContextTimeRange } from "LogContext/LogContextProvider";
1415

1516
// TODO : define sensible defaults here
1617
// const excludedFields = [
@@ -51,7 +52,11 @@ export function LogContextUI(props: LogContextUIProps ){
5152
const {query, parsedQuery, setQuery, setParsedQuery} = builder;
5253
const [canRunQuery, setCanRunQuery] = useState<boolean>(false);
5354
const {row, origQuery, updateQuery, runContextQuery } = props;
54-
const {fields, getSuggestions} = useDatasourceFields(props.datasource, getDefaultTimeRange());
55+
56+
const fieldsSuggestionTimeRange = useMemo(()=>createContextTimeRange(row.timeEpochMs), [row])
57+
const defaultTimeRange = getDefaultTimeRange()
58+
console.log("RANGES", fieldsSuggestionTimeRange, defaultTimeRange)
59+
const {fields, getSuggestions} = useDatasourceFields(props.datasource, fieldsSuggestionTimeRange);
5560

5661
useEffect(()=>{
5762
setQuery(origQuery?.query || '')

src/hooks/useFields.test.tsx

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -50,39 +50,39 @@ describe('useFields hook', () => {
5050
{ wrapper, initialProps: 'cardinality' }
5151
);
5252
result.current();
53-
expect(getFields).toHaveBeenLastCalledWith({aggregatable:true, type:[], _range:timeRange});
53+
expect(getFields).toHaveBeenLastCalledWith({aggregatable:true, type:[], range:timeRange});
5454

5555
// All other metric aggregations only work on numbers
5656
rerender('avg');
5757
result.current();
58-
expect(getFields).toHaveBeenLastCalledWith({aggregatable:true, type:['number'], _range:timeRange});
58+
expect(getFields).toHaveBeenLastCalledWith({aggregatable:true, type:['number'], range:timeRange});
5959

6060
//
6161
// BUCKET AGGREGATIONS
6262
//
6363
// Date Histrogram only works on dates
6464
rerender('date_histogram');
6565
result.current();
66-
expect(getFields).toHaveBeenLastCalledWith({aggregatable:true, type:['date'], _range:timeRange});
66+
expect(getFields).toHaveBeenLastCalledWith({aggregatable:true, type:['date'], range:timeRange});
6767

6868
// Histrogram only works on numbers
6969
rerender('histogram');
7070
result.current();
71-
expect(getFields).toHaveBeenLastCalledWith({aggregatable:true, type:['number'], _range:timeRange});
71+
expect(getFields).toHaveBeenLastCalledWith({aggregatable:true, type:['number'], range:timeRange});
7272

7373
// Geohash Grid only works on geo_point data
7474
rerender('geohash_grid');
7575
result.current();
76-
expect(getFields).toHaveBeenLastCalledWith({aggregatable:true, type:['geo_point'], _range:timeRange});
76+
expect(getFields).toHaveBeenLastCalledWith({aggregatable:true, type:['geo_point'], range:timeRange});
7777

7878
// All other bucket aggregation work on any kind of data
7979
rerender('terms');
8080
result.current();
81-
expect(getFields).toHaveBeenLastCalledWith({aggregatable:true, type:[], _range:timeRange});
81+
expect(getFields).toHaveBeenLastCalledWith({aggregatable:true, type:[], range:timeRange});
8282

8383
// top_metrics work on only on numeric data in 7.7
8484
rerender('top_metrics');
8585
result.current();
86-
expect(getFields).toHaveBeenLastCalledWith({aggregatable:true, type:['number'], _range:timeRange});
86+
expect(getFields).toHaveBeenLastCalledWith({aggregatable:true, type:['number'], range:timeRange});
8787
});
8888
});

0 commit comments

Comments
 (0)