controller.ts 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. ///<reference path="../../headers/common.d.ts" />
  2. import angular = require('angular');
  3. import _ = require('lodash');
  4. import moment = require('moment');
  5. import kbn = require('app/core/utils/kbn');
  6. import PanelMeta = require('app/features/panel/panel_meta');
  7. import {TableModel} from './table_model';
  8. import {transformers} from './transformers';
  9. export class TablePanelCtrl {
  10. constructor($scope, $rootScope, $q, panelSrv, panelHelper) {
  11. $scope.ctrl = this;
  12. $scope.transformers = transformers;
  13. $scope.pageIndex = 0;
  14. $scope.unitFormats = kbn.getUnitFormats();
  15. $scope.colorModes = {
  16. 'cell': {text: 'Cell'},
  17. 'value': {text: 'Value'},
  18. 'row': {text: 'Row'},
  19. };
  20. $scope.panelMeta = new PanelMeta({
  21. panelName: 'Table',
  22. editIcon: "fa fa-table",
  23. fullscreen: true,
  24. metricsEditor: true,
  25. });
  26. $scope.panelMeta.addEditorTab('Options', 'app/panels/table/options.html');
  27. $scope.panelMeta.addEditorTab('Time range', 'app/features/panel/partials/panelTime.html');
  28. var panelDefaults = {
  29. targets: [{}],
  30. transform: 'timeseries_to_rows',
  31. pageSize: 50,
  32. showHeader: true,
  33. columns: [],
  34. };
  35. $scope.init = function() {
  36. _.defaults($scope.panel, panelDefaults);
  37. if ($scope.panel.columns.length === 0) {
  38. $scope.addColumnStyle();
  39. }
  40. panelSrv.init($scope);
  41. };
  42. $scope.setUnitFormat = function(column, subItem) {
  43. column.unit = subItem.value;
  44. $scope.render();
  45. };
  46. $scope.refreshData = function(datasource) {
  47. panelHelper.updateTimeRange($scope);
  48. return panelHelper.issueMetricQuery($scope, datasource)
  49. .then($scope.dataHandler, function(err) {
  50. $scope.seriesList = [];
  51. $scope.render([]);
  52. throw err;
  53. });
  54. };
  55. $scope.dataHandler = function(results) {
  56. $scope.dataRaw = results.data;
  57. $scope.render();
  58. };
  59. $scope.render = function() {
  60. $scope.table = TableModel.transform($scope.dataRaw, $scope.panel);
  61. panelHelper.broadcastRender($scope, $scope.table);
  62. };
  63. $scope.getColumnNames = function() {
  64. if (!$scope.table) {
  65. return [];
  66. }
  67. return _.map($scope.table.columns, function(col: any) {
  68. return col.text;
  69. });
  70. };
  71. $scope.addColumnStyle = function() {
  72. var columnStyleDefaults = {
  73. unit: 'short',
  74. decimals: 2,
  75. colors: ["rgba(245, 54, 54, 0.9)", "rgba(237, 129, 40, 0.89)", "rgba(50, 172, 45, 0.97)"],
  76. pattern: '/.*/',
  77. colorMode: 'value',
  78. };
  79. $scope.panel.columns.push(angular.copy(columnStyleDefaults));
  80. };
  81. $scope.removeColumnStyle = function(col) {
  82. $scope.panel.columns = _.without($scope.panel.columns, col);
  83. };
  84. $scope.init();
  85. }
  86. }