kibana-sinatra 0.0.7 → 0.0.8
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +1 -1
- data/kibana-sinatra.gemspec +1 -0
- data/lib/kibana/assets/app/app.js +8 -3
- data/lib/kibana/assets/app/components/kbn.js +45 -10
- data/lib/kibana/assets/app/components/{underscore.extended.js → lodash.extended.js} +2 -4
- data/lib/kibana/assets/app/components/require.config.js +5 -6
- data/lib/kibana/assets/app/components/settings.js +1 -1
- data/lib/kibana/assets/app/controllers/dash.js +10 -5
- data/lib/kibana/assets/app/controllers/dashLoader.js +1 -1
- data/lib/kibana/assets/app/controllers/pulldown.js +1 -1
- data/lib/kibana/assets/app/controllers/row.js +1 -1
- data/lib/kibana/assets/app/dashboards/default.json +1 -1
- data/lib/kibana/assets/app/dashboards/logstash.js +4 -4
- data/lib/kibana/assets/app/dashboards/logstash.json +1 -1
- data/lib/kibana/assets/app/directives/addPanel.js +1 -1
- data/lib/kibana/assets/app/directives/arrayJoin.js +1 -1
- data/lib/kibana/assets/app/directives/configModal.js +23 -5
- data/lib/kibana/assets/app/directives/kibanaPanel.js +70 -50
- data/lib/kibana/assets/app/directives/kibanaSimplePanel.js +1 -1
- data/lib/kibana/assets/app/factories/store.js +59 -0
- data/lib/kibana/assets/app/filters/all.js +6 -13
- data/lib/kibana/assets/app/panels/bettermap/module.html +5 -0
- data/lib/kibana/assets/app/panels/bettermap/module.js +1 -1
- data/lib/kibana/assets/app/panels/column/editor.html +1 -1
- data/lib/kibana/assets/app/panels/column/module.js +7 -6
- data/lib/kibana/assets/app/panels/dashcontrol/module.js +1 -1
- data/lib/kibana/assets/app/panels/derivequeries/module.js +1 -1
- data/lib/kibana/assets/app/panels/fields/module.js +1 -1
- data/lib/kibana/assets/app/panels/filtering/module.html +10 -17
- data/lib/kibana/assets/app/panels/filtering/module.js +19 -1
- data/lib/kibana/assets/app/panels/histogram/module.html +4 -4
- data/lib/kibana/assets/app/panels/histogram/module.js +62 -12
- data/lib/kibana/assets/app/panels/histogram/timeSeries.js +6 -3
- data/lib/kibana/assets/app/panels/hits/module.js +1 -1
- data/lib/kibana/assets/app/panels/map/module.js +1 -1
- data/lib/kibana/assets/app/panels/pie/editor.html +1 -1
- data/lib/kibana/assets/app/panels/pie/module.js +1 -1
- data/lib/kibana/assets/app/panels/query/meta.html +1 -1
- data/lib/kibana/assets/app/panels/query/module.html +1 -1
- data/lib/kibana/assets/app/panels/query/module.js +2 -7
- data/lib/kibana/assets/app/panels/query/query.css +9 -7
- data/lib/kibana/assets/app/panels/sparklines/module.js +2 -2
- data/lib/kibana/assets/app/panels/sparklines/timeSeries.js +3 -3
- data/lib/kibana/assets/app/panels/stats/editor.html +36 -0
- data/lib/kibana/assets/app/panels/stats/module.html +15 -0
- data/lib/kibana/assets/app/panels/stats/module.js +199 -0
- data/lib/kibana/assets/app/panels/table/editor.html +23 -27
- data/lib/kibana/assets/app/panels/table/micropanel.html +3 -1
- data/lib/kibana/assets/app/panels/table/module.js +7 -1
- data/lib/kibana/assets/app/panels/terms/editor.html +16 -3
- data/lib/kibana/assets/app/panels/terms/module.html +14 -5
- data/lib/kibana/assets/app/panels/terms/module.js +66 -18
- data/lib/kibana/assets/app/panels/text/module.js +1 -1
- data/lib/kibana/assets/app/panels/timepicker/editor.html +14 -12
- data/lib/kibana/assets/app/panels/timepicker/module.html +3 -8
- data/lib/kibana/assets/app/panels/timepicker/module.js +1 -1
- data/lib/kibana/assets/app/panels/trends/module.js +1 -1
- data/lib/kibana/assets/app/partials/dashLoader.html +10 -10
- data/lib/kibana/assets/app/partials/dashboard.html +35 -44
- data/lib/kibana/assets/app/partials/dasheditor.html +7 -5
- data/lib/kibana/assets/app/partials/paneleditor.html +2 -1
- data/lib/kibana/assets/app/partials/panelgeneral.html +1 -1
- data/lib/kibana/assets/app/partials/roweditor.html +11 -9
- data/lib/kibana/assets/app/services/alertSrv.js +1 -1
- data/lib/kibana/assets/app/services/dashboard.js +27 -14
- data/lib/kibana/assets/app/services/esVersion.js +70 -31
- data/lib/kibana/assets/app/services/fields.js +14 -37
- data/lib/kibana/assets/app/services/filterSrv.js +7 -11
- data/lib/kibana/assets/app/services/kbnIndex.js +24 -15
- data/lib/kibana/assets/app/services/panelMove.js +1 -1
- data/lib/kibana/assets/app/services/querySrv.js +20 -6
- data/lib/kibana/assets/app/services/timer.js +1 -1
- 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/cubes.png +0 -0
- data/lib/kibana/assets/img/light.png +0 -0
- data/lib/kibana/assets/index.html +3 -2
- data/lib/kibana/assets/vendor/LICENSE.json +90 -0
- data/lib/kibana/assets/vendor/angular/angular-cookies.js +185 -0
- data/lib/kibana/assets/vendor/angular/angular-dragdrop.js +33 -4
- data/lib/kibana/assets/vendor/blob.js +178 -0
- data/lib/kibana/assets/vendor/bootstrap/bootstrap.js +6 -1
- data/lib/kibana/assets/vendor/bootstrap/less/bak/bootswatch.dark.less +555 -0
- data/lib/kibana/assets/vendor/bootstrap/less/bak/variables.dark.less +304 -0
- data/lib/kibana/assets/vendor/bootstrap/less/bootswatch.dark.less +349 -327
- data/lib/kibana/assets/vendor/bootstrap/less/bootswatch.light.less +590 -7
- data/lib/kibana/assets/vendor/bootstrap/less/modals.less +1 -1
- data/lib/kibana/assets/vendor/bootstrap/less/overrides.less +191 -75
- data/lib/kibana/assets/vendor/bootstrap/less/variables.dark.less +96 -97
- data/lib/kibana/assets/vendor/bootstrap/less/variables.light.less +84 -81
- data/lib/kibana/assets/vendor/jquery/jquery.flot.events.js +39 -51
- data/lib/kibana/assets/vendor/lodash.js +6785 -0
- data/lib/kibana/assets/vendor/numeral.js +565 -0
- data/lib/kibana/sinatra/version.rb +1 -1
- data/lib/kibana/views/config.erb +1 -0
- data/test/sinatra_test.rb +2 -2
- metadata +30 -4
- data/lib/kibana/assets/vendor/underscore.js +0 -1246
@@ -1,8 +1,8 @@
|
|
1
1
|
define([
|
2
|
-
'
|
3
|
-
'
|
2
|
+
'./interval',
|
3
|
+
'lodash'
|
4
4
|
],
|
5
|
-
function (
|
5
|
+
function (Interval, _) {
|
6
6
|
'use strict';
|
7
7
|
|
8
8
|
var ts = {};
|
@@ -46,6 +46,8 @@ function (_, Interval) {
|
|
46
46
|
|
47
47
|
// will keep all values here, keyed by their time
|
48
48
|
this._data = {};
|
49
|
+
// For each bucket in _data, store a corresponding counter of how many times it was written to.
|
50
|
+
this._counters = {};
|
49
51
|
this.start_time = opts.start_date && getDatesTime(opts.start_date);
|
50
52
|
this.end_time = opts.end_date && getDatesTime(opts.end_date);
|
51
53
|
this.opts = opts;
|
@@ -57,6 +59,7 @@ function (_, Interval) {
|
|
57
59
|
* @param {any} value The value at this time
|
58
60
|
*/
|
59
61
|
ts.ZeroFilled.prototype.addValue = function (time, value) {
|
62
|
+
this._counters[time] = (this._counters[time] || 0) + 1;
|
60
63
|
if (time instanceof Date) {
|
61
64
|
time = getDatesTime(time);
|
62
65
|
} else {
|
@@ -19,7 +19,7 @@
|
|
19
19
|
<input class="input-mini" type="number" ng-model="panel.size" ng-change="set_refresh(true)">
|
20
20
|
</div>
|
21
21
|
<div class="editor-option">
|
22
|
-
<label class="small">Exclude Terms(s) (comma
|
22
|
+
<label class="small">Exclude Terms(s) (comma separated)</label>
|
23
23
|
<input array-join type="text" ng-model='panel.exclude'></input>
|
24
24
|
</div>
|
25
25
|
</div>
|
@@ -8,7 +8,7 @@
|
|
8
8
|
|
9
9
|
<fieldset>
|
10
10
|
<select class="input-small" ng-model="querySrv.list[id].type" ng-change="typeChange(querySrv.list[id])">
|
11
|
-
<option ng-repeat="type in queryTypes
|
11
|
+
<option ng-repeat="type in queryTypes">{{type}}</option>
|
12
12
|
</select>  <a href="" class="small" ng-click="queryHelp(querySrv.list[id].type)"> About the {{querySrv.list[id].type}} query</a>
|
13
13
|
|
14
14
|
<hr class="small">
|
@@ -16,7 +16,7 @@
|
|
16
16
|
</form>
|
17
17
|
</div>
|
18
18
|
<div style="display:inline-block" ng-repeat="id in querySrv.ids|pinnedQuery:true">
|
19
|
-
<span class="pointer" ng-show="$first" ng-click="panel.pinned = !panel.pinned"
|
19
|
+
<span class="pointer badge pins" ng-show="$first" ng-click="panel.pinned = !panel.pinned">Pinned <i ng-class="{'icon-caret-right':panel.pinned,'icon-caret-left':!panel.pinned}"></i></span>
|
20
20
|
<span ng-show="panel.pinned" class="badge pinned">
|
21
21
|
<i class="icon-circle pointer" ng-show="querySrv.list[id].enable" ng-style="{color: querySrv.list[id].color}" data-unique="1" bs-popover="'app/panels/query/meta.html'" data-placement="bottomLeft"></i>
|
22
22
|
<i class="pointer icon-circle-blank" bs-tooltip="'Activate query'" ng-click="querySrv.list[id].enable=true;dashboard.refresh();" ng-hide="querySrv.list[id].enable" ng-style="{color: querySrv.list[id].color}"></i>
|
@@ -10,7 +10,7 @@
|
|
10
10
|
define([
|
11
11
|
'angular',
|
12
12
|
'app',
|
13
|
-
'
|
13
|
+
'lodash',
|
14
14
|
|
15
15
|
'css!./query.css'
|
16
16
|
], function (angular, app, _) {
|
@@ -38,12 +38,7 @@ define([
|
|
38
38
|
$scope.querySrv = querySrv;
|
39
39
|
|
40
40
|
// A list of query types for the query config popover
|
41
|
-
$scope.queryTypes =
|
42
|
-
return {
|
43
|
-
name:k,
|
44
|
-
require:v.require
|
45
|
-
};
|
46
|
-
});
|
41
|
+
$scope.queryTypes = querySrv.types;
|
47
42
|
|
48
43
|
var queryHelpModal = $modal({
|
49
44
|
template: './app/panels/query/helpModal.html',
|
@@ -7,16 +7,21 @@
|
|
7
7
|
}
|
8
8
|
.begin-query {
|
9
9
|
position:absolute;
|
10
|
-
left:
|
10
|
+
left:10px;
|
11
11
|
top:5px;
|
12
12
|
}
|
13
13
|
.end-query {
|
14
14
|
position:absolute;
|
15
|
-
right:
|
15
|
+
right:10px;
|
16
16
|
top:5px;
|
17
17
|
}
|
18
|
+
|
19
|
+
.end-query i, .begin-query i {
|
20
|
+
margin: 0px;
|
21
|
+
}
|
22
|
+
|
18
23
|
.panel-query {
|
19
|
-
padding-left:
|
24
|
+
padding-left: 25px !important;
|
20
25
|
height: 31px !important;
|
21
26
|
-webkit-box-sizing: border-box; /* Safari/Chrome, other WebKit */
|
22
27
|
-moz-box-sizing: border-box; /* Firefox, other Gecko */
|
@@ -28,7 +33,7 @@
|
|
28
33
|
}
|
29
34
|
|
30
35
|
.form-search:hover .has-remove {
|
31
|
-
padding-left:
|
36
|
+
padding-left: 40px !important;
|
32
37
|
}
|
33
38
|
.remove-query {
|
34
39
|
opacity: 0;
|
@@ -39,9 +44,6 @@
|
|
39
44
|
.form-search:hover .remove-query {
|
40
45
|
opacity: 1;
|
41
46
|
}
|
42
|
-
.query-panel .pins {
|
43
|
-
text-decoration: underline;
|
44
|
-
}
|
45
47
|
.query-panel .pinned {
|
46
48
|
margin-right: 5px;
|
47
49
|
}
|
@@ -14,7 +14,7 @@ define([
|
|
14
14
|
'angular',
|
15
15
|
'app',
|
16
16
|
'jquery',
|
17
|
-
'
|
17
|
+
'lodash',
|
18
18
|
'kbn',
|
19
19
|
'moment',
|
20
20
|
'./timeSeries',
|
@@ -46,7 +46,7 @@ function (angular, app, $, _, kbn, moment, timeSeries) {
|
|
46
46
|
}
|
47
47
|
],
|
48
48
|
status : "Experimental",
|
49
|
-
description : "Sparklines are tiny, simple, time series charts, shown
|
49
|
+
description : "Sparklines are tiny, simple, time series charts, shown separately. Because "+
|
50
50
|
"sparklines are unclutted by grids, axis markers and colors, they are perfect for spotting"+
|
51
51
|
" change in a series"
|
52
52
|
};
|
@@ -0,0 +1,36 @@
|
|
1
|
+
<div class="row-fluid">
|
2
|
+
<h5>Details</h5>
|
3
|
+
<div class="editor-option">
|
4
|
+
<label class="small">Function</label>
|
5
|
+
<select ng-change="set_refresh(true)" class="input-small" ng-model="panel.mode" ng-options="f for f in ['count','min','mean','max','total']"></select>
|
6
|
+
</div>
|
7
|
+
<div class="editor-option">
|
8
|
+
<label class="small">Field <tip>This field must contain a numeric value</tip></label>
|
9
|
+
<input ng-change="set_refresh(true)" placeholder="Start typing" bs-typeahead="fields.list" type="text" class="input-large" ng-model="panel.field">
|
10
|
+
</div>
|
11
|
+
<div class="editor-option">
|
12
|
+
<label class="small">Unit</label>
|
13
|
+
<input type="text" class="input-large" ng-model="panel.unit">
|
14
|
+
</div>
|
15
|
+
<h5>Formating</h5>
|
16
|
+
<div class="editor-option">
|
17
|
+
<label class="small">Format</label>
|
18
|
+
<select ng-change="set_refresh(true)" class="input-small" ng-model="panel.format" ng-options="f for f in ['number','float','money','bytes']"></select>
|
19
|
+
</div>
|
20
|
+
<div class="editor-option">
|
21
|
+
<label class="small">Font Size</label>
|
22
|
+
<select class="input-mini" ng-model="panel.style['font-size']" ng-options="f for f in ['7pt','8pt','9pt','10pt','12pt','14pt','16pt','18pt','20pt','24pt','28pt','32pt','36pt','42pt','48pt','52pt','60pt','72pt']"></select></span>
|
23
|
+
</div>
|
24
|
+
<div class="editor-option">
|
25
|
+
<label class="small">Display Breakdowns</label>
|
26
|
+
<select class="input-mini" ng-model="panel.display_breakdown" ng-options="f for f in ['yes', 'no']"></select></span>
|
27
|
+
</div>
|
28
|
+
<div class="editor-option">
|
29
|
+
<label class="small">Label column name</label>
|
30
|
+
<input type="text" class="input-large" ng-model="panel.label_name">
|
31
|
+
</div>
|
32
|
+
<div class="editor-option">
|
33
|
+
<label class="small">Value column name</label>
|
34
|
+
<input type="text" class="input-large" ng-model="panel.value_name">
|
35
|
+
</div>
|
36
|
+
</div>
|
@@ -0,0 +1,15 @@
|
|
1
|
+
<div ng-controller="stats" ng-init="init()">
|
2
|
+
<h1 ng-style="panel.style" style="text-align: center; line-height: .6em">{{data.value|formatstats:panel.format}} <small style="font-size: .5em; line-height: 0;">{{panel.unit}}</small></h1>
|
3
|
+
<table ng-show="panel.display_breakdown == 'yes'" cellspacing="0" class="table-hover table table-condensed" style="margin-top: 38px;">
|
4
|
+
<tbody>
|
5
|
+
<tr>
|
6
|
+
<th><a href="" ng-click="set_sort('label')" ng-class="{'icon-chevron-down': panel.sort_field == 'label' && panel.sort_reverse == true, 'icon-chevron-up': panel.sort_field == 'label' && panel.sort_reverse == false}"> {{panel.label_name}} </a></th>
|
7
|
+
<th style="text-align: right;"><a href="" ng-click="set_sort('value')" ng-class="{'icon-chevron-down': panel.sort_field == 'value' && panel.sort_reverse == true, 'icon-chevron-up': panel.sort_field == 'value' && panel.sort_reverse == false}"> {{panel.value_name}} </a></th>
|
8
|
+
</tr>
|
9
|
+
<tr ng-repeat="item in data.rows | orderBy:panel.sort_field:panel.sort_reverse">
|
10
|
+
<td><i class="icon-circle" ng-style="{color:item.color}"></i> {{item.label}}</td>
|
11
|
+
<td style="text-align: right;">{{item.value|formatstats:panel.format}} {{panel.unit}}</td>
|
12
|
+
</tr>
|
13
|
+
</tbody>
|
14
|
+
</table>
|
15
|
+
</div>
|
@@ -0,0 +1,199 @@
|
|
1
|
+
/*
|
2
|
+
|
3
|
+
## Stats Module
|
4
|
+
|
5
|
+
### Parameters
|
6
|
+
* format :: The format of the value returned. (Default: number)
|
7
|
+
* style :: The font size of the main number to be displayed.
|
8
|
+
* mode :: The aggergate value to use for display
|
9
|
+
* spyable :: Dislay the 'eye' icon that show the last elasticsearch query
|
10
|
+
|
11
|
+
*/
|
12
|
+
define([
|
13
|
+
'angular',
|
14
|
+
'app',
|
15
|
+
'lodash',
|
16
|
+
'jquery',
|
17
|
+
'kbn',
|
18
|
+
'numeral'
|
19
|
+
], function (
|
20
|
+
angular,
|
21
|
+
app,
|
22
|
+
_,
|
23
|
+
$,
|
24
|
+
kbn,
|
25
|
+
numeral
|
26
|
+
) {
|
27
|
+
|
28
|
+
'use strict';
|
29
|
+
|
30
|
+
var module = angular.module('kibana.panels.stats', []);
|
31
|
+
app.useModule(module);
|
32
|
+
|
33
|
+
module.controller('stats', function ($scope, querySrv, dashboard, filterSrv) {
|
34
|
+
|
35
|
+
$scope.panelMeta = {
|
36
|
+
modals : [
|
37
|
+
{
|
38
|
+
description: "Inspect",
|
39
|
+
icon: "icon-info-sign",
|
40
|
+
partial: "app/partials/inspector.html",
|
41
|
+
show: $scope.panel.spyable
|
42
|
+
}
|
43
|
+
],
|
44
|
+
editorTabs : [
|
45
|
+
{title:'Queries', src:'app/partials/querySelect.html'}
|
46
|
+
],
|
47
|
+
status: 'Beta',
|
48
|
+
description: 'A statistical panel for displaying aggregations using the Elastic Search statistical facet query.'
|
49
|
+
};
|
50
|
+
|
51
|
+
|
52
|
+
var defaults = {
|
53
|
+
queries : {
|
54
|
+
mode : 'all',
|
55
|
+
ids : []
|
56
|
+
},
|
57
|
+
style : { "font-size": '24pt'},
|
58
|
+
format: 'number',
|
59
|
+
mode: 'count',
|
60
|
+
display_breakdown: 'yes',
|
61
|
+
sort_field: '',
|
62
|
+
sort_reverse: false,
|
63
|
+
label_name: 'Query',
|
64
|
+
value_name: 'Value',
|
65
|
+
spyable : true
|
66
|
+
};
|
67
|
+
|
68
|
+
_.defaults($scope.panel, defaults);
|
69
|
+
|
70
|
+
$scope.init = function () {
|
71
|
+
$scope.ready = false;
|
72
|
+
$scope.$on('refresh', function () {
|
73
|
+
$scope.get_data();
|
74
|
+
});
|
75
|
+
$scope.get_data();
|
76
|
+
};
|
77
|
+
|
78
|
+
$scope.set_sort = function(field) {
|
79
|
+
if($scope.panel.sort_field === field && $scope.panel.sort_reverse === false) {
|
80
|
+
$scope.panel.sort_reverse = true;
|
81
|
+
} else if($scope.panel.sort_field === field && $scope.panel.sort_reverse === true) {
|
82
|
+
$scope.panel.sort_field = '';
|
83
|
+
$scope.panel.sort_reverse = false;
|
84
|
+
} else {
|
85
|
+
$scope.panel.sort_field = field;
|
86
|
+
$scope.panel.sort_reverse = false;
|
87
|
+
}
|
88
|
+
};
|
89
|
+
|
90
|
+
$scope.get_data = function () {
|
91
|
+
if(dashboard.indices.length === 0) {
|
92
|
+
return;
|
93
|
+
}
|
94
|
+
|
95
|
+
$scope.panelMeta.loading = true;
|
96
|
+
|
97
|
+
var request,
|
98
|
+
results,
|
99
|
+
boolQuery,
|
100
|
+
queries;
|
101
|
+
|
102
|
+
request = $scope.ejs.Request().indices(dashboard.indices);
|
103
|
+
|
104
|
+
$scope.panel.queries.ids = querySrv.idsByMode($scope.panel.queries);
|
105
|
+
queries = querySrv.getQueryObjs($scope.panel.queries.ids);
|
106
|
+
|
107
|
+
|
108
|
+
// This could probably be changed to a BoolFilter
|
109
|
+
boolQuery = $scope.ejs.BoolQuery();
|
110
|
+
_.each(queries,function(q) {
|
111
|
+
boolQuery = boolQuery.should(querySrv.toEjsObj(q));
|
112
|
+
});
|
113
|
+
|
114
|
+
request = request
|
115
|
+
.facet($scope.ejs.StatisticalFacet('stats')
|
116
|
+
.field($scope.panel.field)
|
117
|
+
.facetFilter($scope.ejs.QueryFilter(
|
118
|
+
$scope.ejs.FilteredQuery(
|
119
|
+
boolQuery,
|
120
|
+
filterSrv.getBoolFilter(filterSrv.ids)
|
121
|
+
)))).size(0);
|
122
|
+
|
123
|
+
_.each(queries, function (q) {
|
124
|
+
var alias = q.alias || q.query;
|
125
|
+
var query = $scope.ejs.BoolQuery();
|
126
|
+
query.should(querySrv.toEjsObj(q));
|
127
|
+
request.facet($scope.ejs.StatisticalFacet('stats_'+alias)
|
128
|
+
.field($scope.panel.field)
|
129
|
+
.facetFilter($scope.ejs.QueryFilter(
|
130
|
+
$scope.ejs.FilteredQuery(
|
131
|
+
query,
|
132
|
+
filterSrv.getBoolFilter(filterSrv.ids)
|
133
|
+
)
|
134
|
+
))
|
135
|
+
);
|
136
|
+
});
|
137
|
+
|
138
|
+
// Populate the inspector panel
|
139
|
+
$scope.inspector = angular.toJson(JSON.parse(request.toString()),true);
|
140
|
+
|
141
|
+
results = request.doSearch();
|
142
|
+
|
143
|
+
results.then(function(results) {
|
144
|
+
$scope.panelMeta.loading = false;
|
145
|
+
var value = results.facets.stats[$scope.panel.mode];
|
146
|
+
|
147
|
+
var rows = queries.map(function (q) {
|
148
|
+
var alias = q.alias || q.query;
|
149
|
+
var obj = _.clone(q);
|
150
|
+
obj.label = alias;
|
151
|
+
obj.Label = alias.toLowerCase(); //sort field
|
152
|
+
obj.value = results.facets['stats_'+alias][$scope.panel.mode];
|
153
|
+
obj.Value = results.facets['stats_'+alias][$scope.panel.mode]; //sort field
|
154
|
+
return obj;
|
155
|
+
});
|
156
|
+
|
157
|
+
$scope.data = {
|
158
|
+
value: value,
|
159
|
+
rows: rows
|
160
|
+
};
|
161
|
+
|
162
|
+
$scope.$emit('render');
|
163
|
+
});
|
164
|
+
};
|
165
|
+
|
166
|
+
$scope.set_refresh = function (state) {
|
167
|
+
$scope.refresh = state;
|
168
|
+
};
|
169
|
+
|
170
|
+
$scope.close_edit = function() {
|
171
|
+
if($scope.refresh) {
|
172
|
+
$scope.get_data();
|
173
|
+
}
|
174
|
+
$scope.refresh = false;
|
175
|
+
$scope.$emit('render');
|
176
|
+
};
|
177
|
+
|
178
|
+
});
|
179
|
+
|
180
|
+
module.filter('formatstats', function(){
|
181
|
+
return function (value,format) {
|
182
|
+
switch (format) {
|
183
|
+
case 'money':
|
184
|
+
value = numeral(value).format('$0,0.00');
|
185
|
+
break;
|
186
|
+
case 'bytes':
|
187
|
+
value = numeral(value).format('0.00b');
|
188
|
+
break;
|
189
|
+
case 'float':
|
190
|
+
value = numeral(value).format('0.000');
|
191
|
+
break;
|
192
|
+
default:
|
193
|
+
value = numeral(value).format('0,0');
|
194
|
+
}
|
195
|
+
return value;
|
196
|
+
};
|
197
|
+
});
|
198
|
+
|
199
|
+
});
|
@@ -1,49 +1,45 @@
|
|
1
1
|
<div class="row-fluid">
|
2
|
-
<div class="section
|
3
|
-
<h5>Columns</h5>
|
4
|
-
<form class="input-append editor-option">
|
5
|
-
<input bs-typeahead="fields.list" type="text" class="input-small" ng-model='newfield'>
|
6
|
-
<button class="btn" ng-click="toggle_field(newfield);newfield=''"><i class="icon-plus"></i></button>
|
7
|
-
</form><br>
|
8
|
-
<span style="margin-left:3px" ng-repeat="field in $parent.panel.fields" class="label">{{field}} <i class="pointer icon-remove-sign" ng-click="toggle_field(field)"></i></span>
|
9
|
-
</div>
|
10
|
-
<div class="section span6">
|
11
|
-
<h5>Hightlighted Fields</h5>
|
12
|
-
<form class="input-append editor-option">
|
13
|
-
<input bs-typeahead="fields.list" type="text" class="input-small" ng-model='newhighlight' ng-change="set_refresh(true)">
|
14
|
-
<button class="btn" ng-click="toggle_highlight(newhighlight);newhighlight=''"><i class="icon-plus"></i></button>
|
15
|
-
</form><br>
|
16
|
-
<span style="margin-left:3px" ng-repeat="field in $parent.panel.highlight" class="label">{{field}} <i class="pointer icon-remove-sign" ng-click="toggle_highlight(field);set_refresh(true)" ></i></span>
|
17
|
-
</div>
|
18
|
-
</div>
|
19
|
-
|
20
|
-
<div class="editor-row">
|
21
|
-
<div class="section">
|
2
|
+
<div class="span6 section">
|
22
3
|
<h5>Options</h5>
|
23
4
|
<div class="editor-option">
|
24
|
-
<
|
5
|
+
<label class="small">Header</label><input type="checkbox" ng-model="panel.header" ng-checked="panel.header">
|
25
6
|
</div>
|
26
7
|
<div class="editor-option">
|
27
|
-
<
|
8
|
+
<label class="small">Sorting</label><input type="checkbox" ng-model="panel.sortable" ng-checked="panel.sortable">
|
28
9
|
</div>
|
29
10
|
<div class="editor-option" style="white-space:nowrap" ng-show='panel.sortable'>
|
30
|
-
<
|
11
|
+
<label class="small">Sort</label>
|
31
12
|
<input class="input-small" bs-typeahead="fields.list" ng-model="panel.sort[0]" type="text"></input>
|
32
13
|
<i ng-click="set_sort(panel.sort[0])" ng-class="{'icon-chevron-up': panel.sort[1] == 'asc','icon-chevron-down': panel.sort[1] == 'desc'}"></i>
|
33
14
|
</div>
|
34
|
-
<div class="editor-option"><
|
15
|
+
<div class="editor-option"><label class="small">Font Size</label>
|
35
16
|
<select class="input-small" ng-model="panel.style['font-size']" ng-options="f for f in ['7pt','8pt','9pt','10pt','12pt','14pt','16pt','18pt','20pt','24pt','28pt','32pt','36pt','42pt','48pt','52pt','60pt','72pt']"></select></span>
|
36
17
|
</div>
|
37
18
|
<div class="editor-option">
|
38
|
-
<
|
19
|
+
<label class="small">Trim Factor <tip>Trim fields to this long divided by # of rows. Requires data refresh.</tip></label>
|
39
20
|
<input type="number" class="input-small" ng-model="panel.trimFactor" ng-change="set_refresh(true)">
|
40
21
|
</div>
|
22
|
+
<br>
|
41
23
|
<div class="editor-option">
|
42
|
-
<
|
24
|
+
<label class="small">Local Time <tip>Adjust time field to browser's local time</tip></label><input type="checkbox" ng-change="set_refresh(true)" ng-model="panel.localTime" ng-checked="panel.localTime">
|
43
25
|
</div>
|
44
26
|
<div class="editor-option" ng-show="panel.localTime">
|
45
|
-
<
|
27
|
+
<label class="small">Time Field</label>
|
46
28
|
<input type="text" class="input-small" ng-model="panel.timeField" ng-change="set_refresh(true)" bs-typeahead="fields.list">
|
47
29
|
</div>
|
48
30
|
</div>
|
31
|
+
<div class="section span6">
|
32
|
+
<h5>Columns</h5>
|
33
|
+
<form class="input-append editor-option">
|
34
|
+
<input bs-typeahead="fields.list" type="text" class="input-small" ng-model='newfield'>
|
35
|
+
<button class="btn" ng-click="panel.fields = _.toggleInOut(panel.fields,newfield);newfield=''"><i class="icon-plus"></i></button>
|
36
|
+
</form><br>
|
37
|
+
<span style="margin-left:3px" ng-repeat="field in panel.fields" class="label">{{field}} <i class="pointer icon-remove-sign" ng-click="panel.fields = _.toggleInOut(panel.fields,field)"></i></span>
|
38
|
+
<h5>Hightlighted Fields</h5>
|
39
|
+
<form class="input-append editor-option">
|
40
|
+
<input bs-typeahead="fields.list" type="text" class="input-small" ng-model='newhighlight' ng-change="set_refresh(true)">
|
41
|
+
<button class="btn" ng-click="panel.highlight = _.toggleInOut(panel.highlight,newhighlight);newhighlight=''"><i class="icon-plus"></i></button>
|
42
|
+
</form><br>
|
43
|
+
<span style="margin-left:3px" ng-repeat="field in panel.highlight" class="label">{{field}} <i class="pointer icon-remove-sign" ng-click="panel.highlight = _.toggleInOut(panel.highlight,field);set_refresh(true)" ></i></span>
|
44
|
+
</div>
|
49
45
|
</div>
|