pid: reuse the code for processing sensors input

The code for processing sensors' inputs are the same in updateFanTelemetry() and
updateSensors(). This patch extract the similar code out as a private
function and make it be called in these two functions.

Tested:
- Can still build phosphor-pid-control.
- Copy built image to the system and it works fine.

Change-Id: I6249053e788bfa14bb7bdf2a880be5403c20029b
Signed-off-by: Tom Tung <shes050117@gmail.com>
diff --git a/pid/zone.cpp b/pid/zone.cpp
index e9aaafc..c88f41b 100644
--- a/pid/zone.cpp
+++ b/pid/zone.cpp
@@ -348,7 +348,7 @@
      * is disabled?  I think it's a waste to try and log things even if the
      * data is just being dropped though.
      */
-    tstamp now = std::chrono::high_resolution_clock::now();
+    const auto now = std::chrono::high_resolution_clock::now();
     if (loggingEnabled)
     {
         _log << std::chrono::duration_cast<std::chrono::milliseconds>(
@@ -358,67 +358,7 @@
         _log << "," << _maximumSetPointName;
     }
 
-    for (const auto& f : _fanInputs)
-    {
-        auto sensor = _mgr.getSensor(f);
-        ReadReturn r = sensor->read();
-        _cachedValuesByName[f] = {r.value, r.unscaled};
-        int64_t timeout = sensor->getTimeout();
-        tstamp then = r.updated;
-
-        auto duration =
-            std::chrono::duration_cast<std::chrono::seconds>(now - then)
-                .count();
-        auto period = std::chrono::seconds(timeout).count();
-        /*
-         * TODO(venture): We should check when these were last read.
-         * However, these are the fans, so if I'm not getting updated values
-         * for them... what should I do?
-         */
-        if (loggingEnabled)
-        {
-            const auto& v = _cachedValuesByName[f];
-            _log << "," << v.scaled << "," << v.unscaled;
-            const auto& p = _cachedFanOutputs[f];
-            _log << "," << p.scaled << "," << p.unscaled;
-        }
-
-        if (debugEnabled)
-        {
-            std::cerr << f << " fan sensor reading: " << r.value << "\n";
-        }
-
-        // check if fan fail.
-        if (sensor->getFailed())
-        {
-            _failSafeSensors.insert(f);
-            if (debugEnabled)
-            {
-                std::cerr << f << " fan sensor get failed\n";
-            }
-        }
-        else if (timeout != 0 && duration >= period)
-        {
-            _failSafeSensors.insert(f);
-            if (debugEnabled)
-            {
-                std::cerr << f << " fan sensor timeout\n";
-            }
-        }
-        else
-        {
-            // Check if it's in there: remove it.
-            auto kt = _failSafeSensors.find(f);
-            if (kt != _failSafeSensors.end())
-            {
-                if (debugEnabled)
-                {
-                    std::cerr << f << " is erased from failsafe sensor set\n";
-                }
-                _failSafeSensors.erase(kt);
-            }
-        }
-    }
+    processSensorInputs</* fanSensorLogging */ true>(_fanInputs, now);
 
     if (loggingEnabled)
     {
@@ -434,59 +374,8 @@
 
 void DbusPidZone::updateSensors(void)
 {
-    using namespace std::chrono;
-    /* margin and temp are stored as temp */
-    tstamp now = high_resolution_clock::now();
-
-    for (const auto& t : _thermalInputs)
-    {
-        auto sensor = _mgr.getSensor(t);
-        ReadReturn r = sensor->read();
-        int64_t timeout = sensor->getTimeout();
-
-        _cachedValuesByName[t] = {r.value, r.unscaled};
-        tstamp then = r.updated;
-
-        auto duration = duration_cast<std::chrono::seconds>(now - then).count();
-        auto period = std::chrono::seconds(timeout).count();
-
-        if (debugEnabled)
-        {
-            std::cerr << t << " temperature sensor reading: " << r.value
-                      << "\n";
-        }
-
-        if (sensor->getFailed())
-        {
-            _failSafeSensors.insert(t);
-            if (debugEnabled)
-            {
-                std::cerr << t << " temperature sensor get failed\n";
-            }
-        }
-        else if (timeout != 0 && duration >= period)
-        {
-            // std::cerr << "Entering fail safe mode.\n";
-            _failSafeSensors.insert(t);
-            if (debugEnabled)
-            {
-                std::cerr << t << " temperature sensor get timeout\n";
-            }
-        }
-        else
-        {
-            // Check if it's in there: remove it.
-            auto kt = _failSafeSensors.find(t);
-            if (kt != _failSafeSensors.end())
-            {
-                if (debugEnabled)
-                {
-                    std::cerr << t << " is erased from failsafe sensor set\n";
-                }
-                _failSafeSensors.erase(kt);
-            }
-        }
-    }
+    processSensorInputs</* fanSensorLogging */ false>(
+        _thermalInputs, std::chrono::high_resolution_clock::now());
 
     return;
 }