|
|
@@ -4,12 +4,11 @@ import Remarkable from 'remarkable';
|
|
|
import _ from 'lodash';
|
|
|
|
|
|
// Components
|
|
|
-import DataSourceOption from './DataSourceOption';
|
|
|
+import './../../panel/metrics_tab';
|
|
|
import { EditorTabBody } from './EditorTabBody';
|
|
|
import { DataSourcePicker } from './DataSourcePicker';
|
|
|
import { QueryInspector } from './QueryInspector';
|
|
|
-import { TimeRangeOptions } from './TimeRangeOptions';
|
|
|
-import './../../panel/metrics_tab';
|
|
|
+import { QueryOptions } from './QueryOptions';
|
|
|
import { AngularQueryComponentScope } from 'app/features/panel/metrics_tab';
|
|
|
|
|
|
// Services
|
|
|
@@ -157,75 +156,6 @@ export class QueriesTab extends PureComponent<Props, State> {
|
|
|
}
|
|
|
};
|
|
|
|
|
|
- renderOptions = close => {
|
|
|
- const { currentDS } = this.state;
|
|
|
- const { queryOptions } = currentDS.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.
|
|
|
- </>
|
|
|
- ),
|
|
|
- },
|
|
|
- };
|
|
|
-
|
|
|
- const dsOptions = queryOptions
|
|
|
- ? Object.keys(queryOptions).map(key => {
|
|
|
- const options = allOptions[key];
|
|
|
- return <DataSourceOption key={key} {...options} onChange={onChangeFn(allOptions[key].panelKey || key)} />;
|
|
|
- })
|
|
|
- : null;
|
|
|
-
|
|
|
- return (
|
|
|
- <>
|
|
|
- <TimeRangeOptions panel={this.props.panel} />
|
|
|
- {dsOptions}
|
|
|
- </>
|
|
|
- );
|
|
|
- };
|
|
|
-
|
|
|
renderQueryInspector = () => {
|
|
|
const { panel } = this.props;
|
|
|
return <QueryInspector panel={panel} LoadingPlaceholder={LoadingPlaceholder} />;
|
|
|
@@ -323,40 +253,41 @@ export class QueriesTab extends PureComponent<Props, State> {
|
|
|
render: this.renderHelp,
|
|
|
};
|
|
|
|
|
|
- const options = {
|
|
|
- title: 'Time Range',
|
|
|
- icon: '',
|
|
|
- disabled: false,
|
|
|
- render: this.renderOptions,
|
|
|
- };
|
|
|
-
|
|
|
return (
|
|
|
- <EditorTabBody heading="Data" renderToolbar={this.renderToolbar} toolbarItems={[options, queryInspector, dsHelp]}>
|
|
|
- <div className="panel-option-section">
|
|
|
- <div className="panel-option-section__header">Queries</div>
|
|
|
- <div className="panel-option-section__body">
|
|
|
- <div className="query-editor-rows gf-form-group">
|
|
|
- <div ref={element => (this.element = element)} />
|
|
|
-
|
|
|
- <div className="gf-form-query">
|
|
|
- <div className="gf-form gf-form-query-letter-cell">
|
|
|
- <label className="gf-form-label">
|
|
|
- <span className="gf-form-query-letter-cell-carret muted">
|
|
|
- <i className="fa fa-caret-down" />
|
|
|
- </span>
|
|
|
- <span className="gf-form-query-letter-cell-letter">{panel.getNextQueryLetter()}</span>
|
|
|
- </label>
|
|
|
- {!isAddingMixed && (
|
|
|
- <button className="btn btn-secondary gf-form-btn" onClick={this.onAddQueryClick}>
|
|
|
- Add Query
|
|
|
- </button>
|
|
|
- )}
|
|
|
- {isAddingMixed && this.renderMixedPicker()}
|
|
|
+ <EditorTabBody heading="Data" renderToolbar={this.renderToolbar} toolbarItems={[queryInspector, dsHelp]}>
|
|
|
+ <>
|
|
|
+ <div className="panel-option-section">
|
|
|
+ <div className="panel-option-section__header">Queries</div>
|
|
|
+ <div className="panel-option-section__body panel-option-section__body--queries">
|
|
|
+ <div className="query-editor-rows gf-form-group">
|
|
|
+ <div ref={element => (this.element = element)} />
|
|
|
+
|
|
|
+ <div className="gf-form-query">
|
|
|
+ <div className="gf-form gf-form-query-letter-cell">
|
|
|
+ <label className="gf-form-label">
|
|
|
+ <span className="gf-form-query-letter-cell-carret muted">
|
|
|
+ <i className="fa fa-caret-down" />
|
|
|
+ </span>
|
|
|
+ <span className="gf-form-query-letter-cell-letter">{panel.getNextQueryLetter()}</span>
|
|
|
+ </label>
|
|
|
+ {!isAddingMixed && (
|
|
|
+ <button className="btn btn-secondary gf-form-btn" onClick={this.onAddQueryClick}>
|
|
|
+ Add Query
|
|
|
+ </button>
|
|
|
+ )}
|
|
|
+ {isAddingMixed && this.renderMixedPicker()}
|
|
|
+ </div>
|
|
|
</div>
|
|
|
</div>
|
|
|
</div>
|
|
|
</div>
|
|
|
- </div>
|
|
|
+ <div className="panel-option-section">
|
|
|
+ <div className="panel-option-section__header">Options</div>
|
|
|
+ <div className="panel-option-section__body">
|
|
|
+ <QueryOptions panel={panel} datasource={currentDS} />
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </>
|
|
|
</EditorTabBody>
|
|
|
);
|
|
|
}
|