выделено из топика http://forum.nodeny.com.ua/index.php?topic=367.0 (c) eliteОй, да ладно, все итак открыто, изложу суть модуля.
Может у тс и по другому немного, но кто захочет разобратся, тот это сделает.
Итак.
Скрипт который из базы биллинга выдергивает имена юзеров и создает в какти графики для каждого пользователя.
Почитать как добавить график из командной строки можно сдесь
http://www.cacti.net/downloads/docs/html/cli_add_graphs.html#!/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 минут и скармливаем аутпут какти.
#!/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)
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
Ну вот один график добавили, выше приведен скрипт который автоматизирует добавление графиков для пользователей из базы данных биллинга.
Ну вот и все. Теперь добавить графики в биллинг дело техники, написать примочку для юзерской статистики либо плагин админки и выводить соответсвующий график при редактировании пользователя в админке или пользователю в его статистике.
этот модуль надо юзать осторожно, а то вчера я добавил прорисовку 2000 юзеров, так нагрузка на проц выросла до 100%
В моем модуле прорисовку 2000 пользователей делать можно!!!! Так что, Василь.... не делай мне тут черный пиар, а признай что сам смастерил что-то ))) только не угадал как ).
а вот нечего и угадывать. если вы прочитали полностью топик, то увидите что нигде нет моих костылей, только автоматизация,
1. Данные для прорисовки графиков уже готовы и есть в базе биллинга
2. Один запрос в базу и передача результата в cacti
3. Скрипт для создания графиков из коммандной строки входит в стандартную поставку CACTI
4. Cacti poller обрабатывает все это
Так вот. Никому я не делаю черный пиар, ничего я не смастерил, а автоматизировал только то что уже было, и помоему точно угадал как.
А вы сами пробовали своим модулем прорисовать графики для 2000 пользователей и промониторить загрузку ЦП?
На сервере который рисовал графики крутится еще dhcp, MySQL и ядро NoDeny.
Сервер
Copyright (c) 1992-2009 The FreeBSD Project.
Copyright (c) 1979, 1980, 1983, 1986, 1988, 1989, 1991, 1992, 1993, 1994
The Regents of the University of California. All rights reserved.
FreeBSD is a registered trademark of The FreeBSD Foundation.
FreeBSD 8.0-RELEASE-p1 #2: Fri Dec 11 11:37:29 EET 2009
admin@router.ua:/usr/obj/usr/src/sys/GATE_8_0
Timecounter "i8254" frequency 1193182 Hz quality 0
CPU: AMD Athlon(tm) 64 X2 Dual Core Processor 4200+ (2210.20-MHz 686-class CPU)
Origin = "AuthenticAMD" Id = 0x60fb2 Stepping = 2
Features=0x178bfbff<FPU,VME,DE,PSE,TSC,MSR,PAE,MCE,CX8,APIC,SEP,MTRR,PGE,MCA,CMOV,PAT,PSE36,CLFLUSH,MMX,FXSR,SSE,SSE2,HTT>
Features2=0x2001<SSE3,CX16>
AMD Features=0xea500800<SYSCALL,NX,MMX+,FFXSR,RDTSCP,LM,3DNow!+,3DNow!>
AMD Features2=0x11f<LAHF,CMP,SVM,ExtAPIC,CR8,Prefetch>
TSC: P-state invariant
real memory = 1073741824 (1024 MB)
avail memory = 1031913472 (984 MB)
ACPI APIC Table: <080207 APIC1152>
FreeBSD/SMP: Multiprocessor System Detected: 2 CPUs