Альтернативаня бесплатная версия модуля контроля полосы пропускания
Cкрипт который из базы биллинга выдергивает имена юзеров и создает в какти графики для каждого пользователя.
Почитать как добавить график из командной строки можно здесь
http://www.cacti.net/downloads/docs/html/cli_add_graphs.htmlcat /usr/local/share/cacti/cli/make_many_graphs.pl
#!/usr/bin/perl
use DBI;
$main_config='/usr/local/nodeny/nodeny.cfg.pl';
require $main_config;
$DSN="DBI:mysql:database=$db_name;host=$db_server;mysql_connect_timeout=$mysql_connect_timeout;";
$dbh=DBI->connect($DSN,$user,$pw,{PrintError=>1});
$uq=300; #первыйх N юзеров для которых надо создать графики
$tmpl_id=36; #graph-template-id читаем это http://www.cacti.net/downloads/docs/html/cli_add_graphs.html
$hid=3; #host-id читаем это http://www.cacti.net/downloads/docs/html/cli_add_graphs.html
for($i=1; $i<=$uq; $i++)
{
$query="SELECT `name` FROM `users` WHERE `id`=$i";
$sth=$dbh->prepare($query);
$sth->execute;
$rv=$sth->fetchrow_hashref;
$username=$rv->{name};
if ($username ne "")
{
system("/usr/local/bin/php /usr/local/share/cacti/cli/add_graphs.php --graph-type=cg --graph-template-id=$tmpl_id --input-fields=\"uid=$i\" --graph-title=$username --host-id=$hid --force");
}
}
Дальше делаем скрипт который будет из базы биллинга выбирать из X таблиц данные по трафику для юзера по id за последние 5 минут и скармливаем аутпут какти.
cat /usr/local/share/cacti/scripts/usertraf.pl
#!/usr/bin/perl
use DBI;
$main_config='/usr/local/nodeny/nodeny.cfg.pl';
require $main_config;
$DSN="DBI:mysql:database=$db_name;host=$db_server;mysql_connect_timeout=$mysql_connect_timeout;";
$dbh=DBI->connect($DSN,$user,$pw,{PrintError=>1});
$userid=$ARGV[0];
my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime time;
$year=$year+1900;
$mon=$mon+1;
$query="SELECT SUM(`in`)*8/300 AS `averin`,SUM(`out`)*8/300 AS `averout` FROM `x".$year."x".$mon."x".$mday."` WHERE `mid`=".$userid." AND FROM_UNIXTIME(`time`)>'".$year."-".$mon."-".$mday." ".$hour.":".($min-5).":".$sec."'";
$sth=$dbh->prepare($query);
$sth->execute;
$rv=$sth->fetchrow_hashref;
if ($rv->{averin} && $rv->{averout})
{
print "in:$rv->{averin} out:$rv->{averout}";
}else
{
print "in:0 out:0";
}
Дальше сама настройка какти.
1. Логинимся
2. Console
3. Data Input Methods
3.1 Add
3.2 Name -
Users traffic 3.3 Input Type -
Script/Command 3.4 Input String -
perl <path_cacti>/scripts/userstraf.pl <id> 3.5 Create
3.6 Input Fields->Add
3.6.1 Friendly Name -
User id 3.6.2 Create
3.7 Output Fields->Add
3.7.1 Field [Output] -
in 3.7.2 Friendly Name -
Traffic in 3.7.3 Create
3.8 Output Fields->Add
3.7.1 Field [Output] -
out 3.7.2 Friendly Name -
Traffic out 3.7.3 Create
3.9 Save
4. Data Templates
4.1 Add
4.2 Data Templates [new]-> Name -
Users traffic 4.3 Data Source->Name -
User traffic 4.4 Data Input Method -
Users traffic 4.5 Data Source Item -> Internal Data Source Name -
in 4.6 Create
4.7 Data Source Item - New
4.8 Data Source Item -> Internal Data Source Name -
out 4.9 Custom Data [data input: Users traffic] -> User id -
Ставим галочку Use Per-Data Source Value (Ignore this Value) 4.10 Save
5. Graph Templates
5.1 Add
5.2 Template->Name -
User traffic 5.3 Graph Template->Title (--title) -
Ставим галочку Use Per-Graph Value (Ignore this Value) 5.4 Create
5.5 Graph Template Items
5.6 Add
5.7 Data Source -
Users traffic - (in) 5.8 Color -
00CF00 5.9 Graph Item Type -
AREA 5.10 Consolidation Function -
AVERAGE 5.11 Text Format -
Inbound: 5.12 Graph Template Items
5.13 Add
5.14 Data Source -
Users traffic - (in) 5.15 Color -
NONE 5.16 Graph Item Type -
GPRINT 5.17 Consolidation Function -
LAST 5.18 Text Format -
Current: 5.19 Graph Template Items
5.20 Add
5.21 Data Source -
Users traffic - (in) 5.22 Color -
NONE 5.23 Graph Item Type -
GPRINT 5.24 Consolidation Function -
AVERAGE 5.25 Text Format -
Average: 5.19 Graph Template Items
5.20 Add
5.21 Data Source -
Users traffic - (in) 5.22 Color -
NONE 5.23 Graph Item Type -
GPRINT 5.24 Consolidation Function -
MAX 5.25 Text Format -
Maximum: 5.26 Insert Hard Return -
true6. Повторяем пункты 5.5 - 5.26 только для Data Source -
Users traffic - (out) (пункт 5.7 in меняем на out, пункт 5.9 Graph Item Type -
LINE1)
7. Save
8. New Graphs
8.1 Выбираем нужный нам хост Host:
8.2 Graph Templates->Create:
User traffic8.3 Create
8.4 Create Graph from 'User traffic' - вводим логин юзера
marinka8.5 User id - 1115
Ну вот один график добавили, выше приведен скрипт который автоматизирует добавление графиков для пользователей из базы данных биллинга.
Собственно сам модуль на Perl для биллинга.
cat /usr/local/nodeny/web/Sgraph.pl
#!/usr/bin/perl
$VER=50.32;
use LWP;
use DBI;
use HTTP::Cookies;
use HTTP::Request::Common;
$database_default = "cacti";
#данные для коннекта к бд какти
$database_hostname = "localhost";
$database_username = "cactiuser";
$database_password = "cactiuser";
$cacti_user="cacti";
#данные для входа в через веб интерфейс какти
$cacti_password="cacti";
$csi='1.1.1.1';
$DSN2="DBI:mysql:database=$database_default;host=$database_hostname;mysql_connect_timeout=$mysql_connect_timeout;";
$dbh2=DBI->connect($DSN2,$database_username,$database_password,{PrintError=>1});
sub GC_main
{
$OUT.=&Center_Mess("<span class=data2>Контроль загрузки канала</span><br>");
$query="SELECT `name` FROM `users` WHERE `id`=$Mid";
$p = &sql_select_line($dbh, $query, '');
$username=$p->{name};
$query="SELECT `local_graph_id` FROM `graph_templates_graph` WHERE `title`='$username'";
$sth2=$dbh2->prepare($query);
$sth2->execute;
$rv=$sth2->fetchrow_hashref;
$lgi=$rv->{local_graph_id};
$link_h="http://$csi/cacti/graph_image.php?action=view&local_graph_id=$lgi&rra_id=5";
$link_d="http://$csi/cacti/graph_image.php?action=view&local_graph_id=$lgi&rra_id=1";
$link_w="http://$csi/cacti/graph_image.php?action=view&local_graph_id=$lgi&rra_id=2";
$link_m="http://$csi/cacti/graph_image.php?action=view&local_graph_id=$lgi&rra_id=3";
$link_y="http://$csi/cacti/graph_image.php?action=view&local_graph_id=$lgi&rra_id=4";
$browser = LWP::UserAgent->new;
$browser->cookie_jar( HTTP::Cookies->new('file' => '/tmp/cookies.lwp',autosave => 1, ignore_discard=>1,));
$request=POST ($link_h, [action=>'login',login_username=>'cacti', login_password=>'cacti'],'Accept' => 'image/png',);
$response = $browser->request($request);
open (file, '> /usr/local/www/apache22/data/i/png/'.$username.'_h.png');
print file $response->content;
close(file);
$request=POST ($link_d, [action=>'login',login_username=>'cacti', login_password=>'cacti'],'Accept' => 'image/png',);
$response = $browser->request($request);
open (file, '> /usr/local/www/apache22/data/i/png/'.$username.'_d.png');
print file $response->content;
close(file);
$request=POST ($link_w, [action=>'login',login_username=>'cacti', login_password=>'cacti'],'Accept' => 'image/png',);
$response = $browser->request($request);
open (file, '> /usr/local/www/apache22/data/i/png/'.$username.'_w.png');
print file $response->content;
close(file);
$request=POST ($link_m, [action=>'login',login_username=>'cacti', login_password=>'cacti'],'Accept' => 'image/png',);
$response = $browser->request($request);
open (file, '> /usr/local/www/apache22/data/i/png/'.$username.'_m.png');
print file $response->content;
close(file);
$request=POST ($link_y, [action=>'login',login_username=>'cacti', login_password=>'cacti'],'Accept' => 'image/png',);
$response = $browser->request($request);
open (file, '> /usr/local/www/apache22/data/i/png/'.$username.'_y.png');
print file $response->content;
close(file);
$OUT.=&Center_Mess("Hourly<br><img src=http://$csi/i/png/".$username."_h.png /><br>
Daily<br><img src=http://$csi/i/png/".$username."_d.png /><br>
Weekly<br><img src=http://$csi/i/png/".$username."_w.png /><br>
Monthly<br><img src=http://$csi/i/png/".$username."_m.png /><br>
Yearly<br><img src=http://$csi/i/png/".$username."_y.png /><br>
");
}
mkdir /usr/local/www/apache22/data/i/png
echo “120 Sgraph GC_main Контроль загрузки канала 0 0
” >> /usr/local/nodeny/web/plugin_reestr.cfg
Операции — Настройки — Клиентская статистика — Список плагинов
Добавьте Sgraph
Пользуйтесь на здоровье. Всем успеха. :-))