Added hardware sensors functionality

Change-Id: I99435613bb77fc0ff72f046c2dc047b13962a7a3
Signed-off-by: Iftekharul Islam <iislam@us.ibm.com>
diff --git a/app/common/services/api-utils.js b/app/common/services/api-utils.js
index 3b8b7e0..0f3b729 100644
--- a/app/common/services/api-utils.js
+++ b/app/common/services/api-utils.js
@@ -369,12 +369,9 @@
                 });
               },
               getAllSensorStatus: function(callback){
-                /**
-                GET   https://9.3.185.156/xyz/openbmc_project/sensors/enumerate
-                */
                 $http({
                   method: 'GET',
-                  url: "/assets/mocks/sensors.json",
+                  url: SERVICE.API_CREDENTIALS.host + "/xyz/openbmc_project/sensors/enumerate",
                   headers: {
                       'Accept': 'application/json',
                       'Content-Type': 'application/json'
@@ -385,101 +382,93 @@
                       var content = JSON.parse(json);
                       var dataClone = JSON.parse(JSON.stringify(content.data));
                       var sensorData = [];
-                      var allSensorSeveries = [];
-                      var allSensorRows = [];
-                      var total = 0;
-                      var status = 'normal';
-                      var data = {
-                                   total: 0,
-                                   status: '',
-                                   sensors: [{
-                                      title: 'All Sensors',
-                                      type: 'all',
-                                      status: '',
-                                      severity_flags: {},
-                                      search_text: '',
-                                      display_headers: ['Sensor (Unit)', 'Reading', 'State'],
-                                      data: []
-                                   }]
-                                 };
+                      var severity = {};
+                      var title = "";
+                      var tempKeyParts = [];
+                      var order = 0;
 
                       function getSensorStatus(reading){
-                        var severityFlags = {critical: false, warning: false, normal: false}, severityText = '';
-                        if(reading.Value >= reading.CriticalLow && reading.Value <= reading.CriticalHigh){
+                        var severityFlags = {critical: false, warning: false, normal: false}, severityText = '', order = 0;
+
+                        if(reading.hasOwnProperty('CriticalLow') && 
+                          reading.Value < reading.CriticalLow
+                          ){
                           severityFlags.critical = true;
                           severityText = 'critical';
-                        }
-                        else if(reading.Value >= reading.WarningLow && reading.Value <= reading.WarningHigh){
+                          order = 2;
+                        }else if(reading.hasOwnProperty('CriticalHigh') && 
+                          reading.Value > reading.CriticalHigh 
+                          ){
+                          severityFlags.critical = true;
+                          severityText = 'critical';
+                          order = 2;
+                        }else if(reading.hasOwnProperty('CriticalLow') && 
+                          reading.hasOwnProperty('WarningLow') && 
+                          reading.Value >= reading.CriticalLow && reading.Value <= reading.WarningLow){
                           severityFlags.warning = true;
                           severityText = 'warning';
+                          order = 1;
+                        }else if(reading.hasOwnProperty('WarningHigh') && 
+                          reading.hasOwnProperty('CriticalHigh') && 
+                          reading.Value >= reading.WarningHigh && reading.Value <= reading.CriticalHigh){
+                          severityFlags.warning = true;
+                          severityText = 'warning';
+                          order = 1;
                         }else{
                           severityFlags.normal = true;
                           severityText = 'normal';
                         }
-                        return { flags: severityFlags, severityText: severityText};
+                        return { flags: severityFlags, severityText: severityText, order: order};
                       }
 
                       for(var key in content.data){
                         if(content.data.hasOwnProperty(key) && content.data[key].hasOwnProperty('Unit')){
+
+                          severity = getSensorStatus(content.data[key]);
+
+                          if(!content.data[key].hasOwnProperty('CriticalLow')){
+                            content.data[key].CriticalLow = "--";
+                            content.data[key].CriticalHigh = "--";
+                          }
+
+                          if(!content.data[key].hasOwnProperty('WarningLow')){
+                            content.data[key].WarningLow = "--";
+                            content.data[key].WarningHigh = "--";
+                          }
+
+                          tempKeyParts = key.split("/");
+                          title = tempKeyParts.pop();
+                          title = tempKeyParts.pop() + '_' + title;
+                          title = title.split("_").map(function(item){
+                             return item.toLowerCase().charAt(0).toUpperCase() + item.slice(1);
+                          }).reduce(function(prev, el){
+                            return prev + " " + el;
+                          });
+
                           sensorData.push(Object.assign({
                             path: key,
                             selected: false,
                             confirm: false,
                             copied: false,
+                            title: title,
+                            unit: Constants.SENSOR_UNIT_MAP[content.data[key].Unit],
+                            severity_flags: severity.flags,
+                            status: severity.severityText,
+                            order: severity.order,
+                            search_text: (title + " " + content.data[key].Value + " " + 
+                               Constants.SENSOR_UNIT_MAP[content.data[key].Unit] + " " + 
+                               severity.severityText + " " + 
+                               content.data[key].CriticalLow + " " +
+                               content.data[key].CriticalHigh + " " +
+                               content.data[key].WarningLow + " " +
+                               content.data[key].WarningHigh + " "
+                               ).toLowerCase(),
                             original_data: {key: key, value: content.data[key]}
                           }, content.data[key]));
                         }
                       }
 
-                      Constants.SENSOR_DATA_TEMPLATE.sensors.forEach(function(sensor){
-                          var rowData = [];
-                          var severities = [];
-                          var thisSensorData = sensorData.filter(function(el){
-                            return el.path.indexOf('sensors/'+sensor.key_search) > -1;
-                          });
-
-                          for(var i = 0; i < thisSensorData.length; i++){
-
-                             var severity = getSensorStatus(thisSensorData[i]);
-                             severities.push(severity.severityText);
-                             rowData.push(Object.assign({
-                                title: sensor.sensor_row.title + (i+1),
-                                status: severity.severityText,
-                                severity_flags: severity.flags,
-                                reading: thisSensorData[i].Value + sensor.sensor_row.reading,
-                                search_text: (sensor.sensor_row.title + (i+1) + " " + severity.severityText + " " + thisSensorData[i].Value + sensor.sensor_row.reading).toLowerCase(),
-                                indicator: (severity.flags.critical) ? '90%' : ((severity.flags.warning) ? '15%' : '50%')
-                             }, thisSensorData[i]));
-                          }
-
-                          status = (severities.indexOf('critical') > -1) ? 'critical' : ((severities.indexOf('warning') > -1) ? 'warning' : 'normal');
-                          total += rowData.length;
-                          allSensorSeveries.push(status);
-                          var sevFlags =  {critical: false, warning: false, normal: false};
-                          sevFlags[status] = true;
-                          data.sensors.push({
-                            title: sensor.title,
-                            type: sensor.type,
-                            status: status,
-                            severity_flags: sevFlags,
-                            search_text: (sensor.title + " " + status).toLowerCase(),
-                            display_headers: sensor.display_headers,
-                            data: rowData
-                          });
-                          Array.prototype.push.apply(allSensorRows, rowData);
-                      });
-
-                      data.status = (allSensorSeveries.indexOf('critical') > -1) ? 'critical' : ((allSensorSeveries.indexOf('warning') > -1) ? 'warning' : 'normal');
-                      data.total = total;
-                      if(allSensorRows.length){
-                        data.sensors[0].status = data.status;
-                        data.sensors[0].data = allSensorRows;
-                        data.sensors[0].search_text = (data.sensors[0].title + " " + data.sensors[0].status).toLowerCase();
-                        var flags = {critical: false, warning: false, normal: false};
-                        flags[data.status] = true;
-                        data.sensors[0].severity_flags = flags;
-                      }
-                      callback(data, dataClone);
+                      callback(sensorData, dataClone);
                 }).error(function(error){
                   console.log(error);
                 });
@@ -680,11 +669,15 @@
                       }
 
                       function camelcaseToLabel(obj){
-                        var transformed = [], label = "";
+                        var transformed = [], label = "", value = "";
                         for(var key in obj){
                           label = key.replace(/([A-Z0-9]+)/g, " $1").replace(/^\s+/, "");
                           if(obj[key] !== ""){
-                            transformed.push({key:label, value: obj[key]});
+                            value = obj[key];
+                            if(value == 1 || value == 0){
+                              value = (value == 1) ? 'Yes' : 'No';
+                            }
+                            transformed.push({key:label, value: value});
                           }
                         }
 
diff --git a/app/common/services/constants.js b/app/common/services/constants.js
index 7d77ec0..a610ba9 100644
--- a/app/common/services/constants.js
+++ b/app/common/services/constants.js
@@ -59,7 +59,7 @@
                     Warning: 'Medium'
                 },
                 PAGINATION: {
-                    LOG_ITEMS_PER_PAGE: 25
+                    LOG_ITEMS_PER_PAGE: 4
                 },
                 HARDWARE: {
                   component_key_filter: '/xyz/openbmc_project/inventory/system',
@@ -70,93 +70,14 @@
                    'cpu', 'dimm'
                   ]
                 },
-                SENSOR_DATA_TEMPLATE: {
-                    sensors: [
-                        {
-                           type: 'fan',
-                           title: 'Fan Speed',
-                           key_search: 'fan_tach',
-                           display_headers: ['Fan Speed(RPM)', 'Reading', 'State'],
-                           sensor_row: {
-                                title: 'Fan Speed ',
-                                reading: ' rpms',
-                                status: '',
-                                indicator: ''
-                           }
-                        },
-                        {
-                           type: 'temperature',
-                           title: 'Temperature',
-                           'key_search': 'temperature',
-                           display_headers: ['Temperature (DegreesC)', 'Reading', 'State'],
-                           sensor_row: {
-                                title: 'Temperature ',
-                                reading: ' degreeC',
-                                status: '',
-                                indicator: ''
-                           }
-                        },
-                        {
-                           type: 'altitude',
-                           title: 'Altitude',
-                           'key_search': 'altitude',
-                           display_headers: ['Altitude (Meters)', 'Reading', 'State'],
-                           sensor_row: {
-                                title: 'Altitude ',
-                                reading: ' Meters',
-                                status: '',
-                                indicator: ''
-                           }
-                        },
-                        {
-                           type: 'voltage',
-                           title: 'Voltage',
-                           'key_search': 'voltage',
-                           display_headers: ['Temperature (Volts)', 'Reading', 'State'],
-                           sensor_row: {
-                                title: 'Voltage ',
-                                reading: ' volts',
-                                status: '',
-                                indicator: ''
-                           }
-                        },
-                        {
-                           type: 'current',
-                           title: 'Current',
-                           'key_search': 'current',
-                           display_headers: ['Current (Amperes)', 'Reading', 'State'],
-                           sensor_row: {
-                                title: 'Current ',
-                                reading: ' amperes',
-                                status: '',
-                                indicator: ''
-                           }
-                        },
-                        {
-                           type: 'power',
-                           title: 'Power',
-                           'key_search': 'power',
-                           display_headers: ['Power (Watts)', 'Reading', 'State'],
-                           sensor_row: {
-                                title: 'Power ',
-                                reading: ' watts',
-                                status: '',
-                                indicator: ''
-                           }
-                        },
-                        {
-                           type: 'energy',
-                           title: 'Energy',
-                           'key_search': 'energy',
-                           display_headers: ['Energy (Joules)', 'Reading', 'State'],
-                           sensor_row: {
-                                title: 'Energy ',
-                                reading: ' joules',
-                                status: '',
-                                indicator: ''
-                           }
-                        }
-                    ]
+                SENSOR_UNIT_MAP: {
+                  'xyz.openbmc_project.Sensor.Value.Unit.RPMS': 'rpms',
+                  'xyz.openbmc_project.Sensor.Value.Unit.DegreesC': 'C',
+                  'xyz.openbmc_project.Sensor.Value.Unit.Volts': 'volts',
+                  'xyz.openbmc_project.Sensor.Value.Unit.Meters': 'meters',
+                  'xyz.openbmc_project.Sensor.Value.Unit.Watts': 'watts',
+                  'xyz.openbmc_project.Sensor.Value.Unit.Amperes': 'amperes',
+                  'xyz.openbmc_project.Sensor.Value.Unit.Joules': 'joules'
                 }
             };
         });
diff --git a/app/common/services/userModel.js b/app/common/services/userModel.js
index 747b288..dba607d 100644
--- a/app/common/services/userModel.js
+++ b/app/common/services/userModel.js
@@ -41,8 +41,6 @@
                            response.status == APIUtils.API_RESPONSE.SUCCESS_STATUS){
                             sessionStorage.removeItem('LOGIN_ID');
                             callback(true);
-                        }else if(response.status == APIUtils.API_RESPONSE.ERROR_STATUS){
-                            callback(false);
                         }else{
                             callback(false, error);
                         }