From 35108a774758099abb80299c8732b830418fa2ad Mon Sep 17 00:00:00 2001 From: Matt Spinler Date: Thu, 28 Sep 2017 13:02:32 -0500 Subject: 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 trustGroups { { []() { std::vector names{ "fan0_1", "fan1_1", "fan2_1", "fan3_1", }; return std::make_unique(names); } }, }; Change-Id: Ia883df35efb86242aae2f8ed7d1714e94e65a6e6 Signed-off-by: Matt Spinler --- monitor/gen-fan-monitor-defs.py | 29 +++++++++++++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) (limited to 'monitor/gen-fan-monitor-defs.py') 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 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 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 names{ + %for sensor in group['sensors']: + "${sensor['name']}", + %endfor + }; + return std::make_unique<${group['class']}>(names); + +const std::vector 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'])) -- cgit v1.2.1