Do not abort when one of multiple promises fails
The goal is to load as much data as possible on the
'Server overview' page. In original code, multiple promises are
executed in parallel using $q.all() to get data for the page.
When any of the promises fails, the remaining promises are
aborted. The fix is to write a method to resolve the promise
returned from each of the APIUtils calls, which would set the scope
variables, and pass the promise returned by it to $q.all instead.
Resolves openbmc/openbmc#3151
Change-Id: I361c80ddd2665dbe43f8a635eda42ef2b5c0788c
Signed-off-by: CamVan Nguyen <ctnguyen@us.ibm.com>
diff --git a/app/common/services/api-utils.js b/app/common/services/api-utils.js
index 6f81ce1..13f1406 100644
--- a/app/common/services/api-utils.js
+++ b/app/common/services/api-utils.js
@@ -1096,7 +1096,7 @@
if ('Not Found' == error.statusText) {
return Constants.POWER_CONSUMPTION_TEXT.notavailable;
} else {
- console.log(error);
+ throw error;
}
});
},
@@ -1116,8 +1116,6 @@
return (false == content.data.PowerCapEnable) ?
Constants.POWER_CAP_TEXT.disabled :
content.data.PowerCap + ' ' + Constants.POWER_CAP_TEXT.unit;
- }, function(error){
- console.log(error);
});
},
setHostname: function(hostname){
diff --git a/app/overview/controllers/system-overview-controller.js b/app/overview/controllers/system-overview-controller.js
index 5ce57dc..2f37c01 100644
--- a/app/overview/controllers/system-overview-controller.js
+++ b/app/overview/controllers/system-overview-controller.js
@@ -22,8 +22,6 @@
$scope.dropdown_selected = false;
$scope.tmz = 'EDT';
$scope.logs = [];
- $scope.mac_address = "";
- $scope.bmc_info = {};
$scope.server_info = {};
$scope.bmc_firmware = "";
$scope.bmc_time = "";
@@ -37,72 +35,89 @@
loadOverviewData();
function loadOverviewData(){
$scope.loading = true;
- var promises = {
- logs: APIUtils.getLogs(),
- firmware: APIUtils.getFirmwares(),
- led: APIUtils.getLEDState(),
- ethernet: APIUtils.getBMCEthernetInfo(),
- bmc_info: APIUtils.getBMCInfo(),
- bmc_time: APIUtils.getBMCTime(),
- server_info: APIUtils.getServerInfo(),
- power_consumption: APIUtils.getPowerConsumption(),
- power_cap: APIUtils.getPowerCap(),
- network_info: APIUtils.getNetworkInfo(),
- };
- $q.all(promises)
- .then(function(data){
- $scope.displayLogs(data.logs.data);
- $scope.displayServerInfo(
- data.server_info,
- data.firmware.hostActiveVersion
- );
- $scope.displayLEDState(data.led);
- $scope.displayBMCEthernetInfo(data.ethernet);
- $scope.displayBMCInfo(
- data.bmc_info,
- data.firmware.bmcActiveVersion
- );
- $scope.displayBMCTime(data.bmc_time);
- $scope.displayPowerConsumption(data.power_consumption);
- $scope.displayPowerCap(data.power_cap);
- $scope.displayNetworkInfo(data.network_info);
- })
- .finally(function(){
+
+ var getLogsPromise =
+ APIUtils.getLogs().then(function(data){
+ $scope.logs = data.data.filter(function(log){
+ return log.severity_flags.high == true;
+ });
+ }, function(error){
+ console.log(JSON.stringify(error));
+ })
+
+ var getFirmwaresPromise =
+ APIUtils.getFirmwares().then(function(data){
+ $scope.bmc_firmware = data.bmcActiveVersion;
+ $scope.server_firmware = data.hostActiveVersion;
+ }, function(error){
+ console.log(JSON.stringify(error));
+ })
+
+ var getLEDStatePromise =
+ APIUtils.getLEDState().then(function(data){
+ if(data == APIUtils.LED_STATE.on){
+ dataService.LED_state = APIUtils.LED_STATE_TEXT.on;
+ }else{
+ dataService.LED_state = APIUtils.LED_STATE_TEXT.off;
+ }
+ }, function(error){
+ console.log(JSON.stringify(error));
+ })
+
+ var getBMCTimePromise =
+ APIUtils.getBMCTime().then(function(data){
+ $scope.bmc_time = data.data.Elapsed / 1000;
+ }, function(error){
+ console.log(JSON.stringify(error));
+ })
+
+ var getServerInfoPromise =
+ APIUtils.getServerInfo().then(function(data){
+ $scope.server_info = data.data;
+ }, function(error){
+ console.log(JSON.stringify(error));
+ })
+
+ var getPowerConsumptionPromise =
+ APIUtils.getPowerConsumption().then(function(data){
+ $scope.power_consumption = data;
+ }, function(error){
+ console.log(JSON.stringify(error));
+ })
+
+ var getPowerCapPromise =
+ APIUtils.getPowerCap().then(function(data){
+ $scope.power_cap = data;
+ }, function(error){
+ console.log(JSON.stringify(error));
+ })
+
+ var getNetworkInfoPromise =
+ APIUtils.getNetworkInfo().then(function(data){
+ // TODO: openbmc/openbmc#3150 Support IPV6 when
+ // officially supported by the backend
+ $scope.bmc_ip_addresses =
+ data.formatted_data.ip_addresses.ipv4;
+ }, function(error){
+ console.log(JSON.stringify(error));
+ })
+
+ var promises = [
+ getLogsPromise,
+ getFirmwaresPromise,
+ getLEDStatePromise,
+ getBMCTimePromise,
+ getServerInfoPromise,
+ getPowerConsumptionPromise,
+ getPowerCapPromise,
+ getNetworkInfoPromise,
+ ];
+
+ $q.all(promises).finally(function(){
$scope.loading = false;
- });
- }
- $scope.displayBMCEthernetInfo = function(data){
- $scope.mac_address = data.MACAddress;
- }
-
- $scope.displayBMCInfo = function(data, bmcActiveVersion){
- $scope.bmc_info = data;
- $scope.bmc_firmware = bmcActiveVersion;
- }
-
- $scope.displayBMCTime = function(data){
- $scope.bmc_time = data.data.Elapsed / 1000;
- }
-
- $scope.displayLogs = function(data){
- $scope.logs = data.filter(function(log){
- return log.severity_flags.high == true;
});
}
- $scope.displayServerInfo = function(data, hostActiveVersion){
- $scope.server_info = data.data;
- $scope.server_firmware = hostActiveVersion;
- }
-
- $scope.displayLEDState = function(state){
- if(state == APIUtils.LED_STATE.on){
- dataService.LED_state = APIUtils.LED_STATE_TEXT.on;
- }else{
- dataService.LED_state = APIUtils.LED_STATE_TEXT.off;
- }
- }
-
$scope.toggleLED = function(){
var toggleState = (dataService.LED_state == APIUtils.LED_STATE_TEXT.on) ?
APIUtils.LED_STATE.off : APIUtils.LED_STATE.on;
@@ -112,21 +127,6 @@
});
}
- $scope.displayPowerConsumption = function(data){
- $scope.power_consumption = data;
- }
-
- $scope.displayPowerCap = function(data){
- $scope.power_cap = data;
- }
-
- $scope.displayNetworkInfo = function(data){
- // TODO: openbmc/openbmc#3150 Support IPV6 when officially
- // supported by the backend
- $scope.bmc_ip_addresses =
- data.formatted_data.ip_addresses.ipv4;
- }
-
$scope.saveHostname = function(hostname) {
$scope.edit_server_name = false;
$scope.loading = true;