From a4d361ff9b5bf5e42610511e6194246dc7eb8c93 Mon Sep 17 00:00:00 2001 From: sergio_gimenez Date: Thu, 7 Nov 2024 08:15:42 +0100 Subject: [PATCH 01/86] Initial view of the enviromental impact without calculations --- device/environmental_impact/__init__.py | 0 device/environmental_impact/calculator.py | 10 ++++ device/templates/details.html | 59 +++++++++++++++++++++++ device/views.py | 2 + 4 files changed, 71 insertions(+) create mode 100644 device/environmental_impact/__init__.py create mode 100644 device/environmental_impact/calculator.py diff --git a/device/environmental_impact/__init__.py b/device/environmental_impact/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/device/environmental_impact/calculator.py b/device/environmental_impact/calculator.py new file mode 100644 index 0000000..dd79432 --- /dev/null +++ b/device/environmental_impact/calculator.py @@ -0,0 +1,10 @@ +from dataclasses import dataclass + + +@dataclass +class EnvironmentalImpact: + carbon_saved: float + + +def get_device_environmental_impact() -> EnvironmentalImpact: + return EnvironmentalImpact(carbon_saved=225.0) diff --git a/device/templates/details.html b/device/templates/details.html index 331c857..6af4e86 100644 --- a/device/templates/details.html +++ b/device/templates/details.html @@ -32,6 +32,9 @@ + @@ -229,6 +232,62 @@ {% endfor %} +
+
+ {% comment %}
Environmental Impact Assessment
{% endcomment %} + +
+
+
+
+
+ +
+
Carbon Reduction
+

{{ impact.carbon_saved }}

+

kg CO₂e saved

+
+
+
+ {% comment %}
+
+
+
+ +
+
Whatever other metric we might wanna show
+

85%

+

whatever

+
+
+
{% endcomment %} +
+
+
Impact Details
+ +
+ + + + + + + +
Manufacturing Impact Avoided + {{ impact.carbon_saved }} kg CO₂e +
+ Based on average laptop manufacturing emissions +
+
+ +
+
Calculation Method
+ Based on industry standards X Y and Z +
+
+
+
+
{% endblock %} diff --git a/device/views.py b/device/views.py index 319f8cf..1deb795 100644 --- a/device/views.py +++ b/device/views.py @@ -16,6 +16,7 @@ from evidence.models import Annotation from lot.models import LotTag from device.models import Device from device.forms import DeviceFormSet +from device.environmental_impact.calculator import get_device_environmental_impact class NewDeviceView(DashboardView, FormView): @@ -107,6 +108,7 @@ class DetailsView(DashboardView, TemplateView): 'object': self.object, 'snapshot': self.object.get_last_evidence(), 'lot_tags': lot_tags, + 'impact': get_device_environmental_impact() }) return context -- 2.30.2 From a0276f439e560bad3a5b7a66c7a3b8fbf9ab1a56 Mon Sep 17 00:00:00 2001 From: Cayo Puigdefabregas Date: Fri, 15 Nov 2024 12:47:08 +0100 Subject: [PATCH 02/86] add inxi in parsing and show in details of devs --- dashboard/templates/unassigned_devices.html | 4 + device/models.py | 6 + device/templates/details.html | 17 +- evidence/models.py | 38 +- evidence/parse.py | 73 +-- evidence/parse_details.py | 619 ++++++++------------ 6 files changed, 340 insertions(+), 417 deletions(-) diff --git a/dashboard/templates/unassigned_devices.html b/dashboard/templates/unassigned_devices.html index 369edd2..d54e450 100644 --- a/dashboard/templates/unassigned_devices.html +++ b/dashboard/templates/unassigned_devices.html @@ -69,7 +69,11 @@ {{ dev.manufacturer }} + {% if dev.version %} + {{dev.version}} {{ dev.model }} + {% else %} {{ dev.model }} + {% endif %} diff --git a/device/models.py b/device/models.py index 4e0778f..3bd5eeb 100644 --- a/device/models.py +++ b/device/models.py @@ -300,6 +300,12 @@ class Device: self.get_last_evidence() return self.last_evidence.get_model() + @property + def version(self): + if not self.last_evidence: + self.get_last_evidence() + return self.last_evidence.get_version() + @property def components(self): if not self.last_evidence: diff --git a/device/templates/details.html b/device/templates/details.html index 137a4f6..fb362c7 100644 --- a/device/templates/details.html +++ b/device/templates/details.html @@ -53,34 +53,41 @@ {% endif %} -
+
Type
{{ object.type }}
{% if object.is_websnapshot and object.last_user_evidence %} {% for k, v in object.last_user_evidence %} -
+
{{ k }}
{{ v|default:'' }}
{% endfor %} {% else %} -
+
{% trans 'Manufacturer' %}
{{ object.manufacturer|default:'' }}
-
+
{% trans 'Model' %}
{{ object.model|default:'' }}
-
+
+
+ {% trans 'Version' %} +
+
{{ object.version|default:'' }}
+
+ +
{% trans 'Serial Number' %}
diff --git a/evidence/models.py b/evidence/models.py index e9af092..242d885 100644 --- a/evidence/models.py +++ b/evidence/models.py @@ -5,7 +5,7 @@ from django.db import models from utils.constants import STR_EXTEND_SIZE, CHASSIS_DH from evidence.xapian import search -from evidence.parse_details import ParseSnapshot +from evidence.parse_details import ParseSnapshot, get_inxi, get_inxi_key from user.models import User, Institution @@ -39,6 +39,7 @@ class Evidence: self.doc = None self.created = None self.dmi = None + self.inxi = None self.annotations = [] self.components = [] self.default = "n/a" @@ -72,7 +73,22 @@ class Evidence: if not self.is_legacy(): dmidecode_raw = self.doc["data"]["dmidecode"] + inxi_raw = self.doc["data"]["inxi"] self.dmi = DMIParse(dmidecode_raw) + try: + self.inxi = json.loads(inxi_raw) + machine = get_inxi_key(self.inxi, 'Machine') + for m in machine: + system = get_inxi(m, "System") + if system: + self.device_manufacturer = system + self.device_model = get_inxi(m, "product") + self.device_serial_number = get_inxi(m, "serial") + self.device_chassis = get_inxi(m, "Type") + self.device_version = get_inxi(m, "v") + + except Exception: + return def get_time(self): if not self.doc: @@ -98,6 +114,9 @@ class Evidence: if self.is_legacy(): return self.doc['device']['manufacturer'] + if self.inxi: + return self.device_manufacturer + return self.dmi.manufacturer().strip() def get_model(self): @@ -110,11 +129,17 @@ class Evidence: if self.is_legacy(): return self.doc['device']['model'] + if self.inxi: + return self.device_model + return self.dmi.model().strip() def get_chassis(self): if self.is_legacy(): return self.doc['device']['model'] + + if self.inxi: + return self.device_chassis chassis = self.dmi.get("Chassis")[0].get("Type", '_virtual') lower_type = chassis.lower() @@ -127,8 +152,19 @@ class Evidence: def get_serial_number(self): if self.is_legacy(): return self.doc['device']['serialNumber'] + + if self.inxi: + return self.device_serial_number + return self.dmi.serial_number().strip() + + def get_version(self): + if self.inxi: + return self.device_version + + return "" + @classmethod def get_all(cls, user): return Annotation.objects.filter( diff --git a/evidence/parse.py b/evidence/parse.py index fd68e06..d0e8414 100644 --- a/evidence/parse.py +++ b/evidence/parse.py @@ -3,35 +3,22 @@ import hashlib import logging from dmidecode import DMIParse -from json_repair import repair_json -from evidence.parse_details import get_lshw_child from evidence.models import Annotation from evidence.xapian import index from utils.constants import CHASSIS_DH - +from evidence.parse_details import get_inxi_key, get_inxi logger = logging.getLogger('django') -def get_mac(lshw): - try: - if type(lshw) is dict: - hw = lshw - else: - hw = json.loads(lshw) - except json.decoder.JSONDecodeError: - hw = json.loads(repair_json(lshw)) - nets = [] - get_lshw_child(hw, nets, 'network') - - nets_sorted = sorted(nets, key=lambda x: x['businfo']) - - if nets_sorted: - mac = nets_sorted[0]['serial'] - logger.debug("The snapshot has the following MAC: %s" , mac) - return mac +def get_mac(inxi): + nets = get_inxi_key(inxi, "Network") + networks = [(nets[i], nets[i + 1]) for i in range(0, len(nets) - 1, 2)] + for n, iface in networks: + if get_inxi(n, "port"): + return get_inxi(iface, 'mac') class Build: @@ -94,38 +81,28 @@ class Build: value=v ) - def get_chassis_dh(self): - chassis = self.get_chassis() - lower_type = chassis.lower() - for k, v in CHASSIS_DH.items(): - if lower_type in v: - return k - return self.default - - def get_sku(self): - return self.dmi.get("System")[0].get("SKU Number", "n/a").strip() - - def get_chassis(self): - return self.dmi.get("Chassis")[0].get("Type", '_virtual') - def get_hid(self, snapshot): - dmidecode_raw = snapshot["data"]["dmidecode"] - self.dmi = DMIParse(dmidecode_raw) + try: + self.inxi = json.loads(self.json["inxi"]) + except Exception: + logger.error("No inxi in snapshot %s", self.uuid) + return "" + + machine = get_inxi_key(self.inxi, 'Machine') + for m in machine: + system = get_inxi(m, "System") + if system: + manufacturer = system + model = get_inxi(m, "product") + serial_number = get_inxi(m, "serial") + chassis = get_inxi(m, "Type") + else: + sku = get_inxi(m, "part-nu") - manufacturer = self.dmi.manufacturer().strip() - model = self.dmi.model().strip() - chassis = self.get_chassis_dh() - serial_number = self.dmi.serial_number() - sku = self.get_sku() - - if not snapshot["data"].get('lshw'): - return f"{manufacturer}{model}{chassis}{serial_number}{sku}" - - lshw = snapshot["data"]["lshw"] - # mac = get_mac2(hwinfo_raw) or "" - mac = get_mac(lshw) or "" + mac = get_mac(self.inxi) or "" if not mac: txt = "Could not retrieve MAC address in snapshot %s" logger.warning(txt, snapshot['uuid']) + return f"{manufacturer}{model}{chassis}{serial_number}{sku}" return f"{manufacturer}{model}{chassis}{serial_number}{sku}{mac}" diff --git a/evidence/parse_details.py b/evidence/parse_details.py index 12ade8a..55ecdd7 100644 --- a/evidence/parse_details.py +++ b/evidence/parse_details.py @@ -1,10 +1,10 @@ +import re import json import logging import numpy as np from datetime import datetime from dmidecode import DMIParse -from json_repair import repair_json from utils.constants import CHASSIS_DH, DATASTORAGEINTERFACE @@ -12,11 +12,19 @@ from utils.constants import CHASSIS_DH, DATASTORAGEINTERFACE logger = logging.getLogger('django') -def get_lshw_child(child, nets, component): - if child.get('id') == component: - nets.append(child) - if child.get('children'): - [get_lshw_child(x, nets, component) for x in child['children']] +def get_inxi_key(inxi, component): + for n in inxi: + for k, v in n.items(): + if component in k: + return v + + +def get_inxi(n, name): + for k, v in n.items(): + if f"#{name}" in k: + return v + + return "" class ParseSnapshot: @@ -24,20 +32,15 @@ class ParseSnapshot: self.default = default self.dmidecode_raw = snapshot["data"].get("dmidecode", "{}") self.smart_raw = snapshot["data"].get("disks", []) - self.hwinfo_raw = snapshot["data"].get("hwinfo", "") - self.lshw_raw = snapshot["data"].get("lshw", {}) or {} - self.lscpi_raw = snapshot["data"].get("lspci", "") + self.inxi_raw = snapshot["data"].get("inxi", "") or "" self.device = {"actions": []} self.components = [] - self.monitors = [] self.dmi = DMIParse(self.dmidecode_raw) self.smart = self.loads(self.smart_raw) - self.lshw = self.loads(self.lshw_raw) - self.hwinfo = self.parse_hwinfo() + self.inxi = self.loads(self.inxi_raw) self.set_computer() - self.get_hwinfo_monitors() self.set_components() self.snapshot_json = { "type": "Snapshot", @@ -51,283 +54,294 @@ class ParseSnapshot: } def set_computer(self): - self.device['manufacturer'] = self.dmi.manufacturer().strip() - self.device['model'] = self.dmi.model().strip() - self.device['serialNumber'] = self.dmi.serial_number() - self.device['type'] = self.get_type() - self.device['sku'] = self.get_sku() - self.device['version'] = self.get_version() - self.device['system_uuid'] = self.get_uuid() - self.device['family'] = self.get_family() - self.device['chassis'] = self.get_chassis_dh() + machine = get_inxi_key(self.inxi, 'Machine') + for m in machine: + system = get_inxi(m, "System") + if system: + self.device['manufacturer'] = system + self.device['model'] = get_inxi(m, "product") + self.device['serialNumber'] = get_inxi(m, "serial") + self.device['type'] = get_inxi(m, "Type") + self.device['chassis'] = self.device['type'] + self.device['version'] = get_inxi(m, "v") + else: + self.device['system_uuid'] = get_inxi(m, "uuid") + self.device['sku'] = get_inxi(m, "part-nu") def set_components(self): + self.get_mother_board() self.get_cpu() self.get_ram() - self.get_mother_board() self.get_graphic() - self.get_data_storage() self.get_display() - self.get_sound_card() self.get_networks() - - def get_cpu(self): - for cpu in self.dmi.get('Processor'): - serial = cpu.get('Serial Number') - if serial == 'Not Specified' or not serial: - serial = cpu.get('ID').replace(' ', '') - self.components.append( - { - "actions": [], - "type": "Processor", - "speed": self.get_cpu_speed(cpu), - "cores": int(cpu.get('Core Count', 1)), - "model": cpu.get('Version'), - "threads": int(cpu.get('Thread Count', 1)), - "manufacturer": cpu.get('Manufacturer'), - "serialNumber": serial, - "brand": cpu.get('Family'), - "address": self.get_cpu_address(cpu), - "bogomips": self.get_bogomips(), - } - ) - - def get_ram(self): - for ram in self.dmi.get("Memory Device"): - if ram.get('size') == 'No Module Installed': - continue - if not ram.get("Speed"): - continue - - 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", "DDR"), - "format": ram.get("Form Factor", "DIMM"), - "model": ram.get("Part Number", self.default), - } - ) + self.get_sound_card() + self.get_data_storage() + self.get_battery() def get_mother_board(self): - 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", "").strip(), - "manufacturer": moder_board.get("Manufacturer", "").strip(), - "biosDate": self.get_bios_date(), - "ramMaxSize": self.get_max_ram_size(), - "ramSlots": len(self.dmi.get("Memory Device")), - "slots": self.get_ram_slots(), - "model": moder_board.get("Product Name", "").strip(), - "firewire": self.get_firmware_num(), - "pcmcia": self.get_pcmcia_num(), - "serial": self.get_serial_num(), - "usb": self.get_usb_num(), - } - ) + machine = get_inxi_key(self.inxi, 'Machine') + mb = {"type": "Motherboard",} + for m in machine: + bios_date = get_inxi(m, "date") + if not bios_date: + continue + mb["manufacturer"] = get_inxi(m, "Mobo") + mb["model"] = get_inxi(m, "model") + mb["serialNumber"] = get_inxi(m, "serial") + mb["version"] = get_inxi(m, "v") + mb["biosDate"] = bios_date + mb["biosVersion"] = self.get_bios_version() + mb["firewire"]: self.get_firmware_num() + mb["pcmcia"]: self.get_pcmcia_num() + mb["serial"]: self.get_serial_num() + mb["usb"]: self.get_usb_num() + + self.get_ram_slots(mb) + + self.components.append(mb) + + def get_ram_slots(self, mb): + memory = get_inxi_key(self.inxi, 'Memory') + for m in memory: + slots = get_inxi(m, "slots") + if not slots: + continue + mb["slots"] = slots + mb["ramSlots"] = get_inxi(m, "modules") + mb["ramMaxSize"] = get_inxi(m, "capacity") + + + def get_cpu(self): + cpu = get_inxi_key(self.inxi, 'CPU') + cp = {"type": "Processor"} + vulnerabilities = [] + for c in cpu: + base = get_inxi(c, "model") + if base: + cp["model"] = get_inxi(c, "model") + cp["arch"] = get_inxi(c, "arch") + cp["bits"] = get_inxi(c, "bits") + cp["gen"] = get_inxi(c, "gen") + cp["family"] = get_inxi(c, "family") + cp["date"] = get_inxi(c, "built") + continue + des = get_inxi(c, "L1") + if des: + cp["L1"] = des + cp["L2"] = get_inxi(c, "L2") + cp["L3"] = get_inxi(c, "L3") + cp["cpus"] = get_inxi(c, "cpus") + cp["cores"] = get_inxi(c, "cores") + cp["threads"] = get_inxi(c, "threads") + continue + bogo = get_inxi(c, "bogomips") + if bogo: + cp["bogomips"] = bogo + cp["base/boost"] = get_inxi(c, "base/boost") + cp["min/max"] = get_inxi(c, "min/max") + cp["ext-clock"] = get_inxi(c, "ext-clock") + cp["volts"] = get_inxi(c, "volts") + continue + ctype = get_inxi(c, "Type") + if ctype: + v = {"Type": ctype} + status = get_inxi(c, "status") + if status: + v["status"] = status + mitigation = get_inxi(c, "mitigation") + if mitigation: + v["mitigation"] = mitigation + vulnerabilities.append(v) + + self.components.append(cp) + + + def get_ram(self): + memory = get_inxi_key(self.inxi, 'Memory') + mem = {"type": "RamModule"} + + for m in memory: + base = get_inxi(m, "System RAM") + if base: + mem["size"] = get_inxi(m, "total") + slot = get_inxi(m, "manufacturer") + if slot: + mem["manufacturer"] = slot + mem["model"] = get_inxi(m, "part-no") + mem["serialNumber"] = get_inxi(m, "serial") + mem["speed"] = get_inxi(m, "speed") + mem["bits"] = get_inxi(m, "data") + mem["interface"] = get_inxi(m, "type") + module = get_inxi(m, "modules") + if module: + mem["modules"] = module + + self.components.append(mem) def get_graphic(self): - displays = [] - get_lshw_child(self.lshw, displays, 'display') - - for c in displays: - if not c['configuration'].get('driver', None): + graphics = get_inxi_key(self.inxi, 'Graphics') + + for c in graphics: + if not get_inxi(c, "Device") or not get_inxi(c, "vendor"): continue self.components.append( { - "actions": [], "type": "GraphicCard", "memory": self.get_memory_video(c), - "manufacturer": c.get("vendor", self.default), - "model": c.get("product", self.default), - "serialNumber": c.get("serial", self.default), + "manufacturer": get_inxi(c, "vendor"), + "model": get_inxi(c, "Device"), + "arch": get_inxi(c, "arch"), + "serialNumber": get_inxi(c, "serial"), + "integrated": True if get_inxi(c, "port") else False + } + ) + + def get_battery(self): + bats = get_inxi_key(self.inxi, 'Battery') + for b in bats: + self.components.append( + { + "type": "Battery", + "model": get_inxi(b, "model"), + "serialNumber": get_inxi(b, "serial"), + "condition": get_inxi(b, "condition"), + "cycles": get_inxi(b, "cycles"), + "volts": get_inxi(b, "volts") } ) def get_memory_video(self, c): - # get info of lspci - # pci_id = c['businfo'].split('@')[1] - # lspci.get(pci_id) | grep size - # lspci -v -s 00:02.0 - return None + memory = get_inxi_key(self.inxi, 'Memory') + + for m in memory: + igpu = get_inxi(m, "igpu") + agpu = get_inxi(m, "agpu") + ngpu = get_inxi(m, "ngpu") + gpu = get_inxi(m, "gpu") + if igpu or agpu or gpu or ngpu: + return igpu or agpu or gpu or ngpu + + return self.default def get_data_storage(self): - for sm in self.smart: - if sm.get('smartctl', {}).get('exit_status') == 1: + hdds= get_inxi_key(self.inxi, 'Drives') + for d in hdds: + usb = get_inxi(d, "type") + if usb == "USB": continue - model = sm.get('model_name') - manufacturer = None - hours = sm.get("power_on_time", {}).get("hours", 0) - if model and len(model.split(" ")) > 1: - mm = model.split(" ") - model = mm[-1] - manufacturer = " ".join(mm[:-1]) - self.components.append( - { - "actions": self.sanitize(sm), - "type": self.get_data_storage_type(sm), - "model": model, - "manufacturer": manufacturer, - "serialNumber": sm.get('serial_number'), - "size": self.get_data_storage_size(sm), - "variant": sm.get("firmware_version"), - "interface": self.get_data_storage_interface(sm), - "hours": hours, + serial = get_inxi(d, "serial") + if serial: + hd = { + "type": "Storage", + "manufacturer": get_inxi(d, "vendor"), + "model": get_inxi(d, "model"), + "serialNumber": get_inxi(d, "serial"), + "size": get_inxi(d, "size"), + "speed": get_inxi(d, "speed"), + "interface": get_inxi(d, "tech"), + "firmware": get_inxi(d, "fw-rev") } - ) + rpm = get_inxi(d, "rpm") + if rpm: + hd["rpm"] = rpm + + family = get_inxi(d, "family") + if family: + hd["family"] = family + + sata = get_inxi(d, "sata") + if sata: + hd["sata"] = sata + + continue + + + cycles = get_inxi(d, "cycles") + if cycles: + hd['cycles'] = cycles + hd["health"] = get_inxi(d, "health") + hd["time of used"] = get_inxi(d, "on") + hd["read used"] = get_inxi(d, "read-units") + hd["written used"] = get_inxi(d, "written-units") + + # import pdb; pdb.set_trace() + self.components.append(hd) + continue + + hd = {} def sanitize(self, action): return [] - def get_bogomips(self): - if not self.hwinfo: - return self.default - - bogomips = 0 - for row in self.hwinfo: - for cel in row: - if 'BogoMips' in cel: - try: - bogomips += float(cel.split(":")[-1]) - except: - pass - return bogomips - def get_networks(self): - networks = [] - get_lshw_child(self.lshw, networks, 'network') - - for c in networks: - capacity = c.get('capacity') - wireless = bool(c.get('configuration', {}).get('wireless', False)) + nets = get_inxi_key(self.inxi, "Network") + networks = [(nets[i], nets[i + 1]) for i in range(0, len(nets) - 1, 2)] + + for n, iface in networks: + model = get_inxi(n, "Device") + if not model: + continue + + interface = '' + for k in n.keys(): + if "port" in k: + interface = "Integrated" + if "pcie" in k: + interface = "PciExpress" + if get_inxi(n, "type") == "USB": + interface = "USB" + self.components.append( { - "actions": [], "type": "NetworkAdapter", - "model": c.get('product'), - "manufacturer": c.get('vendor'), - "serialNumber": c.get('serial'), - "speed": capacity, - "variant": c.get('version', 1), - "wireless": wireless or False, - "integrated": "PCI:0000:00" in c.get("businfo", ""), + "model": model, + "manufacturer": get_inxi(n, 'vendor'), + "serialNumber": get_inxi(iface, 'mac'), + "speed": get_inxi(n, "speed"), + "interface": interface, } ) def get_sound_card(self): - multimedias = [] - get_lshw_child(self.lshw, multimedias, 'multimedia') - - for c in multimedias: + audio = get_inxi_key(self.inxi, "Audio") + + for c in audio: + model = get_inxi(c, "Device") + if not model: + continue + self.components.append( { - "actions": [], "type": "SoundCard", - "model": c.get('product'), - "manufacturer": c.get('vendor'), - "serialNumber": c.get('serial'), + "model": model, + "manufacturer": get_inxi(c, 'vendor'), + "serialNumber": get_inxi(c, 'serial'), } ) - def get_display(self): # noqa: C901 - TECHS = 'CRT', 'TFT', 'LED', 'PDP', 'LCD', 'OLED', 'AMOLED' - - for c in self.monitors: - resolution_width, resolution_height = (None,) * 2 - refresh, serial, model, manufacturer, size = (None,) * 5 - year, week, production_date = (None,) * 3 - - for x in c: - if "Vendor: " in x: - manufacturer = x.split('Vendor: ')[-1].strip() - if "Model: " in x: - model = x.split('Model: ')[-1].strip() - if "Serial ID: " in x: - serial = x.split('Serial ID: ')[-1].strip() - if " Resolution: " in x: - rs = x.split(' Resolution: ')[-1].strip() - if 'x' in rs: - resolution_width, resolution_height = [ - int(r) for r in rs.split('x') - ] - if "Frequencies: " in x: - try: - refresh = int(float(x.split(',')[-1].strip()[:-3])) - except Exception: - pass - if 'Year of Manufacture' in x: - year = x.split(': ')[1] - - if 'Week of Manufacture' in x: - week = x.split(': ')[1] - - if "Size: " in x: - size = self.get_size_monitor(x) - technology = next((t for t in TECHS if t in c[0]), None) - - if year and week: - d = '{} {} 0'.format(year, week) - production_date = datetime.strptime(d, '%Y %W %w').isoformat() + def get_display(self): + graphics = get_inxi_key(self.inxi, "Graphics") + for c in graphics: + if not get_inxi(c, "Monitor"): + continue self.components.append( { - "actions": [], "type": "Display", - "model": model, - "manufacturer": manufacturer, - "serialNumber": serial, - 'size': size, - 'resolutionWidth': resolution_width, - 'resolutionHeight': resolution_height, - "productionDate": production_date, - 'technology': technology, - 'refreshRate': refresh, + "model": get_inxi(c, "model"), + "manufacturer": get_inxi(c, "vendor"), + "serialNumber": get_inxi(c, "serial"), + 'size': get_inxi(c, "size"), + 'diagonal': get_inxi(c, "diag"), + 'resolution': get_inxi(c, "res"), + "date": get_inxi(c, "built"), + 'ratio': get_inxi(c, "ratio"), } ) - def get_hwinfo_monitors(self): - for c in self.hwinfo: - monitor = None - external = None - for x in c: - if 'Hardware Class: monitor' in x: - monitor = c - if 'Driver Info' in x: - external = c - - if monitor and not external: - self.monitors.append(c) - - def get_size_monitor(self, x): - i = 1 / 25.4 - t = x.split('Size: ')[-1].strip() - tt = t.split('mm') - if not tt: - return 0 - sizes = tt[0].strip() - if 'x' not in sizes: - return 0 - w, h = [int(x) for x in sizes.split('x')] - return "{:.2f}".format(np.sqrt(w**2 + h**2) * i) - - def get_cpu_address(self, cpu): - default = 64 - for ch in self.lshw.get('children', []): - for c in ch.get('children', []): - if c['class'] == 'processor': - return c.get('width', default) - return default - def get_usb_num(self): return len( [ @@ -364,133 +378,13 @@ class ParseSnapshot: ] ) - def get_bios_date(self): - return self.dmi.get("BIOS")[0].get("Release Date", self.default) - - def get_firmware(self): - return self.dmi.get("BIOS")[0].get("Firmware Revision", '1') - - def get_max_ram_size(self): - size = 0 - for slot in self.dmi.get("Physical Memory Array"): - capacity = slot.get("Maximum Capacity", '0').split(" ")[0] - size += int(capacity) - - return size - - def get_ram_slots(self): - slots = 0 - for x in self.dmi.get("Physical Memory Array"): - slots += int(x.get("Number Of Devices", 0)) - return slots - - def get_ram_size(self, ram): - memory = ram.get("Size", "0") - return memory - - def get_ram_speed(self, ram): - size = ram.get("Speed", "0") - return size - - def get_cpu_speed(self, cpu): - speed = cpu.get('Max Speed', "0") - return speed - - def get_sku(self): - return self.dmi.get("System")[0].get("SKU Number", self.default).strip() - - def get_version(self): - return self.dmi.get("System")[0].get("Version", self.default).strip() - - def get_uuid(self): - return self.dmi.get("System")[0].get("UUID", '').strip() - - def get_family(self): - return self.dmi.get("System")[0].get("Family", '') - - def get_chassis(self): - return self.dmi.get("Chassis")[0].get("Type", '_virtual') - - def get_type(self): - chassis_type = self.get_chassis() - return self.translation_to_devicehub(chassis_type) - - def translation_to_devicehub(self, original_type): - lower_type = original_type.lower() - CHASSIS_TYPE = { - 'Desktop': [ - 'desktop', - 'low-profile', - 'tower', - 'docking', - 'all-in-one', - 'pizzabox', - 'mini-tower', - 'space-saving', - 'lunchbox', - 'mini', - 'stick', - ], - 'Laptop': [ - 'portable', - 'laptop', - 'convertible', - 'tablet', - 'detachable', - 'notebook', - 'handheld', - 'sub-notebook', - ], - 'Server': ['server'], - 'Computer': ['_virtual'], - } - for k, v in CHASSIS_TYPE.items(): - if lower_type in v: - return k - return self.default - - def get_chassis_dh(self): - chassis = self.get_chassis() - lower_type = chassis.lower() - for k, v in CHASSIS_DH.items(): - if lower_type in v: - return k - return self.default - - def get_data_storage_type(self, x): - # TODO @cayop add more SSDS types - SSDS = ["nvme"] - SSD = 'SolidStateDrive' - HDD = 'HardDrive' - type_dev = x.get('device', {}).get('type') - trim = x.get('trim', {}).get("supported") in [True, "true"] - return SSD if type_dev in SSDS or trim else HDD - - def get_data_storage_interface(self, x): - interface = x.get('device', {}).get('protocol', 'ATA') - if interface.upper() in DATASTORAGEINTERFACE: - return interface.upper() - - txt = "Sid: {}, interface {} is not in DataStorageInterface Enum".format( - self.sid, interface - ) - self.errors("{}".format(err)) - - def get_data_storage_size(self, x): - return x.get('user_capacity', {}).get('bytes') - - def parse_hwinfo(self): - hw_blocks = self.hwinfo_raw.split("\n\n") - return [x.split("\n") for x in hw_blocks] + def get_bios_version(self): + return self.dmi.get("BIOS")[0].get("BIOS Revision", '1') def loads(self, x): if isinstance(x, str): try: - try: - hw = json.loads(x) - except json.decoder.JSONDecodeError: - hw = json.loads(repair_json(x)) - return hw + return json.loads(x) except Exception as ss: logger.warning("%s", ss) return {} @@ -502,4 +396,3 @@ class ParseSnapshot: logger.error(txt) self._errors.append("%s", txt) - -- 2.30.2 From f3c9297ffdf754d273012e236f63ae689208edb4 Mon Sep 17 00:00:00 2001 From: sergiogimenez Date: Tue, 19 Nov 2024 08:27:44 +0100 Subject: [PATCH 03/86] [WIP] Add button for exporting to PDF --- device/templates/details.html | 6 ++++++ device/urls.py | 2 ++ device/views.py | 3 +++ 3 files changed, 11 insertions(+) diff --git a/device/templates/details.html b/device/templates/details.html index 6fdefb9..9c03aa4 100644 --- a/device/templates/details.html +++ b/device/templates/details.html @@ -234,6 +234,12 @@
+ {% comment %}
Environmental Impact Assessment
{% endcomment %}
diff --git a/device/urls.py b/device/urls.py index a56aa29..78922c1 100644 --- a/device/urls.py +++ b/device/urls.py @@ -10,5 +10,7 @@ urlpatterns = [ path("/annotation/add", views.AddAnnotationView.as_view(), name="add_annotation"), path("/document/add", views.AddDocumentView.as_view(), name="add_document"), path("/public/", views.PublicDeviceWebView.as_view(), name="device_web"), + path('/export-environmental-impact-pdf/', + views.ExportEnvironmentalImpactPDF.as_view(), name='export_environmental_impact_pdf'), ] diff --git a/device/views.py b/device/views.py index 1deb795..bdd4f9e 100644 --- a/device/views.py +++ b/device/views.py @@ -169,6 +169,9 @@ class PublicDeviceWebView(TemplateView): return JsonResponse(device_data) +class ExportEnvironmentalImpactPDF(DashboardView, TemplateView): + pass + class AddAnnotationView(DashboardView, CreateView): template_name = "new_annotation.html" title = _("New annotation") -- 2.30.2 From 9553ed6a4c83786978ecb92ce9b6dd0db9798338 Mon Sep 17 00:00:00 2001 From: Cayo Puigdefabregas Date: Wed, 20 Nov 2024 18:35:27 +0100 Subject: [PATCH 04/86] fix component empty --- evidence/parse_details.py | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/evidence/parse_details.py b/evidence/parse_details.py index 55ecdd7..35adfc5 100644 --- a/evidence/parse_details.py +++ b/evidence/parse_details.py @@ -54,7 +54,7 @@ class ParseSnapshot: } def set_computer(self): - machine = get_inxi_key(self.inxi, 'Machine') + machine = get_inxi_key(self.inxi, 'Machine') or [] for m in machine: system = get_inxi(m, "System") if system: @@ -80,7 +80,7 @@ class ParseSnapshot: self.get_battery() def get_mother_board(self): - machine = get_inxi_key(self.inxi, 'Machine') + machine = get_inxi_key(self.inxi, 'Machine') or [] mb = {"type": "Motherboard",} for m in machine: bios_date = get_inxi(m, "date") @@ -102,7 +102,7 @@ class ParseSnapshot: self.components.append(mb) def get_ram_slots(self, mb): - memory = get_inxi_key(self.inxi, 'Memory') + memory = get_inxi_key(self.inxi, 'Memory') or [] for m in memory: slots = get_inxi(m, "slots") if not slots: @@ -113,7 +113,7 @@ class ParseSnapshot: def get_cpu(self): - cpu = get_inxi_key(self.inxi, 'CPU') + cpu = get_inxi_key(self.inxi, 'CPU') or [] cp = {"type": "Processor"} vulnerabilities = [] for c in cpu: @@ -158,7 +158,7 @@ class ParseSnapshot: def get_ram(self): - memory = get_inxi_key(self.inxi, 'Memory') + memory = get_inxi_key(self.inxi, 'Memory') or [] mem = {"type": "RamModule"} for m in memory: @@ -180,7 +180,7 @@ class ParseSnapshot: self.components.append(mem) def get_graphic(self): - graphics = get_inxi_key(self.inxi, 'Graphics') + graphics = get_inxi_key(self.inxi, 'Graphics') or [] for c in graphics: if not get_inxi(c, "Device") or not get_inxi(c, "vendor"): @@ -199,7 +199,7 @@ class ParseSnapshot: ) def get_battery(self): - bats = get_inxi_key(self.inxi, 'Battery') + bats = get_inxi_key(self.inxi, 'Battery') or [] for b in bats: self.components.append( { @@ -213,7 +213,7 @@ class ParseSnapshot: ) def get_memory_video(self, c): - memory = get_inxi_key(self.inxi, 'Memory') + memory = get_inxi_key(self.inxi, 'Memory') or [] for m in memory: igpu = get_inxi(m, "igpu") @@ -226,7 +226,7 @@ class ParseSnapshot: return self.default def get_data_storage(self): - hdds= get_inxi_key(self.inxi, 'Drives') + hdds= get_inxi_key(self.inxi, 'Drives') or [] for d in hdds: usb = get_inxi(d, "type") if usb == "USB": @@ -277,7 +277,7 @@ class ParseSnapshot: return [] def get_networks(self): - nets = get_inxi_key(self.inxi, "Network") + nets = get_inxi_key(self.inxi, "Network") or [] networks = [(nets[i], nets[i + 1]) for i in range(0, len(nets) - 1, 2)] for n, iface in networks: @@ -306,7 +306,7 @@ class ParseSnapshot: ) def get_sound_card(self): - audio = get_inxi_key(self.inxi, "Audio") + audio = get_inxi_key(self.inxi, "Audio") or [] for c in audio: model = get_inxi(c, "Device") @@ -323,7 +323,7 @@ class ParseSnapshot: ) def get_display(self): - graphics = get_inxi_key(self.inxi, "Graphics") + graphics = get_inxi_key(self.inxi, "Graphics") or [] for c in graphics: if not get_inxi(c, "Monitor"): continue -- 2.30.2 From bed40d3ee039418eb5dea0e16878464d270669f1 Mon Sep 17 00:00:00 2001 From: Cayo Puigdefabregas Date: Wed, 20 Nov 2024 18:41:59 +0100 Subject: [PATCH 05/86] fix get_hid --- evidence/parse.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/evidence/parse.py b/evidence/parse.py index d0e8414..3d95a84 100644 --- a/evidence/parse.py +++ b/evidence/parse.py @@ -83,7 +83,7 @@ class Build: def get_hid(self, snapshot): try: - self.inxi = json.loads(self.json["inxi"]) + self.inxi = json.loads(self.json["data"]["inxi"]) except Exception: logger.error("No inxi in snapshot %s", self.uuid) return "" -- 2.30.2 From 7fd42db3e469a3f35872f5d417e9fa13f57172e1 Mon Sep 17 00:00:00 2001 From: Cayo Puigdefabregas Date: Tue, 3 Dec 2024 16:37:56 +0100 Subject: [PATCH 06/86] fix parsing --- api/views.py | 16 ++++++++++------ evidence/parse.py | 17 ++++++++++++++--- utils/save_snapshots.py | 5 ++++- 3 files changed, 28 insertions(+), 10 deletions(-) diff --git a/api/views.py b/api/views.py index 0de3e5a..87177fb 100644 --- a/api/views.py +++ b/api/views.py @@ -85,17 +85,21 @@ class NewSnapshotView(ApiMixing): # except Exception: # return JsonResponse({'error': 'Invalid Snapshot'}, status=400) - if not data.get("uuid"): + ev_uuid = data.get("uuid") + if data.get("credentialSubject"): + ev_uuid = data["credentialSubject"].get("uuid") + + if not ev_uuid: txt = "error: the snapshot not have uuid" logger.error("%s", txt) return JsonResponse({'status': txt}, status=500) exist_annotation = Annotation.objects.filter( - uuid=data['uuid'] + uuid=ev_uuid ).first() if exist_annotation: - txt = "error: the snapshot {} exist".format(data['uuid']) + txt = "error: the snapshot {} exist".format(ev_uuid) logger.warning("%s", txt) return JsonResponse({'status': txt}, status=500) @@ -105,14 +109,14 @@ class NewSnapshotView(ApiMixing): except Exception as err: if settings.DEBUG: logger.exception("%s", err) - snapshot_id = data.get("uuid", "") + snapshot_id = ev_uuid txt = "It is not possible to parse snapshot: %s." logger.error(txt, snapshot_id) text = "fail: It is not possible to parse snapshot" return JsonResponse({'status': text}, status=500) annotation = Annotation.objects.filter( - uuid=data['uuid'], + uuid=ev_uuid, type=Annotation.Type.SYSTEM, # TODO this is hardcoded, it should select the user preferred algorithm key="hidalgo1", @@ -121,7 +125,7 @@ class NewSnapshotView(ApiMixing): if not annotation: - logger.error("Error: No annotation for uuid: %s", data["uuid"]) + logger.error("Error: No annotation for uuid: %s", ev_uuid) return JsonResponse({'status': 'fail'}, status=500) url_args = reverse_lazy("device:details", args=(annotation.value,)) diff --git a/evidence/parse.py b/evidence/parse.py index 3d95a84..9a8ec2a 100644 --- a/evidence/parse.py +++ b/evidence/parse.py @@ -23,7 +23,18 @@ def get_mac(inxi): class Build: def __init__(self, evidence_json, user, check=False): - self.json = evidence_json + self.evidence = evidence_json.copy() + self.json = evidence_json.copy() + if evidence_json.get("credentialSubject"): + self.json.update(evidence_json["credentialSubject"]) + if evidence_json.get("evidence"): + self.json["data"] = {} + for ev in evidence_json["evidence"]: + k = ev.get("operation") + if not k: + continue + self.json["data"][k] = ev.get("output") + self.uuid = self.json['uuid'] self.user = user self.hid = None @@ -36,7 +47,7 @@ class Build: self.create_annotations() def index(self): - snap = json.dumps(self.json) + snap = json.dumps(self.evidence) index(self.user.institution, self.uuid, snap) def generate_chids(self): @@ -87,7 +98,7 @@ class Build: except Exception: logger.error("No inxi in snapshot %s", self.uuid) return "" - + machine = get_inxi_key(self.inxi, 'Machine') for m in machine: system = get_inxi(m, "System") diff --git a/utils/save_snapshots.py b/utils/save_snapshots.py index 8c02f06..efd1fe9 100644 --- a/utils/save_snapshots.py +++ b/utils/save_snapshots.py @@ -19,7 +19,10 @@ def move_json(path_name, user, place="snapshots"): def save_in_disk(data, user, place="snapshots"): - uuid = data.get('uuid', '') + uuid = data.get("uuid") + if data.get("credentialSubject"): + uuid = data["credentialSubject"].get("uuid") + now = datetime.now() year = now.year month = now.month -- 2.30.2 From 7de6d69a6c1bf9444c38b0688df4e20472784ff2 Mon Sep 17 00:00:00 2001 From: Cayo Puigdefabregas Date: Thu, 5 Dec 2024 19:23:53 +0100 Subject: [PATCH 07/86] fix parsing with credentials --- dashboard/views.py | 7 ++++-- evidence/models.py | 53 +++++++++++++++++++++++++-------------- evidence/parse.py | 5 +++- evidence/parse_details.py | 25 ++++++++++++------ 4 files changed, 60 insertions(+), 30 deletions(-) diff --git a/dashboard/views.py b/dashboard/views.py index 8d91732..2ec12a0 100644 --- a/dashboard/views.py +++ b/dashboard/views.py @@ -84,8 +84,11 @@ class SearchView(InventaryMixin): return devices, count def get_annotations(self, xp): - snap = xp.document.get_data() - uuid = json.loads(snap).get('uuid') + snap = json.loads(xp.document.get_data()) + if snap.get("credentialSubject"): + uuid = snap["credentialSubject"]["uuid"] + else: + uuid = snap["uuid"] return Device.get_annotation_from_uuid(uuid, self.request.user.institution) def search_hids(self, query, offset, limit): diff --git a/evidence/models.py b/evidence/models.py index 242d885..286e4d6 100644 --- a/evidence/models.py +++ b/evidence/models.py @@ -71,25 +71,37 @@ class Evidence: for xa in matches: self.doc = json.loads(xa.document.get_data()) - if not self.is_legacy(): - dmidecode_raw = self.doc["data"]["dmidecode"] - inxi_raw = self.doc["data"]["inxi"] - self.dmi = DMIParse(dmidecode_raw) - try: - self.inxi = json.loads(inxi_raw) - machine = get_inxi_key(self.inxi, 'Machine') - for m in machine: - system = get_inxi(m, "System") - if system: - self.device_manufacturer = system - self.device_model = get_inxi(m, "product") - self.device_serial_number = get_inxi(m, "serial") - self.device_chassis = get_inxi(m, "Type") - self.device_version = get_inxi(m, "v") + if self.is_legacy(): + return + if self.doc.get("credentialSubject"): + for ev in self.doc["evidence"]: + if "dmidecode" == ev.get("operation"): + dmidecode_raw = ev["output"] + if "inxi" == ev.get("operation"): + self.inxi = ev["output"] + else: + dmidecode_raw = self.doc["data"]["dmidecode"] + try: + self.inxi = json.loads(self.doc["data"]["inxi"]) except Exception: return + self.dmi = DMIParse(dmidecode_raw) + try: + machine = get_inxi_key(self.inxi, 'Machine') + for m in machine: + system = get_inxi(m, "System") + if system: + self.device_manufacturer = system + self.device_model = get_inxi(m, "product") + self.device_serial_number = get_inxi(m, "serial") + self.device_chassis = get_inxi(m, "Type") + self.device_version = get_inxi(m, "v") + + except Exception: + return + def get_time(self): if not self.doc: self.get_doc() @@ -116,7 +128,7 @@ class Evidence: if self.inxi: return self.device_manufacturer - + return self.dmi.manufacturer().strip() def get_model(self): @@ -131,13 +143,13 @@ class Evidence: if self.inxi: return self.device_model - + return self.dmi.model().strip() def get_chassis(self): if self.is_legacy(): return self.doc['device']['model'] - + if self.inxi: return self.device_chassis @@ -152,7 +164,7 @@ class Evidence: def get_serial_number(self): if self.is_legacy(): return self.doc['device']['serialNumber'] - + if self.inxi: return self.device_serial_number @@ -178,6 +190,9 @@ class Evidence: self.components = snapshot['components'] def is_legacy(self): + if self.doc.get("credentialSubject"): + return False + return self.doc.get("software") != "workbench-script" def is_web_snapshot(self): diff --git a/evidence/parse.py b/evidence/parse.py index 9a8ec2a..304d1d3 100644 --- a/evidence/parse.py +++ b/evidence/parse.py @@ -25,6 +25,7 @@ class Build: def __init__(self, evidence_json, user, check=False): self.evidence = evidence_json.copy() self.json = evidence_json.copy() + if evidence_json.get("credentialSubject"): self.json.update(evidence_json["credentialSubject"]) if evidence_json.get("evidence"): @@ -94,7 +95,9 @@ class Build: def get_hid(self, snapshot): try: - self.inxi = json.loads(self.json["data"]["inxi"]) + self.inxi = self.json["data"]["inxi"] + if isinstance(self.inxi, str): + self.inxi = json.loads(self.inxi) except Exception: logger.error("No inxi in snapshot %s", self.uuid) return "" diff --git a/evidence/parse_details.py b/evidence/parse_details.py index 35adfc5..7ce0a5b 100644 --- a/evidence/parse_details.py +++ b/evidence/parse_details.py @@ -30,9 +30,20 @@ def get_inxi(n, name): class ParseSnapshot: def __init__(self, snapshot, default="n/a"): self.default = default - self.dmidecode_raw = snapshot["data"].get("dmidecode", "{}") - self.smart_raw = snapshot["data"].get("disks", []) - self.inxi_raw = snapshot["data"].get("inxi", "") or "" + self.dmidecode_raw = snapshot.get("data", {}).get("dmidecode", "{}") + self.smart_raw = snapshot.get("data", {}).get("smartctl", []) + self.inxi_raw = snapshot.get("data", {}).get("inxi", "") or "" + for ev in snapshot.get("evidence", []): + if "dmidecode" == ev.get("operation"): + self.dmidecode_raw = ev["output"] + if "inxi" == ev.get("operation"): + self.inxi_raw = ev["output"] + if "smartctl" == ev.get("operation"): + self.smart_raw = ev["output"] + data = snapshot + if snapshot.get("credentialSubject"): + data = snapshot["credentialSubject"] + self.device = {"actions": []} self.components = [] @@ -45,11 +56,10 @@ class ParseSnapshot: self.snapshot_json = { "type": "Snapshot", "device": self.device, - "software": snapshot["software"], + "software": data["software"], "components": self.components, - "uuid": snapshot['uuid'], - "version": snapshot['version'], - "endTime": snapshot["timestamp"], + "uuid": data['uuid'], + "endTime": data["timestamp"], "elapsed": 1, } @@ -267,7 +277,6 @@ class ParseSnapshot: hd["read used"] = get_inxi(d, "read-units") hd["written used"] = get_inxi(d, "written-units") - # import pdb; pdb.set_trace() self.components.append(hd) continue -- 2.30.2 From 1dad22c3d35ab1612029c23e2ca22a8dc79e3707 Mon Sep 17 00:00:00 2001 From: Cayo Puigdefabregas Date: Fri, 15 Nov 2024 18:56:11 +0100 Subject: [PATCH 08/86] first base for dpp --- dhub/settings.py | 1 + dpp/__init__.py | 0 dpp/admin.py | 3 ++ dpp/api_dlt.py | 96 ++++++++++++++++++++++++++++++++++ dpp/apps.py | 6 +++ dpp/migrations/0001_initial.py | 90 +++++++++++++++++++++++++++++++ dpp/migrations/__init__.py | 0 dpp/models.py | 30 +++++++++++ dpp/tests.py | 3 ++ dpp/views.py | 3 ++ 10 files changed, 232 insertions(+) create mode 100644 dpp/__init__.py create mode 100644 dpp/admin.py create mode 100644 dpp/api_dlt.py create mode 100644 dpp/apps.py create mode 100644 dpp/migrations/0001_initial.py create mode 100644 dpp/migrations/__init__.py create mode 100644 dpp/models.py create mode 100644 dpp/tests.py create mode 100644 dpp/views.py diff --git a/dhub/settings.py b/dhub/settings.py index 0dc3d84..4b5c366 100644 --- a/dhub/settings.py +++ b/dhub/settings.py @@ -89,6 +89,7 @@ INSTALLED_APPS = [ "dashboard", "admin", "api", + "dpp", ] diff --git a/dpp/__init__.py b/dpp/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/dpp/admin.py b/dpp/admin.py new file mode 100644 index 0000000..8c38f3f --- /dev/null +++ b/dpp/admin.py @@ -0,0 +1,3 @@ +from django.contrib import admin + +# Register your models here. diff --git a/dpp/api_dlt.py b/dpp/api_dlt.py new file mode 100644 index 0000000..6a1317a --- /dev/null +++ b/dpp/api_dlt.py @@ -0,0 +1,96 @@ +from ereuseapi.methods import API + + +def connect_api(): + + if not session.get('token_dlt'): + return + + token_dlt = session.get('token_dlt') + api_dlt = app.config.get('API_DLT') + + return API(api_dlt, token_dlt, "ethereum") + +def register_dlt(): + api = self.connect_api() + if not api: + return + + snapshot = [x for x in self.actions if x.t == 'Snapshot'] + if not snapshot: + return + snapshot = snapshot[0] + from ereuse_devicehub.modules.dpp.models import ALGORITHM + from ereuse_devicehub.resources.enums import StatusCode + cny_a = 1 + while cny_a: + api = self.connect_api() + result = api.register_device( + self.chid, + ALGORITHM, + snapshot.phid_dpp, + app.config.get('ID_FEDERATED') + ) + try: + assert result['Status'] == StatusCode.Success.value + assert result['Data']['data']['timestamp'] + cny_a = 0 + except Exception: + if result.get("Data") != "Device already exists": + logger.error("API return: %s", result) + time.sleep(10) + else: + cny_a = 0 + + + register_proof(result) + + if app.config.get('ID_FEDERATED'): + cny = 1 + while cny: + try: + api.add_service( + self.chid, + 'DeviceHub', + app.config.get('ID_FEDERATED'), + 'Inventory service', + 'Inv', + ) + cny = 0 + except Exception: + time.sleep(10) + +def register_proof(self, result): + from ereuse_devicehub.modules.dpp.models import PROOF_ENUM, Proof + from ereuse_devicehub.resources.enums import StatusCode + + if result['Status'] == StatusCode.Success.value: + timestamp = result.get('Data', {}).get('data', {}).get('timestamp') + + if not timestamp: + return + + snapshot = [x for x in self.actions if x.t == 'Snapshot'] + if not snapshot: + return + snapshot = snapshot[0] + + d = { + "type": PROOF_ENUM['Register'], + "device": self, + "action": snapshot, + "timestamp": timestamp, + "issuer_id": g.user.id, + "documentId": snapshot.id, + "documentSignature": snapshot.phid_dpp, + "normalizeDoc": snapshot.json_hw, + } + proof = Proof(**d) + db.session.add(proof) + + if not hasattr(self, 'components'): + return + + for c in self.components: + if isinstance(c, DataStorage): + c.register_dlt() diff --git a/dpp/apps.py b/dpp/apps.py new file mode 100644 index 0000000..758fbb0 --- /dev/null +++ b/dpp/apps.py @@ -0,0 +1,6 @@ +from django.apps import AppConfig + + +class DppConfig(AppConfig): + default_auto_field = "django.db.models.BigAutoField" + name = "dpp" diff --git a/dpp/migrations/0001_initial.py b/dpp/migrations/0001_initial.py new file mode 100644 index 0000000..0f10686 --- /dev/null +++ b/dpp/migrations/0001_initial.py @@ -0,0 +1,90 @@ +# Generated by Django 5.0.6 on 2024-11-15 18:55 + +import django.db.models.deletion +from django.conf import settings +from django.db import migrations, models + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ("user", "0001_initial"), + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ] + + operations = [ + migrations.CreateModel( + name="Dpp", + fields=[ + ( + "id", + models.BigAutoField( + auto_created=True, + primary_key=True, + serialize=False, + verbose_name="ID", + ), + ), + ("timestamp", models.IntegerField()), + ("key", models.CharField(max_length=256)), + ("uuid", models.UUIDField()), + ("signature", models.CharField(max_length=256)), + ("normalizeDoc", models.TextField()), + ("type", models.CharField(max_length=256)), + ( + "owner", + models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, + to="user.institution", + ), + ), + ( + "user", + models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.SET_NULL, + to=settings.AUTH_USER_MODEL, + ), + ), + ], + ), + migrations.CreateModel( + name="Proof", + fields=[ + ( + "id", + models.BigAutoField( + auto_created=True, + primary_key=True, + serialize=False, + verbose_name="ID", + ), + ), + ("timestamp", models.IntegerField()), + ("uuid", models.UUIDField()), + ("signature", models.CharField(max_length=256)), + ("normalizeDoc", models.TextField()), + ("type", models.CharField(max_length=256)), + ("action", models.CharField(max_length=256)), + ( + "owner", + models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, + to="user.institution", + ), + ), + ( + "user", + models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.SET_NULL, + to=settings.AUTH_USER_MODEL, + ), + ), + ], + ), + ] diff --git a/dpp/migrations/__init__.py b/dpp/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/dpp/models.py b/dpp/models.py new file mode 100644 index 0000000..d46f7de --- /dev/null +++ b/dpp/models.py @@ -0,0 +1,30 @@ +from django.db import models +from user.models import User, Institution +from utils.constants import STR_EXTEND_SIZE +# Create your models here. + + +class Proof(models.Model): + timestamp = models.IntegerField() + uuid = models.UUIDField() + signature = models.CharField(max_length=STR_EXTEND_SIZE) + normalizeDoc = models.TextField() + type = models.CharField(max_length=STR_EXTEND_SIZE) + action = models.CharField(max_length=STR_EXTEND_SIZE) + owner = models.ForeignKey(Institution, on_delete=models.CASCADE) + user = models.ForeignKey( + User, on_delete=models.SET_NULL, null=True, blank=True) + + +class Dpp(models.Model): + timestamp = models.IntegerField() + key = models.CharField(max_length=STR_EXTEND_SIZE) + uuid = models.UUIDField() + signature = models.CharField(max_length=STR_EXTEND_SIZE) + normalizeDoc = models.TextField() + type = models.CharField(max_length=STR_EXTEND_SIZE) + owner = models.ForeignKey(Institution, on_delete=models.CASCADE) + user = models.ForeignKey( + User, on_delete=models.SET_NULL, null=True, blank=True) + + diff --git a/dpp/tests.py b/dpp/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/dpp/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/dpp/views.py b/dpp/views.py new file mode 100644 index 0000000..91ea44a --- /dev/null +++ b/dpp/views.py @@ -0,0 +1,3 @@ +from django.shortcuts import render + +# Create your views here. -- 2.30.2 From f7b2687ca205efa73bacf5147cc9d2786f5a64ee Mon Sep 17 00:00:00 2001 From: Cayo Puigdefabregas Date: Mon, 18 Nov 2024 19:37:08 +0100 Subject: [PATCH 09/86] register device and dpp in dlt and dpp api --- device/templates/details.html | 19 ++++ device/views.py | 3 + dhub/urls.py | 1 + dpp/api_dlt.py | 183 +++++++++++++++++++++------------ dpp/migrations/0001_initial.py | 42 +------- dpp/models.py | 19 +--- dpp/urls.py | 8 ++ dpp/views.py | 37 ++++++- evidence/models.py | 7 ++ evidence/parse.py | 17 ++- evidence/xapian.py | 12 ++- 11 files changed, 217 insertions(+), 131 deletions(-) create mode 100644 dpp/urls.py diff --git a/device/templates/details.html b/device/templates/details.html index fb362c7..921fd4b 100644 --- a/device/templates/details.html +++ b/device/templates/details.html @@ -29,6 +29,9 @@ + @@ -236,6 +239,22 @@ {% endfor %}
+ +
+
{% trans 'List of dpps' %}
+
+ {% for d in dpps %} +
+
+ {{ d.timestamp }} +
+

+ {{ d.signature }} +

+
+ {% endfor %} +
+
{% endblock %} diff --git a/device/views.py b/device/views.py index 319f8cf..12fb244 100644 --- a/device/views.py +++ b/device/views.py @@ -14,6 +14,7 @@ from django.views.generic.base import TemplateView from dashboard.mixins import DashboardView, Http403 from evidence.models import Annotation from lot.models import LotTag +from dpp.models import Proof from device.models import Device from device.forms import DeviceFormSet @@ -103,10 +104,12 @@ class DetailsView(DashboardView, TemplateView): context = super().get_context_data(**kwargs) self.object.initial() lot_tags = LotTag.objects.filter(owner=self.request.user.institution) + dpps = Proof.objects.filter(uuid_in=self.object.uuids) context.update({ 'object': self.object, 'snapshot': self.object.get_last_evidence(), 'lot_tags': lot_tags, + 'dpps': dpps, }) return context diff --git a/dhub/urls.py b/dhub/urls.py index fba9bd3..c50da55 100644 --- a/dhub/urls.py +++ b/dhub/urls.py @@ -27,4 +27,5 @@ urlpatterns = [ path("user/", include("user.urls")), path("lot/", include("lot.urls")), path('api/', include('api.urls')), + path('dpp/', include('dpp.urls')), ] diff --git a/dpp/api_dlt.py b/dpp/api_dlt.py index 6a1317a..6bf95c0 100644 --- a/dpp/api_dlt.py +++ b/dpp/api_dlt.py @@ -1,38 +1,106 @@ +import time +import logging + +from django.conf import settings from ereuseapi.methods import API +from dpp.models import Proof, Dpp + + +logger = logging.getLogger('django') + + +# """The code of the status response of api dlt.""" +STATUS_CODE = { + "Success": 201, + "Notwork": 400 +} + + +ALGORITHM = "sha3-256" + + +PROOF_TYPE = { + 'Register': 'Register', + 'IssueDPP': 'IssueDPP', + 'proof_of_recycling': 'proof_of_recycling', + 'Erase': 'Erase', + 'EWaste': 'EWaste', +} + def connect_api(): - if not session.get('token_dlt'): + if not settings.get('TOKEN_DLT'): return - token_dlt = session.get('token_dlt') - api_dlt = app.config.get('API_DLT') + token_dlt = settings.get('TOKEN_DLT') + api_dlt = settings.get('API_DLT') return API(api_dlt, token_dlt, "ethereum") -def register_dlt(): - api = self.connect_api() + +def register_dlt(chid, phid, proof_type=None): + api = connect_api() if not api: return - snapshot = [x for x in self.actions if x.t == 'Snapshot'] - if not snapshot: + if proof_type: + return api.generate_proof( + chid, + ALGORITHM, + phid, + proof_type, + settings.get('ID_FEDERATED') + ) + + return api.register_device( + chid, + ALGORITHM, + phid, + settings.get('ID_FEDERATED') + ) + + +def issuer_dpp_dlt(dpp): + phid = dpp.split(":")[0] + api = connect_api() + if not api: return - snapshot = snapshot[0] - from ereuse_devicehub.modules.dpp.models import ALGORITHM - from ereuse_devicehub.resources.enums import StatusCode + + return api.issue_passport( + dpp, + ALGORITHM, + phid, + settings.get('ID_FEDERATED') + ) + + + +def save_proof(signature, ev_uuid, result, proof_type, user): + if result['Status'] == STATUS_CODE.get("Success"): + timestamp = result.get('Data', {}).get('data', {}).get('timestamp') + + if not timestamp: + return + + d = { + "type": proof_type, + "timestamp": timestamp, + "issuer": user.institution.id, + "user": user, + "uuid": ev_uuid, + "signature": signature, + } + Proof.objects.create(**d) + + +def register_device_dlt(chid, phid, ev_uuid, user): cny_a = 1 while cny_a: - api = self.connect_api() - result = api.register_device( - self.chid, - ALGORITHM, - snapshot.phid_dpp, - app.config.get('ID_FEDERATED') - ) + result = register_dlt(chid, phid) try: - assert result['Status'] == StatusCode.Success.value + assert result['Status'] == STATUS_CODE.get("Success") assert result['Data']['data']['timestamp'] cny_a = 0 except Exception: @@ -42,55 +110,42 @@ def register_dlt(): else: cny_a = 0 + save_proof(phid, ev_uuid, result, PROOF_TYPE['Register'], user) - register_proof(result) - if app.config.get('ID_FEDERATED'): - cny = 1 - while cny: - try: - api.add_service( - self.chid, - 'DeviceHub', - app.config.get('ID_FEDERATED'), - 'Inventory service', - 'Inv', - ) - cny = 0 - except Exception: - time.sleep(10) + # TODO is neccesary? + # if settings.get('ID_FEDERATED'): + # cny = 1 + # while cny: + # try: + # api.add_service( + # chid, + # 'DeviceHub', + # settings.get('ID_FEDERATED'), + # 'Inventory service', + # 'Inv', + # ) + # cny = 0 + # except Exception: + # time.sleep(10) -def register_proof(self, result): - from ereuse_devicehub.modules.dpp.models import PROOF_ENUM, Proof - from ereuse_devicehub.resources.enums import StatusCode - if result['Status'] == StatusCode.Success.value: - timestamp = result.get('Data', {}).get('data', {}).get('timestamp') - - if not timestamp: - return - - snapshot = [x for x in self.actions if x.t == 'Snapshot'] - if not snapshot: - return - snapshot = snapshot[0] - - d = { - "type": PROOF_ENUM['Register'], - "device": self, - "action": snapshot, - "timestamp": timestamp, - "issuer_id": g.user.id, - "documentId": snapshot.id, - "documentSignature": snapshot.phid_dpp, - "normalizeDoc": snapshot.json_hw, - } - proof = Proof(**d) - db.session.add(proof) - - if not hasattr(self, 'components'): +def register_passport_dlt(chid, phid, ev_uuid, user): + dpp = "{chid}:{phid}".format(chid=chid, phid=phid) + if Proof.objects.filter(signature=dpp, type=PROOF_TYPE['IssueDPP']).exists(): return - for c in self.components: - if isinstance(c, DataStorage): - c.register_dlt() + cny_a = 1 + while cny_a: + try: + result = issuer_dpp_dlt(dpp) + cny_a = 0 + except Exception as err: + logger.error("ERROR API issue passport return: %s", err) + time.sleep(10) + + if result['Status'] is not STATUS_CODE.get("Success"): + logger.error("ERROR API issue passport return: %s", result) + return + + save_proof(phid, ev_uuid, result, PROOF_TYPE['IssueDPP'], user) diff --git a/dpp/migrations/0001_initial.py b/dpp/migrations/0001_initial.py index 0f10686..71e1b75 100644 --- a/dpp/migrations/0001_initial.py +++ b/dpp/migrations/0001_initial.py @@ -1,4 +1,4 @@ -# Generated by Django 5.0.6 on 2024-11-15 18:55 +# Generated by Django 5.0.6 on 2024-11-18 14:29 import django.db.models.deletion from django.conf import settings @@ -15,42 +15,6 @@ class Migration(migrations.Migration): ] operations = [ - migrations.CreateModel( - name="Dpp", - fields=[ - ( - "id", - models.BigAutoField( - auto_created=True, - primary_key=True, - serialize=False, - verbose_name="ID", - ), - ), - ("timestamp", models.IntegerField()), - ("key", models.CharField(max_length=256)), - ("uuid", models.UUIDField()), - ("signature", models.CharField(max_length=256)), - ("normalizeDoc", models.TextField()), - ("type", models.CharField(max_length=256)), - ( - "owner", - models.ForeignKey( - on_delete=django.db.models.deletion.CASCADE, - to="user.institution", - ), - ), - ( - "user", - models.ForeignKey( - blank=True, - null=True, - on_delete=django.db.models.deletion.SET_NULL, - to=settings.AUTH_USER_MODEL, - ), - ), - ], - ), migrations.CreateModel( name="Proof", fields=[ @@ -66,11 +30,9 @@ class Migration(migrations.Migration): ("timestamp", models.IntegerField()), ("uuid", models.UUIDField()), ("signature", models.CharField(max_length=256)), - ("normalizeDoc", models.TextField()), ("type", models.CharField(max_length=256)), - ("action", models.CharField(max_length=256)), ( - "owner", + "issuer", models.ForeignKey( on_delete=django.db.models.deletion.CASCADE, to="user.institution", diff --git a/dpp/models.py b/dpp/models.py index d46f7de..5502bcf 100644 --- a/dpp/models.py +++ b/dpp/models.py @@ -5,26 +5,11 @@ from utils.constants import STR_EXTEND_SIZE class Proof(models.Model): + ## The signature can be a phid or dpp depending of type of Proof timestamp = models.IntegerField() uuid = models.UUIDField() signature = models.CharField(max_length=STR_EXTEND_SIZE) - normalizeDoc = models.TextField() type = models.CharField(max_length=STR_EXTEND_SIZE) - action = models.CharField(max_length=STR_EXTEND_SIZE) - owner = models.ForeignKey(Institution, on_delete=models.CASCADE) + issuer = models.ForeignKey(Institution, on_delete=models.CASCADE) user = models.ForeignKey( User, on_delete=models.SET_NULL, null=True, blank=True) - - -class Dpp(models.Model): - timestamp = models.IntegerField() - key = models.CharField(max_length=STR_EXTEND_SIZE) - uuid = models.UUIDField() - signature = models.CharField(max_length=STR_EXTEND_SIZE) - normalizeDoc = models.TextField() - type = models.CharField(max_length=STR_EXTEND_SIZE) - owner = models.ForeignKey(Institution, on_delete=models.CASCADE) - user = models.ForeignKey( - User, on_delete=models.SET_NULL, null=True, blank=True) - - diff --git a/dpp/urls.py b/dpp/urls.py new file mode 100644 index 0000000..9ada14e --- /dev/null +++ b/dpp/urls.py @@ -0,0 +1,8 @@ +from django.urls import path +from dpp import views + +app_name = 'dpp' + +urlpatterns = [ + path("/", views.LotDashboardView.as_view(), name="proof"), +] diff --git a/dpp/views.py b/dpp/views.py index 91ea44a..956099d 100644 --- a/dpp/views.py +++ b/dpp/views.py @@ -1,3 +1,36 @@ -from django.shortcuts import render +from django.views.generic.edit import View +from django.http import JsonResponse -# Create your views here. +from evidence.xapian import search +from dpp.models import Proof +from dpp.api_dlt import ALGORITHM + + +class ProofView(View): + + def get(self, request, *args, **kwargs): + timestamp = kwargs.get("proof_id") + proof = Proof.objects.filter(timestamp=timestamp).first() + if not proof: + return JsonResponse({}, status=404) + + ev_uuid = 'uuid:"{}"'.format(proof.uuid) + matches = search(None, ev_uuid, limit=1) + if not matches or matches.size() < 1: + return JsonResponse({}, status=404) + + for x in matches: + snap = x.document.get_data() + + data = { + "algorithm": ALGORITHM, + "document": snap + } + + d = { + '@context': ['https://ereuse.org/proof0.json'], + 'data': data, + } + return JsonResponse(d, status=200) + + return JsonResponse({}, status=404) diff --git a/evidence/models.py b/evidence/models.py index 286e4d6..b410795 100644 --- a/evidence/models.py +++ b/evidence/models.py @@ -1,4 +1,5 @@ import json +import hashlib from dmidecode import DMIParse from django.db import models @@ -59,6 +60,12 @@ class Evidence: if a: self.owner = a.owner + def get_phid(self): + if not self.doc: + self.get_doc() + + return hashlib.sha3_256(json.dumps(self.doc)).hexdigest() + def get_doc(self): self.doc = {} if not self.owner: diff --git a/evidence/parse.py b/evidence/parse.py index 304d1d3..ccee6a2 100644 --- a/evidence/parse.py +++ b/evidence/parse.py @@ -2,11 +2,9 @@ import json import hashlib import logging -from dmidecode import DMIParse - from evidence.models import Annotation from evidence.xapian import index -from utils.constants import CHASSIS_DH +from dpp.api_dlt import register_device_dlt, register_passport_dlt from evidence.parse_details import get_inxi_key, get_inxi logger = logging.getLogger('django') @@ -39,6 +37,8 @@ class Build: self.uuid = self.json['uuid'] self.user = user self.hid = None + self.chid = None + self.phid = self.get_signature(self.json) self.generate_chids() if check: @@ -46,6 +46,7 @@ class Build: self.index() self.create_annotations() + self.register_device_dlt() def index(self): snap = json.dumps(self.evidence) @@ -69,7 +70,8 @@ class Build: hid = f"{manufacturer}{model}{chassis}{serial_number}{sku}" - return hashlib.sha3_256(hid.encode()).hexdigest() + self.chid = hashlib.sha3_256(hid.encode()).hexdigest() + return self.chid def create_annotations(self): annotation = Annotation.objects.filter( @@ -120,3 +122,10 @@ class Build: return f"{manufacturer}{model}{chassis}{serial_number}{sku}" return f"{manufacturer}{model}{chassis}{serial_number}{sku}{mac}" + + def get_signature(self, doc): + return hashlib.sha3_256(json.dumps(doc).encode()).hexdigest() + + def register_device_dlt(self): + register_device_dlt(self.chid, self.phid, self.uuid, self.user) + register_passport_dlt(self.chid, self.phid, self.uuid, self.user) diff --git a/evidence/xapian.py b/evidence/xapian.py index 98da706..2e1cd9f 100644 --- a/evidence/xapian.py +++ b/evidence/xapian.py @@ -22,10 +22,14 @@ def search(institution, qs, offset=0, limit=10): qp.set_stemming_strategy(xapian.QueryParser.STEM_SOME) qp.add_prefix("uuid", "uuid") query = qp.parse_query(qs) - institution_term = "U{}".format(institution.id) - final_query = xapian.Query( - xapian.Query.OP_AND, query, xapian.Query(institution_term) - ) + if institution: + institution_term = "U{}".format(institution.id) + final_query = xapian.Query( + xapian.Query.OP_AND, query, xapian.Query(institution_term) + ) + else: + final_query = xapian.Query(query) + enquire = xapian.Enquire(database) enquire.set_query(final_query) matches = enquire.get_mset(offset, limit) -- 2.30.2 From 271ac83d71e9dff4bae89010c6fef6e927f49cee Mon Sep 17 00:00:00 2001 From: Cayo Puigdefabregas Date: Tue, 19 Nov 2024 18:02:43 +0100 Subject: [PATCH 10/86] . --- device/templates/details.html | 4 ++-- device/views.py | 2 +- dhub/settings.py | 5 +++++ dpp/api_dlt.py | 24 +++++++++++++++++------- dpp/urls.py | 2 +- requirements.txt | 3 +++ 6 files changed, 29 insertions(+), 11 deletions(-) diff --git a/device/templates/details.html b/device/templates/details.html index 921fd4b..86ea5a1 100644 --- a/device/templates/details.html +++ b/device/templates/details.html @@ -30,7 +30,7 @@ {% trans 'Evidences' %}

- {{ d.signature }} + {{ d.signature }}

{% endfor %} diff --git a/device/views.py b/device/views.py index 12fb244..3c7118c 100644 --- a/device/views.py +++ b/device/views.py @@ -104,7 +104,7 @@ class DetailsView(DashboardView, TemplateView): context = super().get_context_data(**kwargs) self.object.initial() lot_tags = LotTag.objects.filter(owner=self.request.user.institution) - dpps = Proof.objects.filter(uuid_in=self.object.uuids) + dpps = Proof.objects.filter(uuid__in=self.object.uuids) context.update({ 'object': self.object, 'snapshot': self.object.get_last_evidence(), diff --git a/dhub/settings.py b/dhub/settings.py index 4b5c366..8c8ec69 100644 --- a/dhub/settings.py +++ b/dhub/settings.py @@ -90,6 +90,7 @@ INSTALLED_APPS = [ "admin", "api", "dpp", + "did", ] @@ -240,3 +241,7 @@ LOGGING = { SNAPSHOT_PATH="/tmp/" DATA_UPLOAD_MAX_NUMBER_FILES = 1000 COMMIT = config('COMMIT', default='') + +# DLT SETTINGS +TOKEN_DLT = config("TOKEN_DLT", default=None) +API_DLT = config("API_DLT", default=None) diff --git a/dpp/api_dlt.py b/dpp/api_dlt.py index 6bf95c0..8d90764 100644 --- a/dpp/api_dlt.py +++ b/dpp/api_dlt.py @@ -4,7 +4,7 @@ import logging from django.conf import settings from ereuseapi.methods import API -from dpp.models import Proof, Dpp +from dpp.models import Proof logger = logging.getLogger('django') @@ -31,11 +31,11 @@ PROOF_TYPE = { def connect_api(): - if not settings.get('TOKEN_DLT'): + if not settings.TOKEN_DLT: return - token_dlt = settings.get('TOKEN_DLT') - api_dlt = settings.get('API_DLT') + token_dlt = settings.TOKEN_DLT + api_dlt = settings.API_DLT return API(api_dlt, token_dlt, "ethereum") @@ -51,14 +51,14 @@ def register_dlt(chid, phid, proof_type=None): ALGORITHM, phid, proof_type, - settings.get('ID_FEDERATED') + settings.ID_FEDERATED ) return api.register_device( chid, ALGORITHM, phid, - settings.get('ID_FEDERATED') + settings.ID_FEDERATED ) @@ -72,7 +72,7 @@ def issuer_dpp_dlt(dpp): dpp, ALGORITHM, phid, - settings.get('ID_FEDERATED') + settings.ID_FEDERATED ) @@ -96,6 +96,11 @@ def save_proof(signature, ev_uuid, result, proof_type, user): def register_device_dlt(chid, phid, ev_uuid, user): + token_dlt = settings.TOKEN_DLT + api_dlt = settings.API_DLT + if not token_dlt or not api_dlt: + return + cny_a = 1 while cny_a: result = register_dlt(chid, phid) @@ -131,6 +136,11 @@ def register_device_dlt(chid, phid, ev_uuid, user): def register_passport_dlt(chid, phid, ev_uuid, user): + token_dlt = settings.TOKEN_DLT + api_dlt = settings.API_DLT + if not token_dlt or not api_dlt: + return + dpp = "{chid}:{phid}".format(chid=chid, phid=phid) if Proof.objects.filter(signature=dpp, type=PROOF_TYPE['IssueDPP']).exists(): return diff --git a/dpp/urls.py b/dpp/urls.py index 9ada14e..772286a 100644 --- a/dpp/urls.py +++ b/dpp/urls.py @@ -4,5 +4,5 @@ from dpp import views app_name = 'dpp' urlpatterns = [ - path("/", views.LotDashboardView.as_view(), name="proof"), + path("/", views.ProofView.as_view(), name="proof"), ] diff --git a/requirements.txt b/requirements.txt index 32b8e86..33a93f7 100644 --- a/requirements.txt +++ b/requirements.txt @@ -11,3 +11,6 @@ xlrd==2.0.1 odfpy==1.4.1 pytz==2024.2 json-repair==0.30.0 +setuptools==75.5.0 +requests==2.32.3 +wheel==0.45.0 -- 2.30.2 From bfdcb335388233ee780f503b8fe7512db5c7fa80 Mon Sep 17 00:00:00 2001 From: pedro Date: Tue, 19 Nov 2024 18:11:48 +0100 Subject: [PATCH 11/86] docker: add dpp python dep ereuseapitest --- docker/devicehub-django.Dockerfile | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docker/devicehub-django.Dockerfile b/docker/devicehub-django.Dockerfile index fadc751..9640d49 100644 --- a/docker/devicehub-django.Dockerfile +++ b/docker/devicehub-django.Dockerfile @@ -27,6 +27,8 @@ RUN python -m pip install --upgrade pip || (rm -rf /usr/local/lib/python3.11/sit COPY ./requirements.txt /opt/devicehub-django RUN pip install -r requirements.txt +# TODO hardcoded, is ignored in requirements.txt +RUN pip install -i https://test.pypi.org/simple/ ereuseapitest==0.0.14 # TODO Is there a better way? # Set PYTHONPATH to include the directory with the xapian module -- 2.30.2 From 0f0317107659a67781cc60714c5125b4a0d0e732 Mon Sep 17 00:00:00 2001 From: Cayo Puigdefabregas Date: Tue, 19 Nov 2024 21:17:48 +0100 Subject: [PATCH 12/86] add commands for setup to dlt --- dhub/settings.py | 1 + dpp/api_dlt.py | 45 ++++++------ dpp/management/commands/dlt_insert_members.py | 35 +++++++++ dpp/management/commands/dlt_register_user.py | 72 +++++++++++++++++++ dpp/management/commands/dlt_rsync_members.py | 47 ++++++++++++ dpp/migrations/0002_memberfederated.py | 25 +++++++ dpp/models.py | 17 +++++ 7 files changed, 221 insertions(+), 21 deletions(-) create mode 100644 dpp/management/commands/dlt_insert_members.py create mode 100644 dpp/management/commands/dlt_register_user.py create mode 100644 dpp/management/commands/dlt_rsync_members.py create mode 100644 dpp/migrations/0002_memberfederated.py diff --git a/dhub/settings.py b/dhub/settings.py index 8c8ec69..6cebe6c 100644 --- a/dhub/settings.py +++ b/dhub/settings.py @@ -245,3 +245,4 @@ COMMIT = config('COMMIT', default='') # DLT SETTINGS TOKEN_DLT = config("TOKEN_DLT", default=None) API_DLT = config("API_DLT", default=None) +API_RESULVER = config("API_RESOLVER", default=None) diff --git a/dpp/api_dlt.py b/dpp/api_dlt.py index 8d90764..6f1546f 100644 --- a/dpp/api_dlt.py +++ b/dpp/api_dlt.py @@ -1,10 +1,11 @@ +import json import time import logging from django.conf import settings from ereuseapi.methods import API -from dpp.models import Proof +from dpp.models import Proof, UserDpp logger = logging.getLogger('django') @@ -29,22 +30,22 @@ PROOF_TYPE = { } -def connect_api(): +def connect_api(user): - if not settings.TOKEN_DLT: + dp = UserDpp.objects.filter(user=user).first() + if not dp: return - - token_dlt = settings.TOKEN_DLT + api_dlt = settings.API_DLT + token_dlt = json.loads(dp).get("token_dlt") + if not api_dlt or not token_dlt: + logger.error("NOT POSSIBLE CONNECT WITH API DLT!!!") + return return API(api_dlt, token_dlt, "ethereum") -def register_dlt(chid, phid, proof_type=None): - api = connect_api() - if not api: - return - +def register_dlt(api, chid, phid, proof_type=None): if proof_type: return api.generate_proof( chid, @@ -62,11 +63,8 @@ def register_dlt(chid, phid, proof_type=None): ) -def issuer_dpp_dlt(dpp): +def issuer_dpp_dlt(api, dpp): phid = dpp.split(":")[0] - api = connect_api() - if not api: - return return api.issue_passport( dpp, @@ -96,14 +94,14 @@ def save_proof(signature, ev_uuid, result, proof_type, user): def register_device_dlt(chid, phid, ev_uuid, user): - token_dlt = settings.TOKEN_DLT - api_dlt = settings.API_DLT - if not token_dlt or not api_dlt: - return - cny_a = 1 while cny_a: - result = register_dlt(chid, phid) + api = connect_api(user) + if not api: + cny_a = 0 + return + + result = register_dlt(api, chid, phid) try: assert result['Status'] == STATUS_CODE.get("Success") assert result['Data']['data']['timestamp'] @@ -148,7 +146,12 @@ def register_passport_dlt(chid, phid, ev_uuid, user): cny_a = 1 while cny_a: try: - result = issuer_dpp_dlt(dpp) + api = connect_api(user) + if not api: + cny_a = 0 + return + + result = issuer_dpp_dlt(api, dpp) cny_a = 0 except Exception as err: logger.error("ERROR API issue passport return: %s", err) diff --git a/dpp/management/commands/dlt_insert_members.py b/dpp/management/commands/dlt_insert_members.py new file mode 100644 index 0000000..db76aca --- /dev/null +++ b/dpp/management/commands/dlt_insert_members.py @@ -0,0 +1,35 @@ +import logging +import requests + +from django.core.management.base import BaseCommand +from django.conf import settings +from user.models import Institution + + +logger = logging.getLogger('django') + + +class Command(BaseCommand): + help = "Insert a new Institution in DLT" + + def add_arguments(self, parser): + parser.add_argument('domain', type=str, help='institution') + + def handle(self, *args, **kwargs): + domain = kwargs.get("domain") + api = settings.API_RESOLVER + if not api + logger.error("you need set the var API_RESOLVER") + return + + if "http" not in domain: + logger.error("you need put https:// in %s", domain) + return + + api = api.strip("/") + domain = domain.strip("/") + + data = {"url": domain} + url = api + '/registerURL' + res = requests.post(url, json=data) + print(res.json()) diff --git a/dpp/management/commands/dlt_register_user.py b/dpp/management/commands/dlt_register_user.py new file mode 100644 index 0000000..4ab0e60 --- /dev/null +++ b/dpp/management/commands/dlt_register_user.py @@ -0,0 +1,72 @@ +import json +import logging + +from ereuseapi.methods import API +from django.conf import settings +from django.core.management.base import BaseCommand +from user.models import User, Institution +from dpp.models import UserDpp + + +logger = logging.getLogger('django') + + +class Command(BaseCommand): + help = "Insert users than are in Dlt with params: path of data set file" + + + def add_arguments(self, parser): + parser.add_argument('dataset_file', type=str, help='institution') + + def handle(self, *args, **kwargs): + dataset_file = kwargs.get("dataset_file") + self.api_dlt = settings.API_DLT + self.institution = Institution.objects.filter().first() + if not self.api_dlt: + logger.error("you need set the var API_DLT") + return + + self.api_dlt = self.api_dlt.strip("/") + + with open(dataset_file) as f: + dataset = json.loads(f.read()) + + self.add_user(dataset) + + def add_user(self, data): + email = data.get("email") + password = data.get("password") + api_token = data.get("api_token") + # ethereum = {"data": {"api_token": api_token}} + # data_eth = json.dumps(ethereum) + data_eth = json.dumps(api_token) + # TODO encrypt in the future + # api_keys_dlt = encrypt(password, data_eth) + api_keys_dlt = data_eth + + user = User.objects.filter(email=email).first() + + if not user: + user = User.objects.create( + email=email, + password=password, + institution = self.institution + ) + + roles = [] + token_dlt = api_token + api = API(self.api_dlt, token_dlt, "ethereum") + result = api.check_user_roles() + + if result.get('Status') == 200: + if 'Success' in result.get('Data', {}).get('status'): + rols = result.get('Data', {}).get('data', {}) + roles = [(k, k) for k, v in rols.items() if v] + + roles_dlt = json.dumps(roles) + + UserDpp.objects.create( + roles_dlt=roles_dlt, + api_keys_dlt=api_keys_dlt, + user=user + ) diff --git a/dpp/management/commands/dlt_rsync_members.py b/dpp/management/commands/dlt_rsync_members.py new file mode 100644 index 0000000..7fed5c9 --- /dev/null +++ b/dpp/management/commands/dlt_rsync_members.py @@ -0,0 +1,47 @@ +import logging +import requests + +from django.core.management.base import BaseCommand +from django.conf import settings +from dpp.models import MemberFederated + + +logger = logging.getLogger('django') + + +class Command(BaseCommand): + help = "Synchronize members of DLT" + + def handle(self, *args, **kwargs): + api = settings.API_RESOLVER + if not api + logger.error("you need set the var API_RESOLVER") + return + + + api = api.strip("/") + + url = api + '/getAll' + res = requests.get(url) + if res.status_code != 200: + return "Error, {}".format(res.text) + response = res.json() + members = response['url'] + counter = members.pop('counter') + if counter <= MemberFederated.objects.count(): + logger.info("Synchronize members of DLT -> All Ok") + return "All ok" + + for k, v in members.items(): + id = self.clean_id(k) + member = MemberFederated.objects.filter(dlt_id_provider=id).first() + if member: + if member.domain != v: + member.domain = v + member.save() + continue + MemberFederated.objects.create(dlt_id_provider=id, domain=v) + return res.text + + def clean_id(self, id): + return int(id.split('DH')[-1]) diff --git a/dpp/migrations/0002_memberfederated.py b/dpp/migrations/0002_memberfederated.py new file mode 100644 index 0000000..b062836 --- /dev/null +++ b/dpp/migrations/0002_memberfederated.py @@ -0,0 +1,25 @@ +# Generated by Django 5.0.6 on 2024-11-19 19:18 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("dpp", "0001_initial"), + ] + + operations = [ + migrations.CreateModel( + name="MemberFederated", + fields=[ + ( + "dlt_id_provider", + models.IntegerField(primary_key=True, serialize=False), + ), + ("domain", models.CharField(max_length=256)), + ("client_id", models.CharField(max_length=256)), + ("client_secret", models.CharField(max_length=256)), + ], + ), + ] diff --git a/dpp/models.py b/dpp/models.py index 5502bcf..dc0eb8c 100644 --- a/dpp/models.py +++ b/dpp/models.py @@ -13,3 +13,20 @@ class Proof(models.Model): issuer = models.ForeignKey(Institution, on_delete=models.CASCADE) user = models.ForeignKey( User, on_delete=models.SET_NULL, null=True, blank=True) + + +class MemberFederated(models.Model): + dlt_id_provider = models.IntegerField(primary_key=True) + domain = models.CharField(max_length=STR_EXTEND_SIZE) + # This client_id and client_secret is used for connected to this domain as + # a client and this domain then is the server of auth + client_id = models.CharField(max_length=STR_EXTEND_SIZE. null=True) + client_secret = models.CharField(max_length=STR_EXTEND_SIZE, null=True) + institution = models.ForeignKey( + Institution, on_delete=models.SET_NULL, null=True, blank=True) + + +class UserDpp(models.Model): + roles_dlt = models.TextField() + api_keys_dlt = models.TextField() + user = models.ForeignKey(User, on_delete=models.CASCADE) -- 2.30.2 From 73d478f517e6bb94ed1c8c262bf52b9d8f2f11eb Mon Sep 17 00:00:00 2001 From: Cayo Puigdefabregas Date: Tue, 19 Nov 2024 21:18:29 +0100 Subject: [PATCH 13/86] add did view --- did/__init__.py | 0 did/admin.py | 3 + did/apps.py | 6 ++ did/migrations/__init__.py | 0 did/models.py | 3 + did/templates/device_web.html | 171 ++++++++++++++++++++++++++++++++++ did/tests.py | 3 + did/urls.py | 8 ++ did/views.py | 60 ++++++++++++ 9 files changed, 254 insertions(+) create mode 100644 did/__init__.py create mode 100644 did/admin.py create mode 100644 did/apps.py create mode 100644 did/migrations/__init__.py create mode 100644 did/models.py create mode 100644 did/templates/device_web.html create mode 100644 did/tests.py create mode 100644 did/urls.py create mode 100644 did/views.py diff --git a/did/__init__.py b/did/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/did/admin.py b/did/admin.py new file mode 100644 index 0000000..8c38f3f --- /dev/null +++ b/did/admin.py @@ -0,0 +1,3 @@ +from django.contrib import admin + +# Register your models here. diff --git a/did/apps.py b/did/apps.py new file mode 100644 index 0000000..8893167 --- /dev/null +++ b/did/apps.py @@ -0,0 +1,6 @@ +from django.apps import AppConfig + + +class DidConfig(AppConfig): + default_auto_field = "django.db.models.BigAutoField" + name = "did" diff --git a/did/migrations/__init__.py b/did/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/did/models.py b/did/models.py new file mode 100644 index 0000000..71a8362 --- /dev/null +++ b/did/models.py @@ -0,0 +1,3 @@ +from django.db import models + +# Create your models here. diff --git a/did/templates/device_web.html b/did/templates/device_web.html new file mode 100644 index 0000000..8c607d3 --- /dev/null +++ b/did/templates/device_web.html @@ -0,0 +1,171 @@ + + + + + + {{ object.type }} + + + + + +
+

{{ object.manufacturer }} {{ object.type }} {{ object.model }}

+ +
+
+

Details

+
+
Phid
+
+
{{ object.id }}
+
+
+
+
Type
+
{{ object.type }}
+
+ + {% if object.is_websnapshot %} + {% for snapshot_key, snapshot_value in object.last_user_evidence %} +
+
{{ snapshot_key }}
+
{{ snapshot_value|default:'' }}
+
+ {% endfor %} + {% else %} +
+
Manufacturer
+
{{ object.manufacturer|default:'' }}
+
+
+
Model
+
{{ object.model|default:'' }}
+
+ {% if user.is_authenticated %} +
+
Serial Number
+
{{ object.serial_number|default:'' }}
+
+ {% endif %} + {% endif %} +
+ +
+

Identifiers

+ {% for chid in object.hids %} +
+
{{ chid|default:'' }}
+
+ {% endfor %} +
+
+

Components

+
+ {% for component in object.components %} +
+
+
+
{{ component.type }}
+

+ {% for component_key, component_value in component.items %} + {% if component_key not in 'actions,type' %} + {% if component_key != 'serialNumber' or user.is_authenticated %} + {{ component_key }}: {{ component_value }}
+ {% endif %} + {% endif %} + {% endfor %} +

+
+
+
+ {% endfor %} +
+
+
+

+ ©{% now 'Y' %}eReuse. All rights reserved. +

+
+ + + + diff --git a/did/tests.py b/did/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/did/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/did/urls.py b/did/urls.py new file mode 100644 index 0000000..0eda70c --- /dev/null +++ b/did/urls.py @@ -0,0 +1,8 @@ +from django.urls import path +from did import views + +app_name = 'did' + +urlpatterns = [ + path("", views.PublicDeviceWebView.as_view(), name="device_web"), +] diff --git a/did/views.py b/did/views.py new file mode 100644 index 0000000..1caa081 --- /dev/null +++ b/did/views.py @@ -0,0 +1,60 @@ +from django.http import JsonResponse, Http404 +from django.views.generic.base import TemplateView +from device.models import Device + + +class PublicDeviceWebView(TemplateView): + template_name = "device_web.html" + + def get(self, request, *args, **kwargs): + self.pk = kwargs['pk'] + self.object = Device(id=self.pk) + + if not self.object.last_evidence: + raise Http404 + + if self.request.headers.get('Accept') == 'application/json': + return self.get_json_response() + return super().get(request, *args, **kwargs) + + def get_context_data(self, **kwargs): + context = super().get_context_data(**kwargs) + self.object.initial() + context.update({ + 'object': self.object + }) + return context + + @property + def public_fields(self): + return { + 'id': self.object.id, + 'shortid': self.object.shortid, + 'uuids': self.object.uuids, + 'hids': self.object.hids, + 'components': self.remove_serial_number_from(self.object.components), + } + + @property + def authenticated_fields(self): + return { + 'serial_number': self.object.serial_number, + 'components': self.object.components, + } + + def remove_serial_number_from(self, components): + for component in components: + if 'serial_number' in component: + del component['SerialNumber'] + return components + + def get_device_data(self): + data = self.public_fields + if self.request.user.is_authenticated: + data.update(self.authenticated_fields) + return data + + def get_json_response(self): + device_data = self.get_device_data() + return JsonResponse(device_data) + -- 2.30.2 From caf2606fd9d71843e561e9ac9884a4a916e61069 Mon Sep 17 00:00:00 2001 From: Cayo Puigdefabregas Date: Wed, 20 Nov 2024 10:52:22 +0100 Subject: [PATCH 14/86] add memberFederated model --- ...03_memberfederated_institution_and_more.py | 60 +++++++++++++++++++ dpp/models.py | 2 +- 2 files changed, 61 insertions(+), 1 deletion(-) create mode 100644 dpp/migrations/0003_memberfederated_institution_and_more.py diff --git a/dpp/migrations/0003_memberfederated_institution_and_more.py b/dpp/migrations/0003_memberfederated_institution_and_more.py new file mode 100644 index 0000000..2024798 --- /dev/null +++ b/dpp/migrations/0003_memberfederated_institution_and_more.py @@ -0,0 +1,60 @@ +# Generated by Django 5.0.6 on 2024-11-20 10:51 + +import django.db.models.deletion +from django.conf import settings +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("dpp", "0002_memberfederated"), + ("user", "0001_initial"), + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ] + + operations = [ + migrations.AddField( + model_name="memberfederated", + name="institution", + field=models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.SET_NULL, + to="user.institution", + ), + ), + migrations.AlterField( + model_name="memberfederated", + name="client_id", + field=models.CharField(max_length=256, null=True), + ), + migrations.AlterField( + model_name="memberfederated", + name="client_secret", + field=models.CharField(max_length=256, null=True), + ), + migrations.CreateModel( + name="UserDpp", + fields=[ + ( + "id", + models.BigAutoField( + auto_created=True, + primary_key=True, + serialize=False, + verbose_name="ID", + ), + ), + ("roles_dlt", models.TextField()), + ("api_keys_dlt", models.TextField()), + ( + "user", + models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, + to=settings.AUTH_USER_MODEL, + ), + ), + ], + ), + ] diff --git a/dpp/models.py b/dpp/models.py index dc0eb8c..6bcaccd 100644 --- a/dpp/models.py +++ b/dpp/models.py @@ -20,7 +20,7 @@ class MemberFederated(models.Model): domain = models.CharField(max_length=STR_EXTEND_SIZE) # This client_id and client_secret is used for connected to this domain as # a client and this domain then is the server of auth - client_id = models.CharField(max_length=STR_EXTEND_SIZE. null=True) + client_id = models.CharField(max_length=STR_EXTEND_SIZE, null=True) client_secret = models.CharField(max_length=STR_EXTEND_SIZE, null=True) institution = models.ForeignKey( Institution, on_delete=models.SET_NULL, null=True, blank=True) -- 2.30.2 From fe429e7db66bc2e47b3914e0b1cded29e8071ea3 Mon Sep 17 00:00:00 2001 From: Cayo Puigdefabregas Date: Wed, 20 Nov 2024 12:03:20 +0100 Subject: [PATCH 15/86] fix --- dpp/api_dlt.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dpp/api_dlt.py b/dpp/api_dlt.py index 6f1546f..60dd835 100644 --- a/dpp/api_dlt.py +++ b/dpp/api_dlt.py @@ -85,7 +85,7 @@ def save_proof(signature, ev_uuid, result, proof_type, user): d = { "type": proof_type, "timestamp": timestamp, - "issuer": user.institution.id, + "issuer": user.institution, "user": user, "uuid": ev_uuid, "signature": signature, -- 2.30.2 From 34ea4bedfc33e4064ad64c034c35d4b021196354 Mon Sep 17 00:00:00 2001 From: Cayo Puigdefabregas Date: Wed, 20 Nov 2024 12:04:56 +0100 Subject: [PATCH 16/86] fix --- dhub/urls.py | 1 + 1 file changed, 1 insertion(+) diff --git a/dhub/urls.py b/dhub/urls.py index c50da55..d070a15 100644 --- a/dhub/urls.py +++ b/dhub/urls.py @@ -28,4 +28,5 @@ urlpatterns = [ path("lot/", include("lot.urls")), path('api/', include('api.urls')), path('dpp/', include('dpp.urls')), + path('did/', include('did.urls')), ] -- 2.30.2 From 8b4d1f51f6a1336a90548706e4b2bd5414b5ac6f Mon Sep 17 00:00:00 2001 From: pedro Date: Fri, 22 Nov 2024 12:07:25 +0100 Subject: [PATCH 17/86] docker devicehub-django entrypoint --- docker/devicehub-django.entrypoint.sh | 152 ++++++++++++++++++++++++++ 1 file changed, 152 insertions(+) diff --git a/docker/devicehub-django.entrypoint.sh b/docker/devicehub-django.entrypoint.sh index fb057f9..61967f1 100644 --- a/docker/devicehub-django.entrypoint.sh +++ b/docker/devicehub-django.entrypoint.sh @@ -5,6 +5,156 @@ set -u # DEBUG set -x +# TODO there is a conflict between two shared vars +# 1. from the original docker compose devicehub-teal +# 2. from the new docker compose that integrates all dpp services +wait_for_dpp_shared() { + while true; do + # specially ensure VERAMO_API_CRED_FILE is not empty, + # it takes some time to get data in + OPERATOR_TOKEN_FILE='operator-token.txt' + if [ -f "/shared/${OPERATOR_TOKEN_FILE}" ] && \ + [ -f "/shared/create_user_operator_finished" ]; then + sleep 5 + echo "Files ready to process." + break + else + echo "Waiting for file in shared: ${OPERATOR_TOKEN_FILE}" + sleep 5 + fi + done +} + +# 3. Generate an environment .env file. +# TODO cargar via shared +gen_env_vars() { + # specific dpp env vars + if [ "${DPP_MODULE}" = 'y' ]; then + # docker situation + if [ -d "${DPP_SHARED:-}" ]; then + wait_for_dpp_shared + export API_DLT='http://api_connector:3010' + export API_DLT_TOKEN="$(cat "/shared/${OPERATOR_TOKEN_FILE}")" + export API_RESOLVER='http://id_index_api:3012' + # TODO hardcoded + export ID_FEDERATED='DH1' + # .env situation + else + dpp_env_vars="$(cat < .env < "${DATASET_FILE}" < Date: Tue, 26 Nov 2024 12:47:15 +0100 Subject: [PATCH 18/86] docker entrypoint: make DB_* optional --- docker/devicehub-django.entrypoint.sh | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docker/devicehub-django.entrypoint.sh b/docker/devicehub-django.entrypoint.sh index 61967f1..5cd7817 100644 --- a/docker/devicehub-django.entrypoint.sh +++ b/docker/devicehub-django.entrypoint.sh @@ -53,10 +53,10 @@ END # generate config using env vars from docker cat > .env < Date: Tue, 26 Nov 2024 19:25:30 +0100 Subject: [PATCH 19/86] docker: remove unused vars in django were used in the flask app devicehub-teal --- docker/devicehub-django.entrypoint.sh | 17 +---------------- 1 file changed, 1 insertion(+), 16 deletions(-) diff --git a/docker/devicehub-django.entrypoint.sh b/docker/devicehub-django.entrypoint.sh index 5cd7817..593ea2e 100644 --- a/docker/devicehub-django.entrypoint.sh +++ b/docker/devicehub-django.entrypoint.sh @@ -51,24 +51,9 @@ END fi # generate config using env vars from docker + # TODO rethink if this is needed because now this is django, not flask cat > .env < Date: Wed, 27 Nov 2024 00:11:44 +0100 Subject: [PATCH 20/86] dh docker entrypoint: use appropriate new env vars --- docker/devicehub-django.entrypoint.sh | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/docker/devicehub-django.entrypoint.sh b/docker/devicehub-django.entrypoint.sh index 593ea2e..c6736b8 100644 --- a/docker/devicehub-django.entrypoint.sh +++ b/docker/devicehub-django.entrypoint.sh @@ -28,6 +28,11 @@ wait_for_dpp_shared() { # 3. Generate an environment .env file. # TODO cargar via shared gen_env_vars() { + INIT_ORG="${INIT_ORG:-example-org}" + INIT_USER="${INIT_USER:-user@example.org}" + INIT_PASSWD="${INIT_PASSWD:-1234}" + ADMIN='True' + PREDEFINED_TOKEN="${PREDEFINED_TOKEN:-}" # specific dpp env vars if [ "${DPP_MODULE}" = 'y' ]; then # docker situation @@ -98,7 +103,8 @@ config_dpp_part1() { else # TODO when this runs more than one time per service, this is a problem, but for the docker-reset.sh workflow, that's fine # TODO put this in already_configured - ./manage.py dlt_insert_members "${DEVICEHUB_HOST}" + # TODO hardcoded http proto and port + ./manage.py dlt_insert_members "http://${DOMAIN}:8000" fi # 13. Do a rsync api resolve @@ -108,8 +114,8 @@ config_dpp_part1() { DATASET_FILE='/tmp/dataset.json' cat > "${DATASET_FILE}" < Date: Wed, 27 Nov 2024 00:15:16 +0100 Subject: [PATCH 21/86] dpp/dlt: fix typo --- dpp/management/commands/dlt_insert_members.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dpp/management/commands/dlt_insert_members.py b/dpp/management/commands/dlt_insert_members.py index db76aca..03c914f 100644 --- a/dpp/management/commands/dlt_insert_members.py +++ b/dpp/management/commands/dlt_insert_members.py @@ -18,7 +18,7 @@ class Command(BaseCommand): def handle(self, *args, **kwargs): domain = kwargs.get("domain") api = settings.API_RESOLVER - if not api + if not api: logger.error("you need set the var API_RESOLVER") return -- 2.30.2 From 367d3a7f871fb6f9f048a3d197404cd5e5c99dea Mon Sep 17 00:00:00 2001 From: pedro Date: Wed, 27 Nov 2024 00:17:41 +0100 Subject: [PATCH 22/86] dpp/dlt: fix typo --- dhub/settings.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dhub/settings.py b/dhub/settings.py index 6cebe6c..8ca3094 100644 --- a/dhub/settings.py +++ b/dhub/settings.py @@ -245,4 +245,4 @@ COMMIT = config('COMMIT', default='') # DLT SETTINGS TOKEN_DLT = config("TOKEN_DLT", default=None) API_DLT = config("API_DLT", default=None) -API_RESULVER = config("API_RESOLVER", default=None) +API_RESOLVER = config("API_RESOLVER", default=None) -- 2.30.2 From 0e0ad400c265658f4fe83801bd5c7f35cff3e9f3 Mon Sep 17 00:00:00 2001 From: pedro Date: Wed, 27 Nov 2024 00:21:41 +0100 Subject: [PATCH 23/86] dpp/dlt: fix typo --- dpp/management/commands/dlt_rsync_members.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dpp/management/commands/dlt_rsync_members.py b/dpp/management/commands/dlt_rsync_members.py index 7fed5c9..8850d11 100644 --- a/dpp/management/commands/dlt_rsync_members.py +++ b/dpp/management/commands/dlt_rsync_members.py @@ -14,7 +14,7 @@ class Command(BaseCommand): def handle(self, *args, **kwargs): api = settings.API_RESOLVER - if not api + if not api: logger.error("you need set the var API_RESOLVER") return -- 2.30.2 From d7ff3c2798eeafb3e781190cbb5ec2a2275fa65c Mon Sep 17 00:00:00 2001 From: pedro Date: Wed, 27 Nov 2024 00:38:03 +0100 Subject: [PATCH 24/86] logger: improve error handling --- utils/logger.py | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/utils/logger.py b/utils/logger.py index 3a320ce..cb324a1 100644 --- a/utils/logger.py +++ b/utils/logger.py @@ -18,13 +18,13 @@ class CustomFormatter(logging.Formatter): color = PURPLE else: color = RESET - + record.levelname = f"{color}{record.levelname}{RESET}" if record.args: record.msg = self.highlight_args(record.msg, record.args, color) record.args = () - + # provide trace when DEBUG config if settings.DEBUG: import traceback @@ -33,5 +33,8 @@ class CustomFormatter(logging.Formatter): return super().format(record) def highlight_args(self, message, args, color): - highlighted_args = tuple(f"{color}{arg}{RESET}" for arg in args) - return message % highlighted_args + try: + highlighted_args = tuple(f"{color}{arg}{RESET}" for arg in args) + return message % highlighted_args + except (TypeError, ValueError): + return f"{color}{message}{RESET}" -- 2.30.2 From 15fb5d3739f5c39cf6a6ed748aac7b19f801832d Mon Sep 17 00:00:00 2001 From: pedro Date: Wed, 27 Nov 2024 00:52:20 +0100 Subject: [PATCH 25/86] utils/logger: ensure msgs are logged --- utils/logger.py | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/utils/logger.py b/utils/logger.py index cb324a1..4d7e5ce 100644 --- a/utils/logger.py +++ b/utils/logger.py @@ -22,8 +22,14 @@ class CustomFormatter(logging.Formatter): record.levelname = f"{color}{record.levelname}{RESET}" if record.args: - record.msg = self.highlight_args(record.msg, record.args, color) - record.args = () + try: + record.msg = record.msg % record.args + record.args = () + except (TypeError, ValueError): + record.msg = f"{color}{record.msg}{RESET}" + + # Highlight the final formatted message + record.msg = self.highlight_message(record.msg, color) # provide trace when DEBUG config if settings.DEBUG: @@ -33,8 +39,4 @@ class CustomFormatter(logging.Formatter): return super().format(record) def highlight_args(self, message, args, color): - try: - highlighted_args = tuple(f"{color}{arg}{RESET}" for arg in args) - return message % highlighted_args - except (TypeError, ValueError): - return f"{color}{message}{RESET}" + return f"{color}{message}{RESET}" -- 2.30.2 From 8fcd20f6095f4e8cf089c9facb63b6050c06ccf4 Mon Sep 17 00:00:00 2001 From: pedro Date: Wed, 27 Nov 2024 01:08:22 +0100 Subject: [PATCH 26/86] dh docker: first migrate, then config --- docker/devicehub-django.entrypoint.sh | 20 ++++++++------------ 1 file changed, 8 insertions(+), 12 deletions(-) diff --git a/docker/devicehub-django.entrypoint.sh b/docker/devicehub-django.entrypoint.sh index c6736b8..889c76d 100644 --- a/docker/devicehub-django.entrypoint.sh +++ b/docker/devicehub-django.entrypoint.sh @@ -129,15 +129,18 @@ config_phase() { if [ "${DPP_MODULE}" = 'y' ]; then # 12, 13, 14 config_dpp_part1 + + # copy dlt/dpp snapshots + cp example/dpp-snapshots/*.json example/snapshots/ fi - # TODO fix wrong syntax # non DL user (only for the inventory) - # ./manage.py adduser user2@dhub.com ${INIT_PASSWD} + ./manage.py add_institution "${INIT_ORG}" + # TODO: one error on add_user, and you don't add user anymore + ./manage.py add_user "${INIT_ORG}" "${INIT_USER}" "${INIT_PASSWD}" "${ADMIN}" "${PREDEFINED_TOKEN}" # # 15. Add inventory snapshots for user "${INIT_USER}". - if [ "${IMPORT_SNAPSHOTS}" = 'y' ]; then - cp /mnt/snapshots/*.json example/snapshots/ + if [ "${DEMO:-}" = 'true' ]; then /usr/bin/time ./manage.py up_snapshots "${INIT_USER}" fi @@ -172,13 +175,7 @@ deploy() { # inspired by https://medium.com/analytics-vidhya/django-with-docker-and-docker-compose-python-part-2-8415976470cc echo "INFO detected NEW deployment" ./manage.py migrate - ./manage.py add_institution "${INIT_ORG}" - # TODO: one error on add_user, and you don't add user anymore - ./manage.py add_user "${INIT_ORG}" "${INIT_USER}" "${INIT_PASSWD}" "${ADMIN}" "${PREDEFINED_TOKEN}" - - if [ "${DEMO:-}" = 'true' ]; then - ./manage.py up_snapshots example/snapshots/ "${INIT_USER}" - fi + config_phase fi } @@ -207,7 +204,6 @@ main() { program_dir='/opt/devicehub-django' cd "${program_dir}" gen_env_vars - config_phase deploy runserver } -- 2.30.2 From 263eacda99b2a916feb007572671b422ce78b4a9 Mon Sep 17 00:00:00 2001 From: pedro Date: Wed, 27 Nov 2024 01:09:06 +0100 Subject: [PATCH 27/86] add dpp --- example/dpp-snapshots/hp_probook_450.json | 1 + example/dpp-snapshots/hp_probook_450_2.json | 1 + example/dpp-snapshots/hp_probook_g2.json | 1 + example/dpp-snapshots/hp_probook_g8.json | 1 + example/dpp-snapshots/snapshot01.json | 1 + example/dpp-snapshots/snapshot02.json | 1 + 6 files changed, 6 insertions(+) create mode 100644 example/dpp-snapshots/hp_probook_450.json create mode 100644 example/dpp-snapshots/hp_probook_450_2.json create mode 100644 example/dpp-snapshots/hp_probook_g2.json create mode 100644 example/dpp-snapshots/hp_probook_g8.json create mode 100644 example/dpp-snapshots/snapshot01.json create mode 100644 example/dpp-snapshots/snapshot02.json diff --git a/example/dpp-snapshots/hp_probook_450.json b/example/dpp-snapshots/hp_probook_450.json new file mode 100644 index 0000000..1b0b917 --- /dev/null +++ b/example/dpp-snapshots/hp_probook_450.json @@ -0,0 +1 @@ +{"closed": true, "components": [{"actions": [], "manufacturer": "AUO", "model": "LCD Monitor", "productionDate": "2013-12-15T00:00:00", "refreshRate": 60, "resolutionHeight": 768, "resolutionWidth": 1366, "serialNumber": null, "size": 15.529237982414482, "technology": "LCD", "type": "Display"}, {"actions": [{"elapsed": 0, "rate": 19155.4, "type": "BenchmarkProcessor"}, {"elapsed": 0, "rate": 18446740964.4517, "type": "BenchmarkProcessorSysbench"}], "address": 64, "brand": "Core i5", "cores": 2, "generation": 4, "manufacturer": "Intel Corp.", "model": "Intel Core i5-4210U CPU @ 1.70GHz", "serialNumber": null, "speed": 1.49414, "threads": 4, "type": "Processor"}, {"actions": [], "manufacturer": "Intel Corporation", "model": "Haswell-ULT HD Audio Controller", "serialNumber": null, "type": "SoundCard"}, {"actions": [], "manufacturer": "DDZLE019I6OJ8L", "model": "HP HD Webcam", "serialNumber": "200901010001", "type": "SoundCard"}, {"actions": [], "manufacturer": "Intel Corporation", "model": "8 Series HD Audio Controller", "serialNumber": null, "type": "SoundCard"}, {"actions": [], "format": "SODIMM", "interface": "DDR3", "manufacturer": "Micron", "model": "8KTF51264HZ-1G6N1", "serialNumber": "18503423", "size": 4096.0, "speed": 1600.0, "type": "RamModule"}, {"actions": [], "format": "SODIMM", "interface": "DDR3", "manufacturer": "Micron", "model": "8KTF51264HZ-1G6N1", "serialNumber": "18651324", "size": 4096.0, "speed": 1600.0, "type": "RamModule"}, {"actions": [{"assessment": true, "commandTimeout": 4295032833, "currentPendingSectorCount": 0, "elapsed": 120, "length": "Short", "lifetime": 8627, "offlineUncorrectable": 0, "powerCycleCount": 1575, "reallocatedSectorCount": 0, "reportedUncorrectableErrors": 5009, "severity": "Info", "status": "Completed without error", "type": "TestDataStorage"}, {"elapsed": 14, "readSpeed": 104.0, "type": "BenchmarkDataStorage", "writeSpeed": 24.4}, {"endTime": "2022-01-13T14:13:09.338771+00:00", "severity": "Info", "startTime": "2022-01-13T09:34:39.026634+00:00", "steps": [{"endTime": "2022-01-13T11:07:49.733336+00:00", "severity": "Info", "startTime": "2022-01-13T09:34:39.026954+00:00", "type": "StepZero"}, {"endTime": "2022-01-13T14:13:09.338626+00:00", "severity": "Info", "startTime": "2022-01-13T11:07:49.734069+00:00", "type": "StepRandom"}], "type": "EraseSectors"}], "interface": "ATA", "manufacturer": "Seagate", "model": "ST500LT012-1DG14", "serialNumber": "S3P9A80F", "size": 500107.86201599997, "type": "HardDrive", "variant": "YAM1"}, {"actions": [], "manufacturer": "Realtek Semiconductor Co., Ltd.", "model": "RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller", "serialNumber": "64:51:06:b0:0a:f4", "speed": 1000.0, "type": "NetworkAdapter", "variant": "10", "wireless": false}, {"actions": [], "manufacturer": "Realtek Semiconductor Co., Ltd.", "model": "RTL8723BE PCIe Wireless Network Adapter", "serialNumber": "90:48:9a:af:6a:1b", "speed": null, "type": "NetworkAdapter", "variant": "00", "wireless": true}, {"actions": [], "manufacturer": "Intel Corporation", "memory": null, "model": "Haswell-ULT Integrated Graphics Controller", "serialNumber": null, "type": "GraphicCard"}, {"actions": [], "biosDate": "2014-06-17T00:00:00", "firewire": 0, "manufacturer": "Hewlett-Packard", "model": "2248", "pcmcia": 0, "ramMaxSize": 16, "ramSlots": 2, "serial": 0, "serialNumber": "PELSAF2WV6XGL6", "slots": 2, "type": "Motherboard", "usb": 2, "version": "M74 Ver. 01.02"}], "debug": {"battery": null, "hwinfo": "01: None 00.0: 10105 BIOS\n [Created at bios.186]\n Unique ID: rdCR.lZF+r4EgHp4\n Hardware Class: bios\n BIOS Keyboard LED Status:\n Scroll Lock: off\n Num Lock: off\n Caps Lock: off\n Parallel Port 0: 0x378\n Base Memory: 631 kB\n PnP BIOS: @@P3C00\n BIOS: extended read supported\n SMBIOS Version: 2.7\n BIOS Info: #12\n Vendor: \"Hewlett-Packard\"\n Version: \"M74 Ver. 01.02\"\n Date: \"06/17/2014\"\n Start Address: 0xf0000\n ROM Size: 6144 kB\n Features: 0x0f83000000093c099980\n PCI supported\n PCMCIA supported\n BIOS flashable\n BIOS shadowing allowed\n CD boot supported\n Selectable boot supported\n EDD spec supported\n Print Screen supported\n 8042 Keyboard Services supported\n Serial Services supported\n Printer Services supported\n ACPI supported\n USB Legacy supported\n Smart Battery supported\n BIOS Boot Spec supported\n F12 Network boot supported\n System Info: #13\n Manufacturer: \"Hewlett-Packard\"\n Product: \"HP ProBook 450 G2\"\n Version: \"A3009DD10303\"\n Serial: \"CND4286ZJ2\"\n UUID: undefined, but settable\n Wake-up: 0x06 (Power Switch)\n Board Info: #14\n Manufacturer: \"Hewlett-Packard\"\n Product: \"2248\"\n Version: \"KBC Version 67.21\"\n Serial: \"PELSAF2WV6XGL6\"\n Type: 0x01 (Other)\n Features: 0x09\n Hosting Board\n Replaceable\n Chassis: #15\n Chassis Info: #15\n Manufacturer: \"Hewlett-Packard\"\n Serial: \"CND4286ZJ2\"\n Type: 0x0a (Notebook)\n Bootup State: 0x03 (Safe)\n Power Supply State: 0x03 (Safe)\n Thermal State: 0x01 (Other)\n Security Status: 0x01 (Other)\n Processor Info: #7\n Socket: \"U3E1\"\n Socket Type: 0x2e (Other)\n Socket Status: Populated\n Type: 0x03 (CPU)\n Family: 0xcd (Other)\n Manufacturer: \"Intel(R) Corporation\"\n Version: \"Intel(R) Core(TM) i5-4210U CPU @ 1.70GHz\"\n Serial: \"To Be Filled By O.E.M.\"\n Asset Tag: \"To Be Filled By O.E.M.\"\n Processor ID: 0xbfebfbff00040651\n Status: 0x01 (Enabled)\n Voltage: 0.7 V\n External Clock: 100 MHz\n Max. Speed: 2400 MHz\n Current Speed: 1700 MHz\n L1 Cache: #8\n L2 Cache: #9\n L3 Cache: #10\n Cache Info: #6\n Designation: \"L1 Cache\"\n Level: L1\n State: Enabled\n Mode: 0x01 (Write Back)\n Location: 0x00 (Internal, Not Socketed)\n ECC: 0x04 (Parity)\n Type: 0x04 (Data)\n Associativity: 0x07 (8-way Set-Associative)\n Max. Size: 32 kB\n Current Size: 32 kB\n Supported SRAM Types: 0x0040 (Asynchronous)\n Current SRAM Type: 0x0040 (Asynchronous)\n Cache Info: #8\n Designation: \"L1 Cache\"\n Level: L1\n State: Enabled\n Mode: 0x01 (Write Back)\n Location: 0x00 (Internal, Not Socketed)\n ECC: 0x04 (Parity)\n Type: 0x03 (Instruction)\n Associativity: 0x07 (8-way Set-Associative)\n Max. Size: 32 kB\n Current Size: 32 kB\n Supported SRAM Types: 0x0040 (Asynchronous)\n Current SRAM Type: 0x0040 (Asynchronous)\n Cache Info: #9\n Designation: \"L2 Cache\"\n Level: L2\n State: Enabled\n Mode: 0x01 (Write Back)\n Location: 0x00 (Internal, Not Socketed)\n ECC: 0x05 (Single-bit)\n Type: 0x05 (Unified)\n Associativity: 0x07 (8-way Set-Associative)\n Max. Size: 256 kB\n Current Size: 256 kB\n Supported SRAM Types: 0x0040 (Asynchronous)\n Current SRAM Type: 0x0040 (Asynchronous)\n Cache Info: #10\n Designation: \"L3 Cache\"\n Level: L3\n State: Enabled\n Mode: 0x01 (Write Back)\n Location: 0x00 (Internal, Not Socketed)\n ECC: 0x06 (Multi-bit)\n Type: 0x05 (Unified)\n Associativity: 0x09 (Other)\n Max. Size: 3072 kB\n Current Size: 3072 kB\n Supported SRAM Types: 0x0040 (Asynchronous)\n Current SRAM Type: 0x0040 (Asynchronous)\n Port Connector: #20\n Type: 0x20 (Other)\n Internal Designator: \"Ctrl0Port0\"\n Internal Connector: 0x22 (Other)\n External Designator: \"Primary HDD Bay\"\n External Connector: 0x22 (Other)\n Port Connector: #21\n Type: 0x20 (Other)\n Internal Designator: \"Ctrl0Port5\"\n Internal Connector: 0x22 (Other)\n External Designator: \"Docking Station Upgrade Bay\"\n External Connector: 0x22 (Other)\n Port Connector: #22\n Type: 0x20 (Other)\n Internal Designator: \"Ctrl0Port4\"\n Internal Connector: 0x22 (Other)\n External Designator: \"eSATA\"\n External Connector: 0x22 (Other)\n Port Connector: #23\n Type: 0x20 (Other)\n Internal Designator: \"Ctrl0Port3\"\n Internal Connector: 0x22 (Other)\n External Designator: \"Docking Station eSATA\"\n External Connector: 0x22 (Other)\n Port Connector: #24\n Type: 0x20 (Other)\n Internal Designator: \"Ctrl0Port2\"\n Internal Connector: 0x22 (Other)\n External Designator: \"mSATA\"\n External Connector: 0x22 (Other)\n Port Connector: #25\n Type: 0x20 (Other)\n Internal Designator: \"Ctrl0Port1\"\n Internal Connector: 0x22 (Other)\n External Designator: \"Upgrade Bay\"\n External Connector: 0x22 (Other)\n System Slot: #27\n Designation: \"PCI SLOT1\"\n Type: 0x06 (PCI)\n Bus Width: 0x05 (32 bit)\n Status: 0x03 (Available)\n Length: 0x04 (Long)\n Slot ID: 1\n Characteristics: 0x0504 (3.3 V, PME#)\n On Board Devices: #17\n Video: \"32\"\n OEM Strings: #26\n FBYTE#3X47676J6S6Z6b7J7M7Q7W7saBaqawce.Q7;\n BUILDID#14WWR4AW602#SABE#DABE;\n ABS 70/71 79 7A 7B 7C\n CSM v01.5B\n HP_Mute_LED_0_0\n www.hp.com\n Language Info: #30\n Languages: en-US, da-DK, nl-NL, fi-FI, fr-FR, de-DE, it-IT, ja-JP, no-NO, pt-PT, es-ES, sv-SE, zh-CN, zh-TW\n Current: es-ES\n Physical Memory Array: #0\n Use: 0x03 (System memory)\n Location: 0x03 (Motherboard)\n Slots: 2\n Max. Size: 16 GB\n ECC: 0x03 (None)\n Memory Device: #1\n Location: \"Bottom-Slot 1(left)\"\n Bank: \"BANK 0\"\n Manufacturer: \"Micron\"\n Serial: \"18503423\"\n Asset Tag: \"9876543210\"\n Part Number: \"8KTF51264HZ-1G6N1\"\n Memory Array: #0\n Form Factor: 0x0d (SODIMM)\n Type: 0x18 (Other)\n Type Detail: 0x0080 (Synchronous)\n Data Width: 64 bits\n Size: 4 GB\n Speed: 1600 MHz\n Memory Device: #3\n Location: \"Bottom-Slot 2(right)\"\n Bank: \"BANK 2\"\n Manufacturer: \"Micron\"\n Serial: \"18651324\"\n Asset Tag: \"9876543210\"\n Part Number: \"8KTF51264HZ-1G6N1\"\n Memory Array: #0\n Form Factor: 0x0d (SODIMM)\n Type: 0x18 (Other)\n Type Detail: 0x0080 (Synchronous)\n Data Width: 64 bits\n Size: 4 GB\n Speed: 1600 MHz\n Memory Array Mapping: #5\n Memory Array: #0\n Partition Width: 2\n Start Address: 0x0000000000000000\n End Address: 0x0000000200000000\n Memory Device Mapping: #2\n Memory Device: #1\n Array Mapping: #5\n Row: 1\n Interleave Pos: 1\n Interleaved Depth: 1\n Start Address: 0x0000000000000000\n End Address: 0x0000000100000000\n Memory Device Mapping: #4\n Memory Device: #3\n Array Mapping: #5\n Row: 1\n Interleave Pos: 2\n Interleaved Depth: 1\n Start Address: 0x0000000100000000\n End Address: 0x0000000200000000\n Type 22 Record: #28\n Data 00: 16 1a 1c 00 01 02 00 00 03 02 aa 0f d0 39 04 ff\n Data 10: 1e d8 7a 45 05 0a 00 00 00 00\n String 1: \"Primary\"\n String 2: \"33-24\"\n String 3: \"VI04040XL\"\n String 4: \"1.1\"\n String 5: \"LION\"\n Type 32 Record: #16\n Data 00: 20 14 10 00 00 00 00 00 00 00 00 00 00 00 00 00\n Data 10: 00 00 00 00\n Type 41 Record: #18\n Data 00: 29 0b 12 00 01 83 01 00 00 00 10\n String 1: \"32\"\n Type 41 Record: #19\n Data 00: 29 0b 13 00 02 85 01 00 00 09 00\n String 1: \"WLAN\"\n String 2: \"WLAN\"\n Type 131 Record: #11\n Data 00: 83 40 0b 00 31 00 00 00 00 00 00 00 00 00 00 00\n Data 10: f8 00 43 9c 00 00 00 00 01 00 00 00 05 00 09 00\n Data 20: 10 07 1e 00 00 00 00 00 c8 00 ff ff 00 00 00 00\n Data 30: 04 0a 00 00 20 00 00 00 76 50 72 6f 00 00 00 00\n Type 137 Record: #29\n Data 00: 89 0c 1d 00 01 00 f0 03 f0 ff 00 00\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n\n02: None 00.0: 10107 System\n [Created at sys.63]\n Unique ID: rdCR.n_7QNeEnh23\n Hardware Class: system\n Model: \"System\"\n Formfactor: \"laptop\"\n Driver Info #0:\n Driver Status: thermal,fan are not active\n Driver Activation Cmd: \"modprobe thermal; modprobe fan\"\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n\n03: None 00.0: 10104 FPU\n [Created at misc.191]\n Unique ID: rdCR.EMpH5pjcahD\n Hardware Class: unknown\n Model: \"FPU\"\n I/O Ports: 0xf0-0xff (rw)\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n\n04: None 00.0: 0801 DMA controller (8237)\n [Created at misc.205]\n Unique ID: rdCR.f5u1ucRm+H9\n Hardware Class: unknown\n Model: \"DMA controller\"\n I/O Ports: 0x00-0xcf7 (rw)\n I/O Ports: 0xc0-0xdf (rw)\n I/O Ports: 0x80-0x8f (rw)\n DMA: 4\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n\n05: None 00.0: 0800 PIC (8259)\n [Created at misc.218]\n Unique ID: rdCR.8uRK7LxiIA2\n Hardware Class: unknown\n Model: \"PIC\"\n I/O Ports: 0x20-0x21 (rw)\n I/O Ports: 0xa0-0xa1 (rw)\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n\n06: None 00.0: 0900 Keyboard controller\n [Created at misc.250]\n Unique ID: rdCR.9N+EecqykME\n Hardware Class: unknown\n Model: \"Keyboard controller\"\n I/O Port: 0x60 (rw)\n I/O Port: 0x64 (rw)\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n\n07: None 00.0: 0701 Parallel controller (SPP)\n [Created at misc.261]\n Unique ID: YMnp.ecK7NLYWZ5D\n Hardware Class: unknown\n Model: \"Parallel controller\"\n Device File: /dev/lp0\n I/O Ports: 0x378-0x37a (rw)\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n\n08: None 00.0: 10400 PS/2 Controller\n [Created at misc.303]\n Unique ID: rdCR.DziBbWO85o5\n Hardware Class: unknown\n Model: \"PS/2 Controller\"\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n\n13: None 00.0: 10102 Main Memory\n [Created at memory.74]\n Unique ID: rdCR.CxwsZFjVASF\n Hardware Class: memory\n Model: \"Main Memory\"\n Memory Range: 0x00000000-0x1f22a6fff (rw)\n Memory Size: 8 GB\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n\n14: PCI 1c.3: 0604 PCI bridge (Normal decode)\n [Created at pci.378]\n Unique ID: Z7uZ.G9l8oDwzL7C\n SysFS ID: /devices/pci0000:00/0000:00:1c.3\n SysFS BusID: 0000:00:1c.3\n Hardware Class: bridge\n Model: \"Intel 8 Series PCI Express Root Port 4\"\n Vendor: pci 0x8086 \"Intel Corporation\"\n Device: pci 0x9c16 \"8 Series PCI Express Root Port 4\"\n SubVendor: pci 0x103c \"Hewlett-Packard Company\"\n SubDevice: pci 0x2248 \n Revision: 0xe4\n Driver: \"pcieport\"\n IRQ: 43 (no events)\n Module Alias: \"pci:v00008086d00009C16sv0000103Csd00002248bc06sc04i00\"\n Driver Info #0:\n Driver Status: shpchp is active\n Driver Activation Cmd: \"modprobe shpchp\"\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n\n15: PCI 700.0: ff00 Unclassified device\n [Created at pci.378]\n Unique ID: aK5u.Fesr1XY7OVA\n Parent ID: qTvu.CVz8txR9FbA\n SysFS ID: /devices/pci0000:00/0000:00:1c.1/0000:07:00.0\n SysFS BusID: 0000:07:00.0\n Hardware Class: unknown\n Model: \"Realtek RTS5227 PCI Express Card Reader\"\n Vendor: pci 0x10ec \"Realtek Semiconductor Co., Ltd.\"\n Device: pci 0x5227 \"RTS5227 PCI Express Card Reader\"\n SubVendor: pci 0x103c \"Hewlett-Packard Company\"\n SubDevice: pci 0x2248 \n Revision: 0x01\n Driver: \"rtsx_pci\"\n Driver Modules: \"rtsx_pci\"\n Memory Range: 0xc0600000-0xc0600fff (rw,non-prefetchable)\n IRQ: 44 (22 events)\n Module Alias: \"pci:v000010ECd00005227sv0000103Csd00002248bcFFsc00i00\"\n Driver Info #0:\n Driver Status: rtsx_pci is active\n Driver Activation Cmd: \"modprobe rtsx_pci\"\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n Attached to: #17 (PCI bridge)\n\n16: PCI 00.0: 0600 Host bridge\n [Created at pci.378]\n Unique ID: qLht.VantoDfnJG6\n SysFS ID: /devices/pci0000:00/0000:00:00.0\n SysFS BusID: 0000:00:00.0\n Hardware Class: bridge\n Model: \"Intel Haswell-ULT DRAM Controller\"\n Vendor: pci 0x8086 \"Intel Corporation\"\n Device: pci 0x0a04 \"Haswell-ULT DRAM Controller\"\n SubVendor: pci 0x103c \"Hewlett-Packard Company\"\n SubDevice: pci 0x2248 \n Revision: 0x0b\n Driver: \"hsw_uncore\"\n Driver Modules: \"intel_uncore\"\n Module Alias: \"pci:v00008086d00000A04sv0000103Csd00002248bc06sc00i00\"\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n\n17: PCI 1c.1: 0604 PCI bridge (Normal decode)\n [Created at pci.378]\n Unique ID: qTvu.CVz8txR9FbA\n SysFS ID: /devices/pci0000:00/0000:00:1c.1\n SysFS BusID: 0000:00:1c.1\n Hardware Class: bridge\n Model: \"Intel 8 Series PCI Express Root Port 2\"\n Vendor: pci 0x8086 \"Intel Corporation\"\n Device: pci 0x9c12 \"8 Series PCI Express Root Port 2\"\n SubVendor: pci 0x103c \"Hewlett-Packard Company\"\n SubDevice: pci 0x2248 \n Revision: 0xe4\n Driver: \"pcieport\"\n IRQ: 41 (no events)\n Module Alias: \"pci:v00008086d00009C12sv0000103Csd00002248bc06sc04i00\"\n Driver Info #0:\n Driver Status: shpchp is active\n Driver Activation Cmd: \"modprobe shpchp\"\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n\n18: PCI 03.0: 0403 Audio device\n [Created at pci.378]\n Unique ID: 3hqH.8ZYAv3K5mI6\n SysFS ID: /devices/pci0000:00/0000:00:03.0\n SysFS BusID: 0000:00:03.0\n Hardware Class: sound\n Model: \"Intel Haswell-ULT HD Audio Controller\"\n Vendor: pci 0x8086 \"Intel Corporation\"\n Device: pci 0x0a0c \"Haswell-ULT HD Audio Controller\"\n SubVendor: pci 0x103c \"Hewlett-Packard Company\"\n SubDevice: pci 0x2248 \n Revision: 0x0b\n Driver: \"snd_hda_intel\"\n Driver Modules: \"snd_hda_intel\"\n Memory Range: 0xc0810000-0xc0813fff (rw,non-prefetchable)\n IRQ: 51 (67 events)\n Module Alias: \"pci:v00008086d00000A0Csv0000103Csd00002248bc04sc03i00\"\n Driver Info #0:\n Driver Status: snd_hda_intel is active\n Driver Activation Cmd: \"modprobe snd_hda_intel\"\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n\n19: PCI 1d.0: 0c03 USB Controller (EHCI)\n [Created at pci.378]\n Unique ID: 1GTX.5hyHIEn38h0\n SysFS ID: /devices/pci0000:00/0000:00:1d.0\n SysFS BusID: 0000:00:1d.0\n Hardware Class: usb controller\n Model: \"Intel 8 Series USB EHCI #1\"\n Vendor: pci 0x8086 \"Intel Corporation\"\n Device: pci 0x9c26 \"8 Series USB EHCI #1\"\n SubVendor: pci 0x103c \"Hewlett-Packard Company\"\n SubDevice: pci 0x2248 \n Revision: 0x04\n Driver: \"ehci-pci\"\n Driver Modules: \"ehci_pci\"\n Memory Range: 0xc081d000-0xc081d3ff (rw,non-prefetchable)\n IRQ: 17 (33 events)\n Module Alias: \"pci:v00008086d00009C26sv0000103Csd00002248bc0Csc03i20\"\n Driver Info #0:\n Driver Status: ehci-hcd is active\n Driver Activation Cmd: \"modprobe ehci-hcd\"\n Driver Info #1:\n Driver Status: ehci_pci is active\n Driver Activation Cmd: \"modprobe ehci_pci\"\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n\n20: PCI 1f.6: 1180 Signal processing controller\n [Created at pci.378]\n Unique ID: ORVU.5gLxlqBxOw7\n SysFS ID: /devices/pci0000:00/0000:00:1f.6\n SysFS BusID: 0000:00:1f.6\n Hardware Class: unknown\n Model: \"Intel 8 Series Thermal\"\n Vendor: pci 0x8086 \"Intel Corporation\"\n Device: pci 0x9c24 \"8 Series Thermal\"\n SubVendor: pci 0x103c \"Hewlett-Packard Company\"\n SubDevice: pci 0x2248 \n Revision: 0x04\n Driver: \"intel_pch_thermal\"\n Driver Modules: \"intel_pch_thermal\"\n Memory Range: 0xc081b000-0xc081bfff (rw,non-prefetchable)\n IRQ: 18 (no events)\n Module Alias: \"pci:v00008086d00009C24sv0000103Csd00002248bc11sc80i00\"\n Driver Info #0:\n Driver Status: intel_pch_thermal is active\n Driver Activation Cmd: \"modprobe intel_pch_thermal\"\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n\n21: PCI 02.0: 0300 VGA compatible controller (VGA)\n [Created at pci.378]\n Unique ID: _Znp.ka6dvf5kTa8\n SysFS ID: /devices/pci0000:00/0000:00:02.0\n SysFS BusID: 0000:00:02.0\n Hardware Class: graphics card\n Device Name: \"32\"\n Model: \"Intel Haswell-ULT Integrated Graphics Controller\"\n Vendor: pci 0x8086 \"Intel Corporation\"\n Device: pci 0x0a16 \"Haswell-ULT Integrated Graphics Controller\"\n SubVendor: pci 0x103c \"Hewlett-Packard Company\"\n SubDevice: pci 0x2248 \n Revision: 0x0b\n Driver: \"i915\"\n Driver Modules: \"i915\"\n Memory Range: 0xc0000000-0xc03fffff (rw,non-prefetchable)\n Memory Range: 0xb0000000-0xbfffffff (ro,non-prefetchable)\n I/O Ports: 0x7000-0x703f (rw)\n Memory Range: 0x000c0000-0x000dffff (rw,non-prefetchable,disabled)\n IRQ: 47 (60 events)\n I/O Ports: 0x3c0-0x3df (rw)\n Module Alias: \"pci:v00008086d00000A16sv0000103Csd00002248bc03sc00i00\"\n Driver Info #0:\n Driver Status: i915 is active\n Driver Activation Cmd: \"modprobe i915\"\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n\n22: PCI 14.0: 0c03 USB Controller (XHCI)\n [Created at pci.378]\n Unique ID: MZfG.0F8dj3iQqa3\n SysFS ID: /devices/pci0000:00/0000:00:14.0\n SysFS BusID: 0000:00:14.0\n Hardware Class: usb controller\n Model: \"Intel 8 Series USB xHCI HC\"\n Vendor: pci 0x8086 \"Intel Corporation\"\n Device: pci 0x9c31 \"8 Series USB xHCI HC\"\n SubVendor: pci 0x103c \"Hewlett-Packard Company\"\n SubDevice: pci 0x2248 \n Revision: 0x04\n Driver: \"xhci_hcd\"\n Driver Modules: \"xhci_pci\"\n Memory Range: 0xc0800000-0xc080ffff (rw,non-prefetchable)\n IRQ: 46 (7703 events)\n Module Alias: \"pci:v00008086d00009C31sv0000103Csd00002248bc0Csc03i30\"\n Driver Info #0:\n Driver Status: xhci_pci is active\n Driver Activation Cmd: \"modprobe xhci_pci\"\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n\n23: PCI 1c.2: 0604 PCI bridge (Normal decode)\n [Created at pci.378]\n Unique ID: hoOk.EKseq4hZIMB\n SysFS ID: /devices/pci0000:00/0000:00:1c.2\n SysFS BusID: 0000:00:1c.2\n Hardware Class: bridge\n Model: \"Intel 8 Series PCI Express Root Port 3\"\n Vendor: pci 0x8086 \"Intel Corporation\"\n Device: pci 0x9c14 \"8 Series PCI Express Root Port 3\"\n SubVendor: pci 0x103c \"Hewlett-Packard Company\"\n SubDevice: pci 0x2248 \n Revision: 0xe4\n Driver: \"pcieport\"\n IRQ: 42 (no events)\n Module Alias: \"pci:v00008086d00009C14sv0000103Csd00002248bc06sc04i00\"\n Driver Info #0:\n Driver Status: shpchp is active\n Driver Activation Cmd: \"modprobe shpchp\"\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n\n24: PCI 1f.2: 0106 SATA controller (AHCI 1.0)\n [Created at pci.378]\n Unique ID: w7Y8.xfvW4auRA+2\n SysFS ID: /devices/pci0000:00/0000:00:1f.2\n SysFS BusID: 0000:00:1f.2\n Hardware Class: storage\n Model: \"Intel 8 Series SATA Controller 1 [AHCI mode]\"\n Vendor: pci 0x8086 \"Intel Corporation\"\n Device: pci 0x9c03 \"8 Series SATA Controller 1 [AHCI mode]\"\n SubVendor: pci 0x103c \"Hewlett-Packard Company\"\n SubDevice: pci 0x2248 \n Revision: 0x04\n Driver: \"ahci\"\n Driver Modules: \"ahci\"\n I/O Ports: 0x7088-0x708f (rw)\n I/O Ports: 0x7094-0x7097 (rw)\n I/O Ports: 0x7080-0x7087 (rw)\n I/O Ports: 0x7090-0x7093 (rw)\n I/O Ports: 0x7060-0x707f (rw)\n Memory Range: 0xc081c000-0xc081c7ff (rw,non-prefetchable)\n IRQ: 48 (627 events)\n Module Alias: \"pci:v00008086d00009C03sv0000103Csd00002248bc01sc06i01\"\n Driver Info #0:\n Driver Status: ahci is active\n Driver Activation Cmd: \"modprobe ahci\"\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n\n25: PCI 1c.0: 0604 PCI bridge (Normal decode)\n [Created at pci.378]\n Unique ID: z8Q3.Ag4fvoClBq9\n SysFS ID: /devices/pci0000:00/0000:00:1c.0\n SysFS BusID: 0000:00:1c.0\n Hardware Class: bridge\n Model: \"Intel 8 Series PCI Express Root Port 1\"\n Vendor: pci 0x8086 \"Intel Corporation\"\n Device: pci 0x9c10 \"8 Series PCI Express Root Port 1\"\n SubVendor: pci 0x103c \"Hewlett-Packard Company\"\n SubDevice: pci 0x2248 \n Revision: 0xe4\n Driver: \"pcieport\"\n IRQ: 40 (no events)\n Module Alias: \"pci:v00008086d00009C10sv0000103Csd00002248bc06sc04i00\"\n Driver Info #0:\n Driver Status: shpchp is active\n Driver Activation Cmd: \"modprobe shpchp\"\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n\n26: PCI 1f.0: 0601 ISA bridge\n [Created at pci.378]\n Unique ID: BUZT.QMXwKRhNq7E\n SysFS ID: /devices/pci0000:00/0000:00:1f.0\n SysFS BusID: 0000:00:1f.0\n Hardware Class: bridge\n Model: \"Intel 8 Series LPC Controller\"\n Vendor: pci 0x8086 \"Intel Corporation\"\n Device: pci 0x9c43 \"8 Series LPC Controller\"\n SubVendor: pci 0x103c \"Hewlett-Packard Company\"\n SubDevice: pci 0x2248 \n Revision: 0x04\n Driver: \"lpc_ich\"\n Driver Modules: \"lpc_ich\"\n Module Alias: \"pci:v00008086d00009C43sv0000103Csd00002248bc06sc01i00\"\n Driver Info #0:\n Driver Status: lpc_ich is active\n Driver Activation Cmd: \"modprobe lpc_ich\"\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n\n27: PCI 900.0: 0282 WLAN controller\n [Created at pci.378]\n Unique ID: S6TQ.bhUnM+Ctai7\n Parent ID: Z7uZ.G9l8oDwzL7C\n SysFS ID: /devices/pci0000:00/0000:00:1c.3/0000:09:00.0\n SysFS BusID: 0000:09:00.0\n Hardware Class: network\n Device Name: \"WLAN\"\n Model: \"Realtek RTL8723BE PCIe Wireless Network Adapter\"\n Vendor: pci 0x10ec \"Realtek Semiconductor Co., Ltd.\"\n Device: pci 0xb723 \"RTL8723BE PCIe Wireless Network Adapter\"\n SubVendor: pci 0x103c \"Hewlett-Packard Company\"\n SubDevice: pci 0x2231 \n Driver: \"rtl8723be\"\n Driver Modules: \"rtl8723be\"\n Device File: wlo1\n Features: WLAN\n I/O Ports: 0x3000-0x3fff (rw)\n Memory Range: 0xc0400000-0xc0403fff (rw,non-prefetchable)\n IRQ: 19 (no events)\n HW Address: 90:48:9a:af:6a:1b\n Permanent HW Address: 90:48:9a:af:6a:1b\n Link detected: no\n WLAN channels: 1 2 3 4 5 6 7 8 9 10 11 12 13\n WLAN frequencies: 2.412 2.417 2.422 2.427 2.432 2.437 2.442 2.447 2.452 2.457 2.462 2.467 2.472\n WLAN encryption modes: WEP40 WEP104 TKIP CCMP\n WLAN authentication modes: open sharedkey wpa-psk wpa-eap\n Module Alias: \"pci:v000010ECd0000B723sv0000103Csd00002231bc02sc80i00\"\n Driver Info #0:\n Driver Status: rtl8723be is active\n Driver Activation Cmd: \"modprobe rtl8723be\"\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n Attached to: #14 (PCI bridge)\n\n28: PCI 800.0: 0200 Ethernet controller\n [Created at pci.378]\n Unique ID: I+SI.fMnTBL88VH5\n Parent ID: hoOk.EKseq4hZIMB\n SysFS ID: /devices/pci0000:00/0000:00:1c.2/0000:08:00.0\n SysFS BusID: 0000:08:00.0\n Hardware Class: network\n Model: \"Realtek RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller\"\n Vendor: pci 0x10ec \"Realtek Semiconductor Co., Ltd.\"\n Device: pci 0x8168 \"RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller\"\n SubVendor: pci 0x103c \"Hewlett-Packard Company\"\n SubDevice: pci 0x2248 \n Revision: 0x10\n Driver: \"r8169\"\n Driver Modules: \"r8169\"\n Device File: enp8s0\n I/O Ports: 0x4000-0x4fff (rw)\n Memory Range: 0xc0504000-0xc0504fff (rw,non-prefetchable)\n Memory Range: 0xc0500000-0xc0503fff (rw,non-prefetchable)\n IRQ: 45 (31 events)\n HW Address: 64:51:06:b0:0a:f4\n Permanent HW Address: 64:51:06:b0:0a:f4\n Link detected: yes\n Module Alias: \"pci:v000010ECd00008168sv0000103Csd00002248bc02sc00i00\"\n Driver Info #0:\n Driver Status: r8169 is active\n Driver Activation Cmd: \"modprobe r8169\"\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n Attached to: #23 (PCI bridge)\n\n29: PCI 16.0: 0780 Communication controller\n [Created at pci.378]\n Unique ID: WnlC.HxZGBaBBa_4\n SysFS ID: /devices/pci0000:00/0000:00:16.0\n SysFS BusID: 0000:00:16.0\n Hardware Class: unknown\n Model: \"Intel 8 Series HECI #0\"\n Vendor: pci 0x8086 \"Intel Corporation\"\n Device: pci 0x9c3a \"8 Series HECI #0\"\n SubVendor: pci 0x103c \"Hewlett-Packard Company\"\n SubDevice: pci 0x2248 \n Revision: 0x04\n Driver: \"mei_me\"\n Driver Modules: \"mei_me\"\n Memory Range: 0xc0819000-0xc081901f (rw,non-prefetchable)\n IRQ: 49 (12 events)\n Module Alias: \"pci:v00008086d00009C3Asv0000103Csd00002248bc07sc80i00\"\n Driver Info #0:\n Driver Status: mei_me is active\n Driver Activation Cmd: \"modprobe mei_me\"\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n\n30: PCI 1b.0: 0403 Audio device\n [Created at pci.378]\n Unique ID: u1Nb.NJGI0ZQ5w_7\n SysFS ID: /devices/pci0000:00/0000:00:1b.0\n SysFS BusID: 0000:00:1b.0\n Hardware Class: sound\n Model: \"Intel 8 Series HD Audio Controller\"\n Vendor: pci 0x8086 \"Intel Corporation\"\n Device: pci 0x9c20 \"8 Series HD Audio Controller\"\n SubVendor: pci 0x103c \"Hewlett-Packard Company\"\n SubDevice: pci 0x2248 \n Revision: 0x04\n Driver: \"snd_hda_intel\"\n Driver Modules: \"snd_hda_intel\"\n Memory Range: 0xc0814000-0xc0817fff (rw,non-prefetchable)\n IRQ: 50 (555 events)\n Module Alias: \"pci:v00008086d00009C20sv0000103Csd00002248bc04sc03i00\"\n Driver Info #0:\n Driver Status: snd_hda_intel is active\n Driver Activation Cmd: \"modprobe snd_hda_intel\"\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n\n31: None 00.0: 10002 LCD Monitor\n [Created at monitor.125]\n Unique ID: rdCR.9u9BxCnguo2\n Parent ID: _Znp.ka6dvf5kTa8\n Hardware Class: monitor\n Model: \"LCD Monitor\"\n Vendor: AUO \n Device: eisa 0x41ec \n Resolution: 1366x768@60Hz\n Size: 344x193 mm\n Year of Manufacture: 2013\n Week of Manufacture: 49\n Detailed Timings #0:\n Resolution: 1366x768\n Horizontal: 1366 1374 1384 1558 (+8 +18 +192) -hsync\n Vertical: 768 771 772 816 (+3 +4 +48) -vsync\n Frequencies: 50.87 MHz, 32.65 kHz, 40.01 Hz\n Year of Manufacture: 2013\n Week of Manufacture: 49\n Detailed Timings #1:\n Resolution: 1366x768\n Horizontal: 1366 1374 1384 1558 (+8 +18 +192) -hsync\n Vertical: 768 771 772 816 (+3 +4 +48) -vsync\n Frequencies: 76.30 MHz, 48.97 kHz, 60.02 Hz\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n Attached to: #21 (VGA compatible controller)\n\n32: ISA(PnP) 00.0: 0000 Unclassified device\n [Created at isapnp.142]\n Unique ID: z9pp.B+yZ9Ve8gC1\n SysFS ID: /devices/pnp0/00:00\n SysFS BusID: 00:00\n Hardware Class: unknown\n Model: \"Unclassified device\"\n SubVendor: PNP \"PnP\"\n SubDevice: eisa 0x0c02 \n Config Status: cfg=new, avail=yes, need=no, active=unknown\n\n33: ISA(PnP) 00.0: 0000 Unclassified device\n [Created at isapnp.142]\n Unique ID: E349.BLEg2XC4+V0\n SysFS ID: /devices/pnp0/00:05\n SysFS BusID: 00:05\n Hardware Class: unknown\n Model: \"Unclassified device\"\n SubVendor: IFX \n SubDevice: eisa 0x0102 \n Config Status: cfg=new, avail=yes, need=no, active=unknown\n\n34: ISA(PnP) 00.0: 0000 Unclassified device\n [Created at isapnp.142]\n Unique ID: KiZ0.ealKjhMMg54\n SysFS ID: /devices/pnp0/00:03\n SysFS BusID: 00:03\n Hardware Class: unknown\n Model: \"Unclassified device\"\n SubVendor: HPQ \n SubDevice: eisa 0x8001 \n Config Status: cfg=new, avail=yes, need=no, active=unknown\n\n35: ISA(PnP) 00.0: 0000 Unclassified device\n [Created at isapnp.142]\n Unique ID: QL3u.B+yZ9Ve8gC1\n SysFS ID: /devices/pnp0/00:01\n SysFS BusID: 00:01\n Hardware Class: unknown\n Model: \"Unclassified device\"\n SubVendor: PNP \"PnP\"\n SubDevice: eisa 0x0c02 \n Config Status: cfg=new, avail=yes, need=no, active=unknown\n\n36: ISA(PnP) 00.0: 0000 Unclassified device\n [Created at isapnp.142]\n Unique ID: ntp4.7mJa8EtFKk7\n SysFS ID: /devices/pnp0/00:04\n SysFS BusID: 00:04\n Hardware Class: unknown\n Model: \"Unclassified device\"\n SubVendor: SYN \n SubDevice: eisa 0x301e \n Config Status: cfg=new, avail=yes, need=no, active=unknown\n\n37: ISA(PnP) 00.0: 0000 Unclassified device\n [Created at isapnp.142]\n Unique ID: tWJy.WYwRElrJa93\n SysFS ID: /devices/pnp0/00:02\n SysFS BusID: 00:02\n Hardware Class: unknown\n Model: \"Unclassified device\"\n SubVendor: PNP \"PnP\"\n SubDevice: eisa 0x0b00 \n Config Status: cfg=new, avail=yes, need=no, active=unknown\n\n38: SCSI 400.0: 10600 Disk\n [Created at block.245]\n Unique ID: hSuP.sZwmS+_jqR5\n Parent ID: MZfG.0F8dj3iQqa3\n SysFS ID: /class/block/sdb\n SysFS BusID: 4:0:0:0\n SysFS Device Link: /devices/pci0000:00/0000:00:14.0/usb2/2-2/2-2:1.0/host4/target4:0:0/4:0:0:0\n Hardware Class: disk\n Model: \"KIOXIA TransMemory\"\n Vendor: usb 0x30de \"KIOXIA\"\n Device: usb 0x6544 \"TransMemory\"\n Serial ID: \"0\"\n Driver: \"usb-storage\", \"sd\"\n Driver Modules: \"usb_storage\", \"sd_mod\"\n Device File: /dev/sdb (/dev/sg2)\n Device Files: /dev/sdb, /dev/disk/by-id/usb-KIOXIA_TransMemory_0022CFF6B8A6C461331718B1-0:0, /dev/disk/by-path/pci-0000:00:14.0-usb-0:2:1.0-scsi-0:0:0:0\n Device Number: block 8:16-8:31 (char 21:2)\n BIOS id: 0x80\n Geometry (Logical): CHS 14782/64/32\n Size: 30274560 sectors a 512 bytes\n Capacity: 14 GB (15500574720 bytes)\n Speed: 480 Mbps\n Geometry (BIOS EDD): CHS 1884/255/63\n Size (BIOS EDD): 30274559 sectors\n Geometry (BIOS Legacy): CHS 1023/255/63\n Module Alias: \"usb:v30DEp6544d0001dc00dsc00dp00ic08isc06ip50in00\"\n Driver Info #0:\n Driver Status: uas is active\n Driver Activation Cmd: \"modprobe uas\"\n Driver Info #1:\n Driver Status: usb_storage is active\n Driver Activation Cmd: \"modprobe usb_storage\"\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n Attached to: #22 (USB Controller)\n\n39: None 00.0: 11300 Partition\n [Created at block.434]\n Unique ID: h4pj.SE1wIdpsiiC\n Parent ID: hSuP.sZwmS+_jqR5\n SysFS ID: /class/block/sdb/sdb1\n Hardware Class: partition\n Model: \"Partition\"\n Device File: /dev/sdb1\n Device Files: /dev/sdb1, /dev/disk/by-id/usb-KIOXIA_TransMemory_0022CFF6B8A6C461331718B1-0:0-part1, /dev/disk/by-label/ISOIMAGE, /dev/disk/by-partuuid/0ec92a03-01, /dev/disk/by-path/pci-0000:00:14.0-usb-0:2:1.0-scsi-0:0:0:0-part1, /dev/disk/by-uuid/CE9D-92E6\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n Attached to: #38 (Disk)\n\n40: SCSI 100.0: 10602 CD-ROM (DVD)\n [Created at block.249]\n Unique ID: KD9E.7u0Yp8+kBZD\n Parent ID: w7Y8.xfvW4auRA+2\n SysFS ID: /class/block/sr0\n SysFS BusID: 1:0:0:0\n SysFS Device Link: /devices/pci0000:00/0000:00:1f.2/ata2/host1/target1:0:0/1:0:0:0\n Hardware Class: cdrom\n Model: \"hp DVDRAM GU90N\"\n Vendor: \"hp\"\n Device: \"DVDRAM GU90N\"\n Revision: \"U900\"\n Driver: \"ahci\", \"sr\"\n Driver Modules: \"ahci\", \"sr_mod\"\n Device File: /dev/sr0 (/dev/sg1)\n Device Files: /dev/sr0, /dev/cdrom, /dev/cdrw, /dev/disk/by-id/ata-hp_DVDRAM_GU90N_M5GE5S40028, /dev/disk/by-id/wwn-0x5001480000000000, /dev/disk/by-path/pci-0000:00:1f.2-ata-2, /dev/dvd, /dev/dvdrw\n Device Number: block 11:0 (char 21:1)\n Features: CD-R, CD-RW, DVD, DVD-R, DVD-RW, DVD-R DL, DVD+R, DVD+RW, DVD+R DL, DVD-RAM, MRW, MRW-W\n Drive status: no medium\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n Attached to: #24 (SATA controller)\n Drive Speed: 24\n\n41: IDE 00.0: 10600 Disk\n [Created at block.245]\n Unique ID: 3OOL.g05FlevN1o1\n Parent ID: w7Y8.xfvW4auRA+2\n SysFS ID: /class/block/sda\n SysFS BusID: 0:0:0:0\n SysFS Device Link: /devices/pci0000:00/0000:00:1f.2/ata1/host0/target0:0:0/0:0:0:0\n Hardware Class: disk\n Model: \"ST500LT012-1DG14\"\n Device: \"ST500LT012-1DG14\"\n Revision: \"YAM1\"\n Serial ID: \"S3P9A80F\"\n Driver: \"ahci\", \"sd\"\n Driver Modules: \"ahci\", \"sd_mod\"\n Device File: /dev/sda\n Device Files: /dev/sda, /dev/disk/by-id/ata-ST500LT012-1DG142_S3P9A80F, /dev/disk/by-id/wwn-0x5000c50074f110eb, /dev/disk/by-path/pci-0000:00:1f.2-ata-1\n Device Number: block 8:0-8:15\n BIOS id: 0x81\n Geometry (Logical): CHS 60801/255/63\n Size: 976773168 sectors a 512 bytes\n Capacity: 465 GB (500107862016 bytes)\n Geometry (BIOS EDD): CHS 969021/16/63\n Size (BIOS EDD): 976773168 sectors\n Geometry (BIOS Legacy): CHS 1022/255/63\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n Attached to: #24 (SATA controller)\n\n42: None 00.0: 11300 Partition\n [Created at block.434]\n Unique ID: bdUI.SE1wIdpsiiC\n Parent ID: 3OOL.g05FlevN1o1\n SysFS ID: /class/block/sda/sda1\n Hardware Class: partition\n Model: \"Partition\"\n Device File: /dev/sda1\n Device Files: /dev/sda1, /dev/disk/by-id/ata-ST500LT012-1DG142_S3P9A80F-part1, /dev/disk/by-id/wwn-0x5000c50074f110eb-part1, /dev/disk/by-label/System\\x20Reserved, /dev/disk/by-partuuid/38d4fbef-01, /dev/disk/by-path/pci-0000:00:1f.2-ata-1-part1, /dev/disk/by-uuid/C6ACBD21ACBD0CC5\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n Attached to: #41 (Disk)\n\n43: None 00.0: 11300 Partition\n [Created at block.434]\n Unique ID: 2pkM.SE1wIdpsiiC\n Parent ID: 3OOL.g05FlevN1o1\n SysFS ID: /class/block/sda/sda2\n Hardware Class: partition\n Model: \"Partition\"\n Device File: /dev/sda2\n Device Files: /dev/sda2, /dev/disk/by-id/ata-ST500LT012-1DG142_S3P9A80F-part2, /dev/disk/by-id/wwn-0x5000c50074f110eb-part2, /dev/disk/by-label/WINDOWS7, /dev/disk/by-partuuid/38d4fbef-02, /dev/disk/by-path/pci-0000:00:1f.2-ata-1-part2, /dev/disk/by-uuid/E6F4BE1FF4BDF243\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n Attached to: #41 (Disk)\n\n44: None 00.0: 11300 Partition\n [Created at block.434]\n Unique ID: W__Q.SE1wIdpsiiC\n Parent ID: 3OOL.g05FlevN1o1\n SysFS ID: /class/block/sda/sda3\n Hardware Class: partition\n Model: \"Partition\"\n Device File: /dev/sda3\n Device Files: /dev/sda3, /dev/disk/by-id/ata-ST500LT012-1DG142_S3P9A80F-part3, /dev/disk/by-id/wwn-0x5000c50074f110eb-part3, /dev/disk/by-label/DATOS, /dev/disk/by-partuuid/38d4fbef-03, /dev/disk/by-path/pci-0000:00:1f.2-ata-1-part3, /dev/disk/by-uuid/EA64BF7D64BF4AD9\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n Attached to: #41 (Disk)\n\n45: USB 00.1: 0000 Unclassified device\n [Created at usb.122]\n Unique ID: 3QZi.KHC14zaenZB\n Parent ID: pBe4.2DFUsyrieMD\n SysFS ID: /devices/pci0000:00/0000:00:14.0/usb2/2-7/2-7:1.1\n SysFS BusID: 2-7:1.1\n Hardware Class: unknown\n Model: \"Lite-On HP HD Webcam\"\n Hotplug: USB\n Vendor: usb 0x04ca \"Lite-On Technology Corp.\"\n Device: usb 0x7032 \"HP HD Webcam\"\n Revision: \"0.04\"\n Serial ID: \"200901010001\"\n Driver: \"uvcvideo\"\n Driver Modules: \"uvcvideo\"\n Speed: 480 Mbps\n Module Alias: \"usb:v04CAp7032d0004dcEFdsc02dp01ic0Eisc02ip00in01\"\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n Attached to: #53 (Hub)\n\n46: USB 00.0: 11600 Fingerprint Reader\n [Created at usb.122]\n Unique ID: +rmv.oOUId9nesq9\n Parent ID: pBe4.2DFUsyrieMD\n SysFS ID: /devices/pci0000:00/0000:00:14.0/usb2/2-5/2-5:1.0\n SysFS BusID: 2-5:1.0\n Model: \"Validity Sensors VFS495 Fingerprint Reader\"\n Hotplug: USB\n Vendor: usb 0x138a \"Validity Sensors, Inc.\"\n Device: usb 0x003f \"VFS495 Fingerprint Reader\"\n Revision: \"1.04\"\n Serial ID: \"00b0685ccb93\"\n Speed: 12 Mbps\n Module Alias: \"usb:v138Ap003Fd0104dcFFdsc12dpFFicFFisc00ip00in00\"\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n Attached to: #53 (Hub)\n\n47: USB 00.0: 10a00 Hub\n [Created at usb.122]\n Unique ID: uIhY.xYNhIwdOaa6\n Parent ID: MZfG.0F8dj3iQqa3\n SysFS ID: /devices/pci0000:00/0000:00:14.0/usb3/3-0:1.0\n SysFS BusID: 3-0:1.0\n Hardware Class: hub\n Model: \"Linux Foundation 3.0 root hub\"\n Hotplug: USB\n Vendor: usb 0x1d6b \"Linux Foundation\"\n Device: usb 0x0003 \"3.0 root hub\"\n Revision: \"4.09\"\n Serial ID: \"0000:00:14.0\"\n Driver: \"hub\"\n Driver Modules: \"usbcore\"\n Module Alias: \"usb:v1D6Bp0003d0409dc09dsc00dp03ic09isc00ip00in00\"\n Driver Info #0:\n Driver Status: usbcore is active\n Driver Activation Cmd: \"modprobe usbcore\"\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n Attached to: #22 (USB Controller)\n\n48: USB 00.1: 11500 Bluetooth Device\n [Created at usb.122]\n Unique ID: 0vOp.dpnCeh_S1H9\n Parent ID: pBe4.2DFUsyrieMD\n SysFS ID: /devices/pci0000:00/0000:00:14.0/usb2/2-4/2-4:1.1\n SysFS BusID: 2-4:1.1\n Hardware Class: bluetooth\n Model: \"Realtek Bluetooth Radio\"\n Hotplug: USB\n Vendor: usb 0x0bda \"Realtek Semiconductor Corp.\"\n Device: usb 0xb001 \"Bluetooth Radio\"\n Revision: \"2.00\"\n Serial ID: \"00e04c000001\"\n Driver: \"btusb\"\n Driver Modules: \"btusb\"\n Speed: 12 Mbps\n Module Alias: \"usb:v0BDApB001d0200dcE0dsc01dp01icE0isc01ip01in01\"\n Driver Info #0:\n Driver Status: btusb is active\n Driver Activation Cmd: \"modprobe btusb\"\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n Attached to: #53 (Hub)\n\n50: USB 00.0: 10a00 Hub\n [Created at usb.122]\n Unique ID: k4bc.oLWCeziExdF\n Parent ID: 1GTX.5hyHIEn38h0\n SysFS ID: /devices/pci0000:00/0000:00:1d.0/usb1/1-0:1.0\n SysFS BusID: 1-0:1.0\n Hardware Class: hub\n Model: \"Linux Foundation 2.0 root hub\"\n Hotplug: USB\n Vendor: usb 0x1d6b \"Linux Foundation\"\n Device: usb 0x0002 \"2.0 root hub\"\n Revision: \"4.09\"\n Serial ID: \"0000:00:1d.0\"\n Driver: \"hub\"\n Driver Modules: \"usbcore\"\n Speed: 480 Mbps\n Module Alias: \"usb:v1D6Bp0002d0409dc09dsc00dp00ic09isc00ip00in00\"\n Driver Info #0:\n Driver Status: usbcore is active\n Driver Activation Cmd: \"modprobe usbcore\"\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n Attached to: #19 (USB Controller)\n\n52: USB 00.0: 10a00 Hub\n [Created at usb.122]\n Unique ID: ADDn.Wkj53szWOaA\n Parent ID: k4bc.oLWCeziExdF\n SysFS ID: /devices/pci0000:00/0000:00:1d.0/usb1/1-1/1-1:1.0\n SysFS BusID: 1-1:1.0\n Hardware Class: hub\n Model: \"Intel Hub\"\n Hotplug: USB\n Vendor: usb 0x8087 \"Intel Corp.\"\n Device: usb 0x8000 \n Revision: \"0.04\"\n Driver: \"hub\"\n Driver Modules: \"usbcore\"\n Speed: 480 Mbps\n Module Alias: \"usb:v8087p8000d0004dc09dsc00dp01ic09isc00ip00in00\"\n Driver Info #0:\n Driver Status: usbcore is active\n Driver Activation Cmd: \"modprobe usbcore\"\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n Attached to: #50 (Hub)\n\n53: USB 00.0: 10a00 Hub\n [Created at usb.122]\n Unique ID: pBe4.2DFUsyrieMD\n Parent ID: MZfG.0F8dj3iQqa3\n SysFS ID: /devices/pci0000:00/0000:00:14.0/usb2/2-0:1.0\n SysFS BusID: 2-0:1.0\n Hardware Class: hub\n Model: \"Linux Foundation 2.0 root hub\"\n Hotplug: USB\n Vendor: usb 0x1d6b \"Linux Foundation\"\n Device: usb 0x0002 \"2.0 root hub\"\n Revision: \"4.09\"\n Serial ID: \"0000:00:14.0\"\n Driver: \"hub\"\n Driver Modules: \"usbcore\"\n Speed: 480 Mbps\n Module Alias: \"usb:v1D6Bp0002d0409dc09dsc00dp01ic09isc00ip00in00\"\n Driver Info #0:\n Driver Status: usbcore is active\n Driver Activation Cmd: \"modprobe usbcore\"\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n Attached to: #22 (USB Controller)\n\n55: PS/2 00.0: 10800 Keyboard\n [Created at input.226]\n Unique ID: nLyy.+49ps10DtUF\n Hardware Class: keyboard\n Model: \"AT Translated Set 2 keyboard\"\n Vendor: 0x0001 \n Device: 0x0001 \"AT Translated Set 2 keyboard\"\n Compatible to: int 0x0211 0x0001\n Device File: /dev/input/event0\n Device Number: char 13:64\n Driver Info #0:\n XkbRules: xfree86\n XkbModel: pc104\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n\n56: PS/2 00.0: 10500 PS/2 Mouse\n [Created at input.249]\n Unique ID: AH6Q.ZHI3OT7LsxA\n Hardware Class: mouse\n Model: \"SynPS/2 Synaptics TouchPad\"\n Vendor: 0x0002 \n Device: 0x0007 \"SynPS/2 Synaptics TouchPad\"\n Compatible to: int 0x0210 0x0002\n Device File: /dev/input/mice (/dev/input/mouse0)\n Device Files: /dev/input/mice, /dev/input/mouse0, /dev/input/event5\n Device Number: char 13:63 (char 13:32)\n Driver Info #0:\n Buttons: 2\n Wheels: 0\n XFree86 Protocol: explorerps/2\n GPM Protocol: exps2\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n\n57: None 00.0: 10d00 Joystick\n [Created at input.312]\n Unique ID: 2oHd.lCw1nasASu4\n Hardware Class: joystick\n Model: \"ST LIS3LV02DL Accelerometer\"\n Device: \"ST LIS3LV02DL Accelerometer\"\n Device File: /dev/input/event14 (/dev/input/js0)\n Device Files: /dev/input/event14, /dev/input/js0, /dev/input/by-path/platform-lis3lv02d-event\n Device Number: char 13:78\n Buttons: 0\n Axes: 3\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n\n58: None 00.0: 10103 CPU\n [Created at cpu.460]\n Unique ID: rdCR.j8NaKXDZtZ6\n Hardware Class: cpu\n Arch: Intel\n Vendor: \"GenuineIntel\"\n Model: 6.69.1 \"Intel(R) Core(TM) i5-4210U CPU @ 1.70GHz\"\n Features: fpu,vme,de,pse,tsc,msr,pae,mce,cx8,apic,sep,mtrr,pge,mca,cmov,pat,pse36,clflush,dts,acpi,mmx,fxsr,sse,sse2,ss,ht,tm,pbe,nx,pdpe1gb,rdtscp,lm,constant_tsc,arch_perfmon,pebs,bts,xtopology,nonstop_tsc,aperfmperf,pni,pclmulqdq,dtes64,monitor,ds_cpl,vmx,est,tm2,ssse3,sdbg,fma,cx16,xtpr,pdcm,sse4_1,sse4_2,movbe,popcnt,tsc_deadline_timer,aes,xsave,avx,f16c,rdrand,lahf_lm,abm,epb,ssbd,ibrs,ibpb,stibp,tpr_shadow,vnmi,flexpriority,ept,vpid,fsgsbase,tsc_adjust,bmi1,avx2,smep,bmi2,erms,invpcid,xsaveopt,dtherm,ida,arat,pln,pts,md_clear,flush_l1d\n Clock: 2700 MHz\n BogoMips: 4788.85\n Cache: 3072 kb\n Units/Processor: 16\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n\n59: None 01.0: 10103 CPU\n [Created at cpu.460]\n Unique ID: wkFv.j8NaKXDZtZ6\n Hardware Class: cpu\n Arch: Intel\n Vendor: \"GenuineIntel\"\n Model: 6.69.1 \"Intel(R) Core(TM) i5-4210U CPU @ 1.70GHz\"\n Features: fpu,vme,de,pse,tsc,msr,pae,mce,cx8,apic,sep,mtrr,pge,mca,cmov,pat,pse36,clflush,dts,acpi,mmx,fxsr,sse,sse2,ss,ht,tm,pbe,nx,pdpe1gb,rdtscp,lm,constant_tsc,arch_perfmon,pebs,bts,xtopology,nonstop_tsc,aperfmperf,pni,pclmulqdq,dtes64,monitor,ds_cpl,vmx,est,tm2,ssse3,sdbg,fma,cx16,xtpr,pdcm,sse4_1,sse4_2,movbe,popcnt,tsc_deadline_timer,aes,xsave,avx,f16c,rdrand,lahf_lm,abm,epb,ssbd,ibrs,ibpb,stibp,tpr_shadow,vnmi,flexpriority,ept,vpid,fsgsbase,tsc_adjust,bmi1,avx2,smep,bmi2,erms,invpcid,xsaveopt,dtherm,ida,arat,pln,pts,md_clear,flush_l1d\n Clock: 2519 MHz\n BogoMips: 4788.85\n Cache: 3072 kb\n Units/Processor: 16\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n\n60: None 02.0: 10103 CPU\n [Created at cpu.460]\n Unique ID: +rIN.j8NaKXDZtZ6\n Hardware Class: cpu\n Arch: Intel\n Vendor: \"GenuineIntel\"\n Model: 6.69.1 \"Intel(R) Core(TM) i5-4210U CPU @ 1.70GHz\"\n Features: fpu,vme,de,pse,tsc,msr,pae,mce,cx8,apic,sep,mtrr,pge,mca,cmov,pat,pse36,clflush,dts,acpi,mmx,fxsr,sse,sse2,ss,ht,tm,pbe,nx,pdpe1gb,rdtscp,lm,constant_tsc,arch_perfmon,pebs,bts,xtopology,nonstop_tsc,aperfmperf,pni,pclmulqdq,dtes64,monitor,ds_cpl,vmx,est,tm2,ssse3,sdbg,fma,cx16,xtpr,pdcm,sse4_1,sse4_2,movbe,popcnt,tsc_deadline_timer,aes,xsave,avx,f16c,rdrand,lahf_lm,abm,epb,ssbd,ibrs,ibpb,stibp,tpr_shadow,vnmi,flexpriority,ept,vpid,fsgsbase,tsc_adjust,bmi1,avx2,smep,bmi2,erms,invpcid,xsaveopt,dtherm,ida,arat,pln,pts,md_clear,flush_l1d\n Clock: 2275 MHz\n BogoMips: 4788.85\n Cache: 3072 kb\n Units/Processor: 16\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n\n61: None 03.0: 10103 CPU\n [Created at cpu.460]\n Unique ID: 4zLr.j8NaKXDZtZ6\n Hardware Class: cpu\n Arch: Intel\n Vendor: \"GenuineIntel\"\n Model: 6.69.1 \"Intel(R) Core(TM) i5-4210U CPU @ 1.70GHz\"\n Features: fpu,vme,de,pse,tsc,msr,pae,mce,cx8,apic,sep,mtrr,pge,mca,cmov,pat,pse36,clflush,dts,acpi,mmx,fxsr,sse,sse2,ss,ht,tm,pbe,nx,pdpe1gb,rdtscp,lm,constant_tsc,arch_perfmon,pebs,bts,xtopology,nonstop_tsc,aperfmperf,pni,pclmulqdq,dtes64,monitor,ds_cpl,vmx,est,tm2,ssse3,sdbg,fma,cx16,xtpr,pdcm,sse4_1,sse4_2,movbe,popcnt,tsc_deadline_timer,aes,xsave,avx,f16c,rdrand,lahf_lm,abm,epb,ssbd,ibrs,ibpb,stibp,tpr_shadow,vnmi,flexpriority,ept,vpid,fsgsbase,tsc_adjust,bmi1,avx2,smep,bmi2,erms,invpcid,xsaveopt,dtherm,ida,arat,pln,pts,md_clear,flush_l1d\n Clock: 1839 MHz\n BogoMips: 4788.85\n Cache: 3072 kb\n Units/Processor: 16\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n\n62: None 00.0: 10700 Loopback\n [Created at net.126]\n Unique ID: ZsBS.GQNx7L4uPNA\n SysFS ID: /class/net/lo\n Hardware Class: network interface\n Model: \"Loopback network interface\"\n Device File: lo\n Link detected: yes\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n\n63: None 00.0: 10701 Ethernet\n [Created at net.126]\n Unique ID: zejA.ndpeucax6V1\n Parent ID: I+SI.fMnTBL88VH5\n SysFS ID: /class/net/enp8s0\n SysFS Device Link: /devices/pci0000:00/0000:00:1c.2/0000:08:00.0\n Hardware Class: network interface\n Model: \"Ethernet network interface\"\n Driver: \"r8169\"\n Driver Modules: \"r8169\"\n Device File: enp8s0\n HW Address: 64:51:06:b0:0a:f4\n Permanent HW Address: 64:51:06:b0:0a:f4\n Link detected: yes\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n Attached to: #28 (Ethernet controller)\n\n64: None 01.0: 10701 Ethernet\n [Created at net.126]\n Unique ID: VnCh.ndpeucax6V1\n Parent ID: S6TQ.bhUnM+Ctai7\n SysFS ID: /class/net/wlo1\n SysFS Device Link: /devices/pci0000:00/0000:00:1c.3/0000:09:00.0\n Hardware Class: network interface\n Model: \"Ethernet network interface\"\n Driver: \"rtl8723be\"\n Driver Modules: \"rtl8723be\"\n Device File: wlo1\n HW Address: 90:48:9a:af:6a:1b\n Permanent HW Address: 90:48:9a:af:6a:1b\n Link detected: no\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n Attached to: #27 (WLAN controller)\n", "lshw": {"capabilities": {"dmi-2.7": "DMI version 2.7", "smbios-2.7": "SMBIOS version 2.7"}, "children": [{"children": [{"capabilities": {"acpi": "ACPI", "biosbootspecification": "BIOS boot specification", "bootselect": "Selectable boot path", "cdboot": "Booting from CD-ROM/DVD", "edd": "Enhanced Disk Drive extensions", "int14serial": "INT14 serial line control", "int17printer": "INT17 printer control", "int5printscreen": "Print Screen key", "int9keyboard": "i8042 keyboard controller", "netboot": "Function-key initiated network service boot", "pci": "PCI bus", "pcmcia": "PCMCIA/PCCard", "shadowing": "BIOS shadowing", "smartbattery": "Smart battery", "uefi": "UEFI specification is supported", "upgrade": "BIOS EEPROM can be upgraded", "usb": "USB legacy emulation"}, "capacity": 6225920, "claimed": true, "class": "memory", "date": "06/17/2014", "description": "BIOS", "id": "firmware", "physid": "c", "size": 65536, "units": "bytes", "vendor": "Hewlett-Packard", "version": "M74 Ver. 01.02"}, {"businfo": "cpu@0", "capabilities": {"abm": true, "acpi": "thermal control (ACPI)", "aes": true, "aperfmperf": true, "apic": "on-chip advanced programmable interrupt controller (APIC)", "arat": true, "arch_perfmon": true, "avx": true, "avx2": true, "bmi1": true, "bmi2": true, "bts": true, "clflush": true, "cmov": "conditional move instruction", "constant_tsc": true, "cpufreq": "CPU Frequency scaling", "cx16": true, "cx8": "compare and exchange 8-byte", "de": "debugging extensions", "ds_cpl": true, "dtes64": true, "dtherm": true, "dts": "debug trace and EMON store MSRs", "epb": true, "ept": true, "erms": true, "est": true, "f16c": true, "flexpriority": true, "flush_l1d": true, "fma": true, "fpu": "mathematical co-processor", "fpu_exception": "FPU exceptions reporting", "fsgsbase": true, "fxsr": "fast floating point save/restore", "ht": "HyperThreading", "ibpb": true, "ibrs": true, "ida": true, "invpcid": true, "lahf_lm": true, "mca": "machine check architecture", "mce": "machine check exceptions", "md_clear": true, "mmx": "multimedia extensions (MMX)", "monitor": true, "movbe": true, "msr": "model-specific registers", "mtrr": "memory type range registers", "nonstop_tsc": true, "nx": "no-execute bit (NX)", "pae": "4GB+ memory addressing (Physical Address Extension)", "pat": "page attribute table", "pbe": "pending break event", "pclmulqdq": true, "pdcm": true, "pdpe1gb": true, "pebs": true, "pge": "page global enable", "pln": true, "pni": true, "popcnt": true, "pse": "page size extensions", "pse36": "36-bit page size extensions", "pts": true, "rdrand": true, "rdtscp": true, "sdbg": true, "sep": "fast system calls", "smep": true, "ss": "self-snoop", "ssbd": true, "sse": "streaming SIMD extensions (SSE)", "sse2": "streaming SIMD extensions (SSE2)", "sse4_1": true, "sse4_2": true, "ssse3": true, "stibp": true, "tm": "thermal interrupt and status", "tm2": true, "tpr_shadow": true, "tsc": "time stamp counter", "tsc_adjust": true, "tsc_deadline_timer": true, "vme": "virtual mode extensions", "vmx": "CPU virtualization (Vanderpool)", "vnmi": true, "vpid": true, "wp": true, "x86-64": "64bits extensions (x86-64)", "xsave": true, "xsaveopt": true, "xtopology": true, "xtpr": true}, "capacity": 2700000000, "children": [{"capabilities": {"asynchronous": "Asynchronous", "instruction": "Instruction cache", "internal": "Internal", "write-back": "Write-back"}, "capacity": 32768, "claimed": true, "class": "memory", "configuration": {"level": "1"}, "description": "L1 cache", "handle": "DMI:0008", "id": "cache:0", "physid": "8", "size": 32768, "slot": "L1 Cache", "units": "bytes"}, {"capabilities": {"asynchronous": "Asynchronous", "internal": "Internal", "unified": "Unified cache", "write-back": "Write-back"}, "capacity": 262144, "claimed": true, "class": "memory", "configuration": {"level": "2"}, "description": "L2 cache", "handle": "DMI:0009", "id": "cache:1", "physid": "9", "size": 262144, "slot": "L2 Cache", "units": "bytes"}, {"capabilities": {"asynchronous": "Asynchronous", "internal": "Internal", "unified": "Unified cache", "write-back": "Write-back"}, "capacity": 3145728, "claimed": true, "class": "memory", "configuration": {"level": "3"}, "description": "L3 cache", "handle": "DMI:000A", "id": "cache:2", "physid": "a", "size": 3145728, "slot": "L3 Cache", "units": "bytes"}, {"capabilities": {"logical": "Logical CPU"}, "claimed": true, "class": "processor", "description": "Logical CPU", "handle": "CPU:2.0", "id": "logicalcpu:0", "physid": "2.1", "width": 64}, {"capabilities": {"logical": "Logical CPU"}, "claimed": true, "class": "processor", "description": "Logical CPU", "handle": "CPU:2.1", "id": "logicalcpu:1", "physid": "2.2", "width": 64}, {"capabilities": {"logical": "Logical CPU"}, "claimed": true, "class": "processor", "description": "Logical CPU", "handle": "CPU:2.2", "id": "logicalcpu:2", "physid": "2.3", "width": 64}, {"capabilities": {"logical": "Logical CPU"}, "claimed": true, "class": "processor", "description": "Logical CPU", "handle": "CPU:2.3", "id": "logicalcpu:3", "physid": "2.4", "width": 64}, {"capabilities": {"logical": "Logical CPU"}, "claimed": true, "class": "processor", "description": "Logical CPU", "handle": "CPU:2.4", "id": "logicalcpu:4", "physid": "2.5", "width": 64}, {"capabilities": {"logical": "Logical CPU"}, "claimed": true, "class": "processor", "description": "Logical CPU", "handle": "CPU:2.5", "id": "logicalcpu:5", "physid": "2.6", "width": 64}, {"capabilities": {"logical": "Logical CPU"}, "claimed": true, "class": "processor", "description": "Logical CPU", "handle": "CPU:2.6", "id": "logicalcpu:6", "physid": "2.7", "width": 64}, {"capabilities": {"logical": "Logical CPU"}, "claimed": true, "class": "processor", "description": "Logical CPU", "handle": "CPU:2.7", "id": "logicalcpu:7", "physid": "2.8", "width": 64}, {"capabilities": {"logical": "Logical CPU"}, "claimed": true, "class": "processor", "description": "Logical CPU", "handle": "CPU:2.8", "id": "logicalcpu:8", "physid": "2.9", "width": 64}, {"capabilities": {"logical": "Logical CPU"}, "claimed": true, "class": "processor", "description": "Logical CPU", "handle": "CPU:2.9", "id": "logicalcpu:9", "physid": "2.a", "width": 64}, {"capabilities": {"logical": "Logical CPU"}, "claimed": true, "class": "processor", "description": "Logical CPU", "handle": "CPU:2.10", "id": "logicalcpu:10", "physid": "2.b", "width": 64}, {"capabilities": {"logical": "Logical CPU"}, "claimed": true, "class": "processor", "description": "Logical CPU", "handle": "CPU:2.11", "id": "logicalcpu:11", "physid": "2.c", "width": 64}, {"capabilities": {"logical": "Logical CPU"}, "claimed": true, "class": "processor", "description": "Logical CPU", "handle": "CPU:2.12", "id": "logicalcpu:12", "physid": "2.d", "width": 64}, {"capabilities": {"logical": "Logical CPU"}, "claimed": true, "class": "processor", "description": "Logical CPU", "handle": "CPU:2.13", "id": "logicalcpu:13", "physid": "2.e", "width": 64}, {"capabilities": {"logical": "Logical CPU"}, "claimed": true, "class": "processor", "description": "Logical CPU", "handle": "CPU:2.14", "id": "logicalcpu:14", "physid": "2.f", "width": 64}, {"capabilities": {"logical": "Logical CPU"}, "claimed": true, "class": "processor", "description": "Logical CPU", "handle": "CPU:2.15", "id": "logicalcpu:15", "physid": "2.10", "width": 64}], "claimed": true, "class": "processor", "clock": 100000000, "configuration": {"cores": "2", "enabledcores": "2", "id": "2", "threads": "4"}, "description": "CPU", "handle": "DMI:0007", "id": "cpu", "physid": "7", "product": "Intel(R) Core(TM) i5-4210U CPU @ 1.70GHz", "serial": "0004-0651-0000-0000-0000-0000", "size": 1494140000, "slot": "U3E1", "units": "Hz", "vendor": "Intel Corp.", "version": "6.5.1", "width": 64}, {"capabilities": {"asynchronous": "Asynchronous", "data": "Data cache", "internal": "Internal", "write-back": "Write-back"}, "capacity": 32768, "claimed": true, "class": "memory", "configuration": {"level": "1"}, "description": "L1 cache", "handle": "DMI:0006", "id": "cache", "physid": "6", "size": 32768, "slot": "L1 Cache", "units": "bytes"}, {"children": [{"claimed": true, "class": "memory", "clock": 1600000000, "description": "SODIMM DDR3 Synchronous 1600 MHz (0.6 ns)", "handle": "DMI:0001", "id": "bank:0", "physid": "0", "product": "8KTF51264HZ-1G6N1", "serial": "18503423", "size": 4294967296, "slot": "Bottom-Slot 1(left)", "units": "bytes", "vendor": "Micron", "width": 64}, {"claimed": true, "class": "memory", "clock": 1600000000, "description": "SODIMM DDR3 Synchronous 1600 MHz (0.6 ns)", "handle": "DMI:0003", "id": "bank:1", "physid": "1", "product": "8KTF51264HZ-1G6N1", "serial": "18651324", "size": 4294967296, "slot": "Bottom-Slot 2(right)", "units": "bytes", "vendor": "Micron", "width": 64}], "claimed": true, "class": "memory", "description": "System Memory", "handle": "DMI:0000", "id": "memory", "physid": "0", "size": 8589934592, "slot": "System board or motherboard", "units": "bytes"}, {"businfo": "pci@0000:00:00.0", "children": [{"businfo": "pci@0000:00:02.0", "capabilities": {"bus_master": "bus mastering", "cap_list": "PCI capabilities listing", "msi": "Message Signalled Interrupts", "pm": "Power Management", "rom": "extension ROM", "vga_controller": true}, "claimed": true, "class": "display", "clock": 33000000, "configuration": {"driver": "i915", "latency": "0"}, "description": "VGA compatible controller", "handle": "PCI:0000:00:02.0", "id": "display", "physid": "2", "product": "Haswell-ULT Integrated Graphics Controller", "vendor": "Intel Corporation", "version": "0b", "width": 64}, {"businfo": "pci@0000:00:03.0", "capabilities": {"bus_master": "bus mastering", "cap_list": "PCI capabilities listing", "msi": "Message Signalled Interrupts", "pciexpress": "PCI Express", "pm": "Power Management"}, "claimed": true, "class": "multimedia", "clock": 33000000, "configuration": {"driver": "snd_hda_intel", "latency": "0"}, "description": "Audio device", "handle": "PCI:0000:00:03.0", "id": "multimedia:0", "physid": "3", "product": "Haswell-ULT HD Audio Controller", "vendor": "Intel Corporation", "version": "0b", "width": 64}, {"businfo": "pci@0000:00:14.0", "capabilities": {"bus_master": "bus mastering", "cap_list": "PCI capabilities listing", "msi": "Message Signalled Interrupts", "pm": "Power Management", "xhci": true}, "children": [{"businfo": "usb@2", "capabilities": {"usb-2.00": "USB 2.0"}, "children": [{"businfo": "usb@2:2", "capabilities": {"emulated": "Emulated device", "scsi": "SCSI", "usb-2.00": "USB 2.0"}, "children": [{"businfo": "scsi@4:0.0.0", "capabilities": {"removable": "support is removable"}, "children": [{"capabilities": {"partitioned": "Partitioned disk", "partitioned:dos": "MS-DOS partition table"}, "children": [{"capabilities": {"bootable": "Bootable partition (active)", "fat": "Windows FAT", "initialized": "initialized volume", "primary": "Primary partition"}, "capacity": 15499526144, "claimed": true, "class": "volume", "configuration": {"FATs": "2", "filesystem": "fat", "label": "ISOIMAGE", "mount.fstype": "vfat", "mount.options": "ro,noatime,fmask=0022,dmask=0022,codepage=437,iocharset=ascii,shortname=mixed,utf8,errors=remount-ro", "state": "mounted"}, "description": "Windows FAT volume", "dev": "8:17", "id": "volume", "logicalname": ["/dev/sdb1", "/lib/live/mount/medium"], "physid": "1", "serial": "ce9d-92e6", "size": 15496820736, "vendor": "SYSLINUX", "version": "FAT32"}], "claimed": true, "class": "disk", "configuration": {"signature": "0ec92a03"}, "dev": "8:16", "id": "medium", "logicalname": "/dev/sdb", "physid": "0", "size": 15500574720, "units": "bytes"}], "claimed": true, "class": "disk", "configuration": {"ansiversion": "6", "logicalsectorsize": "512", "sectorsize": "512"}, "description": "SCSI Disk", "dev": "8:16", "handle": "SCSI:04:00:00:00", "id": "disk", "logicalname": "/dev/sdb", "physid": "0.0.0", "product": "TransMemory", "serial": "0", "size": 15500574720, "units": "bytes", "vendor": "KIOXIA"}], "claimed": true, "class": "storage", "configuration": {"driver": "usb-storage", "maxpower": "300mA", "speed": "480Mbit/s"}, "description": "Mass storage device", "handle": "USB:2:2", "id": "usb:0", "logicalname": "scsi4", "physid": "2", "product": "TransMemory", "serial": "0022CFF6B8A6C461331718B1", "vendor": "KIOXIA", "version": "0.01"}, {"businfo": "usb@2:4", "capabilities": {"bluetooth": "Bluetooth wireless radio", "usb-2.10": true}, "claimed": true, "class": "communication", "configuration": {"driver": "btusb", "maxpower": "500mA", "speed": "12Mbit/s"}, "description": "Bluetooth wireless interface", "handle": "USB:2:3", "id": "usb:1", "physid": "4", "product": "Bluetooth Radio", "serial": "00e04c000001", "vendor": "Realtek", "version": "2.00"}, {"businfo": "usb@2:5", "capabilities": {"usb-1.10": "USB 1.1"}, "class": "generic", "configuration": {"maxpower": "100mA", "speed": "12Mbit/s"}, "description": "Generic USB device", "handle": "USB:2:4", "id": "usb:2", "physid": "5", "product": "VFS495 Fingerprint Reader", "serial": "00b0685ccb93", "vendor": "Validity Sensors, Inc.", "version": "1.04"}, {"businfo": "usb@2:7", "capabilities": {"usb-2.00": "USB 2.0"}, "claimed": true, "class": "multimedia", "configuration": {"driver": "uvcvideo", "maxpower": "500mA", "speed": "480Mbit/s"}, "description": "Video", "handle": "USB:2:5", "id": "usb:3", "physid": "7", "product": "HP HD Webcam", "serial": "200901010001", "vendor": "DDZLE019I6OJ8L", "version": "0.04"}], "claimed": true, "class": "bus", "configuration": {"driver": "hub", "slots": "9", "speed": "480Mbit/s"}, "handle": "USB:2:1", "id": "usbhost:0", "logicalname": "usb2", "physid": "0", "product": "xHCI Host Controller", "vendor": "Linux 4.9.0-14-686-pae xhci-hcd", "version": "4.09"}, {"businfo": "usb@3", "capabilities": {"usb-3.00": true}, "claimed": true, "class": "bus", "configuration": {"driver": "hub", "slots": "4", "speed": "5000Mbit/s"}, "handle": "USB:3:1", "id": "usbhost:1", "logicalname": "usb3", "physid": "1", "product": "xHCI Host Controller", "vendor": "Linux 4.9.0-14-686-pae xhci-hcd", "version": "4.09"}], "claimed": true, "class": "bus", "clock": 33000000, "configuration": {"driver": "xhci_hcd", "latency": "0"}, "description": "USB controller", "handle": "PCI:0000:00:14.0", "id": "usb:0", "physid": "14", "product": "8 Series USB xHCI HC", "vendor": "Intel Corporation", "version": "04", "width": 64}, {"businfo": "pci@0000:00:16.0", "capabilities": {"bus_master": "bus mastering", "cap_list": "PCI capabilities listing", "msi": "Message Signalled Interrupts", "pm": "Power Management"}, "claimed": true, "class": "communication", "clock": 33000000, "configuration": {"driver": "mei_me", "latency": "0"}, "description": "Communication controller", "handle": "PCI:0000:00:16.0", "id": "communication", "physid": "16", "product": "8 Series HECI #0", "vendor": "Intel Corporation", "version": "04", "width": 64}, {"businfo": "pci@0000:00:1b.0", "capabilities": {"bus_master": "bus mastering", "cap_list": "PCI capabilities listing", "msi": "Message Signalled Interrupts", "pm": "Power Management"}, "claimed": true, "class": "multimedia", "clock": 33000000, "configuration": {"driver": "snd_hda_intel", "latency": "64"}, "description": "Audio device", "handle": "PCI:0000:00:1b.0", "id": "multimedia:1", "physid": "1b", "product": "8 Series HD Audio Controller", "vendor": "Intel Corporation", "version": "04", "width": 64}, {"businfo": "pci@0000:00:1c.0", "capabilities": {"bus_master": "bus mastering", "cap_list": "PCI capabilities listing", "msi": "Message Signalled Interrupts", "normal_decode": true, "pci": true, "pciexpress": "PCI Express", "pm": "Power Management"}, "claimed": true, "class": "bridge", "clock": 33000000, "configuration": {"driver": "pcieport"}, "description": "PCI bridge", "handle": "PCIBUS:0000:01", "id": "pci:0", "physid": "1c", "product": "8 Series PCI Express Root Port 1", "vendor": "Intel Corporation", "version": "e4", "width": 32}, {"businfo": "pci@0000:00:1c.1", "capabilities": {"bus_master": "bus mastering", "cap_list": "PCI capabilities listing", "msi": "Message Signalled Interrupts", "normal_decode": true, "pci": true, "pciexpress": "PCI Express", "pm": "Power Management"}, "children": [{"businfo": "pci@0000:07:00.0", "capabilities": {"bus_master": "bus mastering", "cap_list": "PCI capabilities listing", "msi": "Message Signalled Interrupts", "pciexpress": "PCI Express", "pm": "Power Management"}, "claimed": true, "class": "generic", "clock": 33000000, "configuration": {"driver": "rtsx_pci", "latency": "0"}, "description": "Unassigned class", "handle": "PCI:0000:07:00.0", "id": "generic", "physid": "0", "product": "RTS5227 PCI Express Card Reader", "vendor": "Realtek Semiconductor Co., Ltd.", "version": "01", "width": 32}], "claimed": true, "class": "bridge", "clock": 33000000, "configuration": {"driver": "pcieport"}, "description": "PCI bridge", "handle": "PCIBUS:0000:07", "id": "pci:1", "physid": "1c.1", "product": "8 Series PCI Express Root Port 2", "vendor": "Intel Corporation", "version": "e4", "width": 32}, {"businfo": "pci@0000:00:1c.2", "capabilities": {"bus_master": "bus mastering", "cap_list": "PCI capabilities listing", "msi": "Message Signalled Interrupts", "normal_decode": true, "pci": true, "pciexpress": "PCI Express", "pm": "Power Management"}, "children": [{"businfo": "pci@0000:08:00.0", "capabilities": {"1000bt": "1Gbit/s", "1000bt-fd": "1Gbit/s (full duplex)", "100bt": "100Mbit/s", "100bt-fd": "100Mbit/s (full duplex)", "10bt": "10Mbit/s", "10bt-fd": "10Mbit/s (full duplex)", "autonegotiation": "Auto-negotiation", "bus_master": "bus mastering", "cap_list": "PCI capabilities listing", "ethernet": true, "mii": "Media Independent Interface", "msi": "Message Signalled Interrupts", "msix": "MSI-X", "pciexpress": "PCI Express", "physical": "Physical interface", "pm": "Power Management", "tp": "twisted pair", "vpd": "Vital Product Data"}, "capacity": 1000000000, "claimed": true, "class": "network", "clock": 33000000, "configuration": {"autonegotiation": "on", "broadcast": "yes", "driver": "r8169", "driverversion": "2.3LK-NAPI", "duplex": "full", "firmware": "rtl8168g-3_0.0.1 04/23/13", "ip": "192.168.108.192", "latency": "0", "link": "yes", "multicast": "yes", "port": "MII", "speed": "1Gbit/s"}, "description": "Ethernet interface", "handle": "PCI:0000:08:00.0", "id": "network", "logicalname": "enp8s0", "physid": "0", "product": "RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller", "serial": "64:51:06:b0:0a:f4", "size": 1000000000, "units": "bit/s", "vendor": "Realtek Semiconductor Co., Ltd.", "version": "10", "width": 64}], "claimed": true, "class": "bridge", "clock": 33000000, "configuration": {"driver": "pcieport"}, "description": "PCI bridge", "handle": "PCIBUS:0000:08", "id": "pci:2", "physid": "1c.2", "product": "8 Series PCI Express Root Port 3", "vendor": "Intel Corporation", "version": "e4", "width": 32}, {"businfo": "pci@0000:00:1c.3", "capabilities": {"bus_master": "bus mastering", "cap_list": "PCI capabilities listing", "msi": "Message Signalled Interrupts", "normal_decode": true, "pci": true, "pciexpress": "PCI Express", "pm": "Power Management"}, "children": [{"businfo": "pci@0000:09:00.0", "capabilities": {"bus_master": "bus mastering", "cap_list": "PCI capabilities listing", "ethernet": true, "msi": "Message Signalled Interrupts", "pciexpress": "PCI Express", "physical": "Physical interface", "pm": "Power Management", "wireless": "Wireless-LAN"}, "claimed": true, "class": "network", "clock": 33000000, "configuration": {"broadcast": "yes", "driver": "rtl8723be", "driverversion": "4.9.0-14-686-pae", "firmware": "N/A", "latency": "0", "link": "no", "multicast": "yes", "wireless": "IEEE 802.11"}, "description": "Wireless interface", "disabled": true, "handle": "PCI:0000:09:00.0", "id": "network", "logicalname": "wlo1", "physid": "0", "product": "RTL8723BE PCIe Wireless Network Adapter", "serial": "90:48:9a:af:6a:1b", "vendor": "Realtek Semiconductor Co., Ltd.", "version": "00", "width": 64}], "claimed": true, "class": "bridge", "clock": 33000000, "configuration": {"driver": "pcieport"}, "description": "PCI bridge", "handle": "PCIBUS:0000:09", "id": "pci:3", "physid": "1c.3", "product": "8 Series PCI Express Root Port 4", "vendor": "Intel Corporation", "version": "e4", "width": 32}, {"businfo": "pci@0000:00:1d.0", "capabilities": {"bus_master": "bus mastering", "cap_list": "PCI capabilities listing", "debug": "Debug port", "ehci": "Enhanced Host Controller Interface (USB2)", "pm": "Power Management"}, "children": [{"businfo": "usb@1", "capabilities": {"usb-2.00": "USB 2.0"}, "children": [{"businfo": "usb@1:1", "capabilities": {"usb-2.00": "USB 2.0"}, "claimed": true, "class": "bus", "configuration": {"driver": "hub", "slots": "8", "speed": "480Mbit/s"}, "description": "USB hub", "handle": "USB:1:2", "id": "usb", "physid": "1", "vendor": "Intel Corp.", "version": "0.04"}], "claimed": true, "class": "bus", "configuration": {"driver": "hub", "slots": "2", "speed": "480Mbit/s"}, "handle": "USB:1:1", "id": "usbhost", "logicalname": "usb1", "physid": "1", "product": "EHCI Host Controller", "vendor": "Linux 4.9.0-14-686-pae ehci_hcd", "version": "4.09"}], "claimed": true, "class": "bus", "clock": 33000000, "configuration": {"driver": "ehci-pci", "latency": "0"}, "description": "USB controller", "handle": "PCI:0000:00:1d.0", "id": "usb:1", "physid": "1d", "product": "8 Series USB EHCI #1", "vendor": "Intel Corporation", "version": "04", "width": 32}, {"businfo": "pci@0000:00:1f.0", "capabilities": {"bus_master": "bus mastering", "cap_list": "PCI capabilities listing", "isa": true}, "claimed": true, "class": "bridge", "clock": 33000000, "configuration": {"driver": "lpc_ich", "latency": "0"}, "description": "ISA bridge", "handle": "PCI:0000:00:1f.0", "id": "isa", "physid": "1f", "product": "8 Series LPC Controller", "vendor": "Intel Corporation", "version": "04", "width": 32}, {"businfo": "pci@0000:00:1f.2", "capabilities": {"ahci_1.0": true, "bus_master": "bus mastering", "cap_list": "PCI capabilities listing", "msi": "Message Signalled Interrupts", "pm": "Power Management", "storage": true}, "claimed": true, "class": "storage", "clock": 66000000, "configuration": {"driver": "ahci", "latency": "0"}, "description": "SATA controller", "handle": "PCI:0000:00:1f.2", "id": "storage", "physid": "1f.2", "product": "8 Series SATA Controller 1 [AHCI mode]", "vendor": "Intel Corporation", "version": "04", "width": 32}, {"businfo": "pci@0000:00:1f.6", "capabilities": {"bus_master": "bus mastering", "cap_list": "PCI capabilities listing", "msi": "Message Signalled Interrupts", "pm": "Power Management"}, "claimed": true, "class": "generic", "clock": 33000000, "configuration": {"driver": "intel_pch_thermal", "latency": "0"}, "description": "Signal processing controller", "handle": "PCI:0000:00:1f.6", "id": "generic", "physid": "1f.6", "product": "8 Series Thermal", "vendor": "Intel Corporation", "version": "04", "width": 64}], "claimed": true, "class": "bridge", "clock": 33000000, "configuration": {"driver": "hsw_uncore"}, "description": "Host bridge", "handle": "PCIBUS:0000:00", "id": "pci", "physid": "100", "product": "Haswell-ULT DRAM Controller", "vendor": "Intel Corporation", "version": "0b", "width": 32}, {"capabilities": {"emulated": "Emulated device"}, "children": [{"businfo": "scsi@0:0.0.0", "capabilities": {"partitioned": "Partitioned disk", "partitioned:dos": "MS-DOS partition table"}, "children": [{"businfo": "scsi@0:0.0.0,1", "capabilities": {"bootable": "Bootable partition (active)", "initialized": "initialized volume", "ntfs": "Windows NTFS", "primary": "Primary partition"}, "capacity": 523239424, "claimed": true, "class": "volume", "configuration": {"clustersize": "4096", "created": "2019-07-03 18:32:58", "filesystem": "ntfs", "label": "System Reserved", "modified_by_chkdsk": "true", "mounted_on_nt4": "true", "resize_log_file": "true", "state": "dirty", "upgrade_on_mount": "true"}, "description": "Windows NTFS volume", "dev": "8:1", "id": "volume:0", "logicalname": "/dev/sda1", "physid": "1", "serial": "acbd-0cc5", "size": 522190336, "version": "3.1"}, {"businfo": "scsi@0:0.0.0,2", "capabilities": {"initialized": "initialized volume", "ntfs": "Windows NTFS", "primary": "Primary partition"}, "capacity": 125829120000, "claimed": true, "class": "volume", "configuration": {"clustersize": "4096", "created": "2019-07-03 18:32:59", "filesystem": "ntfs", "label": "WINDOWS7", "state": "clean"}, "description": "Windows NTFS volume", "dev": "8:2", "id": "volume:1", "logicalname": "/dev/sda2", "physid": "2", "serial": "408d7f13-28ec-aa48-9055-88d2c55f3d42", "size": 125808147968, "version": "3.1"}, {"businfo": "scsi@0:0.0.0,3", "capabilities": {"initialized": "initialized volume", "ntfs": "Windows NTFS", "primary": "Primary partition"}, "capacity": 373753380864, "claimed": true, "class": "volume", "configuration": {"clustersize": "4096", "created": "2019-07-03 18:33:01", "filesystem": "ntfs", "label": "DATOS", "modified_by_chkdsk": "true", "mounted_on_nt4": "true", "resize_log_file": "true", "state": "dirty", "upgrade_on_mount": "true"}, "description": "Windows NTFS volume", "dev": "8:3", "id": "volume:2", "logicalname": "/dev/sda3", "physid": "3", "serial": "fe81de5e-cd06-2348-aa95-4b2e6930ce4d", "size": 373732408832, "version": "3.1"}], "claimed": true, "class": "disk", "configuration": {"ansiversion": "5", "logicalsectorsize": "512", "sectorsize": "4096", "signature": "38d4fbef"}, "description": "ATA Disk", "dev": "8:0", "handle": "SCSI:00:00:00:00", "id": "disk", "logicalname": "/dev/sda", "physid": "0.0.0", "product": "ST500LT012-1DG14", "serial": "S3P9A80F", "size": 500107862016, "units": "bytes", "vendor": "Seagate", "version": "YAM1"}], "claimed": true, "class": "storage", "id": "scsi:0", "logicalname": "scsi0", "physid": "1"}, {"capabilities": {"emulated": "Emulated device"}, "children": [{"businfo": "scsi@1:0.0.0", "capabilities": {"audio": "Audio CD playback", "cd-r": "CD-R burning", "cd-rw": "CD-RW burning", "dvd": "DVD playback", "dvd-r": "DVD-R burning", "dvd-ram": "DVD-RAM burning", "removable": "support is removable"}, "claimed": true, "class": "disk", "configuration": {"ansiversion": "5", "status": "nodisc"}, "description": "DVD-RAM writer", "dev": "11:0", "handle": "SCSI:01:00:00:00", "id": "cdrom", "logicalname": ["/dev/cdrom", "/dev/cdrw", "/dev/dvd", "/dev/dvdrw", "/dev/sr0"], "physid": "0.0.0", "product": "DVDRAM GU90N", "vendor": "hp", "version": "U900"}], "claimed": true, "class": "storage", "id": "scsi:1", "logicalname": "scsi1", "physid": "2"}], "claimed": true, "class": "bus", "description": "Motherboard", "handle": "DMI:000E", "id": "core", "physid": "0", "product": "2248", "serial": "PELSAF2WV6XGL6", "vendor": "Hewlett-Packard", "version": "KBC Version 67.21"}, {"capacity": 40100, "claimed": true, "class": "power", "configuration": {"voltage": "14.8V"}, "handle": "DMI:001C", "id": "battery", "physid": "1", "product": "VI04040XL", "slot": "Primary", "units": "mWh", "vendor": "33-24"}], "claimed": true, "class": "system", "configuration": {"boot": "normal", "chassis": "notebook", "family": "103C_5336AN G=N L=BUS B=HP S=PRO", "sku": "F5R46AV", "uuid": "7F25D367-F6D0-E311-A300-2286570180FF"}, "description": "Notebook", "handle": "DMI:000D", "id": "debian", "product": "HP ProBook 450 G2 (F5R46AV)", "serial": "CND4286ZJ2", "vendor": "Hewlett-Packard", "version": "A3009DD10303", "width": 32}}, "device": {"actions": [{"elapsed": 1, "rate": 0.8448, "type": "BenchmarkRamSysbench"}], "chassis": "Netbook", "manufacturer": "Hewlett-Packard", "model": "HP ProBook 450 G2", "serialNumber": "CND4286ZJ2", "sku": "F5R46AV", "type": "Laptop", "version": "A3009DD10303"}, "elapsed": 13745, "endTime": "2022-01-13T10:24:04.179939+00:00", "software": "Workbench", "type": "Snapshot", "uuid": "e7de22e2-f8a7-4051-b133-0a7a0e27608f", "version": "11.0b11"} diff --git a/example/dpp-snapshots/hp_probook_450_2.json b/example/dpp-snapshots/hp_probook_450_2.json new file mode 100644 index 0000000..3697249 --- /dev/null +++ b/example/dpp-snapshots/hp_probook_450_2.json @@ -0,0 +1 @@ +{"closed": true, "components": [{"actions": [], "manufacturer": "AUO", "model": "LCD Monitor", "productionDate": "2013-12-15T00:00:00", "refreshRate": 60, "resolutionHeight": 768, "resolutionWidth": 1366, "serialNumber": null, "size": 15.529237982414482, "technology": "LCD", "type": "Display"}, {"actions": [{"elapsed": 0, "rate": 19155.4, "type": "BenchmarkProcessor"}, {"elapsed": 0, "rate": 18446740964.4517, "type": "BenchmarkProcessorSysbench"}], "address": 64, "brand": "Core i5", "cores": 2, "generation": 4, "manufacturer": "Intel Corp.", "model": "Intel Core i5-4210U CPU @ 1.70GHz", "serialNumber": null, "speed": 1.49414, "threads": 4, "type": "Processor"}, {"actions": [], "manufacturer": "Intel Corporation", "model": "Haswell-ULT HD Audio Controller", "serialNumber": null, "type": "SoundCard"}, {"actions": [], "manufacturer": "DDZLE019I6OJ8L", "model": "HP HD Webcam", "serialNumber": "200901010001", "type": "SoundCard"}, {"actions": [], "manufacturer": "Intel Corporation", "model": "8 Series HD Audio Controller", "serialNumber": null, "type": "SoundCard"}, {"actions": [], "format": "SODIMM", "interface": "DDR3", "manufacturer": "Micron", "model": "8KTF51264HZ-1G6N1", "serialNumber": "18503423", "size": 4096.0, "speed": 1600.0, "type": "RamModule"}, {"actions": [], "format": "SODIMM", "interface": "DDR3", "manufacturer": "Micron", "model": "8KTF51264HZ-1G6N1", "serialNumber": "18651324", "size": 4096.0, "speed": 1600.0, "type": "RamModule"}, {"actions": [{"assessment": true, "commandTimeout": 4295032833, "currentPendingSectorCount": 0, "elapsed": 120, "length": "Short", "lifetime": 8627, "offlineUncorrectable": 0, "powerCycleCount": 1575, "reallocatedSectorCount": 0, "reportedUncorrectableErrors": 5009, "severity": "Info", "status": "Completed without error", "type": "TestDataStorage"}, {"elapsed": 14, "readSpeed": 104.0, "type": "BenchmarkDataStorage", "writeSpeed": 24.4}, {"endTime": "2022-01-13T14:13:09.338771+00:00", "severity": "Info", "startTime": "2022-01-13T09:34:39.026634+00:00", "steps": [{"endTime": "2022-01-13T11:07:49.733336+00:00", "severity": "Info", "startTime": "2022-01-13T09:34:39.026954+00:00", "type": "StepZero"}, {"endTime": "2022-01-13T14:13:09.338626+00:00", "severity": "Info", "startTime": "2022-01-13T11:07:49.734069+00:00", "type": "StepRandom"}], "type": "EraseSectors"}], "interface": "ATA", "manufacturer": "Seagate", "model": "ST500LT012-1DG14", "serialNumber": "S3P9A80B", "size": 500107.86201599997, "type": "HardDrive", "variant": "YAM1"}, {"actions": [], "manufacturer": "Realtek Semiconductor Co., Ltd.", "model": "RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller", "serialNumber": "64:51:06:b0:0a:f4", "speed": 1000.0, "type": "NetworkAdapter", "variant": "10", "wireless": false}, {"actions": [], "manufacturer": "Realtek Semiconductor Co., Ltd.", "model": "RTL8723BE PCIe Wireless Network Adapter", "serialNumber": "90:48:9a:af:6a:1b", "speed": null, "type": "NetworkAdapter", "variant": "00", "wireless": true}, {"actions": [], "manufacturer": "Intel Corporation", "memory": null, "model": "Haswell-ULT Integrated Graphics Controller", "serialNumber": null, "type": "GraphicCard"}, {"actions": [], "biosDate": "2014-06-17T00:00:00", "firewire": 0, "manufacturer": "Hewlett-Packard", "model": "2248", "pcmcia": 0, "ramMaxSize": 16, "ramSlots": 2, "serial": 0, "serialNumber": "PELSAF2WV6XGL6", "slots": 2, "type": "Motherboard", "usb": 2, "version": "M74 Ver. 01.02"}], "debug": {"battery": null, "hwinfo": "01: None 00.0: 10105 BIOS\n [Created at bios.186]\n Unique ID: rdCR.lZF+r4EgHp4\n Hardware Class: bios\n BIOS Keyboard LED Status:\n Scroll Lock: off\n Num Lock: off\n Caps Lock: off\n Parallel Port 0: 0x378\n Base Memory: 631 kB\n PnP BIOS: @@P3C00\n BIOS: extended read supported\n SMBIOS Version: 2.7\n BIOS Info: #12\n Vendor: \"Hewlett-Packard\"\n Version: \"M74 Ver. 01.02\"\n Date: \"06/17/2014\"\n Start Address: 0xf0000\n ROM Size: 6144 kB\n Features: 0x0f83000000093c099980\n PCI supported\n PCMCIA supported\n BIOS flashable\n BIOS shadowing allowed\n CD boot supported\n Selectable boot supported\n EDD spec supported\n Print Screen supported\n 8042 Keyboard Services supported\n Serial Services supported\n Printer Services supported\n ACPI supported\n USB Legacy supported\n Smart Battery supported\n BIOS Boot Spec supported\n F12 Network boot supported\n System Info: #13\n Manufacturer: \"Hewlett-Packard\"\n Product: \"HP ProBook 450 G2\"\n Version: \"A3009DD10303\"\n Serial: \"CND4286ZJ2\"\n UUID: undefined, but settable\n Wake-up: 0x06 (Power Switch)\n Board Info: #14\n Manufacturer: \"Hewlett-Packard\"\n Product: \"2248\"\n Version: \"KBC Version 67.21\"\n Serial: \"PELSAF2WV6XGL6\"\n Type: 0x01 (Other)\n Features: 0x09\n Hosting Board\n Replaceable\n Chassis: #15\n Chassis Info: #15\n Manufacturer: \"Hewlett-Packard\"\n Serial: \"CND4286ZJ2\"\n Type: 0x0a (Notebook)\n Bootup State: 0x03 (Safe)\n Power Supply State: 0x03 (Safe)\n Thermal State: 0x01 (Other)\n Security Status: 0x01 (Other)\n Processor Info: #7\n Socket: \"U3E1\"\n Socket Type: 0x2e (Other)\n Socket Status: Populated\n Type: 0x03 (CPU)\n Family: 0xcd (Other)\n Manufacturer: \"Intel(R) Corporation\"\n Version: \"Intel(R) Core(TM) i5-4210U CPU @ 1.70GHz\"\n Serial: \"To Be Filled By O.E.M.\"\n Asset Tag: \"To Be Filled By O.E.M.\"\n Processor ID: 0xbfebfbff00040651\n Status: 0x01 (Enabled)\n Voltage: 0.7 V\n External Clock: 100 MHz\n Max. Speed: 2400 MHz\n Current Speed: 1700 MHz\n L1 Cache: #8\n L2 Cache: #9\n L3 Cache: #10\n Cache Info: #6\n Designation: \"L1 Cache\"\n Level: L1\n State: Enabled\n Mode: 0x01 (Write Back)\n Location: 0x00 (Internal, Not Socketed)\n ECC: 0x04 (Parity)\n Type: 0x04 (Data)\n Associativity: 0x07 (8-way Set-Associative)\n Max. Size: 32 kB\n Current Size: 32 kB\n Supported SRAM Types: 0x0040 (Asynchronous)\n Current SRAM Type: 0x0040 (Asynchronous)\n Cache Info: #8\n Designation: \"L1 Cache\"\n Level: L1\n State: Enabled\n Mode: 0x01 (Write Back)\n Location: 0x00 (Internal, Not Socketed)\n ECC: 0x04 (Parity)\n Type: 0x03 (Instruction)\n Associativity: 0x07 (8-way Set-Associative)\n Max. Size: 32 kB\n Current Size: 32 kB\n Supported SRAM Types: 0x0040 (Asynchronous)\n Current SRAM Type: 0x0040 (Asynchronous)\n Cache Info: #9\n Designation: \"L2 Cache\"\n Level: L2\n State: Enabled\n Mode: 0x01 (Write Back)\n Location: 0x00 (Internal, Not Socketed)\n ECC: 0x05 (Single-bit)\n Type: 0x05 (Unified)\n Associativity: 0x07 (8-way Set-Associative)\n Max. Size: 256 kB\n Current Size: 256 kB\n Supported SRAM Types: 0x0040 (Asynchronous)\n Current SRAM Type: 0x0040 (Asynchronous)\n Cache Info: #10\n Designation: \"L3 Cache\"\n Level: L3\n State: Enabled\n Mode: 0x01 (Write Back)\n Location: 0x00 (Internal, Not Socketed)\n ECC: 0x06 (Multi-bit)\n Type: 0x05 (Unified)\n Associativity: 0x09 (Other)\n Max. Size: 3072 kB\n Current Size: 3072 kB\n Supported SRAM Types: 0x0040 (Asynchronous)\n Current SRAM Type: 0x0040 (Asynchronous)\n Port Connector: #20\n Type: 0x20 (Other)\n Internal Designator: \"Ctrl0Port0\"\n Internal Connector: 0x22 (Other)\n External Designator: \"Primary HDD Bay\"\n External Connector: 0x22 (Other)\n Port Connector: #21\n Type: 0x20 (Other)\n Internal Designator: \"Ctrl0Port5\"\n Internal Connector: 0x22 (Other)\n External Designator: \"Docking Station Upgrade Bay\"\n External Connector: 0x22 (Other)\n Port Connector: #22\n Type: 0x20 (Other)\n Internal Designator: \"Ctrl0Port4\"\n Internal Connector: 0x22 (Other)\n External Designator: \"eSATA\"\n External Connector: 0x22 (Other)\n Port Connector: #23\n Type: 0x20 (Other)\n Internal Designator: \"Ctrl0Port3\"\n Internal Connector: 0x22 (Other)\n External Designator: \"Docking Station eSATA\"\n External Connector: 0x22 (Other)\n Port Connector: #24\n Type: 0x20 (Other)\n Internal Designator: \"Ctrl0Port2\"\n Internal Connector: 0x22 (Other)\n External Designator: \"mSATA\"\n External Connector: 0x22 (Other)\n Port Connector: #25\n Type: 0x20 (Other)\n Internal Designator: \"Ctrl0Port1\"\n Internal Connector: 0x22 (Other)\n External Designator: \"Upgrade Bay\"\n External Connector: 0x22 (Other)\n System Slot: #27\n Designation: \"PCI SLOT1\"\n Type: 0x06 (PCI)\n Bus Width: 0x05 (32 bit)\n Status: 0x03 (Available)\n Length: 0x04 (Long)\n Slot ID: 1\n Characteristics: 0x0504 (3.3 V, PME#)\n On Board Devices: #17\n Video: \"32\"\n OEM Strings: #26\n FBYTE#3X47676J6S6Z6b7J7M7Q7W7saBaqawce.Q7;\n BUILDID#14WWR4AW602#SABE#DABE;\n ABS 70/71 79 7A 7B 7C\n CSM v01.5B\n HP_Mute_LED_0_0\n www.hp.com\n Language Info: #30\n Languages: en-US, da-DK, nl-NL, fi-FI, fr-FR, de-DE, it-IT, ja-JP, no-NO, pt-PT, es-ES, sv-SE, zh-CN, zh-TW\n Current: es-ES\n Physical Memory Array: #0\n Use: 0x03 (System memory)\n Location: 0x03 (Motherboard)\n Slots: 2\n Max. Size: 16 GB\n ECC: 0x03 (None)\n Memory Device: #1\n Location: \"Bottom-Slot 1(left)\"\n Bank: \"BANK 0\"\n Manufacturer: \"Micron\"\n Serial: \"18503423\"\n Asset Tag: \"9876543210\"\n Part Number: \"8KTF51264HZ-1G6N1\"\n Memory Array: #0\n Form Factor: 0x0d (SODIMM)\n Type: 0x18 (Other)\n Type Detail: 0x0080 (Synchronous)\n Data Width: 64 bits\n Size: 4 GB\n Speed: 1600 MHz\n Memory Device: #3\n Location: \"Bottom-Slot 2(right)\"\n Bank: \"BANK 2\"\n Manufacturer: \"Micron\"\n Serial: \"18651324\"\n Asset Tag: \"9876543210\"\n Part Number: \"8KTF51264HZ-1G6N1\"\n Memory Array: #0\n Form Factor: 0x0d (SODIMM)\n Type: 0x18 (Other)\n Type Detail: 0x0080 (Synchronous)\n Data Width: 64 bits\n Size: 4 GB\n Speed: 1600 MHz\n Memory Array Mapping: #5\n Memory Array: #0\n Partition Width: 2\n Start Address: 0x0000000000000000\n End Address: 0x0000000200000000\n Memory Device Mapping: #2\n Memory Device: #1\n Array Mapping: #5\n Row: 1\n Interleave Pos: 1\n Interleaved Depth: 1\n Start Address: 0x0000000000000000\n End Address: 0x0000000100000000\n Memory Device Mapping: #4\n Memory Device: #3\n Array Mapping: #5\n Row: 1\n Interleave Pos: 2\n Interleaved Depth: 1\n Start Address: 0x0000000100000000\n End Address: 0x0000000200000000\n Type 22 Record: #28\n Data 00: 16 1a 1c 00 01 02 00 00 03 02 aa 0f d0 39 04 ff\n Data 10: 1e d8 7a 45 05 0a 00 00 00 00\n String 1: \"Primary\"\n String 2: \"33-24\"\n String 3: \"VI04040XL\"\n String 4: \"1.1\"\n String 5: \"LION\"\n Type 32 Record: #16\n Data 00: 20 14 10 00 00 00 00 00 00 00 00 00 00 00 00 00\n Data 10: 00 00 00 00\n Type 41 Record: #18\n Data 00: 29 0b 12 00 01 83 01 00 00 00 10\n String 1: \"32\"\n Type 41 Record: #19\n Data 00: 29 0b 13 00 02 85 01 00 00 09 00\n String 1: \"WLAN\"\n String 2: \"WLAN\"\n Type 131 Record: #11\n Data 00: 83 40 0b 00 31 00 00 00 00 00 00 00 00 00 00 00\n Data 10: f8 00 43 9c 00 00 00 00 01 00 00 00 05 00 09 00\n Data 20: 10 07 1e 00 00 00 00 00 c8 00 ff ff 00 00 00 00\n Data 30: 04 0a 00 00 20 00 00 00 76 50 72 6f 00 00 00 00\n Type 137 Record: #29\n Data 00: 89 0c 1d 00 01 00 f0 03 f0 ff 00 00\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n\n02: None 00.0: 10107 System\n [Created at sys.63]\n Unique ID: rdCR.n_7QNeEnh23\n Hardware Class: system\n Model: \"System\"\n Formfactor: \"laptop\"\n Driver Info #0:\n Driver Status: thermal,fan are not active\n Driver Activation Cmd: \"modprobe thermal; modprobe fan\"\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n\n03: None 00.0: 10104 FPU\n [Created at misc.191]\n Unique ID: rdCR.EMpH5pjcahD\n Hardware Class: unknown\n Model: \"FPU\"\n I/O Ports: 0xf0-0xff (rw)\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n\n04: None 00.0: 0801 DMA controller (8237)\n [Created at misc.205]\n Unique ID: rdCR.f5u1ucRm+H9\n Hardware Class: unknown\n Model: \"DMA controller\"\n I/O Ports: 0x00-0xcf7 (rw)\n I/O Ports: 0xc0-0xdf (rw)\n I/O Ports: 0x80-0x8f (rw)\n DMA: 4\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n\n05: None 00.0: 0800 PIC (8259)\n [Created at misc.218]\n Unique ID: rdCR.8uRK7LxiIA2\n Hardware Class: unknown\n Model: \"PIC\"\n I/O Ports: 0x20-0x21 (rw)\n I/O Ports: 0xa0-0xa1 (rw)\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n\n06: None 00.0: 0900 Keyboard controller\n [Created at misc.250]\n Unique ID: rdCR.9N+EecqykME\n Hardware Class: unknown\n Model: \"Keyboard controller\"\n I/O Port: 0x60 (rw)\n I/O Port: 0x64 (rw)\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n\n07: None 00.0: 0701 Parallel controller (SPP)\n [Created at misc.261]\n Unique ID: YMnp.ecK7NLYWZ5D\n Hardware Class: unknown\n Model: \"Parallel controller\"\n Device File: /dev/lp0\n I/O Ports: 0x378-0x37a (rw)\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n\n08: None 00.0: 10400 PS/2 Controller\n [Created at misc.303]\n Unique ID: rdCR.DziBbWO85o5\n Hardware Class: unknown\n Model: \"PS/2 Controller\"\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n\n13: None 00.0: 10102 Main Memory\n [Created at memory.74]\n Unique ID: rdCR.CxwsZFjVASF\n Hardware Class: memory\n Model: \"Main Memory\"\n Memory Range: 0x00000000-0x1f22a6fff (rw)\n Memory Size: 8 GB\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n\n14: PCI 1c.3: 0604 PCI bridge (Normal decode)\n [Created at pci.378]\n Unique ID: Z7uZ.G9l8oDwzL7C\n SysFS ID: /devices/pci0000:00/0000:00:1c.3\n SysFS BusID: 0000:00:1c.3\n Hardware Class: bridge\n Model: \"Intel 8 Series PCI Express Root Port 4\"\n Vendor: pci 0x8086 \"Intel Corporation\"\n Device: pci 0x9c16 \"8 Series PCI Express Root Port 4\"\n SubVendor: pci 0x103c \"Hewlett-Packard Company\"\n SubDevice: pci 0x2248 \n Revision: 0xe4\n Driver: \"pcieport\"\n IRQ: 43 (no events)\n Module Alias: \"pci:v00008086d00009C16sv0000103Csd00002248bc06sc04i00\"\n Driver Info #0:\n Driver Status: shpchp is active\n Driver Activation Cmd: \"modprobe shpchp\"\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n\n15: PCI 700.0: ff00 Unclassified device\n [Created at pci.378]\n Unique ID: aK5u.Fesr1XY7OVA\n Parent ID: qTvu.CVz8txR9FbA\n SysFS ID: /devices/pci0000:00/0000:00:1c.1/0000:07:00.0\n SysFS BusID: 0000:07:00.0\n Hardware Class: unknown\n Model: \"Realtek RTS5227 PCI Express Card Reader\"\n Vendor: pci 0x10ec \"Realtek Semiconductor Co., Ltd.\"\n Device: pci 0x5227 \"RTS5227 PCI Express Card Reader\"\n SubVendor: pci 0x103c \"Hewlett-Packard Company\"\n SubDevice: pci 0x2248 \n Revision: 0x01\n Driver: \"rtsx_pci\"\n Driver Modules: \"rtsx_pci\"\n Memory Range: 0xc0600000-0xc0600fff (rw,non-prefetchable)\n IRQ: 44 (22 events)\n Module Alias: \"pci:v000010ECd00005227sv0000103Csd00002248bcFFsc00i00\"\n Driver Info #0:\n Driver Status: rtsx_pci is active\n Driver Activation Cmd: \"modprobe rtsx_pci\"\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n Attached to: #17 (PCI bridge)\n\n16: PCI 00.0: 0600 Host bridge\n [Created at pci.378]\n Unique ID: qLht.VantoDfnJG6\n SysFS ID: /devices/pci0000:00/0000:00:00.0\n SysFS BusID: 0000:00:00.0\n Hardware Class: bridge\n Model: \"Intel Haswell-ULT DRAM Controller\"\n Vendor: pci 0x8086 \"Intel Corporation\"\n Device: pci 0x0a04 \"Haswell-ULT DRAM Controller\"\n SubVendor: pci 0x103c \"Hewlett-Packard Company\"\n SubDevice: pci 0x2248 \n Revision: 0x0b\n Driver: \"hsw_uncore\"\n Driver Modules: \"intel_uncore\"\n Module Alias: \"pci:v00008086d00000A04sv0000103Csd00002248bc06sc00i00\"\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n\n17: PCI 1c.1: 0604 PCI bridge (Normal decode)\n [Created at pci.378]\n Unique ID: qTvu.CVz8txR9FbA\n SysFS ID: /devices/pci0000:00/0000:00:1c.1\n SysFS BusID: 0000:00:1c.1\n Hardware Class: bridge\n Model: \"Intel 8 Series PCI Express Root Port 2\"\n Vendor: pci 0x8086 \"Intel Corporation\"\n Device: pci 0x9c12 \"8 Series PCI Express Root Port 2\"\n SubVendor: pci 0x103c \"Hewlett-Packard Company\"\n SubDevice: pci 0x2248 \n Revision: 0xe4\n Driver: \"pcieport\"\n IRQ: 41 (no events)\n Module Alias: \"pci:v00008086d00009C12sv0000103Csd00002248bc06sc04i00\"\n Driver Info #0:\n Driver Status: shpchp is active\n Driver Activation Cmd: \"modprobe shpchp\"\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n\n18: PCI 03.0: 0403 Audio device\n [Created at pci.378]\n Unique ID: 3hqH.8ZYAv3K5mI6\n SysFS ID: /devices/pci0000:00/0000:00:03.0\n SysFS BusID: 0000:00:03.0\n Hardware Class: sound\n Model: \"Intel Haswell-ULT HD Audio Controller\"\n Vendor: pci 0x8086 \"Intel Corporation\"\n Device: pci 0x0a0c \"Haswell-ULT HD Audio Controller\"\n SubVendor: pci 0x103c \"Hewlett-Packard Company\"\n SubDevice: pci 0x2248 \n Revision: 0x0b\n Driver: \"snd_hda_intel\"\n Driver Modules: \"snd_hda_intel\"\n Memory Range: 0xc0810000-0xc0813fff (rw,non-prefetchable)\n IRQ: 51 (67 events)\n Module Alias: \"pci:v00008086d00000A0Csv0000103Csd00002248bc04sc03i00\"\n Driver Info #0:\n Driver Status: snd_hda_intel is active\n Driver Activation Cmd: \"modprobe snd_hda_intel\"\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n\n19: PCI 1d.0: 0c03 USB Controller (EHCI)\n [Created at pci.378]\n Unique ID: 1GTX.5hyHIEn38h0\n SysFS ID: /devices/pci0000:00/0000:00:1d.0\n SysFS BusID: 0000:00:1d.0\n Hardware Class: usb controller\n Model: \"Intel 8 Series USB EHCI #1\"\n Vendor: pci 0x8086 \"Intel Corporation\"\n Device: pci 0x9c26 \"8 Series USB EHCI #1\"\n SubVendor: pci 0x103c \"Hewlett-Packard Company\"\n SubDevice: pci 0x2248 \n Revision: 0x04\n Driver: \"ehci-pci\"\n Driver Modules: \"ehci_pci\"\n Memory Range: 0xc081d000-0xc081d3ff (rw,non-prefetchable)\n IRQ: 17 (33 events)\n Module Alias: \"pci:v00008086d00009C26sv0000103Csd00002248bc0Csc03i20\"\n Driver Info #0:\n Driver Status: ehci-hcd is active\n Driver Activation Cmd: \"modprobe ehci-hcd\"\n Driver Info #1:\n Driver Status: ehci_pci is active\n Driver Activation Cmd: \"modprobe ehci_pci\"\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n\n20: PCI 1f.6: 1180 Signal processing controller\n [Created at pci.378]\n Unique ID: ORVU.5gLxlqBxOw7\n SysFS ID: /devices/pci0000:00/0000:00:1f.6\n SysFS BusID: 0000:00:1f.6\n Hardware Class: unknown\n Model: \"Intel 8 Series Thermal\"\n Vendor: pci 0x8086 \"Intel Corporation\"\n Device: pci 0x9c24 \"8 Series Thermal\"\n SubVendor: pci 0x103c \"Hewlett-Packard Company\"\n SubDevice: pci 0x2248 \n Revision: 0x04\n Driver: \"intel_pch_thermal\"\n Driver Modules: \"intel_pch_thermal\"\n Memory Range: 0xc081b000-0xc081bfff (rw,non-prefetchable)\n IRQ: 18 (no events)\n Module Alias: \"pci:v00008086d00009C24sv0000103Csd00002248bc11sc80i00\"\n Driver Info #0:\n Driver Status: intel_pch_thermal is active\n Driver Activation Cmd: \"modprobe intel_pch_thermal\"\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n\n21: PCI 02.0: 0300 VGA compatible controller (VGA)\n [Created at pci.378]\n Unique ID: _Znp.ka6dvf5kTa8\n SysFS ID: /devices/pci0000:00/0000:00:02.0\n SysFS BusID: 0000:00:02.0\n Hardware Class: graphics card\n Device Name: \"32\"\n Model: \"Intel Haswell-ULT Integrated Graphics Controller\"\n Vendor: pci 0x8086 \"Intel Corporation\"\n Device: pci 0x0a16 \"Haswell-ULT Integrated Graphics Controller\"\n SubVendor: pci 0x103c \"Hewlett-Packard Company\"\n SubDevice: pci 0x2248 \n Revision: 0x0b\n Driver: \"i915\"\n Driver Modules: \"i915\"\n Memory Range: 0xc0000000-0xc03fffff (rw,non-prefetchable)\n Memory Range: 0xb0000000-0xbfffffff (ro,non-prefetchable)\n I/O Ports: 0x7000-0x703f (rw)\n Memory Range: 0x000c0000-0x000dffff (rw,non-prefetchable,disabled)\n IRQ: 47 (60 events)\n I/O Ports: 0x3c0-0x3df (rw)\n Module Alias: \"pci:v00008086d00000A16sv0000103Csd00002248bc03sc00i00\"\n Driver Info #0:\n Driver Status: i915 is active\n Driver Activation Cmd: \"modprobe i915\"\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n\n22: PCI 14.0: 0c03 USB Controller (XHCI)\n [Created at pci.378]\n Unique ID: MZfG.0F8dj3iQqa3\n SysFS ID: /devices/pci0000:00/0000:00:14.0\n SysFS BusID: 0000:00:14.0\n Hardware Class: usb controller\n Model: \"Intel 8 Series USB xHCI HC\"\n Vendor: pci 0x8086 \"Intel Corporation\"\n Device: pci 0x9c31 \"8 Series USB xHCI HC\"\n SubVendor: pci 0x103c \"Hewlett-Packard Company\"\n SubDevice: pci 0x2248 \n Revision: 0x04\n Driver: \"xhci_hcd\"\n Driver Modules: \"xhci_pci\"\n Memory Range: 0xc0800000-0xc080ffff (rw,non-prefetchable)\n IRQ: 46 (7703 events)\n Module Alias: \"pci:v00008086d00009C31sv0000103Csd00002248bc0Csc03i30\"\n Driver Info #0:\n Driver Status: xhci_pci is active\n Driver Activation Cmd: \"modprobe xhci_pci\"\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n\n23: PCI 1c.2: 0604 PCI bridge (Normal decode)\n [Created at pci.378]\n Unique ID: hoOk.EKseq4hZIMB\n SysFS ID: /devices/pci0000:00/0000:00:1c.2\n SysFS BusID: 0000:00:1c.2\n Hardware Class: bridge\n Model: \"Intel 8 Series PCI Express Root Port 3\"\n Vendor: pci 0x8086 \"Intel Corporation\"\n Device: pci 0x9c14 \"8 Series PCI Express Root Port 3\"\n SubVendor: pci 0x103c \"Hewlett-Packard Company\"\n SubDevice: pci 0x2248 \n Revision: 0xe4\n Driver: \"pcieport\"\n IRQ: 42 (no events)\n Module Alias: \"pci:v00008086d00009C14sv0000103Csd00002248bc06sc04i00\"\n Driver Info #0:\n Driver Status: shpchp is active\n Driver Activation Cmd: \"modprobe shpchp\"\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n\n24: PCI 1f.2: 0106 SATA controller (AHCI 1.0)\n [Created at pci.378]\n Unique ID: w7Y8.xfvW4auRA+2\n SysFS ID: /devices/pci0000:00/0000:00:1f.2\n SysFS BusID: 0000:00:1f.2\n Hardware Class: storage\n Model: \"Intel 8 Series SATA Controller 1 [AHCI mode]\"\n Vendor: pci 0x8086 \"Intel Corporation\"\n Device: pci 0x9c03 \"8 Series SATA Controller 1 [AHCI mode]\"\n SubVendor: pci 0x103c \"Hewlett-Packard Company\"\n SubDevice: pci 0x2248 \n Revision: 0x04\n Driver: \"ahci\"\n Driver Modules: \"ahci\"\n I/O Ports: 0x7088-0x708f (rw)\n I/O Ports: 0x7094-0x7097 (rw)\n I/O Ports: 0x7080-0x7087 (rw)\n I/O Ports: 0x7090-0x7093 (rw)\n I/O Ports: 0x7060-0x707f (rw)\n Memory Range: 0xc081c000-0xc081c7ff (rw,non-prefetchable)\n IRQ: 48 (627 events)\n Module Alias: \"pci:v00008086d00009C03sv0000103Csd00002248bc01sc06i01\"\n Driver Info #0:\n Driver Status: ahci is active\n Driver Activation Cmd: \"modprobe ahci\"\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n\n25: PCI 1c.0: 0604 PCI bridge (Normal decode)\n [Created at pci.378]\n Unique ID: z8Q3.Ag4fvoClBq9\n SysFS ID: /devices/pci0000:00/0000:00:1c.0\n SysFS BusID: 0000:00:1c.0\n Hardware Class: bridge\n Model: \"Intel 8 Series PCI Express Root Port 1\"\n Vendor: pci 0x8086 \"Intel Corporation\"\n Device: pci 0x9c10 \"8 Series PCI Express Root Port 1\"\n SubVendor: pci 0x103c \"Hewlett-Packard Company\"\n SubDevice: pci 0x2248 \n Revision: 0xe4\n Driver: \"pcieport\"\n IRQ: 40 (no events)\n Module Alias: \"pci:v00008086d00009C10sv0000103Csd00002248bc06sc04i00\"\n Driver Info #0:\n Driver Status: shpchp is active\n Driver Activation Cmd: \"modprobe shpchp\"\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n\n26: PCI 1f.0: 0601 ISA bridge\n [Created at pci.378]\n Unique ID: BUZT.QMXwKRhNq7E\n SysFS ID: /devices/pci0000:00/0000:00:1f.0\n SysFS BusID: 0000:00:1f.0\n Hardware Class: bridge\n Model: \"Intel 8 Series LPC Controller\"\n Vendor: pci 0x8086 \"Intel Corporation\"\n Device: pci 0x9c43 \"8 Series LPC Controller\"\n SubVendor: pci 0x103c \"Hewlett-Packard Company\"\n SubDevice: pci 0x2248 \n Revision: 0x04\n Driver: \"lpc_ich\"\n Driver Modules: \"lpc_ich\"\n Module Alias: \"pci:v00008086d00009C43sv0000103Csd00002248bc06sc01i00\"\n Driver Info #0:\n Driver Status: lpc_ich is active\n Driver Activation Cmd: \"modprobe lpc_ich\"\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n\n27: PCI 900.0: 0282 WLAN controller\n [Created at pci.378]\n Unique ID: S6TQ.bhUnM+Ctai7\n Parent ID: Z7uZ.G9l8oDwzL7C\n SysFS ID: /devices/pci0000:00/0000:00:1c.3/0000:09:00.0\n SysFS BusID: 0000:09:00.0\n Hardware Class: network\n Device Name: \"WLAN\"\n Model: \"Realtek RTL8723BE PCIe Wireless Network Adapter\"\n Vendor: pci 0x10ec \"Realtek Semiconductor Co., Ltd.\"\n Device: pci 0xb723 \"RTL8723BE PCIe Wireless Network Adapter\"\n SubVendor: pci 0x103c \"Hewlett-Packard Company\"\n SubDevice: pci 0x2231 \n Driver: \"rtl8723be\"\n Driver Modules: \"rtl8723be\"\n Device File: wlo1\n Features: WLAN\n I/O Ports: 0x3000-0x3fff (rw)\n Memory Range: 0xc0400000-0xc0403fff (rw,non-prefetchable)\n IRQ: 19 (no events)\n HW Address: 90:48:9a:af:6a:1b\n Permanent HW Address: 90:48:9a:af:6a:1b\n Link detected: no\n WLAN channels: 1 2 3 4 5 6 7 8 9 10 11 12 13\n WLAN frequencies: 2.412 2.417 2.422 2.427 2.432 2.437 2.442 2.447 2.452 2.457 2.462 2.467 2.472\n WLAN encryption modes: WEP40 WEP104 TKIP CCMP\n WLAN authentication modes: open sharedkey wpa-psk wpa-eap\n Module Alias: \"pci:v000010ECd0000B723sv0000103Csd00002231bc02sc80i00\"\n Driver Info #0:\n Driver Status: rtl8723be is active\n Driver Activation Cmd: \"modprobe rtl8723be\"\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n Attached to: #14 (PCI bridge)\n\n28: PCI 800.0: 0200 Ethernet controller\n [Created at pci.378]\n Unique ID: I+SI.fMnTBL88VH5\n Parent ID: hoOk.EKseq4hZIMB\n SysFS ID: /devices/pci0000:00/0000:00:1c.2/0000:08:00.0\n SysFS BusID: 0000:08:00.0\n Hardware Class: network\n Model: \"Realtek RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller\"\n Vendor: pci 0x10ec \"Realtek Semiconductor Co., Ltd.\"\n Device: pci 0x8168 \"RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller\"\n SubVendor: pci 0x103c \"Hewlett-Packard Company\"\n SubDevice: pci 0x2248 \n Revision: 0x10\n Driver: \"r8169\"\n Driver Modules: \"r8169\"\n Device File: enp8s0\n I/O Ports: 0x4000-0x4fff (rw)\n Memory Range: 0xc0504000-0xc0504fff (rw,non-prefetchable)\n Memory Range: 0xc0500000-0xc0503fff (rw,non-prefetchable)\n IRQ: 45 (31 events)\n HW Address: 64:51:06:b0:0a:f4\n Permanent HW Address: 64:51:06:b0:0a:f4\n Link detected: yes\n Module Alias: \"pci:v000010ECd00008168sv0000103Csd00002248bc02sc00i00\"\n Driver Info #0:\n Driver Status: r8169 is active\n Driver Activation Cmd: \"modprobe r8169\"\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n Attached to: #23 (PCI bridge)\n\n29: PCI 16.0: 0780 Communication controller\n [Created at pci.378]\n Unique ID: WnlC.HxZGBaBBa_4\n SysFS ID: /devices/pci0000:00/0000:00:16.0\n SysFS BusID: 0000:00:16.0\n Hardware Class: unknown\n Model: \"Intel 8 Series HECI #0\"\n Vendor: pci 0x8086 \"Intel Corporation\"\n Device: pci 0x9c3a \"8 Series HECI #0\"\n SubVendor: pci 0x103c \"Hewlett-Packard Company\"\n SubDevice: pci 0x2248 \n Revision: 0x04\n Driver: \"mei_me\"\n Driver Modules: \"mei_me\"\n Memory Range: 0xc0819000-0xc081901f (rw,non-prefetchable)\n IRQ: 49 (12 events)\n Module Alias: \"pci:v00008086d00009C3Asv0000103Csd00002248bc07sc80i00\"\n Driver Info #0:\n Driver Status: mei_me is active\n Driver Activation Cmd: \"modprobe mei_me\"\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n\n30: PCI 1b.0: 0403 Audio device\n [Created at pci.378]\n Unique ID: u1Nb.NJGI0ZQ5w_7\n SysFS ID: /devices/pci0000:00/0000:00:1b.0\n SysFS BusID: 0000:00:1b.0\n Hardware Class: sound\n Model: \"Intel 8 Series HD Audio Controller\"\n Vendor: pci 0x8086 \"Intel Corporation\"\n Device: pci 0x9c20 \"8 Series HD Audio Controller\"\n SubVendor: pci 0x103c \"Hewlett-Packard Company\"\n SubDevice: pci 0x2248 \n Revision: 0x04\n Driver: \"snd_hda_intel\"\n Driver Modules: \"snd_hda_intel\"\n Memory Range: 0xc0814000-0xc0817fff (rw,non-prefetchable)\n IRQ: 50 (555 events)\n Module Alias: \"pci:v00008086d00009C20sv0000103Csd00002248bc04sc03i00\"\n Driver Info #0:\n Driver Status: snd_hda_intel is active\n Driver Activation Cmd: \"modprobe snd_hda_intel\"\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n\n31: None 00.0: 10002 LCD Monitor\n [Created at monitor.125]\n Unique ID: rdCR.9u9BxCnguo2\n Parent ID: _Znp.ka6dvf5kTa8\n Hardware Class: monitor\n Model: \"LCD Monitor\"\n Vendor: AUO \n Device: eisa 0x41ec \n Resolution: 1366x768@60Hz\n Size: 344x193 mm\n Year of Manufacture: 2013\n Week of Manufacture: 49\n Detailed Timings #0:\n Resolution: 1366x768\n Horizontal: 1366 1374 1384 1558 (+8 +18 +192) -hsync\n Vertical: 768 771 772 816 (+3 +4 +48) -vsync\n Frequencies: 50.87 MHz, 32.65 kHz, 40.01 Hz\n Year of Manufacture: 2013\n Week of Manufacture: 49\n Detailed Timings #1:\n Resolution: 1366x768\n Horizontal: 1366 1374 1384 1558 (+8 +18 +192) -hsync\n Vertical: 768 771 772 816 (+3 +4 +48) -vsync\n Frequencies: 76.30 MHz, 48.97 kHz, 60.02 Hz\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n Attached to: #21 (VGA compatible controller)\n\n32: ISA(PnP) 00.0: 0000 Unclassified device\n [Created at isapnp.142]\n Unique ID: z9pp.B+yZ9Ve8gC1\n SysFS ID: /devices/pnp0/00:00\n SysFS BusID: 00:00\n Hardware Class: unknown\n Model: \"Unclassified device\"\n SubVendor: PNP \"PnP\"\n SubDevice: eisa 0x0c02 \n Config Status: cfg=new, avail=yes, need=no, active=unknown\n\n33: ISA(PnP) 00.0: 0000 Unclassified device\n [Created at isapnp.142]\n Unique ID: E349.BLEg2XC4+V0\n SysFS ID: /devices/pnp0/00:05\n SysFS BusID: 00:05\n Hardware Class: unknown\n Model: \"Unclassified device\"\n SubVendor: IFX \n SubDevice: eisa 0x0102 \n Config Status: cfg=new, avail=yes, need=no, active=unknown\n\n34: ISA(PnP) 00.0: 0000 Unclassified device\n [Created at isapnp.142]\n Unique ID: KiZ0.ealKjhMMg54\n SysFS ID: /devices/pnp0/00:03\n SysFS BusID: 00:03\n Hardware Class: unknown\n Model: \"Unclassified device\"\n SubVendor: HPQ \n SubDevice: eisa 0x8001 \n Config Status: cfg=new, avail=yes, need=no, active=unknown\n\n35: ISA(PnP) 00.0: 0000 Unclassified device\n [Created at isapnp.142]\n Unique ID: QL3u.B+yZ9Ve8gC1\n SysFS ID: /devices/pnp0/00:01\n SysFS BusID: 00:01\n Hardware Class: unknown\n Model: \"Unclassified device\"\n SubVendor: PNP \"PnP\"\n SubDevice: eisa 0x0c02 \n Config Status: cfg=new, avail=yes, need=no, active=unknown\n\n36: ISA(PnP) 00.0: 0000 Unclassified device\n [Created at isapnp.142]\n Unique ID: ntp4.7mJa8EtFKk7\n SysFS ID: /devices/pnp0/00:04\n SysFS BusID: 00:04\n Hardware Class: unknown\n Model: \"Unclassified device\"\n SubVendor: SYN \n SubDevice: eisa 0x301e \n Config Status: cfg=new, avail=yes, need=no, active=unknown\n\n37: ISA(PnP) 00.0: 0000 Unclassified device\n [Created at isapnp.142]\n Unique ID: tWJy.WYwRElrJa93\n SysFS ID: /devices/pnp0/00:02\n SysFS BusID: 00:02\n Hardware Class: unknown\n Model: \"Unclassified device\"\n SubVendor: PNP \"PnP\"\n SubDevice: eisa 0x0b00 \n Config Status: cfg=new, avail=yes, need=no, active=unknown\n\n38: SCSI 400.0: 10600 Disk\n [Created at block.245]\n Unique ID: hSuP.sZwmS+_jqR5\n Parent ID: MZfG.0F8dj3iQqa3\n SysFS ID: /class/block/sdb\n SysFS BusID: 4:0:0:0\n SysFS Device Link: /devices/pci0000:00/0000:00:14.0/usb2/2-2/2-2:1.0/host4/target4:0:0/4:0:0:0\n Hardware Class: disk\n Model: \"KIOXIA TransMemory\"\n Vendor: usb 0x30de \"KIOXIA\"\n Device: usb 0x6544 \"TransMemory\"\n Serial ID: \"0\"\n Driver: \"usb-storage\", \"sd\"\n Driver Modules: \"usb_storage\", \"sd_mod\"\n Device File: /dev/sdb (/dev/sg2)\n Device Files: /dev/sdb, /dev/disk/by-id/usb-KIOXIA_TransMemory_0022CFF6B8A6C461331718B1-0:0, /dev/disk/by-path/pci-0000:00:14.0-usb-0:2:1.0-scsi-0:0:0:0\n Device Number: block 8:16-8:31 (char 21:2)\n BIOS id: 0x80\n Geometry (Logical): CHS 14782/64/32\n Size: 30274560 sectors a 512 bytes\n Capacity: 14 GB (15500574720 bytes)\n Speed: 480 Mbps\n Geometry (BIOS EDD): CHS 1884/255/63\n Size (BIOS EDD): 30274559 sectors\n Geometry (BIOS Legacy): CHS 1023/255/63\n Module Alias: \"usb:v30DEp6544d0001dc00dsc00dp00ic08isc06ip50in00\"\n Driver Info #0:\n Driver Status: uas is active\n Driver Activation Cmd: \"modprobe uas\"\n Driver Info #1:\n Driver Status: usb_storage is active\n Driver Activation Cmd: \"modprobe usb_storage\"\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n Attached to: #22 (USB Controller)\n\n39: None 00.0: 11300 Partition\n [Created at block.434]\n Unique ID: h4pj.SE1wIdpsiiC\n Parent ID: hSuP.sZwmS+_jqR5\n SysFS ID: /class/block/sdb/sdb1\n Hardware Class: partition\n Model: \"Partition\"\n Device File: /dev/sdb1\n Device Files: /dev/sdb1, /dev/disk/by-id/usb-KIOXIA_TransMemory_0022CFF6B8A6C461331718B1-0:0-part1, /dev/disk/by-label/ISOIMAGE, /dev/disk/by-partuuid/0ec92a03-01, /dev/disk/by-path/pci-0000:00:14.0-usb-0:2:1.0-scsi-0:0:0:0-part1, /dev/disk/by-uuid/CE9D-92E6\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n Attached to: #38 (Disk)\n\n40: SCSI 100.0: 10602 CD-ROM (DVD)\n [Created at block.249]\n Unique ID: KD9E.7u0Yp8+kBZD\n Parent ID: w7Y8.xfvW4auRA+2\n SysFS ID: /class/block/sr0\n SysFS BusID: 1:0:0:0\n SysFS Device Link: /devices/pci0000:00/0000:00:1f.2/ata2/host1/target1:0:0/1:0:0:0\n Hardware Class: cdrom\n Model: \"hp DVDRAM GU90N\"\n Vendor: \"hp\"\n Device: \"DVDRAM GU90N\"\n Revision: \"U900\"\n Driver: \"ahci\", \"sr\"\n Driver Modules: \"ahci\", \"sr_mod\"\n Device File: /dev/sr0 (/dev/sg1)\n Device Files: /dev/sr0, /dev/cdrom, /dev/cdrw, /dev/disk/by-id/ata-hp_DVDRAM_GU90N_M5GE5S40028, /dev/disk/by-id/wwn-0x5001480000000000, /dev/disk/by-path/pci-0000:00:1f.2-ata-2, /dev/dvd, /dev/dvdrw\n Device Number: block 11:0 (char 21:1)\n Features: CD-R, CD-RW, DVD, DVD-R, DVD-RW, DVD-R DL, DVD+R, DVD+RW, DVD+R DL, DVD-RAM, MRW, MRW-W\n Drive status: no medium\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n Attached to: #24 (SATA controller)\n Drive Speed: 24\n\n41: IDE 00.0: 10600 Disk\n [Created at block.245]\n Unique ID: 3OOL.g05FlevN1o1\n Parent ID: w7Y8.xfvW4auRA+2\n SysFS ID: /class/block/sda\n SysFS BusID: 0:0:0:0\n SysFS Device Link: /devices/pci0000:00/0000:00:1f.2/ata1/host0/target0:0:0/0:0:0:0\n Hardware Class: disk\n Model: \"ST500LT012-1DG14\"\n Device: \"ST500LT012-1DG14\"\n Revision: \"YAM1\"\n Serial ID: \"S3P9A80F\"\n Driver: \"ahci\", \"sd\"\n Driver Modules: \"ahci\", \"sd_mod\"\n Device File: /dev/sda\n Device Files: /dev/sda, /dev/disk/by-id/ata-ST500LT012-1DG142_S3P9A80F, /dev/disk/by-id/wwn-0x5000c50074f110eb, /dev/disk/by-path/pci-0000:00:1f.2-ata-1\n Device Number: block 8:0-8:15\n BIOS id: 0x81\n Geometry (Logical): CHS 60801/255/63\n Size: 976773168 sectors a 512 bytes\n Capacity: 465 GB (500107862016 bytes)\n Geometry (BIOS EDD): CHS 969021/16/63\n Size (BIOS EDD): 976773168 sectors\n Geometry (BIOS Legacy): CHS 1022/255/63\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n Attached to: #24 (SATA controller)\n\n42: None 00.0: 11300 Partition\n [Created at block.434]\n Unique ID: bdUI.SE1wIdpsiiC\n Parent ID: 3OOL.g05FlevN1o1\n SysFS ID: /class/block/sda/sda1\n Hardware Class: partition\n Model: \"Partition\"\n Device File: /dev/sda1\n Device Files: /dev/sda1, /dev/disk/by-id/ata-ST500LT012-1DG142_S3P9A80F-part1, /dev/disk/by-id/wwn-0x5000c50074f110eb-part1, /dev/disk/by-label/System\\x20Reserved, /dev/disk/by-partuuid/38d4fbef-01, /dev/disk/by-path/pci-0000:00:1f.2-ata-1-part1, /dev/disk/by-uuid/C6ACBD21ACBD0CC5\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n Attached to: #41 (Disk)\n\n43: None 00.0: 11300 Partition\n [Created at block.434]\n Unique ID: 2pkM.SE1wIdpsiiC\n Parent ID: 3OOL.g05FlevN1o1\n SysFS ID: /class/block/sda/sda2\n Hardware Class: partition\n Model: \"Partition\"\n Device File: /dev/sda2\n Device Files: /dev/sda2, /dev/disk/by-id/ata-ST500LT012-1DG142_S3P9A80F-part2, /dev/disk/by-id/wwn-0x5000c50074f110eb-part2, /dev/disk/by-label/WINDOWS7, /dev/disk/by-partuuid/38d4fbef-02, /dev/disk/by-path/pci-0000:00:1f.2-ata-1-part2, /dev/disk/by-uuid/E6F4BE1FF4BDF243\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n Attached to: #41 (Disk)\n\n44: None 00.0: 11300 Partition\n [Created at block.434]\n Unique ID: W__Q.SE1wIdpsiiC\n Parent ID: 3OOL.g05FlevN1o1\n SysFS ID: /class/block/sda/sda3\n Hardware Class: partition\n Model: \"Partition\"\n Device File: /dev/sda3\n Device Files: /dev/sda3, /dev/disk/by-id/ata-ST500LT012-1DG142_S3P9A80F-part3, /dev/disk/by-id/wwn-0x5000c50074f110eb-part3, /dev/disk/by-label/DATOS, /dev/disk/by-partuuid/38d4fbef-03, /dev/disk/by-path/pci-0000:00:1f.2-ata-1-part3, /dev/disk/by-uuid/EA64BF7D64BF4AD9\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n Attached to: #41 (Disk)\n\n45: USB 00.1: 0000 Unclassified device\n [Created at usb.122]\n Unique ID: 3QZi.KHC14zaenZB\n Parent ID: pBe4.2DFUsyrieMD\n SysFS ID: /devices/pci0000:00/0000:00:14.0/usb2/2-7/2-7:1.1\n SysFS BusID: 2-7:1.1\n Hardware Class: unknown\n Model: \"Lite-On HP HD Webcam\"\n Hotplug: USB\n Vendor: usb 0x04ca \"Lite-On Technology Corp.\"\n Device: usb 0x7032 \"HP HD Webcam\"\n Revision: \"0.04\"\n Serial ID: \"200901010001\"\n Driver: \"uvcvideo\"\n Driver Modules: \"uvcvideo\"\n Speed: 480 Mbps\n Module Alias: \"usb:v04CAp7032d0004dcEFdsc02dp01ic0Eisc02ip00in01\"\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n Attached to: #53 (Hub)\n\n46: USB 00.0: 11600 Fingerprint Reader\n [Created at usb.122]\n Unique ID: +rmv.oOUId9nesq9\n Parent ID: pBe4.2DFUsyrieMD\n SysFS ID: /devices/pci0000:00/0000:00:14.0/usb2/2-5/2-5:1.0\n SysFS BusID: 2-5:1.0\n Model: \"Validity Sensors VFS495 Fingerprint Reader\"\n Hotplug: USB\n Vendor: usb 0x138a \"Validity Sensors, Inc.\"\n Device: usb 0x003f \"VFS495 Fingerprint Reader\"\n Revision: \"1.04\"\n Serial ID: \"00b0685ccb93\"\n Speed: 12 Mbps\n Module Alias: \"usb:v138Ap003Fd0104dcFFdsc12dpFFicFFisc00ip00in00\"\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n Attached to: #53 (Hub)\n\n47: USB 00.0: 10a00 Hub\n [Created at usb.122]\n Unique ID: uIhY.xYNhIwdOaa6\n Parent ID: MZfG.0F8dj3iQqa3\n SysFS ID: /devices/pci0000:00/0000:00:14.0/usb3/3-0:1.0\n SysFS BusID: 3-0:1.0\n Hardware Class: hub\n Model: \"Linux Foundation 3.0 root hub\"\n Hotplug: USB\n Vendor: usb 0x1d6b \"Linux Foundation\"\n Device: usb 0x0003 \"3.0 root hub\"\n Revision: \"4.09\"\n Serial ID: \"0000:00:14.0\"\n Driver: \"hub\"\n Driver Modules: \"usbcore\"\n Module Alias: \"usb:v1D6Bp0003d0409dc09dsc00dp03ic09isc00ip00in00\"\n Driver Info #0:\n Driver Status: usbcore is active\n Driver Activation Cmd: \"modprobe usbcore\"\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n Attached to: #22 (USB Controller)\n\n48: USB 00.1: 11500 Bluetooth Device\n [Created at usb.122]\n Unique ID: 0vOp.dpnCeh_S1H9\n Parent ID: pBe4.2DFUsyrieMD\n SysFS ID: /devices/pci0000:00/0000:00:14.0/usb2/2-4/2-4:1.1\n SysFS BusID: 2-4:1.1\n Hardware Class: bluetooth\n Model: \"Realtek Bluetooth Radio\"\n Hotplug: USB\n Vendor: usb 0x0bda \"Realtek Semiconductor Corp.\"\n Device: usb 0xb001 \"Bluetooth Radio\"\n Revision: \"2.00\"\n Serial ID: \"00e04c000001\"\n Driver: \"btusb\"\n Driver Modules: \"btusb\"\n Speed: 12 Mbps\n Module Alias: \"usb:v0BDApB001d0200dcE0dsc01dp01icE0isc01ip01in01\"\n Driver Info #0:\n Driver Status: btusb is active\n Driver Activation Cmd: \"modprobe btusb\"\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n Attached to: #53 (Hub)\n\n50: USB 00.0: 10a00 Hub\n [Created at usb.122]\n Unique ID: k4bc.oLWCeziExdF\n Parent ID: 1GTX.5hyHIEn38h0\n SysFS ID: /devices/pci0000:00/0000:00:1d.0/usb1/1-0:1.0\n SysFS BusID: 1-0:1.0\n Hardware Class: hub\n Model: \"Linux Foundation 2.0 root hub\"\n Hotplug: USB\n Vendor: usb 0x1d6b \"Linux Foundation\"\n Device: usb 0x0002 \"2.0 root hub\"\n Revision: \"4.09\"\n Serial ID: \"0000:00:1d.0\"\n Driver: \"hub\"\n Driver Modules: \"usbcore\"\n Speed: 480 Mbps\n Module Alias: \"usb:v1D6Bp0002d0409dc09dsc00dp00ic09isc00ip00in00\"\n Driver Info #0:\n Driver Status: usbcore is active\n Driver Activation Cmd: \"modprobe usbcore\"\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n Attached to: #19 (USB Controller)\n\n52: USB 00.0: 10a00 Hub\n [Created at usb.122]\n Unique ID: ADDn.Wkj53szWOaA\n Parent ID: k4bc.oLWCeziExdF\n SysFS ID: /devices/pci0000:00/0000:00:1d.0/usb1/1-1/1-1:1.0\n SysFS BusID: 1-1:1.0\n Hardware Class: hub\n Model: \"Intel Hub\"\n Hotplug: USB\n Vendor: usb 0x8087 \"Intel Corp.\"\n Device: usb 0x8000 \n Revision: \"0.04\"\n Driver: \"hub\"\n Driver Modules: \"usbcore\"\n Speed: 480 Mbps\n Module Alias: \"usb:v8087p8000d0004dc09dsc00dp01ic09isc00ip00in00\"\n Driver Info #0:\n Driver Status: usbcore is active\n Driver Activation Cmd: \"modprobe usbcore\"\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n Attached to: #50 (Hub)\n\n53: USB 00.0: 10a00 Hub\n [Created at usb.122]\n Unique ID: pBe4.2DFUsyrieMD\n Parent ID: MZfG.0F8dj3iQqa3\n SysFS ID: /devices/pci0000:00/0000:00:14.0/usb2/2-0:1.0\n SysFS BusID: 2-0:1.0\n Hardware Class: hub\n Model: \"Linux Foundation 2.0 root hub\"\n Hotplug: USB\n Vendor: usb 0x1d6b \"Linux Foundation\"\n Device: usb 0x0002 \"2.0 root hub\"\n Revision: \"4.09\"\n Serial ID: \"0000:00:14.0\"\n Driver: \"hub\"\n Driver Modules: \"usbcore\"\n Speed: 480 Mbps\n Module Alias: \"usb:v1D6Bp0002d0409dc09dsc00dp01ic09isc00ip00in00\"\n Driver Info #0:\n Driver Status: usbcore is active\n Driver Activation Cmd: \"modprobe usbcore\"\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n Attached to: #22 (USB Controller)\n\n55: PS/2 00.0: 10800 Keyboard\n [Created at input.226]\n Unique ID: nLyy.+49ps10DtUF\n Hardware Class: keyboard\n Model: \"AT Translated Set 2 keyboard\"\n Vendor: 0x0001 \n Device: 0x0001 \"AT Translated Set 2 keyboard\"\n Compatible to: int 0x0211 0x0001\n Device File: /dev/input/event0\n Device Number: char 13:64\n Driver Info #0:\n XkbRules: xfree86\n XkbModel: pc104\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n\n56: PS/2 00.0: 10500 PS/2 Mouse\n [Created at input.249]\n Unique ID: AH6Q.ZHI3OT7LsxA\n Hardware Class: mouse\n Model: \"SynPS/2 Synaptics TouchPad\"\n Vendor: 0x0002 \n Device: 0x0007 \"SynPS/2 Synaptics TouchPad\"\n Compatible to: int 0x0210 0x0002\n Device File: /dev/input/mice (/dev/input/mouse0)\n Device Files: /dev/input/mice, /dev/input/mouse0, /dev/input/event5\n Device Number: char 13:63 (char 13:32)\n Driver Info #0:\n Buttons: 2\n Wheels: 0\n XFree86 Protocol: explorerps/2\n GPM Protocol: exps2\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n\n57: None 00.0: 10d00 Joystick\n [Created at input.312]\n Unique ID: 2oHd.lCw1nasASu4\n Hardware Class: joystick\n Model: \"ST LIS3LV02DL Accelerometer\"\n Device: \"ST LIS3LV02DL Accelerometer\"\n Device File: /dev/input/event14 (/dev/input/js0)\n Device Files: /dev/input/event14, /dev/input/js0, /dev/input/by-path/platform-lis3lv02d-event\n Device Number: char 13:78\n Buttons: 0\n Axes: 3\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n\n58: None 00.0: 10103 CPU\n [Created at cpu.460]\n Unique ID: rdCR.j8NaKXDZtZ6\n Hardware Class: cpu\n Arch: Intel\n Vendor: \"GenuineIntel\"\n Model: 6.69.1 \"Intel(R) Core(TM) i5-4210U CPU @ 1.70GHz\"\n Features: fpu,vme,de,pse,tsc,msr,pae,mce,cx8,apic,sep,mtrr,pge,mca,cmov,pat,pse36,clflush,dts,acpi,mmx,fxsr,sse,sse2,ss,ht,tm,pbe,nx,pdpe1gb,rdtscp,lm,constant_tsc,arch_perfmon,pebs,bts,xtopology,nonstop_tsc,aperfmperf,pni,pclmulqdq,dtes64,monitor,ds_cpl,vmx,est,tm2,ssse3,sdbg,fma,cx16,xtpr,pdcm,sse4_1,sse4_2,movbe,popcnt,tsc_deadline_timer,aes,xsave,avx,f16c,rdrand,lahf_lm,abm,epb,ssbd,ibrs,ibpb,stibp,tpr_shadow,vnmi,flexpriority,ept,vpid,fsgsbase,tsc_adjust,bmi1,avx2,smep,bmi2,erms,invpcid,xsaveopt,dtherm,ida,arat,pln,pts,md_clear,flush_l1d\n Clock: 2700 MHz\n BogoMips: 4788.85\n Cache: 3072 kb\n Units/Processor: 16\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n\n59: None 01.0: 10103 CPU\n [Created at cpu.460]\n Unique ID: wkFv.j8NaKXDZtZ6\n Hardware Class: cpu\n Arch: Intel\n Vendor: \"GenuineIntel\"\n Model: 6.69.1 \"Intel(R) Core(TM) i5-4210U CPU @ 1.70GHz\"\n Features: fpu,vme,de,pse,tsc,msr,pae,mce,cx8,apic,sep,mtrr,pge,mca,cmov,pat,pse36,clflush,dts,acpi,mmx,fxsr,sse,sse2,ss,ht,tm,pbe,nx,pdpe1gb,rdtscp,lm,constant_tsc,arch_perfmon,pebs,bts,xtopology,nonstop_tsc,aperfmperf,pni,pclmulqdq,dtes64,monitor,ds_cpl,vmx,est,tm2,ssse3,sdbg,fma,cx16,xtpr,pdcm,sse4_1,sse4_2,movbe,popcnt,tsc_deadline_timer,aes,xsave,avx,f16c,rdrand,lahf_lm,abm,epb,ssbd,ibrs,ibpb,stibp,tpr_shadow,vnmi,flexpriority,ept,vpid,fsgsbase,tsc_adjust,bmi1,avx2,smep,bmi2,erms,invpcid,xsaveopt,dtherm,ida,arat,pln,pts,md_clear,flush_l1d\n Clock: 2519 MHz\n BogoMips: 4788.85\n Cache: 3072 kb\n Units/Processor: 16\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n\n60: None 02.0: 10103 CPU\n [Created at cpu.460]\n Unique ID: +rIN.j8NaKXDZtZ6\n Hardware Class: cpu\n Arch: Intel\n Vendor: \"GenuineIntel\"\n Model: 6.69.1 \"Intel(R) Core(TM) i5-4210U CPU @ 1.70GHz\"\n Features: fpu,vme,de,pse,tsc,msr,pae,mce,cx8,apic,sep,mtrr,pge,mca,cmov,pat,pse36,clflush,dts,acpi,mmx,fxsr,sse,sse2,ss,ht,tm,pbe,nx,pdpe1gb,rdtscp,lm,constant_tsc,arch_perfmon,pebs,bts,xtopology,nonstop_tsc,aperfmperf,pni,pclmulqdq,dtes64,monitor,ds_cpl,vmx,est,tm2,ssse3,sdbg,fma,cx16,xtpr,pdcm,sse4_1,sse4_2,movbe,popcnt,tsc_deadline_timer,aes,xsave,avx,f16c,rdrand,lahf_lm,abm,epb,ssbd,ibrs,ibpb,stibp,tpr_shadow,vnmi,flexpriority,ept,vpid,fsgsbase,tsc_adjust,bmi1,avx2,smep,bmi2,erms,invpcid,xsaveopt,dtherm,ida,arat,pln,pts,md_clear,flush_l1d\n Clock: 2275 MHz\n BogoMips: 4788.85\n Cache: 3072 kb\n Units/Processor: 16\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n\n61: None 03.0: 10103 CPU\n [Created at cpu.460]\n Unique ID: 4zLr.j8NaKXDZtZ6\n Hardware Class: cpu\n Arch: Intel\n Vendor: \"GenuineIntel\"\n Model: 6.69.1 \"Intel(R) Core(TM) i5-4210U CPU @ 1.70GHz\"\n Features: fpu,vme,de,pse,tsc,msr,pae,mce,cx8,apic,sep,mtrr,pge,mca,cmov,pat,pse36,clflush,dts,acpi,mmx,fxsr,sse,sse2,ss,ht,tm,pbe,nx,pdpe1gb,rdtscp,lm,constant_tsc,arch_perfmon,pebs,bts,xtopology,nonstop_tsc,aperfmperf,pni,pclmulqdq,dtes64,monitor,ds_cpl,vmx,est,tm2,ssse3,sdbg,fma,cx16,xtpr,pdcm,sse4_1,sse4_2,movbe,popcnt,tsc_deadline_timer,aes,xsave,avx,f16c,rdrand,lahf_lm,abm,epb,ssbd,ibrs,ibpb,stibp,tpr_shadow,vnmi,flexpriority,ept,vpid,fsgsbase,tsc_adjust,bmi1,avx2,smep,bmi2,erms,invpcid,xsaveopt,dtherm,ida,arat,pln,pts,md_clear,flush_l1d\n Clock: 1839 MHz\n BogoMips: 4788.85\n Cache: 3072 kb\n Units/Processor: 16\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n\n62: None 00.0: 10700 Loopback\n [Created at net.126]\n Unique ID: ZsBS.GQNx7L4uPNA\n SysFS ID: /class/net/lo\n Hardware Class: network interface\n Model: \"Loopback network interface\"\n Device File: lo\n Link detected: yes\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n\n63: None 00.0: 10701 Ethernet\n [Created at net.126]\n Unique ID: zejA.ndpeucax6V1\n Parent ID: I+SI.fMnTBL88VH5\n SysFS ID: /class/net/enp8s0\n SysFS Device Link: /devices/pci0000:00/0000:00:1c.2/0000:08:00.0\n Hardware Class: network interface\n Model: \"Ethernet network interface\"\n Driver: \"r8169\"\n Driver Modules: \"r8169\"\n Device File: enp8s0\n HW Address: 64:51:06:b0:0a:f4\n Permanent HW Address: 64:51:06:b0:0a:f4\n Link detected: yes\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n Attached to: #28 (Ethernet controller)\n\n64: None 01.0: 10701 Ethernet\n [Created at net.126]\n Unique ID: VnCh.ndpeucax6V1\n Parent ID: S6TQ.bhUnM+Ctai7\n SysFS ID: /class/net/wlo1\n SysFS Device Link: /devices/pci0000:00/0000:00:1c.3/0000:09:00.0\n Hardware Class: network interface\n Model: \"Ethernet network interface\"\n Driver: \"rtl8723be\"\n Driver Modules: \"rtl8723be\"\n Device File: wlo1\n HW Address: 90:48:9a:af:6a:1b\n Permanent HW Address: 90:48:9a:af:6a:1b\n Link detected: no\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n Attached to: #27 (WLAN controller)\n", "lshw": {"capabilities": {"dmi-2.7": "DMI version 2.7", "smbios-2.7": "SMBIOS version 2.7"}, "children": [{"children": [{"capabilities": {"acpi": "ACPI", "biosbootspecification": "BIOS boot specification", "bootselect": "Selectable boot path", "cdboot": "Booting from CD-ROM/DVD", "edd": "Enhanced Disk Drive extensions", "int14serial": "INT14 serial line control", "int17printer": "INT17 printer control", "int5printscreen": "Print Screen key", "int9keyboard": "i8042 keyboard controller", "netboot": "Function-key initiated network service boot", "pci": "PCI bus", "pcmcia": "PCMCIA/PCCard", "shadowing": "BIOS shadowing", "smartbattery": "Smart battery", "uefi": "UEFI specification is supported", "upgrade": "BIOS EEPROM can be upgraded", "usb": "USB legacy emulation"}, "capacity": 6225920, "claimed": true, "class": "memory", "date": "06/17/2014", "description": "BIOS", "id": "firmware", "physid": "c", "size": 65536, "units": "bytes", "vendor": "Hewlett-Packard", "version": "M74 Ver. 01.02"}, {"businfo": "cpu@0", "capabilities": {"abm": true, "acpi": "thermal control (ACPI)", "aes": true, "aperfmperf": true, "apic": "on-chip advanced programmable interrupt controller (APIC)", "arat": true, "arch_perfmon": true, "avx": true, "avx2": true, "bmi1": true, "bmi2": true, "bts": true, "clflush": true, "cmov": "conditional move instruction", "constant_tsc": true, "cpufreq": "CPU Frequency scaling", "cx16": true, "cx8": "compare and exchange 8-byte", "de": "debugging extensions", "ds_cpl": true, "dtes64": true, "dtherm": true, "dts": "debug trace and EMON store MSRs", "epb": true, "ept": true, "erms": true, "est": true, "f16c": true, "flexpriority": true, "flush_l1d": true, "fma": true, "fpu": "mathematical co-processor", "fpu_exception": "FPU exceptions reporting", "fsgsbase": true, "fxsr": "fast floating point save/restore", "ht": "HyperThreading", "ibpb": true, "ibrs": true, "ida": true, "invpcid": true, "lahf_lm": true, "mca": "machine check architecture", "mce": "machine check exceptions", "md_clear": true, "mmx": "multimedia extensions (MMX)", "monitor": true, "movbe": true, "msr": "model-specific registers", "mtrr": "memory type range registers", "nonstop_tsc": true, "nx": "no-execute bit (NX)", "pae": "4GB+ memory addressing (Physical Address Extension)", "pat": "page attribute table", "pbe": "pending break event", "pclmulqdq": true, "pdcm": true, "pdpe1gb": true, "pebs": true, "pge": "page global enable", "pln": true, "pni": true, "popcnt": true, "pse": "page size extensions", "pse36": "36-bit page size extensions", "pts": true, "rdrand": true, "rdtscp": true, "sdbg": true, "sep": "fast system calls", "smep": true, "ss": "self-snoop", "ssbd": true, "sse": "streaming SIMD extensions (SSE)", "sse2": "streaming SIMD extensions (SSE2)", "sse4_1": true, "sse4_2": true, "ssse3": true, "stibp": true, "tm": "thermal interrupt and status", "tm2": true, "tpr_shadow": true, "tsc": "time stamp counter", "tsc_adjust": true, "tsc_deadline_timer": true, "vme": "virtual mode extensions", "vmx": "CPU virtualization (Vanderpool)", "vnmi": true, "vpid": true, "wp": true, "x86-64": "64bits extensions (x86-64)", "xsave": true, "xsaveopt": true, "xtopology": true, "xtpr": true}, "capacity": 2700000000, "children": [{"capabilities": {"asynchronous": "Asynchronous", "instruction": "Instruction cache", "internal": "Internal", "write-back": "Write-back"}, "capacity": 32768, "claimed": true, "class": "memory", "configuration": {"level": "1"}, "description": "L1 cache", "handle": "DMI:0008", "id": "cache:0", "physid": "8", "size": 32768, "slot": "L1 Cache", "units": "bytes"}, {"capabilities": {"asynchronous": "Asynchronous", "internal": "Internal", "unified": "Unified cache", "write-back": "Write-back"}, "capacity": 262144, "claimed": true, "class": "memory", "configuration": {"level": "2"}, "description": "L2 cache", "handle": "DMI:0009", "id": "cache:1", "physid": "9", "size": 262144, "slot": "L2 Cache", "units": "bytes"}, {"capabilities": {"asynchronous": "Asynchronous", "internal": "Internal", "unified": "Unified cache", "write-back": "Write-back"}, "capacity": 3145728, "claimed": true, "class": "memory", "configuration": {"level": "3"}, "description": "L3 cache", "handle": "DMI:000A", "id": "cache:2", "physid": "a", "size": 3145728, "slot": "L3 Cache", "units": "bytes"}, {"capabilities": {"logical": "Logical CPU"}, "claimed": true, "class": "processor", "description": "Logical CPU", "handle": "CPU:2.0", "id": "logicalcpu:0", "physid": "2.1", "width": 64}, {"capabilities": {"logical": "Logical CPU"}, "claimed": true, "class": "processor", "description": "Logical CPU", "handle": "CPU:2.1", "id": "logicalcpu:1", "physid": "2.2", "width": 64}, {"capabilities": {"logical": "Logical CPU"}, "claimed": true, "class": "processor", "description": "Logical CPU", "handle": "CPU:2.2", "id": "logicalcpu:2", "physid": "2.3", "width": 64}, {"capabilities": {"logical": "Logical CPU"}, "claimed": true, "class": "processor", "description": "Logical CPU", "handle": "CPU:2.3", "id": "logicalcpu:3", "physid": "2.4", "width": 64}, {"capabilities": {"logical": "Logical CPU"}, "claimed": true, "class": "processor", "description": "Logical CPU", "handle": "CPU:2.4", "id": "logicalcpu:4", "physid": "2.5", "width": 64}, {"capabilities": {"logical": "Logical CPU"}, "claimed": true, "class": "processor", "description": "Logical CPU", "handle": "CPU:2.5", "id": "logicalcpu:5", "physid": "2.6", "width": 64}, {"capabilities": {"logical": "Logical CPU"}, "claimed": true, "class": "processor", "description": "Logical CPU", "handle": "CPU:2.6", "id": "logicalcpu:6", "physid": "2.7", "width": 64}, {"capabilities": {"logical": "Logical CPU"}, "claimed": true, "class": "processor", "description": "Logical CPU", "handle": "CPU:2.7", "id": "logicalcpu:7", "physid": "2.8", "width": 64}, {"capabilities": {"logical": "Logical CPU"}, "claimed": true, "class": "processor", "description": "Logical CPU", "handle": "CPU:2.8", "id": "logicalcpu:8", "physid": "2.9", "width": 64}, {"capabilities": {"logical": "Logical CPU"}, "claimed": true, "class": "processor", "description": "Logical CPU", "handle": "CPU:2.9", "id": "logicalcpu:9", "physid": "2.a", "width": 64}, {"capabilities": {"logical": "Logical CPU"}, "claimed": true, "class": "processor", "description": "Logical CPU", "handle": "CPU:2.10", "id": "logicalcpu:10", "physid": "2.b", "width": 64}, {"capabilities": {"logical": "Logical CPU"}, "claimed": true, "class": "processor", "description": "Logical CPU", "handle": "CPU:2.11", "id": "logicalcpu:11", "physid": "2.c", "width": 64}, {"capabilities": {"logical": "Logical CPU"}, "claimed": true, "class": "processor", "description": "Logical CPU", "handle": "CPU:2.12", "id": "logicalcpu:12", "physid": "2.d", "width": 64}, {"capabilities": {"logical": "Logical CPU"}, "claimed": true, "class": "processor", "description": "Logical CPU", "handle": "CPU:2.13", "id": "logicalcpu:13", "physid": "2.e", "width": 64}, {"capabilities": {"logical": "Logical CPU"}, "claimed": true, "class": "processor", "description": "Logical CPU", "handle": "CPU:2.14", "id": "logicalcpu:14", "physid": "2.f", "width": 64}, {"capabilities": {"logical": "Logical CPU"}, "claimed": true, "class": "processor", "description": "Logical CPU", "handle": "CPU:2.15", "id": "logicalcpu:15", "physid": "2.10", "width": 64}], "claimed": true, "class": "processor", "clock": 100000000, "configuration": {"cores": "2", "enabledcores": "2", "id": "2", "threads": "4"}, "description": "CPU", "handle": "DMI:0007", "id": "cpu", "physid": "7", "product": "Intel(R) Core(TM) i5-4210U CPU @ 1.70GHz", "serial": "0004-0651-0000-0000-0000-0000", "size": 1494140000, "slot": "U3E1", "units": "Hz", "vendor": "Intel Corp.", "version": "6.5.1", "width": 64}, {"capabilities": {"asynchronous": "Asynchronous", "data": "Data cache", "internal": "Internal", "write-back": "Write-back"}, "capacity": 32768, "claimed": true, "class": "memory", "configuration": {"level": "1"}, "description": "L1 cache", "handle": "DMI:0006", "id": "cache", "physid": "6", "size": 32768, "slot": "L1 Cache", "units": "bytes"}, {"children": [{"claimed": true, "class": "memory", "clock": 1600000000, "description": "SODIMM DDR3 Synchronous 1600 MHz (0.6 ns)", "handle": "DMI:0001", "id": "bank:0", "physid": "0", "product": "8KTF51264HZ-1G6N1", "serial": "18503423", "size": 4294967296, "slot": "Bottom-Slot 1(left)", "units": "bytes", "vendor": "Micron", "width": 64}, {"claimed": true, "class": "memory", "clock": 1600000000, "description": "SODIMM DDR3 Synchronous 1600 MHz (0.6 ns)", "handle": "DMI:0003", "id": "bank:1", "physid": "1", "product": "8KTF51264HZ-1G6N1", "serial": "18651324", "size": 4294967296, "slot": "Bottom-Slot 2(right)", "units": "bytes", "vendor": "Micron", "width": 64}], "claimed": true, "class": "memory", "description": "System Memory", "handle": "DMI:0000", "id": "memory", "physid": "0", "size": 8589934592, "slot": "System board or motherboard", "units": "bytes"}, {"businfo": "pci@0000:00:00.0", "children": [{"businfo": "pci@0000:00:02.0", "capabilities": {"bus_master": "bus mastering", "cap_list": "PCI capabilities listing", "msi": "Message Signalled Interrupts", "pm": "Power Management", "rom": "extension ROM", "vga_controller": true}, "claimed": true, "class": "display", "clock": 33000000, "configuration": {"driver": "i915", "latency": "0"}, "description": "VGA compatible controller", "handle": "PCI:0000:00:02.0", "id": "display", "physid": "2", "product": "Haswell-ULT Integrated Graphics Controller", "vendor": "Intel Corporation", "version": "0b", "width": 64}, {"businfo": "pci@0000:00:03.0", "capabilities": {"bus_master": "bus mastering", "cap_list": "PCI capabilities listing", "msi": "Message Signalled Interrupts", "pciexpress": "PCI Express", "pm": "Power Management"}, "claimed": true, "class": "multimedia", "clock": 33000000, "configuration": {"driver": "snd_hda_intel", "latency": "0"}, "description": "Audio device", "handle": "PCI:0000:00:03.0", "id": "multimedia:0", "physid": "3", "product": "Haswell-ULT HD Audio Controller", "vendor": "Intel Corporation", "version": "0b", "width": 64}, {"businfo": "pci@0000:00:14.0", "capabilities": {"bus_master": "bus mastering", "cap_list": "PCI capabilities listing", "msi": "Message Signalled Interrupts", "pm": "Power Management", "xhci": true}, "children": [{"businfo": "usb@2", "capabilities": {"usb-2.00": "USB 2.0"}, "children": [{"businfo": "usb@2:2", "capabilities": {"emulated": "Emulated device", "scsi": "SCSI", "usb-2.00": "USB 2.0"}, "children": [{"businfo": "scsi@4:0.0.0", "capabilities": {"removable": "support is removable"}, "children": [{"capabilities": {"partitioned": "Partitioned disk", "partitioned:dos": "MS-DOS partition table"}, "children": [{"capabilities": {"bootable": "Bootable partition (active)", "fat": "Windows FAT", "initialized": "initialized volume", "primary": "Primary partition"}, "capacity": 15499526144, "claimed": true, "class": "volume", "configuration": {"FATs": "2", "filesystem": "fat", "label": "ISOIMAGE", "mount.fstype": "vfat", "mount.options": "ro,noatime,fmask=0022,dmask=0022,codepage=437,iocharset=ascii,shortname=mixed,utf8,errors=remount-ro", "state": "mounted"}, "description": "Windows FAT volume", "dev": "8:17", "id": "volume", "logicalname": ["/dev/sdb1", "/lib/live/mount/medium"], "physid": "1", "serial": "ce9d-92e6", "size": 15496820736, "vendor": "SYSLINUX", "version": "FAT32"}], "claimed": true, "class": "disk", "configuration": {"signature": "0ec92a03"}, "dev": "8:16", "id": "medium", "logicalname": "/dev/sdb", "physid": "0", "size": 15500574720, "units": "bytes"}], "claimed": true, "class": "disk", "configuration": {"ansiversion": "6", "logicalsectorsize": "512", "sectorsize": "512"}, "description": "SCSI Disk", "dev": "8:16", "handle": "SCSI:04:00:00:00", "id": "disk", "logicalname": "/dev/sdb", "physid": "0.0.0", "product": "TransMemory", "serial": "0", "size": 15500574720, "units": "bytes", "vendor": "KIOXIA"}], "claimed": true, "class": "storage", "configuration": {"driver": "usb-storage", "maxpower": "300mA", "speed": "480Mbit/s"}, "description": "Mass storage device", "handle": "USB:2:2", "id": "usb:0", "logicalname": "scsi4", "physid": "2", "product": "TransMemory", "serial": "0022CFF6B8A6C461331718B1", "vendor": "KIOXIA", "version": "0.01"}, {"businfo": "usb@2:4", "capabilities": {"bluetooth": "Bluetooth wireless radio", "usb-2.10": true}, "claimed": true, "class": "communication", "configuration": {"driver": "btusb", "maxpower": "500mA", "speed": "12Mbit/s"}, "description": "Bluetooth wireless interface", "handle": "USB:2:3", "id": "usb:1", "physid": "4", "product": "Bluetooth Radio", "serial": "00e04c000001", "vendor": "Realtek", "version": "2.00"}, {"businfo": "usb@2:5", "capabilities": {"usb-1.10": "USB 1.1"}, "class": "generic", "configuration": {"maxpower": "100mA", "speed": "12Mbit/s"}, "description": "Generic USB device", "handle": "USB:2:4", "id": "usb:2", "physid": "5", "product": "VFS495 Fingerprint Reader", "serial": "00b0685ccb93", "vendor": "Validity Sensors, Inc.", "version": "1.04"}, {"businfo": "usb@2:7", "capabilities": {"usb-2.00": "USB 2.0"}, "claimed": true, "class": "multimedia", "configuration": {"driver": "uvcvideo", "maxpower": "500mA", "speed": "480Mbit/s"}, "description": "Video", "handle": "USB:2:5", "id": "usb:3", "physid": "7", "product": "HP HD Webcam", "serial": "200901010001", "vendor": "DDZLE019I6OJ8L", "version": "0.04"}], "claimed": true, "class": "bus", "configuration": {"driver": "hub", "slots": "9", "speed": "480Mbit/s"}, "handle": "USB:2:1", "id": "usbhost:0", "logicalname": "usb2", "physid": "0", "product": "xHCI Host Controller", "vendor": "Linux 4.9.0-14-686-pae xhci-hcd", "version": "4.09"}, {"businfo": "usb@3", "capabilities": {"usb-3.00": true}, "claimed": true, "class": "bus", "configuration": {"driver": "hub", "slots": "4", "speed": "5000Mbit/s"}, "handle": "USB:3:1", "id": "usbhost:1", "logicalname": "usb3", "physid": "1", "product": "xHCI Host Controller", "vendor": "Linux 4.9.0-14-686-pae xhci-hcd", "version": "4.09"}], "claimed": true, "class": "bus", "clock": 33000000, "configuration": {"driver": "xhci_hcd", "latency": "0"}, "description": "USB controller", "handle": "PCI:0000:00:14.0", "id": "usb:0", "physid": "14", "product": "8 Series USB xHCI HC", "vendor": "Intel Corporation", "version": "04", "width": 64}, {"businfo": "pci@0000:00:16.0", "capabilities": {"bus_master": "bus mastering", "cap_list": "PCI capabilities listing", "msi": "Message Signalled Interrupts", "pm": "Power Management"}, "claimed": true, "class": "communication", "clock": 33000000, "configuration": {"driver": "mei_me", "latency": "0"}, "description": "Communication controller", "handle": "PCI:0000:00:16.0", "id": "communication", "physid": "16", "product": "8 Series HECI #0", "vendor": "Intel Corporation", "version": "04", "width": 64}, {"businfo": "pci@0000:00:1b.0", "capabilities": {"bus_master": "bus mastering", "cap_list": "PCI capabilities listing", "msi": "Message Signalled Interrupts", "pm": "Power Management"}, "claimed": true, "class": "multimedia", "clock": 33000000, "configuration": {"driver": "snd_hda_intel", "latency": "64"}, "description": "Audio device", "handle": "PCI:0000:00:1b.0", "id": "multimedia:1", "physid": "1b", "product": "8 Series HD Audio Controller", "vendor": "Intel Corporation", "version": "04", "width": 64}, {"businfo": "pci@0000:00:1c.0", "capabilities": {"bus_master": "bus mastering", "cap_list": "PCI capabilities listing", "msi": "Message Signalled Interrupts", "normal_decode": true, "pci": true, "pciexpress": "PCI Express", "pm": "Power Management"}, "claimed": true, "class": "bridge", "clock": 33000000, "configuration": {"driver": "pcieport"}, "description": "PCI bridge", "handle": "PCIBUS:0000:01", "id": "pci:0", "physid": "1c", "product": "8 Series PCI Express Root Port 1", "vendor": "Intel Corporation", "version": "e4", "width": 32}, {"businfo": "pci@0000:00:1c.1", "capabilities": {"bus_master": "bus mastering", "cap_list": "PCI capabilities listing", "msi": "Message Signalled Interrupts", "normal_decode": true, "pci": true, "pciexpress": "PCI Express", "pm": "Power Management"}, "children": [{"businfo": "pci@0000:07:00.0", "capabilities": {"bus_master": "bus mastering", "cap_list": "PCI capabilities listing", "msi": "Message Signalled Interrupts", "pciexpress": "PCI Express", "pm": "Power Management"}, "claimed": true, "class": "generic", "clock": 33000000, "configuration": {"driver": "rtsx_pci", "latency": "0"}, "description": "Unassigned class", "handle": "PCI:0000:07:00.0", "id": "generic", "physid": "0", "product": "RTS5227 PCI Express Card Reader", "vendor": "Realtek Semiconductor Co., Ltd.", "version": "01", "width": 32}], "claimed": true, "class": "bridge", "clock": 33000000, "configuration": {"driver": "pcieport"}, "description": "PCI bridge", "handle": "PCIBUS:0000:07", "id": "pci:1", "physid": "1c.1", "product": "8 Series PCI Express Root Port 2", "vendor": "Intel Corporation", "version": "e4", "width": 32}, {"businfo": "pci@0000:00:1c.2", "capabilities": {"bus_master": "bus mastering", "cap_list": "PCI capabilities listing", "msi": "Message Signalled Interrupts", "normal_decode": true, "pci": true, "pciexpress": "PCI Express", "pm": "Power Management"}, "children": [{"businfo": "pci@0000:08:00.0", "capabilities": {"1000bt": "1Gbit/s", "1000bt-fd": "1Gbit/s (full duplex)", "100bt": "100Mbit/s", "100bt-fd": "100Mbit/s (full duplex)", "10bt": "10Mbit/s", "10bt-fd": "10Mbit/s (full duplex)", "autonegotiation": "Auto-negotiation", "bus_master": "bus mastering", "cap_list": "PCI capabilities listing", "ethernet": true, "mii": "Media Independent Interface", "msi": "Message Signalled Interrupts", "msix": "MSI-X", "pciexpress": "PCI Express", "physical": "Physical interface", "pm": "Power Management", "tp": "twisted pair", "vpd": "Vital Product Data"}, "capacity": 1000000000, "claimed": true, "class": "network", "clock": 33000000, "configuration": {"autonegotiation": "on", "broadcast": "yes", "driver": "r8169", "driverversion": "2.3LK-NAPI", "duplex": "full", "firmware": "rtl8168g-3_0.0.1 04/23/13", "ip": "192.168.108.192", "latency": "0", "link": "yes", "multicast": "yes", "port": "MII", "speed": "1Gbit/s"}, "description": "Ethernet interface", "handle": "PCI:0000:08:00.0", "id": "network", "logicalname": "enp8s0", "physid": "0", "product": "RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller", "serial": "64:51:06:b0:0a:f4", "size": 1000000000, "units": "bit/s", "vendor": "Realtek Semiconductor Co., Ltd.", "version": "10", "width": 64}], "claimed": true, "class": "bridge", "clock": 33000000, "configuration": {"driver": "pcieport"}, "description": "PCI bridge", "handle": "PCIBUS:0000:08", "id": "pci:2", "physid": "1c.2", "product": "8 Series PCI Express Root Port 3", "vendor": "Intel Corporation", "version": "e4", "width": 32}, {"businfo": "pci@0000:00:1c.3", "capabilities": {"bus_master": "bus mastering", "cap_list": "PCI capabilities listing", "msi": "Message Signalled Interrupts", "normal_decode": true, "pci": true, "pciexpress": "PCI Express", "pm": "Power Management"}, "children": [{"businfo": "pci@0000:09:00.0", "capabilities": {"bus_master": "bus mastering", "cap_list": "PCI capabilities listing", "ethernet": true, "msi": "Message Signalled Interrupts", "pciexpress": "PCI Express", "physical": "Physical interface", "pm": "Power Management", "wireless": "Wireless-LAN"}, "claimed": true, "class": "network", "clock": 33000000, "configuration": {"broadcast": "yes", "driver": "rtl8723be", "driverversion": "4.9.0-14-686-pae", "firmware": "N/A", "latency": "0", "link": "no", "multicast": "yes", "wireless": "IEEE 802.11"}, "description": "Wireless interface", "disabled": true, "handle": "PCI:0000:09:00.0", "id": "network", "logicalname": "wlo1", "physid": "0", "product": "RTL8723BE PCIe Wireless Network Adapter", "serial": "90:48:9a:af:6a:1b", "vendor": "Realtek Semiconductor Co., Ltd.", "version": "00", "width": 64}], "claimed": true, "class": "bridge", "clock": 33000000, "configuration": {"driver": "pcieport"}, "description": "PCI bridge", "handle": "PCIBUS:0000:09", "id": "pci:3", "physid": "1c.3", "product": "8 Series PCI Express Root Port 4", "vendor": "Intel Corporation", "version": "e4", "width": 32}, {"businfo": "pci@0000:00:1d.0", "capabilities": {"bus_master": "bus mastering", "cap_list": "PCI capabilities listing", "debug": "Debug port", "ehci": "Enhanced Host Controller Interface (USB2)", "pm": "Power Management"}, "children": [{"businfo": "usb@1", "capabilities": {"usb-2.00": "USB 2.0"}, "children": [{"businfo": "usb@1:1", "capabilities": {"usb-2.00": "USB 2.0"}, "claimed": true, "class": "bus", "configuration": {"driver": "hub", "slots": "8", "speed": "480Mbit/s"}, "description": "USB hub", "handle": "USB:1:2", "id": "usb", "physid": "1", "vendor": "Intel Corp.", "version": "0.04"}], "claimed": true, "class": "bus", "configuration": {"driver": "hub", "slots": "2", "speed": "480Mbit/s"}, "handle": "USB:1:1", "id": "usbhost", "logicalname": "usb1", "physid": "1", "product": "EHCI Host Controller", "vendor": "Linux 4.9.0-14-686-pae ehci_hcd", "version": "4.09"}], "claimed": true, "class": "bus", "clock": 33000000, "configuration": {"driver": "ehci-pci", "latency": "0"}, "description": "USB controller", "handle": "PCI:0000:00:1d.0", "id": "usb:1", "physid": "1d", "product": "8 Series USB EHCI #1", "vendor": "Intel Corporation", "version": "04", "width": 32}, {"businfo": "pci@0000:00:1f.0", "capabilities": {"bus_master": "bus mastering", "cap_list": "PCI capabilities listing", "isa": true}, "claimed": true, "class": "bridge", "clock": 33000000, "configuration": {"driver": "lpc_ich", "latency": "0"}, "description": "ISA bridge", "handle": "PCI:0000:00:1f.0", "id": "isa", "physid": "1f", "product": "8 Series LPC Controller", "vendor": "Intel Corporation", "version": "04", "width": 32}, {"businfo": "pci@0000:00:1f.2", "capabilities": {"ahci_1.0": true, "bus_master": "bus mastering", "cap_list": "PCI capabilities listing", "msi": "Message Signalled Interrupts", "pm": "Power Management", "storage": true}, "claimed": true, "class": "storage", "clock": 66000000, "configuration": {"driver": "ahci", "latency": "0"}, "description": "SATA controller", "handle": "PCI:0000:00:1f.2", "id": "storage", "physid": "1f.2", "product": "8 Series SATA Controller 1 [AHCI mode]", "vendor": "Intel Corporation", "version": "04", "width": 32}, {"businfo": "pci@0000:00:1f.6", "capabilities": {"bus_master": "bus mastering", "cap_list": "PCI capabilities listing", "msi": "Message Signalled Interrupts", "pm": "Power Management"}, "claimed": true, "class": "generic", "clock": 33000000, "configuration": {"driver": "intel_pch_thermal", "latency": "0"}, "description": "Signal processing controller", "handle": "PCI:0000:00:1f.6", "id": "generic", "physid": "1f.6", "product": "8 Series Thermal", "vendor": "Intel Corporation", "version": "04", "width": 64}], "claimed": true, "class": "bridge", "clock": 33000000, "configuration": {"driver": "hsw_uncore"}, "description": "Host bridge", "handle": "PCIBUS:0000:00", "id": "pci", "physid": "100", "product": "Haswell-ULT DRAM Controller", "vendor": "Intel Corporation", "version": "0b", "width": 32}, {"capabilities": {"emulated": "Emulated device"}, "children": [{"businfo": "scsi@0:0.0.0", "capabilities": {"partitioned": "Partitioned disk", "partitioned:dos": "MS-DOS partition table"}, "children": [{"businfo": "scsi@0:0.0.0,1", "capabilities": {"bootable": "Bootable partition (active)", "initialized": "initialized volume", "ntfs": "Windows NTFS", "primary": "Primary partition"}, "capacity": 523239424, "claimed": true, "class": "volume", "configuration": {"clustersize": "4096", "created": "2019-07-03 18:32:58", "filesystem": "ntfs", "label": "System Reserved", "modified_by_chkdsk": "true", "mounted_on_nt4": "true", "resize_log_file": "true", "state": "dirty", "upgrade_on_mount": "true"}, "description": "Windows NTFS volume", "dev": "8:1", "id": "volume:0", "logicalname": "/dev/sda1", "physid": "1", "serial": "acbd-0cc5", "size": 522190336, "version": "3.1"}, {"businfo": "scsi@0:0.0.0,2", "capabilities": {"initialized": "initialized volume", "ntfs": "Windows NTFS", "primary": "Primary partition"}, "capacity": 125829120000, "claimed": true, "class": "volume", "configuration": {"clustersize": "4096", "created": "2019-07-03 18:32:59", "filesystem": "ntfs", "label": "WINDOWS7", "state": "clean"}, "description": "Windows NTFS volume", "dev": "8:2", "id": "volume:1", "logicalname": "/dev/sda2", "physid": "2", "serial": "408d7f13-28ec-aa48-9055-88d2c55f3d42", "size": 125808147968, "version": "3.1"}, {"businfo": "scsi@0:0.0.0,3", "capabilities": {"initialized": "initialized volume", "ntfs": "Windows NTFS", "primary": "Primary partition"}, "capacity": 373753380864, "claimed": true, "class": "volume", "configuration": {"clustersize": "4096", "created": "2019-07-03 18:33:01", "filesystem": "ntfs", "label": "DATOS", "modified_by_chkdsk": "true", "mounted_on_nt4": "true", "resize_log_file": "true", "state": "dirty", "upgrade_on_mount": "true"}, "description": "Windows NTFS volume", "dev": "8:3", "id": "volume:2", "logicalname": "/dev/sda3", "physid": "3", "serial": "fe81de5e-cd06-2348-aa95-4b2e6930ce4d", "size": 373732408832, "version": "3.1"}], "claimed": true, "class": "disk", "configuration": {"ansiversion": "5", "logicalsectorsize": "512", "sectorsize": "4096", "signature": "38d4fbef"}, "description": "ATA Disk", "dev": "8:0", "handle": "SCSI:00:00:00:00", "id": "disk", "logicalname": "/dev/sda", "physid": "0.0.0", "product": "ST500LT012-1DG15", "serial": "S3P8A90B", "size": 500107862016, "units": "bytes", "vendor": "Seagate", "version": "YAM1"}], "claimed": true, "class": "storage", "id": "scsi:0", "logicalname": "scsi0", "physid": "1"}, {"capabilities": {"emulated": "Emulated device"}, "children": [{"businfo": "scsi@1:0.0.0", "capabilities": {"audio": "Audio CD playback", "cd-r": "CD-R burning", "cd-rw": "CD-RW burning", "dvd": "DVD playback", "dvd-r": "DVD-R burning", "dvd-ram": "DVD-RAM burning", "removable": "support is removable"}, "claimed": true, "class": "disk", "configuration": {"ansiversion": "5", "status": "nodisc"}, "description": "DVD-RAM writer", "dev": "11:0", "handle": "SCSI:01:00:00:00", "id": "cdrom", "logicalname": ["/dev/cdrom", "/dev/cdrw", "/dev/dvd", "/dev/dvdrw", "/dev/sr0"], "physid": "0.0.0", "product": "DVDRAM GU90N", "vendor": "hp", "version": "U900"}], "claimed": true, "class": "storage", "id": "scsi:1", "logicalname": "scsi1", "physid": "2"}], "claimed": true, "class": "bus", "description": "Motherboard", "handle": "DMI:000E", "id": "core", "physid": "0", "product": "2248", "serial": "PELSAF2WV6XGL6", "vendor": "Hewlett-Packard", "version": "KBC Version 67.21"}, {"capacity": 40100, "claimed": true, "class": "power", "configuration": {"voltage": "14.8V"}, "handle": "DMI:001C", "id": "battery", "physid": "1", "product": "VI04040XL", "slot": "Primary", "units": "mWh", "vendor": "33-24"}], "claimed": true, "class": "system", "configuration": {"boot": "normal", "chassis": "notebook", "family": "103C_5336AN G=N L=BUS B=HP S=PRO", "sku": "F5R46AV", "uuid": "7F25D367-F6D0-E311-A300-2286570180FF"}, "description": "Notebook", "handle": "DMI:000D", "id": "debian", "product": "HP ProBook 450 G2 (F5R46AV)", "serial": "CND4286ZJ2", "vendor": "Hewlett-Packard", "version": "A3009DD10303", "width": 32}}, "device": {"actions": [{"elapsed": 1, "rate": 0.8448, "type": "BenchmarkRamSysbench"}], "chassis": "Netbook", "manufacturer": "Hewlett-Packard", "model": "HP ProBook 450 G2", "serialNumber": "CND4286ZJ2", "sku": "F5R46AV", "type": "Laptop", "version": "A3009DD10303"}, "elapsed": 13745, "endTime": "2022-01-13T10:24:04.179939+00:00", "software": "Workbench", "type": "Snapshot", "uuid": "c55deee5-7228-411c-883c-99e4c2090d87", "version": "11.0b11"} diff --git a/example/dpp-snapshots/hp_probook_g2.json b/example/dpp-snapshots/hp_probook_g2.json new file mode 100644 index 0000000..4d375b8 --- /dev/null +++ b/example/dpp-snapshots/hp_probook_g2.json @@ -0,0 +1 @@ +{"closed": true, "components": [{"actions": [], "manufacturer": "AUO", "model": "LCD Monitor", "productionDate": "2013-12-15T00:00:00", "refreshRate": 60, "resolutionHeight": 768, "resolutionWidth": 1366, "serialNumber": null, "size": 15.529237982414482, "technology": "LCD", "type": "Display"}, {"actions": [{"elapsed": 0, "rate": 19155.4, "type": "BenchmarkProcessor"}, {"elapsed": 0, "rate": 18446740964.4517, "type": "BenchmarkProcessorSysbench"}], "address": 64, "brand": "Core i5", "cores": 2, "generation": 4, "manufacturer": "Intel Corp.", "model": "Intel Core i5-4210U CPU @ 1.70GHz", "serialNumber": null, "speed": 1.49414, "threads": 4, "type": "Processor"}, {"actions": [], "manufacturer": "Intel Corporation", "model": "Haswell-ULT HD Audio Controller", "serialNumber": null, "type": "SoundCard"}, {"actions": [], "manufacturer": "DDZLE019I6OJ8L", "model": "HP HD Webcam", "serialNumber": "200901010001", "type": "SoundCard"}, {"actions": [], "manufacturer": "Intel Corporation", "model": "8 Series HD Audio Controller", "serialNumber": null, "type": "SoundCard"}, {"actions": [], "format": "SODIMM", "interface": "DDR3", "manufacturer": "Micron", "model": "8KTF51264HZ-1G6N1", "serialNumber": "18503423", "size": 4096.0, "speed": 1600.0, "type": "RamModule"}, {"actions": [], "format": "SODIMM", "interface": "DDR3", "manufacturer": "Micron", "model": "8KTF51264HZ-1G6N1", "serialNumber": "18651324", "size": 4096.0, "speed": 1600.0, "type": "RamModule"}, {"actions": [{"assessment": true, "commandTimeout": 4295032833, "currentPendingSectorCount": 0, "elapsed": 120, "length": "Short", "lifetime": 8627, "offlineUncorrectable": 0, "powerCycleCount": 1575, "reallocatedSectorCount": 0, "reportedUncorrectableErrors": 5009, "severity": "Info", "status": "Completed without error", "type": "TestDataStorage"}, {"elapsed": 14, "readSpeed": 104.0, "type": "BenchmarkDataStorage", "writeSpeed": 24.4}, {"endTime": "2022-01-13T14:13:09.338771+00:00", "severity": "Info", "startTime": "2022-01-13T09:34:39.026634+00:00", "steps": [{"endTime": "2022-01-13T11:07:49.733336+00:00", "severity": "Info", "startTime": "2022-01-13T09:34:39.026954+00:00", "type": "StepZero"}, {"endTime": "2022-01-13T14:13:09.338626+00:00", "severity": "Info", "startTime": "2022-01-13T11:07:49.734069+00:00", "type": "StepRandom"}], "type": "EraseSectors"}], "interface": "ATA", "manufacturer": "Seagate", "model": "ST500LT012-1DG15", "serialNumber": "S3P9A81F", "size": 500107.86201599997, "type": "HardDrive", "variant": "YAM1"}, {"actions": [], "manufacturer": "Realtek Semiconductor Co., Ltd.", "model": "RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller", "serialNumber": "64:51:06:b0:0a:f6", "speed": 1000.0, "type": "NetworkAdapter", "variant": "10", "wireless": false}, {"actions": [], "manufacturer": "Realtek Semiconductor Co., Ltd.", "model": "RTL8723BA PCIe Wireless Network Adapter", "serialNumber": "90:48:9a:af:6a:1b", "speed": null, "type": "NetworkAdapter", "variant": "00", "wireless": true}, {"actions": [], "manufacturer": "Intel Corporation", "memory": null, "model": "Haswell-ULT Integrated Graphics Controller", "serialNumber": null, "type": "GraphicCard"}, {"actions": [], "biosDate": "2014-06-17T00:00:00", "firewire": 0, "manufacturer": "Hewlett-Packard", "model": "2248", "pcmcia": 0, "ramMaxSize": 16, "ramSlots": 2, "serial": 0, "serialNumber": "PELSAF2WV6XGL7", "slots": 2, "type": "Motherboard", "usb": 2, "version": "M74 Ver. 01.02"}], "debug": {"battery": null, "hwinfo": "01: None 00.0: 10105 BIOS\n [Created at bios.186]\n Unique ID: rdCR.lZF+r4EgHp4\n Hardware Class: bios\n BIOS Keyboard LED Status:\n Scroll Lock: off\n Num Lock: off\n Caps Lock: off\n Parallel Port 0: 0x378\n Base Memory: 631 kB\n PnP BIOS: @@P3C00\n BIOS: extended read supported\n SMBIOS Version: 2.7\n BIOS Info: #12\n Vendor: \"Hewlett-Packard\"\n Version: \"M74 Ver. 01.02\"\n Date: \"06/17/2014\"\n Start Address: 0xf0000\n ROM Size: 6144 kB\n Features: 0x0f83000000093c099980\n PCI supported\n PCMCIA supported\n BIOS flashable\n BIOS shadowing allowed\n CD boot supported\n Selectable boot supported\n EDD spec supported\n Print Screen supported\n 8042 Keyboard Services supported\n Serial Services supported\n Printer Services supported\n ACPI supported\n USB Legacy supported\n Smart Battery supported\n BIOS Boot Spec supported\n F12 Network boot supported\n System Info: #13\n Manufacturer: \"Hewlett-Packard\"\n Product: \"HP ProBook 450 G2\"\n Version: \"A3009DD10303\"\n Serial: \"CND4286ZJ3\"\n UUID: undefined, but settable\n Wake-up: 0x06 (Power Switch)\n Board Info: #14\n Manufacturer: \"Hewlett-Packard\"\n Product: \"2248\"\n Version: \"KBC Version 67.21\"\n Serial: \"PELSAF2WV6XGL8\"\n Type: 0x01 (Other)\n Features: 0x09\n Hosting Board\n Replaceable\n Chassis: #15\n Chassis Info: #15\n Manufacturer: \"Hewlett-Packard\"\n Serial: \"CND4286ZJ3\"\n Type: 0x0a (Notebook)\n Bootup State: 0x03 (Safe)\n Power Supply State: 0x03 (Safe)\n Thermal State: 0x01 (Other)\n Security Status: 0x01 (Other)\n Processor Info: #7\n Socket: \"U3E1\"\n Socket Type: 0x2e (Other)\n Socket Status: Populated\n Type: 0x03 (CPU)\n Family: 0xcd (Other)\n Manufacturer: \"Intel(R) Corporation\"\n Version: \"Intel(R) Core(TM) i5-4210U CPU @ 1.70GHz\"\n Serial: \"To Be Filled By O.E.M.\"\n Asset Tag: \"To Be Filled By O.E.M.\"\n Processor ID: 0xbfebfbff00040651\n Status: 0x01 (Enabled)\n Voltage: 0.7 V\n External Clock: 100 MHz\n Max. Speed: 2400 MHz\n Current Speed: 1700 MHz\n L1 Cache: #8\n L2 Cache: #9\n L3 Cache: #10\n Cache Info: #6\n Designation: \"L1 Cache\"\n Level: L1\n State: Enabled\n Mode: 0x01 (Write Back)\n Location: 0x00 (Internal, Not Socketed)\n ECC: 0x04 (Parity)\n Type: 0x04 (Data)\n Associativity: 0x07 (8-way Set-Associative)\n Max. Size: 32 kB\n Current Size: 32 kB\n Supported SRAM Types: 0x0040 (Asynchronous)\n Current SRAM Type: 0x0040 (Asynchronous)\n Cache Info: #8\n Designation: \"L1 Cache\"\n Level: L1\n State: Enabled\n Mode: 0x01 (Write Back)\n Location: 0x00 (Internal, Not Socketed)\n ECC: 0x04 (Parity)\n Type: 0x03 (Instruction)\n Associativity: 0x07 (8-way Set-Associative)\n Max. Size: 32 kB\n Current Size: 32 kB\n Supported SRAM Types: 0x0040 (Asynchronous)\n Current SRAM Type: 0x0040 (Asynchronous)\n Cache Info: #9\n Designation: \"L2 Cache\"\n Level: L2\n State: Enabled\n Mode: 0x01 (Write Back)\n Location: 0x00 (Internal, Not Socketed)\n ECC: 0x05 (Single-bit)\n Type: 0x05 (Unified)\n Associativity: 0x07 (8-way Set-Associative)\n Max. Size: 256 kB\n Current Size: 256 kB\n Supported SRAM Types: 0x0040 (Asynchronous)\n Current SRAM Type: 0x0040 (Asynchronous)\n Cache Info: #10\n Designation: \"L3 Cache\"\n Level: L3\n State: Enabled\n Mode: 0x01 (Write Back)\n Location: 0x00 (Internal, Not Socketed)\n ECC: 0x06 (Multi-bit)\n Type: 0x05 (Unified)\n Associativity: 0x09 (Other)\n Max. Size: 3072 kB\n Current Size: 3072 kB\n Supported SRAM Types: 0x0040 (Asynchronous)\n Current SRAM Type: 0x0040 (Asynchronous)\n Port Connector: #20\n Type: 0x20 (Other)\n Internal Designator: \"Ctrl0Port0\"\n Internal Connector: 0x22 (Other)\n External Designator: \"Primary HDD Bay\"\n External Connector: 0x22 (Other)\n Port Connector: #21\n Type: 0x20 (Other)\n Internal Designator: \"Ctrl0Port5\"\n Internal Connector: 0x22 (Other)\n External Designator: \"Docking Station Upgrade Bay\"\n External Connector: 0x22 (Other)\n Port Connector: #22\n Type: 0x20 (Other)\n Internal Designator: \"Ctrl0Port4\"\n Internal Connector: 0x22 (Other)\n External Designator: \"eSATA\"\n External Connector: 0x22 (Other)\n Port Connector: #23\n Type: 0x20 (Other)\n Internal Designator: \"Ctrl0Port3\"\n Internal Connector: 0x22 (Other)\n External Designator: \"Docking Station eSATA\"\n External Connector: 0x22 (Other)\n Port Connector: #24\n Type: 0x20 (Other)\n Internal Designator: \"Ctrl0Port2\"\n Internal Connector: 0x22 (Other)\n External Designator: \"mSATA\"\n External Connector: 0x22 (Other)\n Port Connector: #25\n Type: 0x20 (Other)\n Internal Designator: \"Ctrl0Port1\"\n Internal Connector: 0x22 (Other)\n External Designator: \"Upgrade Bay\"\n External Connector: 0x22 (Other)\n System Slot: #27\n Designation: \"PCI SLOT1\"\n Type: 0x06 (PCI)\n Bus Width: 0x05 (32 bit)\n Status: 0x03 (Available)\n Length: 0x04 (Long)\n Slot ID: 1\n Characteristics: 0x0504 (3.3 V, PME#)\n On Board Devices: #17\n Video: \"32\"\n OEM Strings: #26\n FBYTE#3X47676J6S6Z6b7J7M7Q7W7saBaqawce.Q7;\n BUILDID#14WWR4AW602#SABE#DABE;\n ABS 70/71 79 7A 7B 7C\n CSM v01.5B\n HP_Mute_LED_0_0\n www.hp.com\n Language Info: #30\n Languages: en-US, da-DK, nl-NL, fi-FI, fr-FR, de-DE, it-IT, ja-JP, no-NO, pt-PT, es-ES, sv-SE, zh-CN, zh-TW\n Current: es-ES\n Physical Memory Array: #0\n Use: 0x03 (System memory)\n Location: 0x03 (Motherboard)\n Slots: 2\n Max. Size: 16 GB\n ECC: 0x03 (None)\n Memory Device: #1\n Location: \"Bottom-Slot 1(left)\"\n Bank: \"BANK 0\"\n Manufacturer: \"Micron\"\n Serial: \"18503423\"\n Asset Tag: \"9876543210\"\n Part Number: \"8KTF51264HZ-1G6N1\"\n Memory Array: #0\n Form Factor: 0x0d (SODIMM)\n Type: 0x18 (Other)\n Type Detail: 0x0080 (Synchronous)\n Data Width: 64 bits\n Size: 4 GB\n Speed: 1600 MHz\n Memory Device: #3\n Location: \"Bottom-Slot 2(right)\"\n Bank: \"BANK 2\"\n Manufacturer: \"Micron\"\n Serial: \"18651324\"\n Asset Tag: \"9876543210\"\n Part Number: \"8KTF51264HZ-1G6N1\"\n Memory Array: #0\n Form Factor: 0x0d (SODIMM)\n Type: 0x18 (Other)\n Type Detail: 0x0080 (Synchronous)\n Data Width: 64 bits\n Size: 4 GB\n Speed: 1600 MHz\n Memory Array Mapping: #5\n Memory Array: #0\n Partition Width: 2\n Start Address: 0x0000000000000000\n End Address: 0x0000000200000000\n Memory Device Mapping: #2\n Memory Device: #1\n Array Mapping: #5\n Row: 1\n Interleave Pos: 1\n Interleaved Depth: 1\n Start Address: 0x0000000000000000\n End Address: 0x0000000100000000\n Memory Device Mapping: #4\n Memory Device: #3\n Array Mapping: #5\n Row: 1\n Interleave Pos: 2\n Interleaved Depth: 1\n Start Address: 0x0000000100000000\n End Address: 0x0000000200000000\n Type 22 Record: #28\n Data 00: 16 1a 1c 00 01 02 00 00 03 02 aa 0f d0 39 04 ff\n Data 10: 1e d8 7a 45 05 0a 00 00 00 00\n String 1: \"Primary\"\n String 2: \"33-24\"\n String 3: \"VI04040XL\"\n String 4: \"1.1\"\n String 5: \"LION\"\n Type 32 Record: #16\n Data 00: 20 14 10 00 00 00 00 00 00 00 00 00 00 00 00 00\n Data 10: 00 00 00 00\n Type 41 Record: #18\n Data 00: 29 0b 12 00 01 83 01 00 00 00 10\n String 1: \"32\"\n Type 41 Record: #19\n Data 00: 29 0b 13 00 02 85 01 00 00 09 00\n String 1: \"WLAN\"\n String 2: \"WLAN\"\n Type 131 Record: #11\n Data 00: 83 40 0b 00 31 00 00 00 00 00 00 00 00 00 00 00\n Data 10: f8 00 43 9c 00 00 00 00 01 00 00 00 05 00 09 00\n Data 20: 10 07 1e 00 00 00 00 00 c8 00 ff ff 00 00 00 00\n Data 30: 04 0a 00 00 20 00 00 00 76 50 72 6f 00 00 00 00\n Type 137 Record: #29\n Data 00: 89 0c 1d 00 01 00 f0 03 f0 ff 00 00\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n\n02: None 00.0: 10107 System\n [Created at sys.63]\n Unique ID: rdCR.n_7QNeEnh23\n Hardware Class: system\n Model: \"System\"\n Formfactor: \"laptop\"\n Driver Info #0:\n Driver Status: thermal,fan are not active\n Driver Activation Cmd: \"modprobe thermal; modprobe fan\"\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n\n03: None 00.0: 10104 FPU\n [Created at misc.191]\n Unique ID: rdCR.EMpH5pjcahD\n Hardware Class: unknown\n Model: \"FPU\"\n I/O Ports: 0xf0-0xff (rw)\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n\n04: None 00.0: 0801 DMA controller (8237)\n [Created at misc.205]\n Unique ID: rdCR.f5u1ucRm+H9\n Hardware Class: unknown\n Model: \"DMA controller\"\n I/O Ports: 0x00-0xcf7 (rw)\n I/O Ports: 0xc0-0xdf (rw)\n I/O Ports: 0x80-0x8f (rw)\n DMA: 4\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n\n05: None 00.0: 0800 PIC (8259)\n [Created at misc.218]\n Unique ID: rdCR.8uRK7LxiIA2\n Hardware Class: unknown\n Model: \"PIC\"\n I/O Ports: 0x20-0x21 (rw)\n I/O Ports: 0xa0-0xa1 (rw)\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n\n06: None 00.0: 0900 Keyboard controller\n [Created at misc.250]\n Unique ID: rdCR.9N+EecqykME\n Hardware Class: unknown\n Model: \"Keyboard controller\"\n I/O Port: 0x60 (rw)\n I/O Port: 0x64 (rw)\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n\n07: None 00.0: 0701 Parallel controller (SPP)\n [Created at misc.261]\n Unique ID: YMnp.ecK7NLYWZ5D\n Hardware Class: unknown\n Model: \"Parallel controller\"\n Device File: /dev/lp0\n I/O Ports: 0x378-0x37a (rw)\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n\n08: None 00.0: 10400 PS/2 Controller\n [Created at misc.303]\n Unique ID: rdCR.DziBbWO85o5\n Hardware Class: unknown\n Model: \"PS/2 Controller\"\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n\n13: None 00.0: 10102 Main Memory\n [Created at memory.74]\n Unique ID: rdCR.CxwsZFjVASF\n Hardware Class: memory\n Model: \"Main Memory\"\n Memory Range: 0x00000000-0x1f22a6fff (rw)\n Memory Size: 8 GB\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n\n14: PCI 1c.3: 0604 PCI bridge (Normal decode)\n [Created at pci.378]\n Unique ID: Z7uZ.G9l8oDwzL7C\n SysFS ID: /devices/pci0000:00/0000:00:1c.3\n SysFS BusID: 0000:00:1c.3\n Hardware Class: bridge\n Model: \"Intel 8 Series PCI Express Root Port 4\"\n Vendor: pci 0x8086 \"Intel Corporation\"\n Device: pci 0x9c16 \"8 Series PCI Express Root Port 4\"\n SubVendor: pci 0x103c \"Hewlett-Packard Company\"\n SubDevice: pci 0x2248 \n Revision: 0xe4\n Driver: \"pcieport\"\n IRQ: 43 (no events)\n Module Alias: \"pci:v00008086d00009C16sv0000103Csd00002248bc06sc04i00\"\n Driver Info #0:\n Driver Status: shpchp is active\n Driver Activation Cmd: \"modprobe shpchp\"\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n\n15: PCI 700.0: ff00 Unclassified device\n [Created at pci.378]\n Unique ID: aK5u.Fesr1XY7OVA\n Parent ID: qTvu.CVz8txR9FbA\n SysFS ID: /devices/pci0000:00/0000:00:1c.1/0000:07:00.0\n SysFS BusID: 0000:07:00.0\n Hardware Class: unknown\n Model: \"Realtek RTS5227 PCI Express Card Reader\"\n Vendor: pci 0x10ec \"Realtek Semiconductor Co., Ltd.\"\n Device: pci 0x5227 \"RTS5227 PCI Express Card Reader\"\n SubVendor: pci 0x103c \"Hewlett-Packard Company\"\n SubDevice: pci 0x2248 \n Revision: 0x01\n Driver: \"rtsx_pci\"\n Driver Modules: \"rtsx_pci\"\n Memory Range: 0xc0600000-0xc0600fff (rw,non-prefetchable)\n IRQ: 44 (22 events)\n Module Alias: \"pci:v000010ECd00005227sv0000103Csd00002248bcFFsc00i00\"\n Driver Info #0:\n Driver Status: rtsx_pci is active\n Driver Activation Cmd: \"modprobe rtsx_pci\"\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n Attached to: #17 (PCI bridge)\n\n16: PCI 00.0: 0600 Host bridge\n [Created at pci.378]\n Unique ID: qLht.VantoDfnJG6\n SysFS ID: /devices/pci0000:00/0000:00:00.0\n SysFS BusID: 0000:00:00.0\n Hardware Class: bridge\n Model: \"Intel Haswell-ULT DRAM Controller\"\n Vendor: pci 0x8086 \"Intel Corporation\"\n Device: pci 0x0a04 \"Haswell-ULT DRAM Controller\"\n SubVendor: pci 0x103c \"Hewlett-Packard Company\"\n SubDevice: pci 0x2248 \n Revision: 0x0b\n Driver: \"hsw_uncore\"\n Driver Modules: \"intel_uncore\"\n Module Alias: \"pci:v00008086d00000A04sv0000103Csd00002248bc06sc00i00\"\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n\n17: PCI 1c.1: 0604 PCI bridge (Normal decode)\n [Created at pci.378]\n Unique ID: qTvu.CVz8txR9FbA\n SysFS ID: /devices/pci0000:00/0000:00:1c.1\n SysFS BusID: 0000:00:1c.1\n Hardware Class: bridge\n Model: \"Intel 8 Series PCI Express Root Port 2\"\n Vendor: pci 0x8086 \"Intel Corporation\"\n Device: pci 0x9c12 \"8 Series PCI Express Root Port 2\"\n SubVendor: pci 0x103c \"Hewlett-Packard Company\"\n SubDevice: pci 0x2248 \n Revision: 0xe4\n Driver: \"pcieport\"\n IRQ: 41 (no events)\n Module Alias: \"pci:v00008086d00009C12sv0000103Csd00002248bc06sc04i00\"\n Driver Info #0:\n Driver Status: shpchp is active\n Driver Activation Cmd: \"modprobe shpchp\"\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n\n18: PCI 03.0: 0403 Audio device\n [Created at pci.378]\n Unique ID: 3hqH.8ZYAv3K5mI6\n SysFS ID: /devices/pci0000:00/0000:00:03.0\n SysFS BusID: 0000:00:03.0\n Hardware Class: sound\n Model: \"Intel Haswell-ULT HD Audio Controller\"\n Vendor: pci 0x8086 \"Intel Corporation\"\n Device: pci 0x0a0c \"Haswell-ULT HD Audio Controller\"\n SubVendor: pci 0x103c \"Hewlett-Packard Company\"\n SubDevice: pci 0x2248 \n Revision: 0x0b\n Driver: \"snd_hda_intel\"\n Driver Modules: \"snd_hda_intel\"\n Memory Range: 0xc0810000-0xc0813fff (rw,non-prefetchable)\n IRQ: 51 (67 events)\n Module Alias: \"pci:v00008086d00000A0Csv0000103Csd00002248bc04sc03i00\"\n Driver Info #0:\n Driver Status: snd_hda_intel is active\n Driver Activation Cmd: \"modprobe snd_hda_intel\"\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n\n19: PCI 1d.0: 0c03 USB Controller (EHCI)\n [Created at pci.378]\n Unique ID: 1GTX.5hyHIEn38h0\n SysFS ID: /devices/pci0000:00/0000:00:1d.0\n SysFS BusID: 0000:00:1d.0\n Hardware Class: usb controller\n Model: \"Intel 8 Series USB EHCI #1\"\n Vendor: pci 0x8086 \"Intel Corporation\"\n Device: pci 0x9c26 \"8 Series USB EHCI #1\"\n SubVendor: pci 0x103c \"Hewlett-Packard Company\"\n SubDevice: pci 0x2248 \n Revision: 0x04\n Driver: \"ehci-pci\"\n Driver Modules: \"ehci_pci\"\n Memory Range: 0xc081d000-0xc081d3ff (rw,non-prefetchable)\n IRQ: 17 (33 events)\n Module Alias: \"pci:v00008086d00009C26sv0000103Csd00002248bc0Csc03i20\"\n Driver Info #0:\n Driver Status: ehci-hcd is active\n Driver Activation Cmd: \"modprobe ehci-hcd\"\n Driver Info #1:\n Driver Status: ehci_pci is active\n Driver Activation Cmd: \"modprobe ehci_pci\"\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n\n20: PCI 1f.6: 1180 Signal processing controller\n [Created at pci.378]\n Unique ID: ORVU.5gLxlqBxOw7\n SysFS ID: /devices/pci0000:00/0000:00:1f.6\n SysFS BusID: 0000:00:1f.6\n Hardware Class: unknown\n Model: \"Intel 8 Series Thermal\"\n Vendor: pci 0x8086 \"Intel Corporation\"\n Device: pci 0x9c24 \"8 Series Thermal\"\n SubVendor: pci 0x103c \"Hewlett-Packard Company\"\n SubDevice: pci 0x2248 \n Revision: 0x04\n Driver: \"intel_pch_thermal\"\n Driver Modules: \"intel_pch_thermal\"\n Memory Range: 0xc081b000-0xc081bfff (rw,non-prefetchable)\n IRQ: 18 (no events)\n Module Alias: \"pci:v00008086d00009C24sv0000103Csd00002248bc11sc80i00\"\n Driver Info #0:\n Driver Status: intel_pch_thermal is active\n Driver Activation Cmd: \"modprobe intel_pch_thermal\"\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n\n21: PCI 02.0: 0300 VGA compatible controller (VGA)\n [Created at pci.378]\n Unique ID: _Znp.ka6dvf5kTa8\n SysFS ID: /devices/pci0000:00/0000:00:02.0\n SysFS BusID: 0000:00:02.0\n Hardware Class: graphics card\n Device Name: \"32\"\n Model: \"Intel Haswell-ULT Integrated Graphics Controller\"\n Vendor: pci 0x8086 \"Intel Corporation\"\n Device: pci 0x0a16 \"Haswell-ULT Integrated Graphics Controller\"\n SubVendor: pci 0x103c \"Hewlett-Packard Company\"\n SubDevice: pci 0x2248 \n Revision: 0x0b\n Driver: \"i915\"\n Driver Modules: \"i915\"\n Memory Range: 0xc0000000-0xc03fffff (rw,non-prefetchable)\n Memory Range: 0xb0000000-0xbfffffff (ro,non-prefetchable)\n I/O Ports: 0x7000-0x703f (rw)\n Memory Range: 0x000c0000-0x000dffff (rw,non-prefetchable,disabled)\n IRQ: 47 (60 events)\n I/O Ports: 0x3c0-0x3df (rw)\n Module Alias: \"pci:v00008086d00000A16sv0000103Csd00002248bc03sc00i00\"\n Driver Info #0:\n Driver Status: i915 is active\n Driver Activation Cmd: \"modprobe i915\"\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n\n22: PCI 14.0: 0c03 USB Controller (XHCI)\n [Created at pci.378]\n Unique ID: MZfG.0F8dj3iQqa3\n SysFS ID: /devices/pci0000:00/0000:00:14.0\n SysFS BusID: 0000:00:14.0\n Hardware Class: usb controller\n Model: \"Intel 8 Series USB xHCI HC\"\n Vendor: pci 0x8086 \"Intel Corporation\"\n Device: pci 0x9c31 \"8 Series USB xHCI HC\"\n SubVendor: pci 0x103c \"Hewlett-Packard Company\"\n SubDevice: pci 0x2248 \n Revision: 0x04\n Driver: \"xhci_hcd\"\n Driver Modules: \"xhci_pci\"\n Memory Range: 0xc0800000-0xc080ffff (rw,non-prefetchable)\n IRQ: 46 (7703 events)\n Module Alias: \"pci:v00008086d00009C31sv0000103Csd00002248bc0Csc03i30\"\n Driver Info #0:\n Driver Status: xhci_pci is active\n Driver Activation Cmd: \"modprobe xhci_pci\"\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n\n23: PCI 1c.2: 0604 PCI bridge (Normal decode)\n [Created at pci.378]\n Unique ID: hoOk.EKseq4hZIMB\n SysFS ID: /devices/pci0000:00/0000:00:1c.2\n SysFS BusID: 0000:00:1c.2\n Hardware Class: bridge\n Model: \"Intel 8 Series PCI Express Root Port 3\"\n Vendor: pci 0x8086 \"Intel Corporation\"\n Device: pci 0x9c14 \"8 Series PCI Express Root Port 3\"\n SubVendor: pci 0x103c \"Hewlett-Packard Company\"\n SubDevice: pci 0x2248 \n Revision: 0xe4\n Driver: \"pcieport\"\n IRQ: 42 (no events)\n Module Alias: \"pci:v00008086d00009C14sv0000103Csd00002248bc06sc04i00\"\n Driver Info #0:\n Driver Status: shpchp is active\n Driver Activation Cmd: \"modprobe shpchp\"\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n\n24: PCI 1f.2: 0106 SATA controller (AHCI 1.0)\n [Created at pci.378]\n Unique ID: w7Y8.xfvW4auRA+2\n SysFS ID: /devices/pci0000:00/0000:00:1f.2\n SysFS BusID: 0000:00:1f.2\n Hardware Class: storage\n Model: \"Intel 8 Series SATA Controller 1 [AHCI mode]\"\n Vendor: pci 0x8086 \"Intel Corporation\"\n Device: pci 0x9c03 \"8 Series SATA Controller 1 [AHCI mode]\"\n SubVendor: pci 0x103c \"Hewlett-Packard Company\"\n SubDevice: pci 0x2248 \n Revision: 0x04\n Driver: \"ahci\"\n Driver Modules: \"ahci\"\n I/O Ports: 0x7088-0x708f (rw)\n I/O Ports: 0x7094-0x7097 (rw)\n I/O Ports: 0x7080-0x7087 (rw)\n I/O Ports: 0x7090-0x7093 (rw)\n I/O Ports: 0x7060-0x707f (rw)\n Memory Range: 0xc081c000-0xc081c7ff (rw,non-prefetchable)\n IRQ: 48 (627 events)\n Module Alias: \"pci:v00008086d00009C03sv0000103Csd00002248bc01sc06i01\"\n Driver Info #0:\n Driver Status: ahci is active\n Driver Activation Cmd: \"modprobe ahci\"\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n\n25: PCI 1c.0: 0604 PCI bridge (Normal decode)\n [Created at pci.378]\n Unique ID: z8Q3.Ag4fvoClBq9\n SysFS ID: /devices/pci0000:00/0000:00:1c.0\n SysFS BusID: 0000:00:1c.0\n Hardware Class: bridge\n Model: \"Intel 8 Series PCI Express Root Port 1\"\n Vendor: pci 0x8086 \"Intel Corporation\"\n Device: pci 0x9c10 \"8 Series PCI Express Root Port 1\"\n SubVendor: pci 0x103c \"Hewlett-Packard Company\"\n SubDevice: pci 0x2248 \n Revision: 0xe4\n Driver: \"pcieport\"\n IRQ: 40 (no events)\n Module Alias: \"pci:v00008086d00009C10sv0000103Csd00002248bc06sc04i00\"\n Driver Info #0:\n Driver Status: shpchp is active\n Driver Activation Cmd: \"modprobe shpchp\"\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n\n26: PCI 1f.0: 0601 ISA bridge\n [Created at pci.378]\n Unique ID: BUZT.QMXwKRhNq7E\n SysFS ID: /devices/pci0000:00/0000:00:1f.0\n SysFS BusID: 0000:00:1f.0\n Hardware Class: bridge\n Model: \"Intel 8 Series LPC Controller\"\n Vendor: pci 0x8086 \"Intel Corporation\"\n Device: pci 0x9c43 \"8 Series LPC Controller\"\n SubVendor: pci 0x103c \"Hewlett-Packard Company\"\n SubDevice: pci 0x2248 \n Revision: 0x04\n Driver: \"lpc_ich\"\n Driver Modules: \"lpc_ich\"\n Module Alias: \"pci:v00008086d00009C43sv0000103Csd00002248bc06sc01i00\"\n Driver Info #0:\n Driver Status: lpc_ich is active\n Driver Activation Cmd: \"modprobe lpc_ich\"\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n\n27: PCI 900.0: 0282 WLAN controller\n [Created at pci.378]\n Unique ID: S6TQ.bhUnM+Ctai7\n Parent ID: Z7uZ.G9l8oDwzL7C\n SysFS ID: /devices/pci0000:00/0000:00:1c.3/0000:09:00.0\n SysFS BusID: 0000:09:00.0\n Hardware Class: network\n Device Name: \"WLAN\"\n Model: \"Realtek RTL8723BE PCIe Wireless Network Adapter\"\n Vendor: pci 0x10ec \"Realtek Semiconductor Co., Ltd.\"\n Device: pci 0xb723 \"RTL8723BE PCIe Wireless Network Adapter\"\n SubVendor: pci 0x103c \"Hewlett-Packard Company\"\n SubDevice: pci 0x2231 \n Driver: \"rtl8723be\"\n Driver Modules: \"rtl8723be\"\n Device File: wlo1\n Features: WLAN\n I/O Ports: 0x3000-0x3fff (rw)\n Memory Range: 0xc0400000-0xc0403fff (rw,non-prefetchable)\n IRQ: 19 (no events)\n HW Address: 90:48:9a:af:6a:1b\n Permanent HW Address: 90:48:9a:af:6a:1b\n Link detected: no\n WLAN channels: 1 2 3 4 5 6 7 8 9 10 11 12 13\n WLAN frequencies: 2.412 2.417 2.422 2.427 2.432 2.437 2.442 2.447 2.452 2.457 2.462 2.467 2.472\n WLAN encryption modes: WEP40 WEP104 TKIP CCMP\n WLAN authentication modes: open sharedkey wpa-psk wpa-eap\n Module Alias: \"pci:v000010ECd0000B723sv0000103Csd00002231bc02sc80i00\"\n Driver Info #0:\n Driver Status: rtl8723be is active\n Driver Activation Cmd: \"modprobe rtl8723be\"\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n Attached to: #14 (PCI bridge)\n\n28: PCI 800.0: 0200 Ethernet controller\n [Created at pci.378]\n Unique ID: I+SI.fMnTBL88VH5\n Parent ID: hoOk.EKseq4hZIMB\n SysFS ID: /devices/pci0000:00/0000:00:1c.2/0000:08:00.0\n SysFS BusID: 0000:08:00.0\n Hardware Class: network\n Model: \"Realtek RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller\"\n Vendor: pci 0x10ec \"Realtek Semiconductor Co., Ltd.\"\n Device: pci 0x8168 \"RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller\"\n SubVendor: pci 0x103c \"Hewlett-Packard Company\"\n SubDevice: pci 0x2248 \n Revision: 0x10\n Driver: \"r8169\"\n Driver Modules: \"r8169\"\n Device File: enp8s0\n I/O Ports: 0x4000-0x4fff (rw)\n Memory Range: 0xc0504000-0xc0504fff (rw,non-prefetchable)\n Memory Range: 0xc0500000-0xc0503fff (rw,non-prefetchable)\n IRQ: 45 (31 events)\n HW Address: 64:51:06:b0:0a:f6\n Permanent HW Address: 64:51:06:b0:0a:f6\n Link detected: yes\n Module Alias: \"pci:v000010ECd00008168sv0000103Csd00002248bc02sc00i00\"\n Driver Info #0:\n Driver Status: r8169 is active\n Driver Activation Cmd: \"modprobe r8169\"\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n Attached to: #23 (PCI bridge)\n\n29: PCI 16.0: 0780 Communication controller\n [Created at pci.378]\n Unique ID: WnlC.HxZGBaBBa_4\n SysFS ID: /devices/pci0000:00/0000:00:16.0\n SysFS BusID: 0000:00:16.0\n Hardware Class: unknown\n Model: \"Intel 8 Series HECI #0\"\n Vendor: pci 0x8086 \"Intel Corporation\"\n Device: pci 0x9c3a \"8 Series HECI #0\"\n SubVendor: pci 0x103c \"Hewlett-Packard Company\"\n SubDevice: pci 0x2248 \n Revision: 0x04\n Driver: \"mei_me\"\n Driver Modules: \"mei_me\"\n Memory Range: 0xc0819000-0xc081901f (rw,non-prefetchable)\n IRQ: 49 (12 events)\n Module Alias: \"pci:v00008086d00009C3Asv0000103Csd00002248bc07sc80i00\"\n Driver Info #0:\n Driver Status: mei_me is active\n Driver Activation Cmd: \"modprobe mei_me\"\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n\n30: PCI 1b.0: 0403 Audio device\n [Created at pci.378]\n Unique ID: u1Nb.NJGI0ZQ5w_7\n SysFS ID: /devices/pci0000:00/0000:00:1b.0\n SysFS BusID: 0000:00:1b.0\n Hardware Class: sound\n Model: \"Intel 8 Series HD Audio Controller\"\n Vendor: pci 0x8086 \"Intel Corporation\"\n Device: pci 0x9c20 \"8 Series HD Audio Controller\"\n SubVendor: pci 0x103c \"Hewlett-Packard Company\"\n SubDevice: pci 0x2248 \n Revision: 0x04\n Driver: \"snd_hda_intel\"\n Driver Modules: \"snd_hda_intel\"\n Memory Range: 0xc0814000-0xc0817fff (rw,non-prefetchable)\n IRQ: 50 (555 events)\n Module Alias: \"pci:v00008086d00009C20sv0000103Csd00002248bc04sc03i00\"\n Driver Info #0:\n Driver Status: snd_hda_intel is active\n Driver Activation Cmd: \"modprobe snd_hda_intel\"\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n\n31: None 00.0: 10002 LCD Monitor\n [Created at monitor.125]\n Unique ID: rdCR.9u9BxCnguo2\n Parent ID: _Znp.ka6dvf5kTa8\n Hardware Class: monitor\n Model: \"LCD Monitor\"\n Vendor: AUO \n Device: eisa 0x41ec \n Resolution: 1366x768@60Hz\n Size: 344x193 mm\n Year of Manufacture: 2013\n Week of Manufacture: 49\n Detailed Timings #0:\n Resolution: 1366x768\n Horizontal: 1366 1374 1384 1558 (+8 +18 +192) -hsync\n Vertical: 768 771 772 816 (+3 +4 +48) -vsync\n Frequencies: 50.87 MHz, 32.65 kHz, 40.01 Hz\n Year of Manufacture: 2013\n Week of Manufacture: 49\n Detailed Timings #1:\n Resolution: 1366x768\n Horizontal: 1366 1374 1384 1558 (+8 +18 +192) -hsync\n Vertical: 768 771 772 816 (+3 +4 +48) -vsync\n Frequencies: 76.30 MHz, 48.97 kHz, 60.02 Hz\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n Attached to: #21 (VGA compatible controller)\n\n32: ISA(PnP) 00.0: 0000 Unclassified device\n [Created at isapnp.142]\n Unique ID: z9pp.B+yZ9Ve8gC1\n SysFS ID: /devices/pnp0/00:00\n SysFS BusID: 00:00\n Hardware Class: unknown\n Model: \"Unclassified device\"\n SubVendor: PNP \"PnP\"\n SubDevice: eisa 0x0c02 \n Config Status: cfg=new, avail=yes, need=no, active=unknown\n\n33: ISA(PnP) 00.0: 0000 Unclassified device\n [Created at isapnp.142]\n Unique ID: E349.BLEg2XC4+V0\n SysFS ID: /devices/pnp0/00:05\n SysFS BusID: 00:05\n Hardware Class: unknown\n Model: \"Unclassified device\"\n SubVendor: IFX \n SubDevice: eisa 0x0102 \n Config Status: cfg=new, avail=yes, need=no, active=unknown\n\n34: ISA(PnP) 00.0: 0000 Unclassified device\n [Created at isapnp.142]\n Unique ID: KiZ0.ealKjhMMg54\n SysFS ID: /devices/pnp0/00:03\n SysFS BusID: 00:03\n Hardware Class: unknown\n Model: \"Unclassified device\"\n SubVendor: HPQ \n SubDevice: eisa 0x8001 \n Config Status: cfg=new, avail=yes, need=no, active=unknown\n\n35: ISA(PnP) 00.0: 0000 Unclassified device\n [Created at isapnp.142]\n Unique ID: QL3u.B+yZ9Ve8gC1\n SysFS ID: /devices/pnp0/00:01\n SysFS BusID: 00:01\n Hardware Class: unknown\n Model: \"Unclassified device\"\n SubVendor: PNP \"PnP\"\n SubDevice: eisa 0x0c02 \n Config Status: cfg=new, avail=yes, need=no, active=unknown\n\n36: ISA(PnP) 00.0: 0000 Unclassified device\n [Created at isapnp.142]\n Unique ID: ntp4.7mJa8EtFKk7\n SysFS ID: /devices/pnp0/00:04\n SysFS BusID: 00:04\n Hardware Class: unknown\n Model: \"Unclassified device\"\n SubVendor: SYN \n SubDevice: eisa 0x301e \n Config Status: cfg=new, avail=yes, need=no, active=unknown\n\n37: ISA(PnP) 00.0: 0000 Unclassified device\n [Created at isapnp.142]\n Unique ID: tWJy.WYwRElrJa93\n SysFS ID: /devices/pnp0/00:02\n SysFS BusID: 00:02\n Hardware Class: unknown\n Model: \"Unclassified device\"\n SubVendor: PNP \"PnP\"\n SubDevice: eisa 0x0b00 \n Config Status: cfg=new, avail=yes, need=no, active=unknown\n\n38: SCSI 400.0: 10600 Disk\n [Created at block.245]\n Unique ID: hSuP.sZwmS+_jqR5\n Parent ID: MZfG.0F8dj3iQqa3\n SysFS ID: /class/block/sdb\n SysFS BusID: 4:0:0:0\n SysFS Device Link: /devices/pci0000:00/0000:00:14.0/usb2/2-2/2-2:1.0/host4/target4:0:0/4:0:0:0\n Hardware Class: disk\n Model: \"KIOXIA TransMemory\"\n Vendor: usb 0x30de \"KIOXIA\"\n Device: usb 0x6544 \"TransMemory\"\n Serial ID: \"0\"\n Driver: \"usb-storage\", \"sd\"\n Driver Modules: \"usb_storage\", \"sd_mod\"\n Device File: /dev/sdb (/dev/sg2)\n Device Files: /dev/sdb, /dev/disk/by-id/usb-KIOXIA_TransMemory_0022CFF6B8A6C461331718B1-0:0, /dev/disk/by-path/pci-0000:00:14.0-usb-0:2:1.0-scsi-0:0:0:0\n Device Number: block 8:16-8:31 (char 21:2)\n BIOS id: 0x80\n Geometry (Logical): CHS 14782/64/32\n Size: 30274560 sectors a 512 bytes\n Capacity: 14 GB (15500574720 bytes)\n Speed: 480 Mbps\n Geometry (BIOS EDD): CHS 1884/255/63\n Size (BIOS EDD): 30274559 sectors\n Geometry (BIOS Legacy): CHS 1023/255/63\n Module Alias: \"usb:v30DEp6544d0001dc00dsc00dp00ic08isc06ip50in00\"\n Driver Info #0:\n Driver Status: uas is active\n Driver Activation Cmd: \"modprobe uas\"\n Driver Info #1:\n Driver Status: usb_storage is active\n Driver Activation Cmd: \"modprobe usb_storage\"\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n Attached to: #22 (USB Controller)\n\n39: None 00.0: 11300 Partition\n [Created at block.434]\n Unique ID: h4pj.SE1wIdpsiiC\n Parent ID: hSuP.sZwmS+_jqR5\n SysFS ID: /class/block/sdb/sdb1\n Hardware Class: partition\n Model: \"Partition\"\n Device File: /dev/sdb1\n Device Files: /dev/sdb1, /dev/disk/by-id/usb-KIOXIA_TransMemory_0022CFF6B8A6C461331718B1-0:0-part1, /dev/disk/by-label/ISOIMAGE, /dev/disk/by-partuuid/0ec92a03-01, /dev/disk/by-path/pci-0000:00:14.0-usb-0:2:1.0-scsi-0:0:0:0-part1, /dev/disk/by-uuid/CE9D-92E6\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n Attached to: #38 (Disk)\n\n40: SCSI 100.0: 10602 CD-ROM (DVD)\n [Created at block.249]\n Unique ID: KD9E.7u0Yp8+kBZD\n Parent ID: w7Y8.xfvW4auRA+2\n SysFS ID: /class/block/sr0\n SysFS BusID: 1:0:0:0\n SysFS Device Link: /devices/pci0000:00/0000:00:1f.2/ata2/host1/target1:0:0/1:0:0:0\n Hardware Class: cdrom\n Model: \"hp DVDRAM GU90N\"\n Vendor: \"hp\"\n Device: \"DVDRAM GU90N\"\n Revision: \"U900\"\n Driver: \"ahci\", \"sr\"\n Driver Modules: \"ahci\", \"sr_mod\"\n Device File: /dev/sr0 (/dev/sg1)\n Device Files: /dev/sr0, /dev/cdrom, /dev/cdrw, /dev/disk/by-id/ata-hp_DVDRAM_GU90N_M5GE5S40028, /dev/disk/by-id/wwn-0x5001480000000000, /dev/disk/by-path/pci-0000:00:1f.2-ata-2, /dev/dvd, /dev/dvdrw\n Device Number: block 11:0 (char 21:1)\n Features: CD-R, CD-RW, DVD, DVD-R, DVD-RW, DVD-R DL, DVD+R, DVD+RW, DVD+R DL, DVD-RAM, MRW, MRW-W\n Drive status: no medium\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n Attached to: #24 (SATA controller)\n Drive Speed: 24\n\n41: IDE 00.0: 10600 Disk\n [Created at block.245]\n Unique ID: 3OOL.g05FlevN1o1\n Parent ID: w7Y8.xfvW4auRA+2\n SysFS ID: /class/block/sda\n SysFS BusID: 0:0:0:0\n SysFS Device Link: /devices/pci0000:00/0000:00:1f.2/ata1/host0/target0:0:0/0:0:0:0\n Hardware Class: disk\n Model: \"ST500LT012-1DG14\"\n Device: \"ST500LT012-1DG14\"\n Revision: \"YAM1\"\n Serial ID: \"S3P9A81F\"\n Driver: \"ahci\", \"sd\"\n Driver Modules: \"ahci\", \"sd_mod\"\n Device File: /dev/sda\n Device Files: /dev/sda, /dev/disk/by-id/ata-ST500LT012-1DG142_S3P9A80F, /dev/disk/by-id/wwn-0x5000c50074f110eb, /dev/disk/by-path/pci-0000:00:1f.2-ata-1\n Device Number: block 8:0-8:15\n BIOS id: 0x81\n Geometry (Logical): CHS 60801/255/63\n Size: 976773168 sectors a 512 bytes\n Capacity: 465 GB (500107862016 bytes)\n Geometry (BIOS EDD): CHS 969021/16/63\n Size (BIOS EDD): 976773168 sectors\n Geometry (BIOS Legacy): CHS 1022/255/63\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n Attached to: #24 (SATA controller)\n\n42: None 00.0: 11300 Partition\n [Created at block.434]\n Unique ID: bdUI.SE1wIdpsiiC\n Parent ID: 3OOL.g05FlevN1o1\n SysFS ID: /class/block/sda/sda1\n Hardware Class: partition\n Model: \"Partition\"\n Device File: /dev/sda1\n Device Files: /dev/sda1, /dev/disk/by-id/ata-ST500LT012-1DG142_S3P9A80F-part1, /dev/disk/by-id/wwn-0x5000c50074f110eb-part1, /dev/disk/by-label/System\\x20Reserved, /dev/disk/by-partuuid/38d4fbef-01, /dev/disk/by-path/pci-0000:00:1f.2-ata-1-part1, /dev/disk/by-uuid/C6ACBD21ACBD0CC5\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n Attached to: #41 (Disk)\n\n43: None 00.0: 11300 Partition\n [Created at block.434]\n Unique ID: 2pkM.SE1wIdpsiiC\n Parent ID: 3OOL.g05FlevN1o1\n SysFS ID: /class/block/sda/sda2\n Hardware Class: partition\n Model: \"Partition\"\n Device File: /dev/sda2\n Device Files: /dev/sda2, /dev/disk/by-id/ata-ST500LT012-1DG142_S3P9A80F-part2, /dev/disk/by-id/wwn-0x5000c50074f110eb-part2, /dev/disk/by-label/WINDOWS7, /dev/disk/by-partuuid/38d4fbef-02, /dev/disk/by-path/pci-0000:00:1f.2-ata-1-part2, /dev/disk/by-uuid/E6F4BE1FF4BDF243\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n Attached to: #41 (Disk)\n\n44: None 00.0: 11300 Partition\n [Created at block.434]\n Unique ID: W__Q.SE1wIdpsiiC\n Parent ID: 3OOL.g05FlevN1o1\n SysFS ID: /class/block/sda/sda3\n Hardware Class: partition\n Model: \"Partition\"\n Device File: /dev/sda3\n Device Files: /dev/sda3, /dev/disk/by-id/ata-ST500LT012-1DG142_S3P9A80F-part3, /dev/disk/by-id/wwn-0x5000c50074f110eb-part3, /dev/disk/by-label/DATOS, /dev/disk/by-partuuid/38d4fbef-03, /dev/disk/by-path/pci-0000:00:1f.2-ata-1-part3, /dev/disk/by-uuid/EA64BF7D64BF4AD9\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n Attached to: #41 (Disk)\n\n45: USB 00.1: 0000 Unclassified device\n [Created at usb.122]\n Unique ID: 3QZi.KHC14zaenZB\n Parent ID: pBe4.2DFUsyrieMD\n SysFS ID: /devices/pci0000:00/0000:00:14.0/usb2/2-7/2-7:1.1\n SysFS BusID: 2-7:1.1\n Hardware Class: unknown\n Model: \"Lite-On HP HD Webcam\"\n Hotplug: USB\n Vendor: usb 0x04ca \"Lite-On Technology Corp.\"\n Device: usb 0x7032 \"HP HD Webcam\"\n Revision: \"0.04\"\n Serial ID: \"200901010001\"\n Driver: \"uvcvideo\"\n Driver Modules: \"uvcvideo\"\n Speed: 480 Mbps\n Module Alias: \"usb:v04CAp7032d0004dcEFdsc02dp01ic0Eisc02ip00in01\"\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n Attached to: #53 (Hub)\n\n46: USB 00.0: 11600 Fingerprint Reader\n [Created at usb.122]\n Unique ID: +rmv.oOUId9nesq9\n Parent ID: pBe4.2DFUsyrieMD\n SysFS ID: /devices/pci0000:00/0000:00:14.0/usb2/2-5/2-5:1.0\n SysFS BusID: 2-5:1.0\n Model: \"Validity Sensors VFS495 Fingerprint Reader\"\n Hotplug: USB\n Vendor: usb 0x138a \"Validity Sensors, Inc.\"\n Device: usb 0x003f \"VFS495 Fingerprint Reader\"\n Revision: \"1.04\"\n Serial ID: \"00b0685ccb93\"\n Speed: 12 Mbps\n Module Alias: \"usb:v138Ap003Fd0104dcFFdsc12dpFFicFFisc00ip00in00\"\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n Attached to: #53 (Hub)\n\n47: USB 00.0: 10a00 Hub\n [Created at usb.122]\n Unique ID: uIhY.xYNhIwdOaa6\n Parent ID: MZfG.0F8dj3iQqa3\n SysFS ID: /devices/pci0000:00/0000:00:14.0/usb3/3-0:1.0\n SysFS BusID: 3-0:1.0\n Hardware Class: hub\n Model: \"Linux Foundation 3.0 root hub\"\n Hotplug: USB\n Vendor: usb 0x1d6b \"Linux Foundation\"\n Device: usb 0x0003 \"3.0 root hub\"\n Revision: \"4.09\"\n Serial ID: \"0000:00:14.0\"\n Driver: \"hub\"\n Driver Modules: \"usbcore\"\n Module Alias: \"usb:v1D6Bp0003d0409dc09dsc00dp03ic09isc00ip00in00\"\n Driver Info #0:\n Driver Status: usbcore is active\n Driver Activation Cmd: \"modprobe usbcore\"\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n Attached to: #22 (USB Controller)\n\n48: USB 00.1: 11500 Bluetooth Device\n [Created at usb.122]\n Unique ID: 0vOp.dpnCeh_S1H9\n Parent ID: pBe4.2DFUsyrieMD\n SysFS ID: /devices/pci0000:00/0000:00:14.0/usb2/2-4/2-4:1.1\n SysFS BusID: 2-4:1.1\n Hardware Class: bluetooth\n Model: \"Realtek Bluetooth Radio\"\n Hotplug: USB\n Vendor: usb 0x0bda \"Realtek Semiconductor Corp.\"\n Device: usb 0xb001 \"Bluetooth Radio\"\n Revision: \"2.00\"\n Serial ID: \"00e04c000001\"\n Driver: \"btusb\"\n Driver Modules: \"btusb\"\n Speed: 12 Mbps\n Module Alias: \"usb:v0BDApB001d0200dcE0dsc01dp01icE0isc01ip01in01\"\n Driver Info #0:\n Driver Status: btusb is active\n Driver Activation Cmd: \"modprobe btusb\"\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n Attached to: #53 (Hub)\n\n50: USB 00.0: 10a00 Hub\n [Created at usb.122]\n Unique ID: k4bc.oLWCeziExdF\n Parent ID: 1GTX.5hyHIEn38h0\n SysFS ID: /devices/pci0000:00/0000:00:1d.0/usb1/1-0:1.0\n SysFS BusID: 1-0:1.0\n Hardware Class: hub\n Model: \"Linux Foundation 2.0 root hub\"\n Hotplug: USB\n Vendor: usb 0x1d6b \"Linux Foundation\"\n Device: usb 0x0002 \"2.0 root hub\"\n Revision: \"4.09\"\n Serial ID: \"0000:00:1d.0\"\n Driver: \"hub\"\n Driver Modules: \"usbcore\"\n Speed: 480 Mbps\n Module Alias: \"usb:v1D6Bp0002d0409dc09dsc00dp00ic09isc00ip00in00\"\n Driver Info #0:\n Driver Status: usbcore is active\n Driver Activation Cmd: \"modprobe usbcore\"\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n Attached to: #19 (USB Controller)\n\n52: USB 00.0: 10a00 Hub\n [Created at usb.122]\n Unique ID: ADDn.Wkj53szWOaA\n Parent ID: k4bc.oLWCeziExdF\n SysFS ID: /devices/pci0000:00/0000:00:1d.0/usb1/1-1/1-1:1.0\n SysFS BusID: 1-1:1.0\n Hardware Class: hub\n Model: \"Intel Hub\"\n Hotplug: USB\n Vendor: usb 0x8087 \"Intel Corp.\"\n Device: usb 0x8000 \n Revision: \"0.04\"\n Driver: \"hub\"\n Driver Modules: \"usbcore\"\n Speed: 480 Mbps\n Module Alias: \"usb:v8087p8000d0004dc09dsc00dp01ic09isc00ip00in00\"\n Driver Info #0:\n Driver Status: usbcore is active\n Driver Activation Cmd: \"modprobe usbcore\"\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n Attached to: #50 (Hub)\n\n53: USB 00.0: 10a00 Hub\n [Created at usb.122]\n Unique ID: pBe4.2DFUsyrieMD\n Parent ID: MZfG.0F8dj3iQqa3\n SysFS ID: /devices/pci0000:00/0000:00:14.0/usb2/2-0:1.0\n SysFS BusID: 2-0:1.0\n Hardware Class: hub\n Model: \"Linux Foundation 2.0 root hub\"\n Hotplug: USB\n Vendor: usb 0x1d6b \"Linux Foundation\"\n Device: usb 0x0002 \"2.0 root hub\"\n Revision: \"4.09\"\n Serial ID: \"0000:00:14.0\"\n Driver: \"hub\"\n Driver Modules: \"usbcore\"\n Speed: 480 Mbps\n Module Alias: \"usb:v1D6Bp0002d0409dc09dsc00dp01ic09isc00ip00in00\"\n Driver Info #0:\n Driver Status: usbcore is active\n Driver Activation Cmd: \"modprobe usbcore\"\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n Attached to: #22 (USB Controller)\n\n55: PS/2 00.0: 10800 Keyboard\n [Created at input.226]\n Unique ID: nLyy.+49ps10DtUF\n Hardware Class: keyboard\n Model: \"AT Translated Set 2 keyboard\"\n Vendor: 0x0001 \n Device: 0x0001 \"AT Translated Set 2 keyboard\"\n Compatible to: int 0x0211 0x0001\n Device File: /dev/input/event0\n Device Number: char 13:64\n Driver Info #0:\n XkbRules: xfree86\n XkbModel: pc104\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n\n56: PS/2 00.0: 10500 PS/2 Mouse\n [Created at input.249]\n Unique ID: AH6Q.ZHI3OT7LsxA\n Hardware Class: mouse\n Model: \"SynPS/2 Synaptics TouchPad\"\n Vendor: 0x0002 \n Device: 0x0007 \"SynPS/2 Synaptics TouchPad\"\n Compatible to: int 0x0210 0x0002\n Device File: /dev/input/mice (/dev/input/mouse0)\n Device Files: /dev/input/mice, /dev/input/mouse0, /dev/input/event5\n Device Number: char 13:63 (char 13:32)\n Driver Info #0:\n Buttons: 2\n Wheels: 0\n XFree86 Protocol: explorerps/2\n GPM Protocol: exps2\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n\n57: None 00.0: 10d00 Joystick\n [Created at input.312]\n Unique ID: 2oHd.lCw1nasASu4\n Hardware Class: joystick\n Model: \"ST LIS3LV02DL Accelerometer\"\n Device: \"ST LIS3LV02DL Accelerometer\"\n Device File: /dev/input/event14 (/dev/input/js0)\n Device Files: /dev/input/event14, /dev/input/js0, /dev/input/by-path/platform-lis3lv02d-event\n Device Number: char 13:78\n Buttons: 0\n Axes: 3\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n\n58: None 00.0: 10103 CPU\n [Created at cpu.460]\n Unique ID: rdCR.j8NaKXDZtZ6\n Hardware Class: cpu\n Arch: Intel\n Vendor: \"GenuineIntel\"\n Model: 6.69.1 \"Intel(R) Core(TM) i5-4210U CPU @ 1.70GHz\"\n Features: fpu,vme,de,pse,tsc,msr,pae,mce,cx8,apic,sep,mtrr,pge,mca,cmov,pat,pse36,clflush,dts,acpi,mmx,fxsr,sse,sse2,ss,ht,tm,pbe,nx,pdpe1gb,rdtscp,lm,constant_tsc,arch_perfmon,pebs,bts,xtopology,nonstop_tsc,aperfmperf,pni,pclmulqdq,dtes64,monitor,ds_cpl,vmx,est,tm2,ssse3,sdbg,fma,cx16,xtpr,pdcm,sse4_1,sse4_2,movbe,popcnt,tsc_deadline_timer,aes,xsave,avx,f16c,rdrand,lahf_lm,abm,epb,ssbd,ibrs,ibpb,stibp,tpr_shadow,vnmi,flexpriority,ept,vpid,fsgsbase,tsc_adjust,bmi1,avx2,smep,bmi2,erms,invpcid,xsaveopt,dtherm,ida,arat,pln,pts,md_clear,flush_l1d\n Clock: 2700 MHz\n BogoMips: 4788.85\n Cache: 3072 kb\n Units/Processor: 16\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n\n59: None 01.0: 10103 CPU\n [Created at cpu.460]\n Unique ID: wkFv.j8NaKXDZtZ6\n Hardware Class: cpu\n Arch: Intel\n Vendor: \"GenuineIntel\"\n Model: 6.69.1 \"Intel(R) Core(TM) i5-4210U CPU @ 1.70GHz\"\n Features: fpu,vme,de,pse,tsc,msr,pae,mce,cx8,apic,sep,mtrr,pge,mca,cmov,pat,pse36,clflush,dts,acpi,mmx,fxsr,sse,sse2,ss,ht,tm,pbe,nx,pdpe1gb,rdtscp,lm,constant_tsc,arch_perfmon,pebs,bts,xtopology,nonstop_tsc,aperfmperf,pni,pclmulqdq,dtes64,monitor,ds_cpl,vmx,est,tm2,ssse3,sdbg,fma,cx16,xtpr,pdcm,sse4_1,sse4_2,movbe,popcnt,tsc_deadline_timer,aes,xsave,avx,f16c,rdrand,lahf_lm,abm,epb,ssbd,ibrs,ibpb,stibp,tpr_shadow,vnmi,flexpriority,ept,vpid,fsgsbase,tsc_adjust,bmi1,avx2,smep,bmi2,erms,invpcid,xsaveopt,dtherm,ida,arat,pln,pts,md_clear,flush_l1d\n Clock: 2519 MHz\n BogoMips: 4788.85\n Cache: 3072 kb\n Units/Processor: 16\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n\n60: None 02.0: 10103 CPU\n [Created at cpu.460]\n Unique ID: +rIN.j8NaKXDZtZ6\n Hardware Class: cpu\n Arch: Intel\n Vendor: \"GenuineIntel\"\n Model: 6.69.1 \"Intel(R) Core(TM) i5-4210U CPU @ 1.70GHz\"\n Features: fpu,vme,de,pse,tsc,msr,pae,mce,cx8,apic,sep,mtrr,pge,mca,cmov,pat,pse36,clflush,dts,acpi,mmx,fxsr,sse,sse2,ss,ht,tm,pbe,nx,pdpe1gb,rdtscp,lm,constant_tsc,arch_perfmon,pebs,bts,xtopology,nonstop_tsc,aperfmperf,pni,pclmulqdq,dtes64,monitor,ds_cpl,vmx,est,tm2,ssse3,sdbg,fma,cx16,xtpr,pdcm,sse4_1,sse4_2,movbe,popcnt,tsc_deadline_timer,aes,xsave,avx,f16c,rdrand,lahf_lm,abm,epb,ssbd,ibrs,ibpb,stibp,tpr_shadow,vnmi,flexpriority,ept,vpid,fsgsbase,tsc_adjust,bmi1,avx2,smep,bmi2,erms,invpcid,xsaveopt,dtherm,ida,arat,pln,pts,md_clear,flush_l1d\n Clock: 2275 MHz\n BogoMips: 4788.85\n Cache: 3072 kb\n Units/Processor: 16\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n\n61: None 03.0: 10103 CPU\n [Created at cpu.460]\n Unique ID: 4zLr.j8NaKXDZtZ6\n Hardware Class: cpu\n Arch: Intel\n Vendor: \"GenuineIntel\"\n Model: 6.69.1 \"Intel(R) Core(TM) i5-4210U CPU @ 1.70GHz\"\n Features: fpu,vme,de,pse,tsc,msr,pae,mce,cx8,apic,sep,mtrr,pge,mca,cmov,pat,pse36,clflush,dts,acpi,mmx,fxsr,sse,sse2,ss,ht,tm,pbe,nx,pdpe1gb,rdtscp,lm,constant_tsc,arch_perfmon,pebs,bts,xtopology,nonstop_tsc,aperfmperf,pni,pclmulqdq,dtes64,monitor,ds_cpl,vmx,est,tm2,ssse3,sdbg,fma,cx16,xtpr,pdcm,sse4_1,sse4_2,movbe,popcnt,tsc_deadline_timer,aes,xsave,avx,f16c,rdrand,lahf_lm,abm,epb,ssbd,ibrs,ibpb,stibp,tpr_shadow,vnmi,flexpriority,ept,vpid,fsgsbase,tsc_adjust,bmi1,avx2,smep,bmi2,erms,invpcid,xsaveopt,dtherm,ida,arat,pln,pts,md_clear,flush_l1d\n Clock: 1839 MHz\n BogoMips: 4788.85\n Cache: 3072 kb\n Units/Processor: 16\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n\n62: None 00.0: 10700 Loopback\n [Created at net.126]\n Unique ID: ZsBS.GQNx7L4uPNA\n SysFS ID: /class/net/lo\n Hardware Class: network interface\n Model: \"Loopback network interface\"\n Device File: lo\n Link detected: yes\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n\n63: None 00.0: 10701 Ethernet\n [Created at net.126]\n Unique ID: zejA.ndpeucax6V1\n Parent ID: I+SI.fMnTBL88VH5\n SysFS ID: /class/net/enp8s0\n SysFS Device Link: /devices/pci0000:00/0000:00:1c.2/0000:08:00.0\n Hardware Class: network interface\n Model: \"Ethernet network interface\"\n Driver: \"r8169\"\n Driver Modules: \"r8169\"\n Device File: enp8s0\n HW Address: 64:51:06:b0:0a:f6\n Permanent HW Address: 64:51:06:b0:0a:f6\n Link detected: yes\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n Attached to: #28 (Ethernet controller)\n\n64: None 01.0: 10701 Ethernet\n [Created at net.126]\n Unique ID: VnCh.ndpeucax6V1\n Parent ID: S6TQ.bhUnM+Ctai7\n SysFS ID: /class/net/wlo1\n SysFS Device Link: /devices/pci0000:00/0000:00:1c.3/0000:09:00.0\n Hardware Class: network interface\n Model: \"Ethernet network interface\"\n Driver: \"rtl8723be\"\n Driver Modules: \"rtl8723be\"\n Device File: wlo1\n HW Address: 90:48:9a:af:6a:1b\n Permanent HW Address: 90:48:9a:af:6a:1b\n Link detected: no\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n Attached to: #27 (WLAN controller)\n", "lshw": {"capabilities": {"dmi-2.7": "DMI version 2.7", "smbios-2.7": "SMBIOS version 2.7"}, "children": [{"children": [{"capabilities": {"acpi": "ACPI", "biosbootspecification": "BIOS boot specification", "bootselect": "Selectable boot path", "cdboot": "Booting from CD-ROM/DVD", "edd": "Enhanced Disk Drive extensions", "int14serial": "INT14 serial line control", "int17printer": "INT17 printer control", "int5printscreen": "Print Screen key", "int9keyboard": "i8042 keyboard controller", "netboot": "Function-key initiated network service boot", "pci": "PCI bus", "pcmcia": "PCMCIA/PCCard", "shadowing": "BIOS shadowing", "smartbattery": "Smart battery", "uefi": "UEFI specification is supported", "upgrade": "BIOS EEPROM can be upgraded", "usb": "USB legacy emulation"}, "capacity": 6225920, "claimed": true, "class": "memory", "date": "06/17/2014", "description": "BIOS", "id": "firmware", "physid": "c", "size": 65536, "units": "bytes", "vendor": "Hewlett-Packard", "version": "M74 Ver. 01.02"}, {"businfo": "cpu@0", "capabilities": {"abm": true, "acpi": "thermal control (ACPI)", "aes": true, "aperfmperf": true, "apic": "on-chip advanced programmable interrupt controller (APIC)", "arat": true, "arch_perfmon": true, "avx": true, "avx2": true, "bmi1": true, "bmi2": true, "bts": true, "clflush": true, "cmov": "conditional move instruction", "constant_tsc": true, "cpufreq": "CPU Frequency scaling", "cx16": true, "cx8": "compare and exchange 8-byte", "de": "debugging extensions", "ds_cpl": true, "dtes64": true, "dtherm": true, "dts": "debug trace and EMON store MSRs", "epb": true, "ept": true, "erms": true, "est": true, "f16c": true, "flexpriority": true, "flush_l1d": true, "fma": true, "fpu": "mathematical co-processor", "fpu_exception": "FPU exceptions reporting", "fsgsbase": true, "fxsr": "fast floating point save/restore", "ht": "HyperThreading", "ibpb": true, "ibrs": true, "ida": true, "invpcid": true, "lahf_lm": true, "mca": "machine check architecture", "mce": "machine check exceptions", "md_clear": true, "mmx": "multimedia extensions (MMX)", "monitor": true, "movbe": true, "msr": "model-specific registers", "mtrr": "memory type range registers", "nonstop_tsc": true, "nx": "no-execute bit (NX)", "pae": "4GB+ memory addressing (Physical Address Extension)", "pat": "page attribute table", "pbe": "pending break event", "pclmulqdq": true, "pdcm": true, "pdpe1gb": true, "pebs": true, "pge": "page global enable", "pln": true, "pni": true, "popcnt": true, "pse": "page size extensions", "pse36": "36-bit page size extensions", "pts": true, "rdrand": true, "rdtscp": true, "sdbg": true, "sep": "fast system calls", "smep": true, "ss": "self-snoop", "ssbd": true, "sse": "streaming SIMD extensions (SSE)", "sse2": "streaming SIMD extensions (SSE2)", "sse4_1": true, "sse4_2": true, "ssse3": true, "stibp": true, "tm": "thermal interrupt and status", "tm2": true, "tpr_shadow": true, "tsc": "time stamp counter", "tsc_adjust": true, "tsc_deadline_timer": true, "vme": "virtual mode extensions", "vmx": "CPU virtualization (Vanderpool)", "vnmi": true, "vpid": true, "wp": true, "x86-64": "64bits extensions (x86-64)", "xsave": true, "xsaveopt": true, "xtopology": true, "xtpr": true}, "capacity": 2700000000, "children": [{"capabilities": {"asynchronous": "Asynchronous", "instruction": "Instruction cache", "internal": "Internal", "write-back": "Write-back"}, "capacity": 32768, "claimed": true, "class": "memory", "configuration": {"level": "1"}, "description": "L1 cache", "handle": "DMI:0008", "id": "cache:0", "physid": "8", "size": 32768, "slot": "L1 Cache", "units": "bytes"}, {"capabilities": {"asynchronous": "Asynchronous", "internal": "Internal", "unified": "Unified cache", "write-back": "Write-back"}, "capacity": 262144, "claimed": true, "class": "memory", "configuration": {"level": "2"}, "description": "L2 cache", "handle": "DMI:0009", "id": "cache:1", "physid": "9", "size": 262144, "slot": "L2 Cache", "units": "bytes"}, {"capabilities": {"asynchronous": "Asynchronous", "internal": "Internal", "unified": "Unified cache", "write-back": "Write-back"}, "capacity": 3145728, "claimed": true, "class": "memory", "configuration": {"level": "3"}, "description": "L3 cache", "handle": "DMI:000A", "id": "cache:2", "physid": "a", "size": 3145728, "slot": "L3 Cache", "units": "bytes"}, {"capabilities": {"logical": "Logical CPU"}, "claimed": true, "class": "processor", "description": "Logical CPU", "handle": "CPU:2.0", "id": "logicalcpu:0", "physid": "2.1", "width": 64}, {"capabilities": {"logical": "Logical CPU"}, "claimed": true, "class": "processor", "description": "Logical CPU", "handle": "CPU:2.1", "id": "logicalcpu:1", "physid": "2.2", "width": 64}, {"capabilities": {"logical": "Logical CPU"}, "claimed": true, "class": "processor", "description": "Logical CPU", "handle": "CPU:2.2", "id": "logicalcpu:2", "physid": "2.3", "width": 64}, {"capabilities": {"logical": "Logical CPU"}, "claimed": true, "class": "processor", "description": "Logical CPU", "handle": "CPU:2.3", "id": "logicalcpu:3", "physid": "2.4", "width": 64}, {"capabilities": {"logical": "Logical CPU"}, "claimed": true, "class": "processor", "description": "Logical CPU", "handle": "CPU:2.4", "id": "logicalcpu:4", "physid": "2.5", "width": 64}, {"capabilities": {"logical": "Logical CPU"}, "claimed": true, "class": "processor", "description": "Logical CPU", "handle": "CPU:2.5", "id": "logicalcpu:5", "physid": "2.6", "width": 64}, {"capabilities": {"logical": "Logical CPU"}, "claimed": true, "class": "processor", "description": "Logical CPU", "handle": "CPU:2.6", "id": "logicalcpu:6", "physid": "2.7", "width": 64}, {"capabilities": {"logical": "Logical CPU"}, "claimed": true, "class": "processor", "description": "Logical CPU", "handle": "CPU:2.7", "id": "logicalcpu:7", "physid": "2.8", "width": 64}, {"capabilities": {"logical": "Logical CPU"}, "claimed": true, "class": "processor", "description": "Logical CPU", "handle": "CPU:2.8", "id": "logicalcpu:8", "physid": "2.9", "width": 64}, {"capabilities": {"logical": "Logical CPU"}, "claimed": true, "class": "processor", "description": "Logical CPU", "handle": "CPU:2.9", "id": "logicalcpu:9", "physid": "2.a", "width": 64}, {"capabilities": {"logical": "Logical CPU"}, "claimed": true, "class": "processor", "description": "Logical CPU", "handle": "CPU:2.10", "id": "logicalcpu:10", "physid": "2.b", "width": 64}, {"capabilities": {"logical": "Logical CPU"}, "claimed": true, "class": "processor", "description": "Logical CPU", "handle": "CPU:2.11", "id": "logicalcpu:11", "physid": "2.c", "width": 64}, {"capabilities": {"logical": "Logical CPU"}, "claimed": true, "class": "processor", "description": "Logical CPU", "handle": "CPU:2.12", "id": "logicalcpu:12", "physid": "2.d", "width": 64}, {"capabilities": {"logical": "Logical CPU"}, "claimed": true, "class": "processor", "description": "Logical CPU", "handle": "CPU:2.13", "id": "logicalcpu:13", "physid": "2.e", "width": 64}, {"capabilities": {"logical": "Logical CPU"}, "claimed": true, "class": "processor", "description": "Logical CPU", "handle": "CPU:2.14", "id": "logicalcpu:14", "physid": "2.f", "width": 64}, {"capabilities": {"logical": "Logical CPU"}, "claimed": true, "class": "processor", "description": "Logical CPU", "handle": "CPU:2.15", "id": "logicalcpu:15", "physid": "2.10", "width": 64}], "claimed": true, "class": "processor", "clock": 100000000, "configuration": {"cores": "2", "enabledcores": "2", "id": "2", "threads": "4"}, "description": "CPU", "handle": "DMI:0007", "id": "cpu", "physid": "7", "product": "Intel(R) Core(TM) i5-4210U CPU @ 1.70GHz", "serial": "0004-0651-0000-0000-0000-0000", "size": 1494140000, "slot": "U3E1", "units": "Hz", "vendor": "Intel Corp.", "version": "6.5.1", "width": 64}, {"capabilities": {"asynchronous": "Asynchronous", "data": "Data cache", "internal": "Internal", "write-back": "Write-back"}, "capacity": 32768, "claimed": true, "class": "memory", "configuration": {"level": "1"}, "description": "L1 cache", "handle": "DMI:0006", "id": "cache", "physid": "6", "size": 32768, "slot": "L1 Cache", "units": "bytes"}, {"children": [{"claimed": true, "class": "memory", "clock": 1600000000, "description": "SODIMM DDR3 Synchronous 1600 MHz (0.6 ns)", "handle": "DMI:0001", "id": "bank:0", "physid": "0", "product": "8KTF51264HZ-1G6N1", "serial": "18503423", "size": 4294967296, "slot": "Bottom-Slot 1(left)", "units": "bytes", "vendor": "Micron", "width": 64}, {"claimed": true, "class": "memory", "clock": 1600000000, "description": "SODIMM DDR3 Synchronous 1600 MHz (0.6 ns)", "handle": "DMI:0003", "id": "bank:1", "physid": "1", "product": "8KTF51264HZ-1G6N1", "serial": "18651324", "size": 4294967296, "slot": "Bottom-Slot 2(right)", "units": "bytes", "vendor": "Micron", "width": 64}], "claimed": true, "class": "memory", "description": "System Memory", "handle": "DMI:0000", "id": "memory", "physid": "0", "size": 8589934592, "slot": "System board or motherboard", "units": "bytes"}, {"businfo": "pci@0000:00:00.0", "children": [{"businfo": "pci@0000:00:02.0", "capabilities": {"bus_master": "bus mastering", "cap_list": "PCI capabilities listing", "msi": "Message Signalled Interrupts", "pm": "Power Management", "rom": "extension ROM", "vga_controller": true}, "claimed": true, "class": "display", "clock": 33000000, "configuration": {"driver": "i915", "latency": "0"}, "description": "VGA compatible controller", "handle": "PCI:0000:00:02.0", "id": "display", "physid": "2", "product": "Haswell-ULT Integrated Graphics Controller", "vendor": "Intel Corporation", "version": "0b", "width": 64}, {"businfo": "pci@0000:00:03.0", "capabilities": {"bus_master": "bus mastering", "cap_list": "PCI capabilities listing", "msi": "Message Signalled Interrupts", "pciexpress": "PCI Express", "pm": "Power Management"}, "claimed": true, "class": "multimedia", "clock": 33000000, "configuration": {"driver": "snd_hda_intel", "latency": "0"}, "description": "Audio device", "handle": "PCI:0000:00:03.0", "id": "multimedia:0", "physid": "3", "product": "Haswell-ULT HD Audio Controller", "vendor": "Intel Corporation", "version": "0b", "width": 64}, {"businfo": "pci@0000:00:14.0", "capabilities": {"bus_master": "bus mastering", "cap_list": "PCI capabilities listing", "msi": "Message Signalled Interrupts", "pm": "Power Management", "xhci": true}, "children": [{"businfo": "usb@2", "capabilities": {"usb-2.00": "USB 2.0"}, "children": [{"businfo": "usb@2:2", "capabilities": {"emulated": "Emulated device", "scsi": "SCSI", "usb-2.00": "USB 2.0"}, "children": [{"businfo": "scsi@4:0.0.0", "capabilities": {"removable": "support is removable"}, "children": [{"capabilities": {"partitioned": "Partitioned disk", "partitioned:dos": "MS-DOS partition table"}, "children": [{"capabilities": {"bootable": "Bootable partition (active)", "fat": "Windows FAT", "initialized": "initialized volume", "primary": "Primary partition"}, "capacity": 15499526144, "claimed": true, "class": "volume", "configuration": {"FATs": "2", "filesystem": "fat", "label": "ISOIMAGE", "mount.fstype": "vfat", "mount.options": "ro,noatime,fmask=0022,dmask=0022,codepage=437,iocharset=ascii,shortname=mixed,utf8,errors=remount-ro", "state": "mounted"}, "description": "Windows FAT volume", "dev": "8:17", "id": "volume", "logicalname": ["/dev/sdb1", "/lib/live/mount/medium"], "physid": "1", "serial": "ce9d-92e6", "size": 15496820736, "vendor": "SYSLINUX", "version": "FAT32"}], "claimed": true, "class": "disk", "configuration": {"signature": "0ec92a03"}, "dev": "8:16", "id": "medium", "logicalname": "/dev/sdb", "physid": "0", "size": 15500574720, "units": "bytes"}], "claimed": true, "class": "disk", "configuration": {"ansiversion": "6", "logicalsectorsize": "512", "sectorsize": "512"}, "description": "SCSI Disk", "dev": "8:16", "handle": "SCSI:04:00:00:00", "id": "disk", "logicalname": "/dev/sdb", "physid": "0.0.0", "product": "TransMemory", "serial": "0", "size": 15500574720, "units": "bytes", "vendor": "KIOXIA"}], "claimed": true, "class": "storage", "configuration": {"driver": "usb-storage", "maxpower": "300mA", "speed": "480Mbit/s"}, "description": "Mass storage device", "handle": "USB:2:2", "id": "usb:0", "logicalname": "scsi4", "physid": "2", "product": "TransMemory", "serial": "0022CFF6B8A6C461331718B1", "vendor": "KIOXIA", "version": "0.01"}, {"businfo": "usb@2:4", "capabilities": {"bluetooth": "Bluetooth wireless radio", "usb-2.10": true}, "claimed": true, "class": "communication", "configuration": {"driver": "btusb", "maxpower": "500mA", "speed": "12Mbit/s"}, "description": "Bluetooth wireless interface", "handle": "USB:2:3", "id": "usb:1", "physid": "4", "product": "Bluetooth Radio", "serial": "00e04c000001", "vendor": "Realtek", "version": "2.00"}, {"businfo": "usb@2:5", "capabilities": {"usb-1.10": "USB 1.1"}, "class": "generic", "configuration": {"maxpower": "100mA", "speed": "12Mbit/s"}, "description": "Generic USB device", "handle": "USB:2:4", "id": "usb:2", "physid": "5", "product": "VFS495 Fingerprint Reader", "serial": "00b0685ccb93", "vendor": "Validity Sensors, Inc.", "version": "1.04"}, {"businfo": "usb@2:7", "capabilities": {"usb-2.00": "USB 2.0"}, "claimed": true, "class": "multimedia", "configuration": {"driver": "uvcvideo", "maxpower": "500mA", "speed": "480Mbit/s"}, "description": "Video", "handle": "USB:2:5", "id": "usb:3", "physid": "7", "product": "HP HD Webcam", "serial": "200901010001", "vendor": "DDZLE019I6OJ8L", "version": "0.04"}], "claimed": true, "class": "bus", "configuration": {"driver": "hub", "slots": "9", "speed": "480Mbit/s"}, "handle": "USB:2:1", "id": "usbhost:0", "logicalname": "usb2", "physid": "0", "product": "xHCI Host Controller", "vendor": "Linux 4.9.0-14-686-pae xhci-hcd", "version": "4.09"}, {"businfo": "usb@3", "capabilities": {"usb-3.00": true}, "claimed": true, "class": "bus", "configuration": {"driver": "hub", "slots": "4", "speed": "5000Mbit/s"}, "handle": "USB:3:1", "id": "usbhost:1", "logicalname": "usb3", "physid": "1", "product": "xHCI Host Controller", "vendor": "Linux 4.9.0-14-686-pae xhci-hcd", "version": "4.09"}], "claimed": true, "class": "bus", "clock": 33000000, "configuration": {"driver": "xhci_hcd", "latency": "0"}, "description": "USB controller", "handle": "PCI:0000:00:14.0", "id": "usb:0", "physid": "14", "product": "8 Series USB xHCI HC", "vendor": "Intel Corporation", "version": "04", "width": 64}, {"businfo": "pci@0000:00:16.0", "capabilities": {"bus_master": "bus mastering", "cap_list": "PCI capabilities listing", "msi": "Message Signalled Interrupts", "pm": "Power Management"}, "claimed": true, "class": "communication", "clock": 33000000, "configuration": {"driver": "mei_me", "latency": "0"}, "description": "Communication controller", "handle": "PCI:0000:00:16.0", "id": "communication", "physid": "16", "product": "8 Series HECI #0", "vendor": "Intel Corporation", "version": "04", "width": 64}, {"businfo": "pci@0000:00:1b.0", "capabilities": {"bus_master": "bus mastering", "cap_list": "PCI capabilities listing", "msi": "Message Signalled Interrupts", "pm": "Power Management"}, "claimed": true, "class": "multimedia", "clock": 33000000, "configuration": {"driver": "snd_hda_intel", "latency": "64"}, "description": "Audio device", "handle": "PCI:0000:00:1b.0", "id": "multimedia:1", "physid": "1b", "product": "8 Series HD Audio Controller", "vendor": "Intel Corporation", "version": "04", "width": 64}, {"businfo": "pci@0000:00:1c.0", "capabilities": {"bus_master": "bus mastering", "cap_list": "PCI capabilities listing", "msi": "Message Signalled Interrupts", "normal_decode": true, "pci": true, "pciexpress": "PCI Express", "pm": "Power Management"}, "claimed": true, "class": "bridge", "clock": 33000000, "configuration": {"driver": "pcieport"}, "description": "PCI bridge", "handle": "PCIBUS:0000:01", "id": "pci:0", "physid": "1c", "product": "8 Series PCI Express Root Port 1", "vendor": "Intel Corporation", "version": "e4", "width": 32}, {"businfo": "pci@0000:00:1c.1", "capabilities": {"bus_master": "bus mastering", "cap_list": "PCI capabilities listing", "msi": "Message Signalled Interrupts", "normal_decode": true, "pci": true, "pciexpress": "PCI Express", "pm": "Power Management"}, "children": [{"businfo": "pci@0000:07:00.0", "capabilities": {"bus_master": "bus mastering", "cap_list": "PCI capabilities listing", "msi": "Message Signalled Interrupts", "pciexpress": "PCI Express", "pm": "Power Management"}, "claimed": true, "class": "generic", "clock": 33000000, "configuration": {"driver": "rtsx_pci", "latency": "0"}, "description": "Unassigned class", "handle": "PCI:0000:07:00.0", "id": "generic", "physid": "0", "product": "RTS5227 PCI Express Card Reader", "vendor": "Realtek Semiconductor Co., Ltd.", "version": "01", "width": 32}], "claimed": true, "class": "bridge", "clock": 33000000, "configuration": {"driver": "pcieport"}, "description": "PCI bridge", "handle": "PCIBUS:0000:07", "id": "pci:1", "physid": "1c.1", "product": "8 Series PCI Express Root Port 2", "vendor": "Intel Corporation", "version": "e4", "width": 32}, {"businfo": "pci@0000:00:1c.2", "capabilities": {"bus_master": "bus mastering", "cap_list": "PCI capabilities listing", "msi": "Message Signalled Interrupts", "normal_decode": true, "pci": true, "pciexpress": "PCI Express", "pm": "Power Management"}, "children": [{"businfo": "pci@0000:08:00.0", "capabilities": {"1000bt": "1Gbit/s", "1000bt-fd": "1Gbit/s (full duplex)", "100bt": "100Mbit/s", "100bt-fd": "100Mbit/s (full duplex)", "10bt": "10Mbit/s", "10bt-fd": "10Mbit/s (full duplex)", "autonegotiation": "Auto-negotiation", "bus_master": "bus mastering", "cap_list": "PCI capabilities listing", "ethernet": true, "mii": "Media Independent Interface", "msi": "Message Signalled Interrupts", "msix": "MSI-X", "pciexpress": "PCI Express", "physical": "Physical interface", "pm": "Power Management", "tp": "twisted pair", "vpd": "Vital Product Data"}, "capacity": 1000000000, "claimed": true, "class": "network", "clock": 33000000, "configuration": {"autonegotiation": "on", "broadcast": "yes", "driver": "r8169", "driverversion": "2.3LK-NAPI", "duplex": "full", "firmware": "rtl8168g-3_0.0.1 04/23/13", "ip": "192.168.108.192", "latency": "0", "link": "yes", "multicast": "yes", "port": "MII", "speed": "1Gbit/s"}, "description": "Ethernet interface", "handle": "PCI:0000:08:00.0", "id": "network", "logicalname": "enp8s0", "physid": "0", "product": "RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller", "serial": "64:51:06:b0:0a:f6", "size": 1000000000, "units": "bit/s", "vendor": "Realtek Semiconductor Co., Ltd.", "version": "10", "width": 64}], "claimed": true, "class": "bridge", "clock": 33000000, "configuration": {"driver": "pcieport"}, "description": "PCI bridge", "handle": "PCIBUS:0000:08", "id": "pci:2", "physid": "1c.2", "product": "8 Series PCI Express Root Port 3", "vendor": "Intel Corporation", "version": "e4", "width": 32}, {"businfo": "pci@0000:00:1c.3", "capabilities": {"bus_master": "bus mastering", "cap_list": "PCI capabilities listing", "msi": "Message Signalled Interrupts", "normal_decode": true, "pci": true, "pciexpress": "PCI Express", "pm": "Power Management"}, "children": [{"businfo": "pci@0000:09:00.0", "capabilities": {"bus_master": "bus mastering", "cap_list": "PCI capabilities listing", "ethernet": true, "msi": "Message Signalled Interrupts", "pciexpress": "PCI Express", "physical": "Physical interface", "pm": "Power Management", "wireless": "Wireless-LAN"}, "claimed": true, "class": "network", "clock": 33000000, "configuration": {"broadcast": "yes", "driver": "rtl8723be", "driverversion": "4.9.0-14-686-pae", "firmware": "N/A", "latency": "0", "link": "no", "multicast": "yes", "wireless": "IEEE 802.11"}, "description": "Wireless interface", "disabled": true, "handle": "PCI:0000:09:00.0", "id": "network", "logicalname": "wlo1", "physid": "0", "product": "RTL8723BE PCIe Wireless Network Adapter", "serial": "90:48:9a:af:6a:1b", "vendor": "Realtek Semiconductor Co., Ltd.", "version": "00", "width": 64}], "claimed": true, "class": "bridge", "clock": 33000000, "configuration": {"driver": "pcieport"}, "description": "PCI bridge", "handle": "PCIBUS:0000:09", "id": "pci:3", "physid": "1c.3", "product": "8 Series PCI Express Root Port 4", "vendor": "Intel Corporation", "version": "e4", "width": 32}, {"businfo": "pci@0000:00:1d.0", "capabilities": {"bus_master": "bus mastering", "cap_list": "PCI capabilities listing", "debug": "Debug port", "ehci": "Enhanced Host Controller Interface (USB2)", "pm": "Power Management"}, "children": [{"businfo": "usb@1", "capabilities": {"usb-2.00": "USB 2.0"}, "children": [{"businfo": "usb@1:1", "capabilities": {"usb-2.00": "USB 2.0"}, "claimed": true, "class": "bus", "configuration": {"driver": "hub", "slots": "8", "speed": "480Mbit/s"}, "description": "USB hub", "handle": "USB:1:2", "id": "usb", "physid": "1", "vendor": "Intel Corp.", "version": "0.04"}], "claimed": true, "class": "bus", "configuration": {"driver": "hub", "slots": "2", "speed": "480Mbit/s"}, "handle": "USB:1:1", "id": "usbhost", "logicalname": "usb1", "physid": "1", "product": "EHCI Host Controller", "vendor": "Linux 4.9.0-14-686-pae ehci_hcd", "version": "4.09"}], "claimed": true, "class": "bus", "clock": 33000000, "configuration": {"driver": "ehci-pci", "latency": "0"}, "description": "USB controller", "handle": "PCI:0000:00:1d.0", "id": "usb:1", "physid": "1d", "product": "8 Series USB EHCI #1", "vendor": "Intel Corporation", "version": "04", "width": 32}, {"businfo": "pci@0000:00:1f.0", "capabilities": {"bus_master": "bus mastering", "cap_list": "PCI capabilities listing", "isa": true}, "claimed": true, "class": "bridge", "clock": 33000000, "configuration": {"driver": "lpc_ich", "latency": "0"}, "description": "ISA bridge", "handle": "PCI:0000:00:1f.0", "id": "isa", "physid": "1f", "product": "8 Series LPC Controller", "vendor": "Intel Corporation", "version": "04", "width": 32}, {"businfo": "pci@0000:00:1f.2", "capabilities": {"ahci_1.0": true, "bus_master": "bus mastering", "cap_list": "PCI capabilities listing", "msi": "Message Signalled Interrupts", "pm": "Power Management", "storage": true}, "claimed": true, "class": "storage", "clock": 66000000, "configuration": {"driver": "ahci", "latency": "0"}, "description": "SATA controller", "handle": "PCI:0000:00:1f.2", "id": "storage", "physid": "1f.2", "product": "8 Series SATA Controller 1 [AHCI mode]", "vendor": "Intel Corporation", "version": "04", "width": 32}, {"businfo": "pci@0000:00:1f.6", "capabilities": {"bus_master": "bus mastering", "cap_list": "PCI capabilities listing", "msi": "Message Signalled Interrupts", "pm": "Power Management"}, "claimed": true, "class": "generic", "clock": 33000000, "configuration": {"driver": "intel_pch_thermal", "latency": "0"}, "description": "Signal processing controller", "handle": "PCI:0000:00:1f.6", "id": "generic", "physid": "1f.6", "product": "8 Series Thermal", "vendor": "Intel Corporation", "version": "04", "width": 64}], "claimed": true, "class": "bridge", "clock": 33000000, "configuration": {"driver": "hsw_uncore"}, "description": "Host bridge", "handle": "PCIBUS:0000:00", "id": "pci", "physid": "100", "product": "Haswell-ULT DRAM Controller", "vendor": "Intel Corporation", "version": "0b", "width": 32}, {"capabilities": {"emulated": "Emulated device"}, "children": [{"businfo": "scsi@0:0.0.0", "capabilities": {"partitioned": "Partitioned disk", "partitioned:dos": "MS-DOS partition table"}, "children": [{"businfo": "scsi@0:0.0.0,1", "capabilities": {"bootable": "Bootable partition (active)", "initialized": "initialized volume", "ntfs": "Windows NTFS", "primary": "Primary partition"}, "capacity": 523239424, "claimed": true, "class": "volume", "configuration": {"clustersize": "4096", "created": "2019-07-03 18:32:58", "filesystem": "ntfs", "label": "System Reserved", "modified_by_chkdsk": "true", "mounted_on_nt4": "true", "resize_log_file": "true", "state": "dirty", "upgrade_on_mount": "true"}, "description": "Windows NTFS volume", "dev": "8:1", "id": "volume:0", "logicalname": "/dev/sda1", "physid": "1", "serial": "acbd-0cc5", "size": 522190336, "version": "3.1"}, {"businfo": "scsi@0:0.0.0,2", "capabilities": {"initialized": "initialized volume", "ntfs": "Windows NTFS", "primary": "Primary partition"}, "capacity": 125829120000, "claimed": true, "class": "volume", "configuration": {"clustersize": "4096", "created": "2019-07-03 18:32:59", "filesystem": "ntfs", "label": "WINDOWS7", "state": "clean"}, "description": "Windows NTFS volume", "dev": "8:2", "id": "volume:1", "logicalname": "/dev/sda2", "physid": "2", "serial": "408d7f13-28ec-aa48-9055-88d2c55f3d42", "size": 125808147968, "version": "3.1"}, {"businfo": "scsi@0:0.0.0,3", "capabilities": {"initialized": "initialized volume", "ntfs": "Windows NTFS", "primary": "Primary partition"}, "capacity": 373753380864, "claimed": true, "class": "volume", "configuration": {"clustersize": "4096", "created": "2019-07-03 18:33:01", "filesystem": "ntfs", "label": "DATOS", "modified_by_chkdsk": "true", "mounted_on_nt4": "true", "resize_log_file": "true", "state": "dirty", "upgrade_on_mount": "true"}, "description": "Windows NTFS volume", "dev": "8:3", "id": "volume:2", "logicalname": "/dev/sda3", "physid": "3", "serial": "fe81de5e-cd06-2348-aa95-4b2e6930ce4d", "size": 373732408832, "version": "3.1"}], "claimed": true, "class": "disk", "configuration": {"ansiversion": "5", "logicalsectorsize": "512", "sectorsize": "4096", "signature": "38d4fbef"}, "description": "ATA Disk", "dev": "8:0", "handle": "SCSI:00:00:00:00", "id": "disk", "logicalname": "/dev/sda", "physid": "0.0.0", "product": "ST500LT012-1DG14", "serial": "S3P9A81F", "size": 500107862016, "units": "bytes", "vendor": "Seagate", "version": "YAM1"}], "claimed": true, "class": "storage", "id": "scsi:0", "logicalname": "scsi0", "physid": "1"}, {"capabilities": {"emulated": "Emulated device"}, "children": [{"businfo": "scsi@1:0.0.0", "capabilities": {"audio": "Audio CD playback", "cd-r": "CD-R burning", "cd-rw": "CD-RW burning", "dvd": "DVD playback", "dvd-r": "DVD-R burning", "dvd-ram": "DVD-RAM burning", "removable": "support is removable"}, "claimed": true, "class": "disk", "configuration": {"ansiversion": "5", "status": "nodisc"}, "description": "DVD-RAM writer", "dev": "11:0", "handle": "SCSI:01:00:00:00", "id": "cdrom", "logicalname": ["/dev/cdrom", "/dev/cdrw", "/dev/dvd", "/dev/dvdrw", "/dev/sr0"], "physid": "0.0.0", "product": "DVDRAM GU90N", "vendor": "hp", "version": "U900"}], "claimed": true, "class": "storage", "id": "scsi:1", "logicalname": "scsi1", "physid": "2"}], "claimed": true, "class": "bus", "description": "Motherboard", "handle": "DMI:000E", "id": "core", "physid": "0", "product": "2248", "serial": "PELSAF2WV6XGL6", "vendor": "Hewlett-Packard", "version": "KBC Version 67.21"}, {"capacity": 40100, "claimed": true, "class": "power", "configuration": {"voltage": "14.8V"}, "handle": "DMI:001C", "id": "battery", "physid": "1", "product": "VI04040XL", "slot": "Primary", "units": "mWh", "vendor": "33-24"}], "claimed": true, "class": "system", "configuration": {"boot": "normal", "chassis": "notebook", "family": "103C_5336AN G=N L=BUS B=HP S=PRO", "sku": "F5R46AV", "uuid": "7F25D367-F6D0-E311-A300-2286570180FF"}, "description": "Notebook", "handle": "DMI:000D", "id": "debian", "product": "HP ProBook 450 G2 (F5R46AV)", "serial": "CND4286ZJ3", "vendor": "Hewlett-Packard", "version": "A3009DD10303", "width": 32}}, "device": {"actions": [{"elapsed": 1, "rate": 0.8448, "type": "BenchmarkRamSysbench"}], "chassis": "Netbook", "manufacturer": "Hewlett-Packard", "model": "HP ProBook 450 G2", "serialNumber": "CND4286ZJ3", "sku": "F5R46AV", "type": "Laptop", "version": "A3009DD10303"}, "elapsed": 13745, "endTime": "2022-01-13T10:24:04.179939+00:00", "software": "Workbench", "type": "Snapshot", "uuid": "e7de22e2-f8a7-4051-b133-0a7a0e27611f", "version": "11.0b11"} diff --git a/example/dpp-snapshots/hp_probook_g8.json b/example/dpp-snapshots/hp_probook_g8.json new file mode 100644 index 0000000..e61fcf8 --- /dev/null +++ b/example/dpp-snapshots/hp_probook_g8.json @@ -0,0 +1 @@ +{"closed": true, "components": [{"actions": [], "manufacturer": "AUO", "model": "LCD Monitor", "productionDate": "2013-12-15T00:00:00", "refreshRate": 60, "resolutionHeight": 768, "resolutionWidth": 1366, "serialNumber": null, "size": 15.529237982414482, "technology": "LCD", "type": "Display"}, {"actions": [{"elapsed": 0, "rate": 19155.4, "type": "BenchmarkProcessor"}, {"elapsed": 0, "rate": 18446740964.4517, "type": "BenchmarkProcessorSysbench"}], "address": 64, "brand": "Core i5", "cores": 2, "generation": 4, "manufacturer": "Intel Corp.", "model": "Intel Core i5-4210U CPU @ 1.70GHz", "serialNumber": null, "speed": 1.49414, "threads": 4, "type": "Processor"}, {"actions": [], "manufacturer": "Intel Corporation", "model": "Haswell-ULT HD Audio Controller", "serialNumber": null, "type": "SoundCard"}, {"actions": [], "manufacturer": "DDZLE019I6OJ8L", "model": "HP HD Webcam", "serialNumber": "200901010001", "type": "SoundCard"}, {"actions": [], "manufacturer": "Intel Corporation", "model": "8 Series HD Audio Controller", "serialNumber": null, "type": "SoundCard"}, {"actions": [], "format": "SODIMM", "interface": "DDR3", "manufacturer": "Micron", "model": "8KTF51264HZ-1G6N1", "serialNumber": "18503423", "size": 4096.0, "speed": 1600.0, "type": "RamModule"}, {"actions": [], "format": "SODIMM", "interface": "DDR3", "manufacturer": "Micron", "model": "8KTF51264HZ-1G6N1", "serialNumber": "18651324", "size": 4096.0, "speed": 1600.0, "type": "RamModule"}, {"actions": [{"assessment": true, "commandTimeout": 4295032833, "currentPendingSectorCount": 0, "elapsed": 120, "length": "Short", "lifetime": 8627, "offlineUncorrectable": 0, "powerCycleCount": 1575, "reallocatedSectorCount": 0, "reportedUncorrectableErrors": 5009, "severity": "Info", "status": "Completed without error", "type": "TestDataStorage"}, {"elapsed": 14, "readSpeed": 104.0, "type": "BenchmarkDataStorage", "writeSpeed": 24.4}, {"endTime": "2022-01-13T14:13:09.338771+00:00", "severity": "Info", "startTime": "2022-01-13T09:34:39.026634+00:00", "steps": [{"endTime": "2022-01-13T11:07:49.733336+00:00", "severity": "Info", "startTime": "2022-01-13T09:34:39.026954+00:00", "type": "StepZero"}, {"endTime": "2022-01-13T14:13:09.338626+00:00", "severity": "Info", "startTime": "2022-01-13T11:07:49.734069+00:00", "type": "StepRandom"}], "type": "EraseSectors"}], "interface": "ATA", "manufacturer": "Seagate", "model": "ST500LT012-1DG15", "serialNumber": "S3P9A81F", "size": 500107.86201599997, "type": "HardDrive", "variant": "YAM1"}, {"actions": [], "manufacturer": "Realtek Semiconductor Co., Ltd.", "model": "RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller", "serialNumber": "64:51:06:b0:0a:f6", "speed": 1000.0, "type": "NetworkAdapter", "variant": "10", "wireless": false}, {"actions": [], "manufacturer": "Realtek Semiconductor Co., Ltd.", "model": "RTL8723BA PCIe Wireless Network Adapter", "serialNumber": "90:48:9a:af:6a:1b", "speed": null, "type": "NetworkAdapter", "variant": "00", "wireless": true}, {"actions": [], "manufacturer": "Intel Corporation", "memory": null, "model": "Haswell-ULT Integrated Graphics Controller", "serialNumber": null, "type": "GraphicCard"}, {"actions": [], "biosDate": "2014-06-17T00:00:00", "firewire": 0, "manufacturer": "HP", "model": "2248", "pcmcia": 0, "ramMaxSize": 16, "ramSlots": 2, "serial": 0, "serialNumber": "PELSAF2WV6XGL7", "slots": 2, "type": "Motherboard", "usb": 2, "version": "M74 Ver. 01.02"}], "debug": {"battery": null, "hwinfo": "01: None 00.0: 10105 BIOS\n [Created at bios.186]\n Unique ID: rdCR.lZF+r4EgHp4\n Hardware Class: bios\n BIOS Keyboard LED Status:\n Scroll Lock: off\n Num Lock: off\n Caps Lock: off\n Parallel Port 0: 0x378\n Base Memory: 631 kB\n PnP BIOS: @@P3C00\n BIOS: extended read supported\n SMBIOS Version: 2.7\n BIOS Info: #12\n Vendor: \"HP\"\n Version: \"M74 Ver. 01.02\"\n Date: \"06/17/2014\"\n Start Address: 0xf0000\n ROM Size: 6144 kB\n Features: 0x0f83000000093c099980\n PCI supported\n PCMCIA supported\n BIOS flashable\n BIOS shadowing allowed\n CD boot supported\n Selectable boot supported\n EDD spec supported\n Print Screen supported\n 8042 Keyboard Services supported\n Serial Services supported\n Printer Services supported\n ACPI supported\n USB Legacy supported\n Smart Battery supported\n BIOS Boot Spec supported\n F12 Network boot supported\n System Info: #13\n Manufacturer: \"HP\"\n Product: \"HP ProBook 450 G8\"\n Version: \"A3009DD10303\"\n Serial: \"CND4286Z55\"\n UUID: undefined, but settable\n Wake-up: 0x06 (Power Switch)\n Board Info: #14\n Manufacturer: \"HP\"\n Product: \"2248\"\n Version: \"KBC Version 67.21\"\n Serial: \"PELSAF2WV6XGL8\"\n Type: 0x01 (Other)\n Features: 0x09\n Hosting Board\n Replaceable\n Chassis: #15\n Chassis Info: #15\n Manufacturer: \"HP\"\n Serial: \"CND4286ZJ3\"\n Type: 0x0a (Notebook)\n Bootup State: 0x03 (Safe)\n Power Supply State: 0x03 (Safe)\n Thermal State: 0x01 (Other)\n Security Status: 0x01 (Other)\n Processor Info: #7\n Socket: \"U3E1\"\n Socket Type: 0x2e (Other)\n Socket Status: Populated\n Type: 0x03 (CPU)\n Family: 0xcd (Other)\n Manufacturer: \"Intel(R) Corporation\"\n Version: \"Intel(R) Core(TM) i5-4210U CPU @ 1.70GHz\"\n Serial: \"To Be Filled By O.E.M.\"\n Asset Tag: \"To Be Filled By O.E.M.\"\n Processor ID: 0xbfebfbff00040651\n Status: 0x01 (Enabled)\n Voltage: 0.7 V\n External Clock: 100 MHz\n Max. Speed: 2400 MHz\n Current Speed: 1700 MHz\n L1 Cache: #8\n L2 Cache: #9\n L3 Cache: #10\n Cache Info: #6\n Designation: \"L1 Cache\"\n Level: L1\n State: Enabled\n Mode: 0x01 (Write Back)\n Location: 0x00 (Internal, Not Socketed)\n ECC: 0x04 (Parity)\n Type: 0x04 (Data)\n Associativity: 0x07 (8-way Set-Associative)\n Max. Size: 32 kB\n Current Size: 32 kB\n Supported SRAM Types: 0x0040 (Asynchronous)\n Current SRAM Type: 0x0040 (Asynchronous)\n Cache Info: #8\n Designation: \"L1 Cache\"\n Level: L1\n State: Enabled\n Mode: 0x01 (Write Back)\n Location: 0x00 (Internal, Not Socketed)\n ECC: 0x04 (Parity)\n Type: 0x03 (Instruction)\n Associativity: 0x07 (8-way Set-Associative)\n Max. Size: 32 kB\n Current Size: 32 kB\n Supported SRAM Types: 0x0040 (Asynchronous)\n Current SRAM Type: 0x0040 (Asynchronous)\n Cache Info: #9\n Designation: \"L2 Cache\"\n Level: L2\n State: Enabled\n Mode: 0x01 (Write Back)\n Location: 0x00 (Internal, Not Socketed)\n ECC: 0x05 (Single-bit)\n Type: 0x05 (Unified)\n Associativity: 0x07 (8-way Set-Associative)\n Max. Size: 256 kB\n Current Size: 256 kB\n Supported SRAM Types: 0x0040 (Asynchronous)\n Current SRAM Type: 0x0040 (Asynchronous)\n Cache Info: #10\n Designation: \"L3 Cache\"\n Level: L3\n State: Enabled\n Mode: 0x01 (Write Back)\n Location: 0x00 (Internal, Not Socketed)\n ECC: 0x06 (Multi-bit)\n Type: 0x05 (Unified)\n Associativity: 0x09 (Other)\n Max. Size: 3072 kB\n Current Size: 3072 kB\n Supported SRAM Types: 0x0040 (Asynchronous)\n Current SRAM Type: 0x0040 (Asynchronous)\n Port Connector: #20\n Type: 0x20 (Other)\n Internal Designator: \"Ctrl0Port0\"\n Internal Connector: 0x22 (Other)\n External Designator: \"Primary HDD Bay\"\n External Connector: 0x22 (Other)\n Port Connector: #21\n Type: 0x20 (Other)\n Internal Designator: \"Ctrl0Port5\"\n Internal Connector: 0x22 (Other)\n External Designator: \"Docking Station Upgrade Bay\"\n External Connector: 0x22 (Other)\n Port Connector: #22\n Type: 0x20 (Other)\n Internal Designator: \"Ctrl0Port4\"\n Internal Connector: 0x22 (Other)\n External Designator: \"eSATA\"\n External Connector: 0x22 (Other)\n Port Connector: #23\n Type: 0x20 (Other)\n Internal Designator: \"Ctrl0Port3\"\n Internal Connector: 0x22 (Other)\n External Designator: \"Docking Station eSATA\"\n External Connector: 0x22 (Other)\n Port Connector: #24\n Type: 0x20 (Other)\n Internal Designator: \"Ctrl0Port2\"\n Internal Connector: 0x22 (Other)\n External Designator: \"mSATA\"\n External Connector: 0x22 (Other)\n Port Connector: #25\n Type: 0x20 (Other)\n Internal Designator: \"Ctrl0Port1\"\n Internal Connector: 0x22 (Other)\n External Designator: \"Upgrade Bay\"\n External Connector: 0x22 (Other)\n System Slot: #27\n Designation: \"PCI SLOT1\"\n Type: 0x06 (PCI)\n Bus Width: 0x05 (32 bit)\n Status: 0x03 (Available)\n Length: 0x04 (Long)\n Slot ID: 1\n Characteristics: 0x0504 (3.3 V, PME#)\n On Board Devices: #17\n Video: \"32\"\n OEM Strings: #26\n FBYTE#3X47676J6S6Z6b7J7M7Q7W7saBaqawce.Q7;\n BUILDID#14WWR4AW602#SABE#DABE;\n ABS 70/71 79 7A 7B 7C\n CSM v01.5B\n HP_Mute_LED_0_0\n www.hp.com\n Language Info: #30\n Languages: en-US, da-DK, nl-NL, fi-FI, fr-FR, de-DE, it-IT, ja-JP, no-NO, pt-PT, es-ES, sv-SE, zh-CN, zh-TW\n Current: es-ES\n Physical Memory Array: #0\n Use: 0x03 (System memory)\n Location: 0x03 (Motherboard)\n Slots: 2\n Max. Size: 16 GB\n ECC: 0x03 (None)\n Memory Device: #1\n Location: \"Bottom-Slot 1(left)\"\n Bank: \"BANK 0\"\n Manufacturer: \"Micron\"\n Serial: \"18503423\"\n Asset Tag: \"9876543210\"\n Part Number: \"8KTF51264HZ-1G6N1\"\n Memory Array: #0\n Form Factor: 0x0d (SODIMM)\n Type: 0x18 (Other)\n Type Detail: 0x0080 (Synchronous)\n Data Width: 64 bits\n Size: 4 GB\n Speed: 1600 MHz\n Memory Device: #3\n Location: \"Bottom-Slot 2(right)\"\n Bank: \"BANK 2\"\n Manufacturer: \"Micron\"\n Serial: \"18651324\"\n Asset Tag: \"9876543210\"\n Part Number: \"8KTF51264HZ-1G6N1\"\n Memory Array: #0\n Form Factor: 0x0d (SODIMM)\n Type: 0x18 (Other)\n Type Detail: 0x0080 (Synchronous)\n Data Width: 64 bits\n Size: 4 GB\n Speed: 1600 MHz\n Memory Array Mapping: #5\n Memory Array: #0\n Partition Width: 2\n Start Address: 0x0000000000000000\n End Address: 0x0000000200000000\n Memory Device Mapping: #2\n Memory Device: #1\n Array Mapping: #5\n Row: 1\n Interleave Pos: 1\n Interleaved Depth: 1\n Start Address: 0x0000000000000000\n End Address: 0x0000000100000000\n Memory Device Mapping: #4\n Memory Device: #3\n Array Mapping: #5\n Row: 1\n Interleave Pos: 2\n Interleaved Depth: 1\n Start Address: 0x0000000100000000\n End Address: 0x0000000200000000\n Type 22 Record: #28\n Data 00: 16 1a 1c 00 01 02 00 00 03 02 aa 0f d0 39 04 ff\n Data 10: 1e d8 7a 45 05 0a 00 00 00 00\n String 1: \"Primary\"\n String 2: \"33-24\"\n String 3: \"VI04040XL\"\n String 4: \"1.1\"\n String 5: \"LION\"\n Type 32 Record: #16\n Data 00: 20 14 10 00 00 00 00 00 00 00 00 00 00 00 00 00\n Data 10: 00 00 00 00\n Type 41 Record: #18\n Data 00: 29 0b 12 00 01 83 01 00 00 00 10\n String 1: \"32\"\n Type 41 Record: #19\n Data 00: 29 0b 13 00 02 85 01 00 00 09 00\n String 1: \"WLAN\"\n String 2: \"WLAN\"\n Type 131 Record: #11\n Data 00: 83 40 0b 00 31 00 00 00 00 00 00 00 00 00 00 00\n Data 10: f8 00 43 9c 00 00 00 00 01 00 00 00 05 00 09 00\n Data 20: 10 07 1e 00 00 00 00 00 c8 00 ff ff 00 00 00 00\n Data 30: 04 0a 00 00 20 00 00 00 76 50 72 6f 00 00 00 00\n Type 137 Record: #29\n Data 00: 89 0c 1d 00 01 00 f0 03 f0 ff 00 00\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n\n02: None 00.0: 10107 System\n [Created at sys.63]\n Unique ID: rdCR.n_7QNeEnh23\n Hardware Class: system\n Model: \"System\"\n Formfactor: \"laptop\"\n Driver Info #0:\n Driver Status: thermal,fan are not active\n Driver Activation Cmd: \"modprobe thermal; modprobe fan\"\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n\n03: None 00.0: 10104 FPU\n [Created at misc.191]\n Unique ID: rdCR.EMpH5pjcahD\n Hardware Class: unknown\n Model: \"FPU\"\n I/O Ports: 0xf0-0xff (rw)\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n\n04: None 00.0: 0801 DMA controller (8237)\n [Created at misc.205]\n Unique ID: rdCR.f5u1ucRm+H9\n Hardware Class: unknown\n Model: \"DMA controller\"\n I/O Ports: 0x00-0xcf7 (rw)\n I/O Ports: 0xc0-0xdf (rw)\n I/O Ports: 0x80-0x8f (rw)\n DMA: 4\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n\n05: None 00.0: 0800 PIC (8259)\n [Created at misc.218]\n Unique ID: rdCR.8uRK7LxiIA2\n Hardware Class: unknown\n Model: \"PIC\"\n I/O Ports: 0x20-0x21 (rw)\n I/O Ports: 0xa0-0xa1 (rw)\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n\n06: None 00.0: 0900 Keyboard controller\n [Created at misc.250]\n Unique ID: rdCR.9N+EecqykME\n Hardware Class: unknown\n Model: \"Keyboard controller\"\n I/O Port: 0x60 (rw)\n I/O Port: 0x64 (rw)\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n\n07: None 00.0: 0701 Parallel controller (SPP)\n [Created at misc.261]\n Unique ID: YMnp.ecK7NLYWZ5D\n Hardware Class: unknown\n Model: \"Parallel controller\"\n Device File: /dev/lp0\n I/O Ports: 0x378-0x37a (rw)\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n\n08: None 00.0: 10400 PS/2 Controller\n [Created at misc.303]\n Unique ID: rdCR.DziBbWO85o5\n Hardware Class: unknown\n Model: \"PS/2 Controller\"\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n\n13: None 00.0: 10102 Main Memory\n [Created at memory.74]\n Unique ID: rdCR.CxwsZFjVASF\n Hardware Class: memory\n Model: \"Main Memory\"\n Memory Range: 0x00000000-0x1f22a6fff (rw)\n Memory Size: 8 GB\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n\n14: PCI 1c.3: 0604 PCI bridge (Normal decode)\n [Created at pci.378]\n Unique ID: Z7uZ.G9l8oDwzL7C\n SysFS ID: /devices/pci0000:00/0000:00:1c.3\n SysFS BusID: 0000:00:1c.3\n Hardware Class: bridge\n Model: \"Intel 8 Series PCI Express Root Port 4\"\n Vendor: pci 0x8086 \"Intel Corporation\"\n Device: pci 0x9c16 \"8 Series PCI Express Root Port 4\"\n SubVendor: pci 0x103c \"HP Company\"\n SubDevice: pci 0x2248 \n Revision: 0xe4\n Driver: \"pcieport\"\n IRQ: 43 (no events)\n Module Alias: \"pci:v00008086d00009C16sv0000103Csd00002248bc06sc04i00\"\n Driver Info #0:\n Driver Status: shpchp is active\n Driver Activation Cmd: \"modprobe shpchp\"\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n\n15: PCI 700.0: ff00 Unclassified device\n [Created at pci.378]\n Unique ID: aK5u.Fesr1XY7OVA\n Parent ID: qTvu.CVz8txR9FbA\n SysFS ID: /devices/pci0000:00/0000:00:1c.1/0000:07:00.0\n SysFS BusID: 0000:07:00.0\n Hardware Class: unknown\n Model: \"Realtek RTS5227 PCI Express Card Reader\"\n Vendor: pci 0x10ec \"Realtek Semiconductor Co., Ltd.\"\n Device: pci 0x5227 \"RTS5227 PCI Express Card Reader\"\n SubVendor: pci 0x103c \"HP Company\"\n SubDevice: pci 0x2248 \n Revision: 0x01\n Driver: \"rtsx_pci\"\n Driver Modules: \"rtsx_pci\"\n Memory Range: 0xc0600000-0xc0600fff (rw,non-prefetchable)\n IRQ: 44 (22 events)\n Module Alias: \"pci:v000010ECd00005227sv0000103Csd00002248bcFFsc00i00\"\n Driver Info #0:\n Driver Status: rtsx_pci is active\n Driver Activation Cmd: \"modprobe rtsx_pci\"\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n Attached to: #17 (PCI bridge)\n\n16: PCI 00.0: 0600 Host bridge\n [Created at pci.378]\n Unique ID: qLht.VantoDfnJG6\n SysFS ID: /devices/pci0000:00/0000:00:00.0\n SysFS BusID: 0000:00:00.0\n Hardware Class: bridge\n Model: \"Intel Haswell-ULT DRAM Controller\"\n Vendor: pci 0x8086 \"Intel Corporation\"\n Device: pci 0x0a04 \"Haswell-ULT DRAM Controller\"\n SubVendor: pci 0x103c \"HP Company\"\n SubDevice: pci 0x2248 \n Revision: 0x0b\n Driver: \"hsw_uncore\"\n Driver Modules: \"intel_uncore\"\n Module Alias: \"pci:v00008086d00000A04sv0000103Csd00002248bc06sc00i00\"\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n\n17: PCI 1c.1: 0604 PCI bridge (Normal decode)\n [Created at pci.378]\n Unique ID: qTvu.CVz8txR9FbA\n SysFS ID: /devices/pci0000:00/0000:00:1c.1\n SysFS BusID: 0000:00:1c.1\n Hardware Class: bridge\n Model: \"Intel 8 Series PCI Express Root Port 2\"\n Vendor: pci 0x8086 \"Intel Corporation\"\n Device: pci 0x9c12 \"8 Series PCI Express Root Port 2\"\n SubVendor: pci 0x103c \"HP Company\"\n SubDevice: pci 0x2248 \n Revision: 0xe4\n Driver: \"pcieport\"\n IRQ: 41 (no events)\n Module Alias: \"pci:v00008086d00009C12sv0000103Csd00002248bc06sc04i00\"\n Driver Info #0:\n Driver Status: shpchp is active\n Driver Activation Cmd: \"modprobe shpchp\"\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n\n18: PCI 03.0: 0403 Audio device\n [Created at pci.378]\n Unique ID: 3hqH.8ZYAv3K5mI6\n SysFS ID: /devices/pci0000:00/0000:00:03.0\n SysFS BusID: 0000:00:03.0\n Hardware Class: sound\n Model: \"Intel Haswell-ULT HD Audio Controller\"\n Vendor: pci 0x8086 \"Intel Corporation\"\n Device: pci 0x0a0c \"Haswell-ULT HD Audio Controller\"\n SubVendor: pci 0x103c \"HP Company\"\n SubDevice: pci 0x2248 \n Revision: 0x0b\n Driver: \"snd_hda_intel\"\n Driver Modules: \"snd_hda_intel\"\n Memory Range: 0xc0810000-0xc0813fff (rw,non-prefetchable)\n IRQ: 51 (67 events)\n Module Alias: \"pci:v00008086d00000A0Csv0000103Csd00002248bc04sc03i00\"\n Driver Info #0:\n Driver Status: snd_hda_intel is active\n Driver Activation Cmd: \"modprobe snd_hda_intel\"\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n\n19: PCI 1d.0: 0c03 USB Controller (EHCI)\n [Created at pci.378]\n Unique ID: 1GTX.5hyHIEn38h0\n SysFS ID: /devices/pci0000:00/0000:00:1d.0\n SysFS BusID: 0000:00:1d.0\n Hardware Class: usb controller\n Model: \"Intel 8 Series USB EHCI #1\"\n Vendor: pci 0x8086 \"Intel Corporation\"\n Device: pci 0x9c26 \"8 Series USB EHCI #1\"\n SubVendor: pci 0x103c \"HP Company\"\n SubDevice: pci 0x2248 \n Revision: 0x04\n Driver: \"ehci-pci\"\n Driver Modules: \"ehci_pci\"\n Memory Range: 0xc081d000-0xc081d3ff (rw,non-prefetchable)\n IRQ: 17 (33 events)\n Module Alias: \"pci:v00008086d00009C26sv0000103Csd00002248bc0Csc03i20\"\n Driver Info #0:\n Driver Status: ehci-hcd is active\n Driver Activation Cmd: \"modprobe ehci-hcd\"\n Driver Info #1:\n Driver Status: ehci_pci is active\n Driver Activation Cmd: \"modprobe ehci_pci\"\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n\n20: PCI 1f.6: 1180 Signal processing controller\n [Created at pci.378]\n Unique ID: ORVU.5gLxlqBxOw7\n SysFS ID: /devices/pci0000:00/0000:00:1f.6\n SysFS BusID: 0000:00:1f.6\n Hardware Class: unknown\n Model: \"Intel 8 Series Thermal\"\n Vendor: pci 0x8086 \"Intel Corporation\"\n Device: pci 0x9c24 \"8 Series Thermal\"\n SubVendor: pci 0x103c \"HP Company\"\n SubDevice: pci 0x2248 \n Revision: 0x04\n Driver: \"intel_pch_thermal\"\n Driver Modules: \"intel_pch_thermal\"\n Memory Range: 0xc081b000-0xc081bfff (rw,non-prefetchable)\n IRQ: 18 (no events)\n Module Alias: \"pci:v00008086d00009C24sv0000103Csd00002248bc11sc80i00\"\n Driver Info #0:\n Driver Status: intel_pch_thermal is active\n Driver Activation Cmd: \"modprobe intel_pch_thermal\"\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n\n21: PCI 02.0: 0300 VGA compatible controller (VGA)\n [Created at pci.378]\n Unique ID: _Znp.ka6dvf5kTa8\n SysFS ID: /devices/pci0000:00/0000:00:02.0\n SysFS BusID: 0000:00:02.0\n Hardware Class: graphics card\n Device Name: \"32\"\n Model: \"Intel Haswell-ULT Integrated Graphics Controller\"\n Vendor: pci 0x8086 \"Intel Corporation\"\n Device: pci 0x0a16 \"Haswell-ULT Integrated Graphics Controller\"\n SubVendor: pci 0x103c \"HP Company\"\n SubDevice: pci 0x2248 \n Revision: 0x0b\n Driver: \"i915\"\n Driver Modules: \"i915\"\n Memory Range: 0xc0000000-0xc03fffff (rw,non-prefetchable)\n Memory Range: 0xb0000000-0xbfffffff (ro,non-prefetchable)\n I/O Ports: 0x7000-0x703f (rw)\n Memory Range: 0x000c0000-0x000dffff (rw,non-prefetchable,disabled)\n IRQ: 47 (60 events)\n I/O Ports: 0x3c0-0x3df (rw)\n Module Alias: \"pci:v00008086d00000A16sv0000103Csd00002248bc03sc00i00\"\n Driver Info #0:\n Driver Status: i915 is active\n Driver Activation Cmd: \"modprobe i915\"\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n\n22: PCI 14.0: 0c03 USB Controller (XHCI)\n [Created at pci.378]\n Unique ID: MZfG.0F8dj3iQqa3\n SysFS ID: /devices/pci0000:00/0000:00:14.0\n SysFS BusID: 0000:00:14.0\n Hardware Class: usb controller\n Model: \"Intel 8 Series USB xHCI HC\"\n Vendor: pci 0x8086 \"Intel Corporation\"\n Device: pci 0x9c31 \"8 Series USB xHCI HC\"\n SubVendor: pci 0x103c \"HP Company\"\n SubDevice: pci 0x2248 \n Revision: 0x04\n Driver: \"xhci_hcd\"\n Driver Modules: \"xhci_pci\"\n Memory Range: 0xc0800000-0xc080ffff (rw,non-prefetchable)\n IRQ: 46 (7703 events)\n Module Alias: \"pci:v00008086d00009C31sv0000103Csd00002248bc0Csc03i30\"\n Driver Info #0:\n Driver Status: xhci_pci is active\n Driver Activation Cmd: \"modprobe xhci_pci\"\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n\n23: PCI 1c.2: 0604 PCI bridge (Normal decode)\n [Created at pci.378]\n Unique ID: hoOk.EKseq4hZIMB\n SysFS ID: /devices/pci0000:00/0000:00:1c.2\n SysFS BusID: 0000:00:1c.2\n Hardware Class: bridge\n Model: \"Intel 8 Series PCI Express Root Port 3\"\n Vendor: pci 0x8086 \"Intel Corporation\"\n Device: pci 0x9c14 \"8 Series PCI Express Root Port 3\"\n SubVendor: pci 0x103c \"HP Company\"\n SubDevice: pci 0x2248 \n Revision: 0xe4\n Driver: \"pcieport\"\n IRQ: 42 (no events)\n Module Alias: \"pci:v00008086d00009C14sv0000103Csd00002248bc06sc04i00\"\n Driver Info #0:\n Driver Status: shpchp is active\n Driver Activation Cmd: \"modprobe shpchp\"\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n\n24: PCI 1f.2: 0106 SATA controller (AHCI 1.0)\n [Created at pci.378]\n Unique ID: w7Y8.xfvW4auRA+2\n SysFS ID: /devices/pci0000:00/0000:00:1f.2\n SysFS BusID: 0000:00:1f.2\n Hardware Class: storage\n Model: \"Intel 8 Series SATA Controller 1 [AHCI mode]\"\n Vendor: pci 0x8086 \"Intel Corporation\"\n Device: pci 0x9c03 \"8 Series SATA Controller 1 [AHCI mode]\"\n SubVendor: pci 0x103c \"HP Company\"\n SubDevice: pci 0x2248 \n Revision: 0x04\n Driver: \"ahci\"\n Driver Modules: \"ahci\"\n I/O Ports: 0x7088-0x708f (rw)\n I/O Ports: 0x7094-0x7097 (rw)\n I/O Ports: 0x7080-0x7087 (rw)\n I/O Ports: 0x7090-0x7093 (rw)\n I/O Ports: 0x7060-0x707f (rw)\n Memory Range: 0xc081c000-0xc081c7ff (rw,non-prefetchable)\n IRQ: 48 (627 events)\n Module Alias: \"pci:v00008086d00009C03sv0000103Csd00002248bc01sc06i01\"\n Driver Info #0:\n Driver Status: ahci is active\n Driver Activation Cmd: \"modprobe ahci\"\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n\n25: PCI 1c.0: 0604 PCI bridge (Normal decode)\n [Created at pci.378]\n Unique ID: z8Q3.Ag4fvoClBq9\n SysFS ID: /devices/pci0000:00/0000:00:1c.0\n SysFS BusID: 0000:00:1c.0\n Hardware Class: bridge\n Model: \"Intel 8 Series PCI Express Root Port 1\"\n Vendor: pci 0x8086 \"Intel Corporation\"\n Device: pci 0x9c10 \"8 Series PCI Express Root Port 1\"\n SubVendor: pci 0x103c \"HP Company\"\n SubDevice: pci 0x2248 \n Revision: 0xe4\n Driver: \"pcieport\"\n IRQ: 40 (no events)\n Module Alias: \"pci:v00008086d00009C10sv0000103Csd00002248bc06sc04i00\"\n Driver Info #0:\n Driver Status: shpchp is active\n Driver Activation Cmd: \"modprobe shpchp\"\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n\n26: PCI 1f.0: 0601 ISA bridge\n [Created at pci.378]\n Unique ID: BUZT.QMXwKRhNq7E\n SysFS ID: /devices/pci0000:00/0000:00:1f.0\n SysFS BusID: 0000:00:1f.0\n Hardware Class: bridge\n Model: \"Intel 8 Series LPC Controller\"\n Vendor: pci 0x8086 \"Intel Corporation\"\n Device: pci 0x9c43 \"8 Series LPC Controller\"\n SubVendor: pci 0x103c \"HP Company\"\n SubDevice: pci 0x2248 \n Revision: 0x04\n Driver: \"lpc_ich\"\n Driver Modules: \"lpc_ich\"\n Module Alias: \"pci:v00008086d00009C43sv0000103Csd00002248bc06sc01i00\"\n Driver Info #0:\n Driver Status: lpc_ich is active\n Driver Activation Cmd: \"modprobe lpc_ich\"\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n\n27: PCI 900.0: 0282 WLAN controller\n [Created at pci.378]\n Unique ID: S6TQ.bhUnM+Ctai7\n Parent ID: Z7uZ.G9l8oDwzL7C\n SysFS ID: /devices/pci0000:00/0000:00:1c.3/0000:09:00.0\n SysFS BusID: 0000:09:00.0\n Hardware Class: network\n Device Name: \"WLAN\"\n Model: \"Realtek RTL8723BE PCIe Wireless Network Adapter\"\n Vendor: pci 0x10ec \"Realtek Semiconductor Co., Ltd.\"\n Device: pci 0xb723 \"RTL8723BE PCIe Wireless Network Adapter\"\n SubVendor: pci 0x103c \"HP Company\"\n SubDevice: pci 0x2231 \n Driver: \"rtl8723be\"\n Driver Modules: \"rtl8723be\"\n Device File: wlo1\n Features: WLAN\n I/O Ports: 0x3000-0x3fff (rw)\n Memory Range: 0xc0400000-0xc0403fff (rw,non-prefetchable)\n IRQ: 19 (no events)\n HW Address: 90:48:9a:af:6a:1b\n Permanent HW Address: 90:48:9a:af:6a:1b\n Link detected: no\n WLAN channels: 1 2 3 4 5 6 7 8 9 10 11 12 13\n WLAN frequencies: 2.412 2.417 2.422 2.427 2.432 2.437 2.442 2.447 2.452 2.457 2.462 2.467 2.472\n WLAN encryption modes: WEP40 WEP104 TKIP CCMP\n WLAN authentication modes: open sharedkey wpa-psk wpa-eap\n Module Alias: \"pci:v000010ECd0000B723sv0000103Csd00002231bc02sc80i00\"\n Driver Info #0:\n Driver Status: rtl8723be is active\n Driver Activation Cmd: \"modprobe rtl8723be\"\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n Attached to: #14 (PCI bridge)\n\n28: PCI 800.0: 0200 Ethernet controller\n [Created at pci.378]\n Unique ID: I+SI.fMnTBL88VH5\n Parent ID: hoOk.EKseq4hZIMB\n SysFS ID: /devices/pci0000:00/0000:00:1c.2/0000:08:00.0\n SysFS BusID: 0000:08:00.0\n Hardware Class: network\n Model: \"Realtek RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller\"\n Vendor: pci 0x10ec \"Realtek Semiconductor Co., Ltd.\"\n Device: pci 0x8168 \"RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller\"\n SubVendor: pci 0x103c \"HP Company\"\n SubDevice: pci 0x2248 \n Revision: 0x10\n Driver: \"r8169\"\n Driver Modules: \"r8169\"\n Device File: enp8s0\n I/O Ports: 0x4000-0x4fff (rw)\n Memory Range: 0xc0504000-0xc0504fff (rw,non-prefetchable)\n Memory Range: 0xc0500000-0xc0503fff (rw,non-prefetchable)\n IRQ: 45 (31 events)\n HW Address: 64:51:06:b0:0a:f6\n Permanent HW Address: 64:51:06:b0:0a:f6\n Link detected: yes\n Module Alias: \"pci:v000010ECd00008168sv0000103Csd00002248bc02sc00i00\"\n Driver Info #0:\n Driver Status: r8169 is active\n Driver Activation Cmd: \"modprobe r8169\"\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n Attached to: #23 (PCI bridge)\n\n29: PCI 16.0: 0780 Communication controller\n [Created at pci.378]\n Unique ID: WnlC.HxZGBaBBa_4\n SysFS ID: /devices/pci0000:00/0000:00:16.0\n SysFS BusID: 0000:00:16.0\n Hardware Class: unknown\n Model: \"Intel 8 Series HECI #0\"\n Vendor: pci 0x8086 \"Intel Corporation\"\n Device: pci 0x9c3a \"8 Series HECI #0\"\n SubVendor: pci 0x103c \"HP Company\"\n SubDevice: pci 0x2248 \n Revision: 0x04\n Driver: \"mei_me\"\n Driver Modules: \"mei_me\"\n Memory Range: 0xc0819000-0xc081901f (rw,non-prefetchable)\n IRQ: 49 (12 events)\n Module Alias: \"pci:v00008086d00009C3Asv0000103Csd00002248bc07sc80i00\"\n Driver Info #0:\n Driver Status: mei_me is active\n Driver Activation Cmd: \"modprobe mei_me\"\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n\n30: PCI 1b.0: 0403 Audio device\n [Created at pci.378]\n Unique ID: u1Nb.NJGI0ZQ5w_7\n SysFS ID: /devices/pci0000:00/0000:00:1b.0\n SysFS BusID: 0000:00:1b.0\n Hardware Class: sound\n Model: \"Intel 8 Series HD Audio Controller\"\n Vendor: pci 0x8086 \"Intel Corporation\"\n Device: pci 0x9c20 \"8 Series HD Audio Controller\"\n SubVendor: pci 0x103c \"HP Company\"\n SubDevice: pci 0x2248 \n Revision: 0x04\n Driver: \"snd_hda_intel\"\n Driver Modules: \"snd_hda_intel\"\n Memory Range: 0xc0814000-0xc0817fff (rw,non-prefetchable)\n IRQ: 50 (555 events)\n Module Alias: \"pci:v00008086d00009C20sv0000103Csd00002248bc04sc03i00\"\n Driver Info #0:\n Driver Status: snd_hda_intel is active\n Driver Activation Cmd: \"modprobe snd_hda_intel\"\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n\n31: None 00.0: 10002 LCD Monitor\n [Created at monitor.125]\n Unique ID: rdCR.9u9BxCnguo2\n Parent ID: _Znp.ka6dvf5kTa8\n Hardware Class: monitor\n Model: \"LCD Monitor\"\n Vendor: AUO \n Device: eisa 0x41ec \n Resolution: 1366x768@60Hz\n Size: 344x193 mm\n Year of Manufacture: 2013\n Week of Manufacture: 49\n Detailed Timings #0:\n Resolution: 1366x768\n Horizontal: 1366 1374 1384 1558 (+8 +18 +192) -hsync\n Vertical: 768 771 772 816 (+3 +4 +48) -vsync\n Frequencies: 50.87 MHz, 32.65 kHz, 40.01 Hz\n Year of Manufacture: 2013\n Week of Manufacture: 49\n Detailed Timings #1:\n Resolution: 1366x768\n Horizontal: 1366 1374 1384 1558 (+8 +18 +192) -hsync\n Vertical: 768 771 772 816 (+3 +4 +48) -vsync\n Frequencies: 76.30 MHz, 48.97 kHz, 60.02 Hz\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n Attached to: #21 (VGA compatible controller)\n\n32: ISA(PnP) 00.0: 0000 Unclassified device\n [Created at isapnp.142]\n Unique ID: z9pp.B+yZ9Ve8gC1\n SysFS ID: /devices/pnp0/00:00\n SysFS BusID: 00:00\n Hardware Class: unknown\n Model: \"Unclassified device\"\n SubVendor: PNP \"PnP\"\n SubDevice: eisa 0x0c02 \n Config Status: cfg=new, avail=yes, need=no, active=unknown\n\n33: ISA(PnP) 00.0: 0000 Unclassified device\n [Created at isapnp.142]\n Unique ID: E349.BLEg2XC4+V0\n SysFS ID: /devices/pnp0/00:05\n SysFS BusID: 00:05\n Hardware Class: unknown\n Model: \"Unclassified device\"\n SubVendor: IFX \n SubDevice: eisa 0x0102 \n Config Status: cfg=new, avail=yes, need=no, active=unknown\n\n34: ISA(PnP) 00.0: 0000 Unclassified device\n [Created at isapnp.142]\n Unique ID: KiZ0.ealKjhMMg54\n SysFS ID: /devices/pnp0/00:03\n SysFS BusID: 00:03\n Hardware Class: unknown\n Model: \"Unclassified device\"\n SubVendor: HPQ \n SubDevice: eisa 0x8001 \n Config Status: cfg=new, avail=yes, need=no, active=unknown\n\n35: ISA(PnP) 00.0: 0000 Unclassified device\n [Created at isapnp.142]\n Unique ID: QL3u.B+yZ9Ve8gC1\n SysFS ID: /devices/pnp0/00:01\n SysFS BusID: 00:01\n Hardware Class: unknown\n Model: \"Unclassified device\"\n SubVendor: PNP \"PnP\"\n SubDevice: eisa 0x0c02 \n Config Status: cfg=new, avail=yes, need=no, active=unknown\n\n36: ISA(PnP) 00.0: 0000 Unclassified device\n [Created at isapnp.142]\n Unique ID: ntp4.7mJa8EtFKk7\n SysFS ID: /devices/pnp0/00:04\n SysFS BusID: 00:04\n Hardware Class: unknown\n Model: \"Unclassified device\"\n SubVendor: SYN \n SubDevice: eisa 0x301e \n Config Status: cfg=new, avail=yes, need=no, active=unknown\n\n37: ISA(PnP) 00.0: 0000 Unclassified device\n [Created at isapnp.142]\n Unique ID: tWJy.WYwRElrJa93\n SysFS ID: /devices/pnp0/00:02\n SysFS BusID: 00:02\n Hardware Class: unknown\n Model: \"Unclassified device\"\n SubVendor: PNP \"PnP\"\n SubDevice: eisa 0x0b00 \n Config Status: cfg=new, avail=yes, need=no, active=unknown\n\n38: SCSI 400.0: 10600 Disk\n [Created at block.245]\n Unique ID: hSuP.sZwmS+_jqR5\n Parent ID: MZfG.0F8dj3iQqa3\n SysFS ID: /class/block/sdb\n SysFS BusID: 4:0:0:0\n SysFS Device Link: /devices/pci0000:00/0000:00:14.0/usb2/2-2/2-2:1.0/host4/target4:0:0/4:0:0:0\n Hardware Class: disk\n Model: \"KIOXIA TransMemory\"\n Vendor: usb 0x30de \"KIOXIA\"\n Device: usb 0x6544 \"TransMemory\"\n Serial ID: \"0\"\n Driver: \"usb-storage\", \"sd\"\n Driver Modules: \"usb_storage\", \"sd_mod\"\n Device File: /dev/sdb (/dev/sg2)\n Device Files: /dev/sdb, /dev/disk/by-id/usb-KIOXIA_TransMemory_0022CFF6B8A6C461331718B1-0:0, /dev/disk/by-path/pci-0000:00:14.0-usb-0:2:1.0-scsi-0:0:0:0\n Device Number: block 8:16-8:31 (char 21:2)\n BIOS id: 0x80\n Geometry (Logical): CHS 14782/64/32\n Size: 30274560 sectors a 512 bytes\n Capacity: 14 GB (15500574720 bytes)\n Speed: 480 Mbps\n Geometry (BIOS EDD): CHS 1884/255/63\n Size (BIOS EDD): 30274559 sectors\n Geometry (BIOS Legacy): CHS 1023/255/63\n Module Alias: \"usb:v30DEp6544d0001dc00dsc00dp00ic08isc06ip50in00\"\n Driver Info #0:\n Driver Status: uas is active\n Driver Activation Cmd: \"modprobe uas\"\n Driver Info #1:\n Driver Status: usb_storage is active\n Driver Activation Cmd: \"modprobe usb_storage\"\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n Attached to: #22 (USB Controller)\n\n39: None 00.0: 11300 Partition\n [Created at block.434]\n Unique ID: h4pj.SE1wIdpsiiC\n Parent ID: hSuP.sZwmS+_jqR5\n SysFS ID: /class/block/sdb/sdb1\n Hardware Class: partition\n Model: \"Partition\"\n Device File: /dev/sdb1\n Device Files: /dev/sdb1, /dev/disk/by-id/usb-KIOXIA_TransMemory_0022CFF6B8A6C461331718B1-0:0-part1, /dev/disk/by-label/ISOIMAGE, /dev/disk/by-partuuid/0ec92a03-01, /dev/disk/by-path/pci-0000:00:14.0-usb-0:2:1.0-scsi-0:0:0:0-part1, /dev/disk/by-uuid/CE9D-92E6\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n Attached to: #38 (Disk)\n\n40: SCSI 100.0: 10602 CD-ROM (DVD)\n [Created at block.249]\n Unique ID: KD9E.7u0Yp8+kBZD\n Parent ID: w7Y8.xfvW4auRA+2\n SysFS ID: /class/block/sr0\n SysFS BusID: 1:0:0:0\n SysFS Device Link: /devices/pci0000:00/0000:00:1f.2/ata2/host1/target1:0:0/1:0:0:0\n Hardware Class: cdrom\n Model: \"hp DVDRAM GU90N\"\n Vendor: \"hp\"\n Device: \"DVDRAM GU90N\"\n Revision: \"U900\"\n Driver: \"ahci\", \"sr\"\n Driver Modules: \"ahci\", \"sr_mod\"\n Device File: /dev/sr0 (/dev/sg1)\n Device Files: /dev/sr0, /dev/cdrom, /dev/cdrw, /dev/disk/by-id/ata-hp_DVDRAM_GU90N_M5GE5S40028, /dev/disk/by-id/wwn-0x5001480000000000, /dev/disk/by-path/pci-0000:00:1f.2-ata-2, /dev/dvd, /dev/dvdrw\n Device Number: block 11:0 (char 21:1)\n Features: CD-R, CD-RW, DVD, DVD-R, DVD-RW, DVD-R DL, DVD+R, DVD+RW, DVD+R DL, DVD-RAM, MRW, MRW-W\n Drive status: no medium\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n Attached to: #24 (SATA controller)\n Drive Speed: 24\n\n41: IDE 00.0: 10600 Disk\n [Created at block.245]\n Unique ID: 3OOL.g05FlevN1o1\n Parent ID: w7Y8.xfvW4auRA+2\n SysFS ID: /class/block/sda\n SysFS BusID: 0:0:0:0\n SysFS Device Link: /devices/pci0000:00/0000:00:1f.2/ata1/host0/target0:0:0/0:0:0:0\n Hardware Class: disk\n Model: \"ST500LT012-1DG14\"\n Device: \"ST500LT012-1DG14\"\n Revision: \"YAM1\"\n Serial ID: \"S3P9A81F\"\n Driver: \"ahci\", \"sd\"\n Driver Modules: \"ahci\", \"sd_mod\"\n Device File: /dev/sda\n Device Files: /dev/sda, /dev/disk/by-id/ata-ST500LT012-1DG142_S3P9A80F, /dev/disk/by-id/wwn-0x5000c50074f110eb, /dev/disk/by-path/pci-0000:00:1f.2-ata-1\n Device Number: block 8:0-8:15\n BIOS id: 0x81\n Geometry (Logical): CHS 60801/255/63\n Size: 976773168 sectors a 512 bytes\n Capacity: 465 GB (500107862016 bytes)\n Geometry (BIOS EDD): CHS 969021/16/63\n Size (BIOS EDD): 976773168 sectors\n Geometry (BIOS Legacy): CHS 1022/255/63\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n Attached to: #24 (SATA controller)\n\n42: None 00.0: 11300 Partition\n [Created at block.434]\n Unique ID: bdUI.SE1wIdpsiiC\n Parent ID: 3OOL.g05FlevN1o1\n SysFS ID: /class/block/sda/sda1\n Hardware Class: partition\n Model: \"Partition\"\n Device File: /dev/sda1\n Device Files: /dev/sda1, /dev/disk/by-id/ata-ST500LT012-1DG142_S3P9A80F-part1, /dev/disk/by-id/wwn-0x5000c50074f110eb-part1, /dev/disk/by-label/System\\x20Reserved, /dev/disk/by-partuuid/38d4fbef-01, /dev/disk/by-path/pci-0000:00:1f.2-ata-1-part1, /dev/disk/by-uuid/C6ACBD21ACBD0CC5\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n Attached to: #41 (Disk)\n\n43: None 00.0: 11300 Partition\n [Created at block.434]\n Unique ID: 2pkM.SE1wIdpsiiC\n Parent ID: 3OOL.g05FlevN1o1\n SysFS ID: /class/block/sda/sda2\n Hardware Class: partition\n Model: \"Partition\"\n Device File: /dev/sda2\n Device Files: /dev/sda2, /dev/disk/by-id/ata-ST500LT012-1DG142_S3P9A80F-part2, /dev/disk/by-id/wwn-0x5000c50074f110eb-part2, /dev/disk/by-label/WINDOWS7, /dev/disk/by-partuuid/38d4fbef-02, /dev/disk/by-path/pci-0000:00:1f.2-ata-1-part2, /dev/disk/by-uuid/E6F4BE1FF4BDF243\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n Attached to: #41 (Disk)\n\n44: None 00.0: 11300 Partition\n [Created at block.434]\n Unique ID: W__Q.SE1wIdpsiiC\n Parent ID: 3OOL.g05FlevN1o1\n SysFS ID: /class/block/sda/sda3\n Hardware Class: partition\n Model: \"Partition\"\n Device File: /dev/sda3\n Device Files: /dev/sda3, /dev/disk/by-id/ata-ST500LT012-1DG142_S3P9A80F-part3, /dev/disk/by-id/wwn-0x5000c50074f110eb-part3, /dev/disk/by-label/DATOS, /dev/disk/by-partuuid/38d4fbef-03, /dev/disk/by-path/pci-0000:00:1f.2-ata-1-part3, /dev/disk/by-uuid/EA64BF7D64BF4AD9\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n Attached to: #41 (Disk)\n\n45: USB 00.1: 0000 Unclassified device\n [Created at usb.122]\n Unique ID: 3QZi.KHC14zaenZB\n Parent ID: pBe4.2DFUsyrieMD\n SysFS ID: /devices/pci0000:00/0000:00:14.0/usb2/2-7/2-7:1.1\n SysFS BusID: 2-7:1.1\n Hardware Class: unknown\n Model: \"Lite-On HP HD Webcam\"\n Hotplug: USB\n Vendor: usb 0x04ca \"Lite-On Technology Corp.\"\n Device: usb 0x7032 \"HP HD Webcam\"\n Revision: \"0.04\"\n Serial ID: \"200901010001\"\n Driver: \"uvcvideo\"\n Driver Modules: \"uvcvideo\"\n Speed: 480 Mbps\n Module Alias: \"usb:v04CAp7032d0004dcEFdsc02dp01ic0Eisc02ip00in01\"\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n Attached to: #53 (Hub)\n\n46: USB 00.0: 11600 Fingerprint Reader\n [Created at usb.122]\n Unique ID: +rmv.oOUId9nesq9\n Parent ID: pBe4.2DFUsyrieMD\n SysFS ID: /devices/pci0000:00/0000:00:14.0/usb2/2-5/2-5:1.0\n SysFS BusID: 2-5:1.0\n Model: \"Validity Sensors VFS495 Fingerprint Reader\"\n Hotplug: USB\n Vendor: usb 0x138a \"Validity Sensors, Inc.\"\n Device: usb 0x003f \"VFS495 Fingerprint Reader\"\n Revision: \"1.04\"\n Serial ID: \"00b0685ccb93\"\n Speed: 12 Mbps\n Module Alias: \"usb:v138Ap003Fd0104dcFFdsc12dpFFicFFisc00ip00in00\"\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n Attached to: #53 (Hub)\n\n47: USB 00.0: 10a00 Hub\n [Created at usb.122]\n Unique ID: uIhY.xYNhIwdOaa6\n Parent ID: MZfG.0F8dj3iQqa3\n SysFS ID: /devices/pci0000:00/0000:00:14.0/usb3/3-0:1.0\n SysFS BusID: 3-0:1.0\n Hardware Class: hub\n Model: \"Linux Foundation 3.0 root hub\"\n Hotplug: USB\n Vendor: usb 0x1d6b \"Linux Foundation\"\n Device: usb 0x0003 \"3.0 root hub\"\n Revision: \"4.09\"\n Serial ID: \"0000:00:14.0\"\n Driver: \"hub\"\n Driver Modules: \"usbcore\"\n Module Alias: \"usb:v1D6Bp0003d0409dc09dsc00dp03ic09isc00ip00in00\"\n Driver Info #0:\n Driver Status: usbcore is active\n Driver Activation Cmd: \"modprobe usbcore\"\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n Attached to: #22 (USB Controller)\n\n48: USB 00.1: 11500 Bluetooth Device\n [Created at usb.122]\n Unique ID: 0vOp.dpnCeh_S1H9\n Parent ID: pBe4.2DFUsyrieMD\n SysFS ID: /devices/pci0000:00/0000:00:14.0/usb2/2-4/2-4:1.1\n SysFS BusID: 2-4:1.1\n Hardware Class: bluetooth\n Model: \"Realtek Bluetooth Radio\"\n Hotplug: USB\n Vendor: usb 0x0bda \"Realtek Semiconductor Corp.\"\n Device: usb 0xb001 \"Bluetooth Radio\"\n Revision: \"2.00\"\n Serial ID: \"00e04c000001\"\n Driver: \"btusb\"\n Driver Modules: \"btusb\"\n Speed: 12 Mbps\n Module Alias: \"usb:v0BDApB001d0200dcE0dsc01dp01icE0isc01ip01in01\"\n Driver Info #0:\n Driver Status: btusb is active\n Driver Activation Cmd: \"modprobe btusb\"\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n Attached to: #53 (Hub)\n\n50: USB 00.0: 10a00 Hub\n [Created at usb.122]\n Unique ID: k4bc.oLWCeziExdF\n Parent ID: 1GTX.5hyHIEn38h0\n SysFS ID: /devices/pci0000:00/0000:00:1d.0/usb1/1-0:1.0\n SysFS BusID: 1-0:1.0\n Hardware Class: hub\n Model: \"Linux Foundation 2.0 root hub\"\n Hotplug: USB\n Vendor: usb 0x1d6b \"Linux Foundation\"\n Device: usb 0x0002 \"2.0 root hub\"\n Revision: \"4.09\"\n Serial ID: \"0000:00:1d.0\"\n Driver: \"hub\"\n Driver Modules: \"usbcore\"\n Speed: 480 Mbps\n Module Alias: \"usb:v1D6Bp0002d0409dc09dsc00dp00ic09isc00ip00in00\"\n Driver Info #0:\n Driver Status: usbcore is active\n Driver Activation Cmd: \"modprobe usbcore\"\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n Attached to: #19 (USB Controller)\n\n52: USB 00.0: 10a00 Hub\n [Created at usb.122]\n Unique ID: ADDn.Wkj53szWOaA\n Parent ID: k4bc.oLWCeziExdF\n SysFS ID: /devices/pci0000:00/0000:00:1d.0/usb1/1-1/1-1:1.0\n SysFS BusID: 1-1:1.0\n Hardware Class: hub\n Model: \"Intel Hub\"\n Hotplug: USB\n Vendor: usb 0x8087 \"Intel Corp.\"\n Device: usb 0x8000 \n Revision: \"0.04\"\n Driver: \"hub\"\n Driver Modules: \"usbcore\"\n Speed: 480 Mbps\n Module Alias: \"usb:v8087p8000d0004dc09dsc00dp01ic09isc00ip00in00\"\n Driver Info #0:\n Driver Status: usbcore is active\n Driver Activation Cmd: \"modprobe usbcore\"\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n Attached to: #50 (Hub)\n\n53: USB 00.0: 10a00 Hub\n [Created at usb.122]\n Unique ID: pBe4.2DFUsyrieMD\n Parent ID: MZfG.0F8dj3iQqa3\n SysFS ID: /devices/pci0000:00/0000:00:14.0/usb2/2-0:1.0\n SysFS BusID: 2-0:1.0\n Hardware Class: hub\n Model: \"Linux Foundation 2.0 root hub\"\n Hotplug: USB\n Vendor: usb 0x1d6b \"Linux Foundation\"\n Device: usb 0x0002 \"2.0 root hub\"\n Revision: \"4.09\"\n Serial ID: \"0000:00:14.0\"\n Driver: \"hub\"\n Driver Modules: \"usbcore\"\n Speed: 480 Mbps\n Module Alias: \"usb:v1D6Bp0002d0409dc09dsc00dp01ic09isc00ip00in00\"\n Driver Info #0:\n Driver Status: usbcore is active\n Driver Activation Cmd: \"modprobe usbcore\"\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n Attached to: #22 (USB Controller)\n\n55: PS/2 00.0: 10800 Keyboard\n [Created at input.226]\n Unique ID: nLyy.+49ps10DtUF\n Hardware Class: keyboard\n Model: \"AT Translated Set 2 keyboard\"\n Vendor: 0x0001 \n Device: 0x0001 \"AT Translated Set 2 keyboard\"\n Compatible to: int 0x0211 0x0001\n Device File: /dev/input/event0\n Device Number: char 13:64\n Driver Info #0:\n XkbRules: xfree86\n XkbModel: pc104\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n\n56: PS/2 00.0: 10500 PS/2 Mouse\n [Created at input.249]\n Unique ID: AH6Q.ZHI3OT7LsxA\n Hardware Class: mouse\n Model: \"SynPS/2 Synaptics TouchPad\"\n Vendor: 0x0002 \n Device: 0x0007 \"SynPS/2 Synaptics TouchPad\"\n Compatible to: int 0x0210 0x0002\n Device File: /dev/input/mice (/dev/input/mouse0)\n Device Files: /dev/input/mice, /dev/input/mouse0, /dev/input/event5\n Device Number: char 13:63 (char 13:32)\n Driver Info #0:\n Buttons: 2\n Wheels: 0\n XFree86 Protocol: explorerps/2\n GPM Protocol: exps2\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n\n57: None 00.0: 10d00 Joystick\n [Created at input.312]\n Unique ID: 2oHd.lCw1nasASu4\n Hardware Class: joystick\n Model: \"ST LIS3LV02DL Accelerometer\"\n Device: \"ST LIS3LV02DL Accelerometer\"\n Device File: /dev/input/event14 (/dev/input/js0)\n Device Files: /dev/input/event14, /dev/input/js0, /dev/input/by-path/platform-lis3lv02d-event\n Device Number: char 13:78\n Buttons: 0\n Axes: 3\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n\n58: None 00.0: 10103 CPU\n [Created at cpu.460]\n Unique ID: rdCR.j8NaKXDZtZ6\n Hardware Class: cpu\n Arch: Intel\n Vendor: \"GenuineIntel\"\n Model: 6.69.1 \"Intel(R) Core(TM) i5-4210U CPU @ 1.70GHz\"\n Features: fpu,vme,de,pse,tsc,msr,pae,mce,cx8,apic,sep,mtrr,pge,mca,cmov,pat,pse36,clflush,dts,acpi,mmx,fxsr,sse,sse2,ss,ht,tm,pbe,nx,pdpe1gb,rdtscp,lm,constant_tsc,arch_perfmon,pebs,bts,xtopology,nonstop_tsc,aperfmperf,pni,pclmulqdq,dtes64,monitor,ds_cpl,vmx,est,tm2,ssse3,sdbg,fma,cx16,xtpr,pdcm,sse4_1,sse4_2,movbe,popcnt,tsc_deadline_timer,aes,xsave,avx,f16c,rdrand,lahf_lm,abm,epb,ssbd,ibrs,ibpb,stibp,tpr_shadow,vnmi,flexpriority,ept,vpid,fsgsbase,tsc_adjust,bmi1,avx2,smep,bmi2,erms,invpcid,xsaveopt,dtherm,ida,arat,pln,pts,md_clear,flush_l1d\n Clock: 2700 MHz\n BogoMips: 4788.85\n Cache: 3072 kb\n Units/Processor: 16\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n\n59: None 01.0: 10103 CPU\n [Created at cpu.460]\n Unique ID: wkFv.j8NaKXDZtZ6\n Hardware Class: cpu\n Arch: Intel\n Vendor: \"GenuineIntel\"\n Model: 6.69.1 \"Intel(R) Core(TM) i5-4210U CPU @ 1.70GHz\"\n Features: fpu,vme,de,pse,tsc,msr,pae,mce,cx8,apic,sep,mtrr,pge,mca,cmov,pat,pse36,clflush,dts,acpi,mmx,fxsr,sse,sse2,ss,ht,tm,pbe,nx,pdpe1gb,rdtscp,lm,constant_tsc,arch_perfmon,pebs,bts,xtopology,nonstop_tsc,aperfmperf,pni,pclmulqdq,dtes64,monitor,ds_cpl,vmx,est,tm2,ssse3,sdbg,fma,cx16,xtpr,pdcm,sse4_1,sse4_2,movbe,popcnt,tsc_deadline_timer,aes,xsave,avx,f16c,rdrand,lahf_lm,abm,epb,ssbd,ibrs,ibpb,stibp,tpr_shadow,vnmi,flexpriority,ept,vpid,fsgsbase,tsc_adjust,bmi1,avx2,smep,bmi2,erms,invpcid,xsaveopt,dtherm,ida,arat,pln,pts,md_clear,flush_l1d\n Clock: 2519 MHz\n BogoMips: 4788.85\n Cache: 3072 kb\n Units/Processor: 16\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n\n60: None 02.0: 10103 CPU\n [Created at cpu.460]\n Unique ID: +rIN.j8NaKXDZtZ6\n Hardware Class: cpu\n Arch: Intel\n Vendor: \"GenuineIntel\"\n Model: 6.69.1 \"Intel(R) Core(TM) i5-4210U CPU @ 1.70GHz\"\n Features: fpu,vme,de,pse,tsc,msr,pae,mce,cx8,apic,sep,mtrr,pge,mca,cmov,pat,pse36,clflush,dts,acpi,mmx,fxsr,sse,sse2,ss,ht,tm,pbe,nx,pdpe1gb,rdtscp,lm,constant_tsc,arch_perfmon,pebs,bts,xtopology,nonstop_tsc,aperfmperf,pni,pclmulqdq,dtes64,monitor,ds_cpl,vmx,est,tm2,ssse3,sdbg,fma,cx16,xtpr,pdcm,sse4_1,sse4_2,movbe,popcnt,tsc_deadline_timer,aes,xsave,avx,f16c,rdrand,lahf_lm,abm,epb,ssbd,ibrs,ibpb,stibp,tpr_shadow,vnmi,flexpriority,ept,vpid,fsgsbase,tsc_adjust,bmi1,avx2,smep,bmi2,erms,invpcid,xsaveopt,dtherm,ida,arat,pln,pts,md_clear,flush_l1d\n Clock: 2275 MHz\n BogoMips: 4788.85\n Cache: 3072 kb\n Units/Processor: 16\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n\n61: None 03.0: 10103 CPU\n [Created at cpu.460]\n Unique ID: 4zLr.j8NaKXDZtZ6\n Hardware Class: cpu\n Arch: Intel\n Vendor: \"GenuineIntel\"\n Model: 6.69.1 \"Intel(R) Core(TM) i5-4210U CPU @ 1.70GHz\"\n Features: fpu,vme,de,pse,tsc,msr,pae,mce,cx8,apic,sep,mtrr,pge,mca,cmov,pat,pse36,clflush,dts,acpi,mmx,fxsr,sse,sse2,ss,ht,tm,pbe,nx,pdpe1gb,rdtscp,lm,constant_tsc,arch_perfmon,pebs,bts,xtopology,nonstop_tsc,aperfmperf,pni,pclmulqdq,dtes64,monitor,ds_cpl,vmx,est,tm2,ssse3,sdbg,fma,cx16,xtpr,pdcm,sse4_1,sse4_2,movbe,popcnt,tsc_deadline_timer,aes,xsave,avx,f16c,rdrand,lahf_lm,abm,epb,ssbd,ibrs,ibpb,stibp,tpr_shadow,vnmi,flexpriority,ept,vpid,fsgsbase,tsc_adjust,bmi1,avx2,smep,bmi2,erms,invpcid,xsaveopt,dtherm,ida,arat,pln,pts,md_clear,flush_l1d\n Clock: 1839 MHz\n BogoMips: 4788.85\n Cache: 3072 kb\n Units/Processor: 16\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n\n62: None 00.0: 10700 Loopback\n [Created at net.126]\n Unique ID: ZsBS.GQNx7L4uPNA\n SysFS ID: /class/net/lo\n Hardware Class: network interface\n Model: \"Loopback network interface\"\n Device File: lo\n Link detected: yes\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n\n63: None 00.0: 10701 Ethernet\n [Created at net.126]\n Unique ID: zejA.ndpeucax6V1\n Parent ID: I+SI.fMnTBL88VH5\n SysFS ID: /class/net/enp8s0\n SysFS Device Link: /devices/pci0000:00/0000:00:1c.2/0000:08:00.0\n Hardware Class: network interface\n Model: \"Ethernet network interface\"\n Driver: \"r8169\"\n Driver Modules: \"r8169\"\n Device File: enp8s0\n HW Address: 64:51:06:b0:0a:f6\n Permanent HW Address: 64:51:06:b0:0a:f6\n Link detected: yes\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n Attached to: #28 (Ethernet controller)\n\n64: None 01.0: 10701 Ethernet\n [Created at net.126]\n Unique ID: VnCh.ndpeucax6V1\n Parent ID: S6TQ.bhUnM+Ctai7\n SysFS ID: /class/net/wlo1\n SysFS Device Link: /devices/pci0000:00/0000:00:1c.3/0000:09:00.0\n Hardware Class: network interface\n Model: \"Ethernet network interface\"\n Driver: \"rtl8723be\"\n Driver Modules: \"rtl8723be\"\n Device File: wlo1\n HW Address: 90:48:9a:af:6a:1b\n Permanent HW Address: 90:48:9a:af:6a:1b\n Link detected: no\n Config Status: cfg=new, avail=yes, need=no, active=unknown\n Attached to: #27 (WLAN controller)\n", "lshw": {"capabilities": {"dmi-2.7": "DMI version 2.7", "smbios-2.7": "SMBIOS version 2.7"}, "children": [{"children": [{"capabilities": {"acpi": "ACPI", "biosbootspecification": "BIOS boot specification", "bootselect": "Selectable boot path", "cdboot": "Booting from CD-ROM/DVD", "edd": "Enhanced Disk Drive extensions", "int14serial": "INT14 serial line control", "int17printer": "INT17 printer control", "int5printscreen": "Print Screen key", "int9keyboard": "i8042 keyboard controller", "netboot": "Function-key initiated network service boot", "pci": "PCI bus", "pcmcia": "PCMCIA/PCCard", "shadowing": "BIOS shadowing", "smartbattery": "Smart battery", "uefi": "UEFI specification is supported", "upgrade": "BIOS EEPROM can be upgraded", "usb": "USB legacy emulation"}, "capacity": 6225920, "claimed": true, "class": "memory", "date": "06/17/2014", "description": "BIOS", "id": "firmware", "physid": "c", "size": 65536, "units": "bytes", "vendor": "HP", "version": "M74 Ver. 01.02"}, {"businfo": "cpu@0", "capabilities": {"abm": true, "acpi": "thermal control (ACPI)", "aes": true, "aperfmperf": true, "apic": "on-chip advanced programmable interrupt controller (APIC)", "arat": true, "arch_perfmon": true, "avx": true, "avx2": true, "bmi1": true, "bmi2": true, "bts": true, "clflush": true, "cmov": "conditional move instruction", "constant_tsc": true, "cpufreq": "CPU Frequency scaling", "cx16": true, "cx8": "compare and exchange 8-byte", "de": "debugging extensions", "ds_cpl": true, "dtes64": true, "dtherm": true, "dts": "debug trace and EMON store MSRs", "epb": true, "ept": true, "erms": true, "est": true, "f16c": true, "flexpriority": true, "flush_l1d": true, "fma": true, "fpu": "mathematical co-processor", "fpu_exception": "FPU exceptions reporting", "fsgsbase": true, "fxsr": "fast floating point save/restore", "ht": "HyperThreading", "ibpb": true, "ibrs": true, "ida": true, "invpcid": true, "lahf_lm": true, "mca": "machine check architecture", "mce": "machine check exceptions", "md_clear": true, "mmx": "multimedia extensions (MMX)", "monitor": true, "movbe": true, "msr": "model-specific registers", "mtrr": "memory type range registers", "nonstop_tsc": true, "nx": "no-execute bit (NX)", "pae": "4GB+ memory addressing (Physical Address Extension)", "pat": "page attribute table", "pbe": "pending break event", "pclmulqdq": true, "pdcm": true, "pdpe1gb": true, "pebs": true, "pge": "page global enable", "pln": true, "pni": true, "popcnt": true, "pse": "page size extensions", "pse36": "36-bit page size extensions", "pts": true, "rdrand": true, "rdtscp": true, "sdbg": true, "sep": "fast system calls", "smep": true, "ss": "self-snoop", "ssbd": true, "sse": "streaming SIMD extensions (SSE)", "sse2": "streaming SIMD extensions (SSE2)", "sse4_1": true, "sse4_2": true, "ssse3": true, "stibp": true, "tm": "thermal interrupt and status", "tm2": true, "tpr_shadow": true, "tsc": "time stamp counter", "tsc_adjust": true, "tsc_deadline_timer": true, "vme": "virtual mode extensions", "vmx": "CPU virtualization (Vanderpool)", "vnmi": true, "vpid": true, "wp": true, "x86-64": "64bits extensions (x86-64)", "xsave": true, "xsaveopt": true, "xtopology": true, "xtpr": true}, "capacity": 2700000000, "children": [{"capabilities": {"asynchronous": "Asynchronous", "instruction": "Instruction cache", "internal": "Internal", "write-back": "Write-back"}, "capacity": 32768, "claimed": true, "class": "memory", "configuration": {"level": "1"}, "description": "L1 cache", "handle": "DMI:0008", "id": "cache:0", "physid": "8", "size": 32768, "slot": "L1 Cache", "units": "bytes"}, {"capabilities": {"asynchronous": "Asynchronous", "internal": "Internal", "unified": "Unified cache", "write-back": "Write-back"}, "capacity": 262144, "claimed": true, "class": "memory", "configuration": {"level": "2"}, "description": "L2 cache", "handle": "DMI:0009", "id": "cache:1", "physid": "9", "size": 262144, "slot": "L2 Cache", "units": "bytes"}, {"capabilities": {"asynchronous": "Asynchronous", "internal": "Internal", "unified": "Unified cache", "write-back": "Write-back"}, "capacity": 3145728, "claimed": true, "class": "memory", "configuration": {"level": "3"}, "description": "L3 cache", "handle": "DMI:000A", "id": "cache:2", "physid": "a", "size": 3145728, "slot": "L3 Cache", "units": "bytes"}, {"capabilities": {"logical": "Logical CPU"}, "claimed": true, "class": "processor", "description": "Logical CPU", "handle": "CPU:2.0", "id": "logicalcpu:0", "physid": "2.1", "width": 64}, {"capabilities": {"logical": "Logical CPU"}, "claimed": true, "class": "processor", "description": "Logical CPU", "handle": "CPU:2.1", "id": "logicalcpu:1", "physid": "2.2", "width": 64}, {"capabilities": {"logical": "Logical CPU"}, "claimed": true, "class": "processor", "description": "Logical CPU", "handle": "CPU:2.2", "id": "logicalcpu:2", "physid": "2.3", "width": 64}, {"capabilities": {"logical": "Logical CPU"}, "claimed": true, "class": "processor", "description": "Logical CPU", "handle": "CPU:2.3", "id": "logicalcpu:3", "physid": "2.4", "width": 64}, {"capabilities": {"logical": "Logical CPU"}, "claimed": true, "class": "processor", "description": "Logical CPU", "handle": "CPU:2.4", "id": "logicalcpu:4", "physid": "2.5", "width": 64}, {"capabilities": {"logical": "Logical CPU"}, "claimed": true, "class": "processor", "description": "Logical CPU", "handle": "CPU:2.5", "id": "logicalcpu:5", "physid": "2.6", "width": 64}, {"capabilities": {"logical": "Logical CPU"}, "claimed": true, "class": "processor", "description": "Logical CPU", "handle": "CPU:2.6", "id": "logicalcpu:6", "physid": "2.7", "width": 64}, {"capabilities": {"logical": "Logical CPU"}, "claimed": true, "class": "processor", "description": "Logical CPU", "handle": "CPU:2.7", "id": "logicalcpu:7", "physid": "2.8", "width": 64}, {"capabilities": {"logical": "Logical CPU"}, "claimed": true, "class": "processor", "description": "Logical CPU", "handle": "CPU:2.8", "id": "logicalcpu:8", "physid": "2.9", "width": 64}, {"capabilities": {"logical": "Logical CPU"}, "claimed": true, "class": "processor", "description": "Logical CPU", "handle": "CPU:2.9", "id": "logicalcpu:9", "physid": "2.a", "width": 64}, {"capabilities": {"logical": "Logical CPU"}, "claimed": true, "class": "processor", "description": "Logical CPU", "handle": "CPU:2.10", "id": "logicalcpu:10", "physid": "2.b", "width": 64}, {"capabilities": {"logical": "Logical CPU"}, "claimed": true, "class": "processor", "description": "Logical CPU", "handle": "CPU:2.11", "id": "logicalcpu:11", "physid": "2.c", "width": 64}, {"capabilities": {"logical": "Logical CPU"}, "claimed": true, "class": "processor", "description": "Logical CPU", "handle": "CPU:2.12", "id": "logicalcpu:12", "physid": "2.d", "width": 64}, {"capabilities": {"logical": "Logical CPU"}, "claimed": true, "class": "processor", "description": "Logical CPU", "handle": "CPU:2.13", "id": "logicalcpu:13", "physid": "2.e", "width": 64}, {"capabilities": {"logical": "Logical CPU"}, "claimed": true, "class": "processor", "description": "Logical CPU", "handle": "CPU:2.14", "id": "logicalcpu:14", "physid": "2.f", "width": 64}, {"capabilities": {"logical": "Logical CPU"}, "claimed": true, "class": "processor", "description": "Logical CPU", "handle": "CPU:2.15", "id": "logicalcpu:15", "physid": "2.10", "width": 64}], "claimed": true, "class": "processor", "clock": 100000000, "configuration": {"cores": "2", "enabledcores": "2", "id": "2", "threads": "4"}, "description": "CPU", "handle": "DMI:0007", "id": "cpu", "physid": "7", "product": "Intel(R) Core(TM) i5-4210U CPU @ 1.70GHz", "serial": "0004-0651-0000-0000-0000-0000", "size": 1494140000, "slot": "U3E1", "units": "Hz", "vendor": "Intel Corp.", "version": "6.5.1", "width": 64}, {"capabilities": {"asynchronous": "Asynchronous", "data": "Data cache", "internal": "Internal", "write-back": "Write-back"}, "capacity": 32768, "claimed": true, "class": "memory", "configuration": {"level": "1"}, "description": "L1 cache", "handle": "DMI:0006", "id": "cache", "physid": "6", "size": 32768, "slot": "L1 Cache", "units": "bytes"}, {"children": [{"claimed": true, "class": "memory", "clock": 1600000000, "description": "SODIMM DDR3 Synchronous 1600 MHz (0.6 ns)", "handle": "DMI:0001", "id": "bank:0", "physid": "0", "product": "8KTF51264HZ-1G6N1", "serial": "18503423", "size": 4294967296, "slot": "Bottom-Slot 1(left)", "units": "bytes", "vendor": "Micron", "width": 64}, {"claimed": true, "class": "memory", "clock": 1600000000, "description": "SODIMM DDR3 Synchronous 1600 MHz (0.6 ns)", "handle": "DMI:0003", "id": "bank:1", "physid": "1", "product": "8KTF51264HZ-1G6N1", "serial": "18651324", "size": 4294967296, "slot": "Bottom-Slot 2(right)", "units": "bytes", "vendor": "Micron", "width": 64}], "claimed": true, "class": "memory", "description": "System Memory", "handle": "DMI:0000", "id": "memory", "physid": "0", "size": 8589934592, "slot": "System board or motherboard", "units": "bytes"}, {"businfo": "pci@0000:00:00.0", "children": [{"businfo": "pci@0000:00:02.0", "capabilities": {"bus_master": "bus mastering", "cap_list": "PCI capabilities listing", "msi": "Message Signalled Interrupts", "pm": "Power Management", "rom": "extension ROM", "vga_controller": true}, "claimed": true, "class": "display", "clock": 33000000, "configuration": {"driver": "i915", "latency": "0"}, "description": "VGA compatible controller", "handle": "PCI:0000:00:02.0", "id": "display", "physid": "2", "product": "Haswell-ULT Integrated Graphics Controller", "vendor": "Intel Corporation", "version": "0b", "width": 64}, {"businfo": "pci@0000:00:03.0", "capabilities": {"bus_master": "bus mastering", "cap_list": "PCI capabilities listing", "msi": "Message Signalled Interrupts", "pciexpress": "PCI Express", "pm": "Power Management"}, "claimed": true, "class": "multimedia", "clock": 33000000, "configuration": {"driver": "snd_hda_intel", "latency": "0"}, "description": "Audio device", "handle": "PCI:0000:00:03.0", "id": "multimedia:0", "physid": "3", "product": "Haswell-ULT HD Audio Controller", "vendor": "Intel Corporation", "version": "0b", "width": 64}, {"businfo": "pci@0000:00:14.0", "capabilities": {"bus_master": "bus mastering", "cap_list": "PCI capabilities listing", "msi": "Message Signalled Interrupts", "pm": "Power Management", "xhci": true}, "children": [{"businfo": "usb@2", "capabilities": {"usb-2.00": "USB 2.0"}, "children": [{"businfo": "usb@2:2", "capabilities": {"emulated": "Emulated device", "scsi": "SCSI", "usb-2.00": "USB 2.0"}, "children": [{"businfo": "scsi@4:0.0.0", "capabilities": {"removable": "support is removable"}, "children": [{"capabilities": {"partitioned": "Partitioned disk", "partitioned:dos": "MS-DOS partition table"}, "children": [{"capabilities": {"bootable": "Bootable partition (active)", "fat": "Windows FAT", "initialized": "initialized volume", "primary": "Primary partition"}, "capacity": 15499526144, "claimed": true, "class": "volume", "configuration": {"FATs": "2", "filesystem": "fat", "label": "ISOIMAGE", "mount.fstype": "vfat", "mount.options": "ro,noatime,fmask=0022,dmask=0022,codepage=437,iocharset=ascii,shortname=mixed,utf8,errors=remount-ro", "state": "mounted"}, "description": "Windows FAT volume", "dev": "8:17", "id": "volume", "logicalname": ["/dev/sdb1", "/lib/live/mount/medium"], "physid": "1", "serial": "ce9d-92e6", "size": 15496820736, "vendor": "SYSLINUX", "version": "FAT32"}], "claimed": true, "class": "disk", "configuration": {"signature": "0ec92a03"}, "dev": "8:16", "id": "medium", "logicalname": "/dev/sdb", "physid": "0", "size": 15500574720, "units": "bytes"}], "claimed": true, "class": "disk", "configuration": {"ansiversion": "6", "logicalsectorsize": "512", "sectorsize": "512"}, "description": "SCSI Disk", "dev": "8:16", "handle": "SCSI:04:00:00:00", "id": "disk", "logicalname": "/dev/sdb", "physid": "0.0.0", "product": "TransMemory", "serial": "0", "size": 15500574720, "units": "bytes", "vendor": "KIOXIA"}], "claimed": true, "class": "storage", "configuration": {"driver": "usb-storage", "maxpower": "300mA", "speed": "480Mbit/s"}, "description": "Mass storage device", "handle": "USB:2:2", "id": "usb:0", "logicalname": "scsi4", "physid": "2", "product": "TransMemory", "serial": "0022CFF6B8A6C461331718B1", "vendor": "KIOXIA", "version": "0.01"}, {"businfo": "usb@2:4", "capabilities": {"bluetooth": "Bluetooth wireless radio", "usb-2.10": true}, "claimed": true, "class": "communication", "configuration": {"driver": "btusb", "maxpower": "500mA", "speed": "12Mbit/s"}, "description": "Bluetooth wireless interface", "handle": "USB:2:3", "id": "usb:1", "physid": "4", "product": "Bluetooth Radio", "serial": "00e04c000001", "vendor": "Realtek", "version": "2.00"}, {"businfo": "usb@2:5", "capabilities": {"usb-1.10": "USB 1.1"}, "class": "generic", "configuration": {"maxpower": "100mA", "speed": "12Mbit/s"}, "description": "Generic USB device", "handle": "USB:2:4", "id": "usb:2", "physid": "5", "product": "VFS495 Fingerprint Reader", "serial": "00b0685ccb93", "vendor": "Validity Sensors, Inc.", "version": "1.04"}, {"businfo": "usb@2:7", "capabilities": {"usb-2.00": "USB 2.0"}, "claimed": true, "class": "multimedia", "configuration": {"driver": "uvcvideo", "maxpower": "500mA", "speed": "480Mbit/s"}, "description": "Video", "handle": "USB:2:5", "id": "usb:3", "physid": "7", "product": "HP HD Webcam", "serial": "200901010001", "vendor": "DDZLE019I6OJ8L", "version": "0.04"}], "claimed": true, "class": "bus", "configuration": {"driver": "hub", "slots": "9", "speed": "480Mbit/s"}, "handle": "USB:2:1", "id": "usbhost:0", "logicalname": "usb2", "physid": "0", "product": "xHCI Host Controller", "vendor": "Linux 4.9.0-14-686-pae xhci-hcd", "version": "4.09"}, {"businfo": "usb@3", "capabilities": {"usb-3.00": true}, "claimed": true, "class": "bus", "configuration": {"driver": "hub", "slots": "4", "speed": "5000Mbit/s"}, "handle": "USB:3:1", "id": "usbhost:1", "logicalname": "usb3", "physid": "1", "product": "xHCI Host Controller", "vendor": "Linux 4.9.0-14-686-pae xhci-hcd", "version": "4.09"}], "claimed": true, "class": "bus", "clock": 33000000, "configuration": {"driver": "xhci_hcd", "latency": "0"}, "description": "USB controller", "handle": "PCI:0000:00:14.0", "id": "usb:0", "physid": "14", "product": "8 Series USB xHCI HC", "vendor": "Intel Corporation", "version": "04", "width": 64}, {"businfo": "pci@0000:00:16.0", "capabilities": {"bus_master": "bus mastering", "cap_list": "PCI capabilities listing", "msi": "Message Signalled Interrupts", "pm": "Power Management"}, "claimed": true, "class": "communication", "clock": 33000000, "configuration": {"driver": "mei_me", "latency": "0"}, "description": "Communication controller", "handle": "PCI:0000:00:16.0", "id": "communication", "physid": "16", "product": "8 Series HECI #0", "vendor": "Intel Corporation", "version": "04", "width": 64}, {"businfo": "pci@0000:00:1b.0", "capabilities": {"bus_master": "bus mastering", "cap_list": "PCI capabilities listing", "msi": "Message Signalled Interrupts", "pm": "Power Management"}, "claimed": true, "class": "multimedia", "clock": 33000000, "configuration": {"driver": "snd_hda_intel", "latency": "64"}, "description": "Audio device", "handle": "PCI:0000:00:1b.0", "id": "multimedia:1", "physid": "1b", "product": "8 Series HD Audio Controller", "vendor": "Intel Corporation", "version": "04", "width": 64}, {"businfo": "pci@0000:00:1c.0", "capabilities": {"bus_master": "bus mastering", "cap_list": "PCI capabilities listing", "msi": "Message Signalled Interrupts", "normal_decode": true, "pci": true, "pciexpress": "PCI Express", "pm": "Power Management"}, "claimed": true, "class": "bridge", "clock": 33000000, "configuration": {"driver": "pcieport"}, "description": "PCI bridge", "handle": "PCIBUS:0000:01", "id": "pci:0", "physid": "1c", "product": "8 Series PCI Express Root Port 1", "vendor": "Intel Corporation", "version": "e4", "width": 32}, {"businfo": "pci@0000:00:1c.1", "capabilities": {"bus_master": "bus mastering", "cap_list": "PCI capabilities listing", "msi": "Message Signalled Interrupts", "normal_decode": true, "pci": true, "pciexpress": "PCI Express", "pm": "Power Management"}, "children": [{"businfo": "pci@0000:07:00.0", "capabilities": {"bus_master": "bus mastering", "cap_list": "PCI capabilities listing", "msi": "Message Signalled Interrupts", "pciexpress": "PCI Express", "pm": "Power Management"}, "claimed": true, "class": "generic", "clock": 33000000, "configuration": {"driver": "rtsx_pci", "latency": "0"}, "description": "Unassigned class", "handle": "PCI:0000:07:00.0", "id": "generic", "physid": "0", "product": "RTS5227 PCI Express Card Reader", "vendor": "Realtek Semiconductor Co., Ltd.", "version": "01", "width": 32}], "claimed": true, "class": "bridge", "clock": 33000000, "configuration": {"driver": "pcieport"}, "description": "PCI bridge", "handle": "PCIBUS:0000:07", "id": "pci:1", "physid": "1c.1", "product": "8 Series PCI Express Root Port 2", "vendor": "Intel Corporation", "version": "e4", "width": 32}, {"businfo": "pci@0000:00:1c.2", "capabilities": {"bus_master": "bus mastering", "cap_list": "PCI capabilities listing", "msi": "Message Signalled Interrupts", "normal_decode": true, "pci": true, "pciexpress": "PCI Express", "pm": "Power Management"}, "children": [{"businfo": "pci@0000:08:00.0", "capabilities": {"1000bt": "1Gbit/s", "1000bt-fd": "1Gbit/s (full duplex)", "100bt": "100Mbit/s", "100bt-fd": "100Mbit/s (full duplex)", "10bt": "10Mbit/s", "10bt-fd": "10Mbit/s (full duplex)", "autonegotiation": "Auto-negotiation", "bus_master": "bus mastering", "cap_list": "PCI capabilities listing", "ethernet": true, "mii": "Media Independent Interface", "msi": "Message Signalled Interrupts", "msix": "MSI-X", "pciexpress": "PCI Express", "physical": "Physical interface", "pm": "Power Management", "tp": "twisted pair", "vpd": "Vital Product Data"}, "capacity": 1000000000, "claimed": true, "class": "network", "clock": 33000000, "configuration": {"autonegotiation": "on", "broadcast": "yes", "driver": "r8169", "driverversion": "2.3LK-NAPI", "duplex": "full", "firmware": "rtl8168g-3_0.0.1 04/23/13", "ip": "192.168.108.192", "latency": "0", "link": "yes", "multicast": "yes", "port": "MII", "speed": "1Gbit/s"}, "description": "Ethernet interface", "handle": "PCI:0000:08:00.0", "id": "network", "logicalname": "enp8s0", "physid": "0", "product": "RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller", "serial": "64:51:06:b0:0a:f6", "size": 1000000000, "units": "bit/s", "vendor": "Realtek Semiconductor Co., Ltd.", "version": "10", "width": 64}], "claimed": true, "class": "bridge", "clock": 33000000, "configuration": {"driver": "pcieport"}, "description": "PCI bridge", "handle": "PCIBUS:0000:08", "id": "pci:2", "physid": "1c.2", "product": "8 Series PCI Express Root Port 3", "vendor": "Intel Corporation", "version": "e4", "width": 32}, {"businfo": "pci@0000:00:1c.3", "capabilities": {"bus_master": "bus mastering", "cap_list": "PCI capabilities listing", "msi": "Message Signalled Interrupts", "normal_decode": true, "pci": true, "pciexpress": "PCI Express", "pm": "Power Management"}, "children": [{"businfo": "pci@0000:09:00.0", "capabilities": {"bus_master": "bus mastering", "cap_list": "PCI capabilities listing", "ethernet": true, "msi": "Message Signalled Interrupts", "pciexpress": "PCI Express", "physical": "Physical interface", "pm": "Power Management", "wireless": "Wireless-LAN"}, "claimed": true, "class": "network", "clock": 33000000, "configuration": {"broadcast": "yes", "driver": "rtl8723be", "driverversion": "4.9.0-14-686-pae", "firmware": "N/A", "latency": "0", "link": "no", "multicast": "yes", "wireless": "IEEE 802.11"}, "description": "Wireless interface", "disabled": true, "handle": "PCI:0000:09:00.0", "id": "network", "logicalname": "wlo1", "physid": "0", "product": "RTL8723BE PCIe Wireless Network Adapter", "serial": "90:48:9a:af:6a:1b", "vendor": "Realtek Semiconductor Co., Ltd.", "version": "00", "width": 64}], "claimed": true, "class": "bridge", "clock": 33000000, "configuration": {"driver": "pcieport"}, "description": "PCI bridge", "handle": "PCIBUS:0000:09", "id": "pci:3", "physid": "1c.3", "product": "8 Series PCI Express Root Port 4", "vendor": "Intel Corporation", "version": "e4", "width": 32}, {"businfo": "pci@0000:00:1d.0", "capabilities": {"bus_master": "bus mastering", "cap_list": "PCI capabilities listing", "debug": "Debug port", "ehci": "Enhanced Host Controller Interface (USB2)", "pm": "Power Management"}, "children": [{"businfo": "usb@1", "capabilities": {"usb-2.00": "USB 2.0"}, "children": [{"businfo": "usb@1:1", "capabilities": {"usb-2.00": "USB 2.0"}, "claimed": true, "class": "bus", "configuration": {"driver": "hub", "slots": "8", "speed": "480Mbit/s"}, "description": "USB hub", "handle": "USB:1:2", "id": "usb", "physid": "1", "vendor": "Intel Corp.", "version": "0.04"}], "claimed": true, "class": "bus", "configuration": {"driver": "hub", "slots": "2", "speed": "480Mbit/s"}, "handle": "USB:1:1", "id": "usbhost", "logicalname": "usb1", "physid": "1", "product": "EHCI Host Controller", "vendor": "Linux 4.9.0-14-686-pae ehci_hcd", "version": "4.09"}], "claimed": true, "class": "bus", "clock": 33000000, "configuration": {"driver": "ehci-pci", "latency": "0"}, "description": "USB controller", "handle": "PCI:0000:00:1d.0", "id": "usb:1", "physid": "1d", "product": "8 Series USB EHCI #1", "vendor": "Intel Corporation", "version": "04", "width": 32}, {"businfo": "pci@0000:00:1f.0", "capabilities": {"bus_master": "bus mastering", "cap_list": "PCI capabilities listing", "isa": true}, "claimed": true, "class": "bridge", "clock": 33000000, "configuration": {"driver": "lpc_ich", "latency": "0"}, "description": "ISA bridge", "handle": "PCI:0000:00:1f.0", "id": "isa", "physid": "1f", "product": "8 Series LPC Controller", "vendor": "Intel Corporation", "version": "04", "width": 32}, {"businfo": "pci@0000:00:1f.2", "capabilities": {"ahci_1.0": true, "bus_master": "bus mastering", "cap_list": "PCI capabilities listing", "msi": "Message Signalled Interrupts", "pm": "Power Management", "storage": true}, "claimed": true, "class": "storage", "clock": 66000000, "configuration": {"driver": "ahci", "latency": "0"}, "description": "SATA controller", "handle": "PCI:0000:00:1f.2", "id": "storage", "physid": "1f.2", "product": "8 Series SATA Controller 1 [AHCI mode]", "vendor": "Intel Corporation", "version": "04", "width": 32}, {"businfo": "pci@0000:00:1f.6", "capabilities": {"bus_master": "bus mastering", "cap_list": "PCI capabilities listing", "msi": "Message Signalled Interrupts", "pm": "Power Management"}, "claimed": true, "class": "generic", "clock": 33000000, "configuration": {"driver": "intel_pch_thermal", "latency": "0"}, "description": "Signal processing controller", "handle": "PCI:0000:00:1f.6", "id": "generic", "physid": "1f.6", "product": "8 Series Thermal", "vendor": "Intel Corporation", "version": "04", "width": 64}], "claimed": true, "class": "bridge", "clock": 33000000, "configuration": {"driver": "hsw_uncore"}, "description": "Host bridge", "handle": "PCIBUS:0000:00", "id": "pci", "physid": "100", "product": "Haswell-ULT DRAM Controller", "vendor": "Intel Corporation", "version": "0b", "width": 32}, {"capabilities": {"emulated": "Emulated device"}, "children": [{"businfo": "scsi@0:0.0.0", "capabilities": {"partitioned": "Partitioned disk", "partitioned:dos": "MS-DOS partition table"}, "children": [{"businfo": "scsi@0:0.0.0,1", "capabilities": {"bootable": "Bootable partition (active)", "initialized": "initialized volume", "ntfs": "Windows NTFS", "primary": "Primary partition"}, "capacity": 523239424, "claimed": true, "class": "volume", "configuration": {"clustersize": "4096", "created": "2019-07-03 18:32:58", "filesystem": "ntfs", "label": "System Reserved", "modified_by_chkdsk": "true", "mounted_on_nt4": "true", "resize_log_file": "true", "state": "dirty", "upgrade_on_mount": "true"}, "description": "Windows NTFS volume", "dev": "8:1", "id": "volume:0", "logicalname": "/dev/sda1", "physid": "1", "serial": "acbd-0cc5", "size": 522190336, "version": "3.1"}, {"businfo": "scsi@0:0.0.0,2", "capabilities": {"initialized": "initialized volume", "ntfs": "Windows NTFS", "primary": "Primary partition"}, "capacity": 125829120000, "claimed": true, "class": "volume", "configuration": {"clustersize": "4096", "created": "2019-07-03 18:32:59", "filesystem": "ntfs", "label": "WINDOWS7", "state": "clean"}, "description": "Windows NTFS volume", "dev": "8:2", "id": "volume:1", "logicalname": "/dev/sda2", "physid": "2", "serial": "408d7f13-28ec-aa48-9055-88d2c55f3d42", "size": 125808147968, "version": "3.1"}, {"businfo": "scsi@0:0.0.0,3", "capabilities": {"initialized": "initialized volume", "ntfs": "Windows NTFS", "primary": "Primary partition"}, "capacity": 373753380864, "claimed": true, "class": "volume", "configuration": {"clustersize": "4096", "created": "2019-07-03 18:33:01", "filesystem": "ntfs", "label": "DATOS", "modified_by_chkdsk": "true", "mounted_on_nt4": "true", "resize_log_file": "true", "state": "dirty", "upgrade_on_mount": "true"}, "description": "Windows NTFS volume", "dev": "8:3", "id": "volume:2", "logicalname": "/dev/sda3", "physid": "3", "serial": "fe81de5e-cd06-2348-aa95-4b2e6930ce4d", "size": 373732408832, "version": "3.1"}], "claimed": true, "class": "disk", "configuration": {"ansiversion": "5", "logicalsectorsize": "512", "sectorsize": "4096", "signature": "38d4fbef"}, "description": "ATA Disk", "dev": "8:0", "handle": "SCSI:00:00:00:00", "id": "disk", "logicalname": "/dev/sda", "physid": "0.0.0", "product": "ST500LT012-1DG14", "serial": "S3P9A81F", "size": 500107862016, "units": "bytes", "vendor": "Seagate", "version": "YAM1"}], "claimed": true, "class": "storage", "id": "scsi:0", "logicalname": "scsi0", "physid": "1"}, {"capabilities": {"emulated": "Emulated device"}, "children": [{"businfo": "scsi@1:0.0.0", "capabilities": {"audio": "Audio CD playback", "cd-r": "CD-R burning", "cd-rw": "CD-RW burning", "dvd": "DVD playback", "dvd-r": "DVD-R burning", "dvd-ram": "DVD-RAM burning", "removable": "support is removable"}, "claimed": true, "class": "disk", "configuration": {"ansiversion": "5", "status": "nodisc"}, "description": "DVD-RAM writer", "dev": "11:0", "handle": "SCSI:01:00:00:00", "id": "cdrom", "logicalname": ["/dev/cdrom", "/dev/cdrw", "/dev/dvd", "/dev/dvdrw", "/dev/sr0"], "physid": "0.0.0", "product": "DVDRAM GU90N", "vendor": "hp", "version": "U900"}], "claimed": true, "class": "storage", "id": "scsi:1", "logicalname": "scsi1", "physid": "2"}], "claimed": true, "class": "bus", "description": "Motherboard", "handle": "DMI:000E", "id": "core", "physid": "0", "product": "2248", "serial": "PELSAF2WV6XGL6", "vendor": "HP", "version": "KBC Version 67.21"}, {"capacity": 40100, "claimed": true, "class": "power", "configuration": {"voltage": "14.8V"}, "handle": "DMI:001C", "id": "battery", "physid": "1", "product": "VI04040XL", "slot": "Primary", "units": "mWh", "vendor": "33-24"}], "claimed": true, "class": "system", "configuration": {"boot": "normal", "chassis": "notebook", "family": "103C_5336AN G=N L=BUS B=HP S=PRO", "sku": "F5R46AV", "uuid": "7F25D367-F6D0-E311-A300-2286570180FF"}, "description": "Notebook", "handle": "DMI:000D", "id": "debian", "product": "HP ProBook 450 G8 (F5R46AV)", "serial": "CND4286Z55", "vendor": "HP", "version": "A3009DD10303", "width": 32}}, "device": {"actions": [{"elapsed": 1, "rate": 0.8448, "type": "BenchmarkRamSysbench"}], "chassis": "Netbook", "manufacturer": "HP", "model": "HP ProBook 450 G8", "serialNumber": "CND4286Z55", "sku": "F5R46AV", "type": "Laptop", "version": "A3009DD10303"}, "elapsed": 13745, "endTime": "2022-01-13T10:24:04.179939+00:00", "software": "Workbench", "type": "Snapshot", "uuid": "547e521f-d8b0-4208-b3c3-a399fe178bcc", "version": "11.0b11"} diff --git a/example/dpp-snapshots/snapshot01.json b/example/dpp-snapshots/snapshot01.json new file mode 100644 index 0000000..5697413 --- /dev/null +++ b/example/dpp-snapshots/snapshot01.json @@ -0,0 +1 @@ +{"closed": true, "components": [{"actions": [], "manufacturer": "Intel Corporation", "model": "82579LM Gigabit Network Connection", "serialNumber": "00:11:11:11:11:00", "speed": 1000.0, "type": "NetworkAdapter", "variant": "04", "wireless": false}, {"actions": [], "manufacturer": "Intel Corporation", "model": "7 Series/C216 Chipset Family High Definition Audio Controller", "serialNumber": null, "type": "SoundCard"}, {"actions": [], "format": "DIMM", "interface": "DDR3", "manufacturer": "Micron", "model": "16KTF51264AZ", "serialNumber": "AAAAAAAA", "size": 4096.0, "speed": 1600.0, "type": "RamModule"}, {"actions": [{"endTime": "2022-10-11T13:45:31.239555+00:00", "severity": "Info", "startTime": "2021-10-11T09:45:19.623967+00:00", "steps": [{"endTime": "2021-10-11T11:05:28.090897+00:00", "severity": "Info", "startTime": "2021-10-11T09:45:19.624163+00:00", "type": "StepZero"}, {"endTime": "2021-10-11T13:45:31.239402+00:00", "severity": "Info", "startTime": "2021-10-11T11:05:28.091255+00:00", "type": "StepRandom"}], "type": "EraseSectors"}, {"assessment": true, "commandTimeout": 30, "currentPendingSectorCount": 0, "elapsed": 60, "length": "Short", "lifetime": 18720, "offlineUncorrectable": 0, "powerCycleCount": 2147, "reallocatedSectorCount": 0, "reportedUncorrectableErrors": 0, "severity": "Info", "status": "Completed without error", "type": "TestDataStorage"}, {"elapsed": 11, "readSpeed": 119.0, "type": "BenchmarkDataStorage", "writeSpeed": 32.7}], "interface": "ATA", "manufacturer": "Seagate", "model": "ST3500418AS", "serialNumber": "AAAAAAAA", "size": 500000.0, "type": "HardDrive", "variant": "CC46"}, {"actions": [{"elapsed": 0, "rate": 25540.36, "type": "BenchmarkProcessor"}, {"elapsed": 8, "rate": 7.6939, "type": "BenchmarkProcessorSysbench"}], "address": 64, "brand": "Core i5", "cores": 4, "generation": 3, "manufacturer": "Intel Corp.", "model": "Intel Core i5-3470 CPU @ 3.20GHz", "serialNumber": null, "speed": 1.6242180000000002, "threads": 4, "type": "Processor"}, {"actions": [], "manufacturer": "Intel Corporation", "memory": null, "model": "Xeon E3-1200 v2/3rd Gen Core processor Graphics Controller", "serialNumber": null, "type": "GraphicCard"}, {"actions": [], "biosDate": "2012-08-07T00:00:00", "firewire": 0, "manufacturer": "LENOVO", "model": "MAHOBAY", "pcmcia": 0, "ramMaxSize": 32, "ramSlots": 4, "serial": 1, "serialNumber": null, "slots": 4, "type": "Motherboard", "usb": 3, "version": "9SKT39AUS"}], "device": {"actions": [{"elapsed": 1, "rate": 0.6507, "type": "BenchmarkRamSysbench"}], "chassis": "Tower", "manufacturer": "LENOVO", "model": "3227A2G", "serialNumber": "AAAAAAAA", "sku": "LENOVO_MT_3227", "type": "Desktop", "version": "ThinkCentre M92P"}, "elapsed": 187302510, "endTime": "2016-11-03T17:17:01.116554+00:00", "software": "Workbench", "type": "Snapshot", "uuid": "ae913de1-e639-476a-ad9b-78eabbe4628b", "version": "11.0b11"} \ No newline at end of file diff --git a/example/dpp-snapshots/snapshot02.json b/example/dpp-snapshots/snapshot02.json new file mode 100644 index 0000000..7abbbbb --- /dev/null +++ b/example/dpp-snapshots/snapshot02.json @@ -0,0 +1 @@ +{"closed": true, "components": [{"actions": [], "manufacturer": "Intel Corporation", "model": "82579LM Gigabit Network Connection", "serialNumber": "00:11:11:11:11:00", "speed": 1000.0, "type": "NetworkAdapter", "variant": "04", "wireless": false}, {"actions": [], "manufacturer": "Intel Corporation", "model": "7 Series/C216 Chipset Family High Definition Audio Controller", "serialNumber": null, "type": "SoundCard"}, {"actions": [], "format": "DIMM", "interface": "DDR3", "manufacturer": "Micron", "model": "16KTF51264AZ", "serialNumber": "AAAAAAAA", "size": 4096.0, "speed": 1600.0, "type": "RamModule"}, {"actions": [{"endTime": "2022-10-11T13:45:31.239555+00:00", "severity": "Info", "startTime": "2021-10-11T09:45:19.623967+00:00", "steps": [{"endTime": "2021-10-11T11:05:28.090897+00:00", "severity": "Info", "startTime": "2021-10-11T09:45:19.624163+00:00", "type": "StepZero"}, {"endTime": "2021-10-11T13:45:31.239402+00:00", "severity": "Info", "startTime": "2021-10-11T11:05:28.091255+00:00", "type": "StepRandom"}], "type": "EraseSectors"}, {"assessment": true, "commandTimeout": 30, "currentPendingSectorCount": 0, "elapsed": 60, "length": "Short", "lifetime": 18720, "offlineUncorrectable": 0, "powerCycleCount": 2147, "reallocatedSectorCount": 0, "reportedUncorrectableErrors": 0, "severity": "Info", "status": "Completed without error", "type": "TestDataStorage"}, {"elapsed": 11, "readSpeed": 119.0, "type": "BenchmarkDataStorage", "writeSpeed": 32.7}], "interface": "ATA", "manufacturer": "Seagate", "model": "ST3500418AS", "serialNumber": "AAAAAAAA", "size": 500000.0, "type": "HardDrive", "variant": "CC46"}, {"actions": [{"elapsed": 0, "rate": 25540.36, "type": "BenchmarkProcessor"}, {"elapsed": 8, "rate": 7.6939, "type": "BenchmarkProcessorSysbench"}], "address": 64, "brand": "Core i5", "cores": 4, "generation": 3, "manufacturer": "Intel Corp.", "model": "Intel Core i5-3470 CPU @ 3.20GHz", "serialNumber": null, "speed": 1.6242180000000002, "threads": 4, "type": "Processor"}, {"actions": [], "manufacturer": "Intel Corporation", "memory": null, "model": "Xeon E3-1200 v2/3rd Gen Core processor Graphics Controller", "serialNumber": null, "type": "GraphicCard"}, {"actions": [], "biosDate": "2012-08-07T00:00:00", "firewire": 0, "manufacturer": "LENOVO", "model": "MAHOBAY", "pcmcia": 0, "ramMaxSize": 32, "ramSlots": 4, "serial": 1, "serialNumber": null, "slots": 4, "type": "Motherboard", "usb": 3, "version": "9SKT39AUS"}], "device": {"actions": [{"elapsed": 1, "rate": 0.6507, "type": "BenchmarkRamSysbench"}], "chassis": "Tower", "manufacturer": "LENOVO", "model": "3227A2G", "serialNumber": "AAAAAAAAD", "sku": "LENOVO_MT_3227", "type": "Desktop", "version": "ThinkCentre M92P"}, "elapsed": 187302510, "endTime": "2016-11-03T17:17:01.116554+00:00", "software": "Workbench", "type": "Snapshot", "uuid": "ae913de1-e639-476a-ad9b-78eabbe4625b", "version": "11.0b11"} -- 2.30.2 From 771b216a311c76a0abacc4a4112c494bbdbce30b Mon Sep 17 00:00:00 2001 From: pedro Date: Wed, 27 Nov 2024 01:10:34 +0100 Subject: [PATCH 28/86] dh docker: cleanup other snapshots when dpp/dlt --- docker/devicehub-django.entrypoint.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docker/devicehub-django.entrypoint.sh b/docker/devicehub-django.entrypoint.sh index 889c76d..b6ea0ed 100644 --- a/docker/devicehub-django.entrypoint.sh +++ b/docker/devicehub-django.entrypoint.sh @@ -130,7 +130,8 @@ config_phase() { # 12, 13, 14 config_dpp_part1 - # copy dlt/dpp snapshots + # cleanup other spnapshots and copy dlt/dpp snapshots + rm example/example/snapshots/* cp example/dpp-snapshots/*.json example/snapshots/ fi -- 2.30.2 From d0e46aa0b06bee7f8077bdc3100c1ef455690110 Mon Sep 17 00:00:00 2001 From: pedro Date: Wed, 27 Nov 2024 01:12:58 +0100 Subject: [PATCH 29/86] logger: bugfix function name changed for highlight --- utils/logger.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/utils/logger.py b/utils/logger.py index 4d7e5ce..3461c58 100644 --- a/utils/logger.py +++ b/utils/logger.py @@ -38,5 +38,5 @@ class CustomFormatter(logging.Formatter): return super().format(record) - def highlight_args(self, message, args, color): + def highlight_message(self, message, args, color): return f"{color}{message}{RESET}" -- 2.30.2 From 355ed085616668905d5eb717f2862a1dc37eb93b Mon Sep 17 00:00:00 2001 From: pedro Date: Wed, 27 Nov 2024 01:21:52 +0100 Subject: [PATCH 30/86] bugfix logger --- utils/logger.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/utils/logger.py b/utils/logger.py index 3461c58..886d731 100644 --- a/utils/logger.py +++ b/utils/logger.py @@ -38,5 +38,5 @@ class CustomFormatter(logging.Formatter): return super().format(record) - def highlight_message(self, message, args, color): + def highlight_message(self, message, color): return f"{color}{message}{RESET}" -- 2.30.2 From f43aaf6ac69987cc0ec8943f098e7a5854df7966 Mon Sep 17 00:00:00 2001 From: pedro Date: Wed, 27 Nov 2024 01:25:15 +0100 Subject: [PATCH 31/86] dh docker: create institution before first dlt usr --- docker/devicehub-django.entrypoint.sh | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/docker/devicehub-django.entrypoint.sh b/docker/devicehub-django.entrypoint.sh index b6ea0ed..3ab4c09 100644 --- a/docker/devicehub-django.entrypoint.sh +++ b/docker/devicehub-django.entrypoint.sh @@ -126,6 +126,11 @@ config_phase() { init_flagfile='/already_configured' if [ ! -f "${init_flagfile}" ]; then + # non DL user (only for the inventory) + ./manage.py add_institution "${INIT_ORG}" + # TODO: one error on add_user, and you don't add user anymore + ./manage.py add_user "${INIT_ORG}" "${INIT_USER}" "${INIT_PASSWD}" "${ADMIN}" "${PREDEFINED_TOKEN}" + if [ "${DPP_MODULE}" = 'y' ]; then # 12, 13, 14 config_dpp_part1 @@ -135,11 +140,6 @@ config_phase() { cp example/dpp-snapshots/*.json example/snapshots/ fi - # non DL user (only for the inventory) - ./manage.py add_institution "${INIT_ORG}" - # TODO: one error on add_user, and you don't add user anymore - ./manage.py add_user "${INIT_ORG}" "${INIT_USER}" "${INIT_PASSWD}" "${ADMIN}" "${PREDEFINED_TOKEN}" - # # 15. Add inventory snapshots for user "${INIT_USER}". if [ "${DEMO:-}" = 'true' ]; then /usr/bin/time ./manage.py up_snapshots "${INIT_USER}" -- 2.30.2 From 850678fbe4c484341bc3dfc3678dc79ad5cf2c88 Mon Sep 17 00:00:00 2001 From: pedro Date: Wed, 27 Nov 2024 01:28:19 +0100 Subject: [PATCH 32/86] dh docker: bugfix wrong path in rm prev snapshots --- docker/devicehub-django.entrypoint.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker/devicehub-django.entrypoint.sh b/docker/devicehub-django.entrypoint.sh index 3ab4c09..df77b83 100644 --- a/docker/devicehub-django.entrypoint.sh +++ b/docker/devicehub-django.entrypoint.sh @@ -136,7 +136,7 @@ config_phase() { config_dpp_part1 # cleanup other spnapshots and copy dlt/dpp snapshots - rm example/example/snapshots/* + rm example/snapshots/* cp example/dpp-snapshots/*.json example/snapshots/ fi -- 2.30.2 From 6a3a2b3a2b0bbfca2e27e81b35a308407c501375 Mon Sep 17 00:00:00 2001 From: pedro Date: Wed, 27 Nov 2024 01:31:15 +0100 Subject: [PATCH 33/86] dh dockerfile: add time debpkg --- docker/devicehub-django.Dockerfile | 1 + 1 file changed, 1 insertion(+) diff --git a/docker/devicehub-django.Dockerfile b/docker/devicehub-django.Dockerfile index 9640d49..a2f81d1 100644 --- a/docker/devicehub-django.Dockerfile +++ b/docker/devicehub-django.Dockerfile @@ -7,6 +7,7 @@ RUN apt update && \ git \ sqlite3 \ jq \ + time \ && rm -rf /var/lib/apt/lists/* WORKDIR /opt/devicehub-django -- 2.30.2 From ac0d36ea6f7a74a50ab836b97d761d0c56daf586 Mon Sep 17 00:00:00 2001 From: pedro Date: Wed, 27 Nov 2024 01:38:24 +0100 Subject: [PATCH 34/86] dh docker: bugfix wrong usage of up_snapshots --- docker/devicehub-django.entrypoint.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker/devicehub-django.entrypoint.sh b/docker/devicehub-django.entrypoint.sh index df77b83..da7f4a2 100644 --- a/docker/devicehub-django.entrypoint.sh +++ b/docker/devicehub-django.entrypoint.sh @@ -142,7 +142,7 @@ config_phase() { # # 15. Add inventory snapshots for user "${INIT_USER}". if [ "${DEMO:-}" = 'true' ]; then - /usr/bin/time ./manage.py up_snapshots "${INIT_USER}" + /usr/bin/time ./manage.py up_snapshots example/snapshots/ "${INIT_USER}" fi # remain next command as the last operation for this if conditional -- 2.30.2 From b4efcfb17116aa266d0af7cf7fee15df7488af83 Mon Sep 17 00:00:00 2001 From: pedro Date: Wed, 27 Nov 2024 09:28:39 +0100 Subject: [PATCH 35/86] dh-django dockerfile: use uid 1000 (app) at least temporarily --- docker/devicehub-django.Dockerfile | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/docker/devicehub-django.Dockerfile b/docker/devicehub-django.Dockerfile index a2f81d1..3e0a591 100644 --- a/docker/devicehub-django.Dockerfile +++ b/docker/devicehub-django.Dockerfile @@ -36,4 +36,10 @@ RUN pip install -i https://test.pypi.org/simple/ ereuseapitest==0.0.14 ENV PYTHONPATH="${PYTHONPATH}:/usr/lib/python3/dist-packages" COPY docker/devicehub-django.entrypoint.sh / + +# TODO I don't like this, but the whole ereuse-dpp works with user 1000 because of the volume mapping +# thanks https://stackoverflow.com/questions/70520205/docker-non-root-user-best-practices-for-python-images +RUN adduser --system --no-create-home app +USER app + ENTRYPOINT sh /devicehub-django.entrypoint.sh -- 2.30.2 From 371845971ceac2bd3d4d60b2e800256778119719 Mon Sep 17 00:00:00 2001 From: pedro Date: Wed, 27 Nov 2024 09:31:13 +0100 Subject: [PATCH 36/86] no sudo in docker-reset, all is with user 1000 --- docker-reset.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker-reset.sh b/docker-reset.sh index 9dc0032..825e91c 100755 --- a/docker-reset.sh +++ b/docker-reset.sh @@ -20,7 +20,7 @@ main() { echo "WARNING: .env was not there, .env.example was copied, this only happens once" fi # remove old database - sudo rm -vfr ./db/* + rm -vfr ./db/* docker compose down -v docker compose build docker compose up ${detach_arg:-} -- 2.30.2 From e6c1ede93cd50e06be42a96fa64827caaea76903 Mon Sep 17 00:00:00 2001 From: Cayo Puigdefabregas Date: Wed, 20 Nov 2024 12:18:30 +0100 Subject: [PATCH 37/86] fix --- device/templates/details.html | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/device/templates/details.html b/device/templates/details.html index 86ea5a1..8f640cd 100644 --- a/device/templates/details.html +++ b/device/templates/details.html @@ -242,14 +242,15 @@
{% trans 'List of dpps' %}
-
+
{% for d in dpps %}
{{ d.timestamp }} + {{ d.type }}

- {{ d.signature }} + {{ d.signature }}

{% endfor %} -- 2.30.2 From 1c58bff515127886a413d64343b95e07bd556bbb Mon Sep 17 00:00:00 2001 From: Cayo Puigdefabregas Date: Wed, 20 Nov 2024 18:06:52 +0100 Subject: [PATCH 38/86] view dpp page --- device/models.py | 32 ++- device/views.py | 7 +- did/templates/device_did.html | 497 ++++++++++++++++++++++++++++++++++ did/templates/device_web.html | 171 ------------ did/views.py | 140 +++++++++- 5 files changed, 654 insertions(+), 193 deletions(-) create mode 100644 did/templates/device_did.html delete mode 100644 did/templates/device_web.html diff --git a/device/models.py b/device/models.py index 3bd5eeb..2aaa470 100644 --- a/device/models.py +++ b/device/models.py @@ -25,6 +25,7 @@ class Device: def __init__(self, *args, **kwargs): # the id is the chid of the device self.id = kwargs["id"] + self.uuid = kwargs.get("uuid") self.pk = self.id self.shortid = self.pk[:6].upper() self.algorithm = None @@ -103,6 +104,14 @@ class Device: self.evidences = [Evidence(u) for u in self.uuids] def get_last_evidence(self): + if self.last_evidence: + return + + if self.uuid: + import pdb; pdb.set_trace() + self.last_evidence = Evidence(self.uuid) + return + annotations = self.get_annotations() if not annotations.count(): return @@ -126,6 +135,8 @@ class Device: return False def last_uuid(self): + if self.uuid: + return self.uuid return self.uuids[0] def get_lots(self): @@ -263,41 +274,35 @@ class Device: @property def is_websnapshot(self): - if not self.last_evidence: - self.get_last_evidence() + self.get_last_evidence() return self.last_evidence.doc['type'] == "WebSnapshot" @property def last_user_evidence(self): - if not self.last_evidence: - self.get_last_evidence() + self.get_last_evidence() return self.last_evidence.doc['kv'].items() @property def manufacturer(self): - if not self.last_evidence: - self.get_last_evidence() + self.get_last_evidence() return self.last_evidence.get_manufacturer() @property def serial_number(self): - if not self.last_evidence: - self.get_last_evidence() + self.get_last_evidence() return self.last_evidence.get_serial_number() @property def type(self): + self.get_last_evidence() if self.last_evidence.doc['type'] == "WebSnapshot": return self.last_evidence.doc.get("device", {}).get("type", "") - if not self.last_evidence: - self.get_last_evidence() return self.last_evidence.get_chassis() @property def model(self): - if not self.last_evidence: - self.get_last_evidence() + self.get_last_evidence() return self.last_evidence.get_model() @property @@ -308,6 +313,5 @@ class Device: @property def components(self): - if not self.last_evidence: - self.get_last_evidence() + self.get_last_evidence() return self.last_evidence.get_components() diff --git a/device/views.py b/device/views.py index 3c7118c..c7c2b1f 100644 --- a/device/views.py +++ b/device/views.py @@ -1,4 +1,3 @@ -import json from django.http import JsonResponse from django.http import Http404 @@ -15,6 +14,7 @@ from dashboard.mixins import DashboardView, Http403 from evidence.models import Annotation from lot.models import LotTag from dpp.models import Proof +from dpp.api_dlt import PROOF_TYPE from device.models import Device from device.forms import DeviceFormSet @@ -104,7 +104,10 @@ class DetailsView(DashboardView, TemplateView): context = super().get_context_data(**kwargs) self.object.initial() lot_tags = LotTag.objects.filter(owner=self.request.user.institution) - dpps = Proof.objects.filter(uuid__in=self.object.uuids) + dpps = Proof.objects.filter( + uuid__in=self.object.uuids, + type=PROOF_TYPE["IssueDPP"] + ) context.update({ 'object': self.object, 'snapshot': self.object.get_last_evidence(), diff --git a/did/templates/device_did.html b/did/templates/device_did.html new file mode 100644 index 0000000..d3a0e2a --- /dev/null +++ b/did/templates/device_did.html @@ -0,0 +1,497 @@ + + + + + + {{ object.type }} + + + + + +
+ + +

{{ object.manufacturer }} {{ object.type }} {{ object.model }}

+ +
+
+ {% if manuals.details.logo %} + + {% endif %} +
+
+ {% if manuals.details.image %} + + {% endif %} +
+
+
+
+

Details

+
+
Phid
+
+
{{ object.id }}
+
+
+
+
Type
+
{{ object.type }}
+
+ + {% if object.is_websnapshot %} + {% for snapshot_key, snapshot_value in object.last_user_evidence %} +
+
{{ snapshot_key }}
+
{{ snapshot_value|default:'' }}
+
+ {% endfor %} + {% else %} +
+
Manufacturer
+
{{ object.manufacturer|default:'' }}
+
+
+
Model
+
{{ object.model|default:'' }}
+
+ {% if user.is_authenticated %} +
+
Serial Number
+
{{ object.serial_number|default:'' }}
+
+ {% endif %} + {% endif %} +
+ +
+

Identifiers

+ {% for chid in object.hids %} +
+
{{ chid|default:'' }}
+
+ {% endfor %} +
+
+

Components

+
+ {% for component in object.components %} +
+
+
+
{{ component.type }}
+

+ {% for component_key, component_value in component.items %} + {% if component_key not in 'actions,type' %} + {% if component_key != 'serialNumber' or user.is_authenticated %} + {{ component_key }}: {{ component_value }}
+ {% endif %} + {% endif %} + {% endfor %} +

+
+
+
+ {% endfor %} +
+ {% if manuals.icecat %} +
Icecat data sheet
+
+
+ {% if manuals.details.logo %} + + {% endif %} + {% if manuals.details.image %} + + {% endif %} + {% if manuals.details.pdf %} + {{ manuals.details.title }}
+ {% else %} + {{ manuals.details.title }}
+ {% endif %} +
+
+
+ +
+
+
+ {% for m in manuals.icecat %} +
+ {% if m.logo %} + + {% endif %} + {% if m.pdf %} + {{ m.title }}
+ {% else %} + {{ m.title }}
+ {% endif %} +
+ {% endfor %} +
+
+
+
+ {% endif %} + {% if manuals.laer %} +
+
+
Recycled Content
+ +
+
+ Metal +
+
+
+ +
{{ manuals.laer.0.metal }}% +
+
+
+
+
+
+ Plastic post Consumer +
+
+
+
{{ manuals.laer.0.plastic_post_consumer }}% +
+
+
+
+
+
+ Plastic post Industry +
+
+
+
{{ manuals.laer.0.plastic_post_industry }}% +
+
+
+
+
+
+ {% endif %} + + {% if manuals.energystar %} +
+
+
Energy spent
+ + {% if manuals.energystar.long_idle_watts %} +
+
+ Consumption when inactivity power function is activated (watts) +
+
+ {{ manuals.energystar.long_idle_watts }} +
+
+ {% endif %} + + {% if manuals.energystar.short_idle_watts %} +
+
+ Consumption when inactivity power function is not activated (watts) +
+
+ {{ manuals.energystar.short_idle_watts }} +
+
+ {% endif %} + + {% if manuals.energystar.sleep_mode_watts %} +
+
+ sleep_mode_watts + Consumption when computer goes into sleep mode (watts) +
+
+ {{ manuals.energystar.sleep_mode_watts }} +
+
+ {% endif %} + + {% if manuals.energystar.off_mode_watts %} +
+
+ Consumption when the computer is off (watts) +
+
+ {{ manuals.energystar.off_mode_watts }} +
+
+ {% endif %} + + {% if manuals.energystar.tec_allowance_kwh %} +
+
+ Power allocation for normal operation (kwh) +
+
+ {{ manuals.energystar.tec_allowance_kwh }} +
+
+ {% endif %} + + {% if manuals.energystar.tec_of_model_kwh %} +
+
+ Consumption of the model configuration (kwh) +
+
+ {{ manuals.energystar.tec_of_model_kwh }} +
+
+ {% endif %} + + {% if manuals.energystar.tec_requirement_kwh %} +
+
+ Energy allowance provided (kwh) +
+
+ {{ manuals.energystar.tec_requirement_kwh }} +
+
+ {% endif %} + + {% if manuals.energystar.work_off_mode_watts %} +
+
+ The lowest power mode which cannot be switched off (watts) +
+
+ {{ manuals.energystar.work_off_mode_watts }} +
+
+ {% endif %} + + {% if manuals.energystar.work_weighted_power_of_model_watts %} +
+
+ Weighted energy consumption from all its states (watts) +
+
+ {{ manuals.energystar.work_weighted_power_of_model_watts }} +
+
+ {% endif %} + +
+
+ {% endif %} + + + {% if manuals.ifixit %} +
+
+
+ +
+
+
+ {% for m in manuals.ifixit %} +
+ {% if m.image %} + + {% endif %} + {% if m.url %} + {{ m.title }}
+ {% else %} + {{ m.title }}
+ {% endif %} +
+ {% endfor %} +
+
+
+
+ {% endif %} +
+

+ ©{% now 'Y' %}eReuse. All rights reserved. +

+
+{% if user.is_anonymous and not roles %} + +{% else %} + +{% endif %} + + + + diff --git a/did/templates/device_web.html b/did/templates/device_web.html deleted file mode 100644 index 8c607d3..0000000 --- a/did/templates/device_web.html +++ /dev/null @@ -1,171 +0,0 @@ - - - - - - {{ object.type }} - - - - - -
-

{{ object.manufacturer }} {{ object.type }} {{ object.model }}

- -
-
-

Details

-
-
Phid
-
-
{{ object.id }}
-
-
-
-
Type
-
{{ object.type }}
-
- - {% if object.is_websnapshot %} - {% for snapshot_key, snapshot_value in object.last_user_evidence %} -
-
{{ snapshot_key }}
-
{{ snapshot_value|default:'' }}
-
- {% endfor %} - {% else %} -
-
Manufacturer
-
{{ object.manufacturer|default:'' }}
-
-
-
Model
-
{{ object.model|default:'' }}
-
- {% if user.is_authenticated %} -
-
Serial Number
-
{{ object.serial_number|default:'' }}
-
- {% endif %} - {% endif %} -
- -
-

Identifiers

- {% for chid in object.hids %} -
-
{{ chid|default:'' }}
-
- {% endfor %} -
-
-

Components

-
- {% for component in object.components %} -
-
-
-
{{ component.type }}
-

- {% for component_key, component_value in component.items %} - {% if component_key not in 'actions,type' %} - {% if component_key != 'serialNumber' or user.is_authenticated %} - {{ component_key }}: {{ component_value }}
- {% endif %} - {% endif %} - {% endfor %} -

-
-
-
- {% endfor %} -
-
-
-

- ©{% now 'Y' %}eReuse. All rights reserved. -

-
- - - - diff --git a/did/views.py b/did/views.py index 1caa081..e8ad5cd 100644 --- a/did/views.py +++ b/did/views.py @@ -1,14 +1,26 @@ +import json +import logging + from django.http import JsonResponse, Http404 from django.views.generic.base import TemplateView from device.models import Device +from dpp.models import Proof + + +logger = logging.getLogger('django') class PublicDeviceWebView(TemplateView): - template_name = "device_web.html" + template_name = "device_did.html" def get(self, request, *args, **kwargs): self.pk = kwargs['pk'] - self.object = Device(id=self.pk) + chid = self.pk.split(":")[0] + proof = Proof.objects.filter(signature=self.pk).first() + if proof: + self.object = Device(id=chid, uuid=proof.uuid) + else: + self.object = Device(id=chid) if not self.object.last_evidence: raise Http404 @@ -18,12 +30,24 @@ class PublicDeviceWebView(TemplateView): return super().get(request, *args, **kwargs) def get_context_data(self, **kwargs): - context = super().get_context_data(**kwargs) + self.context = super().get_context_data(**kwargs) self.object.initial() - context.update({ - 'object': self.object + roles = [("Operator", "Operator")] + role = "Operator" + if self.request.user.is_anonymous: + roles = [] + role = None + self.context.update({ + 'object': self.object, + 'role': role, + 'roles': roles, + 'path': self.request.path, + 'last_dpp': "", + 'before_dpp': "", }) - return context + if not self.request.user.is_anonymous: + self.get_manuals() + return self.context @property def public_fields(self): @@ -58,3 +82,107 @@ class PublicDeviceWebView(TemplateView): device_data = self.get_device_data() return JsonResponse(device_data) + def get_manuals(self): + manuals = { + 'ifixit': [], + 'icecat': [], + 'details': {}, + 'laer': [], + 'energystar': {}, + } + try: + params = { + "manufacturer": self.object.manufacturer, + "model": self.object.model, + } + self.params = json.dumps(params) + manuals['ifixit'] = self.request_manuals('ifixit') + manuals['icecat'] = self.request_manuals('icecat') + manuals['laer'] = self.request_manuals('laer') + manuals['energystar'] = self.request_manuals('energystar') or {} + if manuals['icecat']: + manuals['details'] = manuals['icecat'][0] + except Exception as err: + logger.error("Error: {}".format(err)) + + self.context['manuals'] = manuals + self.parse_energystar() + + def parse_energystar(self): + if not self.context.get('manuals', {}).get('energystar'): + return + + # Defined in: + # https://dev.socrata.com/foundry/data.energystar.gov/j7nq-iepp + + energy_types = [ + 'functional_adder_allowances_kwh', + 'tec_allowance_kwh', + 'long_idle_watts', + 'short_idle_watts', + 'off_mode_watts', + 'sleep_mode_watts', + 'tec_of_model_kwh', + 'tec_requirement_kwh', + 'work_off_mode_watts', + 'work_weighted_power_of_model_watts', + ] + energy = {} + for field in energy_types: + energy[field] = [] + + for e in self.context['manuals']['energystar']: + for field in energy_types: + for k, v in e.items(): + if not v: + continue + if field in k: + energy[field].append(v) + + for k, v in energy.items(): + if not v: + energy[k] = 0 + continue + tt = sum([float(i) for i in v]) + energy[k] = round(tt / len(v), 2) + + self.context['manuals']['energystar'] = energy + + def request_manuals(self, prefix): + #TODO reimplement manuals service + response = { + "laer": [{"metal": 40, "plastic_post_consumer": 27, "plastic_post_industry": 34}], + "energystar": [{ + 'functional_adder_allowances_kwh': 180, + "long_idle_watts": 240, + "short_idle_watts": 120, + "sleep_mode_watts": 30, + "off_mode_watts": 3, + "tec_allowance_kwh": 180, + "tec_of_model_kwh": 150, + "tec_requirement_kwh": 220, + "work_off_mode_watts": 70, + "work_weighted_power_of_model_watts": 240 + }], + "ifixit": [ + { + "image": "https://guide-images.cdn.ifixit.com/igi/156EpI4YdQeVfVPa.medium", + "url": "https://es.ifixit.com/Gu%C3%ADa/HP+ProBook+450+G4+Back+Panel+Replacement/171196?lang=en", + "title": "HP ProBook 450 G4 Back Panel Replacement" + }, + { + "image": "https://guide-images.cdn.ifixit.com/igi/usTIqCKpuxVWC3Ix.140x105", + "url": "https://es.ifixit.com/Gu%C3%ADa/HP+ProBook+450+G4+Display+Assembly+Replacement/171101?lang=en", + "title": "Display Assembly Replacement" + } + ], + "icecat": [ + { + "logo": "https://images.icecat.biz/img/brand/thumb/1_cf8603f6de7b4c4d8ac4f5f0ef439a05.jpg", + "image": "https://guide-images.cdn.ifixit.com/igi/Q2nYjTIQfG6GaI5B.standard", + "pdf": "https://icecat.biz/rest/product-pdf?productId=32951710&lang=en", + "title": "HP ProBook 450 G3" + } + ] + } + return response.get(prefix, {}) -- 2.30.2 From b56dc0dfda4cbc75ca5b5e356622f22cf8add32c Mon Sep 17 00:00:00 2001 From: Cayo Puigdefabregas Date: Wed, 20 Nov 2024 18:20:11 +0100 Subject: [PATCH 39/86] get_result for json --- did/views.py | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/did/views.py b/did/views.py index e8ad5cd..ac9ea69 100644 --- a/did/views.py +++ b/did/views.py @@ -4,6 +4,7 @@ import logging from django.http import JsonResponse, Http404 from django.views.generic.base import TemplateView from device.models import Device +from dpp.api_dlt import ALGORITHM from dpp.models import Proof @@ -82,6 +83,48 @@ class PublicDeviceWebView(TemplateView): device_data = self.get_device_data() return JsonResponse(device_data) + def get_result(self): + components = [] + data = { + 'document': {}, + 'dpp': self.pk, + 'algorithm': ALGORITHM, + 'components': components, + 'manufacturer DPP': '', + } + result = { + '@context': ['https://ereuse.org/dpp0.json'], + 'data': data, + } + + if self.dpp: + data['document'] = self.dpp.snapshot.json_hw + last_dpp = self.get_last_dpp() + url_last = '' + if last_dpp: + url_last = 'https://{host}/{did}'.format( + did=last_dpp.key, host=app.config.get('HOST') + ) + data['url_last'] = url_last + + for c in self.dpp.snapshot.components: + components.append({c.type: c.chid}) + return result + + dpps = [] + for d in self.device.dpps: + rr = { + 'dpp': d.key, + 'document': d.snapshot.json_hw, + 'algorithm': ALGORITHM, + 'manufacturer DPP': '', + } + dpps.append(rr) + return { + '@context': ['https://ereuse.org/dpp0.json'], + 'data': dpps, + } + def get_manuals(self): manuals = { 'ifixit': [], -- 2.30.2 From 3cf8ceb5d3b941473d29384bfe3b7b14311d5524 Mon Sep 17 00:00:00 2001 From: Cayo Puigdefabregas Date: Wed, 27 Nov 2024 13:08:43 +0100 Subject: [PATCH 40/86] remove pdb --- device/models.py | 1 - 1 file changed, 1 deletion(-) diff --git a/device/models.py b/device/models.py index 2aaa470..6a21f9e 100644 --- a/device/models.py +++ b/device/models.py @@ -108,7 +108,6 @@ class Device: return if self.uuid: - import pdb; pdb.set_trace() self.last_evidence = Evidence(self.uuid) return -- 2.30.2 From f1d57ff618700b06915346b6ac55b9e613ce4904 Mon Sep 17 00:00:00 2001 From: pedro Date: Wed, 27 Nov 2024 15:06:41 +0100 Subject: [PATCH 41/86] progress on making it work still fails --- dhub/settings.py | 1 + docker/devicehub-django.Dockerfile | 11 ++++--- docker/devicehub-django.entrypoint.sh | 34 +++++++++----------- dpp/api_dlt.py | 3 +- dpp/management/commands/dlt_register_user.py | 4 +-- 5 files changed, 28 insertions(+), 25 deletions(-) diff --git a/dhub/settings.py b/dhub/settings.py index 8ca3094..0703e2e 100644 --- a/dhub/settings.py +++ b/dhub/settings.py @@ -246,3 +246,4 @@ COMMIT = config('COMMIT', default='') TOKEN_DLT = config("TOKEN_DLT", default=None) API_DLT = config("API_DLT", default=None) API_RESOLVER = config("API_RESOLVER", default=None) +ID_FEDERATED = config("ID_FEDERATED", default=None) diff --git a/docker/devicehub-django.Dockerfile b/docker/devicehub-django.Dockerfile index 3e0a591..6f5ec95 100644 --- a/docker/devicehub-django.Dockerfile +++ b/docker/devicehub-django.Dockerfile @@ -8,8 +8,13 @@ RUN apt update && \ sqlite3 \ jq \ time \ + vim \ && rm -rf /var/lib/apt/lists/* +# TODO I don't like this, but the whole ereuse-dpp works with user 1000 because of the volume mapping +# thanks https://stackoverflow.com/questions/70520205/docker-non-root-user-best-practices-for-python-images +RUN adduser --home /opt/devicehub-django -u 1000 app + WORKDIR /opt/devicehub-django # reduce size (python specifics) -> src https://stackoverflow.com/questions/74616667/removing-pip-cache-after-installing-dependencies-in-docker-image @@ -37,9 +42,7 @@ ENV PYTHONPATH="${PYTHONPATH}:/usr/lib/python3/dist-packages" COPY docker/devicehub-django.entrypoint.sh / -# TODO I don't like this, but the whole ereuse-dpp works with user 1000 because of the volume mapping -# thanks https://stackoverflow.com/questions/70520205/docker-non-root-user-best-practices-for-python-images -RUN adduser --system --no-create-home app -USER app +RUN chown -R app:app /opt/devicehub-django +USER app ENTRYPOINT sh /devicehub-django.entrypoint.sh diff --git a/docker/devicehub-django.entrypoint.sh b/docker/devicehub-django.entrypoint.sh index da7f4a2..de19a4d 100644 --- a/docker/devicehub-django.entrypoint.sh +++ b/docker/devicehub-django.entrypoint.sh @@ -35,24 +35,21 @@ gen_env_vars() { PREDEFINED_TOKEN="${PREDEFINED_TOKEN:-}" # specific dpp env vars if [ "${DPP_MODULE}" = 'y' ]; then - # docker situation - if [ -d "${DPP_SHARED:-}" ]; then - wait_for_dpp_shared - export API_DLT='http://api_connector:3010' - export API_DLT_TOKEN="$(cat "/shared/${OPERATOR_TOKEN_FILE}")" - export API_RESOLVER='http://id_index_api:3012' - # TODO hardcoded - export ID_FEDERATED='DH1' - # .env situation - else - dpp_env_vars="$(cat < Date: Wed, 27 Nov 2024 15:49:58 +0100 Subject: [PATCH 42/86] fix get_result for get correct document --- did/views.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/did/views.py b/did/views.py index ac9ea69..c885c1b 100644 --- a/did/views.py +++ b/did/views.py @@ -80,7 +80,8 @@ class PublicDeviceWebView(TemplateView): return data def get_json_response(self): - device_data = self.get_device_data() + device_data = self.get_result() + # device_data = self.get_device_data() return JsonResponse(device_data) def get_result(self): -- 2.30.2 From cfae9d4ec9141fc3430277502f36a68bf3ab377e Mon Sep 17 00:00:00 2001 From: pedro Date: Wed, 27 Nov 2024 15:50:25 +0100 Subject: [PATCH 43/86] dhub settings: bugfix wrong DLT TOKEN --- dhub/settings.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dhub/settings.py b/dhub/settings.py index 0703e2e..a30ab2b 100644 --- a/dhub/settings.py +++ b/dhub/settings.py @@ -243,7 +243,7 @@ DATA_UPLOAD_MAX_NUMBER_FILES = 1000 COMMIT = config('COMMIT', default='') # DLT SETTINGS -TOKEN_DLT = config("TOKEN_DLT", default=None) +TOKEN_DLT = config("API_DLT_TOKEN", default=None) API_DLT = config("API_DLT", default=None) API_RESOLVER = config("API_RESOLVER", default=None) ID_FEDERATED = config("ID_FEDERATED", default=None) -- 2.30.2 From e2078c7bdeade1ef74a37da0a267887a66b663b2 Mon Sep 17 00:00:00 2001 From: Cayo Puigdefabregas Date: Wed, 27 Nov 2024 15:59:18 +0100 Subject: [PATCH 44/86] fix get_result --- did/views.py | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/did/views.py b/did/views.py index c885c1b..6dae1a3 100644 --- a/did/views.py +++ b/did/views.py @@ -98,19 +98,19 @@ class PublicDeviceWebView(TemplateView): 'data': data, } - if self.dpp: - data['document'] = self.dpp.snapshot.json_hw - last_dpp = self.get_last_dpp() - url_last = '' - if last_dpp: - url_last = 'https://{host}/{did}'.format( - did=last_dpp.key, host=app.config.get('HOST') - ) - data['url_last'] = url_last + # if self.dpp: + # data['document'] = self.dpp.snapshot.json_hw + # last_dpp = self.get_last_dpp() + # url_last = '' + # if last_dpp: + # url_last = 'https://{host}/{did}'.format( + # did=last_dpp.key, host=app.config.get('HOST') + # ) + # data['url_last'] = url_last - for c in self.dpp.snapshot.components: - components.append({c.type: c.chid}) - return result + # for c in self.dpp.snapshot.components: + # components.append({c.type: c.chid}) + # return result dpps = [] for d in self.device.dpps: -- 2.30.2 From 80b4c3b4cac45c2ddb4706066a8cb19e17c4849d Mon Sep 17 00:00:00 2001 From: Cayo Puigdefabregas Date: Wed, 27 Nov 2024 16:53:31 +0100 Subject: [PATCH 45/86] fix new document json --- did/views.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/did/views.py b/did/views.py index 6dae1a3..8517b6c 100644 --- a/did/views.py +++ b/did/views.py @@ -107,16 +107,18 @@ class PublicDeviceWebView(TemplateView): # did=last_dpp.key, host=app.config.get('HOST') # ) # data['url_last'] = url_last - # for c in self.dpp.snapshot.components: # components.append({c.type: c.chid}) # return result dpps = [] - for d in self.device.dpps: + self.object.initial() + for d in self.object.evidences: + d.get_doc() + ev = json.dumps(d.doc) rr = { 'dpp': d.key, - 'document': d.snapshot.json_hw, + 'document': ev, 'algorithm': ALGORITHM, 'manufacturer DPP': '', } -- 2.30.2 From 06264558df35655aa97cc128e935a0909b4275e9 Mon Sep 17 00:00:00 2001 From: Cayo Puigdefabregas Date: Wed, 27 Nov 2024 18:11:22 +0100 Subject: [PATCH 46/86] add result for dpp and for chid --- device/models.py | 1 + did/views.py | 31 +++++++++++++++++++------------ 2 files changed, 20 insertions(+), 12 deletions(-) diff --git a/device/models.py b/device/models.py index 6a21f9e..7ca2a1f 100644 --- a/device/models.py +++ b/device/models.py @@ -116,6 +116,7 @@ class Device: return annotation = annotations.first() self.last_evidence = Evidence(annotation.uuid) + self.uuid = annotation.uuid def is_eraseserver(self): if not self.uuids: diff --git a/did/views.py b/did/views.py index 8517b6c..3d4ef35 100644 --- a/did/views.py +++ b/did/views.py @@ -6,6 +6,7 @@ from django.views.generic.base import TemplateView from device.models import Device from dpp.api_dlt import ALGORITHM from dpp.models import Proof +from dpp.api_dlt import PROOF_TYPE logger = logging.getLogger('django') @@ -98,18 +99,24 @@ class PublicDeviceWebView(TemplateView): 'data': data, } - # if self.dpp: - # data['document'] = self.dpp.snapshot.json_hw - # last_dpp = self.get_last_dpp() - # url_last = '' - # if last_dpp: - # url_last = 'https://{host}/{did}'.format( - # did=last_dpp.key, host=app.config.get('HOST') - # ) - # data['url_last'] = url_last - # for c in self.dpp.snapshot.components: - # components.append({c.type: c.chid}) - # return result + if len(self.pk.split(":")) > 1: + data['document'] = json.dumps(self.object.last_evidence.doc) + + self.object.get_evidences() + last_dpp = Proof.objects.filter( + uuid__in=self.object.uuids, type=PROOF_TYPE['IssueDPP'] + ).order_by("-timestamp").first() + + key = self.pk + if last_dpp: + key = last_dpp.signature + + url = "https://{}/did/{}".format( + self.request.get_host(), + key + ) + data['url_last'] = url + return result dpps = [] self.object.initial() -- 2.30.2 From 1613eaaa44b3b81e5cf5dded9e1f12bd25ea0112 Mon Sep 17 00:00:00 2001 From: Cayo Puigdefabregas Date: Wed, 27 Nov 2024 18:29:36 +0100 Subject: [PATCH 47/86] add_services --- dpp/api_dlt.py | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/dpp/api_dlt.py b/dpp/api_dlt.py index 38434b3..e815419 100644 --- a/dpp/api_dlt.py +++ b/dpp/api_dlt.py @@ -118,20 +118,20 @@ def register_device_dlt(chid, phid, ev_uuid, user): # TODO is neccesary? - # if settings.get('ID_FEDERATED'): - # cny = 1 - # while cny: - # try: - # api.add_service( - # chid, - # 'DeviceHub', - # settings.get('ID_FEDERATED'), - # 'Inventory service', - # 'Inv', - # ) - # cny = 0 - # except Exception: - # time.sleep(10) + if settings.get('ID_FEDERATED'): + cny = 1 + while cny: + try: + api.add_service( + chid, + 'DeviceHub', + settings.get('ID_FEDERATED'), + 'Inventory service', + 'Inv', + ) + cny = 0 + except Exception: + time.sleep(10) def register_passport_dlt(chid, phid, ev_uuid, user): -- 2.30.2 From 04ecb4f2f1c51e4d48c5c26af3f6f75ee6715891 Mon Sep 17 00:00:00 2001 From: Cayo Puigdefabregas Date: Wed, 27 Nov 2024 18:36:08 +0100 Subject: [PATCH 48/86] remove flask sintax for django sintax --- dpp/api_dlt.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dpp/api_dlt.py b/dpp/api_dlt.py index e815419..5f95d7a 100644 --- a/dpp/api_dlt.py +++ b/dpp/api_dlt.py @@ -118,7 +118,7 @@ def register_device_dlt(chid, phid, ev_uuid, user): # TODO is neccesary? - if settings.get('ID_FEDERATED'): + if settings.ID_FEDERATED: cny = 1 while cny: try: -- 2.30.2 From b652d7d4526a07b1f5e80adf76e38556932ba1a8 Mon Sep 17 00:00:00 2001 From: Cayo Puigdefabregas Date: Wed, 27 Nov 2024 18:41:17 +0100 Subject: [PATCH 49/86] remove flask sintax for django sintax --- dpp/api_dlt.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dpp/api_dlt.py b/dpp/api_dlt.py index 5f95d7a..4d869e2 100644 --- a/dpp/api_dlt.py +++ b/dpp/api_dlt.py @@ -125,7 +125,7 @@ def register_device_dlt(chid, phid, ev_uuid, user): api.add_service( chid, 'DeviceHub', - settings.get('ID_FEDERATED'), + settings.ID_FEDERATED, 'Inventory service', 'Inv', ) -- 2.30.2 From 7ed05f0932acee704db445784b67e2f38ecf9bb5 Mon Sep 17 00:00:00 2001 From: pedro Date: Thu, 28 Nov 2024 00:00:09 +0100 Subject: [PATCH 50/86] comment logger trace when DEBUG is it necessary? --- utils/logger.py | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/utils/logger.py b/utils/logger.py index 886d731..bfa14c2 100644 --- a/utils/logger.py +++ b/utils/logger.py @@ -31,10 +31,13 @@ class CustomFormatter(logging.Formatter): # Highlight the final formatted message record.msg = self.highlight_message(record.msg, color) - # provide trace when DEBUG config - if settings.DEBUG: - import traceback - print(traceback.format_exc()) + # pedro says: I discovered that trace is provided anyway with + # this commented (reason: strange None msgs) + # is this needed? + ### provide trace when DEBUG config + #if settings.DEBUG: + # import traceback + # print(traceback.format_exc()) return super().format(record) -- 2.30.2 From 96268c8cafb40259179769ceb514da7444114269 Mon Sep 17 00:00:00 2001 From: Cayo Puigdefabregas Date: Thu, 28 Nov 2024 12:21:26 +0100 Subject: [PATCH 51/86] new document and out device and components --- did/views.py | 16 ++++++++-- evidence/parse.py | 80 ++++++++++++++++++++++++++++++++++++++++++++-- utils/constants.py | 11 +++++++ 3 files changed, 103 insertions(+), 4 deletions(-) diff --git a/did/views.py b/did/views.py index 3d4ef35..711e4be 100644 --- a/did/views.py +++ b/did/views.py @@ -4,6 +4,7 @@ import logging from django.http import JsonResponse, Http404 from django.views.generic.base import TemplateView from device.models import Device +from evidence.parse import Build from dpp.api_dlt import ALGORITHM from dpp.models import Proof from dpp.api_dlt import PROOF_TYPE @@ -93,6 +94,8 @@ class PublicDeviceWebView(TemplateView): 'algorithm': ALGORITHM, 'components': components, 'manufacturer DPP': '', + 'device': {}, + 'components': [], } result = { '@context': ['https://ereuse.org/dpp0.json'], @@ -100,7 +103,11 @@ class PublicDeviceWebView(TemplateView): } if len(self.pk.split(":")) > 1: - data['document'] = json.dumps(self.object.last_evidence.doc) + dev = Build(self.object.last_evidence.doc, None, check=True) + doc = dev.get_phid() + data['document'] = json.dumps(doc) + data['device'] = dev.device + data['components'] = dev.components self.object.get_evidences() last_dpp = Proof.objects.filter( @@ -122,13 +129,18 @@ class PublicDeviceWebView(TemplateView): self.object.initial() for d in self.object.evidences: d.get_doc() - ev = json.dumps(d.doc) + dev = Build(d.doc, None, check=True) + doc = dev.get_phid() + ev = json.dumps(doc) rr = { 'dpp': d.key, 'document': ev, 'algorithm': ALGORITHM, 'manufacturer DPP': '', + 'device': dev.device, + 'components': dev.components } + dpps.append(rr) return { '@context': ['https://ereuse.org/dpp0.json'], diff --git a/evidence/parse.py b/evidence/parse.py index ccee6a2..587588d 100644 --- a/evidence/parse.py +++ b/evidence/parse.py @@ -2,6 +2,9 @@ import json import hashlib import logging +from dmidecode import DMIParse +from evidence.parse_details import ParseSnapshot + from evidence.models import Annotation from evidence.xapian import index from dpp.api_dlt import register_device_dlt, register_passport_dlt @@ -55,6 +58,7 @@ class Build: def generate_chids(self): self.algorithms = { 'hidalgo1': self.get_hid_14(), + 'legacy_dpp': self.get_chid_dpp(), } def get_hid_14(self): @@ -73,6 +77,56 @@ class Build: self.chid = hashlib.sha3_256(hid.encode()).hexdigest() return self.chid + def get_chid_dpp(self): + if self.json.get("software") == "workbench-script": + dmidecode_raw = self.json["data"]["dmidecode"] + dmi = DMIParse(dmidecode_raw) + + manufacturer = dmi.manufacturer().strip() + model = dmi.model().strip() + chassis = self.get_chassis_dh() + serial_number = dmi.serial_number() + sku = self.get_sku() + typ = chassis + version = self.get_version() + hid = f"{manufacturer}{model}{chassis}{serial_number}{sku}{typ}{version}" + else: + device = self.json['device'] + hid = self.get_id_hw_dpp(device) + + self.chid = hashlib.sha3_256(hid.encode("utf-8")).hexdigest() + return self.chid + + def get_id_hw_dpp(self, d): + manufacturer = d.get("manufacturer", '') + model = d.get("model", '') + chassis = d.get("chassis", '') + serial_number = d.get("serialNumber", '') + sku = d.get("sku", '') + typ = d.get("type", '') + version = d.get("version", '') + + return f"{manufacturer}{model}{chassis}{serial_number}{sku}{typ}{version}" + + def get_phid(self): + if self.json.get("software") == "workbench-script": + data = ParseSnapshot(self.json) + self.device = data.device + self.components = data.components + else: + self.device = self.json.get("device") + self.components = self.json.get("components" []) + + device = self.get_id_hw_dpp(self.device) + components = self.json.get(self.components) + components = sorted(components, key=lambda x: x.get("type")) + doc = [("computer", device)] + + for c in components: + doc.append((c.get("type"), self.get_id_hw_dpp(c))) + + return doc + def create_annotations(self): annotation = Annotation.objects.filter( uuid=self.uuid, @@ -95,6 +149,26 @@ class Build: value=v ) +<<<<<<< HEAD +======= + def get_chassis_dh(self): + chassis = self.get_chassis() + lower_type = chassis.lower() + for k, v in CHASSIS_DH.items(): + if lower_type in v: + return k + return self.default + + def get_sku(self): + return self.dmi.get("System")[0].get("SKU Number", "n/a").strip() + + def get_chassis(self): + return self.dmi.get("Chassis")[0].get("Type", '_virtual') + + def get_version(self): + return self.dmi.get("System")[0].get("Verson", '_virtual') + +>>>>>>> 5949049 (new document and out device and components) def get_hid(self, snapshot): try: self.inxi = self.json["data"]["inxi"] @@ -127,5 +201,7 @@ class Build: return hashlib.sha3_256(json.dumps(doc).encode()).hexdigest() def register_device_dlt(self): - register_device_dlt(self.chid, self.phid, self.uuid, self.user) - register_passport_dlt(self.chid, self.phid, self.uuid, self.user) + chid = self.algorithms.get('legacy_dpp') + phid = self.get_signature(self.get_phid(self)) + register_device_dlt(chid, phid, self.uuid, self.user) + register_passport_dlt(chid, phid, self.uuid, self.user) diff --git a/utils/constants.py b/utils/constants.py index bc43922..75c5dc5 100644 --- a/utils/constants.py +++ b/utils/constants.py @@ -17,8 +17,19 @@ HID_ALGO1 = [ "sku" ] +LEGACY_DPP = [ + "manufacturer", + "model", + "chassis", + "serialNumber", + "sku", + "type", + "version" +] + ALGOS = { "hidalgo1": HID_ALGO1, + "legacy_dpp": LEGACY_DPP } -- 2.30.2 From 88bdabb64f9252fa9e0f24de0ac958df7640d537 Mon Sep 17 00:00:00 2001 From: Cayo Puigdefabregas Date: Thu, 28 Nov 2024 15:25:57 +0100 Subject: [PATCH 52/86] fix --- evidence/parse.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/evidence/parse.py b/evidence/parse.py index 587588d..6bba4f9 100644 --- a/evidence/parse.py +++ b/evidence/parse.py @@ -115,7 +115,7 @@ class Build: self.components = data.components else: self.device = self.json.get("device") - self.components = self.json.get("components" []) + self.components = self.json.get("components", []) device = self.get_id_hw_dpp(self.device) components = self.json.get(self.components) @@ -163,7 +163,7 @@ class Build: return self.dmi.get("System")[0].get("SKU Number", "n/a").strip() def get_chassis(self): - return self.dmi.get("Chassis")[0].get("Type", '_virtual') + return self.dmi.get("Chassis")[0].get("Type", '_virtual') # def get_version(self): return self.dmi.get("System")[0].get("Verson", '_virtual') -- 2.30.2 From 30be57ee25217896605d550186d6242a4269ff32 Mon Sep 17 00:00:00 2001 From: Cayo Puigdefabregas Date: Thu, 28 Nov 2024 15:33:57 +0100 Subject: [PATCH 53/86] fix phid --- evidence/parse.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/evidence/parse.py b/evidence/parse.py index 6bba4f9..39fb340 100644 --- a/evidence/parse.py +++ b/evidence/parse.py @@ -202,6 +202,6 @@ class Build: def register_device_dlt(self): chid = self.algorithms.get('legacy_dpp') - phid = self.get_signature(self.get_phid(self)) + phid = self.get_signature(self.get_phid()) register_device_dlt(chid, phid, self.uuid, self.user) register_passport_dlt(chid, phid, self.uuid, self.user) -- 2.30.2 From 612737d46ca5401b6ff1d5faff91dd650cfacc1e Mon Sep 17 00:00:00 2001 From: Cayo Puigdefabregas Date: Thu, 28 Nov 2024 15:40:09 +0100 Subject: [PATCH 54/86] fix phid hash list --- evidence/parse.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/evidence/parse.py b/evidence/parse.py index 39fb340..60b2697 100644 --- a/evidence/parse.py +++ b/evidence/parse.py @@ -202,6 +202,6 @@ class Build: def register_device_dlt(self): chid = self.algorithms.get('legacy_dpp') - phid = self.get_signature(self.get_phid()) + phid = self.get_signature(json.dumps(self.get_phid())) register_device_dlt(chid, phid, self.uuid, self.user) register_passport_dlt(chid, phid, self.uuid, self.user) -- 2.30.2 From ea6d990e560ff0a2866a0da5caa8ae13ecee5089 Mon Sep 17 00:00:00 2001 From: Cayo Puigdefabregas Date: Thu, 28 Nov 2024 15:47:03 +0100 Subject: [PATCH 55/86] fix phid hash list --- evidence/parse.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/evidence/parse.py b/evidence/parse.py index 60b2697..618219e 100644 --- a/evidence/parse.py +++ b/evidence/parse.py @@ -118,8 +118,7 @@ class Build: self.components = self.json.get("components", []) device = self.get_id_hw_dpp(self.device) - components = self.json.get(self.components) - components = sorted(components, key=lambda x: x.get("type")) + components = sorted(self.components, key=lambda x: x.get("type")) doc = [("computer", device)] for c in components: -- 2.30.2 From a2d859494b4a5d5a162fdecb6ca1d53060987e28 Mon Sep 17 00:00:00 2001 From: Cayo Puigdefabregas Date: Thu, 28 Nov 2024 16:22:06 +0100 Subject: [PATCH 56/86] fix json call to chid --- did/views.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/did/views.py b/did/views.py index 711e4be..493925d 100644 --- a/did/views.py +++ b/did/views.py @@ -95,7 +95,6 @@ class PublicDeviceWebView(TemplateView): 'components': components, 'manufacturer DPP': '', 'device': {}, - 'components': [], } result = { '@context': ['https://ereuse.org/dpp0.json'], @@ -132,8 +131,10 @@ class PublicDeviceWebView(TemplateView): dev = Build(d.doc, None, check=True) doc = dev.get_phid() ev = json.dumps(doc) + phid = dev.get_signature(ev) + dpp = "{}:{}".format(self.pk, phid) rr = { - 'dpp': d.key, + 'dpp': dpp, 'document': ev, 'algorithm': ALGORITHM, 'manufacturer DPP': '', -- 2.30.2 From 6c0e77891f30d3614d74f81165e624fec2becd9b Mon Sep 17 00:00:00 2001 From: Cayo Puigdefabregas Date: Thu, 28 Nov 2024 16:37:38 +0100 Subject: [PATCH 57/86] fix cors origin --- did/views.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/did/views.py b/did/views.py index 493925d..2c834ea 100644 --- a/did/views.py +++ b/did/views.py @@ -84,7 +84,9 @@ class PublicDeviceWebView(TemplateView): def get_json_response(self): device_data = self.get_result() # device_data = self.get_device_data() - return JsonResponse(device_data) + response = JsonResponse(device_data) + response["Access-Control-Allow-Origin"] = "*" + return response def get_result(self): components = [] -- 2.30.2 From 99435fff8521a1e9f0ce1335521a93594348a077 Mon Sep 17 00:00:00 2001 From: Cayo Puigdefabregas Date: Thu, 28 Nov 2024 16:54:31 +0100 Subject: [PATCH 58/86] debug in proof call --- dpp/views.py | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/dpp/views.py b/dpp/views.py index 956099d..372bb17 100644 --- a/dpp/views.py +++ b/dpp/views.py @@ -1,3 +1,4 @@ +import logging from django.views.generic.edit import View from django.http import JsonResponse @@ -6,10 +7,16 @@ from dpp.models import Proof from dpp.api_dlt import ALGORITHM +logger = logging.getLogger('django') + + class ProofView(View): def get(self, request, *args, **kwargs): timestamp = kwargs.get("proof_id") + for p in Proof.objects.filter(): + logger.error(p.timestamp) + proof = Proof.objects.filter(timestamp=timestamp).first() if not proof: return JsonResponse({}, status=404) @@ -31,6 +38,9 @@ class ProofView(View): '@context': ['https://ereuse.org/proof0.json'], 'data': data, } - return JsonResponse(d, status=200) + response = JsonResponse(d, status=200) + response["Access-Control-Allow-Origin"] = "*" + return response return JsonResponse({}, status=404) + -- 2.30.2 From e84b72c70b2183eea30c7c3dd4912e410e8ccbd7 Mon Sep 17 00:00:00 2001 From: Cayo Puigdefabregas Date: Thu, 28 Nov 2024 17:01:44 +0100 Subject: [PATCH 59/86] drop actions for dpp --- evidence/parse.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/evidence/parse.py b/evidence/parse.py index 618219e..fddabcf 100644 --- a/evidence/parse.py +++ b/evidence/parse.py @@ -117,6 +117,9 @@ class Build: self.device = self.json.get("device") self.components = self.json.get("components", []) + for c in self.components: + c.pop("actions", None) + device = self.get_id_hw_dpp(self.device) components = sorted(self.components, key=lambda x: x.get("type")) doc = [("computer", device)] @@ -162,7 +165,7 @@ class Build: return self.dmi.get("System")[0].get("SKU Number", "n/a").strip() def get_chassis(self): - return self.dmi.get("Chassis")[0].get("Type", '_virtual') # + return self.dmi.get("Chassis")[0].get("Type", '_virtual') # def get_version(self): return self.dmi.get("System")[0].get("Verson", '_virtual') -- 2.30.2 From 4954199610a402785e833d7c1583aa5bc8f0fd2d Mon Sep 17 00:00:00 2001 From: Cayo Puigdefabregas Date: Thu, 28 Nov 2024 17:13:21 +0100 Subject: [PATCH 60/86] drop actions for dpp --- evidence/parse.py | 1 + 1 file changed, 1 insertion(+) diff --git a/evidence/parse.py b/evidence/parse.py index fddabcf..9fd6960 100644 --- a/evidence/parse.py +++ b/evidence/parse.py @@ -117,6 +117,7 @@ class Build: self.device = self.json.get("device") self.components = self.json.get("components", []) + self.device.pop("actions", None) for c in self.components: c.pop("actions", None) -- 2.30.2 From ebabb6b228f20b4f1718b98d0dd09dc3a201eda4 Mon Sep 17 00:00:00 2001 From: Cayo Puigdefabregas Date: Thu, 28 Nov 2024 17:22:42 +0100 Subject: [PATCH 61/86] dpp for proofs --- dpp/urls.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dpp/urls.py b/dpp/urls.py index 772286a..8a8172d 100644 --- a/dpp/urls.py +++ b/dpp/urls.py @@ -1,7 +1,7 @@ from django.urls import path from dpp import views -app_name = 'dpp' +app_name = 'proofs' urlpatterns = [ path("/", views.ProofView.as_view(), name="proof"), -- 2.30.2 From 1e08f0fc0c1b5bddd7f2b1515ef88a04f9ec8123 Mon Sep 17 00:00:00 2001 From: Cayo Puigdefabregas Date: Thu, 28 Nov 2024 17:25:40 +0100 Subject: [PATCH 62/86] dpp for proofs --- dpp/urls.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dpp/urls.py b/dpp/urls.py index 8a8172d..772286a 100644 --- a/dpp/urls.py +++ b/dpp/urls.py @@ -1,7 +1,7 @@ from django.urls import path from dpp import views -app_name = 'proofs' +app_name = 'dpp' urlpatterns = [ path("/", views.ProofView.as_view(), name="proof"), -- 2.30.2 From 81e7ba267d47bad34b7cd19c66f07a98bcfdbdbc Mon Sep 17 00:00:00 2001 From: Cayo Puigdefabregas Date: Thu, 28 Nov 2024 18:48:50 +0100 Subject: [PATCH 63/86] fix call to proofs --- dpp/views.py | 44 +++++++++++++++++++++----------------------- 1 file changed, 21 insertions(+), 23 deletions(-) diff --git a/dpp/views.py b/dpp/views.py index 372bb17..fe0d6ed 100644 --- a/dpp/views.py +++ b/dpp/views.py @@ -1,11 +1,13 @@ +import json import logging + from django.views.generic.edit import View from django.http import JsonResponse -from evidence.xapian import search -from dpp.models import Proof from dpp.api_dlt import ALGORITHM - +from evidence.models import Evidence +from evidence.parse import Build +from dpp.models import Proof logger = logging.getLogger('django') @@ -20,27 +22,23 @@ class ProofView(View): proof = Proof.objects.filter(timestamp=timestamp).first() if not proof: return JsonResponse({}, status=404) - - ev_uuid = 'uuid:"{}"'.format(proof.uuid) - matches = search(None, ev_uuid, limit=1) - if not matches or matches.size() < 1: + + ev = Evidence(proof.uuid) + if not ev.doc: return JsonResponse({}, status=404) - for x in matches: - snap = x.document.get_data() - - data = { - "algorithm": ALGORITHM, - "document": snap - } + dev = Build(ev.doc, None, check=True) + doc = dev.get_phid() - d = { - '@context': ['https://ereuse.org/proof0.json'], - 'data': data, - } - response = JsonResponse(d, status=200) - response["Access-Control-Allow-Origin"] = "*" - return response - - return JsonResponse({}, status=404) + data = { + "algorithm": ALGORITHM, + "document": json.dumps(doc) + } + d = { + '@context': ['https://ereuse.org/proof0.json'], + 'data': data, + } + response = JsonResponse(d, status=200) + response["Access-Control-Allow-Origin"] = "*" + return response -- 2.30.2 From ba126491be91decef5fa4fcae005ef0ea38bfe6e Mon Sep 17 00:00:00 2001 From: Cayo Puigdefabregas Date: Thu, 28 Nov 2024 20:21:21 +0100 Subject: [PATCH 64/86] more debug --- dpp/views.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/dpp/views.py b/dpp/views.py index fe0d6ed..e8c2c18 100644 --- a/dpp/views.py +++ b/dpp/views.py @@ -16,12 +16,12 @@ class ProofView(View): def get(self, request, *args, **kwargs): timestamp = kwargs.get("proof_id") - for p in Proof.objects.filter(): - logger.error(p.timestamp) - proof = Proof.objects.filter(timestamp=timestamp).first() if not proof: return JsonResponse({}, status=404) + + logger.error(proof.type) + logger.error(proof.signature) ev = Evidence(proof.uuid) if not ev.doc: @@ -30,6 +30,8 @@ class ProofView(View): dev = Build(ev.doc, None, check=True) doc = dev.get_phid() + logger.error(doc) + data = { "algorithm": ALGORITHM, "document": json.dumps(doc) -- 2.30.2 From 25e7e855486bfd7860778d942ac41775d4ff7b86 Mon Sep 17 00:00:00 2001 From: Cayo Puigdefabregas Date: Thu, 28 Nov 2024 20:59:43 +0100 Subject: [PATCH 65/86] more and more debug --- dpp/views.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/dpp/views.py b/dpp/views.py index e8c2c18..a05382d 100644 --- a/dpp/views.py +++ b/dpp/views.py @@ -1,5 +1,6 @@ import json import logging +import hashlib from django.views.generic.edit import View from django.http import JsonResponse @@ -31,7 +32,9 @@ class ProofView(View): doc = dev.get_phid() logger.error(doc) - + hs = hashlib.sha3_256(json.dumps(doc).encode()).hexdigest() + logger.error(hs) + data = { "algorithm": ALGORITHM, "document": json.dumps(doc) -- 2.30.2 From 8e128557c0c696cddb30f11ba2c1e76091cadc5d Mon Sep 17 00:00:00 2001 From: pedro Date: Thu, 28 Nov 2024 21:14:32 +0100 Subject: [PATCH 66/86] bugfix attempt verifyProof co-authored with cayo --- evidence/parse.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/evidence/parse.py b/evidence/parse.py index 9fd6960..31b12af 100644 --- a/evidence/parse.py +++ b/evidence/parse.py @@ -205,6 +205,6 @@ class Build: def register_device_dlt(self): chid = self.algorithms.get('legacy_dpp') - phid = self.get_signature(json.dumps(self.get_phid())) + phid = self.get_signature(self.get_phid()) register_device_dlt(chid, phid, self.uuid, self.user) register_passport_dlt(chid, phid, self.uuid, self.user) -- 2.30.2 From bf7975bc243a530bd176c767cb4c02180e3e1ad8 Mon Sep 17 00:00:00 2001 From: Cayo Puigdefabregas Date: Thu, 28 Nov 2024 21:24:53 +0100 Subject: [PATCH 67/86] debug timestamp --- dpp/api_dlt.py | 1 + 1 file changed, 1 insertion(+) diff --git a/dpp/api_dlt.py b/dpp/api_dlt.py index 4d869e2..caee073 100644 --- a/dpp/api_dlt.py +++ b/dpp/api_dlt.py @@ -80,6 +80,7 @@ def save_proof(signature, ev_uuid, result, proof_type, user): if result['Status'] == STATUS_CODE.get("Success"): timestamp = result.get('Data', {}).get('data', {}).get('timestamp') + logger.error("timestamp: %s", timestamp) if not timestamp: return -- 2.30.2 From 3f5460b81f28efdea1bcff8f8309078b6a0777a4 Mon Sep 17 00:00:00 2001 From: Cayo Puigdefabregas Date: Fri, 29 Nov 2024 15:48:48 +0100 Subject: [PATCH 68/86] fix did dpp --- did/views.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/did/views.py b/did/views.py index 2c834ea..efeb673 100644 --- a/did/views.py +++ b/did/views.py @@ -133,7 +133,7 @@ class PublicDeviceWebView(TemplateView): dev = Build(d.doc, None, check=True) doc = dev.get_phid() ev = json.dumps(doc) - phid = dev.get_signature(ev) + phid = dev.get_signature(doc) dpp = "{}:{}".format(self.pk, phid) rr = { 'dpp': dpp, -- 2.30.2 From a3dd5d9639f9fe19a4ed028658e8d8510c7e3980 Mon Sep 17 00:00:00 2001 From: Cayo Puigdefabregas Date: Fri, 29 Nov 2024 16:00:10 +0100 Subject: [PATCH 69/86] fix register dpp --- dpp/api_dlt.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dpp/api_dlt.py b/dpp/api_dlt.py index caee073..61032c9 100644 --- a/dpp/api_dlt.py +++ b/dpp/api_dlt.py @@ -65,7 +65,7 @@ def register_dlt(api, chid, phid, proof_type=None): def issuer_dpp_dlt(api, dpp): - phid = dpp.split(":")[0] + phid = dpp.split(":")[1] return api.issue_passport( dpp, -- 2.30.2 From 09be1a2f74a17eac70f095789e4ed2bb015dafa5 Mon Sep 17 00:00:00 2001 From: Cayo Puigdefabregas Date: Fri, 29 Nov 2024 17:23:44 +0100 Subject: [PATCH 70/86] drop loggers --- dpp/api_dlt.py | 2 +- dpp/views.py | 9 --------- 2 files changed, 1 insertion(+), 10 deletions(-) diff --git a/dpp/api_dlt.py b/dpp/api_dlt.py index 61032c9..5360eea 100644 --- a/dpp/api_dlt.py +++ b/dpp/api_dlt.py @@ -80,10 +80,10 @@ def save_proof(signature, ev_uuid, result, proof_type, user): if result['Status'] == STATUS_CODE.get("Success"): timestamp = result.get('Data', {}).get('data', {}).get('timestamp') - logger.error("timestamp: %s", timestamp) if not timestamp: return + logger.debug("timestamp: %s", timestamp) d = { "type": proof_type, "timestamp": timestamp, diff --git a/dpp/views.py b/dpp/views.py index a05382d..13753c2 100644 --- a/dpp/views.py +++ b/dpp/views.py @@ -10,8 +10,6 @@ from evidence.models import Evidence from evidence.parse import Build from dpp.models import Proof -logger = logging.getLogger('django') - class ProofView(View): @@ -21,9 +19,6 @@ class ProofView(View): if not proof: return JsonResponse({}, status=404) - logger.error(proof.type) - logger.error(proof.signature) - ev = Evidence(proof.uuid) if not ev.doc: return JsonResponse({}, status=404) @@ -31,10 +26,6 @@ class ProofView(View): dev = Build(ev.doc, None, check=True) doc = dev.get_phid() - logger.error(doc) - hs = hashlib.sha3_256(json.dumps(doc).encode()).hexdigest() - logger.error(hs) - data = { "algorithm": ALGORITHM, "document": json.dumps(doc) -- 2.30.2 From f7051c313059b0a074b9e071b3fd4f85f44b464d Mon Sep 17 00:00:00 2001 From: Cayo Puigdefabregas Date: Wed, 4 Dec 2024 18:25:16 +0100 Subject: [PATCH 71/86] convert jsonld in credentials for dpps --- did/template_credential.py | 41 +++++++++++++++++++++++++ did/views.py | 61 +++++++++++++++++++++----------------- requirements.txt | 2 +- 3 files changed, 76 insertions(+), 28 deletions(-) create mode 100644 did/template_credential.py diff --git a/did/template_credential.py b/did/template_credential.py new file mode 100644 index 0000000..0af0fae --- /dev/null +++ b/did/template_credential.py @@ -0,0 +1,41 @@ +dpp_tmpl = { + "@context": [ + "https://www.w3.org/ns/credentials/v2", + "https://test.uncefact.org/vocabulary/untp/dpp/0.5.0/" + ], + "type": [ + "DigitalProductPassport", + "VerifiableCredential" + ], + "id": "https://example.ereuse.org/credentials/2a423366-a0d6-4855-ba65-2e0c926d09b0", + "issuer": { + "type": [ + "CredentialIssuer" + ], + "id": "did:web:r1.identifiers.ereuse.org:did-registry:z6Mkoreij5y9bD9fL5SGW6TfMUmcbaV7LCPwZHCFEEZBrVYQ#z6Mkoreij5y9bD9fL5SGW6TfMUmcbaV7LCPwZHCFEEZBrVYQ", + "name": "Refurbisher One" + }, + "validFrom": "2024-11-15T12:00:00", + "validUntil": "2034-11-15T12:00:00", + "credentialSubject": { + "type": [ + "Product" + ], + "id": "https://id.ereuse.org/01/09520123456788/21/12345", + "name": "Refurbished XYZ Lenovo laptop item", + "registeredId": "09520123456788.21.12345", + "description": "XYZ Lenovo laptop refurbished by Refurbisher One", + "data": "" + }, + "credentialSchema": { + "id": "https://idhub.pangea.org/vc_schemas/dpp.json", + "type": "FullJsonSchemaValidator2021", + "proof": { + "type": "Ed25519Signature2018", + "proofPurpose": "assertionMethod", + "verificationMethod": "did:web:r1.identifiers.ereuse.org:did-registry:z6Mkoreij5y9bD9fL5SGW6TfMUmcbaV7LCPwZHCFEEZBrVYQ#z6Mkoreij5y9bD9fL5SGW6TfMUmcbaV7LCPwZHCFEEZBrVYQ", + "created": "2024-12-03T15:33:42Z", + "jws": "eyJhbGciOiJFZERTQSIsImNyaXQiOlsiYjY0Il0sImI2NCI6ZmFsc2V9..rBPqbOcZCXB7GAnq1XIfV9Jvw4MKXlHff7qZkRfgwQ0Hnd9Ujt5s1xT4O0K6VESzWvdP2mOvMvu780fVNfraBQ" + } + } +} diff --git a/did/views.py b/did/views.py index efeb673..e0a59e6 100644 --- a/did/views.py +++ b/did/views.py @@ -8,6 +8,7 @@ from evidence.parse import Build from dpp.api_dlt import ALGORITHM from dpp.models import Proof from dpp.api_dlt import PROOF_TYPE +from did.template_credential import dpp_tmpl logger = logging.getLogger('django') @@ -89,43 +90,46 @@ class PublicDeviceWebView(TemplateView): return response def get_result(self): - components = [] + + if len(self.pk.split(":")) > 1: + return self.build_from_dpp() + else: + return self.build_from_chid() + + def build_from_dpp(self): data = { 'document': {}, 'dpp': self.pk, 'algorithm': ALGORITHM, - 'components': components, + 'components': [], 'manufacturer DPP': '', 'device': {}, } - result = { - '@context': ['https://ereuse.org/dpp0.json'], - 'data': data, - } + dev = Build(self.object.last_evidence.doc, None, check=True) + doc = dev.get_phid() + data['document'] = json.dumps(doc) + data['device'] = dev.device + data['components'] = dev.components - if len(self.pk.split(":")) > 1: - dev = Build(self.object.last_evidence.doc, None, check=True) - doc = dev.get_phid() - data['document'] = json.dumps(doc) - data['device'] = dev.device - data['components'] = dev.components + self.object.get_evidences() + last_dpp = Proof.objects.filter( + uuid__in=self.object.uuids, type=PROOF_TYPE['IssueDPP'] + ).order_by("-timestamp").first() - self.object.get_evidences() - last_dpp = Proof.objects.filter( - uuid__in=self.object.uuids, type=PROOF_TYPE['IssueDPP'] - ).order_by("-timestamp").first() + key = self.pk + if last_dpp: + key = last_dpp.signature - key = self.pk - if last_dpp: - key = last_dpp.signature - - url = "https://{}/did/{}".format( - self.request.get_host(), - key - ) - data['url_last'] = url - return result + url = "https://{}/did/{}".format( + self.request.get_host(), + key + ) + data['url_last'] = url + tmpl = dpp_tmpl.copy() + tmpl["credentialSubject"]["data"] = data + return tmpl + def build_from_chid(self): dpps = [] self.object.initial() for d in self.object.evidences: @@ -144,7 +148,10 @@ class PublicDeviceWebView(TemplateView): 'components': dev.components } - dpps.append(rr) + tmpl = dpp_tmpl.copy() + tmpl["credentialSubject"]["data"] = rr + + dpps.append(tmpl) return { '@context': ['https://ereuse.org/dpp0.json'], 'data': dpps, diff --git a/requirements.txt b/requirements.txt index 33a93f7..52409e6 100644 --- a/requirements.txt +++ b/requirements.txt @@ -12,5 +12,5 @@ odfpy==1.4.1 pytz==2024.2 json-repair==0.30.0 setuptools==75.5.0 -requests==2.32.3 +requests==2.32.3 wheel==0.45.0 -- 2.30.2 From 14277c17cb46c5c089572230321c65ab43f824d1 Mon Sep 17 00:00:00 2001 From: Cayo Puigdefabregas Date: Thu, 5 Dec 2024 10:54:41 +0100 Subject: [PATCH 72/86] activate/deactivate DPP from env --- device/templates/details.html | 10 +++++++--- device/views.py | 18 ++++++++++-------- dhub/settings.py | 7 +++++-- dhub/urls.py | 10 +++++++--- evidence/parse.py | 28 +++++++--------------------- evidence/views.py | 2 +- 6 files changed, 37 insertions(+), 38 deletions(-) diff --git a/device/templates/details.html b/device/templates/details.html index 8f640cd..af6ce7c 100644 --- a/device/templates/details.html +++ b/device/templates/details.html @@ -29,9 +29,11 @@ + {% if dpps %} + {% endif %} @@ -239,7 +241,8 @@ {% endfor %}
- + + {% if dpps %}
{% trans 'List of dpps' %}
@@ -256,6 +259,7 @@ {% endfor %}
+ {% endif %}
{% endblock %} @@ -264,12 +268,12 @@ document.addEventListener('DOMContentLoaded', function () { // Obtener el hash de la URL (ejemplo: #components) const hash = window.location.hash - + // Verificar si hay un hash en la URL if (hash) { // Buscar el botón o enlace que corresponde al hash y activarlo const tabTrigger = document.querySelector(`[data-bs-target="${hash}"]`) - + if (tabTrigger) { // Crear una instancia de tab de Bootstrap para activar el tab const tab = new bootstrap.Tab(tabTrigger) diff --git a/device/views.py b/device/views.py index c7c2b1f..3baa054 100644 --- a/device/views.py +++ b/device/views.py @@ -1,6 +1,5 @@ from django.http import JsonResponse - -from django.http import Http404 +from django.conf import settings from django.urls import reverse_lazy from django.shortcuts import get_object_or_404, Http404 from django.utils.translation import gettext_lazy as _ @@ -13,10 +12,11 @@ from django.views.generic.base import TemplateView from dashboard.mixins import DashboardView, Http403 from evidence.models import Annotation from lot.models import LotTag -from dpp.models import Proof -from dpp.api_dlt import PROOF_TYPE from device.models import Device from device.forms import DeviceFormSet +if settings.DPP: + from dpp.models import Proof + from dpp.api_dlt import PROOF_TYPE class NewDeviceView(DashboardView, FormView): @@ -104,10 +104,12 @@ class DetailsView(DashboardView, TemplateView): context = super().get_context_data(**kwargs) self.object.initial() lot_tags = LotTag.objects.filter(owner=self.request.user.institution) - dpps = Proof.objects.filter( - uuid__in=self.object.uuids, - type=PROOF_TYPE["IssueDPP"] - ) + dpps = [] + if settings.DPP: + dpps = Proof.objects.filter( + uuid__in=self.object.uuids, + type=PROOF_TYPE["IssueDPP"] + ) context.update({ 'object': self.object, 'snapshot': self.object.get_last_evidence(), diff --git a/dhub/settings.py b/dhub/settings.py index a30ab2b..2aca54e 100644 --- a/dhub/settings.py +++ b/dhub/settings.py @@ -89,10 +89,13 @@ INSTALLED_APPS = [ "dashboard", "admin", "api", - "dpp", - "did", ] +DPP = config("DPP", default=False, cast=bool) + +if DPP: + INSTALLED_APPS.extend(["dpp", "did"]) + MIDDLEWARE = [ "django.middleware.security.SecurityMiddleware", diff --git a/dhub/urls.py b/dhub/urls.py index d070a15..0b77144 100644 --- a/dhub/urls.py +++ b/dhub/urls.py @@ -14,7 +14,7 @@ Including another URLconf 1. Import the include() function: from django.urls import include, path 2. Add a URL to urlpatterns: path('blog/', include('blog.urls')) """ - +from django.conf import settings from django.urls import path, include urlpatterns = [ @@ -27,6 +27,10 @@ urlpatterns = [ path("user/", include("user.urls")), path("lot/", include("lot.urls")), path('api/', include('api.urls')), - path('dpp/', include('dpp.urls')), - path('did/', include('did.urls')), ] + +if settings.DPP: + urlpatterns.extend([ + path('dpp/', include('dpp.urls')), + path('did/', include('did.urls')), + ]) diff --git a/evidence/parse.py b/evidence/parse.py index 31b12af..2f67df6 100644 --- a/evidence/parse.py +++ b/evidence/parse.py @@ -9,6 +9,11 @@ from evidence.models import Annotation from evidence.xapian import index from dpp.api_dlt import register_device_dlt, register_passport_dlt from evidence.parse_details import get_inxi_key, get_inxi +from django.conf import settings + +if settings.DPP: + from dpp.api_dlt import register_device_dlt, register_passport_dlt + logger = logging.getLogger('django') @@ -49,7 +54,8 @@ class Build: self.index() self.create_annotations() - self.register_device_dlt() + if settings.DPP: + self.register_device_dlt() def index(self): snap = json.dumps(self.evidence) @@ -152,26 +158,6 @@ class Build: value=v ) -<<<<<<< HEAD -======= - def get_chassis_dh(self): - chassis = self.get_chassis() - lower_type = chassis.lower() - for k, v in CHASSIS_DH.items(): - if lower_type in v: - return k - return self.default - - def get_sku(self): - return self.dmi.get("System")[0].get("SKU Number", "n/a").strip() - - def get_chassis(self): - return self.dmi.get("Chassis")[0].get("Type", '_virtual') # - - def get_version(self): - return self.dmi.get("System")[0].get("Verson", '_virtual') - ->>>>>>> 5949049 (new document and out device and components) def get_hid(self, snapshot): try: self.inxi = self.json["data"]["inxi"] diff --git a/evidence/views.py b/evidence/views.py index dabcd9d..c2868b2 100644 --- a/evidence/views.py +++ b/evidence/views.py @@ -137,7 +137,7 @@ class DownloadEvidenceView(DashboardView, TemplateView): evidence.get_doc() data = json.dumps(evidence.doc) response = HttpResponse(data, content_type="application/json") - response['Content-Disposition'] = 'attachment; filename={}'.format("credential.json") + response['Content-Disposition'] = 'attachment; filename={}'.format("evidence.json") return response -- 2.30.2 From 07c25f4a92c02bea891b8cfb4a069cd8c1e0267a Mon Sep 17 00:00:00 2001 From: pedro Date: Wed, 11 Dec 2024 11:16:32 +0100 Subject: [PATCH 73/86] propagate DPP env var to docker --- .env.example | 1 + docker-compose.yml | 1 + 2 files changed, 2 insertions(+) diff --git a/.env.example b/.env.example index ed60e95..d8fed15 100644 --- a/.env.example +++ b/.env.example @@ -3,6 +3,7 @@ DEMO=true # note that with DEBUG=true, logs are more verbose (include tracebacks) DEBUG=true ALLOWED_HOSTS=localhost,localhost:8000,127.0.0.1, +DPP=false STATIC_ROOT=/tmp/static/ MEDIA_ROOT=/tmp/media/ diff --git a/docker-compose.yml b/docker-compose.yml index 9b82d7d..9a156c7 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -9,6 +9,7 @@ services: - ALLOWED_HOSTS=${ALLOWED_HOSTS:-$DOMAIN} - DEMO=${DEMO:-false} - PREDEFINED_TOKEN=${PREDEFINED_TOKEN:-} + - DPP=${DPP:-false} volumes: - .:/opt/devicehub-django ports: -- 2.30.2 From d429485651def082cd1023c7d8c0a344b9bffad0 Mon Sep 17 00:00:00 2001 From: pedro Date: Wed, 11 Dec 2024 11:23:35 +0100 Subject: [PATCH 74/86] docker entrypoint: adapt it to DPP env var --- docker/devicehub-django.entrypoint.sh | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/docker/devicehub-django.entrypoint.sh b/docker/devicehub-django.entrypoint.sh index de19a4d..73a0f19 100644 --- a/docker/devicehub-django.entrypoint.sh +++ b/docker/devicehub-django.entrypoint.sh @@ -34,7 +34,7 @@ gen_env_vars() { ADMIN='True' PREDEFINED_TOKEN="${PREDEFINED_TOKEN:-}" # specific dpp env vars - if [ "${DPP_MODULE}" = 'y' ]; then + if [ "${DPP}" = 'true' ]; then # fill env vars in this docker entrypoint wait_for_dpp_shared export API_DLT='http://api_connector:3010' @@ -129,11 +129,12 @@ config_phase() { # TODO: one error on add_user, and you don't add user anymore ./manage.py add_user "${INIT_ORG}" "${INIT_USER}" "${INIT_PASSWD}" "${ADMIN}" "${PREDEFINED_TOKEN}" - if [ "${DPP_MODULE}" = 'y' ]; then + if [ "${DPP}" = 'true' ]; then # 12, 13, 14 config_dpp_part1 # cleanup other spnapshots and copy dlt/dpp snapshots + # TODO make this better rm example/snapshots/* cp example/dpp-snapshots/*.json example/snapshots/ fi -- 2.30.2 From 85bae67189479b5323a3a08a81c86d21f35b8a77 Mon Sep 17 00:00:00 2001 From: pedro Date: Wed, 11 Dec 2024 11:25:35 +0100 Subject: [PATCH 75/86] docker entrypoint: bugfix when DPP env var unbound --- docker/devicehub-django.entrypoint.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docker/devicehub-django.entrypoint.sh b/docker/devicehub-django.entrypoint.sh index 73a0f19..d6d7bb2 100644 --- a/docker/devicehub-django.entrypoint.sh +++ b/docker/devicehub-django.entrypoint.sh @@ -34,7 +34,7 @@ gen_env_vars() { ADMIN='True' PREDEFINED_TOKEN="${PREDEFINED_TOKEN:-}" # specific dpp env vars - if [ "${DPP}" = 'true' ]; then + if [ "${DPP:-}" = 'true' ]; then # fill env vars in this docker entrypoint wait_for_dpp_shared export API_DLT='http://api_connector:3010' @@ -129,7 +129,7 @@ config_phase() { # TODO: one error on add_user, and you don't add user anymore ./manage.py add_user "${INIT_ORG}" "${INIT_USER}" "${INIT_PASSWD}" "${ADMIN}" "${PREDEFINED_TOKEN}" - if [ "${DPP}" = 'true' ]; then + if [ "${DPP:-}" = 'true' ]; then # 12, 13, 14 config_dpp_part1 -- 2.30.2 From d1abb206e893372b7bdcbb12c8139da70efe83fb Mon Sep 17 00:00:00 2001 From: Cayo Puigdefabregas Date: Fri, 15 Nov 2024 12:47:08 +0100 Subject: [PATCH 76/86] add inxi in parsing and show in details of devs --- evidence/models.py | 35 +++++++++++++++++------------------ evidence/parse.py | 1 - 2 files changed, 17 insertions(+), 19 deletions(-) diff --git a/evidence/models.py b/evidence/models.py index b410795..6b6069c 100644 --- a/evidence/models.py +++ b/evidence/models.py @@ -63,7 +63,7 @@ class Evidence: def get_phid(self): if not self.doc: self.get_doc() - + return hashlib.sha3_256(json.dumps(self.doc)).hexdigest() def get_doc(self): @@ -89,26 +89,23 @@ class Evidence: self.inxi = ev["output"] else: dmidecode_raw = self.doc["data"]["dmidecode"] + inxi_raw = self.doc["data"]["inxi"] + self.dmi = DMIParse(dmidecode_raw) try: - self.inxi = json.loads(self.doc["data"]["inxi"]) + self.inxi = json.loads(inxi_raw) + machine = get_inxi_key(self.inxi, 'Machine') + for m in machine: + system = get_inxi(m, "System") + if system: + self.device_manufacturer = system + self.device_model = get_inxi(m, "product") + self.device_serial_number = get_inxi(m, "serial") + self.device_chassis = get_inxi(m, "Type") + self.device_version = get_inxi(m, "v") + except Exception: return - self.dmi = DMIParse(dmidecode_raw) - try: - machine = get_inxi_key(self.inxi, 'Machine') - for m in machine: - system = get_inxi(m, "System") - if system: - self.device_manufacturer = system - self.device_model = get_inxi(m, "product") - self.device_serial_number = get_inxi(m, "serial") - self.device_chassis = get_inxi(m, "Type") - self.device_version = get_inxi(m, "v") - - except Exception: - return - def get_time(self): if not self.doc: self.get_doc() @@ -160,6 +157,9 @@ class Evidence: if self.inxi: return self.device_chassis + if self.inxi: + return self.device_chassis + chassis = self.dmi.get("Chassis")[0].get("Type", '_virtual') lower_type = chassis.lower() @@ -177,7 +177,6 @@ class Evidence: return self.dmi.serial_number().strip() - def get_version(self): if self.inxi: return self.device_version diff --git a/evidence/parse.py b/evidence/parse.py index 2f67df6..8e52a09 100644 --- a/evidence/parse.py +++ b/evidence/parse.py @@ -14,7 +14,6 @@ from django.conf import settings if settings.DPP: from dpp.api_dlt import register_device_dlt, register_passport_dlt - logger = logging.getLogger('django') -- 2.30.2 From 5d190d07a37afdf82f4f7e3cb3fcd6a4cca624ff Mon Sep 17 00:00:00 2001 From: Cayo Puigdefabregas Date: Thu, 12 Dec 2024 17:11:05 +0100 Subject: [PATCH 77/86] fix rebase from main --- evidence/forms.py | 12 ++++++------ evidence/models.py | 11 +++++++---- evidence/parse.py | 16 ++-------------- 3 files changed, 15 insertions(+), 24 deletions(-) diff --git a/evidence/forms.py b/evidence/forms.py index 83d9e6b..8be2887 100644 --- a/evidence/forms.py +++ b/evidence/forms.py @@ -29,17 +29,17 @@ class UploadForm(forms.Form): try: file_json = json.loads(file_data) - Build(file_json, None, check=True) + snap = Build(file_json, None, check=True) exist_annotation = Annotation.objects.filter( - uuid=file_json['uuid'] + uuid=snap.uuid ).first() - + if exist_annotation: - raise ValidationError( + raise ValidationError( _("The snapshot already exists"), code="duplicate_snapshot", ) - + #Catch any error and display it as Validation Error so the Form handles it except Exception as e: raise ValidationError( @@ -221,7 +221,7 @@ class EraseServerForm(forms.Form): if self.instance: return - + Annotation.objects.create( uuid=self.uuid, type=Annotation.Type.ERASE_SERVER, diff --git a/evidence/models.py b/evidence/models.py index 6b6069c..a10de01 100644 --- a/evidence/models.py +++ b/evidence/models.py @@ -68,8 +68,11 @@ class Evidence: def get_doc(self): self.doc = {} + self.inxi = None + if not self.owner: self.get_owner() + qry = 'uuid:"{}"'.format(self.uuid) matches = search(self.owner, qry, limit=1) if matches and matches.size() < 0: @@ -93,6 +96,10 @@ class Evidence: self.dmi = DMIParse(dmidecode_raw) try: self.inxi = json.loads(inxi_raw) + except Exception: + pass + if self.inxi: + try: machine = get_inxi_key(self.inxi, 'Machine') for m in machine: system = get_inxi(m, "System") @@ -102,7 +109,6 @@ class Evidence: self.device_serial_number = get_inxi(m, "serial") self.device_chassis = get_inxi(m, "Type") self.device_version = get_inxi(m, "v") - except Exception: return @@ -157,9 +163,6 @@ class Evidence: if self.inxi: return self.device_chassis - if self.inxi: - return self.device_chassis - chassis = self.dmi.get("Chassis")[0].get("Type", '_virtual') lower_type = chassis.lower() diff --git a/evidence/parse.py b/evidence/parse.py index 8e52a09..db2d32d 100644 --- a/evidence/parse.py +++ b/evidence/parse.py @@ -7,7 +7,6 @@ from evidence.parse_details import ParseSnapshot from evidence.models import Annotation from evidence.xapian import index -from dpp.api_dlt import register_device_dlt, register_passport_dlt from evidence.parse_details import get_inxi_key, get_inxi from django.conf import settings @@ -78,27 +77,16 @@ class Build: sku = device.get("sku", '') hid = f"{manufacturer}{model}{chassis}{serial_number}{sku}" - self.chid = hashlib.sha3_256(hid.encode()).hexdigest() return self.chid def get_chid_dpp(self): if self.json.get("software") == "workbench-script": - dmidecode_raw = self.json["data"]["dmidecode"] - dmi = DMIParse(dmidecode_raw) - - manufacturer = dmi.manufacturer().strip() - model = dmi.model().strip() - chassis = self.get_chassis_dh() - serial_number = dmi.serial_number() - sku = self.get_sku() - typ = chassis - version = self.get_version() - hid = f"{manufacturer}{model}{chassis}{serial_number}{sku}{typ}{version}" + device = ParseSnapshot(self.json).device else: device = self.json['device'] - hid = self.get_id_hw_dpp(device) + hid = self.get_id_hw_dpp(device) self.chid = hashlib.sha3_256(hid.encode("utf-8")).hexdigest() return self.chid -- 2.30.2 From 3fb0961815b2e3c421217316fafe2c65959f1f0e Mon Sep 17 00:00:00 2001 From: sergiogimenez Date: Mon, 16 Dec 2024 09:01:05 +0100 Subject: [PATCH 78/86] Add both impact and dpp in the view context --- device/views.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/device/views.py b/device/views.py index a5d1f3b..3c66d30 100644 --- a/device/views.py +++ b/device/views.py @@ -115,8 +115,8 @@ class DetailsView(DashboardView, TemplateView): 'object': self.object, 'snapshot': self.object.get_last_evidence(), 'lot_tags': lot_tags, - 'impact': get_device_environmental_impact() - 'dpps': dpps, + 'impact': get_device_environmental_impact(), + 'dpps': dpps }) return context @@ -180,6 +180,7 @@ class PublicDeviceWebView(TemplateView): class ExportEnvironmentalImpactPDF(DashboardView, TemplateView): pass + class AddAnnotationView(DashboardView, CreateView): template_name = "new_annotation.html" title = _("New annotation") -- 2.30.2 From f9c9c9dd7c071c0a7033316a7ef2aae3fd63d8fa Mon Sep 17 00:00:00 2001 From: sergiogimenez Date: Tue, 17 Dec 2024 09:58:20 +0100 Subject: [PATCH 79/86] Very initial impleentation of co2 consumption --- device/environmental_impact/calculator.py | 10 -- device/templates/details.html | 115 ++++++++++-------- device/urls.py | 5 +- device/views.py | 8 +- dhub/settings.py | 1 + .../__init__.py | 0 environmental_impact/admin.py | 3 + environmental_impact/apps.py | 6 + environmental_impact/calculator.py | 30 +++++ environmental_impact/migrations/__init__.py | 0 environmental_impact/models.py | 3 + environmental_impact/tests.py | 3 + environmental_impact/views.py | 3 + 13 files changed, 119 insertions(+), 68 deletions(-) delete mode 100644 device/environmental_impact/calculator.py rename {device/environmental_impact => environmental_impact}/__init__.py (100%) create mode 100644 environmental_impact/admin.py create mode 100644 environmental_impact/apps.py create mode 100644 environmental_impact/calculator.py create mode 100644 environmental_impact/migrations/__init__.py create mode 100644 environmental_impact/models.py create mode 100644 environmental_impact/tests.py create mode 100644 environmental_impact/views.py diff --git a/device/environmental_impact/calculator.py b/device/environmental_impact/calculator.py deleted file mode 100644 index dd79432..0000000 --- a/device/environmental_impact/calculator.py +++ /dev/null @@ -1,10 +0,0 @@ -from dataclasses import dataclass - - -@dataclass -class EnvironmentalImpact: - carbon_saved: float - - -def get_device_environmental_impact() -> EnvironmentalImpact: - return EnvironmentalImpact(carbon_saved=225.0) diff --git a/device/templates/details.html b/device/templates/details.html index 0a843b7..e881bc4 100644 --- a/device/templates/details.html +++ b/device/templates/details.html @@ -29,16 +29,16 @@ - {% if dpps %} - - {% endif %} + {% if dpps %} + + {% endif %}
@@ -244,15 +244,15 @@ {% endfor %}
-
+ +
- + - {% trans 'Export to PDF' %} - + {% trans 'Export to PDF' %} +
- {% comment %}
Environmental Impact Assessment
{% endcomment %}
@@ -267,40 +267,59 @@
- {% comment %}
+ +
+
+
+
+ +
+
Carbon Consumed
+

{{ impact.co2_emissions }}

+

kg CO₂e consumed

+
+
+
+ +
-
Whatever other metric we might wanna show
+
Additional Impact Metric

85%

whatever

-
{% endcomment %} -
-
-
Impact Details
+
+
-
- - - - - - - -
Manufacturing Impact Avoided - {{ impact.carbon_saved }} kg CO₂e -
- Based on average laptop manufacturing emissions -
-
+
+
+
+
+
Impact Details
+
+ + + + + + + +
Manufacturing Impact Avoided + {{ impact.carbon_saved }} kg CO₂e +
+ Based on average laptop manufacturing emissions +
+
-
-
Calculation Method
- Based on industry standards X Y and Z +
+
Calculation Method
+ Based on industry standards X Y and Z +
+
@@ -308,22 +327,22 @@
{% if dpps %} -
-
{% trans 'List of dpps' %}
-
- {% for d in dpps %} -
-
- {{ d.timestamp }} - {{ d.type }} +
+
{% trans 'List of dpps' %}
+
+ {% for d in dpps %} +
+
+ {{ d.timestamp }} + {{ d.type }} +
+

+ {{ d.signature }} +

-

- {{ d.signature }} -

-
- {% endfor %} + {% endfor %} +
-
{% endif %}
{% endblock %} diff --git a/device/urls.py b/device/urls.py index 78922c1..9d38ff5 100644 --- a/device/urls.py +++ b/device/urls.py @@ -9,8 +9,5 @@ urlpatterns = [ path("/", views.DetailsView.as_view(), name="details"), path("/annotation/add", views.AddAnnotationView.as_view(), name="add_annotation"), path("/document/add", views.AddDocumentView.as_view(), name="add_document"), - path("/public/", views.PublicDeviceWebView.as_view(), name="device_web"), - path('/export-environmental-impact-pdf/', - views.ExportEnvironmentalImpactPDF.as_view(), name='export_environmental_impact_pdf'), - + path("/public/", views.PublicDeviceWebView.as_view(), name="device_web") ] diff --git a/device/views.py b/device/views.py index c8ab8ed..13bb273 100644 --- a/device/views.py +++ b/device/views.py @@ -14,7 +14,7 @@ from evidence.models import Annotation from lot.models import LotTag from device.models import Device from device.forms import DeviceFormSet -from device.environmental_impact.calculator import get_device_environmental_impact +from environmental_impact.calculator import get_device_environmental_impact if settings.DPP: from dpp.models import Proof from dpp.api_dlt import PROOF_TYPE @@ -115,7 +115,7 @@ class DetailsView(DashboardView, TemplateView): 'object': self.object, 'snapshot': self.object.get_last_evidence(), 'lot_tags': lot_tags, - 'impact': get_device_environmental_impact(), + 'impact': get_device_environmental_impact(self.object), 'dpps': dpps, }) return context @@ -177,10 +177,6 @@ class PublicDeviceWebView(TemplateView): return JsonResponse(device_data) -class ExportEnvironmentalImpactPDF(DashboardView, TemplateView): - pass - - class AddAnnotationView(DashboardView, CreateView): template_name = "new_annotation.html" title = _("New annotation") diff --git a/dhub/settings.py b/dhub/settings.py index 2aca54e..682299e 100644 --- a/dhub/settings.py +++ b/dhub/settings.py @@ -89,6 +89,7 @@ INSTALLED_APPS = [ "dashboard", "admin", "api", + "environmental_impact" ] DPP = config("DPP", default=False, cast=bool) diff --git a/device/environmental_impact/__init__.py b/environmental_impact/__init__.py similarity index 100% rename from device/environmental_impact/__init__.py rename to environmental_impact/__init__.py diff --git a/environmental_impact/admin.py b/environmental_impact/admin.py new file mode 100644 index 0000000..8c38f3f --- /dev/null +++ b/environmental_impact/admin.py @@ -0,0 +1,3 @@ +from django.contrib import admin + +# Register your models here. diff --git a/environmental_impact/apps.py b/environmental_impact/apps.py new file mode 100644 index 0000000..5d0d987 --- /dev/null +++ b/environmental_impact/apps.py @@ -0,0 +1,6 @@ +from django.apps import AppConfig + + +class EnvironmentalImpactConfig(AppConfig): + default_auto_field = "django.db.models.BigAutoField" + name = "environmental_impact" \ No newline at end of file diff --git a/environmental_impact/calculator.py b/environmental_impact/calculator.py new file mode 100644 index 0000000..a348b6b --- /dev/null +++ b/environmental_impact/calculator.py @@ -0,0 +1,30 @@ +from dataclasses import dataclass +from device.models import Device + + +@dataclass +class EnvironmentalImpact: + carbon_saved: float = 0.0 + co2_emissions: float = 0.0 + + +def get_device_environmental_impact(device: Device) -> EnvironmentalImpact: + avg_watts = 40 # Arbitrary laptop average consumption + power_on_hours = get_power_on_hours_from(device) + energy_kwh = (power_on_hours * avg_watts) / 1000 + # CO2 emissions based on global average electricity mix + co2_per_kwh = 0.475 + co2_emissions = energy_kwh * co2_per_kwh + return EnvironmentalImpact(co2_emissions=co2_emissions) + + +def get_power_on_hours_from(device: Device) -> int: + storage_components = device.components[9] + str_time = storage_components.get('time of used', -1) + uptime_in_hours = convert_str_time_to_hours(str_time) + return uptime_in_hours + + +def convert_str_time_to_hours(time_str: str) -> int: + multipliers = {'y': 365 * 24, 'd': 24, 'h': 1} + return sum(int(part[:-1]) * multipliers[part[-1]] for part in time_str.split()) diff --git a/environmental_impact/migrations/__init__.py b/environmental_impact/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/environmental_impact/models.py b/environmental_impact/models.py new file mode 100644 index 0000000..71a8362 --- /dev/null +++ b/environmental_impact/models.py @@ -0,0 +1,3 @@ +from django.db import models + +# Create your models here. diff --git a/environmental_impact/tests.py b/environmental_impact/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/environmental_impact/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/environmental_impact/views.py b/environmental_impact/views.py new file mode 100644 index 0000000..91ea44a --- /dev/null +++ b/environmental_impact/views.py @@ -0,0 +1,3 @@ +from django.shortcuts import render + +# Create your views here. -- 2.30.2 From bd4f6b7d56516c1abf91428d37496d6cfafc545f Mon Sep 17 00:00:00 2001 From: sergiogimenez Date: Tue, 7 Jan 2025 08:06:29 +0100 Subject: [PATCH 80/86] f31: Initial implementation for environmental impact calculator --- device/views.py | 9 +++- environmental_impact/algorithms/__init__.py | 0 .../algorithms/algorithm_factory.py | 30 +++++++++++++ .../algorithms/algorithm_interface.py | 11 +++++ .../algorithms/dummy_calculator.py | 33 ++++++++++++++ environmental_impact/calculator.py | 30 ------------- environmental_impact/models.py | 7 ++- environmental_impact/tests.py | 3 -- environmental_impact/tests/__init__.py | 0 .../tests/test_dummy_calculator.py | 44 +++++++++++++++++++ .../test_factory_env_impact_algorithm.py | 17 +++++++ 11 files changed, 148 insertions(+), 36 deletions(-) create mode 100644 environmental_impact/algorithms/__init__.py create mode 100644 environmental_impact/algorithms/algorithm_factory.py create mode 100644 environmental_impact/algorithms/algorithm_interface.py create mode 100644 environmental_impact/algorithms/dummy_calculator.py delete mode 100644 environmental_impact/calculator.py delete mode 100644 environmental_impact/tests.py create mode 100644 environmental_impact/tests/__init__.py create mode 100644 environmental_impact/tests/test_dummy_calculator.py create mode 100644 environmental_impact/tests/test_factory_env_impact_algorithm.py diff --git a/device/views.py b/device/views.py index 13bb273..9e9c542 100644 --- a/device/views.py +++ b/device/views.py @@ -14,7 +14,7 @@ from evidence.models import Annotation from lot.models import LotTag from device.models import Device from device.forms import DeviceFormSet -from environmental_impact.calculator import get_device_environmental_impact +from environmental_impact.algorithms.algorithm_factory import FactoryEnvironmentImpactAlgorithm if settings.DPP: from dpp.models import Proof from dpp.api_dlt import PROOF_TYPE @@ -111,11 +111,16 @@ class DetailsView(DashboardView, TemplateView): uuid__in=self.object.uuids, type=PROOF_TYPE["IssueDPP"] ) + enviromental_impact_algorithm = FactoryEnvironmentImpactAlgorithm.run_environmental_impact_calculation( + "dummy_calc" + ) + enviromental_impact = enviromental_impact_algorithm.get_device_environmental_impact( + self.object) context.update({ 'object': self.object, 'snapshot': self.object.get_last_evidence(), 'lot_tags': lot_tags, - 'impact': get_device_environmental_impact(self.object), + 'impact': enviromental_impact, 'dpps': dpps, }) return context diff --git a/environmental_impact/algorithms/__init__.py b/environmental_impact/algorithms/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/environmental_impact/algorithms/algorithm_factory.py b/environmental_impact/algorithms/algorithm_factory.py new file mode 100644 index 0000000..64c09f1 --- /dev/null +++ b/environmental_impact/algorithms/algorithm_factory.py @@ -0,0 +1,30 @@ +from __future__ import annotations +from typing import TYPE_CHECKING + +from .dummy_calculator import DummyEnvironmentalImpactAlgorithm + +if TYPE_CHECKING: + from .algorithm_interface import EnvironmentImpactAlgorithm + + +class AlgorithmNames(): + """ + Enum class for the different types of algorithms. + """ + + DUMMY_CALC = "dummy_calc" + + algorithm_names = { + DUMMY_CALC: DummyEnvironmentalImpactAlgorithm() + } + + +class FactoryEnvironmentImpactAlgorithm(): + + @staticmethod + def run_environmental_impact_calculation(algorithm_name: str) -> EnvironmentImpactAlgorithm: + try: + return AlgorithmNames.algorithm_names[algorithm_name] + except KeyError: + raise ValueError("Invalid algorithm name. Valid options are: " + + ", ".join(AlgorithmNames.algorithm_names.keys())) diff --git a/environmental_impact/algorithms/algorithm_interface.py b/environmental_impact/algorithms/algorithm_interface.py new file mode 100644 index 0000000..dcca8a5 --- /dev/null +++ b/environmental_impact/algorithms/algorithm_interface.py @@ -0,0 +1,11 @@ +from abc import ABC, abstractmethod +from functools import lru_cache +from device.models import Device +from environmental_impact.models import EnvironmentalImpact + + +class EnvironmentImpactAlgorithm(ABC): + + @abstractmethod + def get_device_environmental_impact(self, device: Device) -> EnvironmentalImpact: + pass diff --git a/environmental_impact/algorithms/dummy_calculator.py b/environmental_impact/algorithms/dummy_calculator.py new file mode 100644 index 0000000..6da3d89 --- /dev/null +++ b/environmental_impact/algorithms/dummy_calculator.py @@ -0,0 +1,33 @@ +from device.models import Device +from .algorithm_interface import EnvironmentImpactAlgorithm +from environmental_impact.models import EnvironmentalImpact + + +class DummyEnvironmentalImpactAlgorithm(EnvironmentImpactAlgorithm): + + def get_device_environmental_impact(self, device: Device) -> EnvironmentalImpact: + # TODO Make a constants file / class + avg_watts = 40 # Arbitrary laptop average consumption + co2_per_kwh = 0.475 + power_on_hours = self.get_power_on_hours_from(device) + energy_kwh = (power_on_hours * avg_watts) / 1000 + co2_emissions = energy_kwh * co2_per_kwh + return EnvironmentalImpact(co2_emissions=co2_emissions) + + def get_power_on_hours_from(self, device: Device) -> int: + # TODO how do I check if the device is a legacy workbench? Is there a better way? + is_legacy_workbench = False if device.last_evidence.inxi else True + if not is_legacy_workbench: + storage_components = device.components[9] + str_time = storage_components.get('time of used', -1) + else: + str_time = "" + uptime_in_hours = self.convert_str_time_to_hours(str_time, is_legacy_workbench) + return uptime_in_hours + + def convert_str_time_to_hours(self, time_str: str, is_legacy_workbench: bool) -> int: + if is_legacy_workbench: + return -1 # TODO Power on hours not available in legacy workbench + else: + multipliers = {'y': 365 * 24, 'd': 24, 'h': 1} + return sum(int(part[:-1]) * multipliers[part[-1]] for part in time_str.split()) diff --git a/environmental_impact/calculator.py b/environmental_impact/calculator.py deleted file mode 100644 index a348b6b..0000000 --- a/environmental_impact/calculator.py +++ /dev/null @@ -1,30 +0,0 @@ -from dataclasses import dataclass -from device.models import Device - - -@dataclass -class EnvironmentalImpact: - carbon_saved: float = 0.0 - co2_emissions: float = 0.0 - - -def get_device_environmental_impact(device: Device) -> EnvironmentalImpact: - avg_watts = 40 # Arbitrary laptop average consumption - power_on_hours = get_power_on_hours_from(device) - energy_kwh = (power_on_hours * avg_watts) / 1000 - # CO2 emissions based on global average electricity mix - co2_per_kwh = 0.475 - co2_emissions = energy_kwh * co2_per_kwh - return EnvironmentalImpact(co2_emissions=co2_emissions) - - -def get_power_on_hours_from(device: Device) -> int: - storage_components = device.components[9] - str_time = storage_components.get('time of used', -1) - uptime_in_hours = convert_str_time_to_hours(str_time) - return uptime_in_hours - - -def convert_str_time_to_hours(time_str: str) -> int: - multipliers = {'y': 365 * 24, 'd': 24, 'h': 1} - return sum(int(part[:-1]) * multipliers[part[-1]] for part in time_str.split()) diff --git a/environmental_impact/models.py b/environmental_impact/models.py index 71a8362..871c8b6 100644 --- a/environmental_impact/models.py +++ b/environmental_impact/models.py @@ -1,3 +1,8 @@ +from dataclasses import dataclass from django.db import models -# Create your models here. + +@dataclass +class EnvironmentalImpact: + carbon_saved: float = 0.0 + co2_emissions: float = 0.0 diff --git a/environmental_impact/tests.py b/environmental_impact/tests.py deleted file mode 100644 index 7ce503c..0000000 --- a/environmental_impact/tests.py +++ /dev/null @@ -1,3 +0,0 @@ -from django.test import TestCase - -# Create your tests here. diff --git a/environmental_impact/tests/__init__.py b/environmental_impact/tests/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/environmental_impact/tests/test_dummy_calculator.py b/environmental_impact/tests/test_dummy_calculator.py new file mode 100644 index 0000000..5ee9da6 --- /dev/null +++ b/environmental_impact/tests/test_dummy_calculator.py @@ -0,0 +1,44 @@ +from unittest.mock import patch +import uuid +from django.test import TestCase +from device.models import Device +from environmental_impact.models import EnvironmentalImpact +from environmental_impact.algorithms.dummy_calculator import DummyEnvironmentalImpactAlgorithm +from evidence.models import Evidence + + +class DummyEnvironmentalImpactAlgorithmTests(TestCase): + + @patch('evidence.models.Evidence.get_doc', return_value={'credentialSubject': {}}) + @patch('evidence.models.Evidence.get_time', return_value=None) + def setUp(self, mock_get_time, mock_get_doc): + self.device = Device(id='1') + evidence = self.device.last_evidence = Evidence(uuid=uuid.uuid4()) + evidence.inxi = True + evidence.doc = {'credentialSubject': {}} + self.algorithm = DummyEnvironmentalImpactAlgorithm() + + def test_get_power_on_hours_from_legacy_device(self): + # TODO is there a way to check that? + pass + + @patch('evidence.models.Evidence.get_components', return_value=[0, 0, 0, 0, 0, 0, 0, 0, 0, {'time of used': '1y 2d 3h'}]) + def test_get_power_on_hours_from_inxi_device(self, mock_get_components): + hours = self.algorithm.get_power_on_hours_from(self.device) + self.assertEqual( + hours, 8811, "Inxi-parsed devices should correctly compute power-on hours") + + @patch('evidence.models.Evidence.get_components', return_value=[0, 0, 0, 0, 0, 0, 0, 0, 0, {'time of used': '1y 2d 3h'}]) + def test_convert_str_time_to_hours(self, mock_get_components): + result = self.algorithm.convert_str_time_to_hours('1y 2d 3h', False) + self.assertEqual( + result, 8811, "String to hours conversion should match expected output") + + @patch('evidence.models.Evidence.get_components', return_value=[0, 0, 0, 0, 0, 0, 0, 0, 0, {'time of used': '1y 2d 3h'}]) + def test_environmental_impact_calculation(self, mock_get_components): + impact = self.algorithm.get_device_environmental_impact(self.device) + self.assertIsInstance(impact, EnvironmentalImpact, + "Output should be an EnvironmentalImpact instance") + expected_co2 = 8811 * 40 * 0.475 / 1000 + self.assertAlmostEqual(impact.co2_emissions, expected_co2, + 2, "CO2 emissions calculation should be accurate") diff --git a/environmental_impact/tests/test_factory_env_impact_algorithm.py b/environmental_impact/tests/test_factory_env_impact_algorithm.py new file mode 100644 index 0000000..71cab35 --- /dev/null +++ b/environmental_impact/tests/test_factory_env_impact_algorithm.py @@ -0,0 +1,17 @@ +from environmental_impact.algorithms.algorithm_factory import FactoryEnvironmentImpactAlgorithm +from django.test import TestCase +from environmental_impact.algorithms.dummy_calculator import DummyEnvironmentalImpactAlgorithm + + +class FactoryEnvironmentImpactAlgorithmTests(TestCase): + + def test_valid_algorithm_name(self): + algorithm = FactoryEnvironmentImpactAlgorithm.run_environmental_impact_calculation( + 'dummy_calc') + self.assertIsInstance(algorithm, DummyEnvironmentalImpactAlgorithm, + "Factory should return a DummyEnvironmentalImpactAlgorithm instance") + + def test_invalid_algorithm_name(self): + with self.assertRaises(ValueError): + FactoryEnvironmentImpactAlgorithm.run_environmental_impact_calculation( + 'invalid_calc') -- 2.30.2 From 324eaa215c9cee8b8e385feb74184582767ac533 Mon Sep 17 00:00:00 2001 From: sergiogimenez Date: Tue, 25 Feb 2025 08:26:45 +0100 Subject: [PATCH 81/86] Update template with new structure --- device/templates/details.html | 5 +++++ .../templates/tabs/environmental_impact.html | 20 +++++++++++++++++++ device/views.py | 17 +++++++++------- 3 files changed, 35 insertions(+), 7 deletions(-) create mode 100644 device/templates/tabs/environmental_impact.html diff --git a/device/templates/details.html b/device/templates/details.html index 96041d8..418c943 100644 --- a/device/templates/details.html +++ b/device/templates/details.html @@ -86,6 +86,9 @@ +
@@ -105,6 +108,8 @@ {% include 'tabs/dpps.html' %} + {% include 'tabs/environmental_impact.html' %} +