Beispiel #1
0
def extract_data(directory: str,
                 has_dedicated_gpu: bool,
                 gpu_in_cpu: bool,
                 cleanup: bool,
                 verbose: bool,
                 unpack: bool = True):
    mobo = get_baseboard(directory + "/baseboard.txt")
    cpu = read_lscpu(directory + "/lscpu.txt")
    gpu = read_lspci_and_glxinfo(has_dedicated_gpu, directory + "/lspci.txt",
                                 directory + "/glxinfo.txt", verbose)
    if not has_dedicated_gpu:
        entries = extract_integrated_gpu_from_standalone(gpu)
        if gpu_in_cpu:
            if isinstance(cpu, list):
                # Multiple processors
                updated_cpus = []
                for one_cpu in cpu:
                    one_cpu = {**one_cpu, **entries}
                    updated_cpus.append(one_cpu)
                cpu = updated_cpus
                del updated_cpus
            else:
                cpu = {**cpu, **entries}
        else:
            mobo = {**mobo, **entries}
        gpu = []
    mobo = get_connectors(directory + "/connector.txt", mobo, verbose)
    mobo = get_net(directory + "/net.txt", mobo, verbose)
    chassis = get_chassis(directory + "/chassis.txt")
    dimms = read_decode_dimms(directory + "/dimms.txt", verbose)
    if chassis["motherboard-form-factor"] == "proprietary-laptop":
        psu = {"type": "external-psu"}
    else:
        psu = {"type": "psu"}
    disks = read_smartctl(directory)

    result = []
    empty_dict = {}
    for component in (chassis, mobo, cpu, dimms, gpu, disks, psu):
        # return JSON ready for TARALLO
        if unpack:
            if isinstance(component, list):
                if component.__len__() == 0:
                    result.append(empty_dict)
                    continue
                for item in component:
                    result.append(item)
            else:
                result.append(component)
        # return list of lists of dicts to use in extract_and_collect_data_from_generated_files() for long output
        else:
            if component.__len__() == 0:
                result.append(empty_dict)
            else:
                result.append(component)

    if cleanup:
        result = do_cleanup(result, verbose)

    return result
Beispiel #2
0
def test_net_with_connectors_too_few():
	baseboard = read_dmidecode.get_baseboard(filedir + 'baseboard.txt')
	baseboard = read_dmidecode.get_connectors(filedir + 'connector.txt', baseboard)

	expect = {
		"type": "motherboard",
		"working": "yes",
		"brand": "ASUSTeK Computer INC.",
		"model": "P6T DELUXE V2",
		"sn": "723627130020069",
		"ps2-ports-n": 1,
		"usb-ports-n": 7,
		'firewire-ports-n': 3,
		'ide-ports-n': 1,
		'sata-ports-n': 6,
		"mini-jack-ports-n": 7,
		'ethernet-ports-1000m-n': 1,
		'mac': '00:c0:11:fe:fe:22',
		'sas-sata-ports-n': 2,
		'notes': 'Unknown connector: None / Other (AUDIO / AUDIO)\n'
			'BIOS reported 1 more ethernet port that was not found by the kernel'
	}
	output = read_dmidecode.get_net(filedir + 'net_too_few.txt', baseboard)

	assert output == expect
Beispiel #3
0
def test_net_with_connectors_too_many():
    baseboard = read_dmidecode.get_baseboard(
        os.path.join(filedir, 'baseboard.txt'))
    baseboard = read_dmidecode.get_connectors(
        os.path.join(filedir, 'connector.txt'), baseboard)

    expect = {
        "type": "motherboard",
        "working": "yes",
        "brand": "ASUSTeK Computer INC.",
        "model": "P6T DELUXE V2",
        "sn": "723627130020069",
        "ps2-ports-n": 1,
        "usb-ports-n": 7,
        'firewire-ports-n': 3,
        'ide-ports-n': 1,
        'sata-ports-n': 6,
        "mini-jack-ports-n": 7,
        'ethernet-ports-1000m-n': 3,
        'mac': '00:c0:11:fe:fe:11, 00:c0:11:fe:fe:22, 00:c0:11:fe:fe:42',
        'sas-sata-ports-n': 2,
        'notes': 'Unknown connector: None / Other (AUDIO / AUDIO)'
    }
    output = read_dmidecode.get_net(os.path.join(filedir, 'net_too_many.txt'),
                                    baseboard)

    assert output == expect
Beispiel #4
0
def test_net_without_connectors():
	baseboard = read_dmidecode.get_baseboard(filedir + 'baseboard.txt')

	expect = {
		"type": "motherboard",
		"working": "yes",
		"brand": "ASUSTeK Computer INC.",
		"model": "P6T DELUXE V2",
		"sn": "723627130020069",
		'ethernet-ports-1000m-n': 2,
		'mac': '00:c0:11:fe:fe:11, 00:c0:11:fe:fe:22',
	}
	output = read_dmidecode.get_net(filedir + 'net.txt', baseboard)

	assert output == expect
Beispiel #5
0
def extract_data(directory: str,
                 has_dedicated_gpu: bool,
                 gpu_in_cpu: bool,
                 gui: bool,
                 verbose: bool,
                 unpack: bool = True):
    mobo = get_baseboard(directory + "/baseboard.txt")
    cpu = read_lscpu(directory + "/lscpu.txt")
    gpu = read_lspci_and_glxinfo(has_dedicated_gpu, directory + "/lspci.txt",
                                 directory + "/glxinfo.txt", verbose)
    if not has_dedicated_gpu:
        entries = extract_integrated_gpu_from_standalone(gpu)
        if gpu_in_cpu:
            if isinstance(cpu, list):
                # Multiple processors
                updated_cpus = []
                for one_cpu in cpu:
                    one_cpu = {**one_cpu, **entries}
                    updated_cpus.append(one_cpu)
                cpu = updated_cpus
                del updated_cpus
            else:
                cpu = {**cpu, **entries}
        else:
            mobo = {**mobo, **entries}
        gpu = []
    mobo = get_connectors(directory + "/connector.txt", mobo, verbose)
    mobo = get_net(directory + "/net.txt", mobo, verbose)
    chassis = get_chassis(directory + "/chassis.txt")
    dimms = read_decode_dimms(directory + "/dimms.txt", verbose)
    if chassis["motherboard-form-factor"] == "proprietary-laptop":
        psu = {"type": "external-psu"}
    else:
        psu = {"type": "psu"}
    disks = read_smartctl(directory)

    result = []
    empty_dict = {}
    for component in (chassis, mobo, cpu, dimms, gpu, disks, psu):
        # return JSON ready for TARALLO
        if unpack:
            if isinstance(component, list):
                if len(component) == 0:
                    result.append(empty_dict)
                    continue
                for item in component:
                    result.append(item)
            else:
                result.append(component)
        # return list of lists of dicts to use in extract_and_collect_data_from_generated_files() for long output
        else:
            if len(component) == 0:
                result.append(empty_dict)
            else:
                result.append(component)

        result = do_cleanup(result, gui, verbose)

    # check on case and mobo
    try:
        if (chassis['model'], chassis['brand'],
                chassis['variant']) == (mobo['brand'], mobo['model'],
                                        mobo['variant']):
            chassis.pop('model')
    except KeyError:
        pass

    # maybe there's a nicer way
    comparator = []
    for comp in result:
        if isinstance(comp, list):
            comparator = comparator + comp
        else:
            comparator.append(comp)

    # avoid bad associations between items and products
    for comp1 in comparator:
        for comp2 in comparator:
            if is_product(comp1) and is_product(
                    comp2) and comp1['type'] != comp2['type']:
                if (comp1['brand'], comp2['model']) == (comp2['brand'],
                                                        comp2['model']):
                    variant1 = comp1.pop('variant', '')
                    variant2 = comp2.pop('variant', '')
                    if variant1 == variant2:
                        comp1['variant'] = variant1.rstrip().join(
                            f"_{comp1['type']}")
                        comp2['variant'] = variant2.rstrip().join(
                            f"_{comp2['type']}")
    return result