kibana-sinatra 0.0.6 → 0.0.7

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.
Files changed (54) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +28 -3
  3. data/lib/kibana/assets/app/app.js +16 -4
  4. data/lib/kibana/assets/app/components/require.config.js +2 -1
  5. data/lib/kibana/assets/app/components/settings.js +4 -3
  6. data/lib/kibana/assets/app/controllers/dash.js +1 -1
  7. data/lib/kibana/assets/app/controllers/dashLoader.js +5 -4
  8. data/lib/kibana/assets/app/dashboards/blank.json +2 -1
  9. data/lib/kibana/assets/app/dashboards/default.json +4 -51
  10. data/lib/kibana/assets/app/dashboards/guided.json +2 -1
  11. data/lib/kibana/assets/app/dashboards/logstash.json +2 -0
  12. data/lib/kibana/assets/app/dashboards/noted.json +2 -1
  13. data/lib/kibana/assets/app/directives/addPanel.js +5 -0
  14. data/lib/kibana/assets/app/directives/all.js +2 -1
  15. data/lib/kibana/assets/app/directives/configModal.js +34 -0
  16. data/lib/kibana/assets/app/directives/kibanaPanel.js +10 -4
  17. data/lib/kibana/assets/app/directives/kibanaSimplePanel.js +10 -8
  18. data/lib/kibana/assets/app/panels/bettermap/editor.html +4 -4
  19. data/lib/kibana/assets/app/panels/bettermap/module.js +1 -1
  20. data/lib/kibana/assets/app/panels/dashcontrol/module.html +1 -4
  21. data/lib/kibana/assets/app/panels/histogram/editor.html +22 -22
  22. data/lib/kibana/assets/app/panels/histogram/module.html +4 -4
  23. data/lib/kibana/assets/app/panels/histogram/module.js +30 -24
  24. data/lib/kibana/assets/app/panels/histogram/timeSeries.js +16 -0
  25. data/lib/kibana/assets/app/panels/hits/editor.html +9 -9
  26. data/lib/kibana/assets/app/panels/map/editor.html +4 -4
  27. data/lib/kibana/assets/app/panels/pie/editor.html +47 -42
  28. data/lib/kibana/assets/app/panels/table/editor.html +39 -38
  29. data/lib/kibana/assets/app/panels/table/module.html +14 -5
  30. data/lib/kibana/assets/app/panels/table/module.js +23 -19
  31. data/lib/kibana/assets/app/panels/table/pagination.html +29 -24
  32. data/lib/kibana/assets/app/panels/terms/editor.html +53 -47
  33. data/lib/kibana/assets/app/panels/terms/module.js +7 -5
  34. data/lib/kibana/assets/app/panels/timepicker/module.html +2 -2
  35. data/lib/kibana/assets/app/partials/dashLoader.html +6 -6
  36. data/lib/kibana/assets/app/partials/dasheditor.html +127 -117
  37. data/lib/kibana/assets/app/partials/paneladd.html +1 -1
  38. data/lib/kibana/assets/app/partials/paneleditor.html +2 -2
  39. data/lib/kibana/assets/app/partials/panelgeneral.html +19 -17
  40. data/lib/kibana/assets/app/partials/roweditor.html +3 -3
  41. data/lib/kibana/assets/app/services/dashboard.js +67 -16
  42. data/lib/kibana/assets/app/services/fields.js +18 -15
  43. data/lib/kibana/assets/css/bootstrap.dark.min.css +1 -1
  44. data/lib/kibana/assets/css/bootstrap.light.min.css +1 -1
  45. data/lib/kibana/assets/vendor/angular/angular.js +17 -0
  46. data/lib/kibana/assets/vendor/bootstrap/less/modals.less +3 -11
  47. data/lib/kibana/assets/vendor/bootstrap/less/overrides.less +2 -3
  48. data/lib/kibana/assets/vendor/jquery/jquery.flot.js +2 -2
  49. data/lib/kibana/sinatra/version.rb +1 -1
  50. data/lib/kibana/views/config.erb +17 -7
  51. metadata +3 -5
  52. data/lib/kibana/assets/app/panels/dashcontrol/load.html +0 -40
  53. data/lib/kibana/assets/app/panels/dashcontrol/save.html +0 -30
  54. data/lib/kibana/assets/app/panels/dashcontrol/share.html +0 -11
@@ -10,15 +10,21 @@
10
10
  <div class="row-fluid">
11
11
  <div bindonce ng-class="{'span3':panel.field_list}" ng-if="panel.field_list">
12
12
  <div class="sidebar-nav">
13
- <strong>Fields <i class=" icon-chevron-sign-left pointer " ng-click="panel.field_list = !panel.field_list" bs-tooltip="'Hide field list'" ng-show="panel.field_list"></i></strong><p>
13
+ <strong>Fields <i class=" icon-chevron-sign-left pointer " ng-click="panel.field_list = !panel.field_list" bs-tooltip="'Hide field list'"></i></strong><p>
14
14
  <div class="small">
15
- <span class="link" ng-click="panel.all_fields = true;" ng-class="{strong:panel.all_fields}">
16
- All ({{fields.list.length}})</span><br>
17
- <span class="link" ng-click="panel.all_fields = false;" ng-class="{strong:!panel.all_fields}">
15
+ <span class="link small" ng-click="panel.all_fields = true;" ng-if="fields.list.length" ng-class="{strong:panel.all_fields}">
16
+ All ({{fields.list.length}})</span> /
17
+ <span class="link small" ng-click="panel.all_fields = false;" ng-class="{strong:!panel.all_fields}">
18
18
  Current ({{current_fields.length || 0}})</span>
19
19
 
20
20
  </div>
21
21
  <div><input type="text" class="input-medium" placeholder="Type to filter..." ng-model="fieldFilter"></div>
22
+ <div ng-show="panel.all_fields" class="small muted" style="margin-bottom:10px">
23
+ <strong>Note</strong> These fields have been<br>
24
+ extracted from your mapping.<br>
25
+ Not all fields may be available<br>
26
+ in your source document.
27
+ </div>
22
28
 
23
29
  <ul class="unstyled" style="{{panel.overflow}}:{{panel.height || row.height}};overflow-y:auto;overflow-x:hidden;" ng-if="panel.all_fields">
24
30
  <li ng-style="panel.style" ng-repeat="field in fields.list|filter:fieldFilter|orderBy:identity">
@@ -69,7 +75,10 @@
69
75
  <tbody bindonce ng-repeat="event in data| slice:panel.offset:panel.offset+panel.size" ng-class-odd="'odd'">
70
76
  <tr ng-click="toggle_details(event)" class="pointer">
71
77
  <td ng-if="panel.fields.length<1" bo-text="event._source|stringify|tableTruncate:panel.trimFactor:1"></td>
72
- <td ng-show="panel.fields.length>0" ng-repeat="field in panel.fields" bo-html="(event.kibana.highlight[field]||event.kibana._source[field]) |tableHighlight | tableTruncate:panel.trimFactor:panel.fields.length"></td>
78
+ <td ng-show="panel.fields.length>0" ng-repeat="field in panel.fields">
79
+ <span ng-if="!panel.localTime || panel.timeField != field" bo-html="(event.kibana.highlight[field]||event.kibana._source[field]) |tableHighlight | tableTruncate:panel.trimFactor:panel.fields.length"></span>
80
+ <span ng-if="panel.localTime && panel.timeField == field" bo-html="event.sort[1]|tableLocalTime:event"></span>
81
+ </td>
73
82
  </tr>
74
83
  <tr ng-if="event.kibana.details">
75
84
  <td colspan={{panel.fields.length}} ng-switch="event.kibana.view">
@@ -109,6 +109,14 @@ function (angular, app, _, kbn, moment) {
109
109
  * still available in the expanded view of the event.
110
110
  */
111
111
  trimFactor: 300,
112
+ /** @scratch /panels/table/5
113
+ * localTime:: Set to true to adjust the timeField to the browser's local time
114
+ */
115
+ localTime: false,
116
+ /** @scratch /panels/table/5
117
+ * timeField:: If localTime is set to true, this field will be adjusted to the browsers local time
118
+ */
119
+ timeField: '@timestamp',
112
120
  /** @scratch /panels/table/5
113
121
  * spyable:: Set to false to disable the inspect icon
114
122
  */
@@ -258,7 +266,8 @@ function (angular, app, _, kbn, moment) {
258
266
  _segment,
259
267
  request,
260
268
  boolQuery,
261
- results;
269
+ queries,
270
+ sort;
262
271
 
263
272
  $scope.panel.error = false;
264
273
 
@@ -267,6 +276,12 @@ function (angular, app, _, kbn, moment) {
267
276
  return;
268
277
  }
269
278
 
279
+ sort = [$scope.ejs.Sort($scope.panel.sort[0]).order($scope.panel.sort[1])];
280
+ if($scope.panel.localTime) {
281
+ sort.push($scope.ejs.Sort($scope.panel.timeField).order($scope.panel.sort[1]));
282
+ }
283
+
284
+
270
285
  $scope.panelMeta.loading = true;
271
286
 
272
287
  _segment = _.isUndefined(segment) ? 0 : segment;
@@ -275,7 +290,8 @@ function (angular, app, _, kbn, moment) {
275
290
  request = $scope.ejs.Request().indices(dashboard.indices[_segment]);
276
291
 
277
292
  $scope.panel.queries.ids = querySrv.idsByMode($scope.panel.queries);
278
- var queries = querySrv.getQueryObjs($scope.panel.queries.ids);
293
+
294
+ queries = querySrv.getQueryObjs($scope.panel.queries.ids);
279
295
 
280
296
  boolQuery = $scope.ejs.BoolQuery();
281
297
  _.each(queries,function(q) {
@@ -294,14 +310,12 @@ function (angular, app, _, kbn, moment) {
294
310
  .postTags('@end-highlight@')
295
311
  )
296
312
  .size($scope.panel.size*$scope.panel.pages)
297
- .sort($scope.panel.sort[0],$scope.panel.sort[1]);
313
+ .sort(sort);
298
314
 
299
315
  $scope.populate_modal(request);
300
316
 
301
- results = request.doSearch();
302
-
303
317
  // Populate scope when we have results
304
- results.then(function(results) {
318
+ request.doSearch().then(function(results) {
305
319
  $scope.panelMeta.loading = false;
306
320
 
307
321
  if(_segment === 0) {
@@ -470,19 +484,9 @@ function (angular, app, _, kbn, moment) {
470
484
  });
471
485
 
472
486
  // WIP
473
- module.filter('tableFieldFormat', function(fields){
474
- return function(text,field,event,scope) {
475
- var type;
476
- if(
477
- !_.isUndefined(fields.mapping[event._index]) &&
478
- !_.isUndefined(fields.mapping[event._index][event._type])
479
- ) {
480
- type = fields.mapping[event._index][event._type][field]['type'];
481
- if(type === 'date' && scope.panel.normTimes) {
482
- return moment(text).format('YYYY-MM-DD HH:mm:ss');
483
- }
484
- }
485
- return text;
487
+ module.filter('tableLocalTime', function(){
488
+ return function(text,event) {
489
+ return moment(event.sort[1]).format("YYYY-MM-DDTHH:mm:ss.SSSZ");
486
490
  };
487
491
  });
488
492
 
@@ -1,27 +1,32 @@
1
- <div class="row-fluid">
2
- <div class="span3">
3
- <h6>Show Controls</h6><input type="checkbox" ng-model="panel.paging" ng-checked="panel.paging">
1
+ <div class="editor-row">
2
+ <div class="section">
3
+ <div class="editor-option">
4
+ <h6>Show Controls</h6><input type="checkbox" ng-model="panel.paging" ng-checked="panel.paging">
5
+ </div>
6
+ <div class="editor-option">
7
+ <h6>Overflow</h6>
8
+ <select class="input-small" ng-model="panel.overflow" ng-options="f.value as f.key for f in [{key:'scroll',value:'height'},{key:'expand',value:'min-height'}]"></select>
9
+ </div>
4
10
  </div>
5
- <div class="span2">
6
- <h6>Overflow</h6>
7
- <select class="input-small" ng-model="panel.overflow" ng-options="f.value as f.key for f in [{key:'scroll',value:'height'},{key:'expand',value:'min-height'}]"></select>
8
- </div>
9
- </div>
10
- <div class="row-fluid">
11
- <div class="span2">
12
- <h6>Per Page</h6>
13
- <input type="number" class="input-mini" ng-model="panel.size" ng-change="get_data()">
14
- </div>
15
- <div class="span1">
16
- <h6>&nbsp;</h6>
17
- <center><i class='icon-remove'></i><center>
18
- </div>
19
- <div class="span2">
20
- <h6>Page limit</h6>
21
- <input type="number" class="input-mini" ng-model="panel.pages" ng-change="get_data()">
22
- </div>
23
- <div class="span2 large">
24
- <h6>Pageable</h6>
25
- <strong class="large">= {{panel.size * panel.pages}}</strong>
11
+
12
+ <div class="section">
13
+ <div class="editor-option">
14
+ <h6>Per Page</h6>
15
+ <input type="number" class="input-mini" ng-model="panel.size" ng-change="get_data()">
16
+ </div>
17
+ <div class="editor-option">
18
+ <h6>&nbsp;</h6>
19
+ <center><i class='icon-remove'></i><center>
20
+ </div>
21
+ <div class="editor-option">
22
+ <h6>Page limit</h6>
23
+ <input type="number" class="input-mini" ng-model="panel.pages" ng-change="get_data()">
24
+ </div>
25
+ <div class="editor-option large">
26
+ <h6>Pageable</h6>
27
+ <strong class="large">= {{panel.size * panel.pages}}</strong>
28
+ </div>
26
29
  </div>
30
+
27
31
  </div>
32
+
@@ -1,51 +1,57 @@
1
- <div class="row-fluid">
2
- <div class="span2">
3
- <label class="small">Field</label>
4
- <input type="text" class="input-small" bs-typeahead="fields.list" ng-model="panel.field" ng-change="set_refresh(true)">
5
- </div>
6
- <div class="span2">
7
- <label class="small">Length</label>
8
- <input class="input-small" type="number" ng-model="panel.size" ng-change="set_refresh(true)">
9
- </div>
10
- <div class="span3">
11
- <label class="small">Order</label>
12
- <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></span>
13
- </div>
14
- <div class="span4">
15
- <label class="small">Exclude Terms(s) (comma seperated)</label>
16
- <input array-join type="text" ng-model='panel.exclude'></input>
1
+ <div class="editor-row">
2
+ <div class="section">
3
+ <h5>Parameters</h5>
4
+ <div class="editor-option">
5
+ <label class="small">Field</label>
6
+ <input type="text" class="input-small" bs-typeahead="fields.list" ng-model="panel.field" ng-change="set_refresh(true)">
7
+ </div>
8
+ <div class="editor-option">
9
+ <label class="small">Length</label>
10
+ <input class="input-small" type="number" ng-model="panel.size" ng-change="set_refresh(true)">
11
+ </div>
12
+ <div class="editor-option">
13
+ <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></span>
15
+ </div>
16
+ <div class="editor-option">
17
+ <label class="small">Exclude Terms(s) (comma seperated)</label>
18
+ <input array-join type="text" ng-model='panel.exclude'></input>
19
+ </div>
17
20
  </div>
18
21
  </div>
19
- <div class="row-fluid">
20
- <div class="span2">
21
- <label class="small">Style</label>
22
- <select class="input-small" ng-model="panel.chart" ng-options="f for f in ['bar','pie','table']"></select></span>
23
- </div>
24
- <div class="span2" ng-show="panel.chart == 'table'">
25
- <label class="small">Font Size</label>
26
- <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>
27
- </div>
28
- <div class="span2" ng-show="panel.chart == 'bar' || panel.chart == 'pie'">
29
- <label class="small">Legend</label>
30
- <select class="input-small" ng-model="panel.counter_pos" ng-options="f for f in ['above','below','none']"></select></span>
31
- </div>
32
- <div class="span3" ng-show="panel.chart != 'table' && panel.counter_pos != 'none'">
33
- <label class="small" >Legend Format</label>
34
- <select class="input-small" ng-model="panel.arrangement" ng-options="f for f in ['horizontal','vertical']"></select></span>
35
- </div>
36
- <div class="span1">
37
- <label class="small">Missing</label><input type="checkbox" ng-model="panel.missing" ng-checked="panel.missing">
38
- </div>
39
- <div class="span1">
40
- <label class="small">Other</label><input type="checkbox" ng-model="panel.other" ng-checked="panel.other">
41
- </div>
42
- <div class="span1" ng-show="panel.chart == 'pie'">
43
- <label class="small">Donut</label><input type="checkbox" ng-model="panel.donut" ng-checked="panel.donut">
44
- </div>
45
- <div class="span1" ng-show="panel.chart == 'pie'">
46
- <label class="small">Tilt</label><input type="checkbox" ng-model="panel.tilt" ng-checked="panel.tilt">
47
- </div>
48
- <div class="span1" ng-show="panel.chart == 'pie'">
49
- <label class="small">Labels</label><input type="checkbox" ng-model="panel.labels" ng-checked="panel.labels">
22
+ <div class="editor-row">
23
+ <div class="section">
24
+ <h5>View Options</h5>
25
+ <div class="editor-option">
26
+ <label class="small">Style</label>
27
+ <select class="input-small" ng-model="panel.chart" ng-options="f for f in ['bar','pie','table']"></select></span>
28
+ </div>
29
+ <div class="editor-option" ng-show="panel.chart == 'table'">
30
+ <label class="small">Font Size</label>
31
+ <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>
32
+ </div>
33
+ <div class="editor-option" ng-show="panel.chart == 'bar' || panel.chart == 'pie'">
34
+ <label class="small">Legend</label>
35
+ <select class="input-small" ng-model="panel.counter_pos" ng-options="f for f in ['above','below','none']"></select></span>
36
+ </div>
37
+ <div class="editor-option" ng-show="panel.chart != 'table' && panel.counter_pos != 'none'">
38
+ <label class="small" >Legend Format</label>
39
+ <select class="input-small" ng-model="panel.arrangement" ng-options="f for f in ['horizontal','vertical']"></select></span>
40
+ </div>
41
+ <div class="editor-option">
42
+ <label class="small">Missing</label><input type="checkbox" ng-model="panel.missing" ng-checked="panel.missing">
43
+ </div>
44
+ <div class="editor-option">
45
+ <label class="small">Other</label><input type="checkbox" ng-model="panel.other" ng-checked="panel.other">
46
+ </div>
47
+ <div class="editor-option" ng-show="panel.chart == 'pie'">
48
+ <label class="small">Donut</label><input type="checkbox" ng-model="panel.donut" ng-checked="panel.donut">
49
+ </div>
50
+ <div class="editor-option" ng-show="panel.chart == 'pie'">
51
+ <label class="small">Tilt</label><input type="checkbox" ng-model="panel.tilt" ng-checked="panel.tilt">
52
+ </div>
53
+ <div class="editor-option" ng-show="panel.chart == 'pie'">
54
+ <label class="small">Labels</label><input type="checkbox" ng-model="panel.labels" ng-checked="panel.labels">
55
+ </div>
50
56
  </div>
51
57
  </div>
@@ -22,7 +22,7 @@ function (angular, app, _, $, kbn) {
22
22
  var module = angular.module('kibana.panels.terms', []);
23
23
  app.useModule(module);
24
24
 
25
- module.controller('terms', function($scope, querySrv, dashboard, filterSrv) {
25
+ module.controller('terms', function($scope, querySrv, dashboard, filterSrv, fields) {
26
26
  $scope.panelMeta = {
27
27
  modals : [
28
28
  {
@@ -134,6 +134,9 @@ function (angular, app, _, $, kbn) {
134
134
  boolQuery,
135
135
  queries;
136
136
 
137
+ $scope.field = _.contains(fields.list,$scope.panel.field+'.raw') ?
138
+ $scope.panel.field+'.raw' : $scope.panel.field;
139
+
137
140
  request = $scope.ejs.Request().indices(dashboard.indices);
138
141
 
139
142
  $scope.panel.queries.ids = querySrv.idsByMode($scope.panel.queries);
@@ -145,11 +148,10 @@ function (angular, app, _, $, kbn) {
145
148
  boolQuery = boolQuery.should(querySrv.toEjsObj(q));
146
149
  });
147
150
 
148
-
149
151
  // Terms mode
150
152
  request = request
151
153
  .facet($scope.ejs.TermsFacet('terms')
152
- .field($scope.panel.field)
154
+ .field($scope.field)
153
155
  .size($scope.panel.size)
154
156
  .order($scope.panel.order)
155
157
  .exclude($scope.panel.exclude)
@@ -187,10 +189,10 @@ function (angular, app, _, $, kbn) {
187
189
 
188
190
  $scope.build_search = function(term,negate) {
189
191
  if(_.isUndefined(term.meta)) {
190
- filterSrv.set({type:'terms',field:$scope.panel.field,value:term.label,
192
+ filterSrv.set({type:'terms',field:$scope.field,value:term.label,
191
193
  mandate:(negate ? 'mustNot':'must')});
192
194
  } else if(term.meta === 'missing') {
193
- filterSrv.set({type:'exists',field:$scope.panel.field,
195
+ filterSrv.set({type:'exists',field:$scope.field,
194
196
  mandate:(negate ? 'must':'mustNot')});
195
197
  } else {
196
198
  return;
@@ -15,7 +15,7 @@
15
15
  <ul class="nav nav-pills timepicker-dropdown">
16
16
  <li class="dropdown">
17
17
 
18
- <a class="dropdown-toggle timepicker-dropdown" data-toggle="dropdown" href="" bs-tooltip="(time.from.date | date:'yyyy-MM-dd HH:mm:ss.sss') + ' <br>to<br>' +(time.to.date | date:'yyyy-MM-dd HH:mm:ss.sss')" data-placement="bottom" ng-click="dismiss();">
18
+ <a class="dropdown-toggle timepicker-dropdown" data-toggle="dropdown" href="" bs-tooltip="time.from.date ? (time.from.date | date:'yyyy-MM-dd HH:mm:ss.sss') + ' <br>to<br>' +(time.to.date | date:'yyyy-MM-dd HH:mm:ss.sss') : 'Click to set a time filter'" data-placement="bottom" ng-click="dismiss();">
19
19
 
20
20
  <span ng-show="filterSrv.idsByType('time').length">
21
21
  <span class="pointer" ng-hide="panel.now">{{time.from.date | date:'MMM d, y HH:mm:ss'}}</span>
@@ -24,7 +24,7 @@
24
24
  <span class="pointer" ng-hide="panel.now" >{{time.to.date | date:'MMM d, y HH:mm:ss'}}</span>
25
25
  <span class="pointer" ng-show="panel.now">{{time.to.date | moment:'ago'}}</span>
26
26
  </span>
27
- <span ng-hide="filterSrv.idsByType('time').length">Set a time filter</span>
27
+ <span ng-hide="filterSrv.idsByType('time').length">Time filter</span>
28
28
  <span ng-show="dashboard.current.refresh" class="text-warning">refreshed every {{dashboard.current.refresh}} </span>
29
29
  <i class="icon-caret-down"></i>
30
30
  </a>
@@ -14,15 +14,15 @@
14
14
 
15
15
 
16
16
  <ul class="dropdown-menu" style="padding:10px">
17
- <li ng-show='dashboard.current.loader.load_elasticsearch'>
17
+ <li ng-if='dashboard.current.loader.load_elasticsearch'>
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
- <tr ng-repeat="row in elasticsearch.dashboards | orderBy:['_id']">
23
+ <tr bindonce ng-repeat="row in elasticsearch.dashboards | orderBy:['_id']">
24
24
  <td><a ng-click="elasticsearch_delete(row._id)"><i class="icon-remove"></i></a></td>
25
- <td><a href="#/dashboard/elasticsearch/{{row._id}}">{{row._id}}</a></td>
25
+ <td><a href="#/dashboard/elasticsearch/{{row._id}}" bo-text="row._id"></a></td>
26
26
  <td><a><i class="icon-share" ng-click="share = dashboard.share_link(row._id,'elasticsearch',row._id)" bs-modal="'app/panels/dashcontrol/share.html'"></i></a></td>
27
27
  </tr>
28
28
  </table>
@@ -40,7 +40,7 @@
40
40
  <li ng-show='dashboard.current.loader.load_gist'>
41
41
  <h5>Gist <tip>Enter a gist number or url</tip></h5>
42
42
  <form>
43
- <input type="text" ng-model="gist.url"/ placeholder="Gist number or URL"><br>
43
+ <input type="text" ng-model="gist.url" placeholder="Gist number or URL"><br>
44
44
  <button class="btn" ng-click="gist_dblist(dashboard.gist_id(gist.url))" ng-show="dashboard.is_gist(gist.url)"><i class="icon-github-alt"></i> Get gist:{{gist.url | gistid}}</button>
45
45
  <h6 ng-show="gist.files.length">Dashboards in gist:{{gist.url | gistid}} <small>click to load</small></h6>
46
46
  <h6 ng-hide="gist.files.length || !gist.url.length">No gist dashboards found</h6>
@@ -78,10 +78,10 @@
78
78
  <ul class="dropdown-menu">
79
79
 
80
80
  <li ng-show="dashboard.current.loader.save_default">
81
- <a class="link" ng-click="set_default()">Set as my home</a>
81
+ <a class="link" ng-click="set_default()">Save as Home</a>
82
82
  </li>
83
83
  <li ng-show="dashboard.current.loader.save_default">
84
- <a class="link" ng-click="purge_default()">Clear my home</a>
84
+ <a class="link" ng-click="purge_default()">Reset Home</a>
85
85
  </li>
86
86
  <li ng-show="dashboard.current.loader.save_local">
87
87
  <a class="link" ng-click="dashboard.to_file()">Export schema</a>
@@ -8,152 +8,162 @@
8
8
  </div>
9
9
  </div>
10
10
 
11
- <div ng-show="editor.index == 0">
12
- <div class="row-fluid">
13
- <div class="span4">
14
- <label class="small">Title</label><input type="text" class="input-large" ng-model='dashboard.current.title'></input>
15
- </div>
16
- <div class="span1">
17
- <label class="small"> Editable </label><input type="checkbox" ng-model="dashboard.current.editable" ng-checked="dashboard.current.editable" />
18
- </div>
19
- <div class="span1">
20
- <label class="small"> Hints <tip>Show 'Add panel' hints in empty spaces</tip></label><input type="checkbox" ng-model="dashboard.current.panel_hints" ng-checked="dashboard.current.panel_hints" />
21
- </div>
22
- <div class="span3">
23
- <label class="small">Style</label><select class="input-small" ng-model="dashboard.current.style" ng-options="f for f in ['dark','light']"></select>
11
+ <div ng-if="editor.index == 0">
12
+ <div class="editor-row">
13
+ <div class="section">
14
+ <div class="editor-option">
15
+ <label class="small">Title</label><input type="text" class="input-large" ng-model='dashboard.current.title'></input>
16
+ </div>
17
+ <div class="editor-option">
18
+ <label class="small">Style</label><select class="input-small" ng-model="dashboard.current.style" ng-options="f for f in ['dark','light']"></select>
19
+ </div>
20
+ <div class="editor-option">
21
+ <label class="small"> Editable </label><input type="checkbox" ng-model="dashboard.current.editable" ng-checked="dashboard.current.editable" />
22
+ </div>
23
+ <div class="editor-option">
24
+ <label class="small"> Hints <tip>Show 'Add panel' hints in empty spaces</tip></label><input type="checkbox" ng-model="dashboard.current.panel_hints" ng-checked="dashboard.current.panel_hints" />
25
+ </div>
24
26
  </div>
25
27
  </div>
26
28
  </div>
27
- <div ng-show="editor.index == 1">
28
- <div class="row-fluid">
29
- <h4>Index Settings</h4>
30
- <div ng-show="dashboard.current.index.interval != 'none'" class="row-fluid">
31
- <div class="span12">
32
- <p class="small">
33
- Time stamped indices use your selected time range to create a list of
34
- indices that match a specified timestamp pattern. This can be very
35
- efficient for some data sets (eg, logs) For example, to match the
36
- default logstash index pattern you might use
37
- <code>[logstash-]YYYY.MM.DD</code>. The [] in "[logstash-]" are
38
- important as they instruct Kibana not to treat those letters as a
39
- pattern.
40
- Please also note that indices should rollover at midnight <strong>UTC</strong>.
41
- </p>
42
- <p class="small">
43
- See <a href="http://momentjs.com/docs/#/displaying/format/">http://momentjs.com/docs/#/displaying/format/</a>
44
- for documentation on date formatting.
45
- </p>
29
+ <div ng-if="editor.index == 1">
30
+ <div class="editor-row">
31
+ <div class="section">
32
+ <h5>Index Settings</h5>
33
+ <div ng-show="dashboard.current.index.interval != 'none'" class="row-fluid">
34
+ <div class="editor-option">
35
+ <p class="small">
36
+ Time stamped indices use your selected time range to create a list of
37
+ indices that match a specified timestamp pattern. This can be very
38
+ efficient for some data sets (eg, logs) For example, to match the
39
+ default logstash index pattern you might use
40
+ <code>[logstash-]YYYY.MM.DD</code>. The [] in "[logstash-]" are
41
+ important as they instruct Kibana not to treat those letters as a
42
+ pattern.
43
+ Please also note that indices should rollover at midnight <strong>UTC</strong>.
44
+ </p>
45
+ <p class="small">
46
+ See <a href="http://momentjs.com/docs/#/displaying/format/">http://momentjs.com/docs/#/displaying/format/</a>
47
+ for documentation on date formatting.
48
+ </p>
49
+ </div>
46
50
  </div>
47
51
  </div>
48
52
  </div>
49
- <div class="row-fluid">
50
- <div class="span2">
51
- <h6>Timestamping</h6><select class="input-small" ng-model="dashboard.current.index.interval" ng-options="f for f in ['none','hour','day','week','month','year']"></select>
52
- </div>
53
- <div class="span4" ng-show="dashboard.current.index.interval != 'none'">
54
- <h6>Index pattern <small>Absolutes in []</small></h6>
55
- <input type="text" class="input-medium" ng-model="dashboard.current.index.pattern">
56
- </div>
57
- <div class="span2" ng-show="dashboard.current.index.interval != 'none'">
58
- <h6>Failover <i class="icon-question-sign" bs-tooltip="'If no indices match the pattern, failover to default index *NOT RECOMMENDED*'"></i></h6>
59
- <input type="checkbox" ng-model="dashboard.current.failover" ng-checked="dashboard.current.failover" />
60
- </div>
61
- <div class="span4" ng-show="dashboard.current.failover || dashboard.current.index.interval == 'none'">
62
- <h6>Default Index <small ng-show="dashboard.current.index.interval != 'none'">If index not found</small></h6>
63
- <input type="text" class="input-medium" ng-model="dashboard.current.index.default">
53
+ <div class="editor-row">
54
+ <div class="section">
55
+ <div class="editor-option">
56
+ <h6>Timestamping</h6><select class="input-small" ng-model="dashboard.current.index.interval" ng-options="f for f in ['none','hour','day','week','month','year']"></select>
57
+ </div>
58
+ <div class="editor-option" ng-show="dashboard.current.index.interval != 'none'">
59
+ <h6>Index pattern <small>Absolutes in []</small></h6>
60
+ <input type="text" class="input-large" ng-model="dashboard.current.index.pattern">
61
+ </div>
62
+ <div class="editor-option" ng-show="dashboard.current.index.interval != 'none'">
63
+ <h6>Failover <i class="icon-question-sign" bs-tooltip="'If no indices match the pattern, failover to default index *NOT RECOMMENDED*'"></i></h6>
64
+ <input type="checkbox" ng-model="dashboard.current.failover" ng-checked="dashboard.current.failover" />
65
+ </div>
66
+ <div class="editor-option" ng-show="dashboard.current.failover || dashboard.current.index.interval == 'none'">
67
+ <h6>Default Index <small ng-show="dashboard.current.index.interval != 'none'">If index not found</small></h6>
68
+ <input type="text" class="input-medium" ng-model="dashboard.current.index.default">
69
+ </div>
70
+ <div class="editor-option">
71
+ <h6>Preload Fields <i class="icon-question-sign" bs-tooltip="'Preload available fields for the purpose of autocomplete. Turn this off if you have many fields'"></i></h6>
72
+ <input type="checkbox" ng-model="dashboard.current.index.warm_fields" ng-checked="dashboard.current.index.warm_fields" />
73
+ </div>
64
74
  </div>
65
75
  </div>
66
76
  </div>
67
77
 
68
- <div ng-show="editor.index == 2">
78
+ <div ng-if="editor.index == 2">
69
79
  <div class="row-fluid">
70
- <div class="span12">
71
- <table class="table table-condensed table-striped">
80
+ <div class="span8">
81
+ <h4>Rows</h4>
82
+ <table class="table table-condensed table-bordered">
72
83
  <thead>
73
- <th>Title</th>
74
- <th>Delete</th>
75
- <th>Move</th>
84
+ <th width="1%"></th>
85
+ <th width="1%"></th>
86
+ <th width="1%"></th>
87
+ <th width="97%">Title</th>
76
88
  </thead>
77
89
  <tr ng-repeat="row in dashboard.current.rows">
78
- <td>{{row.title}}</td>
79
- <td><i ng-click="dashboard.current.rows = _.without(dashboard.current.rows,row)" class="pointer icon-remove"></i></td>
80
90
  <td><i ng-click="_.move(dashboard.current.rows,$index,$index-1)" ng-hide="$first" class="pointer icon-arrow-up"></i></td>
81
91
  <td><i ng-click="_.move(dashboard.current.rows,$index,$index+1)" ng-hide="$last" class="pointer icon-arrow-down"></i></td>
92
+ <td><i ng-click="dashboard.current.rows = _.without(dashboard.current.rows,row)" class="pointer icon-remove"></i></td>
93
+ <td>{{row.title}}</td>
82
94
  </tr>
83
95
  </table>
84
96
  </div>
97
+ <div class="span4">
98
+ <h4>Add Row</h4>
99
+ <label class="small">Title</label>
100
+ <input type="text" class="input-medium" ng-model='row.title' placeholder="New row"></input>
101
+ <label class="small">Height</label>
102
+ <input type="text" class="input-mini" ng-model='row.height'></input>
103
+ </div>
85
104
  </div>
86
105
  <div class="row-fluid">
87
- <form>
88
- <div class="span5">
89
- <label class="small">Title</label>
90
- <input type="text" class="input-large" ng-model='row.title' placeholder="New row"></input>
91
- </div>
92
- <div class="span2">
93
- <label class="small">Height</label>
94
- <input type="text" class="input-mini" ng-model='row.height'></input>
95
- </div>
96
- <div class="span1">
97
- <label class="small"> Editable </label>
98
- <input type="checkbox" ng-model="row.editable" ng-checked="row.editable" />
99
- </div>
100
- </form>
101
- </div>
102
- </div>
103
106
 
104
- <div ng-show="editor.index == 3">
105
- <h5>Pulldowns</h5>
106
- <div class="row-fluid">
107
- <div class="span2" ng-repeat="pulldown in dashboard.current.pulldowns">
108
- <label class="small" style="text-transform:capitalize;">{{pulldown.type}}</label><input type="checkbox" ng-model="pulldown.enable" ng-checked="pulldown.enable">
109
- </div>
110
- <div class="span2" ng-repeat="pulldown in dashboard.current.nav">
111
- <label class="small" style="text-transform:capitalize;">{{pulldown.type}}</label><input type="checkbox" ng-model="pulldown.enable" ng-checked="pulldown.enable">
112
- </div>
113
107
  </div>
114
108
  </div>
115
109
 
116
- <div ng-show="editor.index == 3" ng-controller="dashLoader">
117
- <h5>Save to</h5>
118
- <div class="row-fluid">
119
- <div class="span2">
120
- <label class="small">Export</label><input type="checkbox" ng-model="dashboard.current.loader.save_local" ng-checked="dashboard.current.loader.save_local">
121
- </div>
122
- <div class="span2">
123
- <label class="small">Browser</label><input type="checkbox" ng-model="dashboard.current.loader.save_default" ng-checked="dashboard.current.loader.save_default">
124
- </div>
125
- <div class="span2">
126
- <label class="small">Gist <tip>Requires your domain to be OAUTH registered with Github<tip></label><input type="checkbox" ng-model="dashboard.current.loader.save_gist" ng-checked="dashboard.current.loader.save_gist">
127
- </div>
128
- <div class="span2">
129
- <label class="small">Elasticsearch</label><input type="checkbox" ng-model="dashboard.current.loader.save_elasticsearch" ng-checked="dashboard.current.loader.save_elasticsearch">
130
- </div>
131
- </div>
132
- <h5>Load from</h5>
133
- <div class="row-fluid">
134
- <div class="span2">
135
- <label class="small">Local file</label><input type="checkbox" ng-model="dashboard.current.loader.load_local" ng-checked="dashboard.current.loader.load_local">
136
- </div>
137
- <div class="span2">
138
- <label class="small">Gist</label><input type="checkbox" ng-model="dashboard.current.loader.load_gist" ng-checked="dashboard.current.loader.load_gist">
110
+ <div ng-if="editor.index == 3" ng-controller="dashLoader">
111
+ <div class="editor-row">
112
+ <div class="section">
113
+ <h5>Save to</h5>
114
+ <div class="editor-option">
115
+ <label class="small">Export</label><input type="checkbox" ng-model="dashboard.current.loader.save_local" ng-checked="dashboard.current.loader.save_local">
116
+ </div>
117
+ <div class="editor-option">
118
+ <label class="small">Browser</label><input type="checkbox" ng-model="dashboard.current.loader.save_default" ng-checked="dashboard.current.loader.save_default">
119
+ </div>
120
+ <div class="editor-option">
121
+ <label class="small">Gist <tip>Requires your domain to be OAUTH registered with Github<tip></label><input type="checkbox" ng-model="dashboard.current.loader.save_gist" ng-checked="dashboard.current.loader.save_gist">
122
+ </div>
123
+ <div class="editor-option">
124
+ <label class="small">Elasticsearch</label><input type="checkbox" ng-model="dashboard.current.loader.save_elasticsearch" ng-checked="dashboard.current.loader.save_elasticsearch">
125
+ </div>
139
126
  </div>
140
- <div class="span2">
141
- <label class="small">Elasticsearch</label><input type="checkbox" ng-model="dashboard.current.loader.load_elasticsearch" ng-checked="dashboard.current.loader.load_elasticsearch">
127
+ <div class="section">
128
+ <h5>Load from</h5>
129
+ <div class="editor-option">
130
+ <label class="small">Local file</label><input type="checkbox" ng-model="dashboard.current.loader.load_local" ng-checked="dashboard.current.loader.load_local">
131
+ </div>
132
+ <div class="editor-option">
133
+ <label class="small">Gist</label><input type="checkbox" ng-model="dashboard.current.loader.load_gist" ng-checked="dashboard.current.loader.load_gist">
134
+ </div>
135
+ <div class="editor-option">
136
+ <label class="small">Elasticsearch</label><input type="checkbox" ng-model="dashboard.current.loader.load_elasticsearch" ng-checked="dashboard.current.loader.load_elasticsearch">
137
+ </div>
138
+ <div class="editor-option" ng-show="dashboard.current.loader.load.elasticsearch">
139
+ <label class="small">ES list size</label><input class="input-mini" type="number" ng-model="dashboard.current.loader.load_elasticsearch_size">
140
+ </div>
142
141
  </div>
143
- <div class="span3" ng-show="dashboard.current.loader.load.elasticsearch">
144
- <label class="small">ES list size</label><input class="input-mini" type="number" ng-model="dashboard.current.loader.load_elasticsearch_size">
142
+ <div class="section">
143
+ <h5>Sharing</h5>
144
+ <div class="editor-option" >
145
+ <label class="small">Allow Sharing <tip>Allow generating adhoc links to dashboards</tip></label><input type="checkbox" ng-model="dashboard.current.loader.save_temp" ng-checked="dashboard.current.loader.save_temp">
146
+ </div>
147
+ <div class="editor-option" ng-show="dashboard.current.loader.save_temp">
148
+ <label class="small">TTL <tip>Expire temp urls</tip></label><input type="checkbox" ng-model="dashboard.current.loader.save_temp_ttl_enable">
149
+ </div>
150
+ <div class="editor-option" ng-show="dashboard.current.loader.save_temp &amp;&amp; dashboard.current.loader.save_temp_ttl_enable">
151
+ <label class="small">TTL Duration <tip>Elasticsearch date math, eg: 1m,1d,1w,30d </tip></label><input class="input-small" type="text" ng-model="dashboard.current.loader.save_temp_ttl">
152
+ </div>
145
153
  </div>
146
154
  </div>
147
- <h5>Sharing</h5>
148
- <div class="row-fluid">
149
- <div class="span2" >
150
- <label class="small">Allow Sharing <tip>Allow generating adhoc links to dashboards</tip></label><input type="checkbox" ng-model="dashboard.current.loader.save_temp" ng-checked="dashboard.current.loader.save_temp">
151
- </div>
152
- <div class="span2" ng-show="dashboard.current.loader.save_temp">
153
- <label class="small">TTL <tip>Expire temp urls</tip></label><input type="checkbox" ng-model="dashboard.current.loader.save_temp_ttl_enable">
154
- </div>
155
- <div class="span5" ng-show="dashboard.current.loader.save_temp &amp;&amp; dashboard.current.loader.save_temp_ttl_enable">
156
- <label class="small">TTL Duration <tip>Elasticsearch date math, eg: 1m,1d,1w,30d </tip></label><input class="input-small" type="text" ng-model="dashboard.current.loader.save_temp_ttl">
155
+ </div>
156
+
157
+ <div ng-if="editor.index == 3">
158
+ <div class="editor-row">
159
+ <div class="section">
160
+ <h5>Pulldowns</h5>
161
+ <div class="editor-option" ng-repeat="pulldown in dashboard.current.pulldowns">
162
+ <label class="small" style="text-transform:capitalize;">{{pulldown.type}}</label><input type="checkbox" ng-model="pulldown.enable" ng-checked="pulldown.enable">
163
+ </div>
164
+ <div class="editor-option" ng-repeat="pulldown in dashboard.current.nav">
165
+ <label class="small" style="text-transform:capitalize;">{{pulldown.type}}</label><input type="checkbox" ng-model="pulldown.enable" ng-checked="pulldown.enable">
166
+ </div>
157
167
  </div>
158
168
  </div>
159
169
  </div>