Fix for reboot attempt and catch internal failures.

The assumption was reboot attempt left will be sent through
reading data in ipmi sensor data, but it is being sent as
assertion so adding support to read raw data from assertion bits.
Added a catch for internal failures while calling update function
for sensors.

Change-Id: If45d003c1c22f60e7c8a723c1ff9d077c53cad37
Signed-off-by: Dhruvaraj Subhashchandran <dhruvaraj@in.ibm.com>
diff --git a/scripts/writesensor.mako.cpp b/scripts/writesensor.mako.cpp
index 41f9d60..4355801 100644
--- a/scripts/writesensor.mako.cpp
+++ b/scripts/writesensor.mako.cpp
@@ -5,7 +5,7 @@
 <%
 from collections import defaultdict
 readingTypes = { 'reading': 'cmdData.reading',
-                 'assertion': '0',
+                 'assertion': '((cmdData.assertOffset8_14 << 8)|cmdData.assertOffset0_7)',
                  'eventdata1': 'cmdData.eventData1',
                  'eventdata2': 'cmdData.eventData2',
                  'eventdata3': 'cmdData.eventData3'}
diff --git a/sensordatahandler.cpp b/sensordatahandler.cpp
index 6c7b9ac..7c4cd3c 100644
--- a/sensordatahandler.cpp
+++ b/sensordatahandler.cpp
@@ -40,9 +40,9 @@
     auto mapperResponseMsg = bus.call(mapperCall);
     if (mapperResponseMsg.is_method_error())
     {
-        std::string err = "Error in mapper GetSubTree "
-                          "Interface: " + interface;
-        log<level::ERR>(err.c_str());
+        log<level::ERR>("Mapper GetSubTree failed",
+                        entry("PATH=%s", path),
+                        entry("INTERFACE=%s", interface));
         elog<InternalFailure>();
     }
 
@@ -50,10 +50,9 @@
     mapperResponseMsg.read(mapperResponse);
     if (mapperResponse.empty())
     {
-        std::string err = "Invalid response from mapper "
-                          "Command: GetSubTree "
-                          "Interface:" + interface;
-        log<level::ERR>(err.c_str());
+        log<level::ERR>("Invalid mapper response",
+                        entry("PATH=%s", path),
+                        entry("INTERFACE=%s", interface));
         elog<InternalFailure>();
     }
 
@@ -66,10 +65,9 @@
     const auto& iter = mapperResponse.find(path);
     if (iter == mapperResponse.end())
     {
-        std::string err = "Error in finding sensor dbus"
-                          "Command: GetSubTree "
-                          "Interface:" + interface;
-        log<level::ERR>(err.c_str());
+        log<level::ERR>("Coudn't find d-bus path",
+                        entry("PATH=%s", path),
+                        entry("INTERFACE=%s", interface));
         elog<InternalFailure>();
     }
     return std::make_pair(iter->first, iter->second.begin()->first);
diff --git a/sensorhandler.cpp b/sensorhandler.cpp
index a4cfe34..eac4215 100644
--- a/sensorhandler.cpp
+++ b/sensorhandler.cpp
@@ -7,15 +7,20 @@
 #include <systemd/sd-bus.h>
 #include "host-ipmid/ipmid-api.h"
 #include <phosphor-logging/log.hpp>
+#include <phosphor-logging/elog-errors.hpp>
 #include "ipmid.hpp"
 #include "sensorhandler.h"
 #include "types.hpp"
 #include "utils.hpp"
+#include "xyz/openbmc_project/Common/error.hpp"
+
 
 extern int updateSensorRecordFromSSRAESC(const void *);
 extern sd_bus *bus;
 extern const ipmi::sensor::IdInfoMap sensors;
 using namespace phosphor::logging;
+using InternalFailure =
+    sdbusplus::xyz::openbmc_project::Common::Error::InternalFailure;
 
 void register_netfn_sen_functions()   __attribute__((constructor));
 
@@ -418,7 +423,18 @@
         return IPMI_CC_SENSOR_INVALID;
     }
 
-    return iter->second.updateFunc(cmdData, iter->second);
+    try
+    {
+        return iter->second.updateFunc(cmdData, iter->second);
+    }
+    catch (InternalFailure& e)
+    {
+         log<level::ERR>("Set sensor failed",
+                         entry("SENSOR_NUM=%d", cmdData.number));
+         commit<InternalFailure>();
+    }
+
+    return IPMI_CC_UNSPECIFIED_ERROR;
 }
 
 ipmi_ret_t ipmi_sen_set_sensor(ipmi_netfn_t netfn, ipmi_cmd_t cmd,