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.
- 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>
|