The open and composable observability and data visualization platform. Visualize metrics, logs, and traces from multiple sources like Prometheus, Loki, Elasticsearch, InfluxDB, Postgres and many more.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 
grafana/7ab2a5349a^...0f551acc76.patch

368 lines
17 KiB

From ea62d4aea330fc6cd547b17438755e0f7b571b33 Mon Sep 17 00:00:00 2001
From: Rashid Khan <rashidkpc@gmail.com>
Date: Wed, 11 Sep 2013 15:42:03 -0700
Subject: [PATCH 1/5] Added pointer to chart hovers
---
panels/histogram/module.html | 10 +++++-----
panels/pie/module.html | 4 ++--
panels/terms/module.html | 12 ++++++------
3 files changed, 13 insertions(+), 13 deletions(-)
diff --git a/panels/histogram/module.html b/panels/histogram/module.html
index 5d76715..4ce6b6a 100644
--- a/panels/histogram/module.html
+++ b/panels/histogram/module.html
@@ -8,10 +8,10 @@
display:inline-block;
height:10px;
width:10px;
- border-radius:5px;
+ border-radius:5px;
}
.histogram-legend-item {
- display:inline-block;
+ display:inline-block;
}
.histogram-chart {
position:relative;
@@ -23,7 +23,7 @@
<div>
<span ng-show='panel.zoomlinks && data'>
<!--<a class='small' ng-click='zoom(0.5)'><i class='icon-zoom-in'></i> Zoom In</a>-->
- <a class='small' ng-click='zoom(2)'><i class='icon-zoom-out'></i> Zoom Out</a> |
+ <a class='small' ng-click='zoom(2)'><i class='icon-zoom-out'></i> Zoom Out</a> |
</span>
<span ng-show="panel.legend" ng-repeat='series in data' class="histogram-legend">
<i class='icon-circle' ng-style="{color: series.info.color}"></i>
@@ -32,5 +32,5 @@
<span ng-show="panel.legend" class="small"><span ng-show="panel.value_field && panel.mode != 'count'">{{panel.value_field}}</span> {{panel.mode}} per <strong>{{panel.interval}}</strong> | (<strong>{{hits}}</strong> hits)</span>
</div>
<center><img ng-show='panel.loading && _.isUndefined(data)' src="common/img/load_big.gif"></center>
- <div histogram-chart class="histogram-chart" params="{{panel}}"></div>
-</kibana-panel>
\ No newline at end of file
+ <div histogram-chart class="pointer histogram-chart" params="{{panel}}"></div>
+</kibana-panel>
\ No newline at end of file
diff --git a/panels/pie/module.html b/panels/pie/module.html
index a36cf2c..f089586 100644
--- a/panels/pie/module.html
+++ b/panels/pie/module.html
@@ -8,9 +8,9 @@
</div><br>
<div style="clear:both"></div>
- <div pie params="{{panel}}" style="position:relative"></div>
+ <div pie class="pointer" params="{{panel}}" style="position:relative"></div>
<div ng-show="panel.legend == 'below'" ng-repeat="query in legend" style="float:left;padding-left: 10px;">
<span ng-show='panel.chart != "none"'><i class="icon-circle" ng-style="{color:query.color}"></i></span><span class="small"> {{query.label}} ({{query.data[0][1]}}) </span></span>
</div>
-</kibana-panel>
\ No newline at end of file
+</kibana-panel>
\ No newline at end of file
diff --git a/panels/terms/module.html b/panels/terms/module.html
index 814729c..70b870b 100644
--- a/panels/terms/module.html
+++ b/panels/terms/module.html
@@ -5,7 +5,7 @@
<!-- START Pie or bar chart -->
<div ng-show="panel.counter_pos == 'above' && (panel.chart == 'bar' || panel.chart == 'pie')" id='{{$id}}-legend'>
<!-- vertical legend above -->
- <table class="small" ng-show="panel.arrangement == 'vertical'">
+ <table class="small" ng-show="panel.arrangement == 'vertical'">
<tr ng-repeat="term in legend">
<td><i class="icon-circle" ng-style="{color:term.color}"></i></td> <td style="padding-right:10px;padding-left:10px;">{{term.label}}</td><td>{{term.data[0][1]}}</td>
</tr>
@@ -21,11 +21,11 @@
<!-- keep legend from over lapping -->
<div style="clear:both"></div>
- <div ng-show="panel.chart == 'pie' || panel.chart == 'bar'" terms-chart params="{{panel}}" style="position:relative"></div>
+ <div ng-show="panel.chart == 'pie' || panel.chart == 'bar'" terms-chart params="{{panel}}" style="position:relative" class="pointer"></div>
<div ng-show="panel.counter_pos == 'below' && (panel.chart == 'bar' || panel.chart == 'pie')" id='{{$id}}-legend'>
<!-- vertical legend below -->
- <table class="small" ng-show="panel.arrangement == 'vertical'">
+ <table class="small" ng-show="panel.arrangement == 'vertical'">
<tr ng-repeat="term in legend">
<td><i class="icon-circle" ng-style="{color:term.color}"></i></i></td> <td style="padding-right:10px;padding-left:10px;">{{term.label}}</td><td>{{term.data[0][1]}}</td>
</tr>
@@ -39,7 +39,7 @@
</div>
<!-- END Pie or Bar chart -->
- <table ng-style="panel.style" class="table table-striped table-condensed" ng-show="panel.chart == 'table'">
+ <table ng-style="panel.style" class="table table-striped table-condensed" ng-show="panel.chart == 'table'">
<thead>
<th>Term</th> <th>Count</th> <th>Action</th>
</thead>
@@ -48,11 +48,11 @@
<td>{{term.data[0][1]}}</td>
<td>
<span ng-hide="term.meta == 'other'">
- <i class='icon-search pointer' ng-click="build_search(term)"></i>
+ <i class='icon-search pointer' ng-click="build_search(term)"></i>
<i class='icon-ban-circle pointer' ng-click="build_search(term,true)"></i>
</span>
</td>
</tr>
</table>
-</kibana-panel>
\ No newline at end of file
+</kibana-panel>
\ No newline at end of file
--
1.8.4
From b63af822c75342a39362e4aef3693ed50cdebe44 Mon Sep 17 00:00:00 2001
From: Rashid Khan <rashidkpc@gmail.com>
Date: Wed, 11 Sep 2013 15:58:53 -0700
Subject: [PATCH 2/5] Cleaned up timepicker layout
---
panels/timepicker/module.html | 43 ++++++++++++++++++++++++-------------------
1 file changed, 24 insertions(+), 19 deletions(-)
diff --git a/panels/timepicker/module.html b/panels/timepicker/module.html
index 2c89289..c327b42 100644
--- a/panels/timepicker/module.html
+++ b/panels/timepicker/module.html
@@ -1,36 +1,41 @@
<kibana-panel ng-controller='timepicker' ng-init="init()">
- <div class="row-fluid" ng-switch="panel.mode" ng-show="filterSrv.idsByType('time').length > 0">
- <div ng-switch-when="absolute">
- <div class="span5">
+ <style>
+ .timepicker-block {
+ display: inline-block;
+ }
+ </style>
+
+ <div class="row-fluid form-horizontal" ng-switch="panel.mode" ng-show="filterSrv.idsByType('time').length > 0">
+ <div ng-switch-when="absolute" >
+ <div class="timepicker-block">
<form class="nomargin">
<label><small>From</small></label>
- <input type="text" class="input-smaller" ng-change="time_check()" ng-model="timepicker.from.date" data-date-format="mm/dd/yyyy" bs-datepicker>
+ <input type="text" class="input-smaller" ng-change="time_check()" ng-model="timepicker.from.date" data-date-format="mm/dd/yyyy" bs-datepicker>
<input type="text" class="input-mini" ng-change="time_check()" data-show-meridian="false" data-show-seconds="true" ng-model="timepicker.from.time" bs-timepicker>
</form>
</div>
- <div class="span5" style="margin-left:10px">
+ <div class="timepicker-block" style="margin-left:10px">
<form class="nomargin">
<label style="margin-left:5px"><small>To (<a ng-click="to_now()">now</a>)</small></label>
- <input type="text" class="input-smaller" ng-change="time_check()" ng-model="timepicker.to.date" data-date-format="mm/dd/yyyy" bs-datepicker>
+ <input type="text" class="input-smaller" ng-change="time_check()" ng-model="timepicker.to.date" data-date-format="mm/dd/yyyy" bs-datepicker>
<input type="text" class="input-mini" ng-change="time_check()" data-show-meridian="false" data-show-seconds="true" ng-model="timepicker.to.time" bs-timepicker>
</form>
</div>
- <div class="span1">
+ <div class="timepicker-block">
<form class="nomargin">
- <label><small><br></small></label>
- <button class="btn" ng-click="time_apply()" ><i class="icon-ok"></i></button>
+ <button class="btn" ng-click="time_apply()"><i class="icon-ok"></i></button>
</form>
</div>
</div>
<div ng-switch-when="since">
- <div class="span5">
+ <div class="timepicker-block">
<form class="nomargin">
<label><small>Since</small></label>
- <input type="text" class="input-smaller" ng-change="time_check()" ng-model="timepicker.from.date" data-date-format="mm/dd/yyyy" bs-datepicker>
+ <input type="text" class="input-smaller" ng-change="time_check()" ng-model="timepicker.from.date" data-date-format="mm/dd/yyyy" bs-datepicker>
<input type="text" class="input-mini" ng-change="time_check()" data-show-meridian="false" data-show-seconds="true" ng-model="timepicker.from.time" bs-timepicker>
</form>
</div>
- <div class="span1" style="margin-left:10px">
+ <div class="timepicker-block" style="margin-left:10px">
<form class="nomargin">
<label><small><br></small></label>
<button class="btn" ng-click="time_apply()" ><i class="icon-ok"></i></button>
@@ -38,7 +43,7 @@
</div>
</div>
<div ng-switch-when="relative">
- <div class="span11">
+ <div class="timepicker-block">
<form class="nomargin input-append">
<label><small>The last</small></label>
<button class="btn btn" ng-repeat='timespan in panel.time_options' ng-class="{'btn-success': (panel.timespan == timespan)}" ng-click="set_timespan(timespan)">{{timespan}}</button>
@@ -56,18 +61,18 @@
</div>
<div class="row-fluid nomargin">
<div class="span12 small" ng-show="filterSrv.idsByType('time').length > 0">
- <a ng-click="set_mode('relative')" ng-class="{'strong': (panel.mode == 'relative')}">Relative</a> |
- <a ng-click="set_mode('absolute')" ng-class="{'strong': (panel.mode == 'absolute')}">Absolute</a> |
- <a ng-click="set_mode('since')" ng-class="{'strong': (panel.mode == 'since')}">Since</a>
- <span ng-hide="panel.mode == 'absolute' || panel.mode == 'none'"> |
- <input type="checkbox" ng-model="panel.refresh.enable" ng-change='refresh();'> Auto-refresh
+ <a class="link" ng-click="set_mode('relative')" ng-class="{'strong': (panel.mode == 'relative')}">Relative</a> |
+ <a class="link" ng-click="set_mode('absolute')" ng-class="{'strong': (panel.mode == 'absolute')}">Absolute</a> |
+ <a class="link" ng-click="set_mode('since')" ng-class="{'strong': (panel.mode == 'since')}">Since</a>
+ <span ng-hide="panel.mode == 'absolute' || panel.mode == 'none'"> |
+ <input type="checkbox" ng-model="panel.refresh.enable" ng-change='refresh();'> Auto-refresh
<span ng-class="{'ng-cloak': !panel.refresh.enable}">
every <a data-title="<small>Auto-refresh Settings</small>" data-placement="bottom" bs-popover="'panels/timepicker/refreshctrl.html'">{{panel.refresh.interval}}s</a>.
</span>
</span>
</div>
<div class="span12 small" ng-show="filterSrv.idsByType('time').length < 1">
- <a class='btn btn-small' ng-click="time_apply()">Create a time filter</a>
+ <a class='btn btn-small' ng-click="time_apply()">Create a time filter</a>
</div>
</div>
</kibana-panel>
\ No newline at end of file
--
1.8.4
From 14d525da34e80ed9523fdca87fa12bc63b98733b Mon Sep 17 00:00:00 2001
From: Rashid Khan <rashidkpc@gmail.com>
Date: Wed, 11 Sep 2013 16:39:17 -0700
Subject: [PATCH 3/5] added JSONifying of objects
---
js/filters.js | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/js/filters.js b/js/filters.js
index 7f25a12..c21fa0b 100644
--- a/js/filters.js
+++ b/js/filters.js
@@ -29,7 +29,11 @@ angular.module('kibana.filters', [])
}).filter('stringify', function() {
return function(arr, start, end) {
if(!_.isUndefined(arr)) {
- return arr.toString();
+ if(_.isObject(arr) && !_.isArray(arr)) {
+ return angular.toJson(arr);
+ } else {
+ return arr.toString();
+ }
}
};
}).filter('noXml', function() {
--
1.8.4
From 8b5ac5e56eaf23111116fb4544bf4ad8a679cfdc Mon Sep 17 00:00:00 2001
From: Rashid Khan <rashidkpc@gmail.com>
Date: Wed, 11 Sep 2013 16:41:53 -0700
Subject: [PATCH 4/5] Show _source by default, sort by _score by default
---
panels/table/module.html | 14 +++++++++-----
panels/table/module.js | 4 ++--
2 files changed, 11 insertions(+), 7 deletions(-)
diff --git a/panels/table/module.html b/panels/table/module.html
index 92f3bdc..b59af11 100644
--- a/panels/table/module.html
+++ b/panels/table/module.html
@@ -39,10 +39,12 @@
<i ng-click="panel.offset = (panel.offset + panel.size)" ng-show="data.length > panel.offset+panel.size" class='icon-arrow-right pointer'></i>
</div>
</div>
- <div class="small" ng-show="panel.fields.length == 0"><center>No columns configured. You may want to select some from the list on the left.</center></div>
+
<table class="table-hover table table-condensed" ng-style="panel.style">
<thead ng-show="panel.header">
+ <th ng-show="panel.fields.length<1">_source (select columns from the list to the left)</th>
+
<th style="white-space:nowrap" ng-repeat="field in panel.fields">
<i ng-show="!$first" class="pointer link icon-caret-left" ng-click="_.move(panel.fields,$index,$index-1)"></i>
@@ -58,7 +60,8 @@
<tbody ng-repeat="event in data | slice:panel.offset:panel.offset+panel.size" ng-class-odd="'odd'">
<tr ng-click="toggle_details(event)" class="pointer">
<!--<td ng-repeat="field in panel.fields" ng-bind-html-unsafe="(event.highlight[field]||event._source[field]) | tableFieldFormat:field:event:this |tableHighlight | tableTruncate:panel.trimFactor:panel.fields.length"></td>-->
- <td ng-repeat="field in panel.fields" ng-bind-html-unsafe="(event.highlight[field]||event._source[field]) |tableHighlight | tableTruncate:panel.trimFactor:panel.fields.length"></td>
+ <td ng-show="panel.fields.length<1">{{event._source|stringify|tableTruncate:panel.trimFactor:1}}</td>
+ <td ng-show="panel.fields.length>0" ng-repeat="field in panel.fields" ng-bind-html-unsafe="(event.highlight[field]||event._source[field]) |tableHighlight | tableTruncate:panel.trimFactor:panel.fields.length"></td>
</tr>
<tr ng-show="event.kibana.details">
<td colspan=1000>
@@ -70,9 +73,10 @@
</thead>
<tr ng-repeat="(key,value) in event.kibana.details._source" ng-class-odd="'odd'">
<td>{{key}}</td>
- <td>
- <i class='icon-search pointer' ng-click="build_search(key,value)"></i>
- <i class='icon-ban-circle pointer' ng-click="build_search(key,value,true)"></i>
+ <td style="white-space:nowrap">
+ <i class='icon-search pointer' ng-click="build_search(key,value)" bs-tooltip="'Add filter to match this value'"></i>
+ <i class='icon-ban-circle pointer' ng-click="build_search(key,value,true)" bs-tooltip="'Add filter to NOT match this value'"></i>
+ <i class="pointer icon-th" ng-click="toggle_field(key)" bs-tooltip="'Toggle table column'"></i>
</td>
<!-- At some point we need to create a more efficient way of applying the filter pipeline -->
<td style="white-space:pre-wrap" ng-bind-html-unsafe="value|noXml|urlLink|stringify"></td>
diff --git a/panels/table/module.js b/panels/table/module.js
index 0b2f62b..bfac1a3 100644
--- a/panels/table/module.js
+++ b/panels/table/module.js
@@ -45,10 +45,10 @@ angular.module('kibana.table', [])
size : 100, // Per page
pages : 5, // Pages available
offset : 0,
- sort : ['@timestamp','desc'],
+ sort : ['_score','desc'],
group : "default",
style : {'font-size': '9pt'},
- overflow: 'height',
+ overflow: 'min-height',
fields : [],
highlight : [],
sortable: true,
--
1.8.4
From 4b0678542c9d9bb8ebeed4e92bbe85d30f9e1d6a Mon Sep 17 00:00:00 2001
From: Rashid Khan <rashidkpc@gmail.com>
Date: Wed, 11 Sep 2013 16:46:15 -0700
Subject: [PATCH 5/5] Removed default @message from logstash dashboards
---
dashboards/logstash.js | 2 +-
dashboards/logstash.json | 2 --
2 files changed, 1 insertion(+), 3 deletions(-)
diff --git a/dashboards/logstash.js b/dashboards/logstash.js
index e67a080..16f6280 100644
--- a/dashboards/logstash.js
+++ b/dashboards/logstash.js
@@ -160,7 +160,7 @@ dashboard.rows[3].panels = [
dashboard.rows[4].panels = [
{
type: 'table',
- fields: !_.isUndefined(ARGS.fields) ? ARGS.fields.split(',') : ['@timestamp','@message'],
+ fields: !_.isUndefined(ARGS.fields) ? ARGS.fields.split(',') : [],
sort: !_.isUndefined(ARGS.sort) ? ARGS.sort.split(',') : [ARGS.timefield||'@timestamp','desc'],
overflow: 'expand'
}
diff --git a/dashboards/logstash.json b/dashboards/logstash.json
index 4631e91..fcad036 100644
--- a/dashboards/logstash.json
+++ b/dashboards/logstash.json
@@ -191,8 +191,6 @@
},
"overflow": "min-height",
"fields": [
- "@timestamp",
- "@message"
],
"highlight": [],
"sortable": true,
--
1.8.4