summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatt Spinler <spinler@us.ibm.com>2017-04-28 15:16:48 -0500
committerMatt Spinler <spinler@us.ibm.com>2017-05-11 13:52:50 -0500
commit85be2e70b6ab28dd01638f115cd7cc4f1beda8da (patch)
tree3fe56e155347b191c357a0c205abdcf51c1283c5
parentb1e185141bdd6b25cea10627045d80e457105baf (diff)
downloadphosphor-fan-presence-85be2e70b6ab28dd01638f115cd7cc4f1beda8da.tar.gz
phosphor-fan-presence-85be2e70b6ab28dd01638f115cd7cc4f1beda8da.zip
Python script to generate monitor data
Generate the data structures from yaml data. Change-Id: I8e21fa099f9365b8c8c7d2227c4debc263601b72 Signed-off-by: Matt Spinler <spinler@us.ibm.com>
-rwxr-xr-xmonitor/gen-fan-monitor-defs.py73
1 files changed, 73 insertions, 0 deletions
diff --git a/monitor/gen-fan-monitor-defs.py b/monitor/gen-fan-monitor-defs.py
new file mode 100755
index 0000000..4e49787
--- /dev/null
+++ b/monitor/gen-fan-monitor-defs.py
@@ -0,0 +1,73 @@
+#!/usr/bin/env python
+
+import os
+import sys
+import yaml
+from argparse import ArgumentParser
+from mako.template import Template
+
+"""
+This script generates the data structures for the
+phosphor-fan-monitor application.
+
+A future improvement is to get the fan inventory names
+from a separate file, so just that file could be generated
+from the MRW.
+"""
+
+
+tmpl = '''/* This is a generated file. */
+#include "fan_defs.hpp"
+#include "types.hpp"
+
+using namespace phosphor::fan::monitor;
+
+const std::vector<FanDefinition> fanDefinitions
+{
+%for fan_data in data:
+ FanDefinition{"${fan_data['inventory']}",
+ ${fan_data['allowed_out_of_range_time']},
+ ${fan_data['deviation']},
+ ${fan_data['num_sensors_nonfunc_for_fan_nonfunc']},
+ std::vector<SensorDefinition>{
+ %for sensor in fan_data['sensors']:
+ <%
+ #has_target is a bool, and we need a true instead of True
+ has_target = str(sensor['has_target']).lower()
+ %> \
+ SensorDefinition{"${sensor['name']}", ${has_target}},
+ %endfor
+ },
+ },
+%endfor
+};
+'''
+
+
+if __name__ == '__main__':
+ parser = ArgumentParser(
+ description="Phosphor fan monitor definition parser")
+
+ parser.add_argument('-m', '--monitor_yaml', dest='monitor_yaml',
+ default="example/monitor.yaml",
+ help='fan monitor definitional yaml')
+ parser.add_argument('-o', '--output_dir', dest='output_dir',
+ default=".",
+ help='output directory')
+ args = parser.parse_args()
+
+ if not args.monitor_yaml:
+ parser.print_usage()
+ sys.exit(-1)
+
+ with open(args.monitor_yaml, 'r') as monitor_input:
+ monitor_data = yaml.safe_load(monitor_input) or {}
+
+ #Do some minor input validation
+ for fan in monitor_data:
+ if ((fan['deviation'] < 0) or (fan['deviation'] > 100)):
+ sys.exit("Invalid deviation value " + str(fan['deviation']))
+
+ output_file = os.path.join(args.output_dir, "fan_monitor_defs.cpp")
+ with open(output_file, 'w') as output:
+ output.write(Template(tmpl).render(data=monitor_data))
OpenPOWER on IntegriCloud