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 <[email protected]>

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 <[email protected]>
Authored: Tue Feb 28 13:54:40 2017 +0800
Committer: Hao Chen <[email protected]>
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">' +

Reply via email to