summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatthew Barth <msbarth@us.ibm.com>2017-05-16 13:51:10 -0500
committerMatthew Barth <msbarth@us.ibm.com>2017-05-31 11:29:45 -0500
commitd4d0f083679e6b23c4e4fe72f4958c1f313b582d (patch)
treee455ba0c6aa3c6ed729d95eb4b65d2dbc58bb3a6
parent94b20f7a0fc9d42846d44579e90c60769e4e43cf (diff)
downloadphosphor-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>
-rw-r--r--configure.ac7
-rwxr-xr-xcontrol/gen-fan-zone-defs.py58
2 files changed, 63 insertions, 2 deletions
diff --git a/configure.ac b/configure.ac
index e698150..4958bc2 100644
--- a/configure.ac
+++ b/configure.ac
@@ -96,6 +96,12 @@ AS_IF([test "x$enable_control" != "xno"], [
AC_DEFINE_UNQUOTED([FAN_ZONE_YAML_FILE], ["$FAN_ZONE_YAML_FILE"],
[The fan zone definition file to use])
+ AC_ARG_VAR(ZONE_EVENTS_YAML_FILE,
+ [The zone events definition file to use])
+ AS_IF([test "x$ZONE_EVENTS_YAML_FILE" != "x"], [
+ AC_SUBST([ZONE_EVENTS_ARG], ["-e ${ZONE_EVENTS_YAML_FILE}"])
+ ])
+
AC_ARG_VAR(FAN_ZONE_OUTPUT_DIR,
[The output directory for the generated fan zone data file])
AS_IF([test "x$FAN_ZONE_OUTPUT_DIR" == "x"],
@@ -107,6 +113,7 @@ AS_IF([test "x$enable_control" != "xno"], [
[$PYTHON ${srcdir}/control/gen-fan-zone-defs.py \
-f $FAN_DEF_YAML_FILE \
-z $FAN_ZONE_YAML_FILE \
+ $ZONE_EVENTS_ARG \
-o $FAN_ZONE_OUTPUT_DIR])
AC_CONFIG_FILES([control/Makefile])
])
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', {})
OpenPOWER on IntegriCloud