mirror of
https://github.com/grafana/grafana.git
synced 2025-02-20 11:48:34 -06:00
85 lines
2.0 KiB
TypeScript
85 lines
2.0 KiB
TypeScript
///<reference path="../../../headers/common.d.ts" />
|
|
|
|
import _ from "lodash";
|
|
import { QueryCtrl } from "app/plugins/sdk";
|
|
|
|
export interface MysqlQuery {
|
|
refId: string;
|
|
format: string;
|
|
alias: string;
|
|
rawSql: string;
|
|
}
|
|
|
|
export interface QueryMeta {
|
|
sql: string;
|
|
}
|
|
|
|
const defaultQuery = `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) {
|
|
// special handling when in table panel
|
|
if (this.panelCtrl.panel.type === "table") {
|
|
this.target.format = "table";
|
|
this.target.rawSql = "SELECT 1";
|
|
} else {
|
|
this.target.rawSql = defaultQuery;
|
|
}
|
|
}
|
|
|
|
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;
|
|
}
|
|
}
|
|
}
|
|
}
|