blob: b05f4a4a144ff1664f69d46d852d078830df7ff1 [file] [log] [blame]
#include "on_change_threshold.hpp"
#include <phosphor-logging/log.hpp>
OnChangeThreshold::OnChangeThreshold(
const std::string& triggerIdIn, Sensors sensorsIn,
std::vector<std::unique_ptr<interfaces::TriggerAction>> actionsIn,
std::unique_ptr<interfaces::Clock> clockIn) :
triggerId(triggerIdIn), sensors(std::move(sensorsIn)),
actions(std::move(actionsIn)), clock(std::move(clockIn))
{}
void OnChangeThreshold::initialize()
{
for (auto& sensor : sensors)
{
sensor->registerForUpdates(weak_from_this());
}
initialized = true;
}
void OnChangeThreshold::updateSensors(Sensors newSensors)
{
Sensors oldSensors = sensors;
for (const auto& sensor : newSensors)
{
auto it =
std::find_if(oldSensors.begin(), oldSensors.end(),
[&sensor](const auto& s) { return sensor == s; });
if (it != oldSensors.end())
{
oldSensors.erase(it);
continue;
}
if (initialized)
{
sensor->registerForUpdates(weak_from_this());
}
}
if (initialized)
{
for (auto& sensor : oldSensors)
{
sensor->unregisterFromUpdates(weak_from_this());
}
}
sensors = std::move(newSensors);
}
void OnChangeThreshold::sensorUpdated(interfaces::Sensor& sensor,
Milliseconds timestamp, double value)
{
if (isFirstReading)
{
isFirstReading = false;
return;
}
commit(sensor.getName(), value);
}
void OnChangeThreshold::commit(const std::string& sensorName, double value)
{
Milliseconds timestamp = clock->systemTimestamp();
for (const auto& action : actions)
{
action->commit(triggerId, std::nullopt, sensorName, timestamp, value);
}
}
LabeledThresholdParam OnChangeThreshold::getThresholdParam() const
{
return {};
}