kibana-sinatra 0.0.3 → 0.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (75) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +2 -0
  3. data/lib/kibana/assets/app/app.js +0 -1
  4. data/lib/kibana/assets/app/components/extend-jquery.js +1 -0
  5. data/lib/kibana/assets/app/components/kbn.js +31 -10
  6. data/lib/kibana/assets/app/components/require.config.js +5 -2
  7. data/lib/kibana/assets/app/components/underscore.extended.js +4 -0
  8. data/lib/kibana/assets/app/controllers/dash.js +10 -6
  9. data/lib/kibana/assets/app/controllers/dashLoader.js +0 -3
  10. data/lib/kibana/assets/app/dashboards/logstash.js +2 -2
  11. data/lib/kibana/assets/app/directives/all.js +2 -1
  12. data/lib/kibana/assets/app/directives/esVersion.js +24 -0
  13. data/lib/kibana/assets/app/directives/kibanaPanel.js +9 -8
  14. data/lib/kibana/assets/app/directives/kibanaSimplePanel.js +25 -4
  15. data/lib/kibana/assets/app/filters/all.js +13 -1
  16. data/lib/kibana/assets/app/panels/bettermap/module.js +4 -3
  17. data/lib/kibana/assets/app/panels/derivequeries/editor.html +1 -23
  18. data/lib/kibana/assets/app/panels/derivequeries/module.html +1 -31
  19. data/lib/kibana/assets/app/panels/derivequeries/module.js +3 -110
  20. data/lib/kibana/assets/app/panels/filtering/module.html +8 -8
  21. data/lib/kibana/assets/app/panels/filtering/module.js +11 -1
  22. data/lib/kibana/assets/app/panels/histogram/editor.html +37 -66
  23. data/lib/kibana/assets/app/panels/histogram/module.html +14 -8
  24. data/lib/kibana/assets/app/panels/histogram/module.js +191 -65
  25. data/lib/kibana/assets/app/panels/histogram/queriesEditor.html +43 -0
  26. data/lib/kibana/assets/app/panels/histogram/styleEditor.html +84 -0
  27. data/lib/kibana/assets/app/panels/histogram/timeSeries.js +39 -2
  28. data/lib/kibana/assets/app/panels/hits/module.js +10 -13
  29. data/lib/kibana/assets/app/panels/map/module.js +9 -6
  30. data/lib/kibana/assets/app/panels/pie/module.js +4 -3
  31. data/lib/kibana/assets/app/panels/query/editors/lucene.html +0 -0
  32. data/lib/kibana/assets/app/panels/query/editors/regex.html +0 -0
  33. data/lib/kibana/assets/app/panels/query/editors/topN.html +12 -0
  34. data/lib/kibana/assets/app/panels/query/help/lucene.html +30 -0
  35. data/lib/kibana/assets/app/panels/query/help/regex.html +10 -0
  36. data/lib/kibana/assets/app/panels/query/help/topN.html +14 -0
  37. data/lib/kibana/assets/app/panels/query/helpModal.html +12 -0
  38. data/lib/kibana/assets/app/panels/query/meta.html +29 -16
  39. data/lib/kibana/assets/app/panels/query/module.html +11 -6
  40. data/lib/kibana/assets/app/panels/query/module.js +50 -2
  41. data/lib/kibana/assets/app/panels/query/query.css +8 -0
  42. data/lib/kibana/assets/app/panels/sparklines/editor.html +23 -0
  43. data/lib/kibana/assets/app/panels/sparklines/interval.js +57 -0
  44. data/lib/kibana/assets/app/panels/sparklines/module.html +10 -0
  45. data/lib/kibana/assets/app/panels/sparklines/module.js +379 -0
  46. data/lib/kibana/assets/app/panels/sparklines/timeSeries.js +216 -0
  47. data/lib/kibana/assets/app/panels/table/micropanel.html +36 -18
  48. data/lib/kibana/assets/app/panels/table/modal.html +45 -0
  49. data/lib/kibana/assets/app/panels/table/module.html +15 -3
  50. data/lib/kibana/assets/app/panels/table/module.js +67 -16
  51. data/lib/kibana/assets/app/panels/terms/module.js +8 -4
  52. data/lib/kibana/assets/app/panels/timepicker/module.html +5 -2
  53. data/lib/kibana/assets/app/panels/trends/module.html +8 -2
  54. data/lib/kibana/assets/app/panels/trends/module.js +15 -18
  55. data/lib/kibana/assets/app/partials/dashLoader.html +11 -11
  56. data/lib/kibana/assets/app/partials/dashboard.html +1 -1
  57. data/lib/kibana/assets/app/partials/dasheditor.html +1 -1
  58. data/lib/kibana/assets/app/services/all.js +2 -1
  59. data/lib/kibana/assets/app/services/dashboard.js +5 -4
  60. data/lib/kibana/assets/app/services/esVersion.js +150 -0
  61. data/lib/kibana/assets/app/services/fields.js +3 -3
  62. data/lib/kibana/assets/app/services/filterSrv.js +6 -1
  63. data/lib/kibana/assets/app/services/querySrv.js +153 -38
  64. data/lib/kibana/assets/css/bootstrap.dark.min.css +1 -1
  65. data/lib/kibana/assets/css/bootstrap.light.min.css +1 -1
  66. data/lib/kibana/assets/img/small.png +0 -0
  67. data/lib/kibana/assets/index.html +2 -1
  68. data/lib/kibana/assets/vendor/bootstrap/bootstrap.js +14 -6
  69. data/lib/kibana/assets/vendor/bootstrap/less/bootswatch.dark.less +2 -1
  70. data/lib/kibana/assets/vendor/bootstrap/less/overrides.less +33 -12
  71. data/lib/kibana/assets/vendor/chromath.js +34 -0
  72. data/lib/kibana/assets/vendor/jquery/jquery.flot.events.js +641 -0
  73. data/lib/kibana/sinatra/version.rb +1 -1
  74. data/lib/kibana/views/config.erb +2 -1
  75. metadata +22 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 221a7a79930e7d8f883991735a36f74c1b5bd1dd
4
- data.tar.gz: 025fb9fc6da32eec6bc51afd7539787f4a7d7d3d
3
+ metadata.gz: b90d776ed0faabd51b00e390a59c193d63c4eb94
4
+ data.tar.gz: d38a9fb1987082bd9c38ff97be8763c985bf75d4
5
5
  SHA512:
6
- metadata.gz: d1ea7865b8a2402452b6322cc87d86532c5149c118689f90790460a0672277a23834959c076fe4ef84d1b9a5e3ea026d930320b523a33164415e65142b38eb09
7
- data.tar.gz: 3277260d44cb68aff4e94e11715548d49f398b5d4e6344fa4a9c102d681c99093e5199a84ce03ef59bd3db9621672efcee5053aa4fbc629e7aed5d56571af899
6
+ metadata.gz: 9e7aa803378bd32ad9e524ed7c11cb77cff766d936496db3dd8e17ffa08048eddd9090afadf2eca7c67e26b413f875166c8f673a1ce1ba8e425e8f82eaf342cf
7
+ data.tar.gz: 221b2797b0615c18553e404dcae19ba30fc32096c04137e22fc57cff53a703074dcc4b210113e392e1537986b86fe958dda0369218847ffc40bc067855cfa855
data/README.md CHANGED
@@ -4,6 +4,8 @@
4
4
 
5
5
  This gem provides [Kibana 3](https://github.com/elasticsearch/kibana) inside a [Sinatra](http://www.sinatrarb.com/) app that you can include in any Rack based system, including Rails.
6
6
 
7
+ It is currently based on Kibana 3 commit [90d765d942f194c9561b3d25b3f7c1bc734e9203](https://github.com/elasticsearch/kibana/commits/master)
8
+
7
9
  ## Installation
8
10
 
9
11
  Add this line to your application's Gemfile:
@@ -6,7 +6,6 @@ define([
6
6
  'jquery',
7
7
  'underscore',
8
8
  'require',
9
-
10
9
  'elasticjs',
11
10
  'bootstrap',
12
11
  'angular-sanitize',
@@ -20,6 +20,7 @@ function ($) {
20
20
  'font-weight' : 200,
21
21
  'background-color': '#1f1f1f',
22
22
  'border-radius': '5px',
23
+ 'z-index': 9999
23
24
  }
24
25
  };
25
26
 
@@ -1,4 +1,4 @@
1
- define(['jquery', 'underscore','moment'],
1
+ define(['jquery','underscore','moment','chromath'],
2
2
  function($, _, moment) {
3
3
  'use strict';
4
4
 
@@ -13,14 +13,10 @@ function($, _, moment) {
13
13
  return field_array.sort();
14
14
  };
15
15
 
16
- kbn.get_all_fields = function(data) {
17
- var fields = [];
18
- _.each(data,function(hit) {
19
- fields = _.uniq(fields.concat(_.keys(hit)));
20
- });
21
- // Remove stupid angular key
22
- fields = _.without(fields,'$$hashKey');
23
- return fields;
16
+ kbn.get_all_fields = function(data,flat) {
17
+ return _.uniq(_.without(_.reduce(data,function(memo,hit) {
18
+ return flat ? memo.concat(_.keys(kbn.flatten_json(hit._source))) : memo.concat(_.keys(hit._source));
19
+ },[]),'$$hashkey'));
24
20
  };
25
21
 
26
22
  kbn.has_field = function(obj,field) {
@@ -41,7 +37,7 @@ function($, _, moment) {
41
37
  }
42
38
  });
43
39
  var counts = _.countBy(_.without(field_array,field),function(field){return field;});
44
- return counts;
40
+ return _.map(counts, function(num, key){return {name:key,count:num};});
45
41
  };
46
42
 
47
43
  kbn.recurse_field_dots = function(object,field) {
@@ -315,6 +311,15 @@ function($, _, moment) {
315
311
  }
316
312
  unit = mathString.charAt(i++);
317
313
  switch (unit) {
314
+ case 'y':
315
+ if (type === 0) {
316
+ roundUp ? dateTime.endOf('year') : dateTime.startOf('year');
317
+ } else if (type === 1) {
318
+ dateTime.add('years',num);
319
+ } else if (type === 2) {
320
+ dateTime.subtract('years',num);
321
+ }
322
+ break;
318
323
  case 'M':
319
324
  if (type === 0) {
320
325
  roundUp ? dateTime.endOf('month') : dateTime.startOf('month');
@@ -458,5 +463,21 @@ function($, _, moment) {
458
463
  ].join(';') + '"></div>';
459
464
  };
460
465
 
466
+ kbn.colorSteps = function(col,steps) {
467
+
468
+ var _d = steps > 5 ? 1.6/steps : 0.25, // distance between steps
469
+ _p = []; // adjustment percentage
470
+
471
+ // Create a range of numbers between -0.8 and 0.8
472
+ for(var i = 1; i<steps+1; i+=1) {
473
+ _p.push(i%2 ? ((i-1)*_d*-1)/2 : i*_d/2);
474
+ }
475
+
476
+ // Create the color range
477
+ return _.map(_p.sort(function(a,b){return a-b;}),function(v) {
478
+ return v<0 ? Chromath.darken(col,v*-1).toString() : Chromath.lighten(col,v).toString();
479
+ });
480
+ };
481
+
461
482
  return kbn;
462
483
  });
@@ -13,7 +13,7 @@ require.config({
13
13
  text: '../vendor/require/text',
14
14
  moment: '../vendor/moment',
15
15
  filesaver: '../vendor/filesaver',
16
-
16
+ chromath: '../vendor/chromath',
17
17
  angular: '../vendor/angular/angular',
18
18
  'angular-dragdrop': '../vendor/angular/angular-dragdrop',
19
19
  'angular-strap': '../vendor/angular/angular-strap',
@@ -32,6 +32,7 @@ require.config({
32
32
 
33
33
  'jquery.flot': '../vendor/jquery/jquery.flot',
34
34
  'jquery.flot.pie': '../vendor/jquery/jquery.flot.pie',
35
+ 'jquery.flot.events': '../vendor/jquery/jquery.flot.events',
35
36
  'jquery.flot.selection': '../vendor/jquery/jquery.flot.selection',
36
37
  'jquery.flot.stack': '../vendor/jquery/jquery.flot.stack',
37
38
  'jquery.flot.stackpercent':'../vendor/jquery/jquery.flot.stackpercent',
@@ -66,6 +67,7 @@ require.config({
66
67
  'jquery-ui': ['jquery'],
67
68
  'jquery.flot': ['jquery'],
68
69
  'jquery.flot.pie': ['jquery', 'jquery.flot'],
70
+ 'jquery.flot.events': ['jquery', 'jquery.flot'],
69
71
  'jquery.flot.selection':['jquery', 'jquery.flot'],
70
72
  'jquery.flot.stack': ['jquery', 'jquery.flot'],
71
73
  'jquery.flot.stackpercent':['jquery', 'jquery.flot'],
@@ -86,5 +88,6 @@ require.config({
86
88
  datepicker: ['jquery', 'bootstrap'],
87
89
 
88
90
  elasticjs: ['angular', '../vendor/elasticjs/elastic']
89
- }
91
+ },
92
+ waitSeconds: 60,
90
93
  });
@@ -18,6 +18,10 @@ function () {
18
18
  array.splice(index, 1);
19
19
  return array;
20
20
  },
21
+ // If variable is value, then return alt. If variable is anything else, return value;
22
+ toggle: function (variable, value, alt) {
23
+ return variable === value ? alt : value;
24
+ },
21
25
  toggleInOut: function(array,value) {
22
26
  if(_.contains(array,value)) {
23
27
  array = _.without(array,value);
@@ -10,13 +10,15 @@ function (angular, config, _) {
10
10
  var module = angular.module('kibana.controllers');
11
11
 
12
12
  module.controller('DashCtrl', function(
13
- $scope, $route, ejsResource, fields, dashboard, alertSrv, panelMove) {
13
+ $scope, $route, ejsResource, fields, dashboard, alertSrv, panelMove, esVersion) {
14
+
15
+ $scope.requiredElasticSearchVersion = ">=0.20.5";
16
+
14
17
  $scope.editor = {
15
18
  index: 0
16
19
  };
17
20
 
18
- // For moving stuff around the dashboard. Needs better names
19
- $scope.panelMove = panelMove;
21
+ // For moving stuff around the dashboard.
20
22
  $scope.panelMoveDrop = panelMove.onDrop;
21
23
  $scope.panelMoveStart = panelMove.onStart;
22
24
  $scope.panelMoveStop = panelMove.onStop;
@@ -24,16 +26,18 @@ function (angular, config, _) {
24
26
  $scope.panelMoveOut = panelMove.onOut;
25
27
 
26
28
 
27
-
28
29
  $scope.init = function() {
29
30
  $scope.config = config;
30
- // Make underscore.js available to views
31
+ // Make stuff, including underscore.js available to views
31
32
  $scope._ = _;
32
33
  $scope.dashboard = dashboard;
33
34
  $scope.dashAlerts = alertSrv;
35
+ $scope.esVersion = esVersion;
36
+
37
+ // Clear existing alerts
34
38
  alertSrv.clearAll();
35
39
 
36
- // Provide a global list of all see fields
40
+ // Provide a global list of all seen fields
37
41
  $scope.fields = fields;
38
42
  $scope.reset_row();
39
43
 
@@ -11,9 +11,6 @@ function (angular, _) {
11
11
  $scope.loader = dashboard.current.loader;
12
12
 
13
13
  $scope.init = function() {
14
- $scope.advancedLoad = false;
15
- $scope.advancedSave = false;
16
-
17
14
  $scope.gist_pattern = /(^\d{5,}$)|(^[a-z0-9]{10,}$)|(gist.github.com(\/*.*)\/[a-z0-9]{5,}\/*$)/;
18
15
  $scope.gist = $scope.gist || {};
19
16
  $scope.elasticsearch = $scope.elasticsearch || {};
@@ -73,7 +73,7 @@ if(!_.isUndefined(ARGS.query)) {
73
73
  queries = {
74
74
  0: {
75
75
  query: '*',
76
- id: 0
76
+ id: 0,
77
77
  }
78
78
  };
79
79
  }
@@ -93,7 +93,7 @@ dashboard.services.filter = {
93
93
  field: ARGS.timefield||"@timestamp",
94
94
  type: "time",
95
95
  active: true,
96
- id: 0
96
+ id: 0,
97
97
  }
98
98
  },
99
99
  ids: [0]
@@ -7,5 +7,6 @@ define([
7
7
  './ngBlur',
8
8
  './ngModelOnBlur',
9
9
  './tip',
10
- './confirmClick'
10
+ './confirmClick',
11
+ './esVersion'
11
12
  ], function () {});
@@ -0,0 +1,24 @@
1
+ /*
2
+ Only show an element if it meets an Elasticsearch version requirement
3
+ */
4
+
5
+ define([
6
+ 'angular',
7
+ 'app',
8
+ ],
9
+ function (angular) {
10
+ 'use strict';
11
+
12
+ angular
13
+ .module('kibana.directives')
14
+ .directive('esVersion', function(esVersion) {
15
+ return {
16
+ restrict: 'A',
17
+ link: function(scope, elem, attr) {
18
+ if(!esVersion.is(attr.esVersion)) {
19
+ elem.hide();
20
+ }
21
+ }
22
+ };
23
+ });
24
+ });
@@ -13,8 +13,15 @@ function (angular) {
13
13
 
14
14
  '<div class="row-fluid panel-extra"><div class="panel-extra-container">' +
15
15
 
16
+
17
+ '<span class="extra row-button" ng-show="panel.editable != false">' +
18
+ '<span confirm-click="row.panels = _.without(row.panels,panel)" '+
19
+ 'confirmation="Are you sure you want to remove this {{panel.type}} panel?" class="pointer">'+
20
+ '<i class="icon-remove pointer" bs-tooltip="\'Remove\'"></i></span>'+
21
+ '</span>' +
22
+
16
23
  '<span class="extra row-button" ng-hide="panel.draggable == false">' +
17
- '<span class="row-text pointer" bs-tooltip="\'Drag here to move\'"' +
24
+ '<span class="pointer" bs-tooltip="\'Drag here to move\'"' +
18
25
  'data-drag=true data-jqyoui-options="{revert: \'invalid\',helper:\'clone\'}"'+
19
26
  ' jqyoui-draggable="'+
20
27
  '{'+
@@ -23,18 +30,12 @@ function (angular) {
23
30
  'index:{{$index}},'+
24
31
  'onStart:\'panelMoveStart\','+
25
32
  'onStop:\'panelMoveStop\''+
26
- '}" ng-model="row.panels">{{panel.type}}</span>'+
33
+ '}" ng-model="row.panels"><i class="icon-move"></i></span>'+
27
34
  '</span>' +
28
35
  '<span class="extra row-button" ng-show="panel.draggable == false">' +
29
36
  '<span class="row-text">{{panel.type}}</span>'+
30
37
  '</span>' +
31
38
 
32
- '<span class="extra row-button" ng-show="panel.editable != false">' +
33
- '<span confirm-click="row.panels = _.without(row.panels,panel)" '+
34
- 'confirmation="Are you sure you want to remove this {{panel.type}} panel?" class="pointer">'+
35
- '<i class="icon-remove pointer" bs-tooltip="\'Remove\'"></i></span>'+
36
- '</span>' +
37
-
38
39
  '<span class="row-button extra" ng-show="panel.editable != false">' +
39
40
  '<span bs-modal="\'app/partials/paneleditor.html\'" class="pointer">'+
40
41
  '<i class="icon-cog pointer" bs-tooltip="\'Configure\'"></i></span>'+
@@ -1,12 +1,19 @@
1
1
  define([
2
- 'angular'
2
+ 'angular',
3
+ 'underscore'
3
4
  ],
4
- function (angular) {
5
+ function (angular, _) {
5
6
  'use strict';
6
7
 
7
8
  angular
8
9
  .module('kibana.directives')
9
10
  .directive('kibanaSimplePanel', function($compile) {
11
+ var panelLoading = '<span ng-show="panelMeta.loading == true">' +
12
+ '<span style="font-size:72px;font-weight:200">'+
13
+ '<i class="icon-spinner icon-spin"></i> loading ...' +
14
+ '</span>'+
15
+ '</span>';
16
+
10
17
  return {
11
18
  restrict: 'E',
12
19
  link: function($scope, elem, attr) {
@@ -22,10 +29,10 @@ function (angular) {
22
29
  elem.removeClass("ng-cloak");
23
30
  }
24
31
 
25
- $scope.$watch(attr.type, function (name) {
32
+ function loadController(name) {
26
33
  elem.addClass("ng-cloak");
27
-
28
34
  // load the panels module file, then render it in the dom.
35
+
29
36
  $scope.require([
30
37
  'jquery',
31
38
  'text!panels/'+name+'/module.html'
@@ -37,6 +44,7 @@ function (angular) {
37
44
  $controllers = $controllers.add($module.find('ngcontroller, [ng-controller], .ng-controller'));
38
45
 
39
46
  if ($controllers.length) {
47
+ $controllers.first().prepend(panelLoading);
40
48
  $scope.require([
41
49
  'panels/'+name+'/module'
42
50
  ], function() {
@@ -46,6 +54,19 @@ function (angular) {
46
54
  loadModule($module);
47
55
  }
48
56
  });
57
+ }
58
+
59
+ $scope.$watch(attr.type, function (name) {
60
+ loadController(name);
61
+ });
62
+
63
+ $scope.$watch(attr.panel, function (panel) {
64
+ // If the panel attribute is specified, create a new scope. This ruins configuration
65
+ // so don't do it with anything that needs to use editor.html
66
+ if(!_.isUndefined(panel)) {
67
+ $scope = $scope.$new();
68
+ $scope.panel = angular.fromJson(panel);
69
+ }
49
70
  });
50
71
  }
51
72
  };
@@ -24,6 +24,18 @@ define(['angular', 'jquery', 'underscore', 'moment'], function (angular, $, _, m
24
24
  };
25
25
  });
26
26
 
27
+ /*
28
+ Filter an array of objects by elasticsearch version requirements
29
+ */
30
+ module.filter('esVersion', function(esVersion) {
31
+ return function(items, require) {
32
+ var ret = _.filter(items,function(qt) {
33
+ return esVersion.is(qt[require]) ? true : false;
34
+ });
35
+ return ret;
36
+ };
37
+ });
38
+
27
39
  module.filter('slice', function() {
28
40
  return function(arr, start, end) {
29
41
  if(!_.isUndefined(arr)) {
@@ -37,7 +49,7 @@ define(['angular', 'jquery', 'underscore', 'moment'], function (angular, $, _, m
37
49
  if(_.isObject(arr) && !_.isArray(arr)) {
38
50
  return angular.toJson(arr);
39
51
  } else {
40
- return arr.toString();
52
+ return _.isNull(arr) ? null : arr.toString();
41
53
  }
42
54
  };
43
55
  });
@@ -101,10 +101,11 @@ function (angular, app, _, L, localRequire) {
101
101
  var _segment = _.isUndefined(segment) ? 0 : segment;
102
102
 
103
103
  $scope.panel.queries.ids = querySrv.idsByMode($scope.panel.queries);
104
- // This could probably be changed to a BoolFilter
104
+ var queries = querySrv.getQueryObjs($scope.panel.queries.ids);
105
+
105
106
  var boolQuery = $scope.ejs.BoolQuery();
106
- _.each($scope.panel.queries.ids,function(id) {
107
- boolQuery = boolQuery.should(querySrv.getEjsObj(id));
107
+ _.each(queries,function(q) {
108
+ boolQuery = boolQuery.should(querySrv.toEjsObj(q));
108
109
  });
109
110
 
110
111
  var request = $scope.ejs.Request().indices(dashboard.indices[_segment])
@@ -1,23 +1 @@
1
- <div>
2
- <div class="row-fluid">
3
- <div class="span1">
4
- <label class="small">Length</label>
5
- <input type="number" style="width:80%" ng-model="panel.size" ng-change="set_refresh(true)">
6
- </div>
7
- <div class="span3">
8
- <label class="small">Field</label>
9
- <input type="text" bs-typeahead="fields.list" style="width:80%" ng-change="set_refresh(true)" ng-model='panel.field'></select>
10
- </div>
11
- <div class="span3">
12
- <label class="small">Query Mode</label>
13
- <select style="width:80%" ng-change="set_refresh(true)" ng-model='panel.mode' ng-options="f for f in ['terms only','AND', 'OR']"></select>
14
- </div>
15
- <div class="span4">
16
- <label class="small">Exclude Terms(s) (comma seperated)</label>
17
- <input array-join type="text" style="width:90%" ng-change="set_refresh(true)" ng-model='panel.exclude'></input>
18
- </div>
19
- <div class="span1">
20
- <label class="small"> Rest </label><input type="checkbox" ng-model="panel.rest" ng-checked="panel.rest" ng-change="set_refresh(true)">
21
- </div>
22
- </div>
23
- </div>
1
+ <div></div>
@@ -1,33 +1,3 @@
1
1
  <div ng-controller='derivequeries' ng-init="init()">
2
- <style>
3
- .end-derive {
4
- position:absolute;
5
- right:15px;
6
- top:5px;
7
- }
8
- .panel-derive-field {
9
- text-decoration: underline;
10
- cursor: pointer;
11
- }
12
- .panel-derive {
13
- padding-right: 35px !important;
14
- height: 31px !important;
15
- -webkit-box-sizing: border-box; /* Safari/Chrome, other WebKit */
16
- -moz-box-sizing: border-box; /* Firefox, other Gecko */
17
- box-sizing: border-box; /* Opera/IE 8+ */
18
- }
19
- </style>
20
- <label class="small">Create new queries from
21
- <span class="panel-derive-field" ng-show="!editing" ng-click="editing=true">{{panel.field}}</span>
22
- <select ng-show="editing && fields.list.length>1" class="input-medium" ng-model="panel.field" ng-options="f for f in fields.list" ng-change='editing=false' ng-blur="editing=false"></select>
23
- <input ng-show="editing && fields.list.length<2" type="text" ng-model="panel.field" ng-blur="editing=false"/>
24
- ({{panel.mode}} mode)</label>
25
- <div>
26
- <form class="form-search" style="position:relative" ng-submit="get_data()">
27
- <input class="search-query panel-derive input-block-level" bs-typeahead="panel.history" data-min-length=0 data-items=100 type="text" ng-model="panel.query"/>
28
- <span class="end-derive">
29
- <i class="icon-search pointer" ng-click="get_data()"></i>
30
- </span
31
- </form>
32
- </div>
2
+ <h4>This panel has been removed and replaced with the new topN query type. Click the colored dot associated with a query to configure the, much improved, equivilent of a derived query.</h4>
33
3
  </div>