mirror of
https://github.com/MikroWizard/mikroman.git
synced 2025-07-09 21:44:30 +02:00
Better filtering and list view in backups
This commit is contained in:
parent
463161c291
commit
ef3ce0e133
2 changed files with 63 additions and 13 deletions
|
@ -5,15 +5,23 @@
|
||||||
# MikroWizard.com , Mikrotik router management solution
|
# MikroWizard.com , Mikrotik router management solution
|
||||||
# Author: sepehr.ha@gmail.com
|
# Author: sepehr.ha@gmail.com
|
||||||
|
|
||||||
from flask import request, jsonify
|
from flask import request, jsonify,session
|
||||||
|
|
||||||
from libs.db import db_tasks,db_backups,db_device,db_syslog
|
from libs.db import db_tasks,db_backups,db_device,db_syslog,db_user_group_perm
|
||||||
from libs import util
|
from libs import util
|
||||||
from libs.webutil import app, login_required,buildResponse,get_myself,get_ip,get_agent
|
from libs.webutil import app, login_required,buildResponse,get_myself,get_ip,get_agent
|
||||||
import bgtasks
|
import bgtasks
|
||||||
import logging
|
import logging
|
||||||
import json
|
import json
|
||||||
|
import datetime
|
||||||
|
from functools import reduce
|
||||||
|
import operator
|
||||||
|
try:
|
||||||
|
from libs import utilpro
|
||||||
|
ISPRO=True
|
||||||
|
except ImportError:
|
||||||
|
ISPRO=False
|
||||||
|
pass
|
||||||
log = logging.getLogger("api.firmware")
|
log = logging.getLogger("api.firmware")
|
||||||
|
|
||||||
@app.route('/api/backup/make', methods = ['POST'])
|
@app.route('/api/backup/make', methods = ['POST'])
|
||||||
|
@ -39,12 +47,52 @@ def backup_create():
|
||||||
@login_required(role='admin',perm={'backup':'read'})
|
@login_required(role='admin',perm={'backup':'read'})
|
||||||
def backup_list():
|
def backup_list():
|
||||||
input = request.json
|
input = request.json
|
||||||
page = input.get('page')
|
event_start_time=input.get('start_time',False)
|
||||||
|
event_end_time=input.get('end_time',False)
|
||||||
devid = input.get('devid',False)
|
devid = input.get('devid',False)
|
||||||
size = input.get('size')
|
|
||||||
search = input.get('search')
|
search = input.get('search')
|
||||||
backups = db_backups.query_backup_jobs(page, size, search,devid=devid)
|
uid = session.get("userid") or False
|
||||||
|
if not devid:
|
||||||
|
devs=list(db_user_group_perm.DevUserGroupPermRel.get_user_devices(uid))
|
||||||
|
dev_ids=[dev.id for dev in devs]
|
||||||
|
else:
|
||||||
|
dev=db_device.get_device(devid)
|
||||||
|
if not dev:
|
||||||
|
return buildResponse({'status': 'failed'}, 200, error="Wrong Data")
|
||||||
|
dev_ids=[devid]
|
||||||
|
backups = db_backups.Backups
|
||||||
|
log.error("1")
|
||||||
|
clauses = []
|
||||||
|
clauses.append(backups.devid << dev_ids)
|
||||||
|
if event_start_time:
|
||||||
|
event_start_time=event_start_time.split(".000Z")[0]
|
||||||
|
event_start_time=datetime.datetime.strptime(event_start_time, "%Y-%m-%dT%H:%M:%S")
|
||||||
|
clauses.append(backups.created >= event_start_time)
|
||||||
|
else:
|
||||||
|
clauses.append(backups.created >= datetime.datetime.now()-datetime.timedelta(days=1))
|
||||||
|
if event_end_time:
|
||||||
|
event_end_time=event_end_time.split(".000Z")[0]
|
||||||
|
event_end_time=datetime.datetime.strptime(event_end_time, "%Y-%m-%dT%H:%M:%S")
|
||||||
|
clauses.append(backups.created <= event_end_time)
|
||||||
|
else:
|
||||||
|
clauses.append(backups.created <= datetime.datetime.now())
|
||||||
|
expr=""
|
||||||
|
devs=db_device.Devices
|
||||||
|
try:
|
||||||
|
if len(clauses):
|
||||||
|
expr = reduce(operator.and_, clauses)
|
||||||
|
query=backups.select().where(expr)
|
||||||
|
else:
|
||||||
|
query=backups.select()
|
||||||
|
query=query.order_by(backups.id.desc())
|
||||||
|
backups=list(query)
|
||||||
|
except Exception as e:
|
||||||
|
log.error(e)
|
||||||
|
return buildResponse({"status":"failed", "err":str(e)}, 200)
|
||||||
reply=[]
|
reply=[]
|
||||||
|
log.error("backups")
|
||||||
|
if search and ISPRO:
|
||||||
|
backups=utilpro.search_in_backups(search, backups)
|
||||||
for back in backups:
|
for back in backups:
|
||||||
data={}
|
data={}
|
||||||
if back.devid:
|
if back.devid:
|
||||||
|
@ -70,10 +118,14 @@ def backup_list():
|
||||||
def backup_get():
|
def backup_get():
|
||||||
input = request.json
|
input = request.json
|
||||||
id=input.get('id')
|
id=input.get('id')
|
||||||
|
try:
|
||||||
back=db_backups.get_backup(id)
|
back=db_backups.get_backup(id)
|
||||||
path=back.dir
|
path=back.dir
|
||||||
with open(path, 'r') as file:
|
with open(path, 'r') as file:
|
||||||
file_content = file.read()
|
file_content = file.read()
|
||||||
|
except Exception as e:
|
||||||
|
log.error(e)
|
||||||
|
return buildResponse({"status":"failed"}, 200)
|
||||||
return buildResponse({"content":file_content}, 200)
|
return buildResponse({"content":file_content}, 200)
|
||||||
|
|
||||||
@app.route('/api/backup/status', methods = ['POST'])
|
@app.route('/api/backup/status', methods = ['POST'])
|
||||||
|
|
|
@ -37,8 +37,6 @@ def query_backup_jobs(page=0, limit=1000, search=None , devid=False):
|
||||||
q = q.where(Backups.dir ** search)
|
q = q.where(Backups.dir ** search)
|
||||||
if devid:
|
if devid:
|
||||||
q = q.where(Backups.devid == devid)
|
q = q.where(Backups.devid == devid)
|
||||||
start_time=datetime.datetime.now()-datetime.timedelta(days=3)
|
|
||||||
q = q.where(Backups.created >= start_time)
|
|
||||||
q = q.paginate(page, limit).order_by(Backups.id.desc())
|
q = q.paginate(page, limit).order_by(Backups.id.desc())
|
||||||
return q
|
return q
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue