summaryrefslogtreecommitdiffstats
path: root/monitor/nonzero_speed_trust.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'monitor/nonzero_speed_trust.hpp')
-rw-r--r--monitor/nonzero_speed_trust.hpp63
1 files changed, 63 insertions, 0 deletions
diff --git a/monitor/nonzero_speed_trust.hpp b/monitor/nonzero_speed_trust.hpp
new file mode 100644
index 0000000..3d14adf
--- /dev/null
+++ b/monitor/nonzero_speed_trust.hpp
@@ -0,0 +1,63 @@
+#pragma once
+
+#include "trust_group.hpp"
+
+namespace phosphor
+{
+namespace fan
+{
+namespace trust
+{
+
+/**
+ * @class NonzeroSpeed
+ *
+ * A trust group where the sensors in the group are trusted as long
+ * as at least one of them has a nonzero speed. If all sensors
+ * have a speed of zero, then no sensor in the group is trusted.
+ */
+class NonzeroSpeed : public Group
+{
+ public:
+
+ NonzeroSpeed() = delete;
+ ~NonzeroSpeed() = default;
+ NonzeroSpeed(const NonzeroSpeed&) = delete;
+ NonzeroSpeed& operator=(const NonzeroSpeed&) = delete;
+ NonzeroSpeed(NonzeroSpeed&&) = default;
+ NonzeroSpeed& operator=(NonzeroSpeed&&) = default;
+
+ /**
+ * Constructor
+ *
+ * @param[in] names - the names of the sensors in the group
+ */
+ explicit NonzeroSpeed(const std::vector<std::string>& names) :
+ Group(names)
+ {
+ }
+
+ private:
+
+ /**
+ * Determines if the group is trusted by checking
+ * if any sensor has a nonzero speed. If all speeds
+ * are zero, then no sensors in the group are trusted.
+ *
+ * @return bool - if group is trusted or not
+ */
+ bool checkGroupTrust() override
+ {
+ return std::any_of(
+ _sensors.begin(),
+ _sensors.end(),
+ [](const auto& s)
+ {
+ return s.get()->getInput() != 0;
+ });
+ }
+};
+
+}
+}
+}
OpenPOWER on IntegriCloud