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
@@ -14,12 +14,14 @@
|
|
14
14
|
</span>
|
15
15
|
<table style="width:100%;table-layout:fixed" class='table table-striped table-unpadded'>
|
16
16
|
<thead>
|
17
|
+
<th style="width:10px"></th>
|
17
18
|
<th style="width:260px">{{micropanel.field}}</th>
|
18
19
|
<th style="width:40px">Action</th>
|
19
20
|
<th style="width:100px;text-align:right">Count / {{micropanel.count}} events</th>
|
20
21
|
</thead>
|
21
22
|
<tbody>
|
22
23
|
<tr ng-repeat='field in micropanel.values'>
|
24
|
+
<td>{{$index+1}}.</td>
|
23
25
|
<td style="word-wrap:break-word">{{{true: "__blank__", false:field[0] }[field[0] == '' || field[0] == undefined]|tableTruncate:panel.trimFactor:3}}</td>
|
24
26
|
<td>
|
25
27
|
<i class="pointer icon-search" ng-click="build_search(micropanel.field,field[0]);dismiss();"></i>
|
@@ -38,7 +40,7 @@
|
|
38
40
|
</tbody>
|
39
41
|
</table>
|
40
42
|
<div class="progress nomargin" ng-show="micropanel.grouped">
|
41
|
-
<div ng-repeat='field in micropanel.values' bs-tooltip="
|
43
|
+
<div ng-repeat='field in micropanel.values' bs-tooltip="$index+1+'. ('+percent(field[1],data.length)+')'" class="bar {{micropanelColor($index)}}" ng-style="{width: percent(field[1],data.length)};"></div>
|
42
44
|
</div>
|
43
45
|
<div>
|
44
46
|
<span ng-repeat="field in micropanel.related|orderBy:'count':true|limitTo:micropanel.limit track by $index"><a ng-click="toggle_field(field.name)" bs-tooltip="'Toggle {{field.name}} column'">{{field.name}}</a> ({{Math.round((field.count / micropanel.count) * 100)}}%), </span>
|
@@ -13,7 +13,7 @@
|
|
13
13
|
define([
|
14
14
|
'angular',
|
15
15
|
'app',
|
16
|
-
'
|
16
|
+
'lodash',
|
17
17
|
'kbn',
|
18
18
|
'moment',
|
19
19
|
],
|
@@ -185,6 +185,8 @@ function (angular, app, _, kbn, moment) {
|
|
185
185
|
});
|
186
186
|
};
|
187
187
|
|
188
|
+
|
189
|
+
|
188
190
|
$scope.toggle_micropanel = function(field,groups) {
|
189
191
|
var docs = _.map($scope.data,function(_d){return _d.kibana._source;});
|
190
192
|
var topFieldValues = kbn.top_field_values(docs,field,10,groups);
|
@@ -406,6 +408,10 @@ function (angular, app, _, kbn, moment) {
|
|
406
408
|
if($scope.refresh) {
|
407
409
|
$scope.get_data();
|
408
410
|
}
|
411
|
+
$scope.columns = [];
|
412
|
+
_.each($scope.panel.fields,function(field) {
|
413
|
+
$scope.columns[field] = true;
|
414
|
+
});
|
409
415
|
$scope.refresh = false;
|
410
416
|
};
|
411
417
|
|
@@ -1,20 +1,33 @@
|
|
1
1
|
<div class="editor-row">
|
2
2
|
<div class="section">
|
3
3
|
<h5>Parameters</h5>
|
4
|
+
<div class="editor-option">
|
5
|
+
<label class="small">Terms mode</label>
|
6
|
+
<select class="input-medium" ng-model="panel.tmode" ng-options="f for f in ['terms','terms_stats']" ng-change="set_refresh(true)"></select>
|
7
|
+
</div>
|
8
|
+
<div class="editor-option" ng-show="panel.tmode == 'terms_stats'">
|
9
|
+
<label class="small">Stats type</label>
|
10
|
+
<select class="input-medium" ng-model="panel.tstat" ng-options="f for f in ['count', 'total_count', 'min', 'max', 'total', 'mean']"></select>
|
11
|
+
</div>
|
4
12
|
<div class="editor-option">
|
5
13
|
<label class="small">Field</label>
|
6
14
|
<input type="text" class="input-small" bs-typeahead="fields.list" ng-model="panel.field" ng-change="set_refresh(true)">
|
7
15
|
</div>
|
16
|
+
<div class="editor-option" ng-show="panel.tmode == 'terms_stats'">
|
17
|
+
<label class="small">Value field</label>
|
18
|
+
<input type="text" class="input-small" bs-typeahead="fields.list" ng-model="panel.valuefield" ng-change="set_refresh(true)">
|
19
|
+
</div>
|
8
20
|
<div class="editor-option">
|
9
21
|
<label class="small">Length</label>
|
10
22
|
<input class="input-small" type="number" ng-model="panel.size" ng-change="set_refresh(true)">
|
11
23
|
</div>
|
12
24
|
<div class="editor-option">
|
13
25
|
<label class="small">Order</label>
|
14
|
-
<select class="input-medium" ng-model="panel.order" ng-options="f for f in ['count','term','reverse_count','reverse_term']" ng-change="set_refresh(true)"></select
|
26
|
+
<select class="input-medium" ng-model="panel.order" ng-options="f for f in ['count','term','reverse_count','reverse_term']" ng-change="set_refresh(true)" ng-show="panel.tmode == 'terms'"></select>
|
27
|
+
<select class="input-medium" ng-model="panel.order" ng-options="f for f in ['term', 'reverse_term', 'count', 'reverse_count', 'total', 'reverse_total', 'min', 'reverse_min', 'max', 'reverse_max', 'mean', 'reverse_mean']" ng-change="set_refresh(true)" ng-show="panel.tmode == 'terms_stats'"></select>
|
15
28
|
</div>
|
16
|
-
<div class="editor-option">
|
17
|
-
<label class="small">Exclude Terms(s) (comma
|
29
|
+
<div class="editor-option" ng-show="panel.tmode == 'terms'">
|
30
|
+
<label class="small">Exclude Terms(s) (comma separated)</label>
|
18
31
|
<input array-join type="text" ng-model='panel.exclude'></input>
|
19
32
|
</div>
|
20
33
|
</div>
|
@@ -2,6 +2,7 @@
|
|
2
2
|
<style>
|
3
3
|
.pieLabel { pointer-events: none }
|
4
4
|
</style>
|
5
|
+
|
5
6
|
<!-- START Pie or bar chart -->
|
6
7
|
<div ng-show="panel.counter_pos == 'above' && (panel.chart == 'bar' || panel.chart == 'pie')" id='{{$id}}-legend'>
|
7
8
|
<!-- vertical legend above -->
|
@@ -12,9 +13,13 @@
|
|
12
13
|
</table>
|
13
14
|
|
14
15
|
<!-- horizontal legend above -->
|
15
|
-
<
|
16
|
+
<span class="small" ng-show="panel.arrangement == 'horizontal'" ng-repeat="term in legend" style="float:left;padding-left: 10px;">
|
16
17
|
<span><i class="icon-circle" ng-style="{color:term.color}"></i> {{term.label}} ({{term.data[0][1]}}) </span>
|
17
|
-
</
|
18
|
+
</span>
|
19
|
+
|
20
|
+
<span class="small pull-left" ng-show="panel.tmode == 'terms_stats'">
|
21
|
+
  | {{ panel.tstat }} of <strong>{{ panel.valuefield }}</strong>
|
22
|
+
</span>
|
18
23
|
|
19
24
|
</div>
|
20
25
|
|
@@ -32,16 +37,20 @@
|
|
32
37
|
</table>
|
33
38
|
|
34
39
|
<!-- horizontal legend below -->
|
35
|
-
<
|
40
|
+
<span class="small" ng-show="panel.arrangement == 'horizontal'" ng-repeat="term in legend" style="float:left;padding-left: 10px;">
|
36
41
|
<span><i class="icon-circle" ng-style="{color:term.color}"></i></span> {{term.label}} ({{term.data[0][1]}}) </span>
|
37
|
-
</
|
42
|
+
</span>
|
43
|
+
|
44
|
+
<span class="small pull-left" ng-show="panel.tmode == 'terms_stats'">
|
45
|
+
  | {{ panel.tstat }} of <strong>{{ panel.valuefield }}</strong>
|
46
|
+
</span>
|
38
47
|
|
39
48
|
</div>
|
40
49
|
<!-- END Pie or Bar chart -->
|
41
50
|
|
42
51
|
<table ng-style="panel.style" class="table table-striped table-condensed" ng-show="panel.chart == 'table'">
|
43
52
|
<thead>
|
44
|
-
<th>Term</th> <th>Count</th> <th>Action</th>
|
53
|
+
<th>Term</th> <th>{{ panel.tmode == 'terms_stats' ? panel.tstat : 'Count' }}</th> <th>Action</th>
|
45
54
|
</thead>
|
46
55
|
<tr ng-repeat="term in data" ng-show="showMeta(term)">
|
47
56
|
<td>{{term.label}}</td>
|
@@ -12,7 +12,7 @@
|
|
12
12
|
define([
|
13
13
|
'angular',
|
14
14
|
'app',
|
15
|
-
'
|
15
|
+
'lodash',
|
16
16
|
'jquery',
|
17
17
|
'kbn'
|
18
18
|
],
|
@@ -67,7 +67,9 @@ function (angular, app, _, $, kbn) {
|
|
67
67
|
*/
|
68
68
|
size : 10,
|
69
69
|
/** @scratch /panels/terms/5
|
70
|
-
* order:: count, term, reverse_count or reverse_term
|
70
|
+
* order:: In terms mode: count, term, reverse_count or reverse_term,
|
71
|
+
* in terms_stats mode: term, reverse_term, count, reverse_count,
|
72
|
+
* total, reverse_total, min, reverse_min, max, reverse_max, mean or reverse_mean
|
71
73
|
*/
|
72
74
|
order : 'count',
|
73
75
|
style : { "font-size": '10pt'},
|
@@ -109,7 +111,20 @@ function (angular, app, _, $, kbn) {
|
|
109
111
|
mode : 'all',
|
110
112
|
ids : []
|
111
113
|
},
|
114
|
+
/** @scratch /panels/terms/5
|
115
|
+
* tmode:: Facet mode: terms or terms_stats
|
116
|
+
*/
|
117
|
+
tmode : 'terms',
|
118
|
+
/** @scratch /panels/terms/5
|
119
|
+
* tstat:: Terms_stats facet stats field
|
120
|
+
*/
|
121
|
+
tstat : 'total',
|
122
|
+
/** @scratch /panels/terms/5
|
123
|
+
* valuefield:: Terms_stats facet value field
|
124
|
+
*/
|
125
|
+
valuefield : ''
|
112
126
|
};
|
127
|
+
|
113
128
|
_.defaults($scope.panel,_d);
|
114
129
|
|
115
130
|
$scope.init = function () {
|
@@ -149,8 +164,9 @@ function (angular, app, _, $, kbn) {
|
|
149
164
|
});
|
150
165
|
|
151
166
|
// Terms mode
|
152
|
-
|
153
|
-
|
167
|
+
if($scope.panel.tmode === 'terms') {
|
168
|
+
request = request
|
169
|
+
.facet($scope.ejs.TermsFacet('terms')
|
154
170
|
.field($scope.field)
|
155
171
|
.size($scope.panel.size)
|
156
172
|
.order($scope.panel.order)
|
@@ -159,7 +175,21 @@ function (angular, app, _, $, kbn) {
|
|
159
175
|
$scope.ejs.FilteredQuery(
|
160
176
|
boolQuery,
|
161
177
|
filterSrv.getBoolFilter(filterSrv.ids)
|
162
|
-
|
178
|
+
)))).size(0);
|
179
|
+
}
|
180
|
+
if($scope.panel.tmode === 'terms_stats') {
|
181
|
+
request = request
|
182
|
+
.facet($scope.ejs.TermStatsFacet('terms')
|
183
|
+
.valueField($scope.panel.valuefield)
|
184
|
+
.keyField($scope.field)
|
185
|
+
.size($scope.panel.size)
|
186
|
+
.order($scope.panel.order)
|
187
|
+
.facetFilter($scope.ejs.QueryFilter(
|
188
|
+
$scope.ejs.FilteredQuery(
|
189
|
+
boolQuery,
|
190
|
+
filterSrv.getBoolFilter(filterSrv.ids)
|
191
|
+
)))).size(0);
|
192
|
+
}
|
163
193
|
|
164
194
|
// Populate the inspector panel
|
165
195
|
$scope.inspector = angular.toJson(JSON.parse(request.toString()),true);
|
@@ -168,20 +198,12 @@ function (angular, app, _, $, kbn) {
|
|
168
198
|
|
169
199
|
// Populate scope when we have results
|
170
200
|
results.then(function(results) {
|
171
|
-
var k = 0;
|
172
201
|
$scope.panelMeta.loading = false;
|
173
|
-
$scope.
|
174
|
-
|
175
|
-
|
176
|
-
var slice = { label : v.term, data : [[k,v.count]], actions: true};
|
177
|
-
$scope.data.push(slice);
|
178
|
-
k = k + 1;
|
179
|
-
});
|
202
|
+
if($scope.panel.tmode === 'terms') {
|
203
|
+
$scope.hits = results.hits.total;
|
204
|
+
}
|
180
205
|
|
181
|
-
$scope.
|
182
|
-
data:[[k,results.facets.terms.missing]],meta:"missing",color:'#aaa',opacity:0});
|
183
|
-
$scope.data.push({label:'Other values',
|
184
|
-
data:[[k+1,results.facets.terms.other]],meta:"other",color:'#444'});
|
206
|
+
$scope.results = results;
|
185
207
|
|
186
208
|
$scope.$emit('render');
|
187
209
|
});
|
@@ -241,10 +263,36 @@ function (angular, app, _, $, kbn) {
|
|
241
263
|
render_panel();
|
242
264
|
});
|
243
265
|
|
266
|
+
function build_results() {
|
267
|
+
var k = 0;
|
268
|
+
scope.data = [];
|
269
|
+
_.each(scope.results.facets.terms.terms, function(v) {
|
270
|
+
var slice;
|
271
|
+
if(scope.panel.tmode === 'terms') {
|
272
|
+
slice = { label : v.term, data : [[k,v.count]], actions: true};
|
273
|
+
}
|
274
|
+
if(scope.panel.tmode === 'terms_stats') {
|
275
|
+
slice = { label : v.term, data : [[k,v[scope.panel.tstat]]], actions: true};
|
276
|
+
}
|
277
|
+
scope.data.push(slice);
|
278
|
+
k = k + 1;
|
279
|
+
});
|
280
|
+
|
281
|
+
scope.data.push({label:'Missing field',
|
282
|
+
data:[[k,scope.results.facets.terms.missing]],meta:"missing",color:'#aaa',opacity:0});
|
283
|
+
|
284
|
+
if(scope.panel.tmode === 'terms') {
|
285
|
+
scope.data.push({label:'Other values',
|
286
|
+
data:[[k+1,scope.results.facets.terms.other]],meta:"other",color:'#444'});
|
287
|
+
}
|
288
|
+
}
|
289
|
+
|
244
290
|
// Function for rendering panel
|
245
291
|
function render_panel() {
|
246
292
|
var plot, chartData;
|
247
293
|
|
294
|
+
build_results();
|
295
|
+
|
248
296
|
// IE doesn't work without this
|
249
297
|
elem.css({height:scope.panel.height||scope.row.height});
|
250
298
|
|
@@ -357,4 +405,4 @@ function (angular, app, _, $, kbn) {
|
|
357
405
|
};
|
358
406
|
});
|
359
407
|
|
360
|
-
});
|
408
|
+
});
|
@@ -1,14 +1,16 @@
|
|
1
|
-
<div class="row
|
2
|
-
<div class="
|
3
|
-
<
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
<
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
<
|
12
|
-
|
1
|
+
<div class="editor-row">
|
2
|
+
<div class="section">
|
3
|
+
<div class="editor-option">
|
4
|
+
<label class="small">Relative time options <small>comma separated</small></label>
|
5
|
+
<input type="text" array-join class="input-large" ng-model="panel.time_options">
|
6
|
+
</div>
|
7
|
+
<div class="editor-option">
|
8
|
+
<label class="small">Auto-refresh options <small>comma separated</small></label>
|
9
|
+
<input type="text" array-join class="input-large" ng-model="panel.refresh_intervals">
|
10
|
+
</div>
|
11
|
+
<div class="editor-option">
|
12
|
+
<label class="small">Time Field</label>
|
13
|
+
<input type="text" class="input-small" ng-model="panel.timefield">
|
14
|
+
</div>
|
13
15
|
</div>
|
14
16
|
</div>
|
@@ -3,11 +3,6 @@
|
|
3
3
|
.timepicker-timestring {
|
4
4
|
font-weight: normal;
|
5
5
|
}
|
6
|
-
|
7
|
-
.timepicker-dropdown {
|
8
|
-
margin: 0px !important;
|
9
|
-
border: 0px !important;
|
10
|
-
}
|
11
6
|
</style>
|
12
7
|
<!-- This is a complete hack. The form actually exists in the modal, but due to transclusion
|
13
8
|
$scope.input isn't available on the controller unless the form element is in this file -->
|
@@ -37,7 +32,7 @@
|
|
37
32
|
|
38
33
|
<!-- Auto refresh submenu -->
|
39
34
|
<li class="dropdown-submenu">
|
40
|
-
<a
|
35
|
+
<a>Auto-Refresh</a>
|
41
36
|
<ul class="dropdown-menu">
|
42
37
|
<li><a ng-click="dashboard.set_interval(false)">Off</a></li>
|
43
38
|
<li ng-repeat="interval in panel.refresh_intervals track by $index"><a ng-click="dashboard.set_interval(interval)">Every {{interval}}</a></li>
|
@@ -47,8 +42,8 @@
|
|
47
42
|
</ul>
|
48
43
|
|
49
44
|
</li>
|
50
|
-
<li
|
51
|
-
<a
|
45
|
+
<li>
|
46
|
+
<a ng-click="dashboard.refresh()"><i class="icon-refresh"></i></a>
|
52
47
|
</li>
|
53
48
|
</ul>
|
54
49
|
|
@@ -14,16 +14,16 @@
|
|
14
14
|
|
15
15
|
|
16
16
|
<ul class="dropdown-menu" style="padding:10px">
|
17
|
-
<li ng-if='dashboard.current.loader.load_elasticsearch'>
|
17
|
+
<li ng-if='dashboard.current.loader.load_elasticsearch != false'>
|
18
18
|
<form class="nomargin">
|
19
19
|
<input type="text" ng-model="elasticsearch.query" ng-change="elasticsearch_dblist('title:'+elasticsearch.query+'*')" placeholder="Type to filter"/>
|
20
20
|
</form>
|
21
21
|
<h6 ng-hide="elasticsearch.dashboards.length">No dashboards matching your query found</h6>
|
22
22
|
<table class="table table-condensed table-striped">
|
23
23
|
<tr bindonce ng-repeat="row in elasticsearch.dashboards | orderBy:['_id']">
|
24
|
-
<td><a
|
24
|
+
<td><a confirm-click="elasticsearch_delete(row._id)" confirmation="Are you sure you want to delete the {{row._id}} dashboard"><i class="icon-remove"></i></a></td>
|
25
25
|
<td><a href="#/dashboard/elasticsearch/{{row._id}}" bo-text="row._id"></a></td>
|
26
|
-
<td><a><i class="icon-share" ng-click="share = dashboard.share_link(row._id,'elasticsearch',row._id)" bs-modal="'app/
|
26
|
+
<td><a><i class="icon-share" ng-click="share = dashboard.share_link(row._id,'elasticsearch',row._id)" bs-modal="'app/partials/dashLoaderShare.html'"></i></a></td>
|
27
27
|
</tr>
|
28
28
|
</table>
|
29
29
|
</li>
|
@@ -66,24 +66,24 @@
|
|
66
66
|
|
67
67
|
<ul class="dropdown-menu" style="padding:10px">
|
68
68
|
|
69
|
-
<li ng-show="dashboard.current.loader.save_elasticsearch">
|
69
|
+
<li ng-show="dashboard.current.loader.save_elasticsearch != false">
|
70
70
|
<form class="input-prepend nomargin">
|
71
|
-
<button
|
71
|
+
<button class="btn" ng-click="elasticsearch_save('dashboard')"><i class="icon-save"></i></button>
|
72
72
|
<input class='input-medium' ng-model="dashboard.current.title" type="text" ng-model="elasticsearch.title"/>
|
73
73
|
</form>
|
74
74
|
</li>
|
75
75
|
|
76
|
-
<li class="dropdown-submenu noarrow" ng-show="dashboard.current.loader.save_local || dashboard.current.loader.save_gist || dashboard.current.loader.save_default">
|
76
|
+
<li class="dropdown-submenu noarrow" ng-show="dashboard.current.loader.save_local != false || dashboard.current.loader.save_gist != false || dashboard.current.loader.save_default != false">
|
77
77
|
<a tabindex="-1" class="small" style="padding:0"><i class="icon-caret-left"></i> Advanced</a>
|
78
78
|
<ul class="dropdown-menu">
|
79
79
|
|
80
|
-
<li ng-show="dashboard.current.loader.save_default">
|
80
|
+
<li ng-show="dashboard.current.loader.save_default != false">
|
81
81
|
<a class="link" ng-click="set_default()">Save as Home</a>
|
82
82
|
</li>
|
83
|
-
<li ng-show="dashboard.current.loader.save_default">
|
83
|
+
<li ng-show="dashboard.current.loader.save_default != false">
|
84
84
|
<a class="link" ng-click="purge_default()">Reset Home</a>
|
85
85
|
</li>
|
86
|
-
<li ng-show="dashboard.current.loader.save_local">
|
86
|
+
<li ng-show="dashboard.current.loader.save_local != false">
|
87
87
|
<a class="link" ng-click="dashboard.to_file()">Export schema</a>
|
88
88
|
</li>
|
89
89
|
|
@@ -103,5 +103,5 @@
|
|
103
103
|
</li>
|
104
104
|
<li ng-show="showDropdown('share')"><a bs-tooltip="'Share'" data-placement="bottom" ng-click="elasticsearch_save('temp',dashboard.current.loader.save_temp_ttl)" bs-modal="'app/partials/dashLoaderShare.html'"><i class='icon-share'></i></a></li>
|
105
105
|
|
106
|
-
<li ng-show="dashboard.current.editable" bs-tooltip="'Configure dashboard'" data-placement="bottom"><a
|
106
|
+
<li ng-show="dashboard.current.editable" bs-tooltip="'Configure dashboard'" data-placement="bottom"><a class="link" config-modal="app/partials/dasheditor.html" kbn-model="dashboard"><i class='icon-cog'></i></a></li>
|
107
107
|
|
@@ -1,87 +1,78 @@
|
|
1
1
|
<!-- is there a better way to repeat without actually affecting the page? -->
|
2
2
|
<nil ng-repeat="pulldown in dashboard.current.pulldowns" ng-controller="PulldownCtrl" ng-show="pulldown.enable">
|
3
|
+
<div class="top-row-close pointer pull-left" ng-class="pulldownTabStyle($index)" ng-click="toggle_pulldown(pulldown);dismiss();" bs-tooltip="'Toggle '+pulldown.type" data-placement="bottom">
|
4
|
+
<span class="small">{{pulldown.type}}</span>
|
5
|
+
<i class="small" ng-class="{'icon-caret-left':pulldown.collapse,'icon-caret-right':!pulldown.collapse}"></i>
|
6
|
+
<i class="small icon-star" ng-show="row.notice && pulldown.collapse"></i>
|
7
|
+
</div>
|
8
|
+
<div class="clearfix bgNav" ng-hide="pulldown.collapse"></div>
|
3
9
|
<div class="top-row-open" ng-hide="pulldown.collapse">
|
4
10
|
<kibana-simple-panel type="pulldown.type" ng-cloak></kibana-simple-panel>
|
5
11
|
</div>
|
6
|
-
<div class="top-row-close pointer" ng-click="toggle_pulldown(pulldown);dismiss();" bs-tooltip="'Toggle '+pulldown.type" data-placement="bottom">
|
7
|
-
<span class="small row-text">{{pulldown.type}}</span>
|
8
|
-
<i class="small" ng-class="{'icon-caret-left':pulldown.collapse,'icon-caret-up':!pulldown.collapse}"></i>
|
9
|
-
<i class="small icon-star text-warning" ng-show="row.notice && pulldown.collapse"></i>
|
10
|
-
</div>
|
11
12
|
</nil>
|
12
|
-
|
13
|
+
<div class="clearfix bgNav" ></div>
|
13
14
|
<div class="container-fluid main">
|
14
|
-
<div
|
15
|
-
<div class="
|
15
|
+
<div>
|
16
|
+
<div class="kibana-container container">
|
16
17
|
<!-- Rows -->
|
17
|
-
<div class="
|
18
|
+
<div class="kibana-row" ng-controller="RowCtrl" ng-repeat="(row_name, row) in dashboard.current.rows" ng-style="row_style(row)">
|
18
19
|
<div class="row-control">
|
19
|
-
<div class="
|
20
|
+
<div class="" style="padding:0px;margin:0px;position:relative;">
|
20
21
|
|
21
|
-
<div class="row-close
|
22
|
-
<span class="row-button"
|
22
|
+
<div class="row-close" ng-show="row.collapse" data-placement="bottom" >
|
23
|
+
<span class="row-button bgWarning" config-modal="app/partials/roweditor.html" kbn-model="row" class="pointer">
|
23
24
|
<i bs-tooltip="'Configure row'" data-placement="right" ng-show="row.editable" class="icon-cog pointer"></i>
|
24
25
|
</span>
|
25
|
-
<span class="row-button" ng-click="toggle_row(row)" ng-show="row.collapsable">
|
26
|
-
<i bs-tooltip="'Expand row'" data-placement="right" ng-show="row.
|
26
|
+
<span class="row-button bgPrimary" ng-click="toggle_row(row)" ng-show="row.collapsable">
|
27
|
+
<i bs-tooltip="'Expand row'" data-placement="right" ng-show="row.collapsable" class="icon-caret-left pointer" ></i>
|
27
28
|
</span>
|
28
29
|
<span class="row-button row-text" ng-click="toggle_row(row)" ng-class="{'pointer':row.collapsable}">{{row.title || 'Row '+$index}}</span>
|
29
30
|
</div>
|
30
31
|
|
31
32
|
<div style="text-align:center" class="row-open" ng-show="!row.collapse">
|
32
|
-
<
|
33
|
-
<i bs-tooltip="'
|
33
|
+
<div ng-show="row.collapsable" class='row-tab bgPrimary' ng-click="toggle_row(row)">
|
34
|
+
<i bs-tooltip="'Collapse row'" data-placement="right" class="icon-caret-right" ></i>
|
34
35
|
<br>
|
35
|
-
</
|
36
|
-
<
|
36
|
+
</div>
|
37
|
+
<div config-modal="app/partials/roweditor.html" kbn-model="row" class='row-tab bgWarning' ng-show="row.editable">
|
37
38
|
<i bs-tooltip="'Configure row'" data-placement="right" class="icon-cog pointer"></i>
|
38
39
|
<br>
|
39
|
-
</
|
40
|
-
<
|
41
|
-
<i bs-tooltip="'
|
42
|
-
<br>
|
43
|
-
</span>
|
44
|
-
<span ng-show="rowSpan(row) > 12">
|
45
|
-
<i bs-tooltip="'Total span > 12. This row may format poorly'" data-placement="right" class="icon-warning-sign text-warning"></i>
|
40
|
+
</div>
|
41
|
+
<div class="bgSuccess row-tab" ng-click="editor.index = 2" config-modal="app/partials/roweditor.html" kbn-model="row" ng-show="row.editable">
|
42
|
+
<i class="icon-plus-sign" bs-tooltip="'Add Panel'" data-placement="right"></i>
|
46
43
|
<br>
|
47
|
-
</
|
44
|
+
</div>
|
45
|
+
|
48
46
|
</div>
|
49
47
|
|
50
48
|
</div>
|
51
|
-
<div
|
49
|
+
<div style="padding-top:0px" ng-if="!row.collapse">
|
52
50
|
|
53
51
|
<!-- Panels -->
|
54
|
-
<div ng-repeat="(name, panel) in row.panels|filter:isPanel" ng-hide="panel.
|
55
|
-
<!-- Error Panel -->
|
56
|
-
<div class="row-fluid">
|
57
|
-
<div class="span12 alert-error panel-error" ng-hide="!panel.error">
|
58
|
-
<a class="close" ng-click="panel.error=false">×</a>
|
59
|
-
<i class="icon-exclamation-sign"></i> <strong>Oops!</strong> {{panel.error}}
|
60
|
-
</div>
|
61
|
-
</div>
|
52
|
+
<div ng-repeat="(name, panel) in row.panels|filter:isPanel" ng-hide="panel.hide" class="panel nospace" ng-style="{'width':!panel.span?'100%':(panel.span/1.2)*10+'%'}" data-drop="true" ng-model="row.panels" data-jqyoui-options jqyoui-droppable="{index:$index,mutate:false,onDrop:'panelMoveDrop',onOver:'panelMoveOver(true)',onOut:'panelMoveOut'}" ng-class="{'dragInProgress':dashboard.panelDragging}">
|
62
53
|
|
63
54
|
<!-- Content Panel -->
|
64
|
-
<div
|
55
|
+
<div style="position:relative">
|
65
56
|
<kibana-panel type="panel.type" ng-cloak></kibana-panel>
|
66
57
|
</div>
|
67
58
|
</div>
|
68
59
|
|
69
|
-
<div ng-hide="(12-rowSpan(row)) < 1 || !dashboard.current.panel_hints" class="panel span{{(12-rowSpan(row))}}" ng-class="{'dragInProgress':dashboard.panelDragging}" ng-style="{height:row.height}" data-drop="true" ng-model="row.panels" data-jqyoui-options jqyoui-droppable="{index:row.panels.length,mutate:false,onDrop:'panelMoveDrop',onOver:'panelMoveOver',onOut:'panelMoveOut'}">
|
70
|
-
|
71
|
-
<span bs-modal="'app/partials/roweditor.html'" ng-show="row.editable && !dashboard.panelDragging">
|
72
|
-
<i ng-hide="rowSpan(row) == 0" class="pointer icon-plus-sign" ng-click="editor.index = 2" bs-tooltip="'Add a panel to this row'" data-placement="right"></i>
|
73
|
-
<span ng-click="editor.index = 2" style="margin-top: 8px; margin-left: 3px" ng-show="rowSpan(row) == 0" class="btn btn-mini">Add panel to empty row</btn>
|
74
|
-
</span>
|
75
60
|
|
61
|
+
<div ng-show="dashboard.panelDragging" class="panel" style="margin:5px;width:30%;background:rgba(100,100,100,0.50)" ng-class="{'dragInProgress':dashboard.panelDragging}" ng-style="{height:row.height}" data-drop="true" ng-model="row.panels" data-jqyoui-options jqyoui-droppable="{index:row.panels.length,mutate:false,onDrop:'panelMoveDrop',onOver:'panelMoveOver',onOut:'panelMoveOut'}">
|
76
62
|
</div>
|
77
63
|
|
64
|
+
<span config-modal="app/partials/roweditor.html" kbn-model="row" ng-show="row.editable && !dashboard.panelDragging">
|
65
|
+
<span ng-click="editor.index = 2" style="margin-top: 3px; margin-left: 5px" ng-show="row.panels.length==0" class="btn btn-mini">Add panel to empty row</span>
|
66
|
+
</span>
|
67
|
+
|
68
|
+
<div class="clearfix"></div>
|
78
69
|
</div>
|
79
70
|
</div>
|
80
71
|
</div>
|
81
72
|
|
82
73
|
<div class="row-fluid" ng-show='dashboard.current.editable'>
|
83
74
|
<div class="span12" style="text-align:right;">
|
84
|
-
<span
|
75
|
+
<span class="pointer btn btn-mini row-add-button" config-modal="app/partials/dasheditor.html" kbn-model="dashboard">
|
85
76
|
<span ng-click="editor.index = 2"><i class="icon-plus-sign"></i> ADD A ROW</span>
|
86
77
|
</span>
|
87
78
|
</div>
|
@@ -90,4 +81,4 @@
|
|
90
81
|
|
91
82
|
</div>
|
92
83
|
</div>
|
93
|
-
</div>
|
84
|
+
</div>
|