Add dynamic content to system overview page

Change-Id: Id47db28c9ec7b4dc39b9b690797087e1970ce328
Signed-off-by: Iftekharul Islam <iislam@us.ibm.com>
diff --git a/app/common/directives/log-event.html b/app/common/directives/log-event.html
index 70d7dee..6b8f972 100644
--- a/app/common/directives/log-event.html
+++ b/app/common/directives/log-event.html
@@ -21,7 +21,7 @@
          <div class="column small-9 large-9 event-log__event-info"
               ng-click="event.meta = ! event.meta">
              <p class="inline event__priority event-resolved" ng-hide="event.Resolved == 0">Resolved</p>
-             <p class="inline event__priority med-priority" ng-class="{'low-priority': event.priority == 'Low', 'medium-priority': event.priority == 'Medium', 'high-priority': event.priority == 'High'}" ng-hide="event.Resolved == 1">{{event.priority}}</p>
+             <p class="inline event__priority" ng-class="{'low-priority': event.priority == 'Low', 'medium-priority': event.priority == 'Medium', 'high-priority': event.priority == 'High'}" ng-hide="event.Resolved == 1">{{event.priority}}</p>
              <p class="inline event__severity">{{event.severity_code}}</p>
              <p class="inline event__description">{{event.Severity}}</p>
              <div>
diff --git a/app/common/services/api-utils.js b/app/common/services/api-utils.js
index 540fb42..ed10768 100644
--- a/app/common/services/api-utils.js
+++ b/app/common/services/api-utils.js
@@ -67,7 +67,11 @@
                 }).success(function(response){
                       var json = JSON.stringify(response);
                       var content = JSON.parse(json);
-                      callback(content.data.Asserted);
+                      if(callback){
+                        callback(content.data.Asserted);
+                      }else{
+                        return content.data.Asserted;
+                      }
                 }).error(function(error){
                   console.log(error);
                 });
@@ -355,7 +359,11 @@
                           }, content.data[key]));
                         }
                       }
-                      callback(data, dataClone);
+                      if(callback){
+                        callback(data, dataClone);
+                      }else{
+                        return data;
+                      }
                 }).error(function(error){
                   console.log(error);
                 });
@@ -553,7 +561,11 @@
                           }
                         }
                       }
-                      callback(data, bmcActiveVersion, hostActiveVersion);
+                      if(callback){
+                        callback(data, bmcActiveVersion, hostActiveVersion);
+                      }else{
+                        return(data, bmcActiveVersion, hostActiveVersion);
+                      }
                 }).error(function(error){
                   console.log(error);
                 });
@@ -584,6 +596,48 @@
                   }
                 });
               },
+              getBMCEthernetInfo: function(callback){
+                $http({
+                  method: 'GET',
+                  url: SERVICE.API_CREDENTIALS.host + "/xyz/openbmc_project/inventory/system/chassis/motherboard/boxelder/bmc/ethernet",
+                  headers: {
+                      'Accept': 'application/json',
+                      'Content-Type': 'application/json'
+                  },
+                  withCredentials: true
+                }).success(function(response){
+                      var json = JSON.stringify(response);
+                      var content = JSON.parse(json);
+                      if(callback){
+                        callback(content.data);
+                      }else{
+                        return content.data;
+                      }
+                }).error(function(error){
+                  console.log(error);
+                });
+              },
+              getBMCInfo: function(callback){
+                $http({
+                  method: 'GET',
+                  url: SERVICE.API_CREDENTIALS.host + "/xyz/openbmc_project/inventory/system/chassis/motherboard/boxelder/bmc",
+                  headers: {
+                      'Accept': 'application/json',
+                      'Content-Type': 'application/json'
+                  },
+                  withCredentials: true
+                }).success(function(response){
+                      var json = JSON.stringify(response);
+                      var content = JSON.parse(json);
+                      if(callback){
+                        callback(content.data);
+                      }else{
+                        return content.data;
+                      }
+                }).error(function(error){
+                  console.log(error);
+                });
+              },
           };
           return SERVICE;
         }]);
diff --git a/app/overview/controllers/system-overview-controller.html b/app/overview/controllers/system-overview-controller.html
index 0c314e6..be4601a 100644
--- a/app/overview/controllers/system-overview-controller.html
+++ b/app/overview/controllers/system-overview-controller.html
@@ -17,19 +17,19 @@
 					<ul class="overview__metadata-wrapper">
 						<li class="overview__metadata-block">
 							<p class="content-label">Model</p>
-							<p class="courier-bold">5150-A0A</p>
+							<p class="courier-bold">{{bmc_info.Model}}</p>
 						</li>
 						<li class="overview__metadata-block">
 							<p class="content-label">Manufacturer</p>
-							<p class="courier-bold">IBM</p>
+							<p class="courier-bold">{{bmc_info.Manufacturer}}</p>
 						</li>
 						<li class="overview__metadata-block">
 							<p class="content-label">Firmware version</p>
-							<p class="courier-bold">2.3.104497</p>
+							<p class="courier-bold">{{server_firmware}}</p>
 						</li>
 						<li class="overview__metadata-block">
 							<p class="content-label">Serial number</p>
-							<p class="courier-bold">123456abcd</p>
+							<p class="courier-bold">{{bmc_info.SerialNumber}}</p>
 						</li>
 					</ul>
 				</div>
@@ -43,7 +43,7 @@
 					<ul class="overview__metadata-wrapper">
 						<li class="overview__metadata-block">
 							<p class="content-label">BMC IP address</p>
-							<p class="courier-bold">9.3.111.222</p>
+							<p class="courier-bold">{{dataService.server_id}}</p>
 						</li>
 						<li class="overview__metadata-block">
 							<p class="content-label">Hostname</p>
@@ -51,11 +51,11 @@
 						</li>
 						<li class="overview__metadata-block">
 							<p class="content-label">Mac address</p>
-							<p class="courier-bold"></p>
+							<p class="courier-bold">{{mac_address}}</p>
 						</li>
 						<li class="overview__metadata-block">
 							<p class="content-label">Firmware</p>
-							<p class="courier-bold">4.3.104497</p>
+							<p class="courier-bold">{{bmc_firmware}}</p>
 						</li>
 
 					</ul>
@@ -81,7 +81,7 @@
 			</div>
 
 			<!-- Power metadata -->
-			<div class="row column overview__event-log event-log__events" >
+			<div class="row column overview__event-log event-log__events" ng-show="logs.length">
 				<h3 class="bold h4">High priority events</h3>
 
 				<!-- TODO: I built event log section so that you could easily just pull in our existing event log template. All display tweaks (such as hiding checkbox) are done via SCSS -->
@@ -90,7 +90,7 @@
 				<!-- <p class="disabled">No high priority events</p> -->
 
 				<!-- single event -->
-				<a href="#/server-health/event-log"> <!-- this should go to specific event in event log page -->
+				<a href="#/server-health/event-log" ng-repeat="event in logs|orderBy:'+Id'"> <!-- this should go to specific event in event log page -->
 					<div class="row column event-log__single-event">
 						<div class="row">
 							<div class="column small-1 large-1 event-log__col-check">
@@ -101,12 +101,12 @@
 								</label>
 							</div>
 							<div class="column small-9 large-10 event-log__event-info" ng-click=""><!-- click will go to specific event in event log page-->
-								<p class="inline event__id">#00995</p>
+								<p class="inline event__id">#{{event.Id}}</p>
 								<p class="inline event__priority high-priority">High</p>
-								<p class="inline event__severity">emergency</p>
-								<p class="inline event__timestamp">03/09/2017 21:00:26 EDT</p>
+								<p class="inline event__severity">{{event.severity_code}}</p>
+								<p class="inline event__timestamp">{{event.Timestamp| date:'MM/dd/yyyy  HH:mm:ss '+tmz: tmz}}</p>
 								<div>
-									<p class="inline event__description">Vestibulum ac diam sit amet quam vehicula aliquet quam id dui</p>
+									<p class="inline event__description">{{event.Severity}}</p>
 								</div>
 							</div>
 							<div class="column small-1 large-1">
@@ -115,38 +115,12 @@
 						</div>
 					</div>
 				</a>
-				<!-- single event -->
-				<a href="#/server-health/event-log"><!-- this should go to specific event in event log page -->
-				<div class="row column event-log__single-event">
-					<div class="row">
-						<div class="column small-1 large-1 event-log__col-check">
-							<label class="control-check">
-								<input type="checkbox" name="events__check" ng-click="event.selected= ! event.selected"
-										ng-checked="event.selected"/>
-								<span class="control__indicator"></span>
-							</label>
-						</div>
-						<div class="column small-9 large-10 event-log__event-info" ng-click=""><!-- click will go to specific event in event log page-->
-							<p class="inline event__id">#00991</p>
-							<p class="inline event__priority high-priority">High</p>
-							<p class="inline event__severity">emergency</p>
-							<p class="inline event__timestamp">02/09/2017 21:00:26 EDT</p>
-							<div>
-								<p class="inline event__description">Vestibulum ac diam sit amet quam vehicula aliquet quam id dui Praesent sapien massa, convallis a pellentesque nec, egestas non nisi.</p>
-							</div>
-						</div>
-						<div class="column small-1 large-1">
-							<button class="accord-trigger"></button>
-						</div>
-					</div>
-				</div>
-				</a>
 			</div>
 		</div>
 		<div class="column large-4">
 			<div class="quick-links" >
-				<a href="" class="quick-links__item quick-links__events event-log__events" >
-					<span class="event__priority high-priority">High</span><p class="inline quick-links__event-copy">3 High priority events</p><!-- link to event log filtered to the high priority events -->
+				<a href="#/server-health/event-log" class="quick-links__item quick-links__events event-log__events" ng-show="logs.length">
+					<span class="event__priority high-priority">High</span><p class="inline quick-links__event-copy">{{logs.length}} High priority events</p><!-- link to event log filtered to the high priority events -->
 				</a>
 				<div class="quick-links__item no-icon">
 					<p class="inline quick-links__label">BMC time</p>
@@ -165,11 +139,11 @@
 						<label for="toggle__switch-round" tabindex="0">Server indicator is <span class="uid-switch__status">{{dataService.LED_state}}</span></label>
 					</div>
 				</div>
-				<a href="" class="no-icon quick-links__item">
+				<a href="#/server-control/remote-console" class="no-icon quick-links__item">
 					<p class="inline quick-links__label">Launch Serial Over Lan</p>
 					<span class="btn-pop-out inline float-right"></span>
 				</a>
-				<a href="" class="quick-links__item">
+				<a href="#/configuration/network" class="quick-links__item">
 					<p class="inline quick-links__label">Edit network settings</p>
 				</a>
 			</div>
diff --git a/app/overview/controllers/system-overview-controller.js b/app/overview/controllers/system-overview-controller.js
index 4992b1e..5468d6f 100644
--- a/app/overview/controllers/system-overview-controller.js
+++ b/app/overview/controllers/system-overview-controller.js
@@ -17,10 +17,69 @@
             '$window', 
             'APIUtils', 
             'dataService',
-            function($scope, $window, APIUtils, dataService, userModel){
+            function($scope, $window, APIUtils, dataService){
                 $scope.dataService = dataService;
-
                 $scope.dropdown_selected = false;
+                $scope.tmz = 'EDT';
+                $scope.logs = [];
+                $scope.mac_address = "";
+                $scope.bmc_info = {};
+                $scope.bmc_firmware = "";
+                $scope.server_firmware = "";
+
+                loadOverviewData();
+                function loadOverviewData(){
+                    APIUtils.getLogs(function(data){
+                       $scope.displayLogs(data);
+                    });
+                    APIUtils.getFirmwares(function(data, bmcActiveVersion, hostActiveVersion){
+                       $scope.displayServerInfo(data, bmcActiveVersion, hostActiveVersion);
+                    });
+                    APIUtils.getLEDState(function(state){
+                       $scope.displayLEDState(state);
+                    });
+                    APIUtils.getBMCEthernetInfo(function(data){
+                       $scope.displayBMCEthernetInfo(data);
+                    });
+                    APIUtils.getBMCInfo(function(data){
+                       $scope.displayBMCInfo(data);
+                    });
+                }
+                $scope.displayBMCEthernetInfo = function(data){
+                    $scope.mac_address = data.MACAddress;
+                }
+
+                $scope.displayBMCInfo = function(data){
+                    $scope.bmc_info = data;
+                }
+
+                $scope.displayLogs = function(data){
+                    $scope.logs = data.filter(function(log){
+                        return log.severity_flags.high == true;
+                    });
+                }
+
+                $scope.displayServerInfo = function(data, bmcActiveVersion, hostActiveVersion){
+                    $scope.bmc_firmware = bmcActiveVersion;
+                    $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;
+                        dataService.LED_state = (dataService.LED_state == APIUtils.LED_STATE_TEXT.on) ?
+                        APIUtils.LED_STATE_TEXT.off : APIUtils.LED_STATE_TEXT.on;
+                    APIUtils.setLEDState(toggleState, function(status){
+                    });
+                }
             }
         ]
     );