Repository: eagle
Updated Branches:
  refs/heads/master 653725484 -> 9c71b0ea0


[EAGLE-845][IMPROVEMENT] Using aggregation query in backend instead of 
calculating count in frontend.

[IMPROVEMENT] Using aggregation query in backend instead of calculating count 
in frontend.
- Using siteId as query argument.
- Using aggregation query in backend instead of calculating count in frontend.

Author: chitin <[email protected]>

Closes #782 from chitin/refactorquery.


Project: http://git-wip-us.apache.org/repos/asf/eagle/repo
Commit: http://git-wip-us.apache.org/repos/asf/eagle/commit/9c71b0ea
Tree: http://git-wip-us.apache.org/repos/asf/eagle/tree/9c71b0ea
Diff: http://git-wip-us.apache.org/repos/asf/eagle/diff/9c71b0ea

Branch: refs/heads/master
Commit: 9c71b0ea05d3dcec51024873667865c695075ac1
Parents: 6537254
Author: chitin <[email protected]>
Authored: Thu Jan 19 18:47:23 2017 +0800
Committer: Hao Chen <[email protected]>
Committed: Thu Jan 19 18:47:23 2017 +0800

----------------------------------------------------------------------
 .../webapp/app/apps/hadoop_metric/config.json   | 18 ++--
 .../app/apps/hadoop_metric/ctrls/overview.js    | 96 ++++++++++----------
 .../hadoop_metric/ctrls/regionDetailCtrl.js     |  9 +-
 .../main/webapp/app/apps/hadoop_metric/index.js | 20 ++++
 .../apps/hadoop_metric/partials/overview.html   | 40 ++++++--
 .../hadoop_metric/widgets/availabilityChart.js  | 72 ++++++++-------
 6 files changed, 148 insertions(+), 107 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/eagle/blob/9c71b0ea/eagle-hadoop-metric/src/main/webapp/app/apps/hadoop_metric/config.json
----------------------------------------------------------------------
diff --git 
a/eagle-hadoop-metric/src/main/webapp/app/apps/hadoop_metric/config.json 
b/eagle-hadoop-metric/src/main/webapp/app/apps/hadoop_metric/config.json
index 185e791..88b14f6 100644
--- a/eagle-hadoop-metric/src/main/webapp/app/apps/hadoop_metric/config.json
+++ b/eagle-hadoop-metric/src/main/webapp/app/apps/hadoop_metric/config.json
@@ -42,15 +42,15 @@
                "nonheap" : "hadoop.memory.nonheapmemoryusage.used",
                "heap" : "hadoop.memory.heapmemoryusage.used",
                "directmemory" : "hadoop.bufferpool.direct.memoryused",
-               "GC count" : "hadoop.hbase.jvm.gccount",
-               "GC TimeMillis" : "hadoop.hbase.jvm.gctimemillis",
-               "QueueSize" : "hadoop.hbase.ipc.ipc.queuesize",
-               "NumCallsInGeneralQueue" : 
"hadoop.hbase.ipc.ipc.numcallsingeneralqueue",
-               "NumActiveHandler" : "hadoop.hbase.ipc.ipc.numactivehandler",
-               "IPC Queue Time (99th" : 
"hadoop.hbase.ipc.ipc.queuecalltime_99th_percentile",
-               "IPC Process Time (99th" : 
"hadoop.hbase.ipc.ipc.processcalltime_99th_percentile",
-               "QueueCallTime_num_ops" : 
"hadoop.hbase.ipc.ipc.queuecalltime_num_ops",
-               "ProcessCallTime_num_ops" : 
"hadoop.hbase.ipc.ipc.processcalltime_num_ops",
+               "GCCount" : "hadoop.hbase.jvm.gccount",
+               "GCTimeMillis" : "hadoop.hbase.jvm.gctimemillis",
+               "QueueSize" : "hadoop.hbase.regionserver.ipc.queuesize",
+               "NumCallsInGeneralQueue" : 
"hadoop.hbase.regionserver.ipc.numcallsingeneralqueue",
+               "NumActiveHandler" : 
"hadoop.hbase.regionserver.ipc.numactivehandler",
+               "IPCQueueTime99th" : 
"hadoop.hbase.regionserver.ipc.queuecalltime_99th_percentile",
+               "IPCProcessTime99th" : 
"hadoop.hbase.regionserver.ipc.processcalltime_99th_percentile",
+               "QueueCallTime_num_ops" : 
"hadoop.hbase.regionserver.ipc.queuecalltime_num_ops",
+               "ProcessCallTime_num_ops" : 
"hadoop.hbase.regionserver.ipc.processcalltime_num_ops",
                "RegionCount" : "hadoop.hbase.regionserver.server.regioncount",
                "StoreCount" : "hadoop.hbase.regionserver.server.storecount",
                "MemStoreSize" : 
"hadoop.hbase.regionserver.server.memstoresize",

http://git-wip-us.apache.org/repos/asf/eagle/blob/9c71b0ea/eagle-hadoop-metric/src/main/webapp/app/apps/hadoop_metric/ctrls/overview.js
----------------------------------------------------------------------
diff --git 
a/eagle-hadoop-metric/src/main/webapp/app/apps/hadoop_metric/ctrls/overview.js 
b/eagle-hadoop-metric/src/main/webapp/app/apps/hadoop_metric/ctrls/overview.js
index 8e9140f..406adf2 100644
--- 
a/eagle-hadoop-metric/src/main/webapp/app/apps/hadoop_metric/ctrls/overview.js
+++ 
b/eagle-hadoop-metric/src/main/webapp/app/apps/hadoop_metric/ctrls/overview.js
@@ -69,12 +69,12 @@
                                                        host: 
$scope.defaultHostname
                                                };
                                                return 
METRIC.aggMetricsToEntities(METRIC.hbaseMetricsAggregation(jobCond, name, 
["site"], "avg(value)", intervalMin, trendStartTime, trendEndTime), flag)
-                                               ._promise.then(function (list) {
-                                                       var metricFlag = 
$.map(list, function (metrics) {
-                                                               return 
metrics[0].flag;
+                                                       ._promise.then(function 
(list) {
+                                                               var metricFlag 
= $.map(list, function (metrics) {
+                                                                       return 
metrics[0].flag;
+                                                               });
+                                                               return 
[metricFlag, list];
                                                        });
-                                                       return [metricFlag, 
list];
-                                               });
                                        });
                        }
 
@@ -82,7 +82,7 @@
                                var series = [];
 
                                $.each(metrics, function (i, metricMap) {
-                                       if(typeof metricMap !== 'undefined') {
+                                       if (typeof metricMap !== 'undefined') {
                                                
series.push(METRIC.metricsToSeries(legendName[i], metricMap[0], option));
                                        }
                                });
@@ -93,12 +93,28 @@
                                };
                        }
 
+                       function countHBaseRole(site, status, role, groups, 
filed, limit) {
+                               var jobCond = {
+                                       site: site,
+                                       status: status,
+                                       role: role
+                               };
+                               return METRIC.aggHBaseInstance(jobCond, groups, 
filed, limit);
+                       }
+
+                       function sumAllRegions(site, role, groups, filed, 
limit) {
+                               var jobCond = {
+                                       site: site,
+                                       role: role
+                               };
+                               return METRIC.aggHBaseInstance(jobCond, groups, 
filed, limit);
+                       }
+
                        // TODO: Optimize the chart count
                        // TODO: ECharts dynamic refresh series bug: 
https://github.com/ecomfe/echarts/issues/4033
 
 
                        $scope.refresh = function () {
-                               var hbaseservers = 
METRIC.hbasehostStatus({site: $scope.site});
                                var metricspromies = [];
                                METRIC.getMetricObj().then(function (res) {
                                        var masterMetricList = res.master;
@@ -107,7 +123,7 @@
                                        }
                                        $q.all(metricspromies).then(function 
(resp) {
                                                var metricObj = {};
-                                               for(var i=0; i < resp.length; 
i+=1) {
+                                               for (var i = 0; i < 
resp.length; i += 1) {
                                                        metricObj[resp[i][0]] = 
resp[i][1];
                                                }
                                                return metricObj;
@@ -132,51 +148,31 @@
                                        });
                                });
 
-                               METRIC.regionserverStatus($scope.hostname, 
$scope.site)._promise.then(function (res) {
-                                       $scope.regionstatus = res;
+                               countHBaseRole($scope.site, "active", 
"hmaster", ["site"], "count")._promise.then(function (res) {
+                                       $.map(res, function (data) {
+                                               $scope.hmasteractivenum = 
data.value[0];
+                                       });
                                });
-
-                               hbaseservers._promise.then(function (res) {
-                                       var regionserverhealtynum = 0;
-                                       var regionservertotal = 0;
-                                       var hmasterstandbynum = 0;
-                                       var hmasteractivenum = 0;
-                                       var regionsnum = 0;
-                                       var regionArray = [];
-                                       $.each(res, function (i, server) {
-                                               var role = server.tags.role;
-                                               var status = server.status;
-                                               if (role === "regionserver") {
-                                                       regionservertotal++;
-                                                       if (status === "live") {
-                                                               
regionserverhealtynum++;
-                                                       }
-                                                       
regionArray.push(METRIC.regionserverStatus(server.tags.hostname, 
$scope.site)._promise.then(function (res) {
-                                                               return 
res[0].numRegions;
-                                                       }));
-                                               }
-                                               else if (role === "hmaster") {
-                                                       if (status === 
"active") {
-                                                               
hmasteractivenum++;
-                                                       } else {
-                                                               
hmasterstandbynum++;
-                                                       }
-
-                                               }
+                               countHBaseRole($scope.site, "standby", 
"hmaster", ["site"], "count")._promise.then(function (res) {
+                                       $.map(res, function (data) {
+                                               $scope.hmasterstandbynum = 
data.value[0]
                                        });
+                               });
 
-                                       $q.all(regionArray).then(function (res) 
{
-
-                                               for(var i=0; 
i<regionArray.length; i++) {
-                                                       regionsnum+=res[i];
-                                               }
-                                               $scope.regionsnum = regionsnum;
+                               countHBaseRole($scope.site, "live", 
"regionserver", ["site"], "count")._promise.then(function (res) {
+                                       $.map(res, function (data) {
+                                               $scope.regionserverhealtynum = 
data.value[0];
+                                       });
+                               });
+                               countHBaseRole($scope.site, "dead", 
"regionserver", ["site"], "count")._promise.then(function (res) {
+                                       $.map(res, function (data) {
+                                               $scope.regionserverunhealtynum 
= data.value[0];
+                                       });
+                               });
+                               sumAllRegions($scope.site, "regionserver", 
["site"], "sum(numRegions)")._promise.then(function (res) {
+                                       $.map(res, function (data) {
+                                               $scope.regionsnum = 
data.value[0];
                                        });
-
-                                       $scope.regionserverhealtynum = 
regionserverhealtynum;
-                                       $scope.regionservertotal = 
regionservertotal;
-                                       $scope.hmasterstandbynum = 
hmasterstandbynum;
-                                       $scope.hmasteractivenum = 
hmasteractivenum;
                                });
 
                                activeMasterInfo._promise.then(function (res) {
@@ -187,7 +183,7 @@
                                                component: "hbasemaster",
                                                host: $scope.defaultHostname
                                        };
-                                       
METRIC.hbaseMomentMetric(jobCond,"hadoop.hbase.master.server.averageload", 
1).then(function (res) {
+                                       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";
                                        });
                                });

http://git-wip-us.apache.org/repos/asf/eagle/blob/9c71b0ea/eagle-hadoop-metric/src/main/webapp/app/apps/hadoop_metric/ctrls/regionDetailCtrl.js
----------------------------------------------------------------------
diff --git 
a/eagle-hadoop-metric/src/main/webapp/app/apps/hadoop_metric/ctrls/regionDetailCtrl.js
 
b/eagle-hadoop-metric/src/main/webapp/app/apps/hadoop_metric/ctrls/regionDetailCtrl.js
index 1f8c40d..00f2c99 100644
--- 
a/eagle-hadoop-metric/src/main/webapp/app/apps/hadoop_metric/ctrls/regionDetailCtrl.js
+++ 
b/eagle-hadoop-metric/src/main/webapp/app/apps/hadoop_metric/ctrls/regionDetailCtrl.js
@@ -72,7 +72,6 @@
                                var endTime = Time.endTime();
                                var metricspromies = [];
                                METRIC.getMetricObj().then(function (res) {
-                                       console.log(res.regionserver);
                                        var masterMetricList = res.regionserver;
                                        for (var metricKey in masterMetricList) 
{
                                                
metricspromies.push(generateHbaseMetric(masterMetricList[metricKey], startTime, 
endTime, metricKey));
@@ -87,13 +86,13 @@
                                                $scope.metricList = [];
                                                
$scope.metricList.push(mergeSeries("Memory Usage", [seriesObj["nonheap"], 
seriesObj["heap"]], ["nonheap", "heap"], sizeoption));
                                                
$scope.metricList.push(mergeSeries("Direct Memory Usage", 
[seriesObj["directmemory"]], ["directmemory"], sizeoption));
-                                               
$scope.metricList.push(mergeSeries("GC count", [seriesObj["GC count"]], ["GC 
count"], {}));
-                                               
$scope.metricList.push(mergeSeries("GC TimeMillis", [seriesObj["GC 
TimeMillis"]], ["GC TimeMillis"], gctimeoption));
+                                               
$scope.metricList.push(mergeSeries("GC count", [seriesObj["GCCount"]], ["GC 
count"], {}));
+                                               
$scope.metricList.push(mergeSeries("GC TimeMillis", 
[seriesObj["GCTimeMillis"]], ["GC TimeMillis"], gctimeoption));
                                                
$scope.metricList.push(mergeSeries("QueueSize", [seriesObj["QueueSize"]], 
["QueueSize"], {}));
                                                
$scope.metricList.push(mergeSeries("NumCallsInGeneralQueue", 
[seriesObj["NumCallsInGeneralQueue"]], ["NumCallsInGeneralQueue"], {}));
                                                
$scope.metricList.push(mergeSeries("NumActiveHandler", 
[seriesObj["NumActiveHandler"]], ["NumActiveHandler"], {}));
-                                               
$scope.metricList.push(mergeSeries("IPC Queue Time (99th)", [seriesObj["IPC 
Queue Time (99th)"]], ["IPC Queue Time (99th)"], {}));
-                                               
$scope.metricList.push(mergeSeries("IPC Process Time (99th)", [seriesObj["IPC 
Process Time (99th)"]], ["IPC Process Time (99th)"], {}));
+                                               
$scope.metricList.push(mergeSeries("IPC Queue Time (99th)", 
[seriesObj["IPCQueueTime99th"]], ["IPC Queue Time (99th)"], {}));
+                                               
$scope.metricList.push(mergeSeries("IPC Process Time (99th)", 
[seriesObj["IPCProcessTime99th"]], ["IPC Process Time (99th)"], {}));
                                                
$scope.metricList.push(mergeSeries("QueueCallTime_num_ops", 
[seriesObj["QueueCallTime_num_ops"]], ["QueueCallTime_num_ops"], {}));
                                                
$scope.metricList.push(mergeSeries("ProcessCallTime_num_ops", 
[seriesObj["ProcessCallTime_num_ops"]], ["ProcessCallTime_num_ops"], {}));
                                                
$scope.metricList.push(mergeSeries("RegionCount", [seriesObj["RegionCount"]], 
["RegionCount"], {}));

http://git-wip-us.apache.org/repos/asf/eagle/blob/9c71b0ea/eagle-hadoop-metric/src/main/webapp/app/apps/hadoop_metric/index.js
----------------------------------------------------------------------
diff --git 
a/eagle-hadoop-metric/src/main/webapp/app/apps/hadoop_metric/index.js 
b/eagle-hadoop-metric/src/main/webapp/app/apps/hadoop_metric/index.js
index f0b6e13..43ab12a 100644
--- a/eagle-hadoop-metric/src/main/webapp/app/apps/hadoop_metric/index.js
+++ b/eagle-hadoop-metric/src/main/webapp/app/apps/hadoop_metric/index.js
@@ -73,6 +73,7 @@
                METRIC.QUERY_HBASE_METRICS = 
'${baseURL}/rest/entities?query=GenericMetricService[${condition}]{*}&metricName=${metric}&pageSize=${limit}';
                METRIC.QUERY_HBASE_METRICS_WITHTIME = 
'${baseURL}/rest/entities?query=GenericMetricService[${condition}]{*}&metricName=${metric}&pageSize=${limit}&startTime=${startTime}&endTime=${endTime}';
                METRIC.QUERY_HBASE_INSTANCE = 
'${baseURL}/rest/entities?query=HbaseServiceInstance[${condition}]{*}&pageSize=${limit}';
+               METRIC.QUERY_HBASE_INSTANCE_AGG = 
"${baseURL}/rest/entities?query=HbaseServiceInstance[${condition}]<${groups}>{${field}}&pageSize=${limit}";
                METRIC.QUERY_HBASE_METRICS_INTERVAL = 
'${baseURL}/rest/entities?query=GenericMetricService[${condition}]<${groups}>{${field}}${order}${top}&metricName=${metric}&pageSize=${limit}&startTime=${startTime}&endTime=${endTime}&intervalmin=${intervalMin}&timeSeries=true';
                /**
                 * Fetch query content with current site application 
configuration
@@ -184,6 +185,25 @@
                        return METRIC.get(metrics_url);
                };
 
+               METRIC.aggHBaseInstance = function (condition, groups, field, 
limit) {
+                       var fields = field.split(/\s*,\s*/);
+                       var fieldStr = $.map(fields, function (field, index) {
+                               var matches = field.match(/^([^\s]*)(\s+.*)?$/);
+                               if (matches[2]) {
+                                       orderId = index;
+                               }
+                               return matches[1];
+                       }).join(", ");
+                       var config = {
+                               condition: METRIC.condition(condition),
+                               groups: toFields(groups),
+                               field: fieldStr,
+                               limit: limit || 10000
+                       };
+                       var metrics_url = 
common.template(getQuery("HBASE_INSTANCE_AGG"), config);
+                       return wrapList(METRIC.get(metrics_url));
+               };
+
                METRIC.hbaseMetricsAggregation = function (condition, metric, 
groups, field, intervalMin, startTime, endTime, top, limit) {
                        var fields = field.split(/\s*,\s*/);
                        var orderId = -1;

http://git-wip-us.apache.org/repos/asf/eagle/blob/9c71b0ea/eagle-hadoop-metric/src/main/webapp/app/apps/hadoop_metric/partials/overview.html
----------------------------------------------------------------------
diff --git 
a/eagle-hadoop-metric/src/main/webapp/app/apps/hadoop_metric/partials/overview.html
 
b/eagle-hadoop-metric/src/main/webapp/app/apps/hadoop_metric/partials/overview.html
index 27965cb..5e3d00c 100644
--- 
a/eagle-hadoop-metric/src/main/webapp/app/apps/hadoop_metric/partials/overview.html
+++ 
b/eagle-hadoop-metric/src/main/webapp/app/apps/hadoop_metric/partials/overview.html
@@ -26,25 +26,46 @@
        <div class="box-body">
                <table class="table table-striped hadoopMetric-table">
                        <tr>
-                               <td width="5%">{{hmasteractivenum}}</td>
+                               <td width="5%">
+                                       <span 
ng-show="hmasteractivenum">{{hmasteractivenum}}</span>
+                                       <span ng-show="!hmasteractivenum" 
class="fa fa fa-refresh fa-spin no-animate"></span>
+                               </td>
                                <th width="45%">Active HBase Master</th>
-                               <td width="5%">{{regionsnum}}</td>
+                               <td width="5%">
+                                       <span 
ng-show="regionsnum">{{regionsnum}}</span>
+                                       <span ng-show="!regionsnum" class="fa 
fa fa-refresh fa-spin no-animate"></span>
+                               </td>
                                <th width="45%">Regions
                                </th>
                        </tr>
                        <tr>
-                               <td><a ui-sref="backupMasterList({siteId: 
site})" target="_blank">{{hmasterstandbynum}}</a></td>
+                               <td>
+                                       <a ui-sref="backupMasterList({siteId: 
site})" target="_blank">
+                                               <span 
ng-show="hmasterstandbynum">{{hmasterstandbynum}}</span></a>
+                                       <span 
ng-show="!hmasterstandbynum">0</span>
+                               </td>
                                <th>Backup HBase Master</th>
                                <td>
-                                       <span ng-show="hmasteraverageload !== 
'-1'">{{hmasteraverageload}}</span>
-                                       <span ng-show="hmasteraverageload === 
'-1'" class="fa fa-question-circle"></span>
+                                       <span ng-show="hmasteraverageload !== 
'-1'">{{common.number.format(hmasteraverageload, 0)}}</span>
+                                       <span ng-show="hmasteraverageload === 
'-1'" class="fa fa-refresh fa-spin no-animate"></span>
                                </td>
                                <th>Average Load</th>
                        </tr>
                        <tr>
-                               <td><a ui-sref="regionList({siteId: 
site})">{{regionservertotal}}</a></td>
-                               <th>RegionServers: <a 
ui-sref="regionList({siteId: site})">{{regionserverhealtynum}}</a> <span
-                                       class="label label-success">Good 
Health</span> / <a ui-sref="regionList({siteId: 
site})">{{regionservertotal-regionserverhealtynum}}</a>
+                               <td>
+                                       <a ui-sref="regionList({siteId: site})">
+                                               <span 
ng-show="regionserverhealtynum || 
regionserverunhealtynum">{{regionserverhealtynum+regionserverunhealtynum}}</span></a>
+                                       <span ng-show="!regionserverhealtynum 
&& !regionserverunhealtynum">0</span>
+                               </td>
+                               <th>RegionServers:
+                                       <a ui-sref="regionList({siteId: site})">
+                                               <span 
ng-show="regionserverhealtynum">{{regionserverhealtynum}}</span></a>
+                                       <span 
ng-show="!regionserverhealtynum">0</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 class="label label-danger">Bad 
Health</span>
                                </th>
                                <td></td>
@@ -67,7 +88,8 @@
                        <div class="col-sm-6 col-md-4 col-lg-3" 
ng-repeat="metric in metricList track by $index">
                                <div class="hadoopMetric-chart">
                                        <h3>{{metric.title}}</h3>
-                                       <div ng-show="metric.series.length" 
chart class="hadoopMetric-chart-container" series="metric.series"
+                                       <div ng-show="metric.series.length" 
chart class="hadoopMetric-chart-container"
+                                                series="metric.series"
                                                 option="metric.option"></div>
                                        <div ng-show="!metric.series.length" 
class="hadoopMetric-chart-container">
                                                <div 
class="hadoopMetric-chart-container-withborder">

http://git-wip-us.apache.org/repos/asf/eagle/blob/9c71b0ea/eagle-hadoop-metric/src/main/webapp/app/apps/hadoop_metric/widgets/availabilityChart.js
----------------------------------------------------------------------
diff --git 
a/eagle-hadoop-metric/src/main/webapp/app/apps/hadoop_metric/widgets/availabilityChart.js
 
b/eagle-hadoop-metric/src/main/webapp/app/apps/hadoop_metric/widgets/availabilityChart.js
index f2606ad..9e73c9b 100644
--- 
a/eagle-hadoop-metric/src/main/webapp/app/apps/hadoop_metric/widgets/availabilityChart.js
+++ 
b/eagle-hadoop-metric/src/main/webapp/app/apps/hadoop_metric/widgets/availabilityChart.js
@@ -54,38 +54,39 @@
                                        // Customize chart color
                                        $scope.bgColor = 
COLOR_MAPPING[$scope.type];
 
+                                       function countHBaseRole(site, status, 
role, groups, filed, limit) {
+                                               var jobCond = {
+                                                       site: site,
+                                                       status: status,
+                                                       role: role
+                                               };
+                                               return 
METRIC.aggHBaseInstance(jobCond, groups, filed, limit);
+                                       }
 
                                        // Ref: jpm widget if need keep refresh 
the widget
 
                                        function refresh() {
                                                $.each($scope.list, function 
(i, site) {
-                                                       var hbaseservers = 
METRIC.hbasehostStatus({site: site.siteName});
-                                                       
hbaseservers._promise.then(function (res) {
-                                                               var hmasternum 
= 0;
-                                                               var 
hmasteractivenum = 0;
-                                                               var 
regionserverHealthynum = 0;
-                                                               var 
regionservertotal = 0;
-                                                               $.each(res, 
function (i, server) {
-                                                                       var 
role = server.tags.role;
-                                                                       var 
status = server.status;
-                                                                       if 
(role === "hmaster") {
-                                                                               
hmasternum++;
-                                                                               
if (status === "active") {
-                                                                               
        hmasteractivenum++;
-                                                                               
}
-                                                                       } else 
if (role === "regionserver") {
-                                                                               
regionservertotal++;
-                                                                               
if (status === "live") {
-                                                                               
        regionserverHealthynum++;
-                                                                               
}
-                                                                       }
+
+                                                       
countHBaseRole(site.siteId, "active", "hmaster", ["site"], 
"count")._promise.then(function (res) {
+                                                               $.map(res, 
function (data) {
+                                                                       
$scope.hmasteractivenum = data.value[0];
+                                                               });
+                                                       });
+                                                       
countHBaseRole(site.siteId, "standby", "hmaster", ["site"], 
"count")._promise.then(function (res) {
+                                                               $.map(res, 
function (data) {
+                                                                       
$scope.hmasterstandbynum = data.value[0]
+                                                               });
+                                                       });
+                                                       
countHBaseRole(site.siteId, "live", "regionserver", ["site"], 
"count")._promise.then(function (res) {
+                                                               $.map(res, 
function (data) {
+                                                                       
$scope.regionserverhealtynum = data.value[0];
+                                                               });
+                                                       });
+                                                       
countHBaseRole(site.siteId, "dead", "regionserver", ["site"], 
"count")._promise.then(function (res) {
+                                                               $.map(res, 
function (data) {
+                                                                       
$scope.regionserverunhealtynum = data.value[0];
                                                                });
-                                                               
$scope.hbaseinfo = {
-                                                                       
hmasternum: hmasternum,
-                                                                       
hmasteractivenum: hmasteractivenum,
-                                                                       
regionserverHealthynum: regionserverHealthynum,
-                                                                       
regionservertotal: regionservertotal
-                                                               };
                                                        });
                                                });
                                        }
@@ -101,18 +102,21 @@
                                '<div class="small-box hadoopMetric-widget 
bg-{{bgColor}}">' +
                                    '<div class="inner">' +
                                        '<h3>{{type}}</h3>' +
-                                       '<div 
class="hadoopMetric-widget-detail">' +
+                                       '<div ng-show="hmasteractivenum" 
class="hadoopMetric-widget-detail">' +
                                                '<a 
ui-sref="HadoopMetric({siteId: site.siteName})">' +
-                                           
'<span>{{hbaseinfo.hmasternum}}</span> Masters (' +
-                                           
'<span>{{hbaseinfo.hmasteractivenum}}</span> Active / ' +
-                                           '<span>{{hbaseinfo.hmasternum - 
hbaseinfo.hmasteractivenum}}</span> Standby)' +
+                                           
'<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)' +
                                                '</a>' +
                                        '</div>' +
-                                       '<div 
class="hadoopMetric-widget-detail">' +
+                                       '<div ng-show="!hmasteractivenum" 
class="hadoopMetric-widget-detail">' +
+                                          '<span class="fa 
fa-question-circle"></span><span> NO DATA</span>' +
+                                       '</div>' +
+                                       '<div ng-show="hmasteractivenum" 
class="hadoopMetric-widget-detail">' +
                                            '<a ui-sref="regionList({siteId: 
site.siteName})">' +
-                                           
'<span>{{hbaseinfo.regionservertotal}}</span> RegionServers (' +
-                                           
'<span>{{hbaseinfo.regionserverHealthynum}}</span> Healthy / ' +
-                                           
'<span>{{hbaseinfo.regionservertotal - 
hbaseinfo.regionserverHealthynum}}</span> Unhealthy)' +
+                                           
'<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)' +
                                            '</a>' +
                                        '</div>' +
                                    '</div>' +

Reply via email to