@@ -339,22 +339,16 @@ def get_component_devices(raid_device):
339339
340340def _calc_memory (sys_dict ):
341341 physical = 0
342- for sys_child in sys_dict ['children' ]:
343- if sys_child ['id' ] != 'core' :
344- continue
345- for core_child in sys_child ['children' ]:
346- if not _MEMORY_ID_RE .match (core_child ['id' ]):
347- continue
348- if core_child .get ('size' ):
349- value = ("%(size)s %(units)s" % core_child )
350- physical += int (UNIT_CONVERTER (value ).to
351- ('MB' ).magnitude )
352- else :
353- for bank in core_child .get ('children' , ()):
354- if bank .get ('size' ):
355- value = ("%(size)s %(units)s" % bank )
356- physical += int (UNIT_CONVERTER (value ).to
357- ('MB' ).magnitude )
342+ core_dict = next (utils .find_in_lshw (sys_dict , 'core' ), {})
343+ for core_child in utils .find_in_lshw (core_dict , _MEMORY_ID_RE ):
344+ if core_child .get ('size' ):
345+ value = ("%(size)s %(units)s" % core_child )
346+ physical += int (UNIT_CONVERTER (value ).to ('MB' ).magnitude )
347+ else :
348+ for bank in core_child .get ('children' , ()):
349+ if bank .get ('size' ):
350+ value = ("%(size)s %(units)s" % bank )
351+ physical += int (UNIT_CONVERTER (value ).to ('MB' ).magnitude )
358352 return physical
359353
360354
@@ -835,13 +829,24 @@ def __init__(self, total, physical_mb=None):
835829 self .physical_mb = physical_mb
836830
837831
832+ class SystemFirmware (encoding .SerializableComparable ):
833+ serializable_fields = ('vendor' , 'version' , 'build_date' )
834+
835+ def __init__ (self , vendor , version , build_date ):
836+ self .version = version
837+ self .build_date = build_date
838+ self .vendor = vendor
839+
840+
838841class SystemVendorInfo (encoding .SerializableComparable ):
839- serializable_fields = ('product_name' , 'serial_number' , 'manufacturer' )
842+ serializable_fields = ('product_name' , 'serial_number' , 'manufacturer' ,
843+ 'firmware' )
840844
841- def __init__ (self , product_name , serial_number , manufacturer ):
845+ def __init__ (self , product_name , serial_number , manufacturer , firmware ):
842846 self .product_name = product_name
843847 self .serial_number = serial_number
844848 self .manufacturer = manufacturer
849+ self .firmware = firmware
845850
846851
847852class BootInfo (encoding .SerializableComparable ):
@@ -1512,9 +1517,17 @@ def get_system_vendor_info(self):
15121517 except (processutils .ProcessExecutionError , OSError , ValueError ) as e :
15131518 LOG .warning ('Could not retrieve vendor info from lshw: %s' , e )
15141519 sys_dict = {}
1520+
1521+ core_dict = next (utils .find_in_lshw (sys_dict , 'core' ), {})
1522+ fw_dict = next (utils .find_in_lshw (core_dict , 'firmware' ), {})
1523+
1524+ firmware = SystemFirmware (vendor = fw_dict .get ('vendor' , '' ),
1525+ version = fw_dict .get ('version' , '' ),
1526+ build_date = fw_dict .get ('date' , '' ))
15151527 return SystemVendorInfo (product_name = sys_dict .get ('product' , '' ),
15161528 serial_number = sys_dict .get ('serial' , '' ),
1517- manufacturer = sys_dict .get ('vendor' , '' ))
1529+ manufacturer = sys_dict .get ('vendor' , '' ),
1530+ firmware = firmware )
15181531
15191532 def get_boot_info (self ):
15201533 boot_mode = 'uefi' if os .path .isdir ('/sys/firmware/efi' ) else 'bios'
0 commit comments