Mute table on stale rows, add master indication

This commit is contained in:
Rashid Khan 2014-02-06 13:43:03 -07:00
parent ce01f7d5d0
commit ee0f58239b
3 changed files with 38 additions and 11 deletions

View file

@ -5,7 +5,7 @@ module.exports = function (grunt) {
var config = {
pkg: grunt.file.readJSON('package.json'),
kibanaCheckoutDir: './kibana/vendor/kibana',
kibanaRevision: 'marvel',
kibanaRevision: 'master',
agentDir: 'agent',
buildDir: 'build',
packageDir: 'build/packages',

View file

@ -32,6 +32,9 @@
height: 10px;
width: 50px;
}
.marvel-muted .mutable {
opacity: 0.3;
}
</style>
<div class="pull-left marvel-header marvel-table" ng-show="rows.length > 0 || panel.rowFilter">
@ -58,17 +61,21 @@
<i ng-show='metric.field == panel.sort[0]' class="pointer link" ng-class="{'icon-chevron-up': panel.sort[1] == 'asc','icon-chevron-down': panel.sort[1] == 'desc'}"></i>
</th>
</thead>
<tr ng-repeat="row in rows" >
<tr ng-repeat="row in rows" ng-class="{'marvel-muted':!row.alive}">
<td>
<div>
<label class="checkbox" ng-class="{'text-warning':!row.alive}">
<input type="checkbox" ng-model="row.selected" ng-checked="row.selected">
<span class="pointer" ng-click="rowClick(row)">{{row.display_name}} <i bs-tooltip="'No report has been received for more than '+staleSeconds+' seconds'" ng-show="!row.alive" class="icon-exclamation-sign"></i></span>
<span class="pointer" ng-click="rowClick(row)">
{{row.display_name}}
<i bs-tooltip="'No report has been received for more than '+staleSeconds+' seconds'" ng-show="!row.alive" class="icon-exclamation-sign"></i>
<i bs-tooltip="'This node is master'" ng-show="row.master" class="icon-star"></i>
</span>
<div class="marvel-persistent-name pointer" ng-hide="row.id == row.display_name" ng-click="rowClick(row)">{{row.id}}</div>
</label>
</div>
</td>
<td ng-repeat="metric in panel.metrics" ng-class="alertClass(row[metric.field].alert_level)">
<td ng-repeat="metric in panel.metrics" class="mutable" ng-class="alertClass(row[metric.field].alert_level)">
<div class="marvel-mean pointer" ng-click="rowClick(row,metric)">
<span bo-text="(_.isNull(row[metric.field].mean)?'n/a':row[metric.field].mean) | metric_format:metric"></span>
<br>
@ -97,16 +104,18 @@
<i ng-show='metric.field == panel.sort[0]' class="pointer link" ng-class="{'icon-chevron-up': panel.sort[1] == 'asc','icon-chevron-down': panel.sort[1] == 'desc'}"></i>
</th>
</thead>
<tr ng-repeat="row in rows">
<tr ng-repeat="row in rows" ng-class="{'marvel-muted':!row.alive}">
<td>
<div class="checkbox">
<label>
<input type="checkbox" ng-model="row.selected" ng-checked="row.selected">
</label>
<span class="pointer" ng-click="rowClick(row)">{{ row.id }}</span>
<i bs-tooltip="'No report has been received for more than '+staleSeconds+' seconds'" ng-show="!row.alive" class="icon-exclamation-sign"></i>
<i bs-tooltip="'This node is master'" ng-show="row.master" class="icon-star"></i>
</div>
</td>
<td ng-repeat="metric in panel.metrics" ng-class="alertClass(row[metric.field].alert_level)">
<td ng-repeat="metric in panel.metrics" ng-class="alertClass(row[metric.field].alert_level)" class="mutable">
<div class="pointer" ng-click="rowClick(row,metric)">
<span bo-text="(_.isNull(row[metric.field].mean)?'n/a':row[metric.field].mean) | metric_format:metric"></span>

View file

@ -349,17 +349,15 @@ define([
filter.must($scope.get_mode_filter()).must($scope.ejs.RangeFilter('@timestamp').from(to + "-10m/m").to(to + "/m"));
request = $scope.ejs.Request().indices(dashboard.indices).size(0).searchType("count");
request = $scope.ejs.Request().indices(dashboard.indices).size(10);
request.query($scope.ejs.FilteredQuery($scope.ejs.MatchAllQuery(), filter));
// timestamp facet to give us the proper time ranges for each node
request.facet($scope.ejs.TermStatsFacet("timestamp")
.keyField($scope.panel.persistent_field).valueField("@timestamp")
.order('term')
.size(2000));
_.each($scope.panel.metrics, function (m) {
request.facet($scope.ejs.TermStatsFacet(m.field)
.keyField($scope.panel.persistent_field).valueField(m.field)
@ -469,17 +467,23 @@ define([
$scope.ejs.TermQuery($scope.panel.persistent_field, s.id)
)
);
rowRequest.size(1).fields(_.unique([ stripRaw($scope.panel.display_field), stripRaw($scope.panel.persistent_field)]));
rowRequest.size(1).fields(_.unique(
[ stripRaw($scope.panel.display_field), stripRaw($scope.panel.persistent_field),'node.master']
));
rowRequest.sort("@timestamp", "desc");
mrequest.requests(rowRequest);
});
mrequest.doSearch(function (r) {
esVersion.is('>=1.0.0.RC1').then(function(version) {
var
hit,
display_name,
persistent_name;
persistent_name,
master;
_.each(r.responses, function (response) {
if (response.hits.hits.length === 0) {
@ -490,22 +494,36 @@ define([
if (version) {
display_name = (hit.fields[stripRaw($scope.panel.display_field)] || [ undefined ])[0];
persistent_name = (hit.fields[stripRaw($scope.panel.persistent_field)] || [ undefined] )[0];
master = (hit.fields['node.master'] || [ undefined ])[0];
}
else {
display_name = hit.fields[stripRaw($scope.panel.display_field)];
persistent_name = hit.fields[stripRaw($scope.panel.persistent_field)];
master = hit.fields['node.master'];
}
(newData[persistent_name] || {}).display_name = display_name;
newData[persistent_name].master = master;
});
$scope._register_data_end();
$scope.select_display_data_and_enrich(newData);
});
/*
newData.marvelMeta = {
masterCount: _.filter(newData,'master').length
};
*/
}, $scope._register_data_end);
}, $scope._register_data_end);
};
function applyNewData(rows, data) {
$scope.meta = {
masterCount: _.filter(data,'master').length
};
$scope.rows = rows;
$scope.data = data;
$scope.updateUIFeaturesBasedOnData();