мета-данные страницы
Это старая версия документа!
Отчеты в Bareos
В данной системе бэкапирования к сожалению нет удобного визуального контроля за тем какие файлы и в какой момент были записаны на ленточное хранилище.
И я решил сам сделать такой функционал т.к. смотреть через bconsole не очень удобно из-за привязки записанных файлов к заданию job
Я изучил структуру базы данных и зависимости таблиц между собой, что бы понять какие данные мне нужно включить в отчетность и что бы ничего лишнего не попало туда.
Кратко описываю что мне нужно извлечь из базы
Есть таблицы job, file, media
в таблице job есть столбец name, из него мы считываем только содержимое с названием BackupOnTape,
так же есть столбец jobid и он идентичен в таблице file
Теперь в таблице file сопоставив jobid мы должны вытащить из столбца name который в таблице file название
В таблице media есть столбец poolid он понадобится для понимания какой используется пул
Но мне из таблицы media более важно знать что в столбце volumename и выводить эту информацию
Еще в таблице media есть вот такой столбец mediatype, мне важно что бы в финальном отчете он тоже фигурировал, но при условии что в mediatype будет исключительно содержимое с названием LTO
И из таблицы job нужны два столбца starttime и endtime, которые отвечают за начало и конец записи на ленту.
Таким образом резюмируем
Мне нужно сформировать отчет в котором будет:
- volumename,poolid,mediatype из таблицы media
- name из таблицы file
- name,jobid,starttime,endtime из таблицы job
У меня получился вот такой SQL запрос
download
SELECT
m.volumename AS volumename,
f.name AS file_name,
j.name AS job_name,
j.jobid AS jobid,
m.mediatype AS mediatype,
j.starttime AS starttime,
j.endtime AS endtime,
m.poolid AS poolid
FROM
public.job j
JOIN
public.file f ON j.jobid = f.jobid
JOIN
public.media m ON m.poolid IS NOT NULL
WHERE
j.name = 'BackupOnTape' AND
m.mediatype = 'LTO' AND
m.poolid = 2;
download
COPY (
SELECT
m.volumename AS volumename,
f.name AS file_name,
j.name AS job_name,
j.jobid AS jobid,
m.mediatype AS mediatype,
j.starttime AS starttime,
j.endtime AS endtime,
m.poolid AS poolid
FROM
public.job j
JOIN
public.file f ON j.jobid = f.jobid
JOIN
public.media m ON m.poolid IS NOT NULL
WHERE
j.name = 'BackupOnTape' AND
m.mediatype = 'LTO' AND
m.poolid = 2
) TO '/ВАШ ПУТЬ/report.txt' WITH (FORMAT csv, HEADER);
Но это все сырые данные и так мы только убедились что все работает, теперь нужно создать веб интерфейс и прикрутить кнопку в основной веб интерфейс bareos
Создание веб интерфейса
Создаем такую структуру
download
/var/www/html/
└── reports_bareos
├── reports_bareos.py
├── static
│ └── style.css
└── templates
├── index.html
└── report.html
Содержимое файла index.html
download
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Форма для отчета</title>
<link rel="stylesheet" href="{{ url_for('static', filename='style.css') }}">
</head>
<body>
<h1>Форма для отчета</h1>
<form action="/report" method="get">
<label for="volumename">Номер ленты (Пример 000005):</label>
<input type="text" id="volumename" name="volumename">
<label for="start_date">Дата начала:</label>
<input type="date" id="start_date" name="start_date">
<label for="end_date">Дата окончания:</label>
<input type="date" id="end_date" name="end_date">
<input type="submit" value="Сформировать отчет">
</form>
</body>
</html>
Содержимое файла report.html
download
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Отчет</title>
<link rel="stylesheet" href="{{ url_for('static', filename='style.css') }}">
</head>
<body>
<h1>Отчет</h1>
<table border="1">
<tr>
<th>Volume Name</th>
<th>File Name</th>
<th>Job Name</th>
<th>Job ID</th>
<th>Media Type</th>
<th>Start Time</th>
<th>End Time</th>
<th>Pool ID</th>
</tr>
{% for row in reports %}
<tr>
<td>{{ row[0] }}</td>
<td>{{ row[1] }}</td>
<td>{{ row[2] }}</td>
<td>{{ row[3] }}</td>
<td>{{ row[4] }}</td>
<td>{{ row[5] }}</td>
<td>{{ row[6] }}</td>
<td>{{ row[7] }}</td>
</tr>
{% endfor %}
</table>
<br>
<a href="/">Вернуться назад</a>
</body>
</html>
Обсуждение