parsed for network geting of lshw
This commit is contained in:
parent
649e456feb
commit
8052618d55
|
@ -1,3 +1,5 @@
|
||||||
|
import json
|
||||||
|
|
||||||
from dmidecode import DMIParse
|
from dmidecode import DMIParse
|
||||||
|
|
||||||
|
|
||||||
|
@ -26,26 +28,110 @@ class Demidecode:
|
||||||
|
|
||||||
def set_components(self):
|
def set_components(self):
|
||||||
self.get_cpu()
|
self.get_cpu()
|
||||||
|
self.get_ram()
|
||||||
|
self.get_mother_board()
|
||||||
|
|
||||||
def get_cpu(self):
|
def get_cpu(self):
|
||||||
cpu = self.dmi.get('Processor')[0]
|
|
||||||
|
|
||||||
self.components.append(
|
|
||||||
{
|
|
||||||
"actions": [],
|
|
||||||
"type": "Processor",
|
|
||||||
"speed": cpu.get('Max Speed'),
|
|
||||||
"cores": int(cpu.get('Core Count', 1)),
|
|
||||||
"model": cpu.get('Version'),
|
|
||||||
"threads": int(cpu.get('Thread Count', 1)),
|
|
||||||
"manufacturer": cpu.get('Manufacturer'),
|
|
||||||
"serialNumber": cpu.get('Serial Number'),
|
|
||||||
"generation": cpu.get('Generation'),
|
|
||||||
"brand": cpu.get('Brand'),
|
|
||||||
"address": cpu.get('Address'),
|
|
||||||
}
|
|
||||||
)
|
|
||||||
# TODO @cayop generation, brand and address not exist in dmidecode
|
# TODO @cayop generation, brand and address not exist in dmidecode
|
||||||
|
for cpu in self.dmi.get('Processor'):
|
||||||
|
self.components.append(
|
||||||
|
{
|
||||||
|
"actions": [],
|
||||||
|
"type": "Processor",
|
||||||
|
"speed": cpu.get('Max Speed'),
|
||||||
|
"cores": int(cpu.get('Core Count', 1)),
|
||||||
|
"model": cpu.get('Version'),
|
||||||
|
"threads": int(cpu.get('Thread Count', 1)),
|
||||||
|
"manufacturer": cpu.get('Manufacturer'),
|
||||||
|
"serialNumber": cpu.get('Serial Number'),
|
||||||
|
"generation": cpu.get('Generation'),
|
||||||
|
"brand": cpu.get('Brand'),
|
||||||
|
"address": cpu.get('Address'),
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
def get_ram(self):
|
||||||
|
# TODO @cayop format and model not exist in dmidecode
|
||||||
|
for ram in self.dmi.get("Memory Device"):
|
||||||
|
self.components.append(
|
||||||
|
{
|
||||||
|
"actions": [],
|
||||||
|
"type": "RamModule",
|
||||||
|
"size": self.get_ram_size(ram),
|
||||||
|
"speed": self.get_ram_speed(ram),
|
||||||
|
"manufacturer": ram.get("Manufacturer", self.default),
|
||||||
|
"serialNumber": ram.get("Serial Number", self.default),
|
||||||
|
"interface": ram.get("Type", self.default),
|
||||||
|
"format": ram.get("Format", self.default), # "DIMM",
|
||||||
|
"model": ram.get(
|
||||||
|
"Model", self.default
|
||||||
|
), # "48594D503131325336344350362D53362020",
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
def get_mother_board(self):
|
||||||
|
# TODO @cayop model, not exist in dmidecode
|
||||||
|
for moder_board in self.dmi.get("Baseboard"):
|
||||||
|
self.components.append(
|
||||||
|
{
|
||||||
|
"actions": [],
|
||||||
|
"type": "Motherboard",
|
||||||
|
"version": moder_board.get("Version"),
|
||||||
|
"serialNumber": moder_board.get("Serial Number"),
|
||||||
|
"manufacturer": moder_board.get("Manufacturer"),
|
||||||
|
"ramSlots": self.get_ram_slots(),
|
||||||
|
"ramMaxSize": self.get_max_ram_size(),
|
||||||
|
"slots": len(self.dmi.get("Number Of Devices")),
|
||||||
|
"biosDate": self.get_bios_date(),
|
||||||
|
"firewire": self.get_firmware(),
|
||||||
|
"model": moder_board.get("Product Name"), # ??
|
||||||
|
"pcmcia": self.get_pcmcia_num(), # ??
|
||||||
|
"serial": self.get_serial_num(), # ??
|
||||||
|
"usb": self.get_usb_num(),
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
def get_usb_num(self):
|
||||||
|
return len(
|
||||||
|
[u for u in self.get("Port Connector") if u.get("Port Type") == "USB"]
|
||||||
|
)
|
||||||
|
|
||||||
|
def get_serial_num(self):
|
||||||
|
return len(
|
||||||
|
[u for u in self.get("Port Connector") if u.get("Port Type") == "SERIAL"]
|
||||||
|
)
|
||||||
|
|
||||||
|
def get_pcmcia_num(self):
|
||||||
|
return len(
|
||||||
|
[u for u in self.get("Port Connector") if u.get("Port Type") == "PCMCIA"]
|
||||||
|
)
|
||||||
|
|
||||||
|
def get_bios_date(self):
|
||||||
|
return self.get("BIOS")[0].get("Release Date", self.default)
|
||||||
|
|
||||||
|
def get_firmware(self):
|
||||||
|
return self.get("BIOS")[0].get("Firmware Revision", self.default)
|
||||||
|
|
||||||
|
def get_max_ram_size(self):
|
||||||
|
size = self.dmi.get("Physical Memory Array")
|
||||||
|
if size:
|
||||||
|
size = size.get("Maximum Capacity")
|
||||||
|
|
||||||
|
return size.split(" GB")[0] if size else self.default
|
||||||
|
|
||||||
|
def get_ram_slots(self):
|
||||||
|
slots = self.dmi.get("Physical Memory Array")
|
||||||
|
if slots:
|
||||||
|
slots = slots.get("Number Of Devices")
|
||||||
|
return int(slots) if slots else self.default
|
||||||
|
|
||||||
|
def get_ram_size(self, ram):
|
||||||
|
size = ram.get("Size")
|
||||||
|
return size.split(" MB")[0] if size else self.default
|
||||||
|
|
||||||
|
def get_ram_speed(self, ram):
|
||||||
|
size = ram.get("Speed")
|
||||||
|
return size.split(" MT/s")[0] if size else self.default
|
||||||
|
|
||||||
def get_sku(self):
|
def get_sku(self):
|
||||||
return self.get("System")[0].get("SKU Number", self.default)
|
return self.get("System")[0].get("SKU Number", self.default)
|
||||||
|
@ -96,3 +182,46 @@ class Demidecode:
|
||||||
if lower_type in v:
|
if lower_type in v:
|
||||||
return k
|
return k
|
||||||
return self.default
|
return self.default
|
||||||
|
|
||||||
|
|
||||||
|
class LsHw:
|
||||||
|
def __init__(self, dmi, jshw, default="n/a"):
|
||||||
|
self.default = default
|
||||||
|
self.hw = self.loads(jshw)
|
||||||
|
self.childrens = self.hw.get('children', [])
|
||||||
|
self.dmi = dmi
|
||||||
|
self.components = dmi.components
|
||||||
|
self.add_components()
|
||||||
|
|
||||||
|
def add_components(self):
|
||||||
|
self.get_cpu_addr()
|
||||||
|
self.get_networks()
|
||||||
|
|
||||||
|
def get_cpu_addr(self):
|
||||||
|
for cpu in self.components:
|
||||||
|
if not cpu['type'] == "Processor":
|
||||||
|
continue
|
||||||
|
|
||||||
|
cpu["address"] = self.hw.get("width")
|
||||||
|
|
||||||
|
def get_networks(self):
|
||||||
|
for x in self.childrens:
|
||||||
|
if not x['id'] == 'network':
|
||||||
|
continue
|
||||||
|
self.components.append(
|
||||||
|
{
|
||||||
|
"actions": [],
|
||||||
|
"type": "NetworkAdapter",
|
||||||
|
"serialNumber": x.get('serial'),
|
||||||
|
"speed": x.get('capacity', 10000000) / 1000**2,
|
||||||
|
"model": x.get("product"),
|
||||||
|
"manufacturer": x.get('vendor'),
|
||||||
|
"variant": x.get("version"),
|
||||||
|
"wireless": bool(x.get('configuration', {}).get('wireless', False)),
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
def loads(jshw):
|
||||||
|
if isinstance(jshw, dict):
|
||||||
|
return jshw
|
||||||
|
return json.loads(jshw)
|
||||||
|
|
Reference in New Issue