|
|
|
|
@ -1,6 +1,6 @@ |
|
|
|
|
import React, { useMemo } from 'react'; |
|
|
|
|
import React, { useEffect, useMemo, useState } from 'react'; |
|
|
|
|
|
|
|
|
|
import { DataSourceApi, PanelData, SelectableValue } from '@grafana/data'; |
|
|
|
|
import { DataSourceApi, getDefaultTimeRange, LoadingState, PanelData, SelectableValue } from '@grafana/data'; |
|
|
|
|
import { EditorRow } from '@grafana/experimental'; |
|
|
|
|
import { LabelFilters } from 'app/plugins/datasource/prometheus/querybuilder/shared/LabelFilters'; |
|
|
|
|
import { OperationList } from 'app/plugins/datasource/prometheus/querybuilder/shared/OperationList'; |
|
|
|
|
@ -20,10 +20,11 @@ export interface Props { |
|
|
|
|
datasource: LokiDatasource; |
|
|
|
|
onChange: (update: LokiVisualQuery) => void; |
|
|
|
|
onRunQuery: () => void; |
|
|
|
|
data?: PanelData; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
export const LokiQueryBuilder = React.memo<Props>(({ datasource, query, onChange, onRunQuery, data }) => { |
|
|
|
|
export const LokiQueryBuilder = React.memo<Props>(({ datasource, query, onChange, onRunQuery }) => { |
|
|
|
|
const [sampleData, setSampleData] = useState<PanelData>(); |
|
|
|
|
|
|
|
|
|
const onChangeLabels = (labels: QueryBuilderLabelFilter[]) => { |
|
|
|
|
onChange({ ...query, labels }); |
|
|
|
|
}; |
|
|
|
|
@ -76,6 +77,17 @@ export const LokiQueryBuilder = React.memo<Props>(({ datasource, query, onChange |
|
|
|
|
return undefined; |
|
|
|
|
}, [query]); |
|
|
|
|
|
|
|
|
|
useEffect(() => { |
|
|
|
|
const onGetSampleData = async () => { |
|
|
|
|
const lokiQuery = { expr: lokiQueryModeller.renderQuery(query), refId: 'data-samples' }; |
|
|
|
|
const series = await datasource.getDataSamples(lokiQuery); |
|
|
|
|
const sampleData = { series, state: LoadingState.Done, timeRange: getDefaultTimeRange() }; |
|
|
|
|
setSampleData(sampleData); |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
onGetSampleData().catch(console.error); |
|
|
|
|
}, [datasource, query]); |
|
|
|
|
|
|
|
|
|
return ( |
|
|
|
|
<> |
|
|
|
|
<EditorRow> |
|
|
|
|
@ -99,7 +111,7 @@ export const LokiQueryBuilder = React.memo<Props>(({ datasource, query, onChange |
|
|
|
|
onRunQuery={onRunQuery} |
|
|
|
|
datasource={datasource as DataSourceApi} |
|
|
|
|
/> |
|
|
|
|
<LokiQueryBuilderHints datasource={datasource} query={query} onChange={onChange} data={data} /> |
|
|
|
|
<LokiQueryBuilderHints datasource={datasource} query={query} onChange={onChange} data={sampleData} /> |
|
|
|
|
</OperationsEditorRow> |
|
|
|
|
{query.binaryQueries && query.binaryQueries.length > 0 && ( |
|
|
|
|
<NestedQueryList query={query} datasource={datasource} onChange={onChange} onRunQuery={onRunQuery} /> |
|
|
|
|
|