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.
Files changed (99) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +1 -1
  3. data/kibana-sinatra.gemspec +1 -0
  4. data/lib/kibana/assets/app/app.js +8 -3
  5. data/lib/kibana/assets/app/components/kbn.js +45 -10
  6. data/lib/kibana/assets/app/components/{underscore.extended.js → lodash.extended.js} +2 -4
  7. data/lib/kibana/assets/app/components/require.config.js +5 -6
  8. data/lib/kibana/assets/app/components/settings.js +1 -1
  9. data/lib/kibana/assets/app/controllers/dash.js +10 -5
  10. data/lib/kibana/assets/app/controllers/dashLoader.js +1 -1
  11. data/lib/kibana/assets/app/controllers/pulldown.js +1 -1
  12. data/lib/kibana/assets/app/controllers/row.js +1 -1
  13. data/lib/kibana/assets/app/dashboards/default.json +1 -1
  14. data/lib/kibana/assets/app/dashboards/logstash.js +4 -4
  15. data/lib/kibana/assets/app/dashboards/logstash.json +1 -1
  16. data/lib/kibana/assets/app/directives/addPanel.js +1 -1
  17. data/lib/kibana/assets/app/directives/arrayJoin.js +1 -1
  18. data/lib/kibana/assets/app/directives/configModal.js +23 -5
  19. data/lib/kibana/assets/app/directives/kibanaPanel.js +70 -50
  20. data/lib/kibana/assets/app/directives/kibanaSimplePanel.js +1 -1
  21. data/lib/kibana/assets/app/factories/store.js +59 -0
  22. data/lib/kibana/assets/app/filters/all.js +6 -13
  23. data/lib/kibana/assets/app/panels/bettermap/module.html +5 -0
  24. data/lib/kibana/assets/app/panels/bettermap/module.js +1 -1
  25. data/lib/kibana/assets/app/panels/column/editor.html +1 -1
  26. data/lib/kibana/assets/app/panels/column/module.js +7 -6
  27. data/lib/kibana/assets/app/panels/dashcontrol/module.js +1 -1
  28. data/lib/kibana/assets/app/panels/derivequeries/module.js +1 -1
  29. data/lib/kibana/assets/app/panels/fields/module.js +1 -1
  30. data/lib/kibana/assets/app/panels/filtering/module.html +10 -17
  31. data/lib/kibana/assets/app/panels/filtering/module.js +19 -1
  32. data/lib/kibana/assets/app/panels/histogram/module.html +4 -4
  33. data/lib/kibana/assets/app/panels/histogram/module.js +62 -12
  34. data/lib/kibana/assets/app/panels/histogram/timeSeries.js +6 -3
  35. data/lib/kibana/assets/app/panels/hits/module.js +1 -1
  36. data/lib/kibana/assets/app/panels/map/module.js +1 -1
  37. data/lib/kibana/assets/app/panels/pie/editor.html +1 -1
  38. data/lib/kibana/assets/app/panels/pie/module.js +1 -1
  39. data/lib/kibana/assets/app/panels/query/meta.html +1 -1
  40. data/lib/kibana/assets/app/panels/query/module.html +1 -1
  41. data/lib/kibana/assets/app/panels/query/module.js +2 -7
  42. data/lib/kibana/assets/app/panels/query/query.css +9 -7
  43. data/lib/kibana/assets/app/panels/sparklines/module.js +2 -2
  44. data/lib/kibana/assets/app/panels/sparklines/timeSeries.js +3 -3
  45. data/lib/kibana/assets/app/panels/stats/editor.html +36 -0
  46. data/lib/kibana/assets/app/panels/stats/module.html +15 -0
  47. data/lib/kibana/assets/app/panels/stats/module.js +199 -0
  48. data/lib/kibana/assets/app/panels/table/editor.html +23 -27
  49. data/lib/kibana/assets/app/panels/table/micropanel.html +3 -1
  50. data/lib/kibana/assets/app/panels/table/module.js +7 -1
  51. data/lib/kibana/assets/app/panels/terms/editor.html +16 -3
  52. data/lib/kibana/assets/app/panels/terms/module.html +14 -5
  53. data/lib/kibana/assets/app/panels/terms/module.js +66 -18
  54. data/lib/kibana/assets/app/panels/text/module.js +1 -1
  55. data/lib/kibana/assets/app/panels/timepicker/editor.html +14 -12
  56. data/lib/kibana/assets/app/panels/timepicker/module.html +3 -8
  57. data/lib/kibana/assets/app/panels/timepicker/module.js +1 -1
  58. data/lib/kibana/assets/app/panels/trends/module.js +1 -1
  59. data/lib/kibana/assets/app/partials/dashLoader.html +10 -10
  60. data/lib/kibana/assets/app/partials/dashboard.html +35 -44
  61. data/lib/kibana/assets/app/partials/dasheditor.html +7 -5
  62. data/lib/kibana/assets/app/partials/paneleditor.html +2 -1
  63. data/lib/kibana/assets/app/partials/panelgeneral.html +1 -1
  64. data/lib/kibana/assets/app/partials/roweditor.html +11 -9
  65. data/lib/kibana/assets/app/services/alertSrv.js +1 -1
  66. data/lib/kibana/assets/app/services/dashboard.js +27 -14
  67. data/lib/kibana/assets/app/services/esVersion.js +70 -31
  68. data/lib/kibana/assets/app/services/fields.js +14 -37
  69. data/lib/kibana/assets/app/services/filterSrv.js +7 -11
  70. data/lib/kibana/assets/app/services/kbnIndex.js +24 -15
  71. data/lib/kibana/assets/app/services/panelMove.js +1 -1
  72. data/lib/kibana/assets/app/services/querySrv.js +20 -6
  73. data/lib/kibana/assets/app/services/timer.js +1 -1
  74. data/lib/kibana/assets/css/bootstrap.dark.min.css +1 -1
  75. data/lib/kibana/assets/css/bootstrap.light.min.css +1 -1
  76. data/lib/kibana/assets/img/cubes.png +0 -0
  77. data/lib/kibana/assets/img/light.png +0 -0
  78. data/lib/kibana/assets/index.html +3 -2
  79. data/lib/kibana/assets/vendor/LICENSE.json +90 -0
  80. data/lib/kibana/assets/vendor/angular/angular-cookies.js +185 -0
  81. data/lib/kibana/assets/vendor/angular/angular-dragdrop.js +33 -4
  82. data/lib/kibana/assets/vendor/blob.js +178 -0
  83. data/lib/kibana/assets/vendor/bootstrap/bootstrap.js +6 -1
  84. data/lib/kibana/assets/vendor/bootstrap/less/bak/bootswatch.dark.less +555 -0
  85. data/lib/kibana/assets/vendor/bootstrap/less/bak/variables.dark.less +304 -0
  86. data/lib/kibana/assets/vendor/bootstrap/less/bootswatch.dark.less +349 -327
  87. data/lib/kibana/assets/vendor/bootstrap/less/bootswatch.light.less +590 -7
  88. data/lib/kibana/assets/vendor/bootstrap/less/modals.less +1 -1
  89. data/lib/kibana/assets/vendor/bootstrap/less/overrides.less +191 -75
  90. data/lib/kibana/assets/vendor/bootstrap/less/variables.dark.less +96 -97
  91. data/lib/kibana/assets/vendor/bootstrap/less/variables.light.less +84 -81
  92. data/lib/kibana/assets/vendor/jquery/jquery.flot.events.js +39 -51
  93. data/lib/kibana/assets/vendor/lodash.js +6785 -0
  94. data/lib/kibana/assets/vendor/numeral.js +565 -0
  95. data/lib/kibana/sinatra/version.rb +1 -1
  96. data/lib/kibana/views/config.erb +1 -0
  97. data/test/sinatra_test.rb +2 -2
  98. metadata +30 -4
  99. 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="field[0]+' ('+percent(field[1],data.length)+')'" class="bar {{micropanelColor($index)}}" ng-style="{width: percent(field[1],data.length)};"></div>
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
- 'underscore',
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></span>
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 seperated)</label>
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
- <div class="small" ng-show="panel.arrangement == 'horizontal'" ng-repeat="term in legend" style="float:left;padding-left: 10px;">
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
- </div><br>
18
+ </span>
19
+
20
+ <span class="small pull-left" ng-show="panel.tmode == 'terms_stats'">
21
+ &nbsp | {{ 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
- <div class="small" ng-show="panel.arrangement == 'horizontal'" ng-repeat="term in legend" style="float:left;padding-left: 10px;">
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
- </div><br>
42
+ </span>
43
+
44
+ <span class="small pull-left" ng-show="panel.tmode == 'terms_stats'">
45
+ &nbsp | {{ 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
- 'underscore',
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
- request = request
153
- .facet($scope.ejs.TermsFacet('terms')
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
- )))).size(0);
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.hits = results.hits.total;
174
- $scope.data = [];
175
- _.each(results.facets.terms.terms, function(v) {
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.data.push({label:'Missing field',
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
+ });
@@ -13,7 +13,7 @@
13
13
  define([
14
14
  'angular',
15
15
  'app',
16
- 'underscore',
16
+ 'lodash',
17
17
  'require'
18
18
  ],
19
19
  function (angular, app, _, require) {
@@ -1,14 +1,16 @@
1
- <div class="row-fluid">
2
- <div class="span4">
3
- <label class="small">Relative time options <small>comma seperated</small></label>
4
- <input type="text" array-join class="input-large" ng-model="panel.time_options">
5
- </div>
6
- <div class="span4">
7
- <label class="small">Auto-refresh options <small>comma seperated</small></label>
8
- <input type="text" array-join class="input-large" ng-model="panel.refresh_intervals">
9
- </div>
10
- <div class="span2">
11
- <label class="small">Time Field</label>
12
- <input type="text" class="input-small" ng-model="panel.timefield">
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 href="#">Auto-Refresh</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 ng-show="!dashboard.current.refresh">
51
- <a class="icon-refresh" ng-click="dashboard.refresh()"></a>
45
+ <li>
46
+ <a ng-click="dashboard.refresh()"><i class="icon-refresh"></i></a>
52
47
  </li>
53
48
  </ul>
54
49
 
@@ -15,7 +15,7 @@
15
15
  define([
16
16
  'angular',
17
17
  'app',
18
- 'underscore',
18
+ 'lodash',
19
19
  'moment',
20
20
  'kbn'
21
21
  ],
@@ -14,7 +14,7 @@
14
14
  define([
15
15
  'angular',
16
16
  'app',
17
- 'underscore',
17
+ 'lodash',
18
18
  'kbn'
19
19
  ],
20
20
  function (angular, app, _, kbn) {
@@ -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 ng-click="elasticsearch_delete(row._id)"><i class="icon-remove"></i></a></td>
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/panels/dashcontrol/share.html'"></i></a></td>
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 style="margin-top:-1px" class="btn" ng-click="elasticsearch_save('dashboard')"><i class="icon-save"></i></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 href='#' bs-modal="'app/partials/dasheditor.html'"><i class='icon-cog pointer'></i></a></li>
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 class="row-fluid">
15
- <div class="row-fluid container" style="margin-top:10px; width:98%">
15
+ <div>
16
+ <div class="kibana-container container">
16
17
  <!-- Rows -->
17
- <div class="row-fluid kibana-row" ng-controller="RowCtrl" ng-repeat="(row_name, row) in dashboard.current.rows" ng-style="row_style(row)">
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="row-fluid" style="padding:0px;margin:0px;position:relative;">
20
+ <div class="" style="padding:0px;margin:0px;position:relative;">
20
21
 
21
- <div class="row-close span12" ng-show="row.collapse" data-placement="bottom" >
22
- <span class="row-button" bs-modal="'app/partials/roweditor.html'" class="pointer">
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.editable" class="icon-caret-right pointer" ></i>
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
- <span ng-show="row.collapsable">
33
- <i bs-tooltip="'Hide row'" data-placement="right" class="icon-caret-up" ng-click="toggle_row(row)"></i>
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
- </span>
36
- <span bs-modal="'app/partials/roweditor.html'" ng-show="row.editable">
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
- </span>
40
- <span ng-show="rowSpan(row) == 12 && row.editable">
41
- <i bs-tooltip="'Row full. Create a new row to add more panels'" data-placement="right" class="icon-columns"></i>
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
- </span>
44
+ </div>
45
+
48
46
  </div>
49
47
 
50
48
  </div>
51
- <div class="row-fluid" style="padding-top:0px" ng-if="!row.collapse">
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.span == 0 || panel.hide" class="span{{panel.span}} panel nospace" style="min-height:{{row.height}}; position:relative" data-drop="true" ng-model="row.panels" data-jqyoui-options jqyoui-droppable="{index:$index,mutate:false,onDrop:'panelMoveDrop',onOver:'panelMoveOver(true)',onOut:'panelMoveOut'}">
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">&times;</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 class="row-fluid" style="position:relative" ng-class="{'dragInProgress':dashboard.panelDragging}" >
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 style="margin-left: 0px;" class="pointer btn btn-mini" bs-modal="'app/partials/dasheditor.html'">
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>