DMIDecode - Command dmidecode

Parses the output of the dmidecode command to catalogue the hardware associated with the system.

In general, DMIdecode recognizes the sections of device information, separated by blank lines, processed in the following way.

  • It uses the descriptor line that precedes the indented device information (e.g. ‘BIOS Information’) as the name for that section, converting the name into lower case and replacing spaces with underscores (e.g. ‘bios_information’) to look more Pythonic.

  • Within each section, data is split up on colons.

  • Lines such as ‘Characteristics’ that end with a colon and have one or more further indented lines after them are converted into a list of the values so indented.

The common information retrieved from dmidecode is available in several convenience properties:

  • system_info - Information about the machine itself

  • bios - the BIOS information

  • bios_vendor - the BIOS’s ‘Vendor’ attribute

  • bios_date - the BIOS’s ‘Release Date’ attribute

  • processor_manufacturer - the processor’s ‘Manufacturer’ attribute

  • is_present - this indicates whether dmidecode information was found.

Sample input:

# dmidecode 2.2
SMBIOS 2.4 present.
104 structures occupying 3162 bytes.
Table at 0x000EE000.
Handle 0x0000
    DMI type 0, 24 bytes.
    BIOS Information
        Vendor: HP
        Version: A08
        Release Date: 09/27/2008
        Address: 0xF0000
        Runtime Size: 64 kB
        ROM Size: 4096 kB
        Characteristics:
            PCI is supported
            PNP is supported
            BIOS is upgradeable
            BIOS shadowing is allowed
            ESCD support is available
            Boot from CD is supported
            Selectable boot is supported
            EDD is supported
            5.25"/360 KB floppy services are supported (int 13h)
            5.25"/1.2 MB floppy services are supported (int 13h)
            3.5"/720 KB floppy services are supported (int 13h)
            Print screen service is supported (int 5h)
            8042 keyboard services are supported (int 9h)
            Serial services are supported (int 14h)
            Printer services are supported (int 17h)
            CGA/mono video services are supported (int 10h)
            ACPI is supported
            USB legacy is supported
            BIOS boot specification is supported
            Function key-initiated network boot is supported``
Handle 0x0100
    DMI type 1, 27 bytes.
    System Information
        Manufacturer: HP
        Product Name: ProLiant BL685c G1
        Version: Not Specified
        Serial Number: 3H6CMK2537
        UUID: 58585858-5858-3348-3643-4D4B32353337
        Wake-up Type: Power Switch

Examples

>>> dmi = shared[DMIDecode]
>>> dmi.is_present
True
>>> len(dmi['bios_information'])
1
>>> dmi['bios_information'][0]['vendor']
'HP'
>>> dmi.bios_vendor
'HP'
>>> dmi.bios_date
datetime.date(2008, 9, 27)
>>> len(dmi.bios['characteristics'])
20
>>> dmi.bios['characteristics'][0]
'PCI is supported'
>>> dmi.system_uuid == '58585858-5858-3348-3643-4D4B32353337'
True
class insights.parsers.dmidecode.DMIDecode(context, extra_bad_lines=None)[source]

Bases: CommandParser, LegacyItemAccess

Class for DMI information.

property bios

Convenience method to get BIOS information

Type:

(str)

property bios_date

Get the BIOS release date in datetime.date format

Type:

(datetime.date)

property bios_vendor

Convenience method to get BIOS vendor

Type:

(str)

property is_present

Is there any decodable data in the content?

Type:

(bool)

parse_content(content)[source]

This method must be implemented by classes based on this class.

property processor_manufacturer

Convenience method to get the processor manufacturer

Type:

(str)

property system_info

Convenience method to get system information

Type:

(str)

property system_uuid

Convenience method to get system UUID

Type:

(str)

insights.parsers.dmidecode.parse_dmidecode(dmidecode_content, pythonic_keys=False)[source]

Returns a dictionary of dmidecode information parsed from a dmidecode list (i.e. from context.content)

This method will attempt to handle leading spaces rather than tabs.