You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@eagle.apache.org by ha...@apache.org on 2017/02/28 05:54:52 UTC
eagle git commit: [EAGLE-924] urls to healthy and unhealthy
region-servers in hbase dashboard is not accurate enough
Repository: eagle
Updated Branches:
refs/heads/master af33ae3c3 -> 97ae1da52
[EAGLE-924] urls to healthy and unhealthy region-servers in hbase dashboard is not accurate enough
[EAGLE-924]urls to healthy and unhealthy region-servers in hbase dashboard is not accurate enough
- Add status filter in web url,append "?status=healthy" or "?status=unhealthy" to the url
- Fix exception when we change time interval
- Fix dashboard show when no data and exception.
https://issues.apache.org/jira/browse/EAGLE-924
Author: chitin <ch...@gmail.com>
Closes #840 from chitin/eagle924.
Project: http://git-wip-us.apache.org/repos/asf/eagle/repo
Commit: http://git-wip-us.apache.org/repos/asf/eagle/commit/97ae1da5
Tree: http://git-wip-us.apache.org/repos/asf/eagle/tree/97ae1da5
Diff: http://git-wip-us.apache.org/repos/asf/eagle/diff/97ae1da5
Branch: refs/heads/master
Commit: 97ae1da52d09d8c22b37a63b53dac0649b2c024f
Parents: af33ae3
Author: chitin <ch...@gmail.com>
Authored: Tue Feb 28 13:54:40 2017 +0800
Committer: Hao Chen <ha...@apache.org>
Committed: Tue Feb 28 13:54:40 2017 +0800
----------------------------------------------------------------------
.../webapp/app/apps/hbase/ctrls/overview.js | 56 +++++++++++++-----
.../app/apps/hbase/ctrls/regionListCtrl.js | 4 +-
.../src/main/webapp/app/apps/hbase/index.js | 25 ++++++--
.../app/apps/hbase/partials/overview.html | 49 +++++++++-------
.../hbase/partials/region/regionDetail.html | 12 ++--
.../app/apps/hbase/widgets/availabilityChart.js | 45 +++++++++++----
.../app/apps/hdfs/ctrl/datanodeListCtrl.js | 4 +-
.../app/apps/hdfs/ctrl/namenodeListCtrl.js | 4 +-
.../main/webapp/app/apps/hdfs/ctrl/overview.js | 55 +++++++++++++-----
.../src/main/webapp/app/apps/hdfs/index.js | 10 ++--
.../app/apps/hdfs/partials/datanodeList.html | 2 +-
.../webapp/app/apps/hdfs/partials/overview.html | 61 ++++++++++++--------
.../app/apps/hdfs/widget/availabilityChart.js | 45 +++++++++++----
13 files changed, 259 insertions(+), 113 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/eagle/blob/97ae1da5/eagle-metric/eagle-hbase-web/src/main/webapp/app/apps/hbase/ctrls/overview.js
----------------------------------------------------------------------
diff --git a/eagle-metric/eagle-hbase-web/src/main/webapp/app/apps/hbase/ctrls/overview.js b/eagle-metric/eagle-hbase-web/src/main/webapp/app/apps/hbase/ctrls/overview.js
index 6e7df0b..2416e63 100644
--- a/eagle-metric/eagle-hbase-web/src/main/webapp/app/apps/hbase/ctrls/overview.js
+++ b/eagle-metric/eagle-hbase-web/src/main/webapp/app/apps/hbase/ctrls/overview.js
@@ -59,7 +59,11 @@
$scope.site = $wrapState.param.siteId;
var result = cache[name] || activeMasterInfo._promise.then(function (res) {
- var hostname = cache[hostname] = cache[hostname] || res[0].tags.hostname;
+ if(typeof res[0] === 'undefined' || res.length === 0) {
+ return [];
+ }
+
+ var hostname = res[0].tags.hostname;
$scope.defaultHostname = $wrapState.param.hostname || hostname;
var jobCond = {
@@ -239,7 +243,7 @@
var series = [];
for (var r = 0; r < resp.length; r += 1) {
var rs = resp[r][1];
- if (rs.length > 0) {
+ if (typeof rs !== 'undefined' && rs.length > 0) {
series.push(rs);
}
}
@@ -252,44 +256,70 @@
$.map(res, function (data) {
$scope.hmasteractivenum = data.value[0];
});
+ }, function () {
+ $scope.hmasteractivenum = -1;
});
countHBaseRole($scope.site, "standby", "hmaster", ["site"], "count")._promise.then(function (res) {
$.map(res, function (data) {
$scope.hmasterstandbynum = data.value[0];
});
+ }, function () {
+ $scope.hmasterstandbynum = -1;
});
-
countHBaseRole($scope.site, "live", "regionserver", ["site"], "count")._promise.then(function (res) {
$.map(res, function (data) {
$scope.regionserverhealtynum = data.value[0];
});
+ }, function () {
+ $scope.regionserverhealtynum = -1;
});
countHBaseRole($scope.site, "dead", "regionserver", ["site"], "count")._promise.then(function (res) {
$.map(res, function (data) {
$scope.regionserverunhealtynum = data.value[0];
});
+ }, function () {
+ $scope.regionserverunhealtynum = -1;
});
sumAllRegions($scope.site, "regionserver", ["site"], "sum(numRegions)")._promise.then(function (res) {
$.map(res, function (data) {
$scope.regionsnum = data.value[0];
});
+ }, function () {
+ $scope.regionsnum = -1;
});
activeMasterInfo._promise.then(function (res) {
- var hostname = cache[hostname] = cache[hostname] || res[0].tags.hostname;
- $scope.defaultHostname = $wrapState.param.hostname || hostname;
- var jobCond = {
- site: $scope.site,
- component: "hbasemaster",
- host: $scope.defaultHostname
- };
- METRIC.hbaseMomentMetric(jobCond, "hadoop.hbase.master.server.averageload", 1).then(function (res) {
- $scope.hmasteraverageload = (typeof res.data.obj[0] !== 'undefined') ? res.data.obj[0].value[0] : "-1";
- });
+ if(typeof res[0] !== 'undefined' && res.length > 0) {
+ var hostname = cache[hostname] = cache[hostname] || res[0].tags.hostname;
+ $scope.defaultHostname = $wrapState.param.hostname || hostname;
+ var jobCond = {
+ site: $scope.site,
+ component: "hbasemaster",
+ host: $scope.defaultHostname
+ };
+ METRIC.hbaseMomentMetric(jobCond, "hadoop.hbase.master.server.averageload", 1).then(function (res) {
+ $scope.hmasteraverageload = (typeof res.data.obj[0] !== 'undefined') ? res.data.obj[0].value[0] : -1;
+ }, function () {
+ $scope.hmasteraverageload = -1;
+ });
+ }
+ }, function () {
+ $scope.hmasteraverageload = -1;
});
};
Time.onReload(function () {
cache = {};
+ $.each($scope.chartList, function (i) {
+ var chart = $scope.chartList[i];
+ var chartname = chart.name;
+ $scope.metricList[chartname] = {
+ title: chartname,
+ series: {},
+ option: {},
+ loading: true,
+ promises: []
+ };
+ });
$scope.refresh();
}, $scope);
$scope.refresh();
http://git-wip-us.apache.org/repos/asf/eagle/blob/97ae1da5/eagle-metric/eagle-hbase-web/src/main/webapp/app/apps/hbase/ctrls/regionListCtrl.js
----------------------------------------------------------------------
diff --git a/eagle-metric/eagle-hbase-web/src/main/webapp/app/apps/hbase/ctrls/regionListCtrl.js b/eagle-metric/eagle-hbase-web/src/main/webapp/app/apps/hbase/ctrls/regionListCtrl.js
index 1477e32..6fc9ab0 100644
--- a/eagle-metric/eagle-hbase-web/src/main/webapp/app/apps/hbase/ctrls/regionListCtrl.js
+++ b/eagle-metric/eagle-hbase-web/src/main/webapp/app/apps/hbase/ctrls/regionListCtrl.js
@@ -30,9 +30,9 @@
$scope.live = METRIC.STATUS_LIVE;
$scope.dead = METRIC.STATUS_DEAD;
$scope.site = $wrapState.param.siteId;
+ $scope.status = $wrapState.param.status;
$scope.searchPathList = [["tags", "hostname"], ["tags", "rack"], ["tags", "site"], ["status"]];
- $scope.regionserverList = METRIC.regionserverList($scope.site);
-
+ $scope.regionserverList = METRIC.regionserverList($scope.site, $scope.status);
});
});
})();
http://git-wip-us.apache.org/repos/asf/eagle/blob/97ae1da5/eagle-metric/eagle-hbase-web/src/main/webapp/app/apps/hbase/index.js
----------------------------------------------------------------------
diff --git a/eagle-metric/eagle-hbase-web/src/main/webapp/app/apps/hbase/index.js b/eagle-metric/eagle-hbase-web/src/main/webapp/app/apps/hbase/index.js
index c6b5135..8e4ea46 100644
--- a/eagle-metric/eagle-hbase-web/src/main/webapp/app/apps/hbase/index.js
+++ b/eagle-metric/eagle-hbase-web/src/main/webapp/app/apps/hbase/index.js
@@ -35,7 +35,7 @@
controller: "regionDetailCtrl",
resolve: {time: true}
}).route("regionList", {
- url: "/hadoopService/HBase/regionList",
+ url: "/hadoopService/HBase/regionList?status",
site: true,
templateUrl: "partials/region/regionList.html",
controller: "regionListCtrl"
@@ -265,6 +265,8 @@
});
_list.done = true;
return _list;
+ }, function () {
+ return [];
});
return _list;
};
@@ -300,12 +302,23 @@
return hoststateinfo;
};
- METRIC.regionserverList = function (siteid) {
+ METRIC.regionserverList = function (siteid, status) {
var hoststateinfos;
- var condition = {
- site: siteid,
- role: "regionserver"
- };
+ var condition = {};
+ if(typeof status === 'undefined') {
+ condition = {
+ site: siteid,
+ role: "regionserver"
+ };
+ } else {
+ condition = {
+ site: siteid,
+ role: "regionserver",
+ status: status
+ };
+ }
+ console.log(condition);
+
hoststateinfos = METRIC.hbasehostStatus(condition);
return hoststateinfos;
};
http://git-wip-us.apache.org/repos/asf/eagle/blob/97ae1da5/eagle-metric/eagle-hbase-web/src/main/webapp/app/apps/hbase/partials/overview.html
----------------------------------------------------------------------
diff --git a/eagle-metric/eagle-hbase-web/src/main/webapp/app/apps/hbase/partials/overview.html b/eagle-metric/eagle-hbase-web/src/main/webapp/app/apps/hbase/partials/overview.html
index 0e194ef..72d4b4e 100644
--- a/eagle-metric/eagle-hbase-web/src/main/webapp/app/apps/hbase/partials/overview.html
+++ b/eagle-metric/eagle-hbase-web/src/main/webapp/app/apps/hbase/partials/overview.html
@@ -27,45 +27,47 @@
<table class="table table-striped hadoopMetric-table">
<tr>
<td width="5%">
- <span ng-show="hmasteractivenum">{{hmasteractivenum}}</span>
- <span ng-show="!hmasteractivenum">N/A</span>
+ <span ng-show="hmasteractivenum !== -1">{{hmasteractivenum || 0}}</span>
+ <span ng-show="hmasteractivenum === -1">N/A</span>
</td>
<th width="45%">Active HBase Master</th>
<td width="5%">
- <span ng-show="regionsnum">{{regionsnum}}</span>
- <span ng-show="!regionsnum">N/A</span>
+ <span ng-show="regionsnum !== -1">{{regionsnum || 0}}</span>
+ <span ng-show="regionsnum === -1">N/A</span>
</td>
<th width="45%">Regions
</th>
</tr>
<tr>
<td>
- <a ui-sref="backupMasterList({siteId: site})">
- <span ng-show="hmasterstandbynum">{{hmasterstandbynum}}</span></a>
+ <span ng-show="hmasterstandbynum !== -1"><a ui-sref="backupMasterList({siteId: site})">{{hmasterstandbynum}}</a></span>
<span ng-show="!hmasterstandbynum">0</span>
+ <span ng-show="hmasterstandbynum === -1">N/A</span>
</td>
<th>Backup HBase Master</th>
<td>
- <span ng-show="hmasteraverageload !== '-1'">{{common.number.format(hmasteraverageload, 0)}}</span>
- <span ng-show="hmasteraverageload === '-1'">N/A</span>
+ <span ng-show="hmasteraverageload !== -1 && hmasteraverageload">{{common.number.format(hmasteraverageload, 0)}}</span>
+ <span ng-show="!hmasteraverageload">0</span>
+ <span ng-show="hmasteraverageload === -1">N/A</span>
</td>
<th>Average Load</th>
</tr>
<tr>
<td>
<a ui-sref="regionList({siteId: site})">
- <span ng-show="regionserverhealtynum || regionserverunhealtynum">{{regionserverhealtynum+regionserverunhealtynum}}</span></a>
- <span ng-show="!regionserverhealtynum && !regionserverunhealtynum">N/A</span>
+ <span ng-show="regionserverhealtynum!==-1 && regionserverunhealtynum!==-1">{{regionserverhealtynum+regionserverunhealtynum}}</span></a>
+ <span ng-show="!regionserverhealtynum && !regionserverunhealtynum">0</span>
+ <span ng-show="regionserverhealtynum===-1 || regionserverunhealtynum===-1">N/A</span>
</td>
<th>RegionServers:
- <a ui-sref="regionList({siteId: site})">
- <span ng-show="regionserverhealtynum">{{regionserverhealtynum}}</span></a>
- <span ng-show="!regionserverhealtynum">0</span>
+ <span ng-show="regionserverhealtynum!==-1 && regionserverunhealtynum!==-1 && regionserverhealtynum"><a ui-sref="regionList({siteId: site, status:'live'})">{{regionserverhealtynum}}</a></span>
+ <span ng-show="!regionserverhealtynum">0</span>
+ <span ng-show="regionserverhealtynum===-1 || regionserverunhealtynum===-1">N/A</span>
<span
class="label label-success">Good Health</span> /
- <a ui-sref="regionList({siteId: site})">
- <span ng-show="regionserverunhealtynum">{{regionserverunhealtynum}}</span></a>
- <span ng-show="!regionserverunhealtynum">0</span>
+ <span ng-show="regionserverhealtynum!==-1 && regionserverunhealtynum!==-1 && regionserverunhealtynum"><a ui-sref="regionList({siteId: site, status:'dead'})">{{regionserverunhealtynum || 0}}</a></span>
+ <span ng-show="!regionserverunhealtynum">0</span>
+ <span ng-show="regionserverhealtynum===-1 || regionserverunhealtynum===-1">N/A</span>
<span class="label label-danger">Bad Health</span>
</th>
<td></td>
@@ -88,22 +90,29 @@
<div class="col-sm-6 col-md-4 col-lg-6" ng-repeat="chart in chartList track by $index">
<div class="hadoopMetric-chart">
<h3>{{metricList[chart.name].title}}</h3>
- <div ng-show="metricList[chart.name].loading" chart class="hadoopMetric-chart-container"></div>
- <div ng-show="metricList[chart.name].loading" class="overlay-wrapper">
+ <div ng-show="defaultHostname && metricList[chart.name].loading" chart class="hadoopMetric-chart-container"></div>
+ <div ng-show="defaultHostname && metricList[chart.name].loading" class="overlay-wrapper">
<div class="overlay">
<i class="fa fa-refresh fa-spin"></i>
</div>
</div>
- <div ng-show="metricList[chart.name].series.length" chart class="hadoopMetric-chart-container"
+ <div ng-show="defaultHostname && metricList[chart.name].series.length" chart class="hadoopMetric-chart-container"
series="metricList[chart.name].series"
option="metricList[chart.name].option"></div>
- <div ng-show="!metricList[chart.name].series.length && !metricList[chart.name].loading" class="hadoopMetric-chart-container">
+ <div ng-show="defaultHostname && !metricList[chart.name].series.length && !metricList[chart.name].loading" class="hadoopMetric-chart-container">
<div class="hadoopMetric-chart-container-withborder">
<div class="hadoopMetric-no-chart-data">
<span class="fa fa-question-circle"></span><span> NO DATA</span>
</div>
</div>
</div>
+ <div ng-show="!defaultHostname" class="hadoopMetric-chart-container">
+ <div class="hadoopMetric-chart-container-withborder">
+ <div class="hadoopMetric-no-chart-data">
+ <span class="fa fa-question-circle"></span><span> N/A</span>
+ </div>
+ </div>
+ </div>
</div>
</div>
</div>
http://git-wip-us.apache.org/repos/asf/eagle/blob/97ae1da5/eagle-metric/eagle-hbase-web/src/main/webapp/app/apps/hbase/partials/region/regionDetail.html
----------------------------------------------------------------------
diff --git a/eagle-metric/eagle-hbase-web/src/main/webapp/app/apps/hbase/partials/region/regionDetail.html b/eagle-metric/eagle-hbase-web/src/main/webapp/app/apps/hbase/partials/region/regionDetail.html
index 63a895f..edf33e0 100644
--- a/eagle-metric/eagle-hbase-web/src/main/webapp/app/apps/hbase/partials/region/regionDetail.html
+++ b/eagle-metric/eagle-hbase-web/src/main/webapp/app/apps/hbase/partials/region/regionDetail.html
@@ -57,27 +57,27 @@
<tbody ng-if="regionstatus.length === 0">
<tr>
<th>Status</th>
- <td class="text-break"><span class="label label-danger">Unknow</span></td>
+ <td class="text-break"><span class="label label-danger">N/A</span></td>
</tr>
<tr>
<th>Rack</th>
- <td class="text-break"><span class="label label-danger">Unknow</span></td>
+ <td class="text-break"><span class="label label-danger">N/A</span></td>
</tr>
<tr>
<th>MaxHeap</th>
- <td class="text-break"><span class="label label-danger">Unknow</span></td>
+ <td class="text-break"><span class="label label-danger">N/A</span></td>
</tr>
<tr>
<th>UsedHeap</th>
- <td class="text-break"><span class="label label-danger">Unknow</span></td>
+ <td class="text-break"><span class="label label-danger">N/A</span></td>
</tr>
<tr>
<th>NumRegions</th>
- <td class="text-break"><span class="label label-danger">Unknow</span></td>
+ <td class="text-break"><span class="label label-danger">N/A</span></td>
</tr>
<tr>
<th>NumRequests</th>
- <td class="text-break"><span class="label label-danger">Unknow</span></td>
+ <td class="text-break"><span class="label label-danger">N/A</span></td>
</tr>
</tbody>
</table>
http://git-wip-us.apache.org/repos/asf/eagle/blob/97ae1da5/eagle-metric/eagle-hbase-web/src/main/webapp/app/apps/hbase/widgets/availabilityChart.js
----------------------------------------------------------------------
diff --git a/eagle-metric/eagle-hbase-web/src/main/webapp/app/apps/hbase/widgets/availabilityChart.js b/eagle-metric/eagle-hbase-web/src/main/webapp/app/apps/hbase/widgets/availabilityChart.js
index c74dece..08cafaf 100644
--- a/eagle-metric/eagle-hbase-web/src/main/webapp/app/apps/hbase/widgets/availabilityChart.js
+++ b/eagle-metric/eagle-hbase-web/src/main/webapp/app/apps/hbase/widgets/availabilityChart.js
@@ -66,21 +66,29 @@
$.map(res, function (data) {
$scope.hmasteractivenum = data.value[0];
});
+ }, function () {
+ $scope.hmasteractivenum = -1;
});
countHBaseRole(site.siteId, "standby", "hmaster", ["site"], "count")._promise.then(function (res) {
$.map(res, function (data) {
$scope.hmasterstandbynum = data.value[0];
});
+ }, function () {
+ $scope.hmasterstandbynum = -1;
});
countHBaseRole(site.siteId, "live", "regionserver", ["site"], "count")._promise.then(function (res) {
$.map(res, function (data) {
$scope.regionserverhealtynum = data.value[0];
});
+ }, function () {
+ $scope.regionserverhealtynum = -1;
});
countHBaseRole(site.siteId, "dead", "regionserver", ["site"], "count")._promise.then(function (res) {
$.map(res, function (data) {
$scope.regionserverunhealtynum = data.value[0];
});
+ }, function () {
+ $scope.regionserverunhealtynum = -1;
});
});
}
@@ -96,22 +104,39 @@
'<div class="small-box hadoopMetric-widget bg-{{bgColor}}">' +
'<div class="inner">' +
'<h3>{{type}}</h3>' +
- '<div ng-show="hmasteractivenum" class="hadoopMetric-widget-detail">' +
- '<a ui-sref="HBaseMetric({siteId: site.siteId})">' +
+ '<div ng-show="hmasteractivenum!==-1 && hmasterstandbynum!==-1" class="hadoopMetric-widget-detail">' +
+ '<a ng-show="hmasteractivenum || hmasterstandbynum" ui-sref="HBaseMetric({siteId: site.siteId})">' +
'<span>{{hmasteractivenum+hmasterstandbynum}}</span> Masters (' +
- '<span ng-show="hmasteractivenum">{{hmasteractivenum}}</span><span ng-show="!hmasteractivenum">0</span> Active / ' +
- '<span ng-show="hmasterstandbynum">{{hmasterstandbynum}}</span><span ng-show="!hmasterstandbynum">0</span> Standby)' +
+ '<span>{{hmasteractivenum || 0}}</span> Active / ' +
+ '<span>{{hmasterstandbynum || 0}}</span> Standby)' +
'</a>' +
+ '<div ng-show="!hmasteractivenum && !hmasterstandbynum">' +
+ '<span>0</span> Masters (' +
+ '<span>0</span> Active / ' +
+ '<span>0</span> Standby)' +
+ '</div>' +
'</div>' +
- '<div ng-show="!hmasteractivenum" class="hadoopMetric-widget-detail">' +
- '<span class="fa fa-question-circle"></span><span> NO DATA</span>' +
+ '<div ng-show="hmasteractivenum===-1 || hmasterstandbynum===-1" class="hadoopMetric-widget-detail">' +
+ '<span>N/A</span> Masters (' +
+ '<span>N/A</span> Active / ' +
+ '<span>N/A</span> Standby)' +
'</div>' +
- '<div ng-show="hmasteractivenum" class="hadoopMetric-widget-detail">' +
- '<a ui-sref="regionList({siteId: site.siteId})">' +
+ '<div ng-show="regionserverhealtynum!==-1 && regionserverunhealtynum!==-1" class="hadoopMetric-widget-detail">' +
+ '<a ng-show="regionserverhealtynum || regionserverunhealtynum" ui-sref="regionList({siteId: site.siteId})">' +
'<span>{{regionserverhealtynum+regionserverunhealtynum}}</span> RegionServers (' +
- '<span ng-show="regionserverhealtynum">{{regionserverhealtynum}}</span><span ng-show="!regionserverhealtynum">0</span> Healthy / ' +
- '<span ng-show="regionserverunhealtynum">{{regionserverunhealtynum}}</span><span ng-show="!regionserverunhealtynum">0</span> Unhealthy)' +
+ '<span>{{regionserverhealtynum || 0}}</span> Healthy / ' +
+ '<span>{{regionserverunhealtynum || 0}}</span> Unhealthy)' +
'</a>' +
+ '<div ng-show="!regionserverhealtynum && !regionserverunhealtynum">' +
+ '<span>0</span> Masters (' +
+ '<span>0</span> Active / ' +
+ '<span>0</span> Standby)' +
+ '</div>' +
+ '</div>' +
+ '<div ng-show="regionserverhealtynum===-1 || regionserverunhealtynum===-1" class="hadoopMetric-widget-detail">' +
+ '<span>N/A</span> RegionServers (' +
+ '<span>N/A</span> Healthy / ' +
+ '<span>N/A</span> Unhealthy)' +
'</div>' +
'</div>' +
'<div class="icon">' +
http://git-wip-us.apache.org/repos/asf/eagle/blob/97ae1da5/eagle-metric/eagle-hdfs-web/src/main/webapp/app/apps/hdfs/ctrl/datanodeListCtrl.js
----------------------------------------------------------------------
diff --git a/eagle-metric/eagle-hdfs-web/src/main/webapp/app/apps/hdfs/ctrl/datanodeListCtrl.js b/eagle-metric/eagle-hdfs-web/src/main/webapp/app/apps/hdfs/ctrl/datanodeListCtrl.js
index aee0536..78ea7e1 100644
--- a/eagle-metric/eagle-hdfs-web/src/main/webapp/app/apps/hdfs/ctrl/datanodeListCtrl.js
+++ b/eagle-metric/eagle-hdfs-web/src/main/webapp/app/apps/hdfs/ctrl/datanodeListCtrl.js
@@ -30,8 +30,10 @@
$scope.live = HDFSMETRIC.STATUS_LIVE;
$scope.dead = HDFSMETRIC.STATUS_DEAD;
$scope.site = $wrapState.param.siteId;
+ $scope.status = $wrapState.param.status;
$scope.searchPathList = [["tags", "hostname"], ["tags", "rack"], ["tags", "site"], ["status"]];
- $scope.datanodeList = HDFSMETRIC.getListByRoleName("HdfsServiceInstance", "datanode", $scope.site);
+ $scope.datanodeList = (typeof $scope.status === 'undefined') ? HDFSMETRIC.getListByRoleName("HdfsServiceInstance", "datanode", $scope.site)
+ : HDFSMETRIC.getHadoopHostByStatusAndRole("HdfsServiceInstance", $scope.site, $scope.status, "datanode");
});
});
http://git-wip-us.apache.org/repos/asf/eagle/blob/97ae1da5/eagle-metric/eagle-hdfs-web/src/main/webapp/app/apps/hdfs/ctrl/namenodeListCtrl.js
----------------------------------------------------------------------
diff --git a/eagle-metric/eagle-hdfs-web/src/main/webapp/app/apps/hdfs/ctrl/namenodeListCtrl.js b/eagle-metric/eagle-hdfs-web/src/main/webapp/app/apps/hdfs/ctrl/namenodeListCtrl.js
index 3e4ea41..8424b8e 100644
--- a/eagle-metric/eagle-hdfs-web/src/main/webapp/app/apps/hdfs/ctrl/namenodeListCtrl.js
+++ b/eagle-metric/eagle-hdfs-web/src/main/webapp/app/apps/hdfs/ctrl/namenodeListCtrl.js
@@ -28,8 +28,10 @@
PageConfig.title = "HDFS Namenode List";
$scope.tableScope = {};
$scope.site = $wrapState.param.siteId;
+ $scope.status = $wrapState.param.status;
$scope.searchPathList = [["tags", "hostname"], ["tags", "rack"], ["tags", "site"], ["status"]];
- $scope.namenodeList = HDFSMETRIC.getListByRoleName("HdfsServiceInstance", "namenode", $scope.site);
+ $scope.namenodeList = (typeof $scope.status === 'undefined') ? HDFSMETRIC.getListByRoleName("HdfsServiceInstance", "namenode", $scope.site)
+ : HDFSMETRIC.getHadoopHostByStatusAndRole("HdfsServiceInstance", $scope.site, $scope.status, "namenode");
});
});
})();
http://git-wip-us.apache.org/repos/asf/eagle/blob/97ae1da5/eagle-metric/eagle-hdfs-web/src/main/webapp/app/apps/hdfs/ctrl/overview.js
----------------------------------------------------------------------
diff --git a/eagle-metric/eagle-hdfs-web/src/main/webapp/app/apps/hdfs/ctrl/overview.js b/eagle-metric/eagle-hdfs-web/src/main/webapp/app/apps/hdfs/ctrl/overview.js
index d77986a..dd5792e 100644
--- a/eagle-metric/eagle-hdfs-web/src/main/webapp/app/apps/hdfs/ctrl/overview.js
+++ b/eagle-metric/eagle-hdfs-web/src/main/webapp/app/apps/hdfs/ctrl/overview.js
@@ -87,15 +87,19 @@
}
}]
};
- var startTime = Time.startTime();
- var endTime = Time.endTime();
- var interval = Time.diffInterval(startTime, endTime);
- var intervalMin = interval / 1000 / 60;
- var trendStartTime = Time.align(startTime, interval);
- var trendEndTime = Time.align(endTime, interval);
- $scope.site = $wrapState.param.siteId;
+
function generateHdfsMetric(name, flag) {
+ var startTime = Time.startTime();
+ var endTime = Time.endTime();
+ var interval = Time.diffInterval(startTime, endTime);
+ var intervalMin = interval / 1000 / 60;
+ var trendStartTime = Time.align(startTime, interval);
+ var trendEndTime = Time.align(endTime, interval);
+ $scope.site = $wrapState.param.siteId;
var result = cache[name] || namenodeInfo._promise.then(function (res) {
+ if(typeof res[0] === 'undefined' || res.length === 0) {
+ return [];
+ }
$scope.activeNamenodeList = res;
$scope.type = $wrapState.param.hostname || $scope.namenode || res[0].tags.hostname;
var hostname = $scope.namenode || res[0].tags.hostname;
@@ -237,7 +241,7 @@
var series = [];
for(var r=0; r < resp.length; r+=1) {
var rs = resp[r][1];
- if(rs.length > 0) {
+ if (typeof rs !== 'undefined' && rs.length > 0) {
series.push(rs);
}
}
@@ -250,36 +254,59 @@
$.map(res, function (data) {
$scope.namenodeactivenum = data.value[0];
});
- });
+ }, function () {
+ $scope.namenodeactivenum = -1;
+ });
HDFSMETRIC.countHadoopRole("HdfsServiceInstance", $scope.site, "standby", "namenode", ["site"], "count")._promise.then(function (res) {
$.map(res, function (data) {
$scope.namenodestandbynum = data.value[0];
});
- });
+ }, function () {
+ $scope.namenodestandbynum = -1;
+ });
HDFSMETRIC.countHadoopRole("HdfsServiceInstance", $scope.site, "live", "datanode", ["site"], "count")._promise.then(function (res) {
$.map(res, function (data) {
$scope.datanodehealtynum = data.value[0];
});
- });
+ }, function () {
+ $scope.datanodehealtynum = -1;
+ });
HDFSMETRIC.countHadoopRole("HdfsServiceInstance", $scope.site, "dead", "datanode", ["site"], "count")._promise.then(function (res) {
$.map(res, function (data) {
$scope.datanodeunhealtynum = data.value[0];
});
- });
+ }, function () {
+ $scope.datanodeunhealtynum = -1;
+ });
sumMetrics($scope.site, "datanode", ["site"], "sum(configuredCapacityTB)")._promise.then(function (res) {
$.map(res, function (data) {
$scope.capacityNum = data.value[0];
});
- });
+ }, function () {
+ $scope.capacityNum = -1;
+ });
sumMetrics($scope.site, "datanode", ["site"], "sum(usedCapacityTB)")._promise.then(function (res) {
$.map(res, function (data) {
$scope.usedCapacityNum = data.value[0];
});
- });
+ }, function () {
+ $scope.usedCapacityNum = -1;
+ });
};
Time.onReload(function () {
cache = {};
+ $.each($scope.chartList, function (i) {
+ var chart = $scope.chartList[i];
+ var chartname = chart.name;
+ $scope.metricList[chartname] = {
+ title: chartname,
+ series: {},
+ option: {},
+ loading: true,
+ promises: []
+ };
+ });
$scope.refresh();
}, $scope);
$scope.refresh();
http://git-wip-us.apache.org/repos/asf/eagle/blob/97ae1da5/eagle-metric/eagle-hdfs-web/src/main/webapp/app/apps/hdfs/index.js
----------------------------------------------------------------------
diff --git a/eagle-metric/eagle-hdfs-web/src/main/webapp/app/apps/hdfs/index.js b/eagle-metric/eagle-hdfs-web/src/main/webapp/app/apps/hdfs/index.js
index a4d6576..fb64d4e 100644
--- a/eagle-metric/eagle-hdfs-web/src/main/webapp/app/apps/hdfs/index.js
+++ b/eagle-metric/eagle-hdfs-web/src/main/webapp/app/apps/hdfs/index.js
@@ -35,12 +35,12 @@
controller: "datanodeDetailCtrl",
resolve: {time: true}
}).route("datanodeList", {
- url: "/hadoopService/hdfs/datanodeList",
+ url: "/hadoopService/hdfs/datanodeList?status",
site: true,
templateUrl: "partials/datanodeList.html",
controller: "datanodeListCtrl"
}).route("namenodeList", {
- url: "/hadoopService/hdfs/namenodeList",
+ url: "/hadoopService/hdfs/namenodeList?status",
site: true,
templateUrl: "partials/namenodeList.html",
controller: "namenodeListCtrl"
@@ -250,6 +250,8 @@
});
_list.done = true;
return _list;
+ }, function () {
+ return [];
});
return _list;
};
@@ -265,13 +267,13 @@
return wrapList(HDFSMETRIC.get(metrics_url));
};
- HDFSMETRIC.getHadoopHostByStatusAndRole = function (service, siteId, status,role, limit) {
+ HDFSMETRIC.getHadoopHostByStatusAndRole = function (service, siteId, status,role) {
var condition = {
site: siteId,
role: role,
status: status
};
- return HDFSMETRIC.hadoopHostStatus(service, condition, limit);
+ return HDFSMETRIC.hadoopHostStatus(service, condition);
};
HDFSMETRIC.getStatusByRoleAndHost = function (service, hostname, role, siteid) {
http://git-wip-us.apache.org/repos/asf/eagle/blob/97ae1da5/eagle-metric/eagle-hdfs-web/src/main/webapp/app/apps/hdfs/partials/datanodeList.html
----------------------------------------------------------------------
diff --git a/eagle-metric/eagle-hdfs-web/src/main/webapp/app/apps/hdfs/partials/datanodeList.html b/eagle-metric/eagle-hdfs-web/src/main/webapp/app/apps/hdfs/partials/datanodeList.html
index 0a31b9e..b76d44d 100644
--- a/eagle-metric/eagle-hdfs-web/src/main/webapp/app/apps/hdfs/partials/datanodeList.html
+++ b/eagle-metric/eagle-hdfs-web/src/main/webapp/app/apps/hdfs/partials/datanodeList.html
@@ -28,7 +28,7 @@
<table class="table table-bordered">
<thead>
<tr>
- <th sortpath="tags.hostname">RegionServer</th>
+ <th sortpath="tags.hostname">Datanode</th>
<th sortpath="tags.rack">Rack</th>
<th sortpath="tags.site">SiteId</th>
<th sortpath="status">Status</th>
http://git-wip-us.apache.org/repos/asf/eagle/blob/97ae1da5/eagle-metric/eagle-hdfs-web/src/main/webapp/app/apps/hdfs/partials/overview.html
----------------------------------------------------------------------
diff --git a/eagle-metric/eagle-hdfs-web/src/main/webapp/app/apps/hdfs/partials/overview.html b/eagle-metric/eagle-hdfs-web/src/main/webapp/app/apps/hdfs/partials/overview.html
index 328b869..7a6d9ad 100644
--- a/eagle-metric/eagle-hdfs-web/src/main/webapp/app/apps/hdfs/partials/overview.html
+++ b/eagle-metric/eagle-hdfs-web/src/main/webapp/app/apps/hdfs/partials/overview.html
@@ -27,16 +27,18 @@
<table class="table table-striped hadoopMetric-table">
<tr>
<td width="5%">
- <a ui-sref="namenodeList({siteId: site})" target="_blank">
- <span ng-show="namenodeactivenum">{{namenodeactivenum}}</span></a>
- <span ng-show="!namenodeactivenum">N/A</span>
+ <span ng-show="!namenodeactivenum">0</span>
+ <span ng-show="namenodeactivenum!==-1"><a ui-sref="namenodeList({siteId: site, status: 'active'})" target="_blank">{{namenodeactivenum}}</a></span>
+ <span ng-show="namenodeactivenum===-1">N/A</span>
</td>
<th width="30%">Active Namenode</th>
<td>
- <span ng-show="capacityNum">{{common.number.format(capacityNum, 0)}} TB</span>
- <span ng-show="!capacityNum">N/A</span>
- Capacity <span ng-show="usedCapacityNum">{{common.number.format(usedCapacityNum, 0)}} TB</span>
- <span ng-show="!usedCapacityNum">N/A</span> usedCapacity
+ <span ng-show="capacityNum!==-1 && capacityNum">{{common.number.format(capacityNum, 0)}}</span>
+ <span ng-show="!capacityNum">0</span>
+ <span ng-show="capacityNum===-1">N/A</span> TB
+ <strong>Capacity</strong> <span ng-show="usedCapacityNum!==-1 && usedCapacityNum">{{common.number.format(usedCapacityNum, 0)}}</span>
+ <span ng-show="!usedCapacityNum">0</span>
+ <span ng-show="usedCapacityNum===-1">N/A</span> TB <strong>usedCapacity</strong>
</td>
<th width="30%">
@@ -44,26 +46,26 @@
</tr>
<tr>
<td>
- <a ui-sref="namenodeList({siteId: site})" target="_blank">
- <span ng-show="namenodestandbynum">{{namenodestandbynum}}</span></a>
- <span ng-show="!namenodestandbynum">N/A</span>
+ <span ng-show="namenodestandbynum!==-1"><a ui-sref="namenodeList({siteId: site, status: 'standby'})" target="_blank">{{namenodestandbynum}}</a></span>
+ <span ng-show="!namenodestandbynum">0</span>
+ <span ng-show="namenodestandbynum===-1">N/A</span>
</td>
<th>Backup Namenode</th>
</tr>
<tr>
<td>
- <a ui-sref="datanodeList({siteId: site})">
- <span ng-show="datanodehealtynum || datanodeunhealtynum">{{datanodehealtynum+datanodeunhealtynum}}</span></a>
- <span ng-show="!datanodehealtynum && !datanodeunhealtynum">N/A</span>
+ <span ng-show="datanodehealtynum!==-1 && datanodeunhealtynum!==-1"><a ui-sref="datanodeList({siteId: site})">{{datanodehealtynum+datanodeunhealtynum}}</a></span>
+ <span ng-show="!datanodehealtynum && !datanodeunhealtynum">0</span>
+ <span ng-show="datanodehealtynum===-1 || datanodeunhealtynum===-1">N/A</span>
</td>
<th>Datanodes:
- <span ng-show="datanodehealtynum">{{datanodehealtynum}}</span>
- <span ng-show="!datanodehealtynum">N/A</span>
- <span
- class="label label-success">Good Health</span> /
- <a ui-sref="datanodeList({siteId: site})">
- <span ng-show="datanodeunhealtynum">{{datanodeunhealtynum}}</span></a>
+ <span ng-show="datanodehealtynum!==-1 && datanodeunhealtynum!==-1 && datanodehealtynum"><a ui-sref="datanodeList({siteId: site, status: 'live'})">{{datanodehealtynum || 0}}</a></span>
+ <span ng-show="!datanodehealtynum">0</span>
+ <span ng-show="datanodehealtynum===-1 || datanodeunhealtynum===-1">N/A</span>
+ <span class="label label-success">Good Health</span> /
+ <span ng-show="datanodehealtynum!==-1 && datanodeunhealtynum!==-1 && datanodeunhealtynum"><a ui-sref="datanodeList({siteId: site, status: 'dead'})">{{datanodeunhealtynum || 0}}</a></span>
<span ng-show="!datanodeunhealtynum">0</span>
+ <span ng-show="datanodehealtynum===-1 || datanodeunhealtynum===-1">N/A</span>
<span class="label label-danger">Bad Health</span>
</th>
<td></td>
@@ -95,20 +97,29 @@
<div class="col-sm-6 col-md-4 col-lg-6" ng-repeat="chart in chartList track by $index">
<div class="hadoopMetric-chart">
<h3>{{metricList[chart.name].title}}</h3>
- <div ng-show="metricList[chart.name].loading"
- class="fa fa-refresh fa-spin no-animate"></div>
- <div ng-show="metricList[chart.name].series.length" chart
- class="hadoopMetric-chart-container"
+ <div ng-show="activeNamenodeList && metricList[chart.name].loading" chart class="hadoopMetric-chart-container"></div>
+ <div ng-show="activeNamenodeList && metricList[chart.name].loading" class="overlay-wrapper">
+ <div class="overlay">
+ <i class="fa fa-refresh fa-spin"></i>
+ </div>
+ </div>
+ <div ng-show="activeNamenodeList && metricList[chart.name].series.length" chart class="hadoopMetric-chart-container"
series="metricList[chart.name].series"
option="metricList[chart.name].option"></div>
- <div ng-show="!metricList[chart.name].series.length && !metricList[chart.name].loading"
- class="hadoopMetric-chart-container">
+ <div ng-show="activeNamenodeList && !metricList[chart.name].series.length && !metricList[chart.name].loading" class="hadoopMetric-chart-container">
<div class="hadoopMetric-chart-container-withborder">
<div class="hadoopMetric-no-chart-data">
<span class="fa fa-question-circle"></span><span> NO DATA</span>
</div>
</div>
</div>
+ <div ng-show="!activeNamenodeList" class="hadoopMetric-chart-container">
+ <div class="hadoopMetric-chart-container-withborder">
+ <div class="hadoopMetric-no-chart-data">
+ <span class="fa fa-question-circle"></span><span> N/A</span>
+ </div>
+ </div>
+ </div>
</div>
</div>
</div>
http://git-wip-us.apache.org/repos/asf/eagle/blob/97ae1da5/eagle-metric/eagle-hdfs-web/src/main/webapp/app/apps/hdfs/widget/availabilityChart.js
----------------------------------------------------------------------
diff --git a/eagle-metric/eagle-hdfs-web/src/main/webapp/app/apps/hdfs/widget/availabilityChart.js b/eagle-metric/eagle-hdfs-web/src/main/webapp/app/apps/hdfs/widget/availabilityChart.js
index 6653438..e0df1a8 100644
--- a/eagle-metric/eagle-hdfs-web/src/main/webapp/app/apps/hdfs/widget/availabilityChart.js
+++ b/eagle-metric/eagle-hdfs-web/src/main/webapp/app/apps/hdfs/widget/availabilityChart.js
@@ -55,21 +55,29 @@
$.map(res, function (data) {
$scope.namenodeactivenum = data.value[0];
});
+ }, function () {
+ $scope.namenodeactivenum = -1;
});
HDFSMETRIC.countHadoopRole("HdfsServiceInstance", site.siteId, "standby", "namenode", ["site"], "count")._promise.then(function (res) {
$.map(res, function (data) {
$scope.namenodestandbynum = data.value[0];
});
+ }, function () {
+ $scope.namenodestandbynum = -1;
});
HDFSMETRIC.countHadoopRole("HdfsServiceInstance", site.siteId, "live", "datanode", ["site"], "count")._promise.then(function (res) {
$.map(res, function (data) {
$scope.datanodehealtynum = data.value[0];
});
+ }, function () {
+ $scope.datanodehealtynum = -1;
});
HDFSMETRIC.countHadoopRole("HdfsServiceInstance", site.siteId, "dead", "datanode", ["site"], "count")._promise.then(function (res) {
$.map(res, function (data) {
$scope.datanodeunhealtynum = data.value[0];
});
+ }, function () {
+ $scope.datanodeunhealtynum = -1;
});
});
}
@@ -85,22 +93,39 @@
'<div class="small-box hadoopMetric-widget bg-{{bgColor}}">' +
'<div class="inner">' +
'<h3>{{type}}</h3>' +
- '<div ng-show="namenodeactivenum" class="hadoopMetric-widget-detail">' +
- '<a ui-sref="namenodeList({siteId: site.siteId})">' +
+ '<div ng-show="namenodeactivenum!==-1 && namenodestandbynum!==-1" class="hadoopMetric-widget-detail">' +
+ '<a ng-show="namenodeactivenum || namenodestandbynum" ui-sref="namenodeList({siteId: site.siteId})">' +
'<span>{{namenodeactivenum+namenodestandbynum}}</span> Namenodes (' +
- '<span ng-show="namenodeactivenum">{{namenodeactivenum}}</span><span ng-show="!namenodeactivenum">0</span> Active / ' +
- '<span ng-show="namenodestandbynum">{{namenodestandbynum}}</span><span ng-show="!namenodestandbynum">0</span> Standby)' +
+ '<span>{{namenodeactivenum||0}}</span> Active / ' +
+ '<span>{{namenodestandbynum||0}}</span> Standby)' +
'</a>' +
+ '<div ng-show="!namenodeactivenum && !namenodestandbynum">' +
+ '<span>0</span> Masters (' +
+ '<span>0</span> Active / ' +
+ '<span>0</span> Standby)' +
'</div>' +
- '<div ng-show="!namenodeactivenum" class="hadoopMetric-widget-detail">' +
- '<span class="fa fa-question-circle"></span><span> NO DATA</span>' +
'</div>' +
- '<div ng-show="namenodeactivenum" class="hadoopMetric-widget-detail">' +
- '<a ui-sref="datanodeList({siteId: site.siteId})">' +
+ '<div ng-show="namenodeactivenum===-1 || namenodestandbynum===-1" class="hadoopMetric-widget-detail">' +
+ '<span>N/A</span> Namenodes (' +
+ '<span>N/A</span> Active / ' +
+ '<span>N/A</span> Standby)' +
+ '</div>' +
+ '<div ng-show="datanodehealtynum!==-1 && datanodeunhealtynum!==-1" class="hadoopMetric-widget-detail">' +
+ '<a ng-show="datanodehealtynum || datanodeunhealtynum" ui-sref="datanodeList({siteId: site.siteId})">' +
'<span>{{datanodehealtynum+datanodeunhealtynum}}</span> Datanodes (' +
- '<span ng-show="datanodehealtynum">{{datanodehealtynum}}</span><span ng-show="!datanodehealtynum">0</span> Healthy / ' +
- '<span ng-show="datanodeunhealtynum">{{datanodeunhealtynum}}</span><span ng-show="!datanodeunhealtynum">0</span> Unhealthy)' +
+ '<span>{{datanodehealtynum||0}}</span> Healthy / ' +
+ '<span>{{datanodeunhealtynum||0}}</span> Unhealthy)' +
'</a>' +
+ '<div ng-show="!datanodehealtynum && !datanodehealtynum">' +
+ '<span>0</span> Masters (' +
+ '<span>0</span> Active / ' +
+ '<span>0</span> Standby)' +
+ '</div>' +
+ '</div>' +
+ '<div ng-show="datanodehealtynum===-1 || datanodeunhealtynum===-1" class="hadoopMetric-widget-detail">' +
+ '<span>N/A</span> Datanodes (' +
+ '<span>N/A</span> Healthy / ' +
+ '<span>N/A</span> Unhealthy)' +
'</div>' +
'</div>' +
'<div class="icon">' +