Check threshold values
Added check threshold functionality and logging required messages.
Signed-off-by: Vijay Khemka <vijaykhemka@fb.com>
Change-Id: I1621ab1e1e938a9906ea81c3611e9d25d51d207e
diff --git a/virtualSensor.cpp b/virtualSensor.cpp
index fb6d456..63baea5 100644
--- a/virtualSensor.cpp
+++ b/virtualSensor.cpp
@@ -176,6 +176,94 @@
WarningInterface::warningLow(sensorThreshold.warningLow);
}
+void VirtualSensor::checkSensorThreshold(const double value)
+{
+ auto criticalHigh = CriticalInterface::criticalHigh();
+ auto criticalLow = CriticalInterface::criticalLow();
+ auto warningHigh = WarningInterface::warningHigh();
+ auto warningLow = WarningInterface::warningLow();
+
+ if (value > criticalHigh)
+ {
+ if (!CriticalInterface::criticalAlarmHigh())
+ {
+ CriticalInterface::criticalAlarmHigh(true);
+ log<level::ERR>("ASSERT: Virtual Sensor has exceeded "
+ "critical high threshold",
+ entry("NAME = %s", name.c_str()));
+ }
+ return;
+ }
+
+ if (CriticalInterface::criticalAlarmHigh())
+ {
+ CriticalInterface::criticalAlarmHigh(false);
+ log<level::INFO>("DEASSERT: Virtual Sensor is under "
+ "critical high threshold",
+ entry("NAME = %s", name.c_str()));
+ }
+
+ if (value > warningHigh)
+ {
+ if (!WarningInterface::warningAlarmHigh())
+ {
+ WarningInterface::warningAlarmHigh(true);
+ log<level::ERR>("ASSERT: Virtual Sensor has exceeded "
+ "warning high threshold",
+ entry("NAME = %s", name.c_str()));
+ }
+ return;
+ }
+
+ if (WarningInterface::warningAlarmHigh())
+ {
+ WarningInterface::warningAlarmHigh(false);
+ log<level::INFO>("DEASSERT: Virtual Sensor is under "
+ "warning high threshold",
+ entry("NAME = %s", name.c_str()));
+ }
+
+ if (value < criticalLow)
+ {
+ if (!CriticalInterface::criticalAlarmLow())
+ {
+ CriticalInterface::criticalAlarmLow(true);
+ log<level::ERR>("ASSERT: Virtual Sensor is under "
+ "critical low threshold",
+ entry("NAME = %s", name.c_str()));
+ }
+ return;
+ }
+
+ if (CriticalInterface::criticalAlarmLow())
+ {
+ CriticalInterface::criticalAlarmLow(false);
+ log<level::ERR>("DEASSERT: Virtual Sensor is above "
+ "critical low threshold",
+ entry("NAME = %s", name.c_str()));
+ }
+
+ if (value < warningLow)
+ {
+ if (!WarningInterface::warningAlarmLow())
+ {
+ WarningInterface::warningAlarmLow(true);
+ log<level::ERR>("ASSERT: Virtual Sensor is under "
+ "warning low threshold",
+ entry("NAME = %s", name.c_str()));
+ }
+ return;
+ }
+
+ if (WarningInterface::warningAlarmLow())
+ {
+ WarningInterface::warningAlarmLow(false);
+ log<level::ERR>("DEASSERT: Virtual Sensor is above "
+ "warning low threshold",
+ entry("NAME = %s", name.c_str()));
+ }
+}
+
void VirtualSensor::updateVirtualSensor()
{
for (auto& param : paramMap)
@@ -193,9 +281,15 @@
}
}
double val = expression.value();
+
+ /* Set sensor value to dbus interface */
setSensorValue(val);
+
if (DEBUG)
std::cout << "Sensor value is " << val << "\n";
+
+ /* Check sensor threshold and log required message */
+ checkSensorThreshold(val);
}
/** @brief Parsing Virtual Sensor config JSON file */
@@ -243,8 +337,8 @@
std::string objPath(sensorDbusPath);
objPath += sensorType + "/" + name;
- auto virtualSensorPtr =
- std::make_unique<VirtualSensor>(bus, objPath.c_str(), j);
+ auto virtualSensorPtr = std::make_unique<VirtualSensor>(
+ bus, objPath.c_str(), j, name);
log<level::INFO>("Added a new virtual sensor",
entry("NAME = %s", name.c_str()));