module.js 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. angular.module('kibana.table', [])
  2. .controller('table', function($scope, $rootScope, $location) {
  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.$on(_id+"-time", function(event,time){set_time(time)});
  16. $scope.$on($scope.panel.group+"-time", function(event,time){set_time(time)});
  17. $scope.$on($scope.panel.group+"-query", function(event, query) {
  18. console.log($scope.panel)
  19. $scope.panel.query = query;
  20. $scope.get_data();
  21. });
  22. $scope.$on($scope.panel.group+"-sort", function(event,sort){
  23. $scope.panel.sort = _.clone(sort);
  24. });
  25. $scope.$on($scope.panel.group+"-selected_fields", function(event, fields) {
  26. $scope.panel.fields = _.clone(fields)
  27. });
  28. $scope.$watch(function() {
  29. return angular.toJson($scope.panel.sort)
  30. }, function(){$scope.get_data()});
  31. // Now that we're all setup, request the time from our group
  32. $rootScope.$broadcast($scope.panel.group+"-get_time",_id)
  33. }
  34. $scope.set_sort = function(field) {
  35. if($scope.panel.sort[0] === field)
  36. $scope.panel.sort[1] = $scope.panel.sort[1] == 'asc' ? 'desc' : 'asc';
  37. else
  38. $scope.panel.sort[0] = field;
  39. }
  40. $scope.get_data = function() {
  41. // Make sure we have everything for the request to complete
  42. if(_.isUndefined($scope.panel.index) || _.isUndefined($scope.panel.time))
  43. return
  44. var request = $scope.ejs.Request().indices($scope.panel.index);
  45. var results = request
  46. .query(ejs.FilteredQuery(
  47. ejs.QueryStringQuery($scope.panel.query || '*'),
  48. ejs.RangeFilter(config.timefield)
  49. .from($scope.panel.time.from)
  50. .to($scope.panel.time.to)
  51. )
  52. )
  53. .size($scope.panel.size)
  54. .sort($scope.panel.sort[0],$scope.panel.sort[1])
  55. .doSearch();
  56. // Populate scope when we have results
  57. results.then(function(results) {
  58. if(_.isUndefined(results)) {
  59. $scope.panel.error = 'Your query was unsuccessful';
  60. return;
  61. }
  62. $scope.panel.error = false;
  63. $scope.hits = results.hits.total;
  64. $scope.data = results.hits.hits;
  65. // Broadcast a list of all fields. Note that receivers of field array
  66. // events should be able to receive from multiple sources, merge, dedupe
  67. // and sort on the fly.
  68. if (!(_.isUndefined($scope.panel.group)))
  69. $rootScope.$broadcast(
  70. $scope.panel.group+"-fields", {
  71. all : get_all_fields(results),
  72. sort : $scope.panel.sort,
  73. active: $scope.panel.fields
  74. });
  75. });
  76. }
  77. $scope.move_field = function(field,dir) {
  78. console.log(field,dir)
  79. }
  80. function set_time(time) {
  81. $scope.panel.time = time;
  82. $scope.panel.index = _.isUndefined(time.index) ? $scope.panel.index : time.index
  83. $scope.get_data();
  84. }
  85. $scope.init();
  86. });