mirror of
https://github.com/vale981/dirkules
synced 2025-03-05 09:21:38 -05:00
disks werden besser eingelesen
This commit is contained in:
parent
3b47e039c9
commit
b98fac2891
3 changed files with 53 additions and 79 deletions
|
@ -6,54 +6,58 @@ from sqlalchemy.sql.expression import exists
|
|||
|
||||
|
||||
def getAllDrives():
|
||||
#vorbereitung
|
||||
#
|
||||
#sudo hwinfo --short --block IST SUPER GEIL
|
||||
#
|
||||
drives = []
|
||||
driveDict = [] # ist eine Liste, enthält für jede HDD ein dict
|
||||
driveDict = []
|
||||
keys = ['device', 'name', 'smart', 'size', 'serial']
|
||||
keys = [
|
||||
'name', 'model', 'serial', 'size', 'rota', 'rm', 'hotplug', 'state',
|
||||
'smart'
|
||||
]
|
||||
|
||||
blkid = subprocess.Popen(["hwinfo --disk --short"],
|
||||
stdout=subprocess.PIPE,
|
||||
shell=True,
|
||||
universal_newlines=True)
|
||||
grepedDrives = subprocess.Popen(["grep", "/dev/sd"],
|
||||
stdin=blkid.stdout,
|
||||
stdout=subprocess.PIPE,
|
||||
universal_newlines=True)
|
||||
lsblk = subprocess.Popen(
|
||||
["lsblk -I 8 -d -b -o NAME,MODEL,SERIAL,SIZE,ROTA,RM,HOTPLUG,STATE"],
|
||||
stdout=subprocess.PIPE,
|
||||
shell=True,
|
||||
universal_newlines=True)
|
||||
while True:
|
||||
line = grepedDrives.stdout.readline()
|
||||
line = lsblk.stdout.readline()
|
||||
if line != '':
|
||||
drives.append(line.rstrip())
|
||||
else:
|
||||
break
|
||||
blkid.stdout.close()
|
||||
lsblk.stdout.close()
|
||||
del drives[0]
|
||||
for line in drives:
|
||||
#
|
||||
# Effizienter machen mit newLine = ' '.join(line.split())
|
||||
#
|
||||
newLine = ' '.join(line.split())
|
||||
newLine = newLine.split(" ")
|
||||
while len(newLine) > 8:
|
||||
newLine[1] = newLine[1] + " " + newLine[2]
|
||||
del newLine[2]
|
||||
values = []
|
||||
line = line.replace(" ", "", 15)
|
||||
values.append(line[:8])
|
||||
values.append(line[8:])
|
||||
values.append(smartPassed(values[0]))
|
||||
values.append(getTotalSize(values[0]))
|
||||
values.append(getSerial(values[0]))
|
||||
for i in range(len(keys) - 1):
|
||||
if newLine[i] == "0":
|
||||
values.append(False)
|
||||
elif newLine[i] == "1":
|
||||
values.append(True)
|
||||
else:
|
||||
values.append(newLine[i])
|
||||
values.append(smartPassed("/dev/" + values[0]))
|
||||
driveDict.append(dict(zip(keys, values)))
|
||||
sortedDriveDict = sorted(driveDict, key=lambda drive: drive['device'])
|
||||
sortedDriveDict = sorted(driveDict, key=lambda drive: drive['name'])
|
||||
|
||||
#add to db
|
||||
for drive in sortedDriveDict:
|
||||
driveObj = Drive(
|
||||
drive.get("device"), drive.get("name"), drive.get("smart"),
|
||||
drive.get("size"), drive.get("serial"))
|
||||
drive.get("name"), drive.get("model"), drive.get("serial"),
|
||||
drive.get("size"), drive.get("rota"), drive.get("rm"),
|
||||
drive.get("hotplug"), drive.get("state"), drive.get("smart"))
|
||||
ret = db.session.query(
|
||||
exists().where(Drive.serial == driveObj.serial)).scalar()
|
||||
if ret:
|
||||
print(drive.get("device") + " in db")
|
||||
print(drive.get("name") + " in db")
|
||||
print("Mache nichts...")
|
||||
else:
|
||||
print(drive.get("device") + " NICHT in db")
|
||||
print(drive.get("name") + " NICHT in db")
|
||||
db.session.add(driveObj)
|
||||
db.session.commit()
|
||||
|
||||
|
@ -78,46 +82,6 @@ def smartPassed(device):
|
|||
return passed
|
||||
|
||||
|
||||
def getTotalSize(device):
|
||||
drives = []
|
||||
fdisk = subprocess.Popen(["fdisk -l"],
|
||||
stdout=subprocess.PIPE,
|
||||
shell=True,
|
||||
universal_newlines=True)
|
||||
grepedDrives = subprocess.Popen(["grep", device],
|
||||
stdin=fdisk.stdout,
|
||||
stdout=subprocess.PIPE,
|
||||
universal_newlines=True)
|
||||
while True:
|
||||
line = grepedDrives.stdout.readline()
|
||||
if line != '':
|
||||
drives.append(line.rstrip())
|
||||
else:
|
||||
break
|
||||
fdisk.stdout.close()
|
||||
firstLine = drives[0].split(" ")
|
||||
size = firstLine[2] + " " + firstLine[3][:-1]
|
||||
return size
|
||||
|
||||
|
||||
def getSerial(device):
|
||||
# hier auch size abfragen
|
||||
blkid = subprocess.Popen(["hwinfo --disk --only " + device],
|
||||
stdout=subprocess.PIPE,
|
||||
shell=True,
|
||||
universal_newlines=True)
|
||||
grepedDrives = subprocess.Popen(["grep", "Serial"],
|
||||
stdin=blkid.stdout,
|
||||
stdout=subprocess.PIPE,
|
||||
universal_newlines=True)
|
||||
|
||||
line = grepedDrives.stdout.readline().strip()
|
||||
blkid.stdout.close()
|
||||
line = line.split(" ")
|
||||
serial = line[2][1:-1]
|
||||
return serial
|
||||
|
||||
|
||||
def getPartitions(device):
|
||||
partDict = [] # ist eine Liste, enthält für jede part ein dict
|
||||
drives = []
|
||||
|
@ -161,6 +125,8 @@ def getPartitions(device):
|
|||
|
||||
|
||||
def partDetails(part):
|
||||
# sudo lsblk -fs /dev/sda2 bessa
|
||||
# sudo lsblk -o NAME,FSTYPE,UUID,RM,SIZE,STATE,TYPE,MOUNTPOINT,LABEL,MODEL,ROTA auch gut
|
||||
values = []
|
||||
blkid = subprocess.Popen(["blkid"],
|
||||
stdout=subprocess.PIPE,
|
||||
|
|
|
@ -7,19 +7,27 @@ from sqlalchemy.ext.declarative import declarative_base
|
|||
class Drive(db.Model):
|
||||
__tablename__ = 'drives'
|
||||
id = db.Column(db.Integer, primary_key=True)
|
||||
device = db.Column(db.String)
|
||||
name = db.Column(db.String)
|
||||
size = db.Column(db.String)
|
||||
smart = db.Column(db.Boolean)
|
||||
model = db.Column(db.String)
|
||||
serial = db.Column(db.String)
|
||||
size = db.Column(db.Integer)
|
||||
rota = db.Column(db.Boolean)
|
||||
rm = db.Column(db.Boolean)
|
||||
hotplug = db.Column(db.Boolean)
|
||||
state = db.Column(db.String)
|
||||
smart = db.Column(db.Boolean)
|
||||
partitions = db.relationship("Partitions")
|
||||
|
||||
def __init__(self, device, name, smart, size, serial):
|
||||
self.device = device
|
||||
def __init__(self, name, model, serial, size, rota, rm, hotplug, state, smart):
|
||||
self.name = name
|
||||
self.smart = smart
|
||||
self.size = size
|
||||
self.model = model
|
||||
self.serial = serial
|
||||
self.size = size
|
||||
self.rota = rota
|
||||
self.rm = rm
|
||||
self.hotplug = hotplug
|
||||
self.state = state
|
||||
self.smart = smart
|
||||
|
||||
|
||||
class Partitions(db.Model):
|
||||
|
|
|
@ -22,12 +22,12 @@
|
|||
<tbody>
|
||||
{% for drive in drives %}
|
||||
<tr>
|
||||
<td>{{drive.device}}</td>
|
||||
<td>{{drive.name}}</td>
|
||||
<td>{{drive.size}}</td>
|
||||
<td>{{drive.model}}</td>
|
||||
<td>{{drive.size|filesizeformat}}</td>
|
||||
<td>{{drive.smart}}</td>
|
||||
<td>
|
||||
<a href="{{ url_for('partitions', part=(drive.device | replace("/", "_"))) }}" class="waves-effect waves-light btn">
|
||||
<a href="{{ url_for('partitions', part=(drive.name | replace("/", "_"))) }}" class="waves-effect waves-light btn">
|
||||
<i class="material-icons left">list</i>
|
||||
Partitionen
|
||||
</a>
|
||||
|
|
Loading…
Add table
Reference in a new issue