diff options
author | Matthew Barth <msbarth@us.ibm.com> | 2017-04-12 10:57:19 -0500 |
---|---|---|
committer | Brad Bishop <bradleyb@fuzziesquirrel.com> | 2017-05-07 12:02:56 -0400 |
commit | b86374d9b6bf0c6fe78d8d87a8748138056b3ac3 (patch) | |
tree | c77540980aa980d0cd52cfefb92c143c95e1bf01 /src/conditions.hpp | |
parent | d106605c2dd9bf5f29924bf2f919fd26affc4174 (diff) | |
download | phosphor-dbus-monitor-b86374d9b6bf0c6fe78d8d87a8748138056b3ac3.tar.gz phosphor-dbus-monitor-b86374d9b6bf0c6fe78d8d87a8748138056b3ac3.zip |
Add item group monitoring data type framework
Include supported data types for item groups:
--Start event trigger
--Signal event trigger
--A countAtOrAbove condition
--A log_error action
Change-Id: I1ae5ba60e4d9c06155885d52d98a44b31fd73207
Signed-off-by: Matthew Barth <msbarth@us.ibm.com>
Diffstat (limited to 'src/conditions.hpp')
-rw-r--r-- | src/conditions.hpp | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/src/conditions.hpp b/src/conditions.hpp new file mode 100644 index 0000000..54a6dc6 --- /dev/null +++ b/src/conditions.hpp @@ -0,0 +1,48 @@ +#pragma once + +#include <algorithm> +#include "data_types.hpp" + +namespace phosphor +{ +namespace dbus +{ +namespace monitoring +{ +namespace condition +{ + +template <typename T> +auto countAtOrAbove(Group& items, const char* path, size_t count, T&& value) +{ + return [&items, + path, + count, + value = std::forward<T>(value)](T&& arg) + { + Group::iterator it = + std::find_if(items.begin(), + items.end(), + [&path](auto const& item) + { + return std::get<0>(item) == path; + }); + if (it != std::end(items)) + { + std::get<1>(*it) = arg; + } + size_t condCount = + std::count_if(items.begin(), + items.end(), + [&value](auto const& item) + { + return std::get<1>(item) >= value; + }); + return condCount >= count; + }; +} + +} // namespace condition +} // namespace monitoring +} // namespace dbus +} // namespace phosphor |