Биллинговая система Nodeny

Главная категория => Ревизии => Тема начата: Efendy от 07 Мая 2014, 13:26:20



Название: rev245
Отправлено: Efendy от 07 Мая 2014, 13:26:20
В модуле ядра system_clean добавлена возможность обнуление счетчиков трафика клиентов в начале каждого месяца - в файле system_clean.cfg параметр flush_traf_counters. По умолчанию отключено. Не затрагивается история трафика по дням, а также детализация - как и раньше ее чистка определяется параметрами выше в этом же файле.

Почему эта фича вам так нужна - непонятно - при снятии услуги, в платеж записывается сколько трафика клиент скачал за период действия услуги - это же гораздо удобнее:
- услуга может начинаться в середине месяца
- услуга могла быть закончена раньше срока
- услуга не кратна месяцу

Кстати, при обнулении трафика, в таблицу платежей пишется соответствующее событие - это признак обнуления, если его (событие удалить) - обнулится снова.

Также я немного перенес тексты в языковые файлы. Вообще, текстовых фраз в биллинге мильон, не знаю стоит ли пытаться их все перенести в языковые файлы или ограничиться лишь клиентской статистикой...


Название: Re: rev245
Отправлено: Dolphin от 07 Мая 2014, 13:54:23
Может не в тему, но отказались от ведения учета трафика.


Чем сильно разгрузили железо.
Во-первых убиваем 3 правила диверта в фаерволе.
Сразу пинг уменьшился.
На divert 1 /исход были очереди по 3000 пакетов;
На divert 2 /вход были очереди по 25000 пакетов;

Меняли в правилах divert на tee, - помогло.
Но были необъяснимые моменты, из-за которых и решили уйти от учета трафика.
А именно, после замены на tee исход ппс увеличился в 4 раза. Вроде бы и ничего страшного, но скорость залочилась на 10Мбит/с  вместо 100Мбит/с на клиента. Короче победить не смогли.

Сори за оффтоп, может кому-то будет полезен мой опыт.


Название: Re: rev245
Отправлено: Redmen от 07 Мая 2014, 16:29:17
спс


Название: Re: rev245
Отправлено: elite от 07 Мая 2014, 20:03:40
Меняли в правилах divert на tee, - помогло.
Но были необъяснимые моменты, из-за которых и решили уйти от учета трафика.
А именно, после замены на tee исход ппс увеличился в 4 раза. Вроде бы и ничего страшного, но скорость залочилась на 10Мбит/с  вместо 100Мбит/с на клиента. Короче победить не смогли.
ну вроде tee всегда спасал меня :)


Название: Re: rev245
Отправлено: Efendy от 02 Июня 2014, 10:44:46
Внимание! Фичу обнуления трафика нельзя использовать совместно с фичей "Если > 0 и по окончанию услуги трафик клиента будет меньше этого значения - снятие за услугу будет отменено" (в настройках услуги) - после обнуления трафика при окончании услуги стоимость будет выставлена в 0. Если такое случилось - запускаем скрипт:

Код:
#!/usr/bin/perl
# ------------------- NoDeny ------------------
#  (с) Volik Stanislav (http://nodeny.com.ua)
# ---------------------------------------------
package install;
use strict;
use FindBin;
use lib $FindBin::Bin;
use nod;
use services;

my $M = __PACKAGE__->new(
    file_cfg => 'sat.cfg',
    file_log => 'install.log',
);

my $do_it;

$M->{cmd_line_options} = {
    'z=i'      => \$do_it,
};

$M->Start;

my %stats = ();
my $errors = 0;
{
    tolog '<<< Восстановление платежей для обнуленных по трафику услуг >>>';
    my $db = Db->sql('SELECT * FROM pays WHERE cash=0 AND mid>0 AND category=100');
    while( my %p = $db->line )
    {
        my $reason = Debug->do_eval($p{reason}) or next;
        $reason->{no_traf_no_cash} or next;
        $reason->{traf} < 0 or next;
        my $cash = $reason->{cash};
        $cash < 0 or next;
        $stats{-$cash}++;
        $do_it or next;
        delete $reason->{no_traf_no_cash};
        delete $reason->{traf};
        my $r = Debug->dump($reason);
        {
            Db->begin_work or last;
            my $rows1 = Db->do('UPDATE pays SET cash=cash+(?), reason=? WHERE id=?', $cash, $r, $p{id});
            my $rows2 = Db->do('UPDATE users SET balance=balance+(?) WHERE id=?', $cash, $p{mid});
            if( $rows1 < 1 || $rows2 < 1 || !Db->commit )
            {
                Db->rollback;
                $errors++;
            }
        }
        $do_it--;
    }
}

tolog 'Статистика: стоимость услуги - количество платежей', \%stats;
tolog 'Ошибок:', $errors;

1;


цитирую:

Цитировать
В прикреплении файл zerofix.pl.
1) Сделать бекап БД
2) скопировать файл в /usr/local/nodeny
3) запустить:
perl zerofix.pl -v

Скрипт выведет только статистику, делать ничего не будет!

Вам нужно обратить внимание на статистику - соответствует ли она примерно реальным данным

4) запускаем только на одном платеже:

perl zerofix.pl -v -z=1

в итоге выполнится восстановление ОДНОГО платежа. Посмотрите в sql запросе

UPDATE users SET balance=balance+('-xxx') WHERE id='yyy'

yyy - это его id. Откройте в админке его учетку и посмотрите - все ли правильно восстановилось: и платеж и баланс
 
5) запускаем для всех:
 
perl zerofix.pl -v -z=10000

В конце смотрим что количество ошибок = 0