Commit 6a1a9768 by Rashid Khan

renamed query service to querySrv, added query pinning

parent e5ff7411
...@@ -7,4 +7,17 @@ angular.module('kibana.filters', []) ...@@ -7,4 +7,17 @@ angular.module('kibana.filters', [])
return function(input) { return function(input) {
return input.sort(); return input.sort();
}; };
}).filter('pinnedQuery', function(querySrv) {
return function( items, pinned) {
var ret = _.filter(querySrv.ids,function(id){
var v = querySrv.list[id];
if(!_.isUndefined(v.pin) && v.pin === true && pinned === true) {
return true;
}
if((_.isUndefined(v.pin) || v.pin === false) && pinned === false) {
return true;
}
}); });
return ret;
};
});
\ No newline at end of file
...@@ -193,7 +193,7 @@ angular.module('kibana.services', []) ...@@ -193,7 +193,7 @@ angular.module('kibana.services', [])
}; };
}) })
.service('query', function(dashboard) { .service('querySrv', function(dashboard, ejsResource) {
// Create an object to hold our service state on the dashboard // Create an object to hold our service state on the dashboard
dashboard.current.services.query = dashboard.current.services.query || {}; dashboard.current.services.query = dashboard.current.services.query || {};
_.defaults(dashboard.current.services.query,{ _.defaults(dashboard.current.services.query,{
...@@ -203,7 +203,9 @@ angular.module('kibana.services', []) ...@@ -203,7 +203,9 @@ angular.module('kibana.services', [])
}); });
// For convenience // For convenience
var ejs = ejsResource(config.elasticsearch);
var _q = dashboard.current.services.query; var _q = dashboard.current.services.query;
this.colors = [ this.colors = [
"#7EB26D","#EAB839","#6ED0E0","#EF843C","#E24D42","#1F78C1","#BA43A9","#705DA0", //1 "#7EB26D","#EAB839","#6ED0E0","#EF843C","#E24D42","#1F78C1","#BA43A9","#705DA0", //1
"#508642","#CCA300","#447EBC","#C15C17","#890F02","#0A437C","#6D1F62","#584477", //2 "#508642","#CCA300","#447EBC","#C15C17","#890F02","#0A437C","#6D1F62","#584477", //2
...@@ -243,6 +245,7 @@ angular.module('kibana.services', []) ...@@ -243,6 +245,7 @@ angular.module('kibana.services', [])
query: '*', query: '*',
alias: '', alias: '',
color: colorAt(_id), color: colorAt(_id),
pin: false,
id: _id, id: _id,
type: 'lucene' type: 'lucene'
}; };
...@@ -268,6 +271,20 @@ angular.module('kibana.services', []) ...@@ -268,6 +271,20 @@ angular.module('kibana.services', [])
} }
}; };
this.getEjsObj = function(id) {
return self.toEjsObj(self.list[id]);
};
this.toEjsObj = function (q) {
switch(q.type)
{
case 'lucene':
return ejs.QueryStringQuery(q.query || '*');
default:
return _.isUndefined(q.query) ? false : ejs.QueryStringQuery(q.query || '*');
}
};
this.findQuery = function(queryString) { this.findQuery = function(queryString) {
return _.findWhere(self.list,{query:queryString}); return _.findWhere(self.list,{query:queryString});
}; };
...@@ -485,7 +502,7 @@ angular.module('kibana.services', []) ...@@ -485,7 +502,7 @@ angular.module('kibana.services', [])
// Store a reference to this // Store a reference to this
var self = this; var self = this;
var filterSrv,query; var filterSrv,querySrv;
this.current = {}; this.current = {};
this.last = {}; this.last = {};
...@@ -574,11 +591,11 @@ angular.module('kibana.services', []) ...@@ -574,11 +591,11 @@ angular.module('kibana.services', [])
self.current = _.clone(dashboard); self.current = _.clone(dashboard);
// Ok, now that we've setup the current dashboard, we can inject our services // Ok, now that we've setup the current dashboard, we can inject our services
query = $injector.get('query'); querySrv = $injector.get('querySrv');
filterSrv = $injector.get('filterSrv'); filterSrv = $injector.get('filterSrv');
// Make sure these re-init // Make sure these re-init
query.init(); querySrv.init();
filterSrv.init(); filterSrv.init();
if(dashboard.index.interval !== 'none' && filterSrv.idsByType('time').length === 0) { if(dashboard.index.interval !== 'none' && filterSrv.idsByType('time').length === 0) {
......
...@@ -20,7 +20,7 @@ ...@@ -20,7 +20,7 @@
'use strict'; 'use strict';
angular.module('kibana.bettermap', []) angular.module('kibana.bettermap', [])
.controller('bettermap', function($scope, query, dashboard, filterSrv) { .controller('bettermap', function($scope, querySrv, dashboard, filterSrv) {
// Set and populate defaults // Set and populate defaults
var _d = { var _d = {
...@@ -67,8 +67,8 @@ angular.module('kibana.bettermap', []) ...@@ -67,8 +67,8 @@ angular.module('kibana.bettermap', [])
var _segment = _.isUndefined(segment) ? 0 : segment; var _segment = _.isUndefined(segment) ? 0 : segment;
var boolQuery = $scope.ejs.BoolQuery(); var boolQuery = $scope.ejs.BoolQuery();
_.each(query.list,function(q) { _.each(querySrv.list,function(q) {
boolQuery = boolQuery.should($scope.ejs.QueryStringQuery((q.query || '*'))); boolQuery = boolQuery.should(querySrv.toEjsObj(q));
}); });
var request = $scope.ejs.Request().indices(dashboard.indices[_segment]) var request = $scope.ejs.Request().indices(dashboard.indices[_segment])
......
...@@ -24,7 +24,7 @@ ...@@ -24,7 +24,7 @@
'use strict'; 'use strict';
angular.module('kibana.fields', []) angular.module('kibana.fields', [])
.controller('fields', function($scope, eventBus, $timeout, dashboard, query, filterSrv) { .controller('fields', function($scope, eventBus, $timeout, dashboard, filterSrv) {
// Set and populate defaults // Set and populate defaults
var _d = { var _d = {
......
...@@ -41,15 +41,15 @@ ...@@ -41,15 +41,15 @@
'use strict'; 'use strict';
angular.module('kibana.histogram', []) angular.module('kibana.histogram', [])
.controller('histogram', function($scope, eventBus, query, dashboard, filterSrv) { .controller('histogram', function($scope, eventBus, querySrv, dashboard, filterSrv) {
// Set and populate defaults // Set and populate defaults
var _d = { var _d = {
status : "Stable", status : "Stable",
group : "default", group : "default",
query : [ {query: "*", label:"Query"} ],
mode : 'count', mode : 'count',
time_field : '@timestamp', time_field : '@timestamp',
queries : [],
value_field : null, value_field : null,
auto_int : true, auto_int : true,
resolution : 100, resolution : 100,
...@@ -73,7 +73,7 @@ angular.module('kibana.histogram', []) ...@@ -73,7 +73,7 @@ angular.module('kibana.histogram', [])
$scope.init = function() { $scope.init = function() {
$scope.queries = query; $scope.querySrv = querySrv;
$scope.$on('refresh',function(){ $scope.$on('refresh',function(){
$scope.get_data(); $scope.get_data();
...@@ -103,9 +103,9 @@ angular.module('kibana.histogram', []) ...@@ -103,9 +103,9 @@ angular.module('kibana.histogram', [])
var request = $scope.ejs.Request().indices(dashboard.indices[_segment]); var request = $scope.ejs.Request().indices(dashboard.indices[_segment]);
// Build the query // Build the query
_.each($scope.queries.ids, function(id) { _.each(querySrv.ids, function(id) {
var query = $scope.ejs.FilteredQuery( var query = $scope.ejs.FilteredQuery(
$scope.ejs.QueryStringQuery($scope.queries.list[id].query || '*'), querySrv.getEjsObj(id),
filterSrv.getBoolFilter(filterSrv.ids) filterSrv.getBoolFilter(filterSrv.ids)
); );
...@@ -151,13 +151,13 @@ angular.module('kibana.histogram', []) ...@@ -151,13 +151,13 @@ angular.module('kibana.histogram', [])
// Make sure we're still on the same query/queries // Make sure we're still on the same query/queries
if($scope.query_id === query_id && if($scope.query_id === query_id &&
_.intersection(facetIds,query.ids).length === query.ids.length _.intersection(facetIds,querySrv.ids).length === querySrv.ids.length
) { ) {
var i = 0; var i = 0;
var data, hits; var data, hits;
_.each(query.ids, function(id) { _.each(querySrv.ids, function(id) {
var v = results.facets[id]; var v = results.facets[id];
// Null values at each end of the time range ensure we see entire range // Null values at each end of the time range ensure we see entire range
...@@ -184,7 +184,7 @@ angular.module('kibana.histogram', []) ...@@ -184,7 +184,7 @@ angular.module('kibana.histogram', [])
// Create the flot series object // Create the flot series object
var series = { var series = {
data: { data: {
info: $scope.queries.list[id], info: querySrv.list[id],
data: data, data: data,
hits: hits hits: hits
}, },
......
...@@ -22,7 +22,7 @@ ...@@ -22,7 +22,7 @@
'use strict'; 'use strict';
angular.module('kibana.hits', []) angular.module('kibana.hits', [])
.controller('hits', function($scope, query, dashboard, filterSrv) { .controller('hits', function($scope, querySrv, dashboard, filterSrv) {
// Set and populate defaults // Set and populate defaults
var _d = { var _d = {
...@@ -62,9 +62,9 @@ angular.module('kibana.hits', []) ...@@ -62,9 +62,9 @@ angular.module('kibana.hits', [])
var request = $scope.ejs.Request().indices(dashboard.indices[_segment]); var request = $scope.ejs.Request().indices(dashboard.indices[_segment]);
// Build the question part of the query // Build the question part of the query
_.each(query.ids, function(id) { _.each(querySrv.ids, function(id) {
var _q = $scope.ejs.FilteredQuery( var _q = $scope.ejs.FilteredQuery(
$scope.ejs.QueryStringQuery(query.list[id].query || '*'), querySrv.getEjsObj(id),
filterSrv.getBoolFilter(filterSrv.ids)); filterSrv.getBoolFilter(filterSrv.ids));
request = request request = request
...@@ -99,10 +99,10 @@ angular.module('kibana.hits', []) ...@@ -99,10 +99,10 @@ angular.module('kibana.hits', [])
// Make sure we're still on the same query/queries // Make sure we're still on the same query/queries
if($scope.query_id === query_id && if($scope.query_id === query_id &&
_.intersection(facetIds,query.ids).length === query.ids.length _.intersection(facetIds,querySrv.ids).length === querySrv.ids.length
) { ) {
var i = 0; var i = 0;
_.each(query.ids, function(id) { _.each(querySrv.ids, function(id) {
var v = results.facets[id]; var v = results.facets[id];
var hits = _.isUndefined($scope.data[i]) || _segment === 0 ? var hits = _.isUndefined($scope.data[i]) || _segment === 0 ?
v.count : $scope.data[i].hits+v.count; v.count : $scope.data[i].hits+v.count;
...@@ -110,7 +110,7 @@ angular.module('kibana.hits', []) ...@@ -110,7 +110,7 @@ angular.module('kibana.hits', [])
// Create series // Create series
$scope.data[i] = { $scope.data[i] = {
info: query.list[id], info: querySrv.list[id],
id: id, id: id,
hits: hits, hits: hits,
data: [[i,hits]] data: [[i,hits]]
...@@ -144,7 +144,7 @@ angular.module('kibana.hits', []) ...@@ -144,7 +144,7 @@ angular.module('kibana.hits', [])
$scope.get_data(); $scope.get_data();
} }
}).directive('hitsChart', function(query) { }).directive('hitsChart', function(querySrv) {
return { return {
restrict: 'A', restrict: 'A',
link: function(scope, elem, attrs, ctrl) { link: function(scope, elem, attrs, ctrl) {
...@@ -195,7 +195,7 @@ angular.module('kibana.hits', []) ...@@ -195,7 +195,7 @@ angular.module('kibana.hits', [])
color: "#eee", color: "#eee",
hoverable: true, hoverable: true,
}, },
colors: query.colors colors: querySrv.colors
}); });
} }
if(scope.panel.chart === 'pie') { if(scope.panel.chart === 'pie') {
...@@ -227,7 +227,7 @@ angular.module('kibana.hits', []) ...@@ -227,7 +227,7 @@ angular.module('kibana.hits', [])
}, },
//grid: { hoverable: true, clickable: true }, //grid: { hoverable: true, clickable: true },
grid: { hoverable: true, clickable: true }, grid: { hoverable: true, clickable: true },
colors: query.colors colors: querySrv.colors
}); });
} }
......
...@@ -28,7 +28,7 @@ ...@@ -28,7 +28,7 @@
'use strict'; 'use strict';
angular.module('kibana.map', []) angular.module('kibana.map', [])
.controller('map', function($scope, $rootScope, query, dashboard, filterSrv) { .controller('map', function($scope, $rootScope, querySrv, dashboard, filterSrv) {
// Set and populate defaults // Set and populate defaults
var _d = { var _d = {
...@@ -62,7 +62,7 @@ angular.module('kibana.map', []) ...@@ -62,7 +62,7 @@ angular.module('kibana.map', [])
request = $scope.ejs.Request().indices(dashboard.indices); request = $scope.ejs.Request().indices(dashboard.indices);
var boolQuery = $scope.ejs.BoolQuery(); var boolQuery = $scope.ejs.BoolQuery();
_.each(query.list,function(q) { _.each(querySrv.list,function(q) {
boolQuery = boolQuery.should($scope.ejs.QueryStringQuery(q.query || '*')); boolQuery = boolQuery.should($scope.ejs.QueryStringQuery(q.query || '*'));
}); });
......
...@@ -29,7 +29,7 @@ ...@@ -29,7 +29,7 @@
'use strict'; 'use strict';
angular.module('kibana.pie', []) angular.module('kibana.pie', [])
.controller('pie', function($scope, $rootScope, query, dashboard, filterSrv) { .controller('pie', function($scope, $rootScope, querySrv, dashboard, filterSrv) {
// Set and populate defaults // Set and populate defaults
var _d = { var _d = {
...@@ -89,8 +89,8 @@ angular.module('kibana.pie', []) ...@@ -89,8 +89,8 @@ angular.module('kibana.pie', [])
// This could probably be changed to a BoolFilter // This could probably be changed to a BoolFilter
var boolQuery = $scope.ejs.BoolQuery(); var boolQuery = $scope.ejs.BoolQuery();
_.each(query.list,function(q) { _.each(querySrv.list,function(q) {
boolQuery = boolQuery.should($scope.ejs.QueryStringQuery(q.query || '*')); boolQuery = boolQuery.should(querySrv.toEjsObj(q));
}); });
var results; var results;
...@@ -162,7 +162,7 @@ angular.module('kibana.pie', []) ...@@ -162,7 +162,7 @@ angular.module('kibana.pie', [])
}; };
}) })
.directive('pie', function(query, filterSrv, dashboard) { .directive('pie', function(querySrv, filterSrv, dashboard) {
return { return {
restrict: 'A', restrict: 'A',
link: function(scope, elem, attrs) { link: function(scope, elem, attrs) {
...@@ -239,7 +239,7 @@ angular.module('kibana.pie', []) ...@@ -239,7 +239,7 @@ angular.module('kibana.pie', [])
clickable: true clickable: true
}, },
legend: { show: false }, legend: { show: false },
colors: query.colors colors: querySrv.colors
}; };
// Populate element // Populate element
...@@ -248,6 +248,7 @@ angular.module('kibana.pie', []) ...@@ -248,6 +248,7 @@ angular.module('kibana.pie', [])
scope.plot = $.plot(elem, scope.data, pie); scope.plot = $.plot(elem, scope.data, pie);
}); });
} }
} }
function tt(x, y, contents) { function tt(x, y, contents) {
......
<div> <div class="panel-query-meta row-fluid" style="width:170px">
<style> <style>
.input-query-alias { .input-query-alias {
margin-bottom: 5px !important; margin-bottom: 5px !important;
} }
.panel-query-meta .pin {
text-decoration: underline;
}
</style> </style>
<a class="close" ng-click="render();dismiss();" href="">×</a> <a class="close" ng-click="render();dismiss();" href="">×</a>
<h6>Query Alias</h6> <i ng-click="toggle_pin(id);dismiss();" class="small pointer icon-pushpin"></i>
<span class="strong small">Query Alias</span>
<form> <form>
<input class="input-medium input-query-alias" type="text" ng-model="queries.list[id].alias" placeholder='Alias...' /> <input class="input-medium input-query-alias" type="text" ng-model="querySrv.list[id].alias" placeholder='Alias...' />
<div> <div>
<i ng-repeat="color in queries.colors" class="pointer" ng-class="{'icon-circle-blank':queries.list[id].color == color,'icon-circle':queries.list[id].color != color}" ng-style="{color:color}" ng-click="queries.list[id].color = color;render();"> </i> <i ng-repeat="color in querySrv.colors" class="pointer" ng-class="{'icon-circle-blank':querySrv.list[id].color == color,'icon-circle':querySrv.list[id].color != color}" ng-style="{color:color}" ng-click="querySrv.list[id].color = color;render();"> </i>
</div> </div>
</form> </form>
</div> </div>
\ No newline at end of file
<kibana-panel ng-controller='query' ng-init="init()"> <kibana-panel ng-controller='query' ng-init="init()" class="query-panel">
<style> <style>
.short-query { .short-query {
display:inline-block; display:inline-block;
margin-left: 10px; margin-right: 10px;
} }
.begin-query { .begin-query {
position:absolute; position:absolute;
left:15px; left:13px;
top:5px; top:5px;
} }
.end-query { .end-query {
...@@ -33,19 +33,31 @@ ...@@ -33,19 +33,31 @@
.form-search:hover .remove-query { .form-search:hover .remove-query {
opacity: 1; opacity: 1;
} }
.query-panel .pins {
text-decoration: underline;
}
.query-panel .pinned {
margin-right: 5px;
}
</style> </style>
<label class="small">{{panel.label}}</label> <label class="small">{{panel.label}}</label>
<div ng-repeat="id in queries.ids" ng-class="{'short-query': queries.ids.length>1}"> <div ng-repeat="id in querySrv.ids|pinnedQuery:false" ng-class="{'short-query': querySrv.ids.length>1}">
<form class="form-search" style="position:relative" ng-submit="refresh()"> <form class="form-search" style="position:relative;margin-bottom:5px;" ng-submit="refresh()">
<span class="begin-query"> <span class="begin-query">
<i class="icon-circle pointer" data-unique="1" bs-popover="'panels/query/meta.html'" data-placement="right" ng-style="{color: queries.list[id].color}"></i> <i class="icon-circle pointer" data-unique="1" bs-popover="'panels/query/meta.html'" data-placement="right" ng-style="{color: querySrv.list[id].color}"></i>
<i class="icon-remove-sign pointer remove-query" ng-show="queries.ids.length>1" ng-click="queries.remove(id);refresh()"></i> <i class="icon-remove-sign pointer remove-query" ng-show="querySrv.ids.length>1" ng-click="querySrv.remove(id);refresh()"></i>
</span> </span>
<input class="search-query panel-query" ng-class="{'input-block-level': queries.ids.length==1,'last-query': $last,'has-remove': queries.ids.length>1}" bs-typeahead="panel.history" data-min-length=0 data-items=100 type="text" ng-model="queries.list[id].query"/> <input class="search-query panel-query" ng-class="{'input-block-level': querySrv.ids.length==1,'last-query': $last,'has-remove': querySrv.ids.length>1}" bs-typeahead="panel.history" data-min-length=0 data-items=100 type="text" ng-model="querySrv.list[id].query"/>
<span class="end-query"> <span class="end-query">
<i class="icon-search pointer" ng-click="refresh()" ng-show="$last"></i> <i class="icon-search pointer" ng-click="refresh()" ng-show="$last"></i>
<i class="icon-plus pointer" ng-click="queries.set({})" ng-show="$last"></i> <i class="icon-plus pointer" ng-click="querySrv.set({})" ng-show="$last"></i>
</span> </span>
</form> </form>
</div> </div>
<div>
<span class="pointer" ng-click="panel.pinned = !panel.pinned"><small class="pins">Pinned</small> <i ng-class="{'icon-caret-right':panel.pinned,'icon-caret-left':!panel.pinned}"></i></span>
<span ng-show="panel.pinned" ng-repeat="id in querySrv.ids|pinnedQuery:true" class="pinned badge">
<i class="icon-circle pointer" ng-style="{color: querySrv.list[id].color}" data-unique="1" bs-popover="'panels/query/meta.html'"></i><span bs-tooltip="querySrv.list[id].query"> {{querySrv.list[id].alias || querySrv.list[id].query}}</span>
</span>
</div>
</kibana-panel> </kibana-panel>
\ No newline at end of file
...@@ -16,26 +16,27 @@ ...@@ -16,26 +16,27 @@
'use strict'; 'use strict';
angular.module('kibana.query', []) angular.module('kibana.query', [])
.controller('query', function($scope, query, $rootScope) { .controller('query', function($scope, querySrv, $rootScope) {
// Set and populate defaults // Set and populate defaults
var _d = { var _d = {
status : "Experimental", status : "Experimental",
label : "Search", label : "Search",
query : "*", query : "*",
pinned : true,
group : "default", group : "default",
history : [], history : [],
remember: 10 // max: 100, angular strap can't take a variable for items param remember: 10 // max: 100, angular strap can't take a variable for items param
}; };
_.defaults($scope.panel,_d); _.defaults($scope.panel,_d);
$scope.queries = query; $scope.querySrv = querySrv;
$scope.init = function() { $scope.init = function() {
}; };
$scope.refresh = function(query) { $scope.refresh = function(query) {
update_history(_.pluck($scope.queries.list,'query')); update_history(_.pluck($scope.querySrv.list,'query'));
$rootScope.$broadcast('refresh'); $rootScope.$broadcast('refresh');
}; };
...@@ -43,6 +44,10 @@ angular.module('kibana.query', []) ...@@ -43,6 +44,10 @@ angular.module('kibana.query', [])
$rootScope.$broadcast('render'); $rootScope.$broadcast('render');
}; };
$scope.toggle_pin = function(id) {
querySrv.list[id].pin = querySrv.list[id].pin ? false : true;
};
var update_history = function(query) { var update_history = function(query) {
if($scope.panel.remember > 0) { if($scope.panel.remember > 0) {
$scope.panel.history = _.union(query.reverse(),$scope.panel.history); $scope.panel.history = _.union(query.reverse(),$scope.panel.history);
......
...@@ -30,7 +30,7 @@ ...@@ -30,7 +30,7 @@
'use strict'; 'use strict';
angular.module('kibana.table', []) angular.module('kibana.table', [])
.controller('table', function($rootScope, $scope, eventBus, fields, query, dashboard, filterSrv) { .controller('table', function($rootScope, $scope, eventBus, fields, querySrv, dashboard, filterSrv) {
// Set and populate defaults // Set and populate defaults
var _d = { var _d = {
...@@ -69,7 +69,7 @@ angular.module('kibana.table', []) ...@@ -69,7 +69,7 @@ angular.module('kibana.table', [])
$scope.panel.fields = _.clone(fields); $scope.panel.fields = _.clone(fields);
}); });
eventBus.register($scope,'table_documents', function(event, docs) { eventBus.register($scope,'table_documents', function(event, docs) {
query.list[query.ids[0]].query = docs.query; querySrv.list[querySrv.ids[0]].query = docs.query;
$scope.data = docs.docs; $scope.data = docs.docs;
}); });
}; };
...@@ -139,8 +139,8 @@ angular.module('kibana.table', []) ...@@ -139,8 +139,8 @@ angular.module('kibana.table', [])
var request = $scope.ejs.Request().indices(dashboard.indices[_segment]); var request = $scope.ejs.Request().indices(dashboard.indices[_segment]);
var boolQuery = $scope.ejs.BoolQuery(); var boolQuery = $scope.ejs.BoolQuery();
_.each(query.list,function(q) { _.each(querySrv.list,function(q) {
boolQuery = boolQuery.should($scope.ejs.QueryStringQuery(q.query || '*')); boolQuery = boolQuery.should(querySrv.toEjsObj(q));
}); });
request = request.query( request = request.query(
...@@ -250,7 +250,7 @@ angular.module('kibana.table', []) ...@@ -250,7 +250,7 @@ angular.module('kibana.table', [])
}); });
eventBus.broadcast($scope.$id,$scope.panel.group,"table_documents", eventBus.broadcast($scope.$id,$scope.panel.group,"table_documents",
{ {
query: query.list[query.ids[0]].query, query: querySrv.list[querySrv.ids[0]].query,
docs : _.pluck($scope.data,'_source'), docs : _.pluck($scope.data,'_source'),
index: $scope.index index: $scope.index
}); });
......
...@@ -2,10 +2,10 @@ ...@@ -2,10 +2,10 @@
<div ng-style="panel.style" style="line-height:{{panel.style['font-size']}};display:inline-block;padding-right: 5px;" ng-repeat="query in trends"> <div ng-style="panel.style" style="line-height:{{panel.style['font-size']}};display:inline-block;padding-right: 5px;" ng-repeat="query in trends">
<i class="icon-circle" style="color:{{query.info.color}}"></i> <i class="icon-circle" style="color:{{query.info.color}}"></i>
<span ng-class="{'text-success': query.hits.new >= query.hits.old, 'text-error': query.hits.old > query.hits.new}" class='strong'> <span bs-tooltip="'Then: '+query.hits.old+', Now: '+query.hits.new" ng-class="{'text-success': query.hits.new >= query.hits.old, 'text-error': query.hits.old > query.hits.new}" class='pointer strong'>
<i class='large' ng-class="{'icon-caret-up': query.hits.new >= query.hits.old, 'icon-caret-down': query.hits.old > query.hits.new}"></i> {{query.percent}}% <i class='large' ng-class="{'icon-caret-up': query.hits.new >= query.hits.old, 'icon-caret-down': query.hits.old > query.hits.new}"></i> {{query.percent}}%
</span> </span>
<span class="tiny pointer light" bs-tooltip="'Then: '+query.hits.old+', Now: '+query.hits.new" ng-show="query.info.alias != ''">({{query.info.alias}})</span> <span class="tiny light" ng-show="query.info.alias != ''">({{query.info.alias}})</span>
<br ng-show="panel.arrangement == 'vertical'"> <br ng-show="panel.arrangement == 'vertical'">
</div> </div>
</kibana-panel> </kibana-panel>
\ No newline at end of file
...@@ -22,7 +22,7 @@ ...@@ -22,7 +22,7 @@
'use strict'; 'use strict';
angular.module('kibana.trends', []) angular.module('kibana.trends', [])
.controller('trends', function($scope, kbnIndex, query, dashboard, filterSrv) { .controller('trends', function($scope, kbnIndex, querySrv, dashboard, filterSrv) {
// Set and populate defaults // Set and populate defaults
var _d = { var _d = {
...@@ -78,9 +78,9 @@ angular.module('kibana.trends', []) ...@@ -78,9 +78,9 @@ angular.module('kibana.trends', [])
// Build the question part of the query // Build the question part of the query
_.each(query.ids, function(id) { _.each(querySrv.ids, function(id) {
var q = $scope.ejs.FilteredQuery( var q = $scope.ejs.FilteredQuery(
$scope.ejs.QueryStringQuery(query.list[id].query || '*'), querySrv.getEjsObj(id),
filterSrv.getBoolFilter(_ids_without_time).must( filterSrv.getBoolFilter(_ids_without_time).must(
$scope.ejs.RangeFilter(timeField) $scope.ejs.RangeFilter(timeField)
.from($scope.time.from) .from($scope.time.from)
...@@ -93,10 +93,11 @@ angular.module('kibana.trends', []) ...@@ -93,10 +93,11 @@ angular.module('kibana.trends', [])
).size(0); ).size(0);
}); });
// And again for the old time period // And again for the old time period
_.each(query.ids, function(id) { _.each(querySrv.ids, function(id) {
var q = $scope.ejs.FilteredQuery( var q = $scope.ejs.FilteredQuery(
$scope.ejs.QueryStringQuery(query.list[id].query || '*'), querySrv.getEjsObj(id),
filterSrv.getBoolFilter(_ids_without_time).must( filterSrv.getBoolFilter(_ids_without_time).must(
$scope.ejs.RangeFilter(timeField) $scope.ejs.RangeFilter(timeField)
.from($scope.old_time.from) .from($scope.old_time.from)
...@@ -108,6 +109,7 @@ angular.module('kibana.trends', []) ...@@ -108,6 +109,7 @@ angular.module('kibana.trends', [])
).size(0); ).size(0);
}); });
// TODO: Spy for trend panel // TODO: Spy for trend panel
//$scope.populate_modal(request); //$scope.populate_modal(request);
...@@ -121,8 +123,7 @@ angular.module('kibana.trends', []) ...@@ -121,8 +123,7 @@ angular.module('kibana.trends', [])
).then(function (p) { ).then(function (p) {
$scope.index = _.union(p,$scope.index); $scope.index = _.union(p,$scope.index);
request = request.indices($scope.index[_segment]); request = request.indices($scope.index[_segment]);
process_results(request.doSearch()); process_results(request.doSearch(),_segment,query_id);
}); });
} else { } else {
process_results(request.indices($scope.index[_segment]).doSearch(),_segment,query_id); process_results(request.indices($scope.index[_segment]).doSearch(),_segment,query_id);
...@@ -133,7 +134,6 @@ angular.module('kibana.trends', []) ...@@ -133,7 +134,6 @@ angular.module('kibana.trends', [])
// Populate scope when we have results // Populate scope when we have results
var process_results = function(results,_segment,query_id) { var process_results = function(results,_segment,query_id) {
results.then(function(results) { results.then(function(results) {
$scope.panel.loading = false; $scope.panel.loading = false;
if(_segment === 0) { if(_segment === 0) {
$scope.hits = {}; $scope.hits = {};
...@@ -152,10 +152,10 @@ angular.module('kibana.trends', []) ...@@ -152,10 +152,10 @@ angular.module('kibana.trends', [])
// Make sure we're still on the same query/queries // Make sure we're still on the same query/queries
if($scope.query_id === query_id && if($scope.query_id === query_id &&
_.intersection(facetIds,query.ids).length === query.ids.length _.intersection(facetIds,querySrv.ids).length === querySrv.ids.length
) { ) {
var i = 0; var i = 0;
_.each(query.ids, function(id) { _.each(querySrv.ids, function(id) {
var v = results.facets[id]; var v = results.facets[id];
var n = results.facets[id].count; var n = results.facets[id].count;
var o = results.facets['old_'+id].count; var o = results.facets['old_'+id].count;
...@@ -172,7 +172,7 @@ angular.module('kibana.trends', []) ...@@ -172,7 +172,7 @@ angular.module('kibana.trends', [])
'?' : Math.round(percentage(hits.old,hits.new)*100)/100; '?' : Math.round(percentage(hits.old,hits.new)*100)/100;
// Create series // Create series
$scope.data[i] = { $scope.data[i] = {
info: query.list[id], info: querySrv.list[id],
hits: { hits: {
new : hits.new, new : hits.new,
old : hits.old old : hits.old
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment