dummy 8 Опубликовано: 2009-05-21 19:55:24 Share Опубликовано: 2009-05-21 19:55:24 решил завести учет загрузки канала по каждому пользователю не особо парясь беру данные из шейпинга: eth1 - смотрит в сеть ppp0 - в интернет #!/usr/bin/perl $tmp="/tmp"; $outdir="/var/www/stat"; $cfg="/etc/mrtg/stat/cfg"; open(FILE, "/sbin/tc -s class show dev eth1|") || warn "Could not open \n"; $cnt=0; while (<FILE>) { if ($_ =~ /class htb 1:(\d+)/) { $class = $1; $cnt=0; $cnt=9 if $class==1; } else { if ($cnt == 1) { $cnt++; /rate (\d+)(\w+)/; $rate = $1 / 8; if ($2) { if ($2 =~ /kbit/i) { $rate = $rate * 1024; } if ($2 =~ /mbit/i) { $rate = $rate * 1024 * 1024; } } $user = `/usr/bin/tail -n1 /var/stargazer/shaper/mark-$class`; chop $user; $hosts{$user} = [$rate, 0]; } if ($cnt == 0) { $cnt++; } } } close(FILE); open(FILE, "/sbin/tc -s class show dev ppp0|") || warn "Could not open\n"; $cnt=0; while (<FILE>) { if ($_ =~ /class htb 1:(\d+)/) { $class = $1; $cnt=0; $cnt=9 if $class==1; } else { if ($cnt == 1) { $cnt++; /rate (\d+)(\w+)/; $rate = $1 / 8; if ($2) { if ($2 =~ /kbit/i) { $rate = $rate * 1024; } if ($2 =~ /mbit/i) { $rate = $rate * 1024 * 1024; } } $user = `/usr/bin/tail -n1 /var/stargazer/shaper/markup-$class`; chop $user; $hosts{$user} = [$hosts{$user}[0], $rate]; } if ($cnt == 0) { $cnt++; } } } close(FILE); open(FILE, "/bin/ls $outdir/*.html|") || warn "Could not open\n"; $cnt=0; while (<FILE>) { chomp; if (/(\w+)\.html$/) { if (-e "$outdir/$1.old") { if (! $hosts{$1}) { $hosts{"$1"} = [0, 0]; } } } } close(FILE); foreach $host (keys (%hosts)) { $no_old=0; if (!(-e "$outdir/$host.old")) { $no_old=1; } if (! (-e "$cfg/stat_$host.cfg")) { open(CFG, "> $cfg/stat_$host.cfg") or die "Couldn't open for writing: $!\n"; print CFG "Title[$host]: Traffic $host\n"; print CFG "MaxBytes[$host]: 512000\n"; print CFG "AbsMax[$host]: 512000\n"; print CFG "Options[$host]: gauge\n"; print CFG "Target[$host]: `/bin/cat $tmp/stat_$host`\n"; print CFG "PageTop[$host]: <H1>$host statistics</H1>\n"; print CFG "YLegend[$host]: Bytes/s\n"; print CFG "ShortLegend[$host]: B/s\n"; print CFG "Legend1[$host]: Incoming Traffic\n"; print CFG "Legend2[$host]: Outgoing Traffic\n"; print CFG "Legend3[$host]: Maximum Incoming Traffic\n"; print CFG "Legend4[$host]: Maximum Outgoing Traffic\n"; print CFG "LegendI[$host]: In:\n"; print CFG "LegendO[$host]: Out:\n"; print CFG "WithPeak[$host]: mwd\n"; print CFG "WorkDir: $outdir\n"; close(CFG); } if ($no_old) { open(CFG, "> $tmp/stat_$host"); print CFG "0\n"; print CFG "0\n"; $tm = time; print CFG "$tm\n"; print CFG "$host\n"; close(CFG); print `LANG=en_US;export LANG;/usr/bin/mrtg $cfg/stat_$host.cfg 2> /dev/null`; sleep 5; } open(CFG, "> $tmp/stat_$host"); print CFG "$hosts{$host}[0]\n"; print CFG "$hosts{$host}[1]\n"; $tm = time; print CFG "$tm\n"; print CFG "$host\n"; close(CFG); print `LANG=en_US;export LANG;/usr/bin/mrtg $cfg/stat_$host.cfg 2> /dev/null`; if (($hosts{$host}[0]==0) && ($hosts{$host}[1]==0)) { unlink("$outdir/$host.old"); } } Ссылка на сообщение Поделиться на других сайтах
Serjio 19 Опубліковано: 2009-05-22 07:34:56 Share Опубліковано: 2009-05-22 07:34:56 мысль не закончена? многим будет интересно как выполнять? частота запуска по кронтаб. вот эта красота что там делает - /var/stargazer/shaper/markup-$class вобщем есть над чем поработать ещё Ссылка на сообщение Поделиться на других сайтах
Kucher2 122 Опубліковано: 2009-05-22 12:59:19 Share Опубліковано: 2009-05-22 12:59:19 rrdtool bandwidthd Ссылка на сообщение Поделиться на других сайтах
Shtorm 0 Опубліковано: 2009-05-25 08:34:52 Share Опубліковано: 2009-05-25 08:34:52 А инструкции для чайников не найдется + с авторизацией как решали ? Ссылка на сообщение Поделиться на других сайтах
nightfly 1 237 Опубліковано: 2009-05-28 06:00:49 Share Опубліковано: 2009-05-28 06:00:49 2 Shtorm дык куда уж проще, bandwidthd - ./configure && make all && make install и сетевуху в конфиге вписать - минуты 3 думаю в самом простом случае. Ссылка на сообщение Поделиться на других сайтах
Рекомендованные сообщения
Создайте аккаунт или войдите в него для комментирования
Вы должны быть пользователем, чтобы оставить комментарий
Создать аккаунт
Зарегистрируйтесь для получения аккаунта. Это просто!
Зарегистрировать аккаунтВхід
Уже зарегистрированы? Войдите здесь.
Войти сейчас