diff options
author | Matthew Barth <msbarth@us.ibm.com> | 2017-05-16 13:51:10 -0500 |
---|---|---|
committer | Matthew Barth <msbarth@us.ibm.com> | 2017-05-31 11:29:45 -0500 |
commit | d4d0f083679e6b23c4e4fe72f4958c1f313b582d (patch) | |
tree | e455ba0c6aa3c6ed729d95eb4b65d2dbc58bb3a6 /control | |
parent | 94b20f7a0fc9d42846d44579e90c60769e4e43cf (diff) | |
download | phosphor-fan-presence-d4d0f083679e6b23c4e4fe72f4958c1f313b582d.tar.gz phosphor-fan-presence-d4d0f083679e6b23c4e4fe72f4958c1f313b582d.zip |
Parse set speed event groups
Adds the groups for a set speed event for each zone listed within the
event. The groups are for maintaining a cached property value.
Change-Id: I2de9cf62215f9861e8ea2e6807df11e6a04638fb
Signed-off-by: Matthew Barth <msbarth@us.ibm.com>
Diffstat (limited to 'control')
-rwxr-xr-x | control/gen-fan-zone-defs.py | 58 |
1 files changed, 56 insertions, 2 deletions
diff --git a/control/gen-fan-zone-defs.py b/control/gen-fan-zone-defs.py index 04f206f..221b322 100755 --- a/control/gen-fan-zone-defs.py +++ b/control/gen-fan-zone-defs.py @@ -37,6 +37,20 @@ const std::vector<ZoneGroup> Manager::_zoneLayouts } }, %endfor + }, + std::vector<SetSpeedEvent>{ + %for event in zone['events']: + SetSpeedEvent{ + Group{ + %for member in event['group']: + { + "${member['name']}", + {"${member['interface']}", + "${member['property']}"} + }, + %endfor + }, + %endfor } }, %endfor @@ -47,6 +61,37 @@ const std::vector<ZoneGroup> Manager::_zoneLayouts ''' +def getEventsInZone(zone_num, events_data): + """ + Constructs the event entries defined for each zone using the events yaml + provided. + """ + events = [] + if 'events' in events_data: + for e in events_data['events']: + for z in e['zone_conditions']: + if zone_num not in z['zones']: + continue + + event = {} + # Add set speed event group + group = [] + groups = next(g for g in events_data['groups'] + if g['name'] == e['group']) + for member in groups['members']: + members = {} + members['name'] = ("/xyz/openbmc_project/" + + groups['type'] + + member) + members['interface'] = e['interface'] + members['property'] = e['property']['name'] + group.append(members) + event['group'] = group + events.append(event) + + return events + + def getFansInZone(zone_num, profiles, fan_data): """ Parses the fan definition YAML files to find the fans @@ -78,7 +123,7 @@ def getFansInZone(zone_num, profiles, fan_data): return fans -def buildZoneData(zone_data, fan_data): +def buildZoneData(zone_data, fan_data, events_data): """ Combines the zone definition YAML and fan definition YAML to create a data structure defining @@ -115,11 +160,13 @@ def buildZoneData(zone_data, fan_data): profiles = z['cooling_profiles'] fans = getFansInZone(z['zone'], profiles, fan_data) + events = getEventsInZone(z['zone'], events_data) if len(fans) == 0: sys.exit("Didn't find any fans in zone " + str(zone['num'])) zone['fans'] = fans + zone['events'] = events zones.append(zone) zone_group['zones'] = zones @@ -138,6 +185,8 @@ if __name__ == '__main__': parser.add_argument('-f', '--fan_yaml', dest='fan_yaml', default="example/fans.yaml", help='fan definitional yaml') + parser.add_argument('-e', '--events_yaml', dest='events_yaml', + help='events to set speeds yaml') parser.add_argument('-o', '--output_dir', dest='output_dir', default=".", help='output directory') @@ -153,8 +202,13 @@ if __name__ == '__main__': with open(args.fan_yaml, 'r') as fan_input: fan_data = yaml.safe_load(fan_input) or {} + events_data = {} + if args.events_yaml: + with open(args.events_yaml, 'r') as events_input: + events_data = yaml.safe_load(events_input) or {} + zone_config = buildZoneData(zone_data.get('zone_configuration', {}), - fan_data) + fan_data, events_data) manager_config = zone_data.get('manager_configuration', {}) |