Биллинговая система Nodeny
26 Апреля 2024, 05:51:22 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: Прекращена поддержка версии Nodeny 49
 
   Начало   Помощь Поиск Войти Регистрация  
Страниц: 1 2 [3] 4 5 ... 8
  Печать  
Автор Тема: авторизированые (всегда онлайн)  (Прочитано 30295 раз)
0xbad0c0d3
гуру nodeny )
NoDeny
Спец
*

Карма: 116
Offline Offline

Сообщений: 1059



Просмотр профиля
« Ответ #30 : 14 Октября 2010, 23:14:34 »

Эмм... Все делается одним запросом (если не учитывать вложенные запросы). Инфа о траффе берется самая "свежая". А так результат тот же.
« Последнее редактирование: 14 Октября 2010, 23:16:24 от 0xbad0c0d3 » Записан
Cell
Модератор
Спец
*****

Карма: 52
Offline Offline

Сообщений: 1407



Просмотр профиля
« Ответ #31 : 15 Октября 2010, 12:02:20 »

Недостаток способа с вертушкой вижу в бессмысленных запросах к базе данных каждые 2 минуты и наличии лишнего демона. Гораздо интересней вариант с правкой скрипта, т.к. запрос будет всего один И ТОЛЬКО ТОГДА!!! когда это действительно нужно.
Записан
Elisium
NoDeny
Старожил
*

Карма: 19
Offline Offline

Сообщений: 360


На форумах "спасибом" называется плюс к карме.


Просмотр профиля
« Ответ #32 : 15 Октября 2010, 12:44:45 »

Предлагаю такой вариант:

хм .. красиво сделано ...

п.с. +1 и спасибо )
Записан
0xbad0c0d3
гуру nodeny )
NoDeny
Спец
*

Карма: 116
Offline 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;
Чутка приукрасил Улыбающийся
Кому хочется отказаться от вертушки делать следующее:
Добавить запуск скрипта ежедневно по крону с параметром trigger
1 0 * * * /usr/bin/perl /path/to/script.pl trigger
!!!У пользователя, что гаходится в файле nodeny.cfg должна быть привилегия TRIGGER!!!
Записан
0xbad0c0d3
гуру nodeny )
NoDeny
Спец
*

Карма: 116
Offline 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 Offline

Сообщений: 1323

262462619
Просмотр профиля Email
« Ответ #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 Offline

Сообщений: 1059



Просмотр профиля
« Ответ #36 : 16 Октября 2010, 12:40:54 »

Да можно конечо, но смотри обновляется у тебя биллинг и что? Заново добавлять? Пускай каждый себе выбирает способ.
Записан
elite
Начальник планеты
NoDeny
Спец
*

Карма: 52
Offline Offline

Сообщений: 1227

In LAN we trust!

358714596
Просмотр профиля
« Ответ #37 : 16 Октября 2010, 12:46:45 »

Да можно конечо, но смотри обновляется у тебя биллинг и что? Заново добавлять? Пускай каждый себе выбирает способ.
а он часто обновляется? Подмигивающий
Записан
0xbad0c0d3
гуру nodeny )
NoDeny
Спец
*

Карма: 116
Offline Offline

Сообщений: 1059



Просмотр профиля
« Ответ #38 : 16 Октября 2010, 12:53:29 »

Ну я хз, а вдруг? Улыбающийся
Записан
stix
NoDeny
Спец
*

Карма: 72
Offline Offline

Сообщений: 1872


Nodeny Support Team

205539
Просмотр профиля
« Ответ #39 : 16 Октября 2010, 13:06:08 »

не дождетесь  Веселый
Записан
0xbad0c0d3
гуру nodeny )
NoDeny
Спец
*

Карма: 116
Offline 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 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 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 Offline

Сообщений: 294


Просмотр профиля
« Ответ #43 : 17 Октября 2010, 10:48:32 »

в 49.32 не працює.
Записан
Александр (AleksHr)
NoDeny
Старожил
*

Карма: 2
Offline Offline

Сообщений: 323


Просмотр профиля
« Ответ #44 : 17 Октября 2010, 10:59:00 »

в 49.32 не працює.

В мене працює все класно, те що на пост вище.
Записан
Страниц: 1 2 [3] 4 5 ... 8
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.20 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!