From 3480c52859aeba5d18797d5fd51276cba477ad63 Mon Sep 17 00:00:00 2001 From: Jannik Schönartz Date: Tue, 28 Sep 2021 19:43:28 +0200 Subject: [bas-hw-collect] Add CD/DVD information --- .../bas-hw-collect/scripts/collect_hw_info_json.py | 45 +++++++++++++++++++++- 1 file changed, 43 insertions(+), 2 deletions(-) diff --git a/modules.d/bas-hw-collect/scripts/collect_hw_info_json.py b/modules.d/bas-hw-collect/scripts/collect_hw_info_json.py index ea02c3ae..4e4a4f39 100755 --- a/modules.d/bas-hw-collect/scripts/collect_hw_info_json.py +++ b/modules.d/bas-hw-collect/scripts/collect_hw_info_json.py @@ -3,6 +3,7 @@ from subprocess import PIPE from os import listdir, path import argparse import json +import re import requests import shlex import subprocess @@ -85,24 +86,64 @@ def get_lsblk(disk_path, disk_name): lsblk = parse_to_json('lsblk', output) return lsblk +# Get CD/DVD Information +def get_cdrom(): + cdromdir = '/proc/sys/dev/cdrom/' + cdrom = [] + if path.exists(cdromdir): + cdrom_raw = run_subprocess('cat ' + cdromdir + 'info') + + # Skip first two entries because of useless information and empty row + for row in cdrom_raw.split('\n')[2:]: + if row == '': + continue + # Split at one or more tabs + values = re.split('\t+', row) + key = values[0][:-1].replace('drive ', '').replace(' ', '_') + for index, val in enumerate(values[1:]): + if len(cdrom) < index + 1: + cdrom.append({ 'read': [], 'write': [], 'functions': [] }) + + if 'Can_read_' in key: + if val == '1': + cdrom[index]['read'].append(key[9:]) + elif 'Can_write_' in key: + cdrom[index]['write'].append(key[10:]) + elif 'Can_' in key: + cdrom[index]['functions'].append(key[4:]) + else: + cdrom[index][key] = val + return {cd['name']:cd for cd in cdrom} + # Get informations about the disks def get_disk_info(): diskdir = '/dev/disk/by-path/' disk_informations = {} + cdrom = get_cdrom() # Get and filter all disks if path.exists(diskdir): disks = listdir(diskdir) - filtered_disks = [i for i in disks if (not "-part" in i) and (not "-usb-" in i)] + filtered_disks = [i for i in disks if (not '-part' in i) and (not '-usb-' in i)] # Call all disk specific tools for d in filtered_disks: disk_path = diskdir + d disk_info = {} disk_info['readlink'] = get_readlink(disk_path).rstrip() + + # Check if it's a cd/dvd + if disk_info['readlink'].split('/')[-1] in cdrom.keys(): + disk_info['type'] = 'cdrom' + disk_info['info'] = cdrom[disk_info['readlink'].split('/')[-1]] + else: + disk_info['type'] = 'drive' disk_info['smartctl'] = get_smartctl(diskdir, d) - disk_info['sfdisk'] = get_sfdisk(diskdir, d) disk_info['lsblk'] = get_lsblk(diskdir, d) + + if disk_info['type'] != 'cdrom': + disk_info['sfdisk'] = get_sfdisk(diskdir, d) + disk_informations[d] = disk_info return disk_informations -- cgit v1.2.3-55-g7522