From 2efebbbf6e0e721e9943e35578ce5e59c8856de2 Mon Sep 17 00:00:00 2001 From: Daniel Date: Thu, 16 May 2019 21:58:18 +0200 Subject: [PATCH] =?UTF-8?q?partitionen=20k=C3=B6nnen=20zur=20db=20mit=20Li?= =?UTF-8?q?nk=20auf=20Drive=20hinzugef=C3=BCgt=20werden?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../{driveManagement => hardware}/__init__.py | 0 .../autoclean.py | 0 .../driveController.py => hardware/drive.py} | 8 +++++--- dirkules/{viewManager => manager}/__init__.py | 0 dirkules/manager/driveManager.py | 20 +++++++++++++++++++ .../{viewManager => manager}/viewManager.py | 0 dirkules/models.py | 14 +++++++++++-- dirkules/tasks.py | 2 +- dirkules/views.py | 7 ++++--- 9 files changed, 42 insertions(+), 9 deletions(-) rename dirkules/{driveManagement => hardware}/__init__.py (100%) rename dirkules/{driveManagement => hardware}/autoclean.py (100%) rename dirkules/{driveManagement/driveController.py => hardware/drive.py} (98%) rename dirkules/{viewManager => manager}/__init__.py (100%) create mode 100644 dirkules/manager/driveManager.py rename dirkules/{viewManager => manager}/viewManager.py (100%) diff --git a/dirkules/driveManagement/__init__.py b/dirkules/hardware/__init__.py similarity index 100% rename from dirkules/driveManagement/__init__.py rename to dirkules/hardware/__init__.py diff --git a/dirkules/driveManagement/autoclean.py b/dirkules/hardware/autoclean.py similarity index 100% rename from dirkules/driveManagement/autoclean.py rename to dirkules/hardware/autoclean.py diff --git a/dirkules/driveManagement/driveController.py b/dirkules/hardware/drive.py similarity index 98% rename from dirkules/driveManagement/driveController.py rename to dirkules/hardware/drive.py index 8420ada..879afc9 100644 --- a/dirkules/driveManagement/driveController.py +++ b/dirkules/hardware/drive.py @@ -87,7 +87,7 @@ def part_for_disk(device): parts = [] partdict = list() keys = ['name', 'label', 'fs', 'size', 'uuid', 'mount'] - + device = "/dev/" + device lsblk = subprocess.Popen( ["lsblk " + device + " -l -b -o NAME,LABEL,FSTYPE,SIZE,UUID,MOUNTPOINT"], stdout=subprocess.PIPE, @@ -122,9 +122,11 @@ def part_for_disk(device): for part in parts: values = list() for start, end in zip(element_length, element_length[1:]): - values.append(part[start:(end-1)].strip()) + values.append(part[start:(end - 1)].strip()) partdict.append(dict(zip(keys, values))) - print(partdict) + + return partdict + def getPartitions(device): partDict = [] # ist eine Liste, enthält für jede part ein dict diff --git a/dirkules/viewManager/__init__.py b/dirkules/manager/__init__.py similarity index 100% rename from dirkules/viewManager/__init__.py rename to dirkules/manager/__init__.py diff --git a/dirkules/manager/driveManager.py b/dirkules/manager/driveManager.py new file mode 100644 index 0000000..c391a46 --- /dev/null +++ b/dirkules/manager/driveManager.py @@ -0,0 +1,20 @@ +from dirkules import db +from dirkules.models import Drive, Partitions +from dirkules.hardware import drive as hardware_drives +from sqlalchemy.sql.expression import exists + + +def get_partitions(drive_id, force=False): + drive = db.session.query(Drive).get(drive_id) + partdict = hardware_drives.part_for_disk(drive.name) + for part in partdict: + part_obj = Partitions(drive.id, part.get("name"), part.get("label"), part.get("fs"), int(part.get("size")), + part.get("uuid"), part.get("mount"), drive) + existence = db.session.query(exists().where(Partitions.uuid == part_obj.uuid)).scalar() + if existence: + print(part.get("name") + " in db") + else: + print(part.get("name") + " NICHT in db") + db.session.add(part_obj) + db.session.commit() + print(drive.partitions) diff --git a/dirkules/viewManager/viewManager.py b/dirkules/manager/viewManager.py similarity index 100% rename from dirkules/viewManager/viewManager.py rename to dirkules/manager/viewManager.py diff --git a/dirkules/models.py b/dirkules/models.py index ea3ddcc..4e61ffc 100644 --- a/dirkules/models.py +++ b/dirkules/models.py @@ -17,7 +17,7 @@ class Drive(db.Model): hotplug = db.Column(db.Boolean) state = db.Column(db.String) smart = db.Column(db.Boolean) - partitions = db.relationship('Partitions', order_by="Partitions.id", backref="drives", lazy="select") + partitions = db.relationship('Partitions', order_by="Partitions.id", backref="drive", lazy="select") def __init__(self, name, model, serial, size, rota, rm, hotplug, state, smart): self.name = name @@ -37,11 +37,21 @@ class Partitions(db.Model): drive_id = db.Column(db.Integer, db.ForeignKey('drives.id'), nullable=False) name = db.Column(db.String) fs = db.Column(db.String) - size = db.Column(db.String) + size = db.Column(db.Integer) uuid = db.Column(db.String) mountpoint = db.Column(db.String) label = db.Column(db.String) + def __init__(self, drive_id, name, label, fs, size, uuid, mpoint, drive): + self.drive_id = drive_id + self.name = name + self.label = label + self.fs = fs + self.size = size + self.uuid = uuid + self.mountpoint = mpoint + self.drive = drive + class Time(db.Model): __tablename__ = 'time' diff --git a/dirkules/tasks.py b/dirkules/tasks.py index 8fc017e..16ee51d 100644 --- a/dirkules/tasks.py +++ b/dirkules/tasks.py @@ -1,6 +1,6 @@ from dirkules import scheduler import datetime -import dirkules.driveManagement.driveController as drico +import dirkules.hardware.drive as drico @scheduler.task('interval', id='refresh_disks', seconds=3600, next_run_time=datetime.datetime.now()) def refresh_disks(): diff --git a/dirkules/views.py b/dirkules/views.py index 42ecb85..8eb8714 100644 --- a/dirkules/views.py +++ b/dirkules/views.py @@ -1,12 +1,13 @@ from flask import Flask, render_template, redirect, request, url_for, flash from dirkules import app, db -import dirkules.driveManagement.driveController as drico +import dirkules.hardware.drive as drico import dirkules.serviceManagement.serviceManager as servMan from dirkules.models import Drive, Cleaning, SambaShare -import dirkules.viewManager.viewManager as viewManager +import dirkules.manager.viewManager as viewManager from dirkules.validation.validators import CleaningForm, samba_cleaning_form, SambaAddForm from sqlalchemy import asc, collate from dirkules.config import staticDir +from dirkules.manager.driveManager import get_partitions @app.route('/', methods=['GET']) @@ -72,7 +73,7 @@ def add_cleaning(): @app.route('/samba', methods=['GET']) def samba(): - drico.part_for_disk("/dev/sda") + get_partitions(1) shares = [] for share in SambaShare.query.order_by(asc(collate(SambaShare.name, 'NOCASE'))).all(): shares.append(viewManager.db_object_as_dict(share))