module.ts 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. ///<reference path="../../headers/common.d.ts" />
  2. import angular = require('angular');
  3. import $ = require('jquery');
  4. import _ = require('lodash');
  5. import moment = require('moment');
  6. import PanelMeta = require('app/features/panel/panel_meta');
  7. import TimeSeries = require('app/core/time_series');
  8. import {TableModel} from './table_model';
  9. var panelDefaults = {
  10. targets: [{}],
  11. };
  12. export class TablePanelCtrl {
  13. constructor($scope, $rootScope, $q, panelSrv, panelHelper) {
  14. $scope.ctrl = this;
  15. $scope.panelMeta = new PanelMeta({
  16. panelName: 'Table',
  17. editIcon: "fa fa-table",
  18. fullscreen: true,
  19. metricsEditor: true,
  20. });
  21. $scope.panelMeta.addEditorTab('Options', 'app/panels/table/options.html');
  22. $scope.panelMeta.addEditorTab('Time range', 'app/features/panel/partials/panelTime.html');
  23. _.defaults($scope.panel, panelDefaults);
  24. $scope.refreshData = function(datasource) {
  25. panelHelper.updateTimeRange($scope);
  26. return panelHelper.issueMetricQuery($scope, datasource)
  27. .then($scope.dataHandler, function(err) {
  28. $scope.seriesList = [];
  29. $scope.render([]);
  30. throw err;
  31. });
  32. };
  33. $scope.dataHandler = function(results) {
  34. $scope.tableModel = TableModel.transform(results.data, $scope.panel);
  35. panelHelper.broadcastRender($scope, $scope.tableModel);
  36. };
  37. panelSrv.init($scope);
  38. }
  39. }
  40. export function tablePanelDirective() {
  41. 'use strict';
  42. return {
  43. restrict: 'E',
  44. templateUrl: 'app/panels/table/module.html',
  45. controller: TablePanelCtrl,
  46. link: function(scope, elem) {
  47. var data;
  48. function renderPanel() {
  49. var rootDiv = elem.find('.table-panel-container');
  50. var tableDiv = $('<table class="gf-table-panel"></table>');
  51. var i, y, rowElem, colElem, column, row;
  52. rowElem = $('<tr></tr>');
  53. for (i = 0; i < data.columns.length; i++) {
  54. column = data.columns[i];
  55. colElem = $('<th>' + column.text + '</th>');
  56. rowElem.append(colElem);
  57. }
  58. tableDiv.append(rowElem);
  59. for (y = 0; y < data.rows.length; y++) {
  60. row = data.rows[y];
  61. rowElem = $('<tr></tr>');
  62. for (i = 0; i < data.columns.length; i++) {
  63. colElem = $('<td>' + row[i] + '</td>');
  64. rowElem.append(colElem);
  65. }
  66. tableDiv.append(rowElem);
  67. }
  68. rootDiv.empty();
  69. rootDiv.append(tableDiv);
  70. }
  71. scope.$on('render', function(event, renderData) {
  72. data = renderData || data;
  73. if (!data) {
  74. scope.get_data();
  75. return;
  76. }
  77. renderPanel();
  78. });
  79. }
  80. };
  81. }
  82. angular.module('grafana.directives').directive('grafanaPanelTable', tablePanelDirective);