| #include "data_types.hpp" |
| #include "functor.hpp" |
| #include "monitor.hpp" |
| #include "conditions.hpp" |
| #include "actions.hpp" |
| |
| namespace phosphor |
| { |
| namespace dbus |
| { |
| namespace monitoring |
| { |
| |
| // Example vector of sensors constructing a group |
| static Group fan_zone_group = { |
| std::make_tuple( |
| "/xyz/openbmc_project/sensors/fan_tach/fan0", |
| static_cast<int64_t>(0) |
| ), |
| std::make_tuple( |
| "/xyz/openbmc_project/sensors/fan_tach/fan1", |
| static_cast<int64_t>(0) |
| ), |
| std::make_tuple( |
| "/xyz/openbmc_project/sensors/fan_tach/fan2", |
| static_cast<int64_t>(0) |
| ), |
| std::make_tuple( |
| "/xyz/openbmc_project/sensors/fan_tach/fan3", |
| static_cast<int64_t>(0) |
| ) |
| }; |
| |
| const std::vector<std::tuple<std::vector<std::shared_ptr<Event>>, |
| std::vector<Action>>> |
| Monitor::events |
| { // Example vector of Events with START trigger |
| {std::make_tuple(std::vector<std::shared_ptr<Event>>( |
| { // Example vector of StartEvent |
| std::make_shared<StartEvent>( |
| std::vector<Condition>( |
| { // Example vector of StartEvent conditions |
| make_condition(propertyStart<int64_t>( |
| "/xyz/openbmc_project/sensors/fan_tach/fan0", |
| "xyz.openbmc_project.Sensor.Value", |
| "Value", |
| condition::countAtOrAbove( |
| fan_zone_group, |
| "/xyz/openbmc_project/sensors/fan_tach/fan0", |
| static_cast<size_t>(3), |
| static_cast<int64_t>(8000ll) |
| ) |
| )), |
| make_condition(propertyStart<int64_t>( |
| "/xyz/openbmc_project/sensors/fan_tach/fan1", |
| "xyz.openbmc_project.Sensor.Value", |
| "Value", |
| condition::countAtOrAbove( |
| fan_zone_group, |
| "/xyz/openbmc_project/sensors/fan_tach/fan1", |
| static_cast<size_t>(3), |
| static_cast<int64_t>(8000ll) |
| ) |
| )), |
| make_condition(propertyStart<int64_t>( |
| "/xyz/openbmc_project/sensors/fan_tach/fan2", |
| "xyz.openbmc_project.Sensor.Value", |
| "Value", |
| condition::countAtOrAbove( |
| fan_zone_group, |
| "/xyz/openbmc_project/sensors/fan_tach/fan2", |
| static_cast<size_t>(3), |
| static_cast<int64_t>(8000ll) |
| ) |
| )), |
| make_condition(propertyStart<int64_t>( |
| "/xyz/openbmc_project/sensors/fan_tach/fan3", |
| "xyz.openbmc_project.Sensor.Value", |
| "Value", |
| condition::countAtOrAbove( |
| fan_zone_group, |
| "/xyz/openbmc_project/sensors/fan_tach/fan3", |
| static_cast<size_t>(3), |
| static_cast<int64_t>(8000ll) |
| ) |
| )), |
| } |
| ) |
| ), |
| std::make_shared<SignalEvent>( |
| "interface='org.freedesktop.DBus.Properties'," |
| "member='PropertiesChanged'," |
| "type='signal'," |
| "path='/xyz/openbmc_project/sensors/fan_tach/fan0'", |
| std::vector<Condition>( |
| { // Example vector of SignalEvent conditions |
| make_condition(propertySignal<int64_t>( |
| "xyz.openbmc_project.Sensor.Value", |
| "Value", |
| condition::countAtOrAbove( |
| fan_zone_group, |
| "/xyz/openbmc_project/sensors/fan_tach/fan0", |
| static_cast<size_t>(3), |
| static_cast<int64_t>(8000ll) |
| ) |
| )) |
| } |
| ) |
| ), |
| std::make_shared<SignalEvent>( |
| "interface='org.freedesktop.DBus.Properties'," |
| "member='PropertiesChanged'," |
| "type='signal'," |
| "path='/xyz/openbmc_project/sensors/fan_tach/fan1'", |
| std::vector<Condition>( |
| { // Example vector of SignalEvent conditions |
| make_condition(propertySignal<int64_t>( |
| "xyz.openbmc_project.Sensor.Value", |
| "Value", |
| condition::countAtOrAbove( |
| fan_zone_group, |
| "/xyz/openbmc_project/sensors/fan_tach/fan1", |
| static_cast<size_t>(3), |
| static_cast<int64_t>(8000ll) |
| ) |
| )) |
| } |
| ) |
| ), |
| std::make_shared<SignalEvent>( |
| "interface='org.freedesktop.DBus.Properties'," |
| "member='PropertiesChanged'," |
| "type='signal'," |
| "path='/xyz/openbmc_project/sensors/fan_tach/fan2'", |
| std::vector<Condition>( |
| { // Example vector of SignalEvent conditions |
| make_condition(propertySignal<int64_t>( |
| "xyz.openbmc_project.Sensor.Value", |
| "Value", |
| condition::countAtOrAbove( |
| fan_zone_group, |
| "/xyz/openbmc_project/sensors/fan_tach/fan2", |
| static_cast<size_t>(3), |
| static_cast<int64_t>(8000ll) |
| ) |
| )) |
| } |
| ) |
| ), |
| std::make_shared<SignalEvent>( |
| "interface='org.freedesktop.DBus.Properties'," |
| "member='PropertiesChanged'," |
| "type='signal'," |
| "path='/xyz/openbmc_project/sensors/fan_tach/fan3'", |
| std::vector<Condition>( |
| { // Example vector of SignalEvent conditions |
| make_condition(propertySignal<int64_t>( |
| "xyz.openbmc_project.Sensor.Value", |
| "Value", |
| condition::countAtOrAbove( |
| fan_zone_group, |
| "/xyz/openbmc_project/sensors/fan_tach/fan3", |
| static_cast<size_t>(3), |
| static_cast<int64_t>(8000ll) |
| ) |
| )) |
| } |
| ) |
| ) |
| }), |
| std::vector<Action>( |
| { |
| make_action( |
| action::log_error( |
| "ERROR: Number of fans at or above 8000rpms reached" |
| ) |
| ) |
| }) |
| )} |
| }; |
| |
| } // namespace monitoring |
| } // namespace dbus |
| } // namespace phosphor |