mirror of
https://github.com/grafana/grafana.git
synced 2025-09-25 17:14:32 +08:00
mysql: query editor fix
This commit is contained in:
1
.gitignore
vendored
1
.gitignore
vendored
@ -25,6 +25,7 @@ public/css/*.min.css
|
|||||||
*.swp
|
*.swp
|
||||||
.idea/
|
.idea/
|
||||||
*.iml
|
*.iml
|
||||||
|
*.tmp
|
||||||
.vscode/
|
.vscode/
|
||||||
|
|
||||||
/data/*
|
/data/*
|
||||||
|
@ -6,7 +6,7 @@ export class MysqlDatasource {
|
|||||||
id: any;
|
id: any;
|
||||||
name: any;
|
name: any;
|
||||||
|
|
||||||
/** @ngInject */
|
/** @ngInject **/
|
||||||
constructor(instanceSettings, private backendSrv, private $q, private templateSrv) {
|
constructor(instanceSettings, private backendSrv, private $q, private templateSrv) {
|
||||||
this.name = instanceSettings.name;
|
this.name = instanceSettings.name;
|
||||||
this.id = instanceSettings.id;
|
this.id = instanceSettings.id;
|
||||||
|
@ -3,77 +3,7 @@
|
|||||||
import angular from 'angular';
|
import angular from 'angular';
|
||||||
import _ from 'lodash';
|
import _ from 'lodash';
|
||||||
import {MysqlDatasource} from './datasource';
|
import {MysqlDatasource} from './datasource';
|
||||||
import {QueryCtrl} from 'app/plugins/sdk';
|
import {MysqlQueryCtrl} from './query_ctrl';
|
||||||
|
|
||||||
export interface MysqlQuery {
|
|
||||||
refId: string;
|
|
||||||
format: string;
|
|
||||||
alias: string;
|
|
||||||
rawSql: string;
|
|
||||||
}
|
|
||||||
|
|
||||||
export interface QueryMeta {
|
|
||||||
sql: string;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
var defaulQuery = `SELECT
|
|
||||||
UNIX_TIMESTAMP(<time_column>) as time_sec,
|
|
||||||
<value column> as value,
|
|
||||||
<series name column> as metric
|
|
||||||
FROM <table name>
|
|
||||||
WHERE $__timeFilter(time_column)
|
|
||||||
ORDER BY <time_column> ASC
|
|
||||||
`;
|
|
||||||
|
|
||||||
class MysqlQueryCtrl extends QueryCtrl {
|
|
||||||
static templateUrl = 'partials/query.editor.html';
|
|
||||||
|
|
||||||
showLastQuerySQL: boolean;
|
|
||||||
formats: any[];
|
|
||||||
target: MysqlQuery;
|
|
||||||
lastQueryMeta: QueryMeta;
|
|
||||||
lastQueryError: string;
|
|
||||||
showHelp: boolean;
|
|
||||||
|
|
||||||
constructor($scope, $injector) {
|
|
||||||
super($scope, $injector);
|
|
||||||
|
|
||||||
this.target.format = this.target.format || 'time_series';
|
|
||||||
this.target.alias = "";
|
|
||||||
this.formats = [
|
|
||||||
{text: 'Time series', value: 'time_series'},
|
|
||||||
{text: 'Table', value: 'table'},
|
|
||||||
];
|
|
||||||
|
|
||||||
if (!this.target.rawSql) {
|
|
||||||
this.target.rawSql = defaulQuery;
|
|
||||||
}
|
|
||||||
|
|
||||||
this.panelCtrl.events.on('data-received', this.onDataReceived.bind(this), $scope);
|
|
||||||
this.panelCtrl.events.on('data-error', this.onDataError.bind(this), $scope);
|
|
||||||
}
|
|
||||||
|
|
||||||
onDataReceived(dataList) {
|
|
||||||
this.lastQueryMeta = null;
|
|
||||||
this.lastQueryError = null;
|
|
||||||
|
|
||||||
let anySeriesFromQuery = _.find(dataList, {refId: this.target.refId});
|
|
||||||
if (anySeriesFromQuery) {
|
|
||||||
this.lastQueryMeta = anySeriesFromQuery.meta;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
onDataError(err) {
|
|
||||||
if (err.data && err.data.results) {
|
|
||||||
let queryRes = err.data.results[this.target.refId];
|
|
||||||
if (queryRes) {
|
|
||||||
this.lastQueryMeta = queryRes.meta;
|
|
||||||
this.lastQueryError = queryRes.error;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
class MysqlConfigCtrl {
|
class MysqlConfigCtrl {
|
||||||
static templateUrl = 'partials/config.html';
|
static templateUrl = 'partials/config.html';
|
||||||
|
79
public/app/plugins/datasource/mysql/query_ctrl.ts
Normal file
79
public/app/plugins/datasource/mysql/query_ctrl.ts
Normal file
@ -0,0 +1,79 @@
|
|||||||
|
///<reference path="../../../headers/common.d.ts" />
|
||||||
|
|
||||||
|
import angular from 'angular';
|
||||||
|
import _ from 'lodash';
|
||||||
|
import {MysqlDatasource} from './datasource';
|
||||||
|
import {QueryCtrl} from 'app/plugins/sdk';
|
||||||
|
|
||||||
|
export interface MysqlQuery {
|
||||||
|
refId: string;
|
||||||
|
format: string;
|
||||||
|
alias: string;
|
||||||
|
rawSql: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface QueryMeta {
|
||||||
|
sql: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
var defaulQuery = `SELECT
|
||||||
|
UNIX_TIMESTAMP(<time_column>) as time_sec,
|
||||||
|
<value column> as value,
|
||||||
|
<series name column> as metric
|
||||||
|
FROM <table name>
|
||||||
|
WHERE $__timeFilter(time_column)
|
||||||
|
ORDER BY <time_column> ASC
|
||||||
|
`;
|
||||||
|
|
||||||
|
export class MysqlQueryCtrl extends QueryCtrl {
|
||||||
|
static templateUrl = 'partials/query.editor.html';
|
||||||
|
|
||||||
|
showLastQuerySQL: boolean;
|
||||||
|
formats: any[];
|
||||||
|
target: MysqlQuery;
|
||||||
|
lastQueryMeta: QueryMeta;
|
||||||
|
lastQueryError: string;
|
||||||
|
showHelp: boolean;
|
||||||
|
|
||||||
|
/** @ngInject **/
|
||||||
|
constructor($scope, $injector) {
|
||||||
|
super($scope, $injector);
|
||||||
|
|
||||||
|
this.target.format = this.target.format || 'time_series';
|
||||||
|
this.target.alias = "";
|
||||||
|
this.formats = [
|
||||||
|
{text: 'Time series', value: 'time_series'},
|
||||||
|
{text: 'Table', value: 'table'},
|
||||||
|
];
|
||||||
|
|
||||||
|
if (!this.target.rawSql) {
|
||||||
|
this.target.rawSql = defaulQuery;
|
||||||
|
}
|
||||||
|
|
||||||
|
this.panelCtrl.events.on('data-received', this.onDataReceived.bind(this), $scope);
|
||||||
|
this.panelCtrl.events.on('data-error', this.onDataError.bind(this), $scope);
|
||||||
|
}
|
||||||
|
|
||||||
|
onDataReceived(dataList) {
|
||||||
|
this.lastQueryMeta = null;
|
||||||
|
this.lastQueryError = null;
|
||||||
|
|
||||||
|
let anySeriesFromQuery = _.find(dataList, {refId: this.target.refId});
|
||||||
|
if (anySeriesFromQuery) {
|
||||||
|
this.lastQueryMeta = anySeriesFromQuery.meta;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
onDataError(err) {
|
||||||
|
if (err.data && err.data.results) {
|
||||||
|
let queryRes = err.data.results[this.target.refId];
|
||||||
|
if (queryRes) {
|
||||||
|
this.lastQueryMeta = queryRes.meta;
|
||||||
|
this.lastQueryError = queryRes.error;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
Reference in New Issue
Block a user