Commit f7a10b59 authored by Oleg Borisenko's avatar Oleg Borisenko
Browse files

basic filters for files view

parent e29445a8
import argparse
import logging
import sys
from tapebackup import models
log = logging.getLogger("tapebackup_eventloop")
def parse_args(argv):
parser = argparse.ArgumentParser()
help='Configuration file, e.g., development.ini',
return parser.parse_args(argv[1:])
class GracefulExiter():
def __init__(self):
self.state = False
signal.signal(signal.SIGINT, self.change_state)
def change_state(self, signum, frame):"Exiting gracefully; repeat CTRL+C to exit forcibly (not recommended)")
signal.signal(signal.SIGINT, signal.SIG_DFL)
self.state = True
def exit(self):
return self.state
# TODO: more args + daemonize
def main(argv=sys.argv):
args = parse_args(argv)
env = bootstrap(args.config_uri)
flag = GracefulExiter()
backup_is_running = False
for proc in psutil.process_iter():
# Check if process name contains the given name string.
if 'python' in
if any('' in x for x in proc.cmdline()):
backup_is_running = True
except (psutil.NoSuchProcess, psutil.AccessDenied, psutil.ZombieProcess):
if backup_is_running:
log.error("You can't run backup and restore the same time (backup is running); exiting")
loop = asyncio.get_event_loop()
while True:
with env['request'].tm:
# returns restore queue by tape and serves the right tape
except SQLAlchemyError as e:
except Exception as e:
if __name__ == '__main__':
\ No newline at end of file
......@@ -22,7 +22,7 @@
Скорировано на кассету
Скопировано на кассету
Уникальный ID цели
......@@ -64,7 +64,7 @@
<div class="form-group">
<button type="submit" class="button">Восстановить попадающее под фильтр на выбранную цель восстновления</button>
<button type="submit" class="button">Восстановить попадающее под фильтр на выбранную цель восстановления</button>
{% endblock %}
\ No newline at end of file
......@@ -20,30 +20,30 @@
<input type="email" placeholder="Вбейте валидный и существующий локальный путь в ФС сервера backups" class="input"/>
<div class="form-group" id="backup_period_selector">
<label class="label" id="icpe8">Период сканирования</label>
<select class="select" id="idlsu"><option value="" id="itae1">- Выберите период -</option>
<label class="label">Период сканирования</label>
<select class="select"><option value="" id="itae1">- Выберите период -</option>
<option value="1">Раз в сутки</option>
<option value="2">Раз в двое суток</option>
<option value="7">Раз в неделю</option>
<option value="30">Раз в 30 дней</option>
<div class="form-group" id="i7o81">
<label class="label" id="i8ylf">Тип сканируемой цели (лишние файлы относительно типа игнорируются)</label>
<select class="select" id="i040c">
<option value="" id="i3twi">- Выберите тип -</option>
<div class="form-group">
<label class="label">Тип сканируемой цели (лишние файлы относительно типа игнорируются)</label>
<select class="select">
<option value="">- Выберите тип -</option>
<option value="wgs">Полногеномные данные</option>
<option value="vcf">Данные VCF</option>
<option value="db">Данные баз данных</option>
<option value="files">Произвольные данные</option>
<div class="form-group" id="i0jbz">
<button type="submit" class="button" id="ir3p2">Зарегистрировать цель бэкапа</button>
<div class="form-group">
<button type="submit" class="button">Зарегистрировать цель бэкапа</button>
<div class="row" id="icuox">
<div class="cell" id="itde6">
<div class="row">
<div class="cell">
<table class="backup_targets">
<th>Уникальная метка</th>
......@@ -115,6 +115,29 @@ def tapes_route(request):
@view_config(route_name="files", renderer='tapebackup:templates/files.jinja2')
def files_route(request):
files = request.dbsession.query(models.FileToBackup).filter(
models.FileToBackup.is_file == True).order_by(models.FileToBackup.tape_label).limit(100).all()
return {"files": files}
\ No newline at end of file
limit = request.GET.get('limit') or 100
page = request.GET.get('page') or 0
files = request.dbsession.query(models.FileToBackup).filter(models.FileToBackup.is_file == True)
tape_label = request.GET.get('tape_label')
if tape_label:
files = files.filter(models.FileToBackup.tape_label == tape_label)
target_unique_label = request.GET.get('target_unique_label')
if target_unique_label:
files = files.filter(models.FileToBackup.target_unique_label == target_unique_label)
kind = request.GET.get('kind')
if kind:
files = files.filter(models.FileToBackup.kind == kind)
file_mtime_before = request.GET.get('file_mtime_before')
if file_mtime_before:
files = files.filter(models.FileToBackup.file_mtime <= file_mtime_before)
file_mtime_after = request.GET.get('file_mtime_after')
if file_mtime_after:
files = files.filter(models.FileToBackup.file_mtime >= file_mtime_after)
# labnum = request.GET.get('labnum')
# if labnum:
# files = files.filter(models.FileToBackup.)
files = files.order_by(models.FileToBackup.copied_at_time)
files = files.offset(page*limit)
files = files.limit(limit).all()
return {"files": files, "limit": limit, "page": page}
\ No newline at end of file
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment