kibana-sinatra 0.0.2 → 0.0.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +30 -2
- data/Rakefile +1 -0
- data/kibana-sinatra.gemspec +2 -0
- data/lib/kibana/assets/app/app.js +0 -0
- data/lib/kibana/assets/app/components/extend-jquery.js +0 -0
- data/lib/kibana/assets/app/components/kbn.js +132 -2
- data/lib/kibana/assets/app/components/require.config.js +0 -0
- data/lib/kibana/assets/app/components/settings.js +0 -0
- data/lib/kibana/assets/app/components/underscore.extended.js +0 -0
- data/lib/kibana/assets/app/controllers/all.js +1 -0
- data/lib/kibana/assets/app/controllers/dash.js +0 -0
- data/lib/kibana/assets/app/controllers/dashLoader.js +10 -3
- data/lib/kibana/assets/app/controllers/pulldown.js +45 -0
- data/lib/kibana/assets/app/controllers/row.js +3 -0
- data/lib/kibana/assets/app/dashboards/blank.json +0 -0
- data/lib/kibana/assets/app/dashboards/default.json +78 -19
- data/lib/kibana/assets/app/dashboards/guided.json +60 -52
- data/lib/kibana/assets/app/dashboards/logstash.js +6 -49
- data/lib/kibana/assets/app/dashboards/logstash.json +104 -95
- data/lib/kibana/assets/app/dashboards/noted.json +56 -87
- data/lib/kibana/assets/app/directives/addPanel.js +0 -0
- data/lib/kibana/assets/app/directives/all.js +1 -0
- data/lib/kibana/assets/app/directives/arrayJoin.js +0 -0
- data/lib/kibana/assets/app/directives/confirmClick.js +0 -0
- data/lib/kibana/assets/app/directives/dashUpload.js +0 -0
- data/lib/kibana/assets/app/directives/kibanaPanel.js +1 -1
- data/lib/kibana/assets/app/directives/kibanaSimplePanel.js +54 -0
- data/lib/kibana/assets/app/directives/ngBlur.js +0 -0
- data/lib/kibana/assets/app/directives/ngModelOnBlur.js +0 -0
- data/lib/kibana/assets/app/directives/tip.js +0 -0
- data/lib/kibana/assets/app/filters/all.js +11 -1
- data/lib/kibana/assets/app/panels/bettermap/editor.html +0 -0
- data/lib/kibana/assets/app/panels/bettermap/leaflet/images/layers-2x.png +0 -0
- data/lib/kibana/assets/app/panels/bettermap/leaflet/images/layers.png +0 -0
- data/lib/kibana/assets/app/panels/bettermap/leaflet/images/marker-icon-2x.png +0 -0
- data/lib/kibana/assets/app/panels/bettermap/leaflet/images/marker-icon.png +0 -0
- data/lib/kibana/assets/app/panels/bettermap/leaflet/images/marker-shadow.png +0 -0
- data/lib/kibana/assets/app/panels/bettermap/leaflet/leaflet-src.js +0 -0
- data/lib/kibana/assets/app/panels/bettermap/leaflet/leaflet.css +0 -0
- data/lib/kibana/assets/app/panels/bettermap/leaflet/leaflet.ie.css +0 -0
- data/lib/kibana/assets/app/panels/bettermap/leaflet/leaflet.js +0 -0
- data/lib/kibana/assets/app/panels/bettermap/leaflet/plugins.css +0 -0
- data/lib/kibana/assets/app/panels/bettermap/leaflet/plugins.js +0 -0
- data/lib/kibana/assets/app/panels/bettermap/module.css +0 -0
- data/lib/kibana/assets/app/panels/bettermap/module.html +0 -0
- data/lib/kibana/assets/app/panels/bettermap/module.js +0 -0
- data/lib/kibana/assets/app/panels/column/editor.html +0 -0
- data/lib/kibana/assets/app/panels/column/module.html +0 -0
- data/lib/kibana/assets/app/panels/column/module.js +0 -0
- data/lib/kibana/assets/app/panels/column/panelgeneral.html +0 -0
- data/lib/kibana/assets/app/panels/dashcontrol/editor.html +0 -0
- data/lib/kibana/assets/app/panels/dashcontrol/load.html +0 -0
- data/lib/kibana/assets/app/panels/dashcontrol/module.html +0 -0
- data/lib/kibana/assets/app/panels/dashcontrol/module.js +0 -0
- data/lib/kibana/assets/app/panels/dashcontrol/save.html +0 -0
- data/lib/kibana/assets/app/panels/dashcontrol/share.html +0 -0
- data/lib/kibana/assets/app/panels/derivequeries/editor.html +0 -0
- data/lib/kibana/assets/app/panels/derivequeries/module.html +0 -0
- data/lib/kibana/assets/app/panels/derivequeries/module.js +0 -0
- data/lib/kibana/assets/app/panels/fields/editor.html +0 -0
- data/lib/kibana/assets/app/panels/fields/micropanel.html +0 -0
- data/lib/kibana/assets/app/panels/fields/module.html +0 -0
- data/lib/kibana/assets/app/panels/fields/module.js +0 -0
- data/lib/kibana/assets/app/panels/filtering/editor.html +0 -0
- data/lib/kibana/assets/app/panels/filtering/meta.html +0 -0
- data/lib/kibana/assets/app/panels/filtering/module.html +25 -13
- data/lib/kibana/assets/app/panels/filtering/module.js +6 -2
- data/lib/kibana/assets/app/panels/histogram/editor.html +1 -1
- data/lib/kibana/assets/app/panels/histogram/interval.js +0 -0
- data/lib/kibana/assets/app/panels/histogram/module.html +26 -24
- data/lib/kibana/assets/app/panels/histogram/module.js +8 -11
- data/lib/kibana/assets/app/panels/histogram/timeSeries.js +0 -0
- data/lib/kibana/assets/app/panels/hits/editor.html +0 -0
- data/lib/kibana/assets/app/panels/hits/module.html +0 -0
- data/lib/kibana/assets/app/panels/hits/module.js +0 -0
- data/lib/kibana/assets/app/panels/map/editor.html +0 -0
- data/lib/kibana/assets/app/panels/map/lib/jquery.jvectormap.min.js +0 -0
- data/lib/kibana/assets/app/panels/map/lib/map.europe.js +0 -0
- data/lib/kibana/assets/app/panels/map/lib/map.usa.js +0 -0
- data/lib/kibana/assets/app/panels/map/lib/map.world.js +0 -0
- data/lib/kibana/assets/app/panels/map/module.html +0 -0
- data/lib/kibana/assets/app/panels/map/module.js +0 -1
- data/lib/kibana/assets/app/panels/pie/editor.html +0 -0
- data/lib/kibana/assets/app/panels/pie/module.html +0 -0
- data/lib/kibana/assets/app/panels/pie/module.js +1 -2
- data/lib/kibana/assets/app/panels/query/editor.html +0 -0
- data/lib/kibana/assets/app/panels/query/meta.html +0 -0
- data/lib/kibana/assets/app/panels/query/module.html +1 -1
- data/lib/kibana/assets/app/panels/query/module.js +0 -0
- data/lib/kibana/assets/app/panels/query/query.css +0 -0
- data/lib/kibana/assets/app/panels/table/editor.html +0 -0
- data/lib/kibana/assets/app/panels/table/micropanel.html +1 -1
- data/lib/kibana/assets/app/panels/table/module.html +2 -2
- data/lib/kibana/assets/app/panels/table/module.js +1 -3
- data/lib/kibana/assets/app/panels/table/pagination.html +0 -0
- data/lib/kibana/assets/app/panels/terms/editor.html +0 -0
- data/lib/kibana/assets/app/panels/terms/module.html +0 -0
- data/lib/kibana/assets/app/panels/terms/module.js +0 -1
- data/lib/kibana/assets/app/panels/text/editor.html +0 -0
- data/lib/kibana/assets/app/panels/text/lib/showdown.js +0 -0
- data/lib/kibana/assets/app/panels/text/module.html +0 -0
- data/lib/kibana/assets/app/panels/text/module.js +0 -0
- data/lib/kibana/assets/app/panels/timepicker/custom.html +78 -0
- data/lib/kibana/assets/app/panels/timepicker/editor.html +8 -28
- data/lib/kibana/assets/app/panels/timepicker/module.html +49 -69
- data/lib/kibana/assets/app/panels/timepicker/module.js +137 -190
- data/lib/kibana/assets/app/panels/timepicker/refreshctrl.html +0 -0
- data/lib/kibana/assets/app/panels/trends/editor.html +0 -0
- data/lib/kibana/assets/app/panels/trends/module.html +0 -0
- data/lib/kibana/assets/app/panels/trends/module.js +2 -1
- data/lib/kibana/assets/app/partials/dashLoader.html +76 -47
- data/lib/kibana/assets/app/partials/dashLoaderShare.html +0 -0
- data/lib/kibana/assets/app/partials/dashboard.html +77 -61
- data/lib/kibana/assets/app/partials/dasheditor.html +38 -17
- data/lib/kibana/assets/app/partials/inspector.html +0 -0
- data/lib/kibana/assets/app/partials/load.html +0 -0
- data/lib/kibana/assets/app/partials/modal.html +0 -0
- data/lib/kibana/assets/app/partials/paneladd.html +0 -0
- data/lib/kibana/assets/app/partials/paneleditor.html +0 -0
- data/lib/kibana/assets/app/partials/panelgeneral.html +0 -0
- data/lib/kibana/assets/app/partials/querySelect.html +0 -0
- data/lib/kibana/assets/app/partials/roweditor.html +1 -1
- data/lib/kibana/assets/app/services/alertSrv.js +0 -0
- data/lib/kibana/assets/app/services/all.js +0 -0
- data/lib/kibana/assets/app/services/dashboard.js +49 -7
- data/lib/kibana/assets/app/services/fields.js +0 -0
- data/lib/kibana/assets/app/services/filterSrv.js +79 -47
- data/lib/kibana/assets/app/services/kbnIndex.js +0 -0
- data/lib/kibana/assets/app/services/panelMove.js +1 -16
- data/lib/kibana/assets/app/services/querySrv.js +0 -0
- data/lib/kibana/assets/app/services/timer.js +0 -0
- data/lib/kibana/assets/css/animate.min.css +0 -0
- data/lib/kibana/assets/css/bootstrap-responsive.min.css +0 -0
- 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/css/font-awesome.min.css +0 -0
- data/lib/kibana/assets/css/normalize.min.css +0 -0
- data/lib/kibana/assets/css/timepicker.css +0 -0
- data/lib/kibana/assets/font/FontAwesome.otf +0 -0
- data/lib/kibana/assets/font/fontawesome-webfont.eot +0 -0
- data/lib/kibana/assets/font/fontawesome-webfont.svg +0 -0
- data/lib/kibana/assets/font/fontawesome-webfont.ttf +0 -0
- data/lib/kibana/assets/font/fontawesome-webfont.woff +0 -0
- data/lib/kibana/assets/img/glyphicons-halflings-white.png +0 -0
- data/lib/kibana/assets/img/glyphicons-halflings.png +0 -0
- data/lib/kibana/assets/img/kibana.png +0 -0
- data/lib/kibana/assets/img/load.gif +0 -0
- data/lib/kibana/assets/img/load_big.gif +0 -0
- data/lib/kibana/assets/index.html +5 -7
- data/lib/kibana/assets/vendor/angular/angular-dragdrop.js +0 -0
- data/lib/kibana/assets/vendor/angular/angular-sanitize.js +28 -26
- data/lib/kibana/assets/vendor/angular/angular-strap.js +0 -0
- data/lib/kibana/assets/vendor/angular/angular.js +3128 -1410
- data/lib/kibana/assets/vendor/angular/datepicker.js +0 -0
- data/lib/kibana/assets/vendor/angular/timepicker.js +0 -0
- data/lib/kibana/assets/vendor/bootstrap/bootstrap.js +34 -0
- data/lib/kibana/assets/vendor/bootstrap/less/accordion.less +0 -0
- data/lib/kibana/assets/vendor/bootstrap/less/alerts.less +0 -0
- data/lib/kibana/assets/vendor/bootstrap/less/bootstrap.dark.less +0 -0
- data/lib/kibana/assets/vendor/bootstrap/less/bootstrap.less +0 -0
- data/lib/kibana/assets/vendor/bootstrap/less/bootstrap.light.less +0 -0
- data/lib/kibana/assets/vendor/bootstrap/less/bootswatch.dark.less +0 -0
- data/lib/kibana/assets/vendor/bootstrap/less/bootswatch.light.less +0 -0
- data/lib/kibana/assets/vendor/bootstrap/less/breadcrumbs.less +0 -0
- data/lib/kibana/assets/vendor/bootstrap/less/button-groups.less +0 -0
- data/lib/kibana/assets/vendor/bootstrap/less/buttons.less +0 -0
- data/lib/kibana/assets/vendor/bootstrap/less/carousel.less +0 -0
- data/lib/kibana/assets/vendor/bootstrap/less/close.less +0 -0
- data/lib/kibana/assets/vendor/bootstrap/less/code.less +0 -0
- data/lib/kibana/assets/vendor/bootstrap/less/component-animations.less +0 -0
- data/lib/kibana/assets/vendor/bootstrap/less/dropdowns.less +0 -0
- data/lib/kibana/assets/vendor/bootstrap/less/forms.less +0 -0
- data/lib/kibana/assets/vendor/bootstrap/less/grid.less +0 -0
- data/lib/kibana/assets/vendor/bootstrap/less/hero-unit.less +0 -0
- data/lib/kibana/assets/vendor/bootstrap/less/labels-badges.less +0 -0
- data/lib/kibana/assets/vendor/bootstrap/less/layouts.less +0 -0
- data/lib/kibana/assets/vendor/bootstrap/less/media.less +0 -0
- data/lib/kibana/assets/vendor/bootstrap/less/mixins.less +0 -0
- data/lib/kibana/assets/vendor/bootstrap/less/modals.less +0 -0
- data/lib/kibana/assets/vendor/bootstrap/less/navbar.less +0 -0
- data/lib/kibana/assets/vendor/bootstrap/less/navs.less +0 -0
- data/lib/kibana/assets/vendor/bootstrap/less/overrides.less +221 -5
- data/lib/kibana/assets/vendor/bootstrap/less/pager.less +0 -0
- data/lib/kibana/assets/vendor/bootstrap/less/pagination.less +0 -0
- data/lib/kibana/assets/vendor/bootstrap/less/popovers.less +0 -0
- data/lib/kibana/assets/vendor/bootstrap/less/progress-bars.less +0 -0
- data/lib/kibana/assets/vendor/bootstrap/less/reset.less +0 -0
- data/lib/kibana/assets/vendor/bootstrap/less/responsive-1200px-min.less +0 -0
- data/lib/kibana/assets/vendor/bootstrap/less/responsive-767px-max.less +0 -0
- data/lib/kibana/assets/vendor/bootstrap/less/responsive-768px-979px.less +0 -0
- data/lib/kibana/assets/vendor/bootstrap/less/responsive-navbar.less +0 -0
- data/lib/kibana/assets/vendor/bootstrap/less/responsive-utilities.less +0 -0
- data/lib/kibana/assets/vendor/bootstrap/less/responsive.less +0 -0
- data/lib/kibana/assets/vendor/bootstrap/less/scaffolding.less +0 -0
- data/lib/kibana/assets/vendor/bootstrap/less/sprites.less +0 -0
- data/lib/kibana/assets/vendor/bootstrap/less/tables.less +0 -0
- data/lib/kibana/assets/vendor/bootstrap/less/tests/buttons.html +0 -0
- data/lib/kibana/assets/vendor/bootstrap/less/tests/css-tests.css +0 -0
- data/lib/kibana/assets/vendor/bootstrap/less/tests/css-tests.html +0 -0
- data/lib/kibana/assets/vendor/bootstrap/less/tests/forms-responsive.html +0 -0
- data/lib/kibana/assets/vendor/bootstrap/less/tests/forms.html +0 -0
- data/lib/kibana/assets/vendor/bootstrap/less/tests/navbar-fixed-top.html +0 -0
- data/lib/kibana/assets/vendor/bootstrap/less/tests/navbar-static-top.html +0 -0
- data/lib/kibana/assets/vendor/bootstrap/less/tests/navbar.html +0 -0
- data/lib/kibana/assets/vendor/bootstrap/less/thumbnails.less +0 -0
- data/lib/kibana/assets/vendor/bootstrap/less/tooltip.less +0 -0
- data/lib/kibana/assets/vendor/bootstrap/less/type.less +0 -0
- data/lib/kibana/assets/vendor/bootstrap/less/utilities.less +0 -0
- data/lib/kibana/assets/vendor/bootstrap/less/variables.dark.less +0 -0
- data/lib/kibana/assets/vendor/bootstrap/less/variables.less +0 -0
- data/lib/kibana/assets/vendor/bootstrap/less/variables.light.less +0 -0
- data/lib/kibana/assets/vendor/bootstrap/less/wells.less +0 -0
- data/lib/kibana/assets/vendor/elasticjs/elastic-angular-client.js +0 -0
- data/lib/kibana/assets/vendor/elasticjs/elastic.js +0 -0
- data/lib/kibana/assets/vendor/filesaver.js +0 -0
- data/lib/kibana/assets/vendor/jquery/jquery-1.8.0.js +0 -0
- data/lib/kibana/assets/vendor/jquery/jquery-ui-1.10.3.js +0 -0
- data/lib/kibana/assets/vendor/jquery/jquery.flot.js +0 -0
- data/lib/kibana/assets/vendor/jquery/jquery.flot.pie.js +0 -0
- data/lib/kibana/assets/vendor/jquery/jquery.flot.selection.js +0 -0
- data/lib/kibana/assets/vendor/jquery/jquery.flot.stack.js +0 -0
- data/lib/kibana/assets/vendor/jquery/jquery.flot.stackpercent.js +0 -0
- data/lib/kibana/assets/vendor/jquery/jquery.flot.time.js +0 -0
- data/lib/kibana/assets/vendor/modernizr-2.6.1.js +0 -0
- data/lib/kibana/assets/vendor/moment.js +0 -0
- data/lib/kibana/assets/vendor/require/css-build.js +0 -0
- data/lib/kibana/assets/vendor/require/css.js +0 -0
- data/lib/kibana/assets/vendor/require/require.js +0 -0
- data/lib/kibana/assets/vendor/require/text.js +0 -0
- data/lib/kibana/assets/vendor/require/tmpl.js +0 -0
- data/lib/kibana/assets/vendor/timezone.js +0 -0
- data/lib/kibana/assets/vendor/underscore.js +0 -0
- data/lib/kibana/sinatra/version.rb +1 -1
- data/lib/tasks/update.rb +51 -0
- metadata +34 -3
- data/lib/kibana/assets/css/main.css +0 -193
@@ -1,6 +1,6 @@
|
|
1
1
|
/*
|
2
2
|
|
3
|
-
##
|
3
|
+
## Timepicker2
|
4
4
|
|
5
5
|
### Parameters
|
6
6
|
* mode :: The default mode of the panel. Options: 'relative', 'absolute' 'since' Default: 'relative'
|
@@ -25,7 +25,7 @@ function (angular, app, _, moment, kbn) {
|
|
25
25
|
var module = angular.module('kibana.panels.timepicker', []);
|
26
26
|
app.useModule(module);
|
27
27
|
|
28
|
-
module.controller('timepicker', function($scope, $
|
28
|
+
module.controller('timepicker', function($scope, $modal, $q, filterSrv) {
|
29
29
|
$scope.panelMeta = {
|
30
30
|
status : "Stable",
|
31
31
|
description : "A panel for controlling the time range filters. If you have time based data, "+
|
@@ -36,233 +36,180 @@ function (angular, app, _, moment, kbn) {
|
|
36
36
|
// Set and populate defaults
|
37
37
|
var _d = {
|
38
38
|
status : "Stable",
|
39
|
-
mode : "relative",
|
40
39
|
time_options : ['5m','15m','1h','6h','12h','24h','2d','7d','30d'],
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
refresh : {
|
45
|
-
enable : false,
|
46
|
-
interval: 30,
|
47
|
-
min : 3
|
48
|
-
}
|
40
|
+
refresh_intervals : ['5s','10s','30s','1m','5m','15m','30m','1h','2h','1d'],
|
41
|
+
|
42
|
+
timefield : '@timestamp'
|
49
43
|
};
|
50
44
|
_.defaults($scope.panel,_d);
|
51
45
|
|
46
|
+
var customTimeModal = $modal({
|
47
|
+
template: './app/panels/timepicker/custom.html',
|
48
|
+
persist: true,
|
49
|
+
show: false,
|
50
|
+
scope: $scope,
|
51
|
+
keyboard: false
|
52
|
+
});
|
53
|
+
|
54
|
+
$scope.filterSrv = filterSrv;
|
55
|
+
|
56
|
+
// ng-pattern regexs
|
57
|
+
$scope.patterns = {
|
58
|
+
date: /^[0-9]{2}\/[0-9]{2}\/[0-9]{4}$/,
|
59
|
+
hour: /^([01]?[0-9]|2[0-3])$/,
|
60
|
+
minute: /^[0-5][0-9]$/,
|
61
|
+
second: /^[0-5][0-9]$/,
|
62
|
+
millisecond: /^[0-9]*$/
|
63
|
+
};
|
64
|
+
|
65
|
+
$scope.$on('refresh', function(){$scope.init();});
|
66
|
+
|
52
67
|
$scope.init = function() {
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
// Init a private time object with Date() objects depending on mode
|
59
|
-
switch($scope.panel.mode) {
|
60
|
-
case 'absolute':
|
61
|
-
$scope.time = {
|
62
|
-
from : moment($scope.panel.time.from,'MM/DD/YYYY HH:mm:ss') || moment(kbn.time_ago($scope.panel.timespan)),
|
63
|
-
to : moment($scope.panel.time.to,'MM/DD/YYYY HH:mm:ss') || moment()
|
64
|
-
};
|
65
|
-
break;
|
66
|
-
case 'since':
|
67
|
-
$scope.time = {
|
68
|
-
from : moment($scope.panel.time.from,'MM/DD/YYYY HH:mm:ss') || moment(kbn.time_ago($scope.panel.timespan)),
|
69
|
-
to : moment()
|
70
|
-
};
|
71
|
-
break;
|
72
|
-
case 'relative':
|
73
|
-
$scope.time = {
|
74
|
-
from : moment(kbn.time_ago($scope.panel.timespan)),
|
75
|
-
to : moment()
|
76
|
-
};
|
77
|
-
break;
|
78
|
-
}
|
79
|
-
$scope.time.field = $scope.panel.timefield;
|
80
|
-
// These 3 statements basicly do everything time_apply() does
|
81
|
-
set_timepicker($scope.time.from,$scope.time.to);
|
82
|
-
update_panel();
|
83
|
-
|
84
|
-
// If we're in a mode where something must be calculated, clear existing filters
|
85
|
-
// and set new ones
|
86
|
-
if($scope.panel.mode !== 'absolute') {
|
87
|
-
set_time_filter($scope.time);
|
68
|
+
var time = filterSrv.timeRange('last');
|
69
|
+
if(time) {
|
70
|
+
$scope.panel.now = filterSrv.timeRange(false).to === "now" ? true : false;
|
71
|
+
$scope.time = getScopeTimeObj(time.from,time.to);
|
88
72
|
}
|
73
|
+
};
|
89
74
|
|
90
|
-
|
91
|
-
|
75
|
+
$scope.customTime = function() {
|
76
|
+
// Assume the form is valid since we're setting it to something valid
|
77
|
+
$scope.input.$setValidity("dummy", true);
|
78
|
+
$scope.temptime = cloneTime($scope.time);
|
92
79
|
|
93
|
-
//
|
94
|
-
|
95
|
-
|
96
|
-
}
|
80
|
+
// Date picker needs the date to be at the start of the day
|
81
|
+
$scope.temptime.from.date.setHours(0,0,0,0);
|
82
|
+
$scope.temptime.to.date.setHours(0,0,0,0);
|
97
83
|
|
98
|
-
|
99
|
-
|
100
|
-
if(filterSrv.idsByType('time').length > 0) {
|
101
|
-
var time = filterSrv.timeRange('min');
|
102
|
-
|
103
|
-
if($scope.time.from.diff(moment.utc(time.from),'seconds') !== 0 ||
|
104
|
-
$scope.time.to.diff(moment.utc(time.to),'seconds') !== 0)
|
105
|
-
{
|
106
|
-
$scope.set_mode('absolute');
|
107
|
-
|
108
|
-
// These 3 statements basicly do everything time_apply() does
|
109
|
-
set_timepicker(moment(time.from),moment(time.to));
|
110
|
-
$scope.time = $scope.time_calc();
|
111
|
-
update_panel();
|
112
|
-
}
|
113
|
-
}
|
84
|
+
$q.when(customTimeModal).then(function(modalEl) {
|
85
|
+
modalEl.modal('show');
|
114
86
|
});
|
115
87
|
};
|
116
88
|
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
89
|
+
// Constantly validate the input of the fields. This function does not change any date variables
|
90
|
+
// outside of its own scope
|
91
|
+
$scope.validate = function(time) {
|
92
|
+
// Assume the form is valid. There is a hidden dummy input for invalidating it programatically.
|
93
|
+
$scope.input.$setValidity("dummy", true);
|
94
|
+
|
95
|
+
var _from = datepickerToLocal(time.from.date),
|
96
|
+
_to = datepickerToLocal(time.to.date),
|
97
|
+
_t = time;
|
98
|
+
|
99
|
+
if($scope.input.$valid) {
|
100
|
+
|
101
|
+
_from.setHours(_t.from.hour,_t.from.minute,_t.from.second,_t.from.millisecond);
|
102
|
+
_to.setHours(_t.to.hour,_t.to.minute,_t.to.second,_t.to.millisecond);
|
103
|
+
|
104
|
+
// Check that the objects are valid and to is after from
|
105
|
+
if(isNaN(_from.getTime()) || isNaN(_to.getTime()) || _from.getTime() >= _to.getTime()) {
|
106
|
+
$scope.input.$setValidity("dummy", false);
|
107
|
+
return false;
|
124
108
|
}
|
125
|
-
timer.cancel($scope.refresh_timer);
|
126
|
-
$scope.refresh();
|
127
109
|
} else {
|
128
|
-
|
110
|
+
return false;
|
129
111
|
}
|
112
|
+
|
113
|
+
return {from:_from,to:_to};
|
130
114
|
};
|
131
115
|
|
132
|
-
$scope.
|
133
|
-
|
134
|
-
timer.cancel($scope.refresh_timer);
|
135
|
-
$scope.refresh_timer = timer.register($timeout(function() {
|
136
|
-
$scope.refresh();
|
137
|
-
$scope.time_apply();
|
138
|
-
},$scope.panel.refresh.interval*1000));
|
139
|
-
} else {
|
140
|
-
timer.cancel($scope.refresh_timer);
|
141
|
-
}
|
116
|
+
$scope.setNow = function() {
|
117
|
+
$scope.time.to = getTimeObj(new Date());
|
142
118
|
};
|
143
119
|
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
if($scope.panel.mode !== 'relative') {
|
149
|
-
$scope.panel.time = {
|
150
|
-
from : $scope.time.from.format("MM/DD/YYYY HH:mm:ss"),
|
151
|
-
to : $scope.time.to.format("MM/DD/YYYY HH:mm:ss"),
|
152
|
-
};
|
153
|
-
} else {
|
154
|
-
delete $scope.panel.time;
|
120
|
+
/*
|
121
|
+
time : {
|
122
|
+
from: Date
|
123
|
+
to: Date
|
155
124
|
}
|
156
|
-
|
125
|
+
*/
|
126
|
+
$scope.setAbsoluteTimeFilter = function (time) {
|
157
127
|
|
158
|
-
|
159
|
-
|
160
|
-
$scope.panel.refresh.enable = mode === 'absolute' ?
|
161
|
-
false : $scope.panel.refresh.enable;
|
128
|
+
// Create filter object
|
129
|
+
var _filter = _.clone(time);
|
162
130
|
|
163
|
-
|
164
|
-
|
131
|
+
_filter.type = 'time';
|
132
|
+
_filter.field = $scope.panel.timefield;
|
165
133
|
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
date : moment().format("MM/DD/YYYY")
|
170
|
-
};
|
171
|
-
};
|
134
|
+
if($scope.panel.now) {
|
135
|
+
_filter.to = "now";
|
136
|
+
}
|
172
137
|
|
173
|
-
|
174
|
-
|
175
|
-
$scope.timepicker.from = {
|
176
|
-
time : moment(kbn.time_ago(timespan)).format("HH:mm:ss"),
|
177
|
-
date : moment(kbn.time_ago(timespan)).format("MM/DD/YYYY")
|
178
|
-
};
|
179
|
-
$scope.time_apply();
|
180
|
-
};
|
138
|
+
// Clear all time filters, set a new one
|
139
|
+
filterSrv.removeByType('time',true);
|
181
140
|
|
182
|
-
|
183
|
-
$scope.
|
184
|
-
};
|
141
|
+
// Set the filter
|
142
|
+
$scope.panel.filter_id = filterSrv.set(_filter);
|
185
143
|
|
186
|
-
|
187
|
-
|
188
|
-
var from,to;
|
189
|
-
// If time picker is defined (usually is) TOFIX: Horrible parsing
|
190
|
-
if(!(_.isUndefined($scope.timepicker))) {
|
191
|
-
from = $scope.panel.mode === 'relative' ? moment(kbn.time_ago($scope.panel.timespan)) :
|
192
|
-
moment(moment($scope.timepicker.from.date).format('MM/DD/YYYY') + " " + $scope.timepicker.from.time,'MM/DD/YYYY HH:mm:ss');
|
193
|
-
to = $scope.panel.mode !== 'absolute' ? moment() :
|
194
|
-
moment(moment($scope.timepicker.to.date).format('MM/DD/YYYY') + " " + $scope.timepicker.to.time,'MM/DD/YYYY HH:mm:ss');
|
195
|
-
// Otherwise (probably initialization)
|
196
|
-
} else {
|
197
|
-
from = $scope.panel.mode === 'relative' ? moment(kbn.time_ago($scope.panel.timespan)) :
|
198
|
-
$scope.time.from;
|
199
|
-
to = $scope.panel.mode !== 'absolute' ? moment() :
|
200
|
-
$scope.time.to;
|
201
|
-
}
|
144
|
+
// Update our representation
|
145
|
+
$scope.time = getScopeTimeObj(time.from,time.to);
|
202
146
|
|
203
|
-
|
204
|
-
|
205
|
-
}
|
147
|
+
return $scope.panel.filter_id;
|
148
|
+
};
|
206
149
|
|
207
|
-
|
208
|
-
set_timepicker(from,to);
|
209
|
-
});
|
150
|
+
$scope.setRelativeFilter = function(timespan) {
|
210
151
|
|
211
|
-
|
212
|
-
|
213
|
-
|
152
|
+
$scope.panel.now = true;
|
153
|
+
// Create filter object
|
154
|
+
var _filter = {
|
155
|
+
type : 'time',
|
156
|
+
field : $scope.panel.timefield,
|
157
|
+
from : "now-"+timespan,
|
158
|
+
to: "now"
|
214
159
|
};
|
215
|
-
};
|
216
160
|
|
217
|
-
|
218
|
-
|
219
|
-
// Update internal time object
|
161
|
+
// Clear all time filters, set a new one
|
162
|
+
filterSrv.removeByType('time',true);
|
220
163
|
|
221
|
-
//
|
222
|
-
filterSrv.
|
164
|
+
// Set the filter
|
165
|
+
$scope.panel.filter_id = filterSrv.set(_filter);
|
223
166
|
|
167
|
+
// Update our representation
|
168
|
+
$scope.time = getScopeTimeObj(kbn.parseDate(_filter.from),new Date());
|
224
169
|
|
225
|
-
|
226
|
-
|
170
|
+
return $scope.panel.filter_id;
|
171
|
+
};
|
227
172
|
|
228
|
-
|
229
|
-
|
173
|
+
var pad = function(n, width, z) {
|
174
|
+
z = z || '0';
|
175
|
+
n = n + '';
|
176
|
+
return n.length >= width ? n : new Array(width - n.length + 1).join(z) + n;
|
177
|
+
};
|
230
178
|
|
231
|
-
|
179
|
+
var cloneTime = function(time) {
|
180
|
+
var _n = {
|
181
|
+
from: _.clone(time.from),
|
182
|
+
to: _.clone(time.to)
|
183
|
+
};
|
184
|
+
// Create new dates as _.clone is shallow.
|
185
|
+
_n.from.date = new Date(_n.from.date);
|
186
|
+
_n.to.date = new Date(_n.to.date);
|
187
|
+
return _n;
|
188
|
+
};
|
232
189
|
|
190
|
+
var getScopeTimeObj = function(from,to) {
|
191
|
+
return {
|
192
|
+
from: getTimeObj(from),
|
193
|
+
to: getTimeObj(to)
|
194
|
+
};
|
233
195
|
};
|
234
|
-
$scope.$watch('panel.mode', $scope.time_apply);
|
235
196
|
|
236
|
-
function
|
237
|
-
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
// Prefer to pass around Date() objects since interacting with
|
245
|
-
// moment objects in libraries that are expecting Date()s can be tricky
|
246
|
-
function compile_time(time) {
|
247
|
-
time = _.clone(time);
|
248
|
-
time.from = time.from.toDate();
|
249
|
-
time.to = time.to.toDate();
|
250
|
-
return time;
|
251
|
-
}
|
252
|
-
|
253
|
-
function set_timepicker(from,to) {
|
254
|
-
// Janky 0s timeout to get around $scope queue processing view issue
|
255
|
-
$scope.timepicker = {
|
256
|
-
from : {
|
257
|
-
time : from.format("HH:mm:ss"),
|
258
|
-
date : from.format("MM/DD/YYYY")
|
259
|
-
},
|
260
|
-
to : {
|
261
|
-
time : to.format("HH:mm:ss"),
|
262
|
-
date : to.format("MM/DD/YYYY")
|
263
|
-
}
|
197
|
+
var getTimeObj = function(date) {
|
198
|
+
return {
|
199
|
+
date: new Date(date),
|
200
|
+
hour: pad(date.getHours(),2),
|
201
|
+
minute: pad(date.getMinutes(),2),
|
202
|
+
second: pad(date.getSeconds(),2),
|
203
|
+
millisecond: pad(date.getMilliseconds(),3)
|
264
204
|
};
|
265
|
-
}
|
205
|
+
};
|
206
|
+
|
207
|
+
// Do not use the results of this function unless you plan to use setHour/Minutes/etc on the result
|
208
|
+
var datepickerToLocal = function(date) {
|
209
|
+
date = moment(date).clone().toDate();
|
210
|
+
return moment(new Date(date.getTime() + date.getTimezoneOffset() * 60000)).toDate();
|
211
|
+
};
|
212
|
+
|
266
213
|
|
267
214
|
});
|
268
|
-
});
|
215
|
+
});
|
File without changes
|
File without changes
|
File without changes
|
@@ -87,7 +87,8 @@ function (angular, app, _, kbn) {
|
|
87
87
|
timeField = timeField[0];
|
88
88
|
}
|
89
89
|
|
90
|
-
|
90
|
+
// This logic can be simplifie greatly with the new kbn.parseDate
|
91
|
+
$scope.time = filterSrv.timeRange('last');
|
91
92
|
$scope.old_time = {
|
92
93
|
from : new Date($scope.time.from.getTime() - kbn.interval_to_ms($scope.panel.ago)),
|
93
94
|
to : new Date($scope.time.to.getTime() - kbn.interval_to_ms($scope.panel.ago))
|
@@ -1,37 +1,23 @@
|
|
1
|
+
<style>
|
2
|
+
.noarrow>a:after {
|
3
|
+
display: none !important;
|
4
|
+
}
|
5
|
+
</style>
|
1
6
|
|
2
|
-
<li
|
7
|
+
<li ng-repeat="pulldown in dashboard.current.nav" ng-controller="PulldownCtrl" ng-show="pulldown.enable"><kibana-simple-panel type="pulldown.type" panel="pulldown" ng-cloak></kibana-simple-panel></li>
|
3
8
|
|
9
|
+
<li><a bs-tooltip="'Goto saved default'" data-placement="bottom" href='#/dashboard'><i class='icon-home'></i></a></li>
|
4
10
|
<li class="dropdown" bs-tooltip="'Load'" data-placement="bottom" ng-show="showDropdown('load')" >
|
5
11
|
<a href="#" class="dropdown-toggle" data-toggle="dropdown" ng-click="elasticsearch_dblist('title:'+elasticsearch.query+'*')">
|
6
12
|
<i class='icon-folder-open'></i>
|
7
13
|
</a>
|
14
|
+
|
15
|
+
|
8
16
|
<ul class="dropdown-menu" style="padding:10px">
|
9
|
-
<li ng-show='loader.
|
10
|
-
<
|
11
|
-
<form>
|
12
|
-
<input type="file" id="dashupload" dash-upload /><br>
|
13
|
-
</form>
|
14
|
-
</li>
|
15
|
-
<li ng-show='loader.load_gist'>
|
16
|
-
<h5>Gist <tip>Enter a gist number or url</tip></h5>
|
17
|
-
<form>
|
18
|
-
<input type="text" ng-model="gist.url"/ placeholder="Gist number or URL"><br>
|
19
|
-
<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>
|
20
|
-
<h6 ng-show="gist.files.length">Dashboards in gist:{{gist.url | gistid}} <small>click to load</small></h6>
|
21
|
-
<h6 ng-hide="gist.files.length">No gist dashboards found</h6>
|
22
|
-
<table class="table table-condensed table-striped">
|
23
|
-
<tr ng-repeat="file in gist.files">
|
24
|
-
<td><a ng-click="dashboard.dash_load(file)">{{file.title}}</a></td>
|
25
|
-
</tr>
|
26
|
-
</table>
|
27
|
-
</form>
|
28
|
-
</li>
|
29
|
-
<li ng-show='loader.load_elasticsearch'>
|
30
|
-
<h5>Elasticsearch</h5>
|
31
|
-
<form>
|
17
|
+
<li ng-show='dashboard.current.loader.load_elasticsearch'>
|
18
|
+
<form class="nomargin">
|
32
19
|
<input type="text" ng-model="elasticsearch.query" ng-change="elasticsearch_dblist('title:'+elasticsearch.query+'*')" placeholder="Type to filter"/>
|
33
20
|
</form>
|
34
|
-
<h6 ng-show="elasticsearch.dashboards.length">Elasticsearch stored dashboards</h6>
|
35
21
|
<h6 ng-hide="elasticsearch.dashboards.length">No dashboards matching your query found</h6>
|
36
22
|
<table class="table table-condensed table-striped">
|
37
23
|
<tr ng-repeat="row in elasticsearch.dashboards | orderBy:['_id']">
|
@@ -41,38 +27,81 @@
|
|
41
27
|
</tr>
|
42
28
|
</table>
|
43
29
|
</li>
|
30
|
+
|
31
|
+
<li class="dropdown-submenu noarrow">
|
32
|
+
<a tabindex="-1" href="#" class="small" style="padding:0"><i class="icon-caret-left"></i> Advanced</a>
|
33
|
+
<ul class="dropdown-menu" style="padding:10px">
|
34
|
+
<li ng-show='dashboard.current.loader.load_local'>
|
35
|
+
<h5>Local File <tip>Load dashboard JSON layout from file</tip></h5>
|
36
|
+
<form>
|
37
|
+
<input type="file" id="dashupload" dash-upload /><br>
|
38
|
+
</form>
|
39
|
+
</li>
|
40
|
+
<li ng-show='dashboard.current.loader.load_gist'>
|
41
|
+
<h5>Gist <tip>Enter a gist number or url</tip></h5>
|
42
|
+
<form>
|
43
|
+
<input type="text" ng-model="gist.url"/ placeholder="Gist number or URL"><br>
|
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
|
+
<h6 ng-show="gist.files.length">Dashboards in gist:{{gist.url | gistid}} <small>click to load</small></h6>
|
46
|
+
<h6 ng-hide="gist.files.length || !gist.url.length">No gist dashboards found</h6>
|
47
|
+
<table class="table table-condensed table-striped">
|
48
|
+
<tr ng-repeat="file in gist.files">
|
49
|
+
<td><a ng-click="dashboard.dash_load(file)">{{file.title}}</a></td>
|
50
|
+
</tr>
|
51
|
+
</table>
|
52
|
+
</form>
|
53
|
+
</li>
|
54
|
+
</ul>
|
55
|
+
</li>
|
56
|
+
|
44
57
|
</ul>
|
58
|
+
|
59
|
+
|
45
60
|
</li>
|
46
61
|
<li class="dropdown" bs-tooltip="'Save'" data-placement="bottom" ng-show="showDropdown('save')">
|
47
62
|
<a href="#" class="dropdown-toggle" data-toggle="dropdown">
|
48
63
|
<i class='icon-save'></i>
|
49
64
|
</a>
|
65
|
+
|
66
|
+
|
50
67
|
<ul class="dropdown-menu" style="padding:10px">
|
51
|
-
|
52
|
-
|
53
|
-
<
|
54
|
-
<
|
55
|
-
<li><a class="link" ng-show="loader.save_default" ng-click="set_default()"><i class="icon-bookmark"></i> Set as Browser Default</a> <tip>Store dashboard preference to browser's localStorage</tip></li>
|
56
|
-
<li><a class="link" ng-show="loader.save_default" ng-click="purge_default()"><i class="icon-ban-circle"></i> Clear Browser Default</a></li>
|
57
|
-
</ul>
|
58
|
-
</li>
|
59
|
-
<li ng-show="loader.save_gist">
|
60
|
-
<h5>Gist</h5>
|
61
|
-
<form class="input-append">
|
62
|
-
<input class='input-medium' placeholder='Title' type="text" ng-model="gist.title"/>
|
63
|
-
<button class="btn" ng-click="save_gist()"><i class="icon-github-alt"></i></button>
|
64
|
-
</form><br>
|
65
|
-
<small ng-show="gist.last">Last gist: <a target="_blank" href="{{gist.last}}">{{gist.last}}</a></small>
|
66
|
-
</li>
|
67
|
-
<li ng-show="loader.save_elasticsearch">
|
68
|
-
<h5>Elasticsearch</h5>
|
69
|
-
<form class="input-append">
|
70
|
-
<input class='input-medium' placeholder="{{dashboard.current.title}}" type="text" ng-model="elasticsearch.title"/>
|
68
|
+
|
69
|
+
<li ng-show="dashboard.current.loader.save_elasticsearch">
|
70
|
+
<form class="input-append nomargin">
|
71
|
+
<input class='input-medium' ng-model="dashboard.current.title" type="text" ng-model="elasticsearch.title"/>
|
71
72
|
<button class="btn" ng-click="elasticsearch_save('dashboard')"><i class="icon-save"></i></button>
|
72
73
|
</form>
|
73
74
|
</li>
|
75
|
+
|
76
|
+
<li class="dropdown-submenu noarrow">
|
77
|
+
<a tabindex="-1" href="#" class="small" style="padding:0"><i class="icon-caret-left"></i> Advanced</a>
|
78
|
+
<ul class="dropdown-menu">
|
79
|
+
|
80
|
+
<li ng-show="dashboard.current.loader.save_default">
|
81
|
+
<a class="link" ng-click="set_default()">Set as my home</a>
|
82
|
+
</li>
|
83
|
+
<li ng-show="dashboard.current.loader.save_default">
|
84
|
+
<a class="link" ng-click="purge_default()">Clear my home</a>
|
85
|
+
</li>
|
86
|
+
<li ng-show="dashboard.current.loader.save_local">
|
87
|
+
<a class="link" ng-click="dashboard.to_file()">Export schema</a>
|
88
|
+
</li>
|
89
|
+
|
90
|
+
<li ng-show="dashboard.current.loader.save_gist" style="margin:10px">
|
91
|
+
<h6>Gist</h6>
|
92
|
+
<form class="input-append">
|
93
|
+
<input class='input-medium' placeholder='Title' type="text" ng-model="gist.title"/>
|
94
|
+
<button class="btn" ng-click="save_gist()"><i class="icon-github-alt"></i></button>
|
95
|
+
</form><br>
|
96
|
+
<small ng-show="gist.last">Last gist: <a target="_blank" href="{{gist.last}}">{{gist.last}}</a></small>
|
97
|
+
</li>
|
98
|
+
</ul>
|
99
|
+
</li>
|
74
100
|
</ul>
|
101
|
+
|
102
|
+
|
75
103
|
</li>
|
76
|
-
<li ng-show="showDropdown('share')"><a bs-tooltip="'Share'" data-placement="bottom" ng-click="elasticsearch_save('temp',loader.save_temp_ttl)" bs-modal="'app/partials/dashLoaderShare.html'"><i class='icon-share'></i></a></li>
|
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
|
+
|
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>
|
77
107
|
|
78
|
-
<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>
|