Skip to content
GitLab
Menu
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
Oleg Borisenko
tapebackup
Commits
f7a10b59
Commit
f7a10b59
authored
Jun 23, 2021
by
Oleg Borisenko
Browse files
basic filters for files view
parent
e29445a8
Changes
4
Hide whitespace changes
Inline
Side-by-side
tapebackup/scripts/restore_daemon.py
0 → 100644
View file @
f7a10b59
import
argparse
import
logging
import
sys
from
tapebackup
import
models
log
=
logging
.
getLogger
(
"tapebackup_eventloop"
)
def
parse_args
(
argv
):
parser
=
argparse
.
ArgumentParser
()
parser
.
add_argument
(
'config_uri'
,
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
):
log
.
info
(
"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
)
setup_logging
(
args
.
config_uri
)
env
=
bootstrap
(
args
.
config_uri
)
flag
=
GracefulExiter
()
backup_is_running
=
False
for
proc
in
psutil
.
process_iter
():
try
:
# Check if process name contains the given name string.
if
'python'
in
proc
.
name
():
if
any
(
'backup_daemon.py'
in
x
for
x
in
proc
.
cmdline
()):
backup_is_running
=
True
except
(
psutil
.
NoSuchProcess
,
psutil
.
AccessDenied
,
psutil
.
ZombieProcess
):
pass
if
backup_is_running
:
log
.
error
(
"You can't run backup and restore the same time (backup is running); exiting"
)
exit
(
-
1
)
loop
=
asyncio
.
get_event_loop
()
try
:
while
True
:
with
env
[
'request'
].
tm
:
# returns restore queue by tape and serves the right tape
restore_copy_queue
()
except
SQLAlchemyError
as
e
:
log
.
error
(
str
(
e
))
raise
except
Exception
as
e
:
log
.
error
(
e
)
raise
finally
:
loop
.
close
()
if
__name__
==
'__main__'
:
main
()
\ No newline at end of file
tapebackup/templates/files.jinja2
View file @
f7a10b59
...
...
@@ -22,7 +22,7 @@
<thead>
<tr>
<td>
Ско
р
ировано на кассету
Ско
п
ировано на кассету
</td>
<td>
Уникальный ID цели
...
...
@@ -64,7 +64,7 @@
</table>
<form>
<div class="form-group">
<button type="submit" class="button">Восстановить попадающее под фильтр на выбранную цель восстновления</button>
<button type="submit" class="button">Восстановить попадающее под фильтр на выбранную цель восст
а
новления</button>
</div>
</form>
{% endblock %}
\ No newline at end of file
tapebackup/templates/targets.jinja2
View file @
f7a10b59
...
...
@@ -20,30 +20,30 @@
<input type="email" placeholder="Вбейте валидный и существующий локальный путь в ФС сервера backups" class="input"/>
</div>
<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>
</select>
</div>
<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>
</select>
</div>
<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>
</form>
<div class="row"
id="icuox"
>
<div class="cell"
id="itde6"
>
<div class="row">
<div class="cell">
<table class="backup_targets">
<th>Уникальная метка</th>
<th>Тип</th>
...
...
tapebackup/views/default.py
View file @
f7a10b59
...
...
@@ -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
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment