diff options
author | Matt Spinler <spinler@us.ibm.com> | 2017-09-28 13:02:32 -0500 |
---|---|---|
committer | Matt Spinler <spinler@us.ibm.com> | 2017-10-11 09:25:04 -0500 |
commit | 35108a774758099abb80299c8732b830418fa2ad (patch) | |
tree | 7507db4a7dd2e4c76eb4dc731f1e19fcbb53a075 /monitor/gen-fan-monitor-defs.py | |
parent | 956a0a5ada59c937f9360939a25196c4c1e526aa (diff) | |
download | phosphor-fan-presence-35108a774758099abb80299c8732b830418fa2ad.tar.gz phosphor-fan-presence-35108a774758099abb80299c8732b830418fa2ad.zip |
monitor: Update YAML parser to handle trust groups
It creates a list of group creator lambdas based on
the information in the monitor YAML file.
These lambdas are called by the manager class to create
the trust group instances.
A real life example is:
const std::vector<CreateGroupFunction> trustGroups
{
{
[]()
{
std::vector<std::string> names{
"fan0_1",
"fan1_1",
"fan2_1",
"fan3_1",
};
return std::make_unique<NonzeroSpeed>(names);
}
},
};
Change-Id: Ia883df35efb86242aae2f8ed7d1714e94e65a6e6
Signed-off-by: Matt Spinler <spinler@us.ibm.com>
Diffstat (limited to 'monitor/gen-fan-monitor-defs.py')
-rwxr-xr-x | monitor/gen-fan-monitor-defs.py | 29 |
1 files changed, 27 insertions, 2 deletions
diff --git a/monitor/gen-fan-monitor-defs.py b/monitor/gen-fan-monitor-defs.py index 4e49787..1590484 100755 --- a/monitor/gen-fan-monitor-defs.py +++ b/monitor/gen-fan-monitor-defs.py @@ -19,12 +19,14 @@ from the MRW. tmpl = '''/* This is a generated file. */ #include "fan_defs.hpp" #include "types.hpp" +#include "groups.hpp" using namespace phosphor::fan::monitor; +using namespace phosphor::fan::trust; const std::vector<FanDefinition> fanDefinitions { -%for fan_data in data: +%for fan_data in data.get('fans', {}): FanDefinition{"${fan_data['inventory']}", ${fan_data['allowed_out_of_range_time']}, ${fan_data['deviation']}, @@ -41,6 +43,29 @@ const std::vector<FanDefinition> fanDefinitions }, %endfor }; + +##Function to generate the group creation lambda. +##If a group were to ever need a different constructor, +##it could be handled here. +<%def name="get_lambda_contents(group)"> + std::vector<std::string> names{ + %for sensor in group['sensors']: + "${sensor['name']}", + %endfor + }; + return std::make_unique<${group['class']}>(names); +</%def> +const std::vector<CreateGroupFunction> trustGroups +{ +%for group in data.get('sensor_trust_groups', {}): + { + []() + {\ +${get_lambda_contents(group)}\ + } + }, +%endfor +}; ''' @@ -64,7 +89,7 @@ if __name__ == '__main__': monitor_data = yaml.safe_load(monitor_input) or {} #Do some minor input validation - for fan in monitor_data: + for fan in monitor_data.get('fans', {}): if ((fan['deviation'] < 0) or (fan['deviation'] > 100)): sys.exit("Invalid deviation value " + str(fan['deviation'])) |