module.ts 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  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. var panelDefaults = {
  9. targets: [{}],
  10. };
  11. export class TablePanelCtrl {
  12. constructor($scope, $rootScope, $q, panelSrv, panelHelper) {
  13. $scope.ctrl = this;
  14. $scope.panelMeta = new PanelMeta({
  15. panelName: 'Table',
  16. editIcon: "fa fa-table",
  17. fullscreen: true,
  18. metricsEditor: true,
  19. });
  20. $scope.panelMeta.addEditorTab('Options', 'app/panels/table/options.html');
  21. $scope.panelMeta.addEditorTab('Time range', 'app/features/panel/partials/panelTime.html');
  22. _.defaults($scope.panel, panelDefaults);
  23. $scope.refreshData = function(datasource) {
  24. var data = {
  25. columns: [],
  26. rows: [],
  27. };
  28. data.columns.push({text: 'Time'});
  29. data.columns.push({text: 'Value'});
  30. data.columns.push({text: 'Value2'});
  31. data.rows.push([
  32. moment().format('LLL'), 17.2, 15.12
  33. ]);
  34. data.rows.push([
  35. moment().format('LLL'), 12.2, 122.3244
  36. ]);
  37. data.rows.push([
  38. moment().format('LLL'), 111.2, 2312.22
  39. ]);
  40. panelHelper.broadcastRender($scope, data);
  41. // panelHelper.updateTimeRange($scope);
  42. //
  43. // return panelHelper.issueMetricQuery($scope, datasource)
  44. // .then($scope.dataHandler, function(err) {
  45. // $scope.seriesList = [];
  46. // $scope.render([]);
  47. // throw err;
  48. // });
  49. };
  50. $scope.dataHandler = function(results) {
  51. $scope.seriesList = _.map(results.data, $scope.seriesHandler);
  52. panelHelper.broadcastRender($scope, $scope.seriesList);
  53. };
  54. $scope.seriesHandler = function(seriesData, index) {
  55. var datapoints = seriesData.datapoints;
  56. var alias = seriesData.target;
  57. var colorIndex = index % $rootScope.colors.length;
  58. var color = $scope.panel.aliasColors[alias] || $rootScope.colors[colorIndex];
  59. var series = new TimeSeries({
  60. datapoints: datapoints,
  61. alias: alias,
  62. color: color,
  63. });
  64. return series;
  65. };
  66. panelSrv.init($scope);
  67. }
  68. }
  69. export function tablePanelDirective() {
  70. 'use strict';
  71. return {
  72. restrict: 'E',
  73. templateUrl: 'app/panels/table/module.html',
  74. controller: TablePanelCtrl,
  75. link: function(scope, elem) {
  76. var data;
  77. function renderPanel() {
  78. var rootDiv = elem.find('.table-panel-container');
  79. var tableDiv = $('<table class="table-panel"></table>');
  80. var i, y, rowElem, colElem, column, row;
  81. rowElem = $('<tr></tr>');
  82. for (i = 0; i < data.columns.length; i++) {
  83. column = data.columns[i];
  84. colElem = $('<td>' + column.text + '</td>');
  85. rowElem.append(colElem);
  86. }
  87. tableDiv.append(rowElem);
  88. for (y = 0; y < data.rows.length; y++) {
  89. row = data.rows[y];
  90. rowElem = $('<tr></tr>')
  91. for (i = 0; i < data.columns.length; i++) {
  92. colElem = $('<td>' + row[i] + '</td>');
  93. rowElem.append(colElem);
  94. }
  95. tableDiv.append(rowElem);
  96. }
  97. rootDiv.empty();
  98. rootDiv.append(tableDiv);
  99. }
  100. scope.$on('render', function(event, renderData) {
  101. data = renderData || data;
  102. if (!data) {
  103. scope.get_data();
  104. return;
  105. }
  106. renderPanel();
  107. });
  108. }
  109. };
  110. }
  111. angular.module('grafana.directives').directive('grafanaPanelTable', tablePanelDirective);