Better filtering and list view in backups

This commit is contained in:
sepehr 2024-07-31 17:41:12 +03:30
parent 463161c291
commit ef3ce0e133
2 changed files with 63 additions and 13 deletions

View file

@ -5,15 +5,23 @@
# MikroWizard.com , Mikrotik router management solution
# 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.webutil import app, login_required,buildResponse,get_myself,get_ip,get_agent
import bgtasks
import logging
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")
@app.route('/api/backup/make', methods = ['POST'])
@ -39,12 +47,52 @@ def backup_create():
@login_required(role='admin',perm={'backup':'read'})
def backup_list():
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)
size = input.get('size')
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=[]
log.error("backups")
if search and ISPRO:
backups=utilpro.search_in_backups(search, backups)
for back in backups:
data={}
if back.devid:
@ -70,10 +118,14 @@ def backup_list():
def backup_get():
input = request.json
id=input.get('id')
back=db_backups.get_backup(id)
path=back.dir
with open(path, 'r') as file:
file_content = file.read()
try:
back=db_backups.get_backup(id)
path=back.dir
with open(path, 'r') as file:
file_content = file.read()
except Exception as e:
log.error(e)
return buildResponse({"status":"failed"}, 200)
return buildResponse({"content":file_content}, 200)
@app.route('/api/backup/status', methods = ['POST'])