monitor: Mark a fan with a missing dbus sensor as nonfunctional
When fan monitor starts up and retrieves the tach feedback
sensor values from dbus, the associated fan should be marked
nonfunctional when the sensor value is not found on dbus.
Tested:
run phosphor-fan-monitor --monitor will mark missing
tach sensor and associated fan as non-functional upon
poweron in witherspoon qemu
Change-Id: I3be24504223d3bd9efe8c4306548d6cca93d8224
Signed-off-by: Jolie Ku <jolie_ku@wistron.com>
diff --git a/monitor/fan.cpp b/monitor/fan.cpp
index bbf8202..9fbe081 100644
--- a/monitor/fan.cpp
+++ b/monitor/fan.cpp
@@ -40,6 +40,9 @@
_numSensorFailsForNonFunc(std::get<numSensorFailsForNonfuncField>(def)),
_trustManager(trust)
{
+ // Start from a known state of functional
+ updateInventory(true);
+
// Setup tach sensors for monitoring
auto& sensors = std::get<sensorListField>(def);
for (auto& s : sensors)
@@ -55,12 +58,12 @@
_trustManager->registerSensor(_sensors.back());
}
catch (InvalidSensorError& e)
- {}
+ {
+ // mark associated fan as nonfunctional
+ updateInventory(false);
+ }
}
- // Start from a known state of functional
- updateInventory(true);
-
// Check current tach state when entering monitor mode
if (mode != Mode::init)
{
diff --git a/monitor/tach_sensor.cpp b/monitor/tach_sensor.cpp
index 42b826f..078b213 100644
--- a/monitor/tach_sensor.cpp
+++ b/monitor/tach_sensor.cpp
@@ -19,6 +19,8 @@
#include "sdbusplus.hpp"
#include "utility.hpp"
+#include <fmt/format.h>
+
#include <phosphor-logging/elog.hpp>
#include <phosphor-logging/log.hpp>
@@ -92,8 +94,11 @@
}
catch (std::exception& e)
{
- log<level::INFO>("Not monitoring a tach sensor",
- entry("SENSOR=%s", _name.c_str()));
+ log<level::ERR>(
+ fmt::format("Failed to retrieve tach sensor {}", _name)
+ .c_str());
+ // mark tach sensor as nonfunctional
+ setFunctional(false);
throw InvalidSensorError();
}