Open power sensors telemetry data keyword
Added new keywords to support sensors aggregation data collection.
Resolves openbmc/openbmc-test-automation#1228
Change-Id: If566666a50e56ec18a033a1548ef4b4626b738f1
Signed-off-by: George Keishing <gkeishin@in.ibm.com>
diff --git a/data/variables.py b/data/variables.py
index 35a0339..beb2629 100644
--- a/data/variables.py
+++ b/data/variables.py
@@ -6,6 +6,7 @@
# org open power base URI.
OPENPOWER_BASE_URI = '/org/open_power/'
OPENPOWER_CONTROL = OPENPOWER_BASE_URI + 'control/'
+OPENPOWER_SENSORS = OPENPOWER_BASE_URI + 'sensors/'
# REST URI base endpoint paths.
CONTROL_URI = OPENBMC_BASE_URI + 'control/'
diff --git a/lib/open_power_utils.robot b/lib/open_power_utils.robot
index 17b14ee..c657d05 100644
--- a/lib/open_power_utils.robot
+++ b/lib/open_power_utils.robot
@@ -85,3 +85,80 @@
\ ${occ_active}= Get OCC Active State ${OPENPOWER_CONTROL}occ${num}
\ Should Be Equal ${occ_active} ${expected_occ_active}
... msg=OCC not in right state
+
+
+Get Sensors Aggregation Data
+ [Documentation] Return open power sensors aggregation value list.
+ [Arguments] ${object_base_uri_path}
+
+ # Description of argument(s):
+ # object_base_uri_path An object path such as one of the elements
+ # returned by 'Get Sensors Aggregation URL List'
+ # (e.g. "/org/open_power/sensors/aggregation/per_30s/ps0_input_power/average").
+
+ # Example of aggregation [epoch,time] data:
+ # "Values": [
+ # [
+ # 1517815708479, <-- EPOCH
+ # 282 <-- Power value in watts
+ # ],
+ # [
+ # 1517815678238,
+ # 282
+ # ],
+ # [
+ # 1517815648102,
+ # 282
+ # ],
+ # ],
+
+ ${resp}= Read Attribute ${object_base_uri_path} Values quiet=${1}
+ ${power_sensors_value_list}= Create List
+ :FOR ${entry} IN @{resp}
+ \ Append To List ${power_sensors_value_list} ${entry[1]}
+ [Return] ${power_sensors_value_list}
+
+
+Get Sensors Aggregation URL List
+ [Documentation] Return the open power aggregation maximum list and the
+ ... average list URIs.
+ [Arguments] ${object_base_uri_path}
+
+ # Example of the 2 lists returned by this keyword:
+ # avgs:
+ # avgs[0]: /org/open_power/sensors/aggregation/per_30s/ps0_input_power/average
+ # avgs[1]: /org/open_power/sensors/aggregation/per_30s/ps1_input_power/average
+ # maxs:
+ # maxs[0]: /org/open_power/sensors/aggregation/per_30s/ps1_input_power/maximum
+ # maxs[1]: /org/open_power/sensors/aggregation/per_30s/ps0_input_power/maximum
+
+ # Description of argument(s):
+ # object_base_uri_path Object path.
+ # base path "/org/open_power/sensors/"
+ # (e.g. "base path + aggregation/per_30s/ps0_input_power/average")
+
+ # Example of open power sensor aggregation data as returned by the get
+ # request:
+ # /org/open_power/sensors/list
+ # [
+ # "/org/open_power/sensors/aggregation/per_30s/ps0_input_power/average",
+ # "/org/open_power/sensors/aggregation/per_30s/ps1_input_power/maximum",
+ # "/org/open_power/sensors/aggregation/per_30s/ps0_input_power/maximum",
+ # "/org/open_power/sensors/aggregation/per_30s/ps1_input_power/average"
+ # ]
+
+ ${resp}= OpenBMC Get Request ${object_base_uri_path}list quiet=${1}
+ ${content}= To JSON ${resp.content}
+
+ ${power_supply_avg_list}= Create List
+ ${power_supply_max_list}= Create List
+
+ :FOR ${entry} IN @{content["data"]}
+ \ ${status}=
+ ... Run keyword And Return Status Should Contain ${entry} average
+ \ Run Keyword If ${status} == ${False}
+ ... Append To List ${power_supply_max_list} ${entry}
+ ... ELSE
+ ... Append To List ${power_supply_avg_list} ${entry}
+
+ [Return] ${power_supply_avg_list} ${power_supply_max_list}