kibana-sinatra 0.0.3 → 0.0.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +2 -0
- data/lib/kibana/assets/app/app.js +0 -1
- data/lib/kibana/assets/app/components/extend-jquery.js +1 -0
- data/lib/kibana/assets/app/components/kbn.js +31 -10
- data/lib/kibana/assets/app/components/require.config.js +5 -2
- data/lib/kibana/assets/app/components/underscore.extended.js +4 -0
- data/lib/kibana/assets/app/controllers/dash.js +10 -6
- data/lib/kibana/assets/app/controllers/dashLoader.js +0 -3
- data/lib/kibana/assets/app/dashboards/logstash.js +2 -2
- data/lib/kibana/assets/app/directives/all.js +2 -1
- data/lib/kibana/assets/app/directives/esVersion.js +24 -0
- data/lib/kibana/assets/app/directives/kibanaPanel.js +9 -8
- data/lib/kibana/assets/app/directives/kibanaSimplePanel.js +25 -4
- data/lib/kibana/assets/app/filters/all.js +13 -1
- data/lib/kibana/assets/app/panels/bettermap/module.js +4 -3
- data/lib/kibana/assets/app/panels/derivequeries/editor.html +1 -23
- data/lib/kibana/assets/app/panels/derivequeries/module.html +1 -31
- data/lib/kibana/assets/app/panels/derivequeries/module.js +3 -110
- data/lib/kibana/assets/app/panels/filtering/module.html +8 -8
- data/lib/kibana/assets/app/panels/filtering/module.js +11 -1
- data/lib/kibana/assets/app/panels/histogram/editor.html +37 -66
- data/lib/kibana/assets/app/panels/histogram/module.html +14 -8
- data/lib/kibana/assets/app/panels/histogram/module.js +191 -65
- data/lib/kibana/assets/app/panels/histogram/queriesEditor.html +43 -0
- data/lib/kibana/assets/app/panels/histogram/styleEditor.html +84 -0
- data/lib/kibana/assets/app/panels/histogram/timeSeries.js +39 -2
- data/lib/kibana/assets/app/panels/hits/module.js +10 -13
- data/lib/kibana/assets/app/panels/map/module.js +9 -6
- data/lib/kibana/assets/app/panels/pie/module.js +4 -3
- data/lib/kibana/assets/app/panels/query/editors/lucene.html +0 -0
- data/lib/kibana/assets/app/panels/query/editors/regex.html +0 -0
- data/lib/kibana/assets/app/panels/query/editors/topN.html +12 -0
- data/lib/kibana/assets/app/panels/query/help/lucene.html +30 -0
- data/lib/kibana/assets/app/panels/query/help/regex.html +10 -0
- data/lib/kibana/assets/app/panels/query/help/topN.html +14 -0
- data/lib/kibana/assets/app/panels/query/helpModal.html +12 -0
- data/lib/kibana/assets/app/panels/query/meta.html +29 -16
- data/lib/kibana/assets/app/panels/query/module.html +11 -6
- data/lib/kibana/assets/app/panels/query/module.js +50 -2
- data/lib/kibana/assets/app/panels/query/query.css +8 -0
- data/lib/kibana/assets/app/panels/sparklines/editor.html +23 -0
- data/lib/kibana/assets/app/panels/sparklines/interval.js +57 -0
- data/lib/kibana/assets/app/panels/sparklines/module.html +10 -0
- data/lib/kibana/assets/app/panels/sparklines/module.js +379 -0
- data/lib/kibana/assets/app/panels/sparklines/timeSeries.js +216 -0
- data/lib/kibana/assets/app/panels/table/micropanel.html +36 -18
- data/lib/kibana/assets/app/panels/table/modal.html +45 -0
- data/lib/kibana/assets/app/panels/table/module.html +15 -3
- data/lib/kibana/assets/app/panels/table/module.js +67 -16
- data/lib/kibana/assets/app/panels/terms/module.js +8 -4
- data/lib/kibana/assets/app/panels/timepicker/module.html +5 -2
- data/lib/kibana/assets/app/panels/trends/module.html +8 -2
- data/lib/kibana/assets/app/panels/trends/module.js +15 -18
- data/lib/kibana/assets/app/partials/dashLoader.html +11 -11
- data/lib/kibana/assets/app/partials/dashboard.html +1 -1
- data/lib/kibana/assets/app/partials/dasheditor.html +1 -1
- data/lib/kibana/assets/app/services/all.js +2 -1
- data/lib/kibana/assets/app/services/dashboard.js +5 -4
- data/lib/kibana/assets/app/services/esVersion.js +150 -0
- data/lib/kibana/assets/app/services/fields.js +3 -3
- data/lib/kibana/assets/app/services/filterSrv.js +6 -1
- data/lib/kibana/assets/app/services/querySrv.js +153 -38
- data/lib/kibana/assets/css/bootstrap.dark.min.css +1 -1
- data/lib/kibana/assets/css/bootstrap.light.min.css +1 -1
- data/lib/kibana/assets/img/small.png +0 -0
- data/lib/kibana/assets/index.html +2 -1
- data/lib/kibana/assets/vendor/bootstrap/bootstrap.js +14 -6
- data/lib/kibana/assets/vendor/bootstrap/less/bootswatch.dark.less +2 -1
- data/lib/kibana/assets/vendor/bootstrap/less/overrides.less +33 -12
- data/lib/kibana/assets/vendor/chromath.js +34 -0
- data/lib/kibana/assets/vendor/jquery/jquery.flot.events.js +641 -0
- data/lib/kibana/sinatra/version.rb +1 -1
- data/lib/kibana/views/config.erb +2 -1
- metadata +22 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b90d776ed0faabd51b00e390a59c193d63c4eb94
|
4
|
+
data.tar.gz: d38a9fb1987082bd9c38ff97be8763c985bf75d4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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:
|
@@ -1,4 +1,4 @@
|
|
1
|
-
define(['jquery',
|
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
|
-
|
18
|
-
|
19
|
-
|
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.
|
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
|
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]
|
@@ -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="
|
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"
|
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
|
-
|
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
|
-
|
104
|
+
var queries = querySrv.getQueryObjs($scope.panel.queries.ids);
|
105
|
+
|
105
106
|
var boolQuery = $scope.ejs.BoolQuery();
|
106
|
-
_.each(
|
107
|
-
boolQuery = boolQuery.should(querySrv.
|
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
|
-
<
|
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>
|