0xbad0c0d3
гуру nodeny )
NoDeny
Спец
Карма: 116
Offline
Сообщений: 1059
|
|
« Ответ #30 : 14 Октября 2010, 23:14:34 » |
|
Эмм... Все делается одним запросом (если не учитывать вложенные запросы). Инфа о траффе берется самая "свежая". А так результат тот же.
|
|
« Последнее редактирование: 14 Октября 2010, 23:16:24 от 0xbad0c0d3 »
|
Записан
|
|
|
|
Cell
|
|
« Ответ #31 : 15 Октября 2010, 12:02:20 » |
|
Недостаток способа с вертушкой вижу в бессмысленных запросах к базе данных каждые 2 минуты и наличии лишнего демона. Гораздо интересней вариант с правкой скрипта, т.к. запрос будет всего один И ТОЛЬКО ТОГДА!!! когда это действительно нужно.
|
|
|
Записан
|
|
|
|
Elisium
NoDeny
Старожил
Карма: 19
Offline
Сообщений: 360
На форумах "спасибом" называется плюс к карме.
|
|
« Ответ #32 : 15 Октября 2010, 12:44:45 » |
|
Предлагаю такой вариант:
хм .. красиво сделано ... п.с. +1 и спасибо )
|
|
|
Записан
|
|
|
|
0xbad0c0d3
гуру nodeny )
NoDeny
Спец
Карма: 116
Offline
Сообщений: 1059
|
|
« Ответ #33 : 15 Октября 2010, 21:23:24 » |
|
#!/usr/bin/perl -w
use strict; use DBI;
my $config = "/usr/local/nodeny/nodeny.cfg"; print "error: $!\n" if ! -e $config; eval{require $config}; our($query,$traf_tbl,$dbh,$Db_name,$Db_server,$Db_user,$Db_pw);
my($sec,$min,$hour,$mday,$mon,$year) = localtime; $traf_tbl=sprintf("x%dx%dx%d",$year+1900,$mon+1,$mday); $query = <<QUERY; INSERT INTO dblogin (mid,act,time) SELECT `users`.`id`,'17',UNIX_TIMESTAMP() FROM `users` LEFT JOIN `$traf_tbl` ON `users`.`id`=`$traf_tbl`.`mid` WHERE `in` > 0 AND `out` > 0 AND `$traf_tbl`.`time`>=%s AND `users`.`lstate`>0 QUERY $dbh = DBI->connect("DBI:mysql:$Db_name:$Db_server",$Db_user,$Db_pw,{ PrintError => 1}) or die; if ($ARGV[0] && $ARGV[0] eq "trigger"){ print "Trigger\n"; $query = sprintf($query,"NEW.time"); $dbh->do("DROP TRIGGER IF EXISTS `tr_aoauth`"); $dbh->do("CREATE TRIGGER `tr_aoauth` AFTER INSERT ON `traf_info` FOR EACH ROW BEGIN $query; END"); exit; } $query = sprintf($query,"(SELECT time FROM traf_info ORDER BY time DESC LIMIT 1)"); print "error: $!\n" if $dbh->do($query) lt 0; $dbh->disconnect;
Чутка приукрасил Кому хочется отказаться от вертушки делать следующее: Добавить запуск скрипта ежедневно по крону с параметром trigger1 0 * * * /usr/bin/perl /path/to/script.pl trigger!!!У пользователя, что гаходится в файле nodeny.cfg должна быть привилегия TRIGGER!!!
|
|
|
Записан
|
|
|
|
0xbad0c0d3
гуру nodeny )
NoDeny
Спец
Карма: 116
Offline
Сообщений: 1059
|
|
« Ответ #34 : 15 Октября 2010, 22:18:11 » |
|
Тупанул. кто будет юзать замените: $dbh->do("CREATE TRIGGER `tr_aoauth` AFTER INSERT ON `traf_info` FOR EACH ROW BEGIN $query; END"); на $dbh->do("CREATE TRIGGER `tr_aoauth` AFTER INSERT ON `traf_info` FOR EACH ROW BEGIN IF NEW.cod=1 THEN $query; END IF; END");
|
|
|
Записан
|
|
|
|
ser970
NoDeny
Спец
Карма: 70
Offline
Сообщений: 1323
|
|
« Ответ #35 : 16 Октября 2010, 08:52:43 » |
|
Кому хочется отказаться от вертушки делать следующее: Добавить запуск скрипта ежедневно по крону с параметром trigger 1 0 * * * /usr/bin/perl /path/to/script.pl trigger !!!У пользователя, что гаходится в файле nodeny.cfg должна быть привилегия TRIGGER!!!
а не проще ли добавить в ядро?
|
|
|
Записан
|
|
|
|
0xbad0c0d3
гуру nodeny )
NoDeny
Спец
Карма: 116
Offline
Сообщений: 1059
|
|
« Ответ #36 : 16 Октября 2010, 12:40:54 » |
|
Да можно конечо, но смотри обновляется у тебя биллинг и что? Заново добавлять? Пускай каждый себе выбирает способ.
|
|
|
Записан
|
|
|
|
elite
Начальник планеты
NoDeny
Спец
Карма: 52
Offline
Сообщений: 1226
In LAN we trust!
|
|
« Ответ #37 : 16 Октября 2010, 12:46:45 » |
|
Да можно конечо, но смотри обновляется у тебя биллинг и что? Заново добавлять? Пускай каждый себе выбирает способ.
а он часто обновляется?
|
|
|
Записан
|
|
|
|
0xbad0c0d3
гуру nodeny )
NoDeny
Спец
Карма: 116
Offline
Сообщений: 1059
|
|
« Ответ #38 : 16 Октября 2010, 12:53:29 » |
|
Ну я хз, а вдруг?
|
|
|
Записан
|
|
|
|
stix
NoDeny
Спец
Карма: 72
Offline
Сообщений: 1872
Nodeny Support Team
|
|
« Ответ #39 : 16 Октября 2010, 13:06:08 » |
|
не дождетесь
|
|
|
Записан
|
|
|
|
0xbad0c0d3
гуру nodeny )
NoDeny
Спец
Карма: 116
Offline
Сообщений: 1059
|
|
« Ответ #40 : 16 Октября 2010, 13:47:29 » |
|
Ну все! Тут не подкопаешся! ) Красивее не сделаешь! nodeny.pl (50.32) 1953 $rows=0; 1954 foreach $i (1..8) 1955 { 1956 $rows=$dbh->do("INSERT INTO dblogin (mid,time,act) VALUES($id,UNIX_TIMESTAMP(),'17')") if (!$rows && $IN[$i] gt 0 && $OUT[$i] gt 0);
Можно сократить до одной строки, еси контролировать по одному направлению 1953 $dbh->do("INSERT INTO dblogin (mid,time,act) VALUES($id,UNIX_TIMESTAMP(),'17')") if ($IN[1] gt 0 && $OUT[1] gt 0);
|
|
« Последнее редактирование: 16 Октября 2010, 13:59:20 от 0xbad0c0d3 »
|
Записан
|
|
|
|
Александр (AleksHr)
NoDeny
Старожил
Карма: 2
Offline
Сообщений: 323
|
|
« Ответ #41 : 16 Октября 2010, 14:19:20 » |
|
0xbad0c0d3, foreach $i (1..7) { next unless $IN[$i]+$OUT[$i]; if( $ModTraf{$mId}{$i} ) { # платеж-опция указывает трафик направления $i перераспределить на направление 8 $IN[8]+=$IN[$i]; $rows=0; foreach $i (1..8) { $rows=$dbh->do("INSERT INTO dblogin (mid,time,act) VALUES($id,UNIX_TIMESTAMP(),'17')") if (!$rows && $IN[$i] gt 0 && $OUT $i] gt 0); $IN[$i]=0; $OUT[8]+=$OUT[$i]; $OUT[$i]=0; } }
Так не роботает, у меня ето именно такие строки.... лутчше напишы после каких строк и перед какими вставить.
|
|
« Последнее редактирование: 16 Октября 2010, 14:29:23 от Александр (AleksHr) »
|
Записан
|
|
|
|
0xbad0c0d3
гуру nodeny )
NoDeny
Спец
Карма: 116
Offline
Сообщений: 1059
|
|
« Ответ #42 : 16 Октября 2010, 15:42:19 » |
|
Ну там кагбе видно. Ну ладно перед строками: foreach $i (1..8) { next unless $IN[$i]+$OUT[$i];
Вставляешь: $dbh->do("INSERT INTO dblogin (mid,time,act) VALUES($id,UNIX_TIMESTAMP(),'17')") if ($IN[1] gt 0 && $OUT[1] gt 0);
получается: $dbh->do("INSERT INTO dblogin (mid,time,act) VALUES($id,UNIX_TIMESTAMP(),'17')") if ($IN[1] gt 0 && $OUT[1] gt 0); foreach $i (1..8) { next unless $IN[$i]+$OUT[$i];
Это если по одному направлению (в данном случае по 1-у) А если по всем, то те же строки приведи к виду: $rows=0; foreach $i (1..8) { $rows=$dbh->do("INSERT INTO dblogin (mid,time,act) VALUES($id,UNIX_TIMESTAMP(),'17')") if (!$rows && $IN[$i] gt 0 && $OUT[$i] gt 0); next unless $IN[$i]+$OUT[$i];
|
|
|
Записан
|
|
|
|
Андрій
NoDeny
Старожил
Карма: 3
Offline
Сообщений: 294
|
|
« Ответ #43 : 17 Октября 2010, 10:48:32 » |
|
в 49.32 не працює.
|
|
|
Записан
|
|
|
|
Александр (AleksHr)
NoDeny
Старожил
Карма: 2
Offline
Сообщений: 323
|
|
« Ответ #44 : 17 Октября 2010, 10:59:00 » |
|
в 49.32 не працює.
В мене працює все класно, те що на пост вище.
|
|
|
Записан
|
|
|
|
|