kibana-sinatra 0.0.5 → 0.0.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +2 -1
- data/lib/kibana/assets/app/app.js +4 -2
- data/lib/kibana/assets/app/components/kbn.js +114 -0
- data/lib/kibana/assets/app/components/require.config.js +5 -1
- data/lib/kibana/assets/app/controllers/dash.js +30 -2
- data/lib/kibana/assets/app/controllers/row.js +33 -0
- data/lib/kibana/assets/app/dashboards/blank.json +0 -11
- data/lib/kibana/assets/app/dashboards/default.json +0 -11
- data/lib/kibana/assets/app/dashboards/guided.json +0 -11
- data/lib/kibana/assets/app/dashboards/logstash.json +0 -6
- data/lib/kibana/assets/app/dashboards/noted.json +0 -11
- data/lib/kibana/assets/app/directives/addPanel.js +1 -1
- data/lib/kibana/assets/app/directives/kibanaPanel.js +3 -2
- data/lib/kibana/assets/app/directives/kibanaSimplePanel.js +3 -3
- data/lib/kibana/assets/app/panels/bettermap/module.js +52 -17
- data/lib/kibana/assets/app/panels/column/module.js +18 -8
- data/lib/kibana/assets/app/panels/histogram/editor.html +3 -0
- data/lib/kibana/assets/app/panels/histogram/module.html +1 -1
- data/lib/kibana/assets/app/panels/histogram/module.js +179 -49
- data/lib/kibana/assets/app/panels/histogram/styleEditor.html +4 -0
- data/lib/kibana/assets/app/panels/hits/module.js +46 -18
- data/lib/kibana/assets/app/panels/map/module.js +40 -21
- data/lib/kibana/assets/app/panels/pie/module.html +3 -0
- data/lib/kibana/assets/app/panels/pie/module.js +62 -25
- data/lib/kibana/assets/app/panels/sparklines/module.js +42 -35
- data/lib/kibana/assets/app/panels/table/editor.html +2 -2
- data/lib/kibana/assets/app/panels/table/module.html +24 -19
- data/lib/kibana/assets/app/panels/table/module.js +80 -29
- data/lib/kibana/assets/app/panels/terms/module.html +3 -0
- data/lib/kibana/assets/app/panels/terms/module.js +65 -17
- data/lib/kibana/assets/app/panels/text/module.js +21 -9
- data/lib/kibana/assets/app/panels/trends/module.js +34 -13
- data/lib/kibana/assets/app/partials/dasheditor.html +1 -1
- data/lib/kibana/assets/app/services/dashboard.js +14 -14
- data/lib/kibana/assets/app/services/fields.js +11 -8
- data/lib/kibana/assets/app/services/filterSrv.js +27 -17
- data/lib/kibana/assets/app/services/querySrv.js +14 -15
- 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/index.html +1 -1
- data/lib/kibana/assets/vendor/angular/angular-strap.js +6 -3
- data/lib/kibana/assets/vendor/angular/bindonce.js +269 -0
- data/lib/kibana/assets/vendor/bootstrap/less/overrides.less +6 -0
- data/lib/kibana/assets/vendor/elasticjs/elastic-angular-client.js +37 -24
- data/lib/kibana/assets/vendor/elasticjs/elastic.js +4694 -2419
- data/lib/kibana/assets/vendor/jquery/jquery.flot.byte.js +107 -0
- data/lib/kibana/sinatra/version.rb +1 -1
- data/lib/kibana/views/config.erb +19 -16
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 21377d439be1057f9413662fee65a2a6bd0328c4
|
4
|
+
data.tar.gz: 3d3c501f3c505ff9c8408d679e0e8eb6e44a26bf
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1881dec9046579b356dd06023529ba62b17f491c74d0060a31ae19fdcd271b04658ec2c891ba10181940a01eb7e82813caca46e565ec78115789c9b565d2a94e
|
7
|
+
data.tar.gz: e00e61cb597a791c5f3c7a383c55300b05166f65b1410dd038fbd02e2e40e70a7ec26763ade25ccfb246f0343095500a8f4bc2ee4ce81d70498b71e787e989a4
|
data/README.md
CHANGED
@@ -2,10 +2,11 @@
|
|
2
2
|
|
3
3
|
[![Dependency Status](https://gemnasium.com/ianneub/kibana-sinatra.png)](https://gemnasium.com/ianneub/kibana-sinatra)
|
4
4
|
[![Build Status](https://travis-ci.org/ianneub/kibana-sinatra.png)](https://travis-ci.org/ianneub/kibana-sinatra)
|
5
|
+
[![Gem Version](https://badge.fury.io/rb/kibana-sinatra.png)](http://badge.fury.io/rb/kibana-sinatra)
|
5
6
|
|
6
7
|
This gem provides [Kibana 3](https://github.com/elasticsearch/kibana) inside a [Sinatra](http://www.sinatrarb.com/) app that you can include in any Rack based system, including Rails.
|
7
8
|
|
8
|
-
It is currently based on Kibana 3 commit [
|
9
|
+
It is currently based on Kibana 3 commit [f194336277280467f4d27ab8b65c8f69c5c7122e](https://github.com/elasticsearch/kibana/commits/master)
|
9
10
|
|
10
11
|
## Installation
|
11
12
|
|
@@ -11,7 +11,8 @@ define([
|
|
11
11
|
'angular-sanitize',
|
12
12
|
'angular-strap',
|
13
13
|
'angular-dragdrop',
|
14
|
-
'extend-jquery'
|
14
|
+
'extend-jquery',
|
15
|
+
'bindonce'
|
15
16
|
],
|
16
17
|
function (angular, $, _, appLevelRequire) {
|
17
18
|
"use strict";
|
@@ -84,7 +85,8 @@ function (angular, $, _, appLevelRequire) {
|
|
84
85
|
'$strap.directives',
|
85
86
|
'ngSanitize',
|
86
87
|
'ngDragDrop',
|
87
|
-
'kibana'
|
88
|
+
'kibana',
|
89
|
+
'pasvaz.bindonce'
|
88
90
|
];
|
89
91
|
|
90
92
|
_.each('controllers directives factories services filters'.split(' '),
|
@@ -479,5 +479,119 @@ function($, _, moment) {
|
|
479
479
|
});
|
480
480
|
};
|
481
481
|
|
482
|
+
// Find the smallest missing number in an array
|
483
|
+
kbn.smallestMissing = function(arr,start,end) {
|
484
|
+
start = start || 0;
|
485
|
+
end = end || arr.length-1;
|
486
|
+
|
487
|
+
if(start > end) {
|
488
|
+
return end + 1;
|
489
|
+
}
|
490
|
+
if(start !== arr[start]) {
|
491
|
+
return start;
|
492
|
+
}
|
493
|
+
var middle = Math.floor((start + end) / 2);
|
494
|
+
|
495
|
+
if (arr[middle] > middle) {
|
496
|
+
return kbn.smallestMissing(arr, start, middle);
|
497
|
+
} else {
|
498
|
+
return kbn.smallestMissing(arr, middle + 1, end);
|
499
|
+
}
|
500
|
+
};
|
501
|
+
|
502
|
+
kbn.byteFormat = function(size, decimals) {
|
503
|
+
var ext, steps = 0;
|
504
|
+
|
505
|
+
if(_.isUndefined(decimals)) {
|
506
|
+
decimals = 2;
|
507
|
+
} else if (decimals === 0) {
|
508
|
+
decimals = undefined;
|
509
|
+
}
|
510
|
+
|
511
|
+
while (Math.abs(size) >= 1024) {
|
512
|
+
steps++;
|
513
|
+
size /= 1024;
|
514
|
+
}
|
515
|
+
|
516
|
+
switch (steps) {
|
517
|
+
case 0:
|
518
|
+
ext = " B";
|
519
|
+
break;
|
520
|
+
case 1:
|
521
|
+
ext = " KB";
|
522
|
+
break;
|
523
|
+
case 2:
|
524
|
+
ext = " MB";
|
525
|
+
break;
|
526
|
+
case 3:
|
527
|
+
ext = " GB";
|
528
|
+
break;
|
529
|
+
case 4:
|
530
|
+
ext = " TB";
|
531
|
+
break;
|
532
|
+
case 5:
|
533
|
+
ext = " PB";
|
534
|
+
break;
|
535
|
+
case 6:
|
536
|
+
ext = " EB";
|
537
|
+
break;
|
538
|
+
case 7:
|
539
|
+
ext = " ZB";
|
540
|
+
break;
|
541
|
+
case 8:
|
542
|
+
ext = " YB";
|
543
|
+
break;
|
544
|
+
}
|
545
|
+
|
546
|
+
return (size.toFixed(decimals) + ext);
|
547
|
+
};
|
548
|
+
|
549
|
+
kbn.shortFormat = function(size, decimals) {
|
550
|
+
var ext, steps = 0;
|
551
|
+
|
552
|
+
if(_.isUndefined(decimals)) {
|
553
|
+
decimals = 2;
|
554
|
+
} else if (decimals === 0) {
|
555
|
+
decimals = undefined;
|
556
|
+
}
|
557
|
+
|
558
|
+
while (Math.abs(size) >= 1000) {
|
559
|
+
steps++;
|
560
|
+
size /= 1000;
|
561
|
+
}
|
562
|
+
|
563
|
+
switch (steps) {
|
564
|
+
case 0:
|
565
|
+
ext = "";
|
566
|
+
break;
|
567
|
+
case 1:
|
568
|
+
ext = " K";
|
569
|
+
break;
|
570
|
+
case 2:
|
571
|
+
ext = " Mil";
|
572
|
+
break;
|
573
|
+
case 3:
|
574
|
+
ext = " Bil";
|
575
|
+
break;
|
576
|
+
case 4:
|
577
|
+
ext = " Tri";
|
578
|
+
break;
|
579
|
+
case 5:
|
580
|
+
ext = " Quadr";
|
581
|
+
break;
|
582
|
+
case 6:
|
583
|
+
ext = " Quint";
|
584
|
+
break;
|
585
|
+
case 7:
|
586
|
+
ext = " Sext";
|
587
|
+
break;
|
588
|
+
case 8:
|
589
|
+
ext = " Sept";
|
590
|
+
break;
|
591
|
+
}
|
592
|
+
|
593
|
+
return (size.toFixed(decimals) + ext);
|
594
|
+
};
|
595
|
+
|
482
596
|
return kbn;
|
483
597
|
});
|
@@ -20,6 +20,7 @@ require.config({
|
|
20
20
|
'angular-sanitize': '../vendor/angular/angular-sanitize',
|
21
21
|
timepicker: '../vendor/angular/timepicker',
|
22
22
|
datepicker: '../vendor/angular/datepicker',
|
23
|
+
bindonce: '../vendor/angular/bindonce',
|
23
24
|
|
24
25
|
underscore: 'components/underscore.extended',
|
25
26
|
'underscore-src': '../vendor/underscore',
|
@@ -37,6 +38,8 @@ require.config({
|
|
37
38
|
'jquery.flot.stack': '../vendor/jquery/jquery.flot.stack',
|
38
39
|
'jquery.flot.stackpercent':'../vendor/jquery/jquery.flot.stackpercent',
|
39
40
|
'jquery.flot.time': '../vendor/jquery/jquery.flot.time',
|
41
|
+
'jquery.flot.byte': '../vendor/jquery/jquery.flot.byte',
|
42
|
+
|
40
43
|
|
41
44
|
modernizr: '../vendor/modernizr-2.6.1',
|
42
45
|
elasticjs: '../vendor/elasticjs/elastic-angular-client',
|
@@ -66,6 +69,7 @@ require.config({
|
|
66
69
|
// simple dependency declaration
|
67
70
|
'jquery-ui': ['jquery'],
|
68
71
|
'jquery.flot': ['jquery'],
|
72
|
+
'jquery.flot.byte': ['jquery', 'jquery.flot'],
|
69
73
|
'jquery.flot.pie': ['jquery', 'jquery.flot'],
|
70
74
|
'jquery.flot.events': ['jquery', 'jquery.flot'],
|
71
75
|
'jquery.flot.selection':['jquery', 'jquery.flot'],
|
@@ -81,7 +85,7 @@ require.config({
|
|
81
85
|
'angular-resource': ['angular'],
|
82
86
|
'angular-route': ['angular'],
|
83
87
|
'angular-touch': ['angular'],
|
84
|
-
|
88
|
+
'bindonce': ['angular'],
|
85
89
|
'angular-strap': ['angular', 'bootstrap','timepicker', 'datepicker'],
|
86
90
|
|
87
91
|
timepicker: ['jquery', 'bootstrap'],
|
@@ -1,3 +1,22 @@
|
|
1
|
+
/** @scratch /index/0
|
2
|
+
* = Kibana
|
3
|
+
*
|
4
|
+
* // Why can't I have a preamble here?
|
5
|
+
*
|
6
|
+
* == Introduction
|
7
|
+
*
|
8
|
+
* Kibana is an open source (Apache Licensed), browser based analytics and search dashboard for
|
9
|
+
* ElasticSearch. Kibana is a snap to setup and start using. Written entirely in HTML and Javascript
|
10
|
+
* it requires only a plain webserver, Kibana requires no fancy server side components.
|
11
|
+
* Kibana strives to be easy to get started with, while also being flexible and powerful, just like
|
12
|
+
* Elasticsearch.
|
13
|
+
*
|
14
|
+
* include::configuration/config.js.asciidoc[]
|
15
|
+
*
|
16
|
+
* include::panels.asciidoc[]
|
17
|
+
*
|
18
|
+
*/
|
19
|
+
|
1
20
|
define([
|
2
21
|
'angular',
|
3
22
|
'config',
|
@@ -68,9 +87,18 @@ function (angular, config, _) {
|
|
68
87
|
return { 'min-height': row.collapse ? '5px' : row.height };
|
69
88
|
};
|
70
89
|
|
71
|
-
$scope.
|
90
|
+
$scope.panel_path =function(type) {
|
72
91
|
if(type) {
|
73
|
-
return 'app/panels/'+type
|
92
|
+
return 'app/panels/'+type.replace(".","/");
|
93
|
+
} else {
|
94
|
+
return false;
|
95
|
+
}
|
96
|
+
};
|
97
|
+
|
98
|
+
$scope.edit_path = function(type) {
|
99
|
+
var p = $scope.panel_path(type);
|
100
|
+
if(p) {
|
101
|
+
return p+'/editor.html';
|
74
102
|
} else {
|
75
103
|
return false;
|
76
104
|
}
|
@@ -58,6 +58,25 @@ function (angular, app, _) {
|
|
58
58
|
$scope.row.panels.push(panel);
|
59
59
|
};
|
60
60
|
|
61
|
+
/** @scratch /panels/0
|
62
|
+
* [[panels]]
|
63
|
+
* = Panels
|
64
|
+
*
|
65
|
+
* [partintro]
|
66
|
+
* --
|
67
|
+
* *Kibana* dashboards are made up of blocks called +panels+. Panels are organized into rows
|
68
|
+
* and can serve many purposes, though most are designed to provide the results of a query or
|
69
|
+
* multiple queries as a visualization. Other panels may show collections of documents or
|
70
|
+
* allow you to insert instructions for your users.
|
71
|
+
*
|
72
|
+
* Panels can be configured easily via the Kibana web interface. For more advanced usage, such
|
73
|
+
* as templated or scripted dashboards, documentation of panel properties is available in this
|
74
|
+
* section. You may find settings here which are not exposed via the web interface.
|
75
|
+
*
|
76
|
+
* Each panel type has its own properties, hover there are several that are shared.
|
77
|
+
*
|
78
|
+
*/
|
79
|
+
|
61
80
|
$scope.reset_panel = function(type) {
|
62
81
|
var
|
63
82
|
defaultSpan = 4,
|
@@ -65,12 +84,26 @@ function (angular, app, _) {
|
|
65
84
|
|
66
85
|
$scope.panel = {
|
67
86
|
error : false,
|
87
|
+
/** @scratch /panels/1
|
88
|
+
* span:: A number, 1-12, that describes the width of the panel.
|
89
|
+
*/
|
68
90
|
span : _as < defaultSpan && _as > 0 ? _as : defaultSpan,
|
91
|
+
/** @scratch /panels/1
|
92
|
+
* editable:: Enable or disable the edit button the the panel
|
93
|
+
*/
|
69
94
|
editable: true,
|
95
|
+
/** @scratch /panels/1
|
96
|
+
* type:: The type of panel this object contains. Each panel type will require additional
|
97
|
+
* properties. See the panel types list to the right.
|
98
|
+
*/
|
70
99
|
type : type
|
71
100
|
};
|
72
101
|
};
|
73
102
|
|
103
|
+
/** @scratch /panels/2
|
104
|
+
* --
|
105
|
+
*/
|
106
|
+
|
74
107
|
$scope.init();
|
75
108
|
|
76
109
|
}
|
@@ -2,12 +2,6 @@
|
|
2
2
|
"title": "New Dashboard",
|
3
3
|
"services": {
|
4
4
|
"query": {
|
5
|
-
"idQueue": [
|
6
|
-
1,
|
7
|
-
2,
|
8
|
-
3,
|
9
|
-
4
|
10
|
-
],
|
11
5
|
"list": {
|
12
6
|
"0": {
|
13
7
|
"query": "*",
|
@@ -21,11 +15,6 @@
|
|
21
15
|
]
|
22
16
|
},
|
23
17
|
"filter": {
|
24
|
-
"idQueue": [
|
25
|
-
0,
|
26
|
-
1,
|
27
|
-
2
|
28
|
-
],
|
29
18
|
"list": {},
|
30
19
|
"ids": []
|
31
20
|
}
|
@@ -2,12 +2,6 @@
|
|
2
2
|
"title": "Introduction",
|
3
3
|
"services": {
|
4
4
|
"query": {
|
5
|
-
"idQueue": [
|
6
|
-
1,
|
7
|
-
2,
|
8
|
-
3,
|
9
|
-
4
|
10
|
-
],
|
11
5
|
"list": {
|
12
6
|
"0": {
|
13
7
|
"query": "*",
|
@@ -23,11 +17,6 @@
|
|
23
17
|
]
|
24
18
|
},
|
25
19
|
"filter": {
|
26
|
-
"idQueue": [
|
27
|
-
0,
|
28
|
-
1,
|
29
|
-
2
|
30
|
-
],
|
31
20
|
"list": {},
|
32
21
|
"ids": []
|
33
22
|
}
|
@@ -2,12 +2,6 @@
|
|
2
2
|
"title": "Your Basic Dashboard",
|
3
3
|
"services": {
|
4
4
|
"query": {
|
5
|
-
"idQueue": [
|
6
|
-
1,
|
7
|
-
2,
|
8
|
-
3,
|
9
|
-
4
|
10
|
-
],
|
11
5
|
"list": {
|
12
6
|
"0": {
|
13
7
|
"query": "*",
|
@@ -23,11 +17,6 @@
|
|
23
17
|
]
|
24
18
|
},
|
25
19
|
"filter": {
|
26
|
-
"idQueue": [
|
27
|
-
0,
|
28
|
-
1,
|
29
|
-
2
|
30
|
-
],
|
31
20
|
"list": {},
|
32
21
|
"ids": []
|
33
22
|
}
|
@@ -2,9 +2,6 @@
|
|
2
2
|
"title": "Logstash Search",
|
3
3
|
"services": {
|
4
4
|
"query": {
|
5
|
-
"idQueue": [
|
6
|
-
1
|
7
|
-
],
|
8
5
|
"list": {
|
9
6
|
"0": {
|
10
7
|
"query": "{{ARGS.query || '*'}}",
|
@@ -20,9 +17,6 @@
|
|
20
17
|
]
|
21
18
|
},
|
22
19
|
"filter": {
|
23
|
-
"idQueue": [
|
24
|
-
1
|
25
|
-
],
|
26
20
|
"list": {
|
27
21
|
"0": {
|
28
22
|
"type": "time",
|
@@ -2,12 +2,6 @@
|
|
2
2
|
"title": "A few notes",
|
3
3
|
"services": {
|
4
4
|
"query": {
|
5
|
-
"idQueue": [
|
6
|
-
1,
|
7
|
-
2,
|
8
|
-
3,
|
9
|
-
4
|
10
|
-
],
|
11
5
|
"list": {
|
12
6
|
"0": {
|
13
7
|
"query": "*",
|
@@ -23,11 +17,6 @@
|
|
23
17
|
]
|
24
18
|
},
|
25
19
|
"filter": {
|
26
|
-
"idQueue": [
|
27
|
-
0,
|
28
|
-
1,
|
29
|
-
2
|
30
|
-
],
|
31
20
|
"list": {},
|
32
21
|
"ids": []
|
33
22
|
}
|
@@ -17,7 +17,7 @@ function (angular, app, _) {
|
|
17
17
|
$scope.reset_panel(_type);
|
18
18
|
if(!_.isUndefined($scope.panel.type)) {
|
19
19
|
$scope.panel.loadingEditor = true;
|
20
|
-
$scope.require(['panels/'+$scope.panel.type+'/module'], function () {
|
20
|
+
$scope.require(['panels/'+$scope.panel.type.replace(".","/") +'/module'], function () {
|
21
21
|
var template = '<div ng-controller="'+$scope.panel.type+'" ng-include="\'app/partials/paneladd.html\'"></div>';
|
22
22
|
elem.html($compile(angular.element(template))($scope));
|
23
23
|
$scope.panel.loadingEditor = false;
|
@@ -75,9 +75,10 @@ function (angular) {
|
|
75
75
|
$scope.$watch(attr.type, function (name) {
|
76
76
|
elem.addClass("ng-cloak");
|
77
77
|
// load the panels module file, then render it in the dom.
|
78
|
+
var nameAsPath = name.replace(".", "/");
|
78
79
|
$scope.require([
|
79
80
|
'jquery',
|
80
|
-
'text!panels/'+
|
81
|
+
'text!panels/'+nameAsPath+'/module.html'
|
81
82
|
], function ($, moduleTemplate) {
|
82
83
|
var $module = $(moduleTemplate);
|
83
84
|
// top level controllers
|
@@ -88,7 +89,7 @@ function (angular) {
|
|
88
89
|
if ($controllers.length) {
|
89
90
|
$controllers.first().prepend(editorTemplate);
|
90
91
|
$scope.require([
|
91
|
-
'panels/'+
|
92
|
+
'panels/'+nameAsPath+'/module'
|
92
93
|
], function() {
|
93
94
|
loadModule($module);
|
94
95
|
});
|