module.js 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. angular.module('kibana.table', [])
  2. .controller('table', function($scope, eventBus) {
  3. var _id = _.uniqueId();
  4. // Set and populate defaults
  5. var _d = {
  6. query : "*",
  7. size : 100,
  8. sort : ['@timestamp','desc'],
  9. group : "default",
  10. style : {},
  11. fields : [],
  12. }
  13. _.defaults($scope.panel,_d)
  14. $scope.init = function () {
  15. $scope.set_listeners($scope.panel.group)
  16. // Now that we're all setup, request the time from our group
  17. eventBus.broadcast($scope.$id,$scope.panel.group,"get_time")
  18. }
  19. $scope.set_listeners = function(group) {
  20. eventBus.register($scope,'time',function(event,time) {
  21. set_time(time)
  22. });
  23. eventBus.register($scope,'query',function(event,query) {
  24. $scope.panel.query = query;
  25. $scope.get_data();
  26. });
  27. eventBus.register($scope,'sort', function(event,sort){
  28. $scope.panel.sort = _.clone(sort);
  29. $scope.get_data();
  30. });
  31. eventBus.register($scope,'selected_fields', function(event, fields) {
  32. $scope.panel.fields = _.clone(fields)
  33. });
  34. }
  35. $scope.set_sort = function(field) {
  36. if($scope.panel.sort[0] === field)
  37. $scope.panel.sort[1] = $scope.panel.sort[1] == 'asc' ? 'desc' : 'asc';
  38. else
  39. $scope.panel.sort[0] = field;
  40. $scope.get_data();
  41. }
  42. $scope.toggle_field = function(field) {
  43. if (_.indexOf($scope.panel.fields,field) > -1)
  44. $scope.panel.fields = _.without($scope.panel.fields,field)
  45. else
  46. $scope.panel.fields.push(field)
  47. broadcast_fields();
  48. }
  49. $scope.get_data = function() {
  50. // Make sure we have everything for the request to complete
  51. if(_.isUndefined($scope.panel.index) || _.isUndefined($scope.time))
  52. return
  53. var request = $scope.ejs.Request().indices($scope.panel.index);
  54. var results = request
  55. .query(ejs.FilteredQuery(
  56. ejs.QueryStringQuery($scope.panel.query || '*'),
  57. ejs.RangeFilter(config.timefield)
  58. .from($scope.time.from)
  59. .to($scope.time.to)
  60. )
  61. )
  62. .size($scope.panel.size)
  63. .sort($scope.panel.sort[0],$scope.panel.sort[1])
  64. .doSearch();
  65. // Populate scope when we have results
  66. results.then(function(results) {
  67. if(_.isUndefined(results)) {
  68. $scope.panel.error = 'Your query was unsuccessful';
  69. return;
  70. }
  71. $scope.panel.error = false;
  72. $scope.hits = results.hits.total;
  73. $scope.data = results.hits.hits;
  74. $scope.all_fields = get_all_fields(results);
  75. broadcast_fields();
  76. });
  77. }
  78. // Broadcast a list of all fields. Note that receivers of field array
  79. // events should be able to receive from multiple sources, merge, dedupe
  80. // and sort on the fly if needed.
  81. function broadcast_fields() {
  82. eventBus.broadcast($scope.$id,$scope.panel.group,"fields", {
  83. all : $scope.all_fields,
  84. sort : $scope.panel.sort,
  85. active: $scope.panel.fields
  86. });
  87. }
  88. function set_time(time) {
  89. $scope.time = time;
  90. $scope.panel.index = _.isUndefined(time.index) ? $scope.panel.index : time.index
  91. $scope.get_data();
  92. }
  93. $scope.init();
  94. });