Cкрипт
vnstat-report.sh
разработан для автоматизации процесса генерации отчетов vnstat.
Основные возможности:
-
Создание заданных отчетов в html формате;
-
Создание index.html со списком созданных отчетов;
-
Запуск скрипта может осуществляется как в ручном режиме, так и в планировщике заданий.
Пример cкрипта vnstat-report.sh для создания отчетов vnstat (расход траффика) в формате html
(Скачать файл можно будет
здесь. ЗЫ Не тыкать! Жать правой кнопкой: сохранить ссылку как...)
Условия:
-
Установлен пакет vnstat версии 1.7 или выше и заданы настройки в /etc/vnstat.conf;
-
Создан каталог для отчетов и указан в скрипте, например SaveDir="/srv/www/htdocs/vnstat";
-
Указаны требуемые отчеты в скрипте, например Query="days weeks months null"
-
Указан требуемый вид отчета в скрипте, например Vid="png"
Текст:
#!/bin/sh
#
# vnstat-report.sh
# Report generate script for vnstat
# Version: 1.1
# Require: vnstat >= 1.7
# Author: Konstantin Nadezhdin <w.homenki.ru>
#
# По умолчанию отчет выводится на экран, поэтому укажем перенаправление
SaveDir="/srv/www/htdocs/vnstat"
# Расширение файла отчета
Ext="html"
# Вид отчета (html png)
Vid="png"
# Отчетов доступно: hours days months weeks top10 short
Query="days weeks months null"
# Исполняемые файлы
VNSTAT=/usr/bin/vnstat
VNSTATI=/usr/bin/vnstati
# Все остальные параметры будут считаны по умолчанию из конфига /etc/vnstat.conf
# Проверка каталога
if [ ! -d $SaveDir ]; then
echo "Report error! Check SaveDir=\"$SaveDir\" in $0"
exit
fi
# Проверка исполняемых файлов
if [ ! -x $VNSTAT ]; then
echo -e "Report error! Not found $VNSTAT\nCheck VNSTAT in $0"
exit
fi
if [ ! -x $VNSTATI -a "$Vid" = "png" ]; then
echo -e "Report error! Not found $VNSTATI\nCheck VNSTATI in $0"
exit
fi
# Ключи доступных отчетов (html и png):
# -h, --hours show hours
# -d, --days show days
# -m, --months show months
# -w, --weeks show weeks (только для html)
# -t, --top10 show top10
# -s, --short use short output (только для html)
# -s, --summary output summary (только для png)
# Неиспользуемые параметры (html и png):
# -q, --query query database (только для html)
# -u, --update update database (только для html)
# -i, --iface select interface (default: eth1)
# -?, --help short help
# -v, --version show version
# -tr, --traffic calculate traffic (только для html)
# -l, --live show transfer rate in real time (только для html)
# -hs, --hsummary output horizontal summary with hours (только для png)
# -vs, --vsummary output vertical summary with hours (только для png)
# -nh, --noheader remove header from output (только для png)
# -ne, --noedge remove edge from output (только для png)
# -r, --rate show hours with rate (только для png)
# -o, --output select output filename (только для png)
# -c, --cache update output only when too old (только для png)
# -D, --debug show some additional debug information (только для png)
# --config select used config file (только для png)
HeaderIn="<html>\n<head>\n<META http-equiv=\"content-type\" content=\"text/html; charset=utf-8\">\n</head>\n<body>\n"
HeaderOut="</body>\n</html>\n"
# Создаю index
echo -e "$HeaderIn" > $SaveDir/index.$Ext
echo -e "<h1>Доступны отчеты:</h1>\n" >> $SaveDir/index.$Ext
for i in $Query; do
case $i in
days)
Q="-d"
H1="по дням"
;;
weeks)
Q="-w"
H1="по неделям"
;;
months)
Q="-m"
H1="по месяцам"
;;
hours)
Q="-h"
H1="по часам"
;;
top10)
Q="-t"
H1="TOP10"
;;
short)
Q="-s"
H1="сокращенный"
;;
null)
Q=""
H1="общий"
;;
*)
echo "Report error! Check Query=\"$Query\" in $@." >> $SaveDir/index.$Ext
# Закрываю index аварийно
echo -e "$HeaderOut" >> $SaveDir/index.$Ext
exit
;;
esac
echo -e "$HeaderIn" > $SaveDir/$i.$Ext
echo -e "<h1>Отчет $H1</h1>\n<a href=\"/vnstat\">Вернуться к списку отчетов</a><br>" >> $SaveDir/$i.$Ext
if [ "$Q" != "-w" ]; then VidR=$Vid; else VidR="html"; fi
case $VidR in
html)
StringVid="Отчет $H1 (текстовый)"
echo -e "<pre>" >> $SaveDir/$i.$Ext
$VNSTAT $Q >> $SaveDir/$i.$Ext
echo -e "</pre>" >> $SaveDir/$i.$Ext
;;
png)
if [ "$Q" = "" ]; then Q="-s"; fi
StringVid="Отчет $H1 (графический)"
$VNSTATI $Q -o $SaveDir/$i.png
echo -e "<img src=\"$i.png\" alt=\"Отчет $H1\">" >> $SaveDir/$i.$Ext
;;
esac
echo -e "$HeaderOut" >> $SaveDir/$i.$Ext
# Добавляю ссылки в index
echo -e "<a href=\"$i.$Ext\">$StringVid</a><br>\n" >> $SaveDir/index.$Ext
done
# Закрываю index
echo -e "$HeaderOut" >> $SaveDir/index.$Ext