summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBrad Bishop <bradleyb@fuzziesquirrel.com>2017-07-30 19:38:20 -0400
committerPatrick Williams <patrick@stwcx.xyz>2017-08-03 01:52:48 +0000
commitedaeb31c886e2b8d2d43664ec4178c8d35094742 (patch)
tree7a3a162ef3bae35ee1944dbe3a78e673b20f83c5
parentd7999b7c8d052dd64628b615a6ff84f189fd40ef (diff)
downloadphosphor-fan-presence-edaeb31c886e2b8d2d43664ec4178c8d35094742.tar.gz
phosphor-fan-presence-edaeb31c886e2b8d2d43664ec4178c8d35094742.zip
monitor: Allow missing sensors
Don't count sensors that don't exist as nonfunctional. Let some other application decide if missing sensors are a problem or not. Change-Id: Ie3d438c92df16bfd86ddc86db8a9dd143bf2cfb0 Signed-off-by: Brad Bishop <bradleyb@fuzziesquirrel.com>
-rw-r--r--monitor/fan.cpp22
-rw-r--r--monitor/fan.hpp7
-rw-r--r--monitor/tach_sensor.cpp20
3 files changed, 37 insertions, 12 deletions
diff --git a/monitor/fan.cpp b/monitor/fan.cpp
index f3937c2..6d88d2a 100644
--- a/monitor/fan.cpp
+++ b/monitor/fan.cpp
@@ -49,13 +49,21 @@ Fan::Fan(sdbusplus::bus::bus& bus,
for (auto& s : sensors)
{
- _sensors.emplace_back(
- std::make_unique<TachSensor>(bus,
- *this,
- std::get<sensorNameField>(s),
- std::get<hasTargetField>(s),
- std::get<timeoutField>(def),
- events));
+ try
+ {
+ _sensors.emplace_back(
+ std::make_unique<TachSensor>(
+ bus,
+ *this,
+ std::get<sensorNameField>(s),
+ std::get<hasTargetField>(s),
+ std::get<timeoutField>(def),
+ events));
+ }
+ catch (InvalidSensorError& e)
+ {
+
+ }
}
//Start from a known state of functional
diff --git a/monitor/fan.hpp b/monitor/fan.hpp
index 8e7f86f..0004353 100644
--- a/monitor/fan.hpp
+++ b/monitor/fan.hpp
@@ -14,6 +14,13 @@ namespace fan
namespace monitor
{
+/**
+ * @class InvalidSensorError
+ *
+ * An exception type for sensors that don't exist or
+ * are otherwise inaccessible.
+ */
+class InvalidSensorError : public std::exception {};
/**
* @class Fan
diff --git a/monitor/tach_sensor.cpp b/monitor/tach_sensor.cpp
index 0ec52ba..a4ebcd9 100644
--- a/monitor/tach_sensor.cpp
+++ b/monitor/tach_sensor.cpp
@@ -77,11 +77,21 @@ TachSensor::TachSensor(sdbusplus::bus::bus& bus,
_timer(events, [this, &fan](){ fan.timerExpired(*this); })
{
//Load in starting Target and Input values
- readProperty(FAN_SENSOR_VALUE_INTF,
- FAN_VALUE_PROPERTY,
- _name,
- _bus,
- _tachInput);
+
+ try
+ {
+ // Use getProperty directly to allow a missing sensor object
+ // to abort construction.
+ _tachInput = util::SDBusPlus::getProperty<decltype(_tachInput)>(
+ _bus,
+ _name,
+ FAN_SENSOR_VALUE_INTF,
+ FAN_VALUE_PROPERTY);
+ }
+ catch (std::exception& e)
+ {
+ throw InvalidSensorError();
+ }
if (_hasTarget)
{
OpenPOWER on IntegriCloud