Непонятки с описанием оплат

ran
Сообщения: 2298
Зарегистрирован: Вс окт 21, 2007 2:29 pm

Сообщение ran »

chtito2 писал(а):Сама linkupdown НЕ используется, а, как я написал, части linkupdown отвечающие за выставление нужной скорости ipfw (со всеми экспрессиями) были перенесены в racct.pl где обрабатывается радиус старт пакет. Т.е. слегка доработанная версия абиллса т.к. не делала что мне нужно.
выложил бы свой линкапдаун или как там у тебя, а мы б уж как-нить раазобраалися - на то он и оуненсрц

ran
Сообщения: 2298
Зарегистрирован: Вс окт 21, 2007 2:29 pm

Сообщение ran »

А как отключить эту функцию и вернуть возможность снимать абонплату в конце учетного периода?
а кто тебя обновляться заставлял? :) ну и бэкап жеж тоже :wink:

sopov
Сообщения: 610
Зарегистрирован: Вс апр 02, 2006 7:13 pm

Сообщение sopov »

Ну кудаж без бэкапа :lol:

chtito2
Сообщения: 479
Зарегистрирован: Чт апр 17, 2008 5:26 pm

Сообщение chtito2 »

ran писал(а):выложил бы свой линкапдаун или как там у тебя, а мы б уж как-нить раазобраалися
Вот патч к libexec/racct.pl для последней Abills current. Большие части пришли прямиком из linkupdown без изменений, свой код добавил только где правила непосредственно добавляются (мое выделено жирным). Изменения затронули только функцию acct(). Добавление правил происходит в ответ на радиус события старт/стоп. Не пойму какое это может иметь отношение к подсчету трафика Ipn из неправильной сетки через Netflow, т.к. подсчет к фаерволу отношения не имеет, но все же пусть взглянет кто-то более опытный.

Форматирование нарушает форум, но разобраться можно.

--- /root/abills-current/libexec/racct.pl 2008-04-28 20:29:38.000000000 +0500
+++ /root/abills-my/libexec/racct.pl 2008-05-15 14:12:58.000000000 +0500
@@ -295,6 +295,216 @@
#}


+ # chtito
+
+my $debug=0;
+ require Billing; Billing->import();
+ my $Billing = Billing->new($db, \%conf);
+ require Admins; Admins->import();
+ require Dv; Dv->import();
+ my $admin = Admins->new($db, \%conf);
+ $admin->info($conf{SYSTEM_ADMIN_ID}, { IP => '127.0.0.1' });
+ my $Dv = Dv->new($db, $admin, \%conf);
+ my %speeds = ();
+ my %nets = ();
+ my %expr = ();
+ my $user = $Dv->info(0, { LOGIN => $RAD_REQUEST{USER_NAME} });
+
+ if(defined($Dv->{errno})) {
+ print "[$Dv->{errno}] $Dv->{errstr}\n";
+ exit 1;
+ }
+ if ($user->{SPEED} > 0) {
+ $speeds{0}{IN}=int($user->{SPEED});
+ $speeds{0}{OUT}=int($user->{SPEED});
+ } else {
+ ($user->{TIME_INTERVALS},
+ $user->{INTERVAL_TIME_TARIF},
+ $user->{INTERVAL_TRAF_TARIF}) = $Billing->time_intervals($user->{TP_ID});
+
+ my ($remaining_time, $ret_attr) = $Billing->remaining_time($user->{DEPOSIT}, {
+ TIME_INTERVALS => $user->{TIME_INTERVALS},
+ INTERVAL_TIME_TARIF => $user->{INTERVAL_TIME_TARIF},
+ INTERVAL_TRAF_TARIF => $user->{INTERVAL_TRAF_TARIF},
+ SESSION_START => $user->{SESSION_START},
+ DAY_BEGIN => $user->{DAY_BEGIN},
+ DAY_OF_WEEK => $user->{DAY_OF_WEEK},
+ DAY_OF_YEAR => $user->{DAY_OF_YEAR},
+ REDUCTION => $user->{REDUCTION},
+ POSTPAID => 1,
+ GET_INTERVAL => 1,
+ debug => ($debug > 0) ? 1 : undef });
+
+# print "RT: $remaining_time\n" if ($debug == 1);
+ my %TT_IDS = %$ret_attr;
+
+
+ if (keys %TT_IDS > 0) {
+ require Tariffs;
+ Tariffs->import();
+ my $tariffs = Tariffs->new($db, \%conf, $admin);
+
+ #Get intervals
+ while(my($k, $v)=each( %TT_IDS)) {
+ print "$k, $v\n" if ($debug > 0);
+ $user->{TI_ID}=$v;
+ my $list = $tariffs->tt_list({ TI_ID => $v });
+ foreach my $line (@$list) {
+ $speeds{$line->[0]}{IN}="$line->[4]";
+ $speeds{$line->[0]}{OUT}="$line->[5]";
+ $nets{$line->[0]}="$line->[7]";
+ $expr{$line->[0]}="$line->[8]" if (length($line->[8]) > 5);
+ #print "$line->[0] $line->[4]\n";
+ }
+ }
+ }
+ }
+
+
+ # speed apply

+ my $fw_num_in =0;
+ my $fw_num_out =0;
+ my $pipe_num_in =0;
+ my $pipe_num_out =0;

+
+ print "Expresion:================================\n" if ($debug > 0);
+ my $RESULT = $Billing->expression($Dv->{UID}, \%expr, { START_PERIOD => $Dv->{ACCOUNT_ACTIVATE},
+ debug => $debug } );
+ print "\nEND: =====================================\n" if ($debug > 0);
+
+ if (! $RESULT->{SPEED}) {
+ $speeds{0}{IN}=$RESULT->{SPEED_IN} if($RESULT->{SPEED_IN});
+ $speeds{0}{OUT}=$RESULT->{SPEED_OUT} if($RESULT->{SPEED_OUT});
+ } else {
+ $speeds{0}{IN}=$RESULT->{SPEED};
+ $speeds{0}{OUT}=$RESULT->{SPEED};
+ }
+

+ while (my ($k, $v) = each %speeds) {
+ system("/usr/bin/logger ipfw $RAD->{ACCT_STATUS_TYPE} $RAD->{USER_NAME} \@$RAD->{FRAMED_IP_ADDRESS} speeds[$k] '=>' $v->{IN}/$v->{OUT}");
+ }
+
+ my $CLIENT_IP = $RAD->{FRAMED_IP_ADDRESS};
+ #my $CLIENT_NETMASK = $RAD->{FRAMED_IP_NETMASK};
+ #Make speed
+ foreach my $traf_type (sort keys %speeds) {
+ my $speed = $speeds{$traf_type};
+ my $table_in_id = $traf_type * 2;
+ my $table_out_id = $table_in_id + 1;
+
+ if ($acct_status_type == 1) {
+ my $speed_in_id = $speed->{IN};
+ my $speed_out_id = 30000 + $speed->{OUT};
+ system("/usr/bin/logger 'ipfw table $table_in_id add $CLIENT_IP $speed_in_id'");
+ system("/usr/bin/logger 'ipfw table $table_out_id add $CLIENT_IP $speed_out_id'");
+ system("/usr/local/bin/sudo /sbin/ipfw table $table_in_id add $CLIENT_IP $speed_in_id");
+ system("/usr/local/bin/sudo /sbin/ipfw table $table_out_id add $CLIENT_IP $speed_out_id");
+ print "start ip: table_id: $table_in_id/$table_out_id $CLIENT_IP speed_id: $speed_in_id/$speed_out_id\n";
+ } elsif ($acct_status_type == 2) {
+ system("/usr/bin/logger 'ipfw table $table_in_id delete $CLIENT_IP'");
+ system("/usr/bin/logger 'ipfw table $table_out_id delete $CLIENT_IP'");
+ system("/usr/local/bin/sudo /sbin/ipfw table $table_in_id delete $CLIENT_IP");
+ system("/usr/local/bin/sudo /sbin/ipfw table $table_out_id delete $CLIENT_IP");
+ print "stop ip: table_id: $table_in_id/$table_out_id $CLIENT_IP\n";
+ }
+ }

+
+
+ #/chtito
+


Опять же: все что в этом коде задумано происходит на ура (шейпинг). Но интересно как это могло затронуть то, что трафик в неправильную сеть засчитывается Абиллсом при подсчете flow-tools?

~AsmodeuS~
Site Admin
Сообщения: 5749
Зарегистрирован: Пт янв 28, 2005 3:11 pm
Контактная информация:

Сообщение ~AsmodeuS~ »

выравнивание для тех кому надо выравнивать абонентов включившихся в средине месяца по 1 числу.

chtito2
Сообщения: 479
Зарегистрирован: Чт апр 17, 2008 5:26 pm

Сообщение chtito2 »

Выравнивание подходит для небольших абонентских баз (200-300 клиентов). Дальше становится обременительным обслуживать клиентов 1-го числа.

~AsmodeuS~
Site Admin
Сообщения: 5749
Зарегистрирован: Пт янв 28, 2005 3:11 pm
Контактная информация:

Сообщение ~AsmodeuS~ »

компании с небольшими абонентскими базами

MTS, KievStar, Ukrtelecom, AOL

:-)

sopov
Сообщения: 610
Зарегистрирован: Вс апр 02, 2006 7:13 pm

Сообщение sopov »

Уважаемый Асмодеус не оставте без внимания мой пост на 2 странице. Проблема актуальна

~AsmodeuS~
Site Admin
Сообщения: 5749
Зарегистрирован: Пт янв 28, 2005 3:11 pm
Контактная информация:

Сообщение ~AsmodeuS~ »

просто не ставите не стаивте галочку выравниваниеи оно при смене ТП в админке будет снимать всю суму

sopov
Сообщения: 610
Зарегистрирован: Вс апр 02, 2006 7:13 pm

Сообщение sopov »

В таком случае всеравно происходит снятие месячной абонплаты за месяц с момента активации. Т.е. Снятие происходит в начале месяца, а не в конце.

~AsmodeuS~
Site Admin
Сообщения: 5749
Зарегистрирован: Пт янв 28, 2005 3:11 pm
Контактная информация:

Сообщение ~AsmodeuS~ »

В моей системе абон плата снимается всегда в начале учётного периода месячная в начале месяца дневная в начале дня

sopov
Сообщения: 610
Зарегистрирован: Вс апр 02, 2006 7:13 pm

Сообщение sopov »

В моей системе абон плата снимается всегда в начале учётного периода месячная в начале месяца дневная в начале дня
Да все понятно, только при смене тарифа у пользователя меняется дата активации - соответственно и абонплата снимается как с начала месяца. А если абонент сменит тариф скажем 6 раз в день, то и абоплата за месяц с него снимется 6 раз. Вот это и не устраивает :( В старой версии от 24.04.2008 все гуд.

~AsmodeuS~
Site Admin
Сообщения: 5749
Зарегистрирован: Пт янв 28, 2005 3:11 pm
Контактная информация:

Сообщение ~AsmodeuS~ »

ориентация идёт на полную автоматизацию.

Вы включили тарифный план должны запрвтить на него на перед, это более логично

sopov
Сообщения: 610
Зарегистрирован: Вс апр 02, 2006 7:13 pm

Сообщение sopov »

Хорошо... За деньги, специально для нас, можно чтолибо доработать, чтобы при переключении тарифа у пользователя на менялась дата активации, а оставалась прежней и соответственно не снималась абонплата? Просто в данном случае бесполезна функция неограниченого количества смен ТП, а заставляет менять ТП или по расписанию или раз в месяц, что совсем не айс....

~AsmodeuS~
Site Admin
Сообщения: 5749
Зарегистрирован: Пт янв 28, 2005 3:11 pm
Контактная информация:

Сообщение ~AsmodeuS~ »

да можно + 80 $

Ответить