Skip to content

Commit 7bf9a4a

Browse files
committed
Fix time range for getTagKeys and getTagValues function.
1 parent 7a328e7 commit 7bf9a4a

File tree

7 files changed

+1293
-2171
lines changed

7 files changed

+1293
-2171
lines changed

package-lock.json

Lines changed: 1266 additions & 2146 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,8 @@
2121
"license": "AGPL-3.0",
2222
"devDependencies": {
2323
"@babel/core": "^7.21.4",
24-
"@grafana/e2e": "10.0.3",
25-
"@grafana/e2e-selectors": "10.0.3",
24+
"@grafana/e2e": "10.1.9",
25+
"@grafana/e2e-selectors": "10.1.9",
2626
"@grafana/eslint-config": "^6.0.0",
2727
"@grafana/tsconfig": "^1.2.0-rc1",
2828
"@storybook/addon-essentials": "^7.6.17",
@@ -74,10 +74,10 @@
7474
},
7575
"dependencies": {
7676
"@emotion/css": "^11.11",
77-
"@grafana/data": "10.0.3",
78-
"@grafana/experimental": "^1.7.6",
79-
"@grafana/runtime": "10.0.3",
80-
"@grafana/ui": "10.0.3",
77+
"@grafana/data": "10.1.9",
78+
"@grafana/experimental": "^1.7.10",
79+
"@grafana/runtime": "10.1.9",
80+
"@grafana/ui": "10.1.9",
8181
"@reduxjs/toolkit": "^1.9.5",
8282
"@uiw/react-codemirror": "^4.21.21",
8383
"lucene": "^2.1.1",

src/LogContext/components/LogContextUI.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
import React, { useEffect, useState, useCallback, useMemo } from "react";
2-
import { LogRowModel, Field as GrafanaField } from '@grafana/data';
2+
import { LogRowModel, Field as GrafanaField, getDefaultTimeRange } from '@grafana/data';
33
import { ElasticsearchQuery as DataQuery } from '../../types';
44
import { LuceneQueryEditor } from "../../components/LuceneQueryEditor";
55

66
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 } from "@/components/QueryEditor/ElasticsearchQueryContext";
10+
import { DatasourceContext, useRange } from "@/components/QueryEditor/ElasticsearchQueryContext";
1111
import { BaseQuickwitDataSource } from "@/datasource/base";
1212
import { useDatasourceFields } from "@/datasource/utils";
1313
import { Field, FieldContingency, Filter } from "../types";
@@ -51,7 +51,7 @@ export function LogContextUI(props: LogContextUIProps ){
5151
const {query, parsedQuery, setQuery, setParsedQuery} = builder;
5252
const [canRunQuery, setCanRunQuery] = useState<boolean>(false);
5353
const {row, origQuery, updateQuery, runContextQuery } = props;
54-
const {fields, getSuggestions} = useDatasourceFields(props.datasource);
54+
const {fields, getSuggestions} = useDatasourceFields(props.datasource, getDefaultTimeRange());
5555

5656
useEffect(()=>{
5757
setQuery(origQuery?.query || '')

src/components/QueryEditor/index.tsx

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import { useDispatch } from '@/hooks/useStatelessReducer';
1313
import { ElasticsearchQuery } from '@/types';
1414

1515
import { BucketAggregationsEditor } from './BucketAggregationsEditor';
16-
import { ElasticsearchProvider, useDatasource } from './ElasticsearchQueryContext';
16+
import { ElasticsearchProvider, useDatasource, useRange } from './ElasticsearchQueryContext';
1717
import { MetricAggregationsEditor } from './MetricAggregationsEditor';
1818
import { metricAggregationConfig } from './MetricAggregationsEditor/utils';
1919
import { changeQuery } from './state';
@@ -67,7 +67,8 @@ type ElasticSearchQueryFieldProps = {
6767
export const ElasticSearchQueryField = ({ value, onChange, onSubmit }: ElasticSearchQueryFieldProps) => {
6868
const styles = useStyles2(getStyles);
6969
const datasource = useDatasource()
70-
const { getSuggestions } = useDatasourceFields(datasource);
70+
const range = useRange();
71+
const { getSuggestions } = useDatasourceFields(datasource, range);
7172

7273
return (
7374
<div className={styles.queryItem}>

src/datasource/base.ts

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ import {
88
DataFrame,
99
DataQueryRequest,
1010
DataQueryResponse,
11+
DataSourceGetTagKeysOptions,
12+
DataSourceGetTagValuesOptions,
1113
DataSourceInstanceSettings,
1214
DataSourceWithQueryImportSupport,
1315
getDefaultTimeRange,
@@ -46,7 +48,7 @@ type FieldCapsSpec = {
4648
aggregatable?: boolean,
4749
searchable?: boolean,
4850
type?: string[],
49-
_range?: TimeRange
51+
range?: TimeRange
5052
}
5153

5254
export class BaseQuickwitDataSource
@@ -163,7 +165,8 @@ export class BaseQuickwitDataSource
163165
)
164166
}
165167

166-
getFields(spec: FieldCapsSpec={}, range = getDefaultTimeRange()): Observable<MetricFindValue[]> {
168+
getFields(spec: FieldCapsSpec={}): Observable<MetricFindValue[]> {
169+
const range = spec.range || getDefaultTimeRange();
167170
return from(this.getResource('_elastic/' + this.index + '/_field_caps', {
168171
start_timestamp: Math.floor(range.from.valueOf()/SECOND),
169172
end_timestamp: Math.ceil(range.to.valueOf()/SECOND),
@@ -209,17 +212,16 @@ export class BaseQuickwitDataSource
209212
/**
210213
* Get tag keys for adhoc filters
211214
*/
212-
getTagKeys(spec?: FieldCapsSpec) {
213-
const fields = this.getFields(spec)
215+
getTagKeys(options: DataSourceGetTagKeysOptions) {
216+
const fields = this.getFields({aggregatable:true, range: options.timeRange})
214217
return lastValueFrom(fields, {defaultValue:[]});
215218
}
216219

217220
/**
218221
* Get tag values for adhoc filters
219222
*/
220-
getTagValues(options: any) {
221-
const range = getDefaultTimeRange();
222-
const terms = this.getTerms({ field: options.key }, range)
223+
getTagValues(options: DataSourceGetTagValuesOptions) {
224+
const terms = this.getTerms({ field: options.key }, options.timeRange)
223225
return lastValueFrom(terms, {defaultValue:[]});
224226
}
225227

@@ -292,7 +294,7 @@ export class BaseQuickwitDataSource
292294
if (query) {
293295
if (parsedQuery.find === 'fields') {
294296
parsedQuery.type = this.interpolateLuceneQuery(parsedQuery.type);
295-
return lastValueFrom(this.getFields({aggregatable:true, type:parsedQuery.type, _range:range}), {defaultValue:[]});
297+
return lastValueFrom(this.getFields({aggregatable:true, type:parsedQuery.type, range:range}), {defaultValue:[]});
296298
}
297299
if (parsedQuery.find === 'terms') {
298300
parsedQuery.field = this.interpolateLuceneQuery(parsedQuery.field);

src/datasource/utils.ts

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { BaseQuickwitDataSource } from "./base";
22
import { useState, useEffect, useCallback } from "react";
3-
import{ MetricFindValue } from '@grafana/data';
3+
import{ MetricFindValue, TimeRange } from '@grafana/data';
44

55
/**
66
* Provide suggestions based on datasource fields
@@ -15,14 +15,13 @@ export type Suggestion = {
1515
}>
1616
}
1717

18-
export function useDatasourceFields(datasource: BaseQuickwitDataSource) {
18+
export function useDatasourceFields(datasource: BaseQuickwitDataSource, range: TimeRange) {
1919
const [fields, setFields] = useState<MetricFindValue[]>([]);
20-
2120
useEffect(() => {
2221
if (datasource.getTagKeys) {
23-
datasource.getTagKeys({ searchable: true }).then(setFields);
22+
datasource.getTagKeys({ searchable: true, range: range}).then(setFields);
2423
}
25-
}, [datasource, setFields]);
24+
}, [datasource, range, setFields]);
2625

2726
const getSuggestions = useCallback(async (word: string): Promise<Suggestion> => {
2827
let suggestions: Suggestion = { from: 0, options: [] };

src/hooks/useFields.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ export const useFields = (type: AggregationType | string[]) => {
6262
return async (q?: string) => {
6363
// _mapping doesn't support filtering, we avoid sending a request everytime q changes
6464
if (!rawFields) {
65-
rawFields = await lastValueFrom(datasource.getFields({aggregatable:true, type:filter, _range:range}));
65+
rawFields = await lastValueFrom(datasource.getFields({aggregatable:true, type:filter, range:range}));
6666
}
6767

6868
return rawFields.filter(({ text }) => q === undefined || text.includes(q)).map(toSelectableValue);

0 commit comments

Comments
 (0)