|
|
@@ -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>
|
|
|
);
|
|
|
}
|