query_ctrl.ts 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. import _ from 'lodash';
  2. import { QueryCtrl } from 'app/plugins/sdk';
  3. export interface MysqlQuery {
  4. refId: string;
  5. format: string;
  6. alias: string;
  7. rawSql: string;
  8. }
  9. export interface QueryMeta {
  10. sql: string;
  11. }
  12. const defaultQuery = `SELECT
  13. UNIX_TIMESTAMP(<time_column>) as time_sec,
  14. <value column> as value,
  15. <series name column> as metric
  16. FROM <table name>
  17. WHERE $__timeFilter(time_column)
  18. ORDER BY <time_column> ASC
  19. `;
  20. export class MysqlQueryCtrl extends QueryCtrl {
  21. static templateUrl = 'partials/query.editor.html';
  22. showLastQuerySQL: boolean;
  23. formats: any[];
  24. target: MysqlQuery;
  25. lastQueryMeta: QueryMeta;
  26. lastQueryError: string;
  27. showHelp: boolean;
  28. /** @ngInject */
  29. constructor($scope, $injector) {
  30. super($scope, $injector);
  31. this.target.format = this.target.format || 'time_series';
  32. this.target.alias = '';
  33. this.formats = [{ text: 'Time series', value: 'time_series' }, { text: 'Table', value: 'table' }];
  34. if (!this.target.rawSql) {
  35. // special handling when in table panel
  36. if (this.panelCtrl.panel.type === 'table') {
  37. this.target.format = 'table';
  38. this.target.rawSql = 'SELECT 1';
  39. } else {
  40. this.target.rawSql = defaultQuery;
  41. }
  42. }
  43. this.panelCtrl.events.on('data-received', this.onDataReceived.bind(this), $scope);
  44. this.panelCtrl.events.on('data-error', this.onDataError.bind(this), $scope);
  45. }
  46. onDataReceived(dataList) {
  47. this.lastQueryMeta = null;
  48. this.lastQueryError = null;
  49. const anySeriesFromQuery = _.find(dataList, { refId: this.target.refId });
  50. if (anySeriesFromQuery) {
  51. this.lastQueryMeta = anySeriesFromQuery.meta;
  52. }
  53. }
  54. onDataError(err) {
  55. if (err.data && err.data.results) {
  56. const queryRes = err.data.results[this.target.refId];
  57. if (queryRes) {
  58. this.lastQueryMeta = queryRes.meta;
  59. this.lastQueryError = queryRes.error;
  60. }
  61. }
  62. }
  63. }