From d940d11af4ad6267298fa1937d19c281df18a64d Mon Sep 17 00:00:00 2001 From: Uggla Date: Mon, 4 Apr 2016 00:05:10 +0200 Subject: [PATCH] Add Thermal, Power classes and review get_type() --- .../templates/chassis_info.template | 21 +++- redfish/types.py | 98 +++++++++++++++---- 2 files changed, 97 insertions(+), 22 deletions(-) diff --git a/redfish-client/templates/chassis_info.template b/redfish-client/templates/chassis_info.template index 704e70f..28acd89 100644 --- a/redfish-client/templates/chassis_info.template +++ b/redfish-client/templates/chassis_info.template @@ -8,12 +8,31 @@ Chassis information : Chassis id {{ chassis_index }}: Manufacturer : {{ chassis.get_manufacturer() }} Model : {{ chassis.get_model() }} -Chassis Type : {{ chassis.get_chassis_type() }} +Chassis Type : {{ chassis.get_type() }} PartNumber : {{ chassis.get_part_number() }} SKU : {{ chassis.get_sku() }} Serial : {{ chassis.get_serial_number() }} AssetTag : {{ chassis.get_asset_tag() }} Status : State : {{ chassis.get_status().Health }} / Health : {{ chassis.get_status().Health }} +{%- if chassis.thermal %} +Temperatures : +{%- if chassis.thermal.get_temperatures() == 'Not available' %} + Not available +{%- else %} +{%- for sensor, temp in chassis.thermal.get_temperatures().items() | sort %} + {{ sensor }} : {{ temp }} +{%- endfor %} +{%- endif %} +Fans : +{%- if chassis.thermal.get_fans() == 'Not available' %} + Not available +{%- else %} +{%- for fan, rpm in chassis.thermal.get_fans().items() | sort %} + {{ fan }} : {{ rpm }} +{%- endfor %} +{%- endif %} +{%- endif %} + {# Hostname : {{ system.get_hostname() }} Bios version : {{ system.get_bios_version() }} diff --git a/redfish/types.py b/redfish/types.py index d13ab0f..304117f 100644 --- a/redfish/types.py +++ b/redfish/types.py @@ -185,18 +185,6 @@ class Device(Base): except AttributeError: return "Not available" - def get_type(self): - '''Get device type - - :returns: device type or "Not available" - :rtype: string - - ''' - try: - return self.data.SystemType - except AttributeError: - return "Not available" - def get_model(self): '''Get device model @@ -329,6 +317,18 @@ class Managers(Device): # This means we don't have EthernetInterfaces self.ethernet_interfaces_collection = None + def get_type(self): + '''Get manager type + + :returns: manager type or "Not available" + :rtype: string + + ''' + try: + return self.data.ManagerType + except AttributeError: + return "Not available" + def get_firmware_version(self): '''Get firmware version of the manager @@ -566,6 +566,18 @@ class Systems(Device): except AttributeError: return "Not available" + def get_type(self): + '''Get system type + + :returns: system type or "Not available" + :rtype: string + + ''' + try: + return self.data.SystemType + except AttributeError: + return "Not available" + def get_chassis(self): '''Get chassis ids used by the system @@ -870,15 +882,19 @@ class Chassis(Device): '''Class constructor''' super(Chassis, self).__init__(url, connection_parameters) -# try: -# self.ethernet_interfaces_collection = \ -# EthernetInterfacesCollection( -# self.get_link_url('EthernetInterfaces'), -# connection_parameters) -# except AttributeError: -# # This means we don't have EthernetInterfaces -# self.ethernet_interfaces_collection = None - def get_chassis_type(self): + try: + self.thermal = Thermal(self.get_link_url('Thermal'), + connection_parameters) + except AttributeError: + self.thermal = None + + try: + self.power = Power(self.get_link_url('Power'), + connection_parameters) + except AttributeError: + self.Power = None + + def get_type(self): '''Get chassis type :returns: chassis type or "Not available" @@ -889,3 +905,43 @@ class Chassis(Device): return self.data.ChassisType except AttributeError: return "Not available" + + +class Thermal(Base): + '''Class to manage redfish Thermal data.''' + def get_temperatures(self): + '''Get chassis sensors name and temparature + + :returns: chassis sensor and temperature + :rtype: dict + + ''' + temperatures = {} + + try: + for sensor in self.data.Temperatures: + temperatures[sensor.Name] = sensor.ReadingCelsius + return temperatures + except AttributeError: + return "Not available" + + def get_fans(self): + '''Get chassis fan name and rpm + + :returns: chassis fan and rpm + :rtype: dict + + ''' + fans = {} + + try: + for fan in self.data.Fans: + fans[fan.FanName] = fan.ReadingRPM + return fans + except AttributeError: + return "Not available" + + +class Power(Base): + '''Class to manage redfish Power data.''' + pass