more cleaning blueprint

This commit is contained in:
Daniel 2019-11-28 12:01:15 +01:00
parent b4bd35f5fa
commit 62bf109f47
8 changed files with 99 additions and 91 deletions

View file

@ -15,6 +15,7 @@ app_version = app.config["VERSION"]
import dirkules.models import dirkules.models
import dirkules.samba.models import dirkules.samba.models
import dirkules.cleaning.models
# create db if not exists # create db if not exists
db.create_all() db.create_all()

View file

@ -0,0 +1,9 @@
from dirkules import db
from dirkules.cleaning.models import Cleaning
def create_cleaning_obj(jobname, path, active):
job = Cleaning(jobname, path, active)
db.session.add(job)
db.session.commit()

View file

@ -0,0 +1,18 @@
import datetime
from dirkules import db
class Cleaning(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String)
path = db.Column(db.String)
# state 0 means inactive - do not execute
state = db.Column(db.Boolean)
# time means last execution
time = db.Column(db.DateTime(timezone=True), default=datetime.datetime.now)
def __init__(self, name, path, state):
self.name = name
self.path = path
self.state = state

View file

@ -0,0 +1,65 @@
from flask import request, redirect, flash, render_template, url_for
from dirkules import app, db
from dirkules.cleaning.manager import create_cleaning_obj
from dirkules.cleaning.models import Cleaning
@app.route('/cleaning', methods=['GET'])
def cleaning():
remove = request.args.get('remove')
changestate = request.args.get('changestate')
service = request.args.get('service')
if not (remove is not None and changestate is not None):
if remove is not None:
try:
remove = int(remove)
Cleaning.query.filter(Cleaning.id == remove).delete()
db.session.commit()
return redirect(request.path, code=302)
except ValueError:
flash("Value Error: remove")
elif changestate is not None:
try:
changestate = int(changestate)
job = Cleaning.query.get(changestate)
if job.state == 0:
job.state = 1
else:
job.state = 0
db.session.commit()
return redirect(request.path, code=302)
except ValueError:
flash("Value Error: changestate")
else:
flash("Value Error: remove and changestate set")
if service is not None:
try:
service = str(service)
if service == "start":
if not cleaningMan.running():
cleaningMan.enable()
return redirect(request.path, code=302)
else:
flash("Error: Cleaning Service already running.")
elif service == "pause":
if cleaningMan.running():
cleaningMan.disable()
return redirect(request.path, code=302)
else:
flash("Error: Cleaning Service already paused.")
else:
raise ValueError
except ValueError:
flash("Value Error: service")
elements = Cleaning.query.order_by(db.asc(db.collate(Cleaning.name, 'NOCASE'))).all()
return render_template('cleaning.html', elements=elements, task_running=cleaningMan.running())
@app.route('/add_cleaning', methods=['GET', 'POST'])
def add_cleaning():
form = CleaningForm(request.form)
if request.method == 'POST' and form.validate():
create_cleaning_obj(form.jobname.data, form.path.data, form.active.data)
return redirect(url_for('cleaning'))
return render_template('add_cleaning.html', form=form)

View file

@ -1,6 +1,6 @@
import datetime import datetime
import os import os
from dirkules.models import Cleaning from dirkules.cleaning.models import Cleaning
from dirkules.hardware import autoclean from dirkules.hardware import autoclean
from dirkules import db, app, scheduler from dirkules import db, app, scheduler

View file

@ -1,13 +1,6 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
from dirkules import db
from dirkules.hardware.btrfsTools import create_pool from dirkules.hardware.btrfsTools import create_pool
from dirkules.models import Cleaning, Drive from dirkules.models import Drive
def create_cleaning_obj(jobname, path, active):
job = Cleaning(jobname, path, active)
db.session.add(job)
db.session.commit()
def get_empty_drives(): def get_empty_drives():

View file

@ -1,4 +1,3 @@
import datetime
from dirkules import db from dirkules import db
@ -104,19 +103,3 @@ class Time(db.Model):
def __init__(self, desc): def __init__(self, desc):
self.desc = desc self.desc = desc
class Cleaning(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String)
path = db.Column(db.String)
# state 0 means inactive - do not execute
state = db.Column(db.Boolean)
# time means last execution
time = db.Column(db.DateTime(timezone=True), default=datetime.datetime.now)
def __init__(self, name, path, state):
self.name = name
self.path = path
self.state = state

View file

@ -1,14 +1,13 @@
import datetime import datetime
import subprocess import subprocess
from time import sleep from time import sleep
from flask import render_template, redirect, request, url_for, flash, abort from flask import render_template, redirect, request, url_for, abort
from dirkules import app, db, scheduler, app_version from dirkules import app, scheduler, app_version
import dirkules.manager.serviceManager as servMan import dirkules.manager.serviceManager as servMan
import dirkules.manager.driveManager as driveMan import dirkules.manager.driveManager as driveMan
import dirkules.manager.cleaning as cleaningMan from dirkules.models import Drive, Pool
from dirkules.models import Drive, Cleaning, Pool
import dirkules.manager.viewManager as viewManager import dirkules.manager.viewManager as viewManager
from dirkules.validation.validators import CleaningForm, PoolAddForm from dirkules.validation.validators import PoolAddForm
@app.errorhandler(404) @app.errorhandler(404)
@ -85,63 +84,3 @@ def partitions(part):
except LookupError: except LookupError:
abort(500, description="Invalid drive id {}".format(part)) abort(500, description="Invalid drive id {}".format(part))
return render_template('partitions.html', parts=drive.partitions) return render_template('partitions.html', parts=drive.partitions)
@app.route('/cleaning', methods=['GET'])
def cleaning():
remove = request.args.get('remove')
changestate = request.args.get('changestate')
service = request.args.get('service')
if not (remove is not None and changestate is not None):
if remove is not None:
try:
remove = int(remove)
Cleaning.query.filter(Cleaning.id == remove).delete()
db.session.commit()
return redirect(request.path, code=302)
except ValueError:
flash("Value Error: remove")
elif changestate is not None:
try:
changestate = int(changestate)
job = Cleaning.query.get(changestate)
if job.state == 0:
job.state = 1
else:
job.state = 0
db.session.commit()
return redirect(request.path, code=302)
except ValueError:
flash("Value Error: changestate")
else:
flash("Value Error: remove and changestate set")
if service is not None:
try:
service = str(service)
if service == "start":
if not cleaningMan.running():
cleaningMan.enable()
return redirect(request.path, code=302)
else:
flash("Error: Cleaning Service already running.")
elif service == "pause":
if cleaningMan.running():
cleaningMan.disable()
return redirect(request.path, code=302)
else:
flash("Error: Cleaning Service already paused.")
else:
raise ValueError
except ValueError:
flash("Value Error: service")
elements = Cleaning.query.order_by(db.asc(db.collate(Cleaning.name, 'NOCASE'))).all()
return render_template('cleaning.html', elements=elements, task_running=cleaningMan.running())
@app.route('/add_cleaning', methods=['GET', 'POST'])
def add_cleaning():
form = CleaningForm(request.form)
if request.method == 'POST' and form.validate():
viewManager.create_cleaning_obj(form.jobname.data, form.path.data, form.active.data)
return redirect(url_for('cleaning'))
return render_template('add_cleaning.html', form=form)