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.samba.models
import dirkules.cleaning.models
# create db if not exists
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 os
from dirkules.models import Cleaning
from dirkules.cleaning.models import Cleaning
from dirkules.hardware import autoclean
from dirkules import db, app, scheduler

View file

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

View file

@ -1,4 +1,3 @@
import datetime
from dirkules import db
@ -104,19 +103,3 @@ class Time(db.Model):
def __init__(self, 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 subprocess
from time import sleep
from flask import render_template, redirect, request, url_for, flash, abort
from dirkules import app, db, scheduler, app_version
from flask import render_template, redirect, request, url_for, abort
from dirkules import app, scheduler, app_version
import dirkules.manager.serviceManager as servMan
import dirkules.manager.driveManager as driveMan
import dirkules.manager.cleaning as cleaningMan
from dirkules.models import Drive, Cleaning, Pool
from dirkules.models import Drive, Pool
import dirkules.manager.viewManager as viewManager
from dirkules.validation.validators import CleaningForm, PoolAddForm
from dirkules.validation.validators import PoolAddForm
@app.errorhandler(404)
@ -85,63 +84,3 @@ def partitions(part):
except LookupError:
abort(500, description="Invalid drive id {}".format(part))
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)