Перейти до

Stg+mrtg


Рекомендованные сообщения

решил завести учет загрузки канала по каждому пользователю

не особо парясь беру данные из шейпинга:

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");
}
}

Ссылка на сообщение
Поделиться на других сайтах

мысль не закончена?

 

многим будет интересно как выполнять?

частота запуска по кронтаб.

вот эта красота что там делает - /var/stargazer/shaper/markup-$class

 

вобщем есть над чем поработать ещё :)

Ссылка на сообщение
Поделиться на других сайтах

2 Shtorm

 

дык куда уж проще, bandwidthd - ./configure && make all && make install и сетевуху в конфиге вписать - минуты 3 думаю в самом простом случае.

post-12401-1243490442_thumb.jpg

Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Вхід

Уже зарегистрированы? Войдите здесь.

Войти сейчас
  • Зараз на сторінці   0 користувачів

    Немає користувачів, що переглядають цю сторінку.

×
×
  • Створити нове...