mirror of
https://github.com/vale981/dirkules
synced 2025-03-05 17:31: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():
|
def getAllDrives():
|
||||||
#vorbereitung
|
|
||||||
#
|
|
||||||
#sudo hwinfo --short --block IST SUPER GEIL
|
|
||||||
#
|
|
||||||
drives = []
|
drives = []
|
||||||
driveDict = [] # ist eine Liste, enthält für jede HDD ein dict
|
driveDict = []
|
||||||
keys = ['device', 'name', 'smart', 'size', 'serial']
|
keys = ['device', 'name', 'smart', 'size', 'serial']
|
||||||
|
keys = [
|
||||||
|
'name', 'model', 'serial', 'size', 'rota', 'rm', 'hotplug', 'state',
|
||||||
|
'smart'
|
||||||
|
]
|
||||||
|
|
||||||
blkid = subprocess.Popen(["hwinfo --disk --short"],
|
lsblk = subprocess.Popen(
|
||||||
stdout=subprocess.PIPE,
|
["lsblk -I 8 -d -b -o NAME,MODEL,SERIAL,SIZE,ROTA,RM,HOTPLUG,STATE"],
|
||||||
shell=True,
|
stdout=subprocess.PIPE,
|
||||||
universal_newlines=True)
|
shell=True,
|
||||||
grepedDrives = subprocess.Popen(["grep", "/dev/sd"],
|
universal_newlines=True)
|
||||||
stdin=blkid.stdout,
|
|
||||||
stdout=subprocess.PIPE,
|
|
||||||
universal_newlines=True)
|
|
||||||
while True:
|
while True:
|
||||||
line = grepedDrives.stdout.readline()
|
line = lsblk.stdout.readline()
|
||||||
if line != '':
|
if line != '':
|
||||||
drives.append(line.rstrip())
|
drives.append(line.rstrip())
|
||||||
else:
|
else:
|
||||||
break
|
break
|
||||||
blkid.stdout.close()
|
lsblk.stdout.close()
|
||||||
|
del drives[0]
|
||||||
for line in drives:
|
for line in drives:
|
||||||
#
|
newLine = ' '.join(line.split())
|
||||||
# Effizienter machen mit newLine = ' '.join(line.split())
|
newLine = newLine.split(" ")
|
||||||
#
|
while len(newLine) > 8:
|
||||||
|
newLine[1] = newLine[1] + " " + newLine[2]
|
||||||
|
del newLine[2]
|
||||||
values = []
|
values = []
|
||||||
line = line.replace(" ", "", 15)
|
for i in range(len(keys) - 1):
|
||||||
values.append(line[:8])
|
if newLine[i] == "0":
|
||||||
values.append(line[8:])
|
values.append(False)
|
||||||
values.append(smartPassed(values[0]))
|
elif newLine[i] == "1":
|
||||||
values.append(getTotalSize(values[0]))
|
values.append(True)
|
||||||
values.append(getSerial(values[0]))
|
else:
|
||||||
|
values.append(newLine[i])
|
||||||
|
values.append(smartPassed("/dev/" + values[0]))
|
||||||
driveDict.append(dict(zip(keys, values)))
|
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
|
#add to db
|
||||||
for drive in sortedDriveDict:
|
for drive in sortedDriveDict:
|
||||||
driveObj = Drive(
|
driveObj = Drive(
|
||||||
drive.get("device"), drive.get("name"), drive.get("smart"),
|
drive.get("name"), drive.get("model"), drive.get("serial"),
|
||||||
drive.get("size"), 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(
|
ret = db.session.query(
|
||||||
exists().where(Drive.serial == driveObj.serial)).scalar()
|
exists().where(Drive.serial == driveObj.serial)).scalar()
|
||||||
if ret:
|
if ret:
|
||||||
print(drive.get("device") + " in db")
|
print(drive.get("name") + " in db")
|
||||||
|
print("Mache nichts...")
|
||||||
else:
|
else:
|
||||||
print(drive.get("device") + " NICHT in db")
|
print(drive.get("name") + " NICHT in db")
|
||||||
db.session.add(driveObj)
|
db.session.add(driveObj)
|
||||||
db.session.commit()
|
db.session.commit()
|
||||||
|
|
||||||
|
@ -78,46 +82,6 @@ def smartPassed(device):
|
||||||
return passed
|
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):
|
def getPartitions(device):
|
||||||
partDict = [] # ist eine Liste, enthält für jede part ein dict
|
partDict = [] # ist eine Liste, enthält für jede part ein dict
|
||||||
drives = []
|
drives = []
|
||||||
|
@ -161,6 +125,8 @@ def getPartitions(device):
|
||||||
|
|
||||||
|
|
||||||
def partDetails(part):
|
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 = []
|
values = []
|
||||||
blkid = subprocess.Popen(["blkid"],
|
blkid = subprocess.Popen(["blkid"],
|
||||||
stdout=subprocess.PIPE,
|
stdout=subprocess.PIPE,
|
||||||
|
|
|
@ -7,19 +7,27 @@ from sqlalchemy.ext.declarative import declarative_base
|
||||||
class Drive(db.Model):
|
class Drive(db.Model):
|
||||||
__tablename__ = 'drives'
|
__tablename__ = 'drives'
|
||||||
id = db.Column(db.Integer, primary_key=True)
|
id = db.Column(db.Integer, primary_key=True)
|
||||||
device = db.Column(db.String)
|
|
||||||
name = db.Column(db.String)
|
name = db.Column(db.String)
|
||||||
size = db.Column(db.String)
|
model = db.Column(db.String)
|
||||||
smart = db.Column(db.Boolean)
|
|
||||||
serial = 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")
|
partitions = db.relationship("Partitions")
|
||||||
|
|
||||||
def __init__(self, device, name, smart, size, serial):
|
def __init__(self, name, model, serial, size, rota, rm, hotplug, state, smart):
|
||||||
self.device = device
|
|
||||||
self.name = name
|
self.name = name
|
||||||
self.smart = smart
|
self.model = model
|
||||||
self.size = size
|
|
||||||
self.serial = serial
|
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):
|
class Partitions(db.Model):
|
||||||
|
|
|
@ -22,12 +22,12 @@
|
||||||
<tbody>
|
<tbody>
|
||||||
{% for drive in drives %}
|
{% for drive in drives %}
|
||||||
<tr>
|
<tr>
|
||||||
<td>{{drive.device}}</td>
|
|
||||||
<td>{{drive.name}}</td>
|
<td>{{drive.name}}</td>
|
||||||
<td>{{drive.size}}</td>
|
<td>{{drive.model}}</td>
|
||||||
|
<td>{{drive.size|filesizeformat}}</td>
|
||||||
<td>{{drive.smart}}</td>
|
<td>{{drive.smart}}</td>
|
||||||
<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>
|
<i class="material-icons left">list</i>
|
||||||
Partitionen
|
Partitionen
|
||||||
</a>
|
</a>
|
||||||
|
|
Loading…
Add table
Reference in a new issue