|
|
|
@ -15,6 +15,7 @@ export interface Props { |
|
|
|
|
onQueryChange: (target: Target) => void; |
|
|
|
|
onExecuteQuery?: () => void; |
|
|
|
|
target: Target; |
|
|
|
|
events: any; |
|
|
|
|
datasource: any; |
|
|
|
|
templateSrv: any; |
|
|
|
|
uiSegmentSrv: any; |
|
|
|
@ -22,6 +23,7 @@ export interface Props { |
|
|
|
|
|
|
|
|
|
interface State extends Target { |
|
|
|
|
alignOptions: any[]; |
|
|
|
|
lastQuery: string; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
const DefaultTarget: State = { |
|
|
|
@ -39,12 +41,16 @@ const DefaultTarget: State = { |
|
|
|
|
filters: [], |
|
|
|
|
aliasBy: '', |
|
|
|
|
alignOptions: [], |
|
|
|
|
lastQuery: '', |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
export class QueryEditor extends React.Component<Props, State> { |
|
|
|
|
state: State = DefaultTarget; |
|
|
|
|
|
|
|
|
|
componentDidMount() { |
|
|
|
|
const { events } = this.props; |
|
|
|
|
events.on('data-received', this.onDataReceived.bind(this)); |
|
|
|
|
events.on('data-error', this.onDataError.bind(this)); |
|
|
|
|
const { perSeriesAligner, alignOptions } = getAlignmentPickerData(this.props.target, this.props.templateSrv); |
|
|
|
|
this.setState({ |
|
|
|
|
...this.props.target, |
|
|
|
@ -53,6 +59,30 @@ export class QueryEditor extends React.Component<Props, State> { |
|
|
|
|
}); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
onDataReceived(dataList) { |
|
|
|
|
const anySeriesFromQuery = dataList.find(item => item.refId === this.props.target.refId); |
|
|
|
|
if (anySeriesFromQuery) { |
|
|
|
|
this.setState({ lastQuery: decodeURIComponent(anySeriesFromQuery.meta.rawQuery) }); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
onDataError(err) { |
|
|
|
|
// if (err.data && err.data.results) {
|
|
|
|
|
// const queryRes = err.data.results[this.target.refId];
|
|
|
|
|
// if (queryRes && queryRes.error) {
|
|
|
|
|
// this.lastQueryMeta = queryRes.meta;
|
|
|
|
|
// this.lastQueryMeta.rawQueryString = decodeURIComponent(this.lastQueryMeta.rawQuery);
|
|
|
|
|
// let jsonBody;
|
|
|
|
|
// try {
|
|
|
|
|
// jsonBody = JSON.parse(queryRes.error);
|
|
|
|
|
// } catch {
|
|
|
|
|
// this.lastQueryError = queryRes.error;
|
|
|
|
|
// }
|
|
|
|
|
// this.lastQueryError = jsonBody.error.message;
|
|
|
|
|
// }
|
|
|
|
|
// }
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
handleMetricTypeChange({ valueType, metricKind, type, unit }) { |
|
|
|
|
const { perSeriesAligner, alignOptions } = getAlignmentPickerData( |
|
|
|
|
{ valueType, metricKind, perSeriesAligner: this.state.perSeriesAligner }, |
|
|
|
@ -126,6 +156,7 @@ export class QueryEditor extends React.Component<Props, State> { |
|
|
|
|
alignOptions, |
|
|
|
|
alignmentPeriod, |
|
|
|
|
aliasBy, |
|
|
|
|
lastQuery, |
|
|
|
|
} = this.state; |
|
|
|
|
const { templateSrv, datasource, uiSegmentSrv } = this.props; |
|
|
|
|
|
|
|
|
@ -169,36 +200,17 @@ export class QueryEditor extends React.Component<Props, State> { |
|
|
|
|
} |
|
|
|
|
</Aggregations> |
|
|
|
|
<AliasBy value={aliasBy} onChange={value => this.handleAliasByChange(value)} /> |
|
|
|
|
|
|
|
|
|
<AlignmentPeriods |
|
|
|
|
templateSrv={templateSrv} |
|
|
|
|
alignmentPeriod={alignmentPeriod} |
|
|
|
|
onChange={value => this.handleAlignmentPeriodChange(value)} |
|
|
|
|
/> |
|
|
|
|
|
|
|
|
|
<Help datasource={datasource} rawQuery={lastQuery} /> |
|
|
|
|
</React.Fragment> |
|
|
|
|
)} |
|
|
|
|
</Metrics> |
|
|
|
|
<AlignmentPeriods |
|
|
|
|
templateSrv={templateSrv} |
|
|
|
|
alignmentPeriod={alignmentPeriod} |
|
|
|
|
onChange={value => this.handleAlignmentPeriodChange(value)} |
|
|
|
|
/> |
|
|
|
|
|
|
|
|
|
<Help datasource={datasource} /> |
|
|
|
|
{/* <div className="gf-form-inline"> |
|
|
|
|
<Help datasource={datasource} /> |
|
|
|
|
<div className="gf-form" ng-show="ctrl.lastQueryMeta"> |
|
|
|
|
<label className="gf-form-label query-keyword" ng-click="ctrl.showHelp = !ctrl.showHelp"> |
|
|
|
|
Show Help |
|
|
|
|
<i className="fa fa-caret-down" ng-show="ctrl.showHelp" /> |
|
|
|
|
<i className="fa fa-caret-right" ng-hide="ctrl.showHelp" /> |
|
|
|
|
</label> |
|
|
|
|
</div> |
|
|
|
|
<div className="gf-form" ng-show="ctrl.lastQueryMeta"> |
|
|
|
|
<label className="gf-form-label query-keyword" ng-click="ctrl.showLastQuery = !ctrl.showLastQuery"> |
|
|
|
|
Raw Query |
|
|
|
|
<i className="fa fa-caret-down" ng-show="ctrl.showLastQuery" /> |
|
|
|
|
<i className="fa fa-caret-right" ng-hide="ctrl.showLastQuery" /> |
|
|
|
|
</label> |
|
|
|
|
</div> |
|
|
|
|
<div className="gf-form gf-form--grow"> |
|
|
|
|
<div className="gf-form-label gf-form-label--grow" /> |
|
|
|
|
</div> |
|
|
|
|
</div> */} |
|
|
|
|
</React.Fragment> |
|
|
|
|
); |
|
|
|
|
} |
|
|
|
|