|
|
|
@ -1,5 +1,5 @@ |
|
|
|
|
import React, { PureComponent } from 'react'; |
|
|
|
|
|
|
|
|
|
import DataSourceOption from './DataSourceOption'; |
|
|
|
|
import { getAngularLoader, AngularComponent } from 'app/core/services/AngularLoader'; |
|
|
|
|
import { EditorTabBody } from './EditorTabBody'; |
|
|
|
|
import { DataSourcePicker } from './DataSourcePicker'; |
|
|
|
@ -139,11 +139,71 @@ export class QueriesTab extends PureComponent<Props, State> { |
|
|
|
|
} |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
renderOptions = close => { |
|
|
|
|
const { currentDatasource } = this.state; |
|
|
|
|
const { queryOptions } = currentDatasource.meta; |
|
|
|
|
const { panel } = this.props; |
|
|
|
|
|
|
|
|
|
const onChangeFn = (panelKey: string) => { |
|
|
|
|
return (value: string | number) => { |
|
|
|
|
panel[panelKey] = value; |
|
|
|
|
panel.refresh(); |
|
|
|
|
}; |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
const allOptions = { |
|
|
|
|
cacheTimeout: { |
|
|
|
|
label: 'Cache timeout', |
|
|
|
|
placeholder: '60', |
|
|
|
|
name: 'cacheTimeout', |
|
|
|
|
value: panel.cacheTimeout, |
|
|
|
|
tooltipInfo: ( |
|
|
|
|
<> |
|
|
|
|
If your time series store has a query cache this option can override the default cache timeout. Specify a |
|
|
|
|
numeric value in seconds. |
|
|
|
|
</> |
|
|
|
|
), |
|
|
|
|
}, |
|
|
|
|
maxDataPoints: { |
|
|
|
|
label: 'Max data points', |
|
|
|
|
placeholder: 'auto', |
|
|
|
|
name: 'maxDataPoints', |
|
|
|
|
value: panel.maxDataPoints, |
|
|
|
|
tooltipInfo: ( |
|
|
|
|
<> |
|
|
|
|
The maximum data points the query should return. For graphs this is automatically set to one data point per |
|
|
|
|
pixel. |
|
|
|
|
</> |
|
|
|
|
), |
|
|
|
|
}, |
|
|
|
|
minInterval: { |
|
|
|
|
label: 'Min time interval', |
|
|
|
|
placeholder: '0', |
|
|
|
|
name: 'minInterval', |
|
|
|
|
value: panel.interval, |
|
|
|
|
panelKey: 'interval', |
|
|
|
|
tooltipInfo: ( |
|
|
|
|
<> |
|
|
|
|
A lower limit for the auto group by time interval. Recommended to be set to write frequency, for example{' '} |
|
|
|
|
<code>1m</code> if your data is written every minute. Access auto interval via variable{' '} |
|
|
|
|
<code>$__interval</code> for time range string and <code>$__interval_ms</code> for numeric variable that can |
|
|
|
|
be used in math expressions. |
|
|
|
|
</> |
|
|
|
|
), |
|
|
|
|
}, |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
return Object.keys(queryOptions).map(key => { |
|
|
|
|
const options = allOptions[key]; |
|
|
|
|
return <DataSourceOption key={key} {...options} onChange={onChangeFn(allOptions[key].panelKey || key)} />; |
|
|
|
|
}); |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
render() { |
|
|
|
|
const { currentDatasource } = this.state; |
|
|
|
|
const { helpHtml } = this.state.help; |
|
|
|
|
const { hasQueryHelp } = currentDatasource.meta; |
|
|
|
|
|
|
|
|
|
const { hasQueryHelp, queryOptions } = currentDatasource.meta; |
|
|
|
|
const hasQueryOptions = !!queryOptions; |
|
|
|
|
const dsInformation = { |
|
|
|
|
title: currentDatasource.name, |
|
|
|
|
imgSrc: currentDatasource.meta.info.logos.small, |
|
|
|
@ -171,8 +231,14 @@ export class QueriesTab extends PureComponent<Props, State> { |
|
|
|
|
render: () => helpHtml, |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
const options = { |
|
|
|
|
title: 'Options', |
|
|
|
|
disabled: !hasQueryOptions, |
|
|
|
|
render: this.renderOptions, |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
return ( |
|
|
|
|
<EditorTabBody main={dsInformation} toolbarItems={[queryInspector, dsHelp]}> |
|
|
|
|
<EditorTabBody main={dsInformation} toolbarItems={[queryInspector, dsHelp, options]}> |
|
|
|
|
<div ref={element => (this.element = element)} style={{ width: '100%' }} /> |
|
|
|
|
</EditorTabBody> |
|
|
|
|
); |
|
|
|
|