pool is now critical if drives are absent

This commit is contained in:
Daniel 2019-10-04 18:40:41 +02:00
parent 0534b387a5
commit cbb4b0ea97
3 changed files with 51 additions and 16 deletions

View file

@ -80,6 +80,7 @@ def get_drives():
def pool_gen(): def pool_gen():
part_dict = dict() part_dict = dict()
Pool.query.delete()
# creates map uuid is key, partitions are values # creates map uuid is key, partitions are values
for part in Partitions.query.all(): for part in Partitions.query.all():
if part.uuid in part_dict: if part.uuid in part_dict:
@ -97,7 +98,9 @@ def pool_gen():
drives = drives + str(Drive.query.get(part.drive_id)) + "," drives = drives + str(Drive.query.get(part.drive_id)) + ","
drives = drives[:-1] drives = drives[:-1]
value = value[0] value = value[0]
Pool.query.delete() missing = absent_drive(drives)
if missing is not None:
missing = ",".join(str(x.name) for x in missing)
if value.fs == "btrfs": if value.fs == "btrfs":
if value.mountpoint: if value.mountpoint:
memory_map = btrfsTools.get_space(value.mountpoint) memory_map = btrfsTools.get_space(value.mountpoint)
@ -108,7 +111,7 @@ def pool_gen():
['unbekannt', '1.00', 'unbekannt', '1.00']))) ['unbekannt', '1.00', 'unbekannt', '1.00'])))
pool_obj = Pool(value.label, memory_map.get("total"), memory_map.get("free"), raid_map.get("data_raid"), pool_obj = Pool(value.label, memory_map.get("total"), memory_map.get("free"), raid_map.get("data_raid"),
raid_map.get("data_ratio"), raid_map.get("meta_raid"), raid_map.get("meta_ratio"), value.fs, raid_map.get("data_ratio"), raid_map.get("meta_raid"), raid_map.get("meta_ratio"), value.fs,
value.mountpoint, "not implemented", drives, get_pool_health(drives)) value.mountpoint, "not implemented", drives, get_pool_health(drives), missing)
db.session.add(pool_obj) db.session.add(pool_obj)
elif value.fs == "ext4": elif value.fs == "ext4":
@ -117,7 +120,7 @@ def pool_gen():
else: else:
free_space = 2 free_space = 2
pool_obj = Pool(value.label, value.size, free_space, raid, 1.00, raid, 1.00, value.fs, value.mountpoint, pool_obj = Pool(value.label, value.size, free_space, raid, 1.00, raid, 1.00, value.fs, value.mountpoint,
"not implemented", drives) "not implemented", drives, get_pool_health(drives), missing)
db.session.add(pool_obj) db.session.add(pool_obj)
db.session.commit() db.session.commit()
@ -137,6 +140,23 @@ def get_pool_health(drive_list):
return True return True
def absent_drive(drive_list):
"""
:param drive_list: contains drives which belongs to pool
:return: List of absent drives or None
"""
missing = list()
drive_split = drive_list.split(",")
for drive in drive_split:
db_drive = db.session.query(Drive).filter(Drive.name == drive).scalar()
if db_drive.missing:
missing.append(db_drive)
if not missing:
return None
else:
return missing
def delete_drive(drive): def delete_drive(drive):
""" """
removes a given drive object (including cascades) from db removes a given drive object (including cascades) from db

View file

@ -78,9 +78,10 @@ class Pool(db.Model):
mountopt = db.Column(db.String) mountopt = db.Column(db.String)
drives = db.Column(db.String) drives = db.Column(db.String)
healthy = db.Column(db.Boolean) healthy = db.Column(db.Boolean)
missing = db.Column(db.String)
def __init__(self, label, size, free, data_raid, data_ratio, meta_raid, meta_ratio, fs, mountpoint, mountopt, def __init__(self, label, size, free, data_raid, data_ratio, meta_raid, meta_ratio, fs, mountpoint, mountopt,
drives, healthy): drives, healthy, missing):
self.label = label self.label = label
self.size = size self.size = size
self.free = free self.free = free
@ -93,6 +94,7 @@ class Pool(db.Model):
self.mountopt = mountopt self.mountopt = mountopt
self.drives = drives self.drives = drives
self.healthy = healthy self.healthy = healthy
self.missing = missing
class Time(db.Model): class Time(db.Model):

View file

@ -81,7 +81,7 @@
</tr> </tr>
<tr> <tr>
<td>Gesundheit</td> <td>Gesundheit</td>
{% if pool.healthy %} {% if pool.healthy and pool.missing is none %}
<td class="positive"><i class="icon checkmark"></i>Gesund</td> <td class="positive"><i class="icon checkmark"></i>Gesund</td>
{% else %} {% else %}
<td class="negative"><i class="attention icon"></i>Kritisch</td> <td class="negative"><i class="attention icon"></i>Kritisch</td>
@ -99,13 +99,14 @@
</div> </div>
<p> <p>
Die RAID Level von Data und Metadata unterscheiden sich. Normalerweise sollten beide gleich Die RAID Level von Data und Metadata unterscheiden sich. Normalerweise sollten beide gleich
konfiguriert werden, da es sonst unter Umständen zu <b>Datenverlust</b> kommen kann, wenn ein konfiguriert werden, da es sonst unter Umständen zu <b>Datenverlust</b> kommen kann, wenn
ein
Laufwerk ausfällt.<br> Laufwerk ausfällt.<br>
Solltest du einen guten Grund dafür haben, ignoriere einfach diese Meldung. Solltest du einen guten Grund dafür haben, ignoriere einfach diese Meldung.
</p> </p>
</div> </div>
{% endif %} {% endif %}
{% if pool.healthy %} {% if pool.healthy and pool.missing is none %}
<div class="ui positive message"> <div class="ui positive message">
<i class="close icon"></i> <i class="close icon"></i>
<div class="header"> <div class="header">
@ -116,16 +117,28 @@
</p> </p>
</div> </div>
{% else %} {% else %}
<div class="ui negative message"> {% if not pool.healthy %}
<i class="close icon"></i> <div class="ui negative message">
<div class="header"> <i class="close icon"></i>
Kritischer Zustand <div class="header">
Kritischer Zustand
</div>
<p>
Mindetstens ein Laufwerk befindet sich in einem schlechten Zustand! Du solltest
dieses schnellstmöglich tauschen.
</p>
</div> </div>
<p> {% else %}
Mindetstens ein Laufwerk befindet sich in einem schlechten Zustand! Du solltest <div class="ui negative message">
dieses schnellstmöglich tauschen. <i class="close icon"></i>
</p> <div class="header">
</div> Kritischer Zustand
</div>
<p>
Folgende Laufwerke wurden nicht gefunden: {{ pool.missing }}
</p>
</div>
{% endif %}
{% endif %} {% endif %}
</div> </div>
</div> </div>