summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJannik Schönartz2021-09-28 19:43:28 +0200
committerJannik Schönartz2021-09-28 19:43:28 +0200
commit3480c52859aeba5d18797d5fd51276cba477ad63 (patch)
treed438d37d58daabdbd2ec2ae03a32429b210341d7
parent[bas-hw-collect] Add speed to network information (diff)
downloadsystemd-init-3480c52859aeba5d18797d5fd51276cba477ad63.tar.gz
systemd-init-3480c52859aeba5d18797d5fd51276cba477ad63.tar.xz
systemd-init-3480c52859aeba5d18797d5fd51276cba477ad63.zip
[bas-hw-collect] Add CD/DVD information
-rwxr-xr-xmodules.d/bas-hw-collect/scripts/collect_hw_info_json.py45
1 files 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