Browse Source

make ev script

devel
Dmitry Novikov 7 years ago
parent
commit
1e7e67aba6
  1. 52
      agent/netflow/netflow_collect.sh
  2. 13
      agent/netflow/netflow_handler.sh
  3. 0
      agent/netflow/start_netflow.sh
  4. 2
      docs/netflow.md
  5. 1
      install/install_debian.sh
  6. 2
      systemd_units/djing_rotate.service
  7. 14
      traf_stat/models.py

52
agent/netflow/netflow_collect.sh

@ -0,0 +1,52 @@
#!/usr/bin/env bash
PATH=/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin
read -r mysql_database mysql_user mysql_passw mysql_host mysql_port <<< `python3 -c "\
from importlib.util import spec_from_file_location, module_from_spec
spec = spec_from_file_location('local_settings', '../../djing/local_settings.py')
ls = module_from_spec(spec)
spec.loader.exec_module(ls)
db = ls.DATABASES
ldb = db.get('default')
print('%s %s %s %s %d' % (ldb['NAME'], ldb['USER'],
ldb['PASSWORD'], ldb['HOST'], ldb['PORT']))"`
tmp_ipuser_file='/tmp/ipuser.txt'
if ! ping -c 1 ${mysql_host} &> /dev/null; then
echo "Host ${mysql_host} is not accessible"
fi
cd /var/www/djing
# Формируем список абонентов и их id
sql="SELECT INET_ATON(ip_address) as uip, baseaccount_ptr_id FROM abonent WHERE INET_ATON(ip_address) != 'NULL';"
count=`mysql -u${mysql_user} -h ${mysql_host} -p --password=${mysql_passw} -P ${mysql_port} -NBe "select COUNT(*) from abonent WHERE INET_ATON(ip_address) != 'NULL';"`
echo "count: $count" > ${tmp_ipuser_file}
mysql -u${mysql_user} -h ${mysql_host} -p --password=${mysql_passw} -P ${mysql_port} -D ${mysql_database} -NBe ${sql} | while read -r uip uid;
do
echo "${uip}-${uid}" >> ${tmp_ipuser_file}
done
# Сигналим коллекторам чтоб они сбросили дамп в папку /tmp/djing_flow/dump
for fl in /run/flow.pid.*; do
kill -HUP `cat ${fl}`
done
sleep 0.5
# Экспортируем всё в mysql
export LD_LIBRARY_PATH=.
./djing_flow ${tmp_ipuser_file} < flow-cat /tmp/djing_flow/dump/*.dmp | \
mysql -u${mysql_user} -h ${mysql_host} -p ${mysql_database} -P ${mysql_port}--password=${mysql_passw}
rm -f tmp_ipuser_file
rm -f /tmp/djing_flow/dump/*.dmp

13
agent/netflow/netflow_handler.sh

@ -0,0 +1,13 @@
#!/usr/bin/env bash
if [-n "$1" ]; then
echo "missing filename"
exit
fi
fname=$1
PATH=/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin
cd /tmp/djing_flow
mkdir -p /tmp/djing_flow/dump
mv ${fname} /tmp/djing_flow/dump/${fname}.dmp

0
agent/netflow/start_netflow.sh

2
docs/netflow.md

@ -25,7 +25,7 @@ rm -rf djing_flow_git
Запустится сбор трафика. Чтоб узнать больше почитайте инструкции по использованию flow-tools. Настройте netflow sensor на Запустится сбор трафика. Чтоб узнать больше почитайте инструкции по использованию flow-tools. Настройте netflow sensor на
ваш сервер. Для того чтоб сбросить дамп трафика на диск отправте сигнал **-HUP** процессу flow-capture. В */tmp/djing_flow* ваш сервер. Для того чтоб сбросить дамп трафика на диск отправте сигнал **-HUP** процессу flow-capture. В */tmp/djing_flow*
вы найдёте этот самый файл дампа трафика. И тут уже можно посмотреть как работает утилита **djing_flow**: вы найдёте этот самый файл дампа трафика. И тут уже можно посмотреть как работает утилита **djing_flow**:
> \$ ./djing_flow < /tmp/djing_flow_dump.tmp
> \$ ./djing_flow < /tmp/.tmp
На выходе вы получите запрос для mysql. Можно перенаправить его по конвееру в mysql, рабочий пример На выходе вы получите запрос для mysql. Можно перенаправить его по конвееру в mysql, рабочий пример
перенаправления этогй утилиты вы можете увидеть в файле перенаправления этогй утилиты вы можете увидеть в файле

1
install/install_debian.sh

@ -49,6 +49,7 @@ find . -type d \( -path ./venv -o -path ./src -o -path ./.git \) -prune -o -type
find . -type d \( -path ./venv -o -path ./src -o -path ./.git \) -prune -o -type f -exec chmod 640 {} \; find . -type d \( -path ./venv -o -path ./src -o -path ./.git \) -prune -o -type f -exec chmod 640 {} \;
# exec scripts # exec scripts
chmod 750 dhcp_lever.py manage.py periodic.py devapp/expect_scripts/dlink_DGS1100_reboot.exp agent/netflow/netflow_handler.py chmod 750 dhcp_lever.py manage.py periodic.py devapp/expect_scripts/dlink_DGS1100_reboot.exp agent/netflow/netflow_handler.py
chmod 750 agent/netflow/netflow_handler_slave.sh
chmod 400 djing/settings.py chmod 400 djing/settings.py
rm /etc/nginx/sites-enabled/default rm /etc/nginx/sites-enabled/default

2
systemd_units/djing_rotate.service

@ -4,7 +4,7 @@ Description=A job for rotate djing netflow data
[Service] [Service]
Environment="PATH=/usr/local/sbin:/usr/local/bin:/usr/bin" Environment="PATH=/usr/local/sbin:/usr/local/bin:/usr/bin"
Type=oneshot Type=oneshot
ExecStart=/bin/bash -c "kill -HUP `/bin/cat /run/flow.pid.6343`"
ExecStart=/var/www/djing/agent/netflow/netflow_handler.sh
User=root User=root
Group=root Group=root

14
traf_stat/models.py

@ -103,13 +103,13 @@ class StatElem(models.Model):
abstract = True abstract = True
def getModel(want_date=now()):
class DynamicStatElem(StatElem):
class Meta:
db_table = 'flowstat_%s' % want_date.strftime("%d%m%Y")
abstract = False
return DynamicStatElem
def getModel(want_date=None):
if want_date is None:
want_date = now()
se = StatElem
se.Meta.db_table = 'flowstat_%s' % want_date.strftime("%d%m%Y")
se.Meta.abstract = False
return se
class StatCache(models.Model): class StatCache(models.Model):

Loading…
Cancel
Save