query_ctrl.ts 1.9 KB

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