несколько вопросов и предложений.

Ответить
HikeR
Сообщения: 30
Зарегистрирован: Вс янв 06, 2008 2:18 pm

несколько вопросов и предложений.

Сообщение HikeR »

всем привет. сразу хочу передать привет... то есть поблагодарить автора за сей нелегкий, но полезный труд.

имеется циска 3650 (сорри, наврал, 2851. add 24.01.08), юзается в основном для раздачи впн. подключение к радиусу и биллингу прошло без проблем. отредактировал только ф-ию сброса юзера. тут уже говорили, что rsh больше нагружает машину, чем smtp, но в предложенном варианте сброс по smtp требует запущенного фингера, что не есть хорошо. да и сама операция состоит из большого кол-ва команд. заюзал сброс по айпшнику, который из диапазона циски.
во-первых чуть поменял в nas.pm ф-ию вызова сброса:
elsif ($nas_type eq 'cisco') {
hangup_cisco($NAS, $PORT, { USER => $USER }, $attr);
}

и часть ф-ии hangup_cisco() которая скидывает по snmp:
my $userIP = $attr->{FRAMED_IP_ADDRESS};
$command = "$SNMPGET -v1 -c $SNMP_COM -Ov $NAS->{NAS_IP} .1.3.6.1.2.1.4.21.1.2.$userIP | awk '{print \$2}'";
log_print('LOG_DEBUG', "$command");
my $INTNUM=`$command`;
$INTNUM =~ s/\n//;
$command = "$SNMPSET -v 1 -c \"$SNMP_COM\" $NAS->{NAS_IP} 1.3.6.1.2.1.2.2.1.7.$INTNUM i 2 > /dev/null 2>&1";
log_print('LOG_DEBUG', "$command");
$exec=`$command`;

причем awk '{print \$2}' наверное можно заменить чем-нибудь перловым, но я не обладаю еще такими познаниями ;) в итоге всего 2 вызова snmp утилит.
да, и определение переменных $SNMPSET и $SNMPGET перенес в config.pl, ибо незачем каждый раз определять их месторасположение, да и пути у всех разные.

далее, пытаюсь реализовать довольно простую схему: есть несколько тарифов с ограниченным дневным входящим траффиком. типа 10, 20, 50, 100, 200, 500, 1000 Мб в день. при указании в тарифе только лимитов на объемы столкнулся с тем, что отключения юзеров не происходит при превышении заданного траффика, ни при алайвах, ни при запуске billd.pl. тоже многие сталкивались, однако сброс юзеров с отрицательным балансом происходит безпроблемно, при каждой отработке этого самого billd.pl, который у меня запускается раз в две минуты.

решил пойти по легкому пути ;) а именно: сделал тарифы с ценой входящего траффика 1 руб за метр, создал юзеров, добавил им на счет по 10, 20, 50, и тд рублей, чтобы ограничение происходило на уровне депозита, который хоть и не отображается в реальном времени, но подсчитывается точно (зависит, ессно, от частоты запуска billd.pl). дневные и недельные лимиты по входящему траффику все-таки оставил, ибо по ним происходит удержание черезчур качающих юзеров, которые умудрялись за эти две минуты израсходовать весь недельный запас ;)

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

немного поковырявшись в базе, изменил значение поля day_fee, чтобы оно могло принимать отрицательные значения, но вот дальше дело не пошло, ибо ф-ию, которая отрабатывает из pereodic daily с наскоку не нашел.

вот теперь вопросы:
1. как можно сотворить такой тарифный план с минимальнвм вмешательством в код? пока что на ум приходит только внешний скрипт, который будет вместо pereodic daily запускаться, брать абонплату у каждого юзера и делать update его депозита.

2. в каких случаях запускается logrotate, который, судя по коду должен вычищать архивируемые записи из таблицы s_details? (видимо для ее разгрузки).

3. очень хотелось бы увидеть сортировку во всех выпадающих списках, ибо пока она работает только при выборе компании.

4. при создании нового юзера привязать его к группе можно сразу, а вот к компании только после нахождения этого юзера в общем списке. причем групповые операции позволяют менять группу, а кампанию нет, что тоже обидно. вобщем, хотелось бы создавать юзера за один заход.

5. при просмотре списка групп при щелчке на кол-ве юзеров попадаем в список юзеров только этой группы, а при аналогичном действии в списке компаний - попадаем в параметры самой компании, и чтобы увидеть всех ее юзеров нужно щелкать еще раз. да и ссылка дублируется, в колонке "пользователи" и в "информация" один и тот же

нашел таки ;) index.cgi, line 695:
$html->button($line->[3], "index=13&COMPANY_ID=$line->[5]
&subf=11"),



6. ф-ия sendmail() из Base.pm пытается отработать даже если в config.pl рассылка писем запрещена.

немного сумбурно, но все же.
Последний раз редактировалось HikeR Чт янв 24, 2008 8:18 am, всего редактировалось 2 раза.

HikeR
Сообщения: 30
Зарегистрирован: Вс янв 06, 2008 2:18 pm

Сообщение HikeR »

еще немного.
7. Система/ MISC/ Словарь/ - изменения не сохраняются :( можно конечно и в файлик залезть, но через веб удобнее.

поставил словарям владельца www-data, иначе говоря, юзера, из под которого работает апач. теперь все меняется.

8. Отчёт/ Dialup / VPN/ Использовано/ Месяц/ - при выборе пользователя логичнее было бы попадать в его статистику, а не его карточку, и которой до статистики еще 4 нажатия.
также при нажатии ссылки " часы" получаю пустой отввет и ошибку в логе:

Код: Выделить всё

DBD::mysql::st execute failed: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ')start, '%Y-%m-%d %H'),
                            count(DISTINCT l.uid), count(l.uid), 
                            sum(' at line 2 at ../../Abills/mysql//main.pm line 174.
Последний раз редактировалось HikeR Чт янв 17, 2008 7:47 pm, всего редактировалось 1 раз.

HikeR
Сообщения: 30
Зарегистрирован: Вс янв 06, 2008 2:18 pm

Сообщение HikeR »

такс, по 8-му вопросу нашел сам:
Abills/modules/Dv/webintrfaces
строки в районе 1130-1140

Код: Выделить всё

...
$table_sessions->addrow("<b>$line->[0]</b>",
        $html->button("$line->[1]", "index=15&UID=$line->[7]&DATE=$line->[0]"),
        $line->[2],
...
index=15 надо заменить на index=106, тогда будет попадать в статистику юзера с детализацией сессий на выбранный день.

по вопросу ежедневного (ежемесячного) начисления фиксированной суммы. изменил в таблицах поля дневгого и месячного платежа так, чтобы они могли принимать отицательные значения.
напсал скриптик, который в 00:01 каждый день обновляется депозит юзера, у которого в тарифном плане стоит отрицательная сумма:
#!/usr/bin/php5

Код: Выделить всё

<?
$hostname = "****";
$username = "****";
$password = "****";
$DBname = "****";

mysql_connect($hostname,$username,$password) or die("connect - FAIL\n");
mysql_select_db($DBname) or die(mysql_error());
$query = "select b.id, t.day_fee from bills b join dv_main d join tarif_plans t
        on b.uid=d.uid and d.tp_id=t.tp_id where t.day_fee<0";

$res = mysql_query($query) or die(mysql_error());
$number = mysql_num_rows($res);

if ($number){
    while ($row=mysql_fetch_array($res)){
        $id=$row[id];
        $day_fee=$row[day_fee]*(-1);
        $update = "update bills set deposit = ".$day_fee." where id = ".$id;
        $upd = mysql_query($update) or die(mysql_error());
    }
}

mysql_close();
?>
может кому пригодится такой извращенский способ замены контроля траффика по алайвам ;)

HikeR
Сообщения: 30
Зарегистрирован: Вс янв 06, 2008 2:18 pm

Сообщение HikeR »

еще косяк обнаружился. не присваивалось значение CID (Calling-Station-ID), хотя циска успешно слала и Client-IP-Addres, и Tunnel-Client-Endpoin. мак-адрес она ни в какую не хочет, зараза ;)

ошибка здесь:
/libexec/racct.pl
строки в районе 230-240

Код: Выделить всё

  if ($RAD->{'TUNNEL_SERVER_ENDPOINT:0'} && ! $RAD->{CALLING_STATION_ID}) {
    $RAD->{CALLING_STATION_ID}=$RAD->{'TUNNEL_SERVER_ENDPOINT:0'};
   }
отредактировал вот так:

Код: Выделить всё

  if ($RAD->{'TUNNEL_CLIENT_ENDPOINT'} && ! $RAD->{CALLING_STATION_ID}) {
    $RAD->{CALLING_STATION_ID}=$RAD->{'TUNNEL_CLIENT_ENDPOINT'};
   }
то есть сменил направление и убрал ":0" в конце.
подозреваю, что по уму надо бы ввести проверку на значение переменной $conf{octets_direction}, но в моем случае оно равно 'user', и этот вариант работает. везде поле CID стало заполнятся, соответсвенно заработала проверка клиентов по CID-у.


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

вот сижу и думаю, что лучше, подождать, может автор добавит такую возможность в будущих версиях, или заюзать скрипт для динамического обновления фаервольных правил ;)

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

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

пожалуйста конфиг в студию

HikeR
Сообщения: 30
Зарегистрирован: Вс янв 06, 2008 2:18 pm

Сообщение HikeR »

~AsmodeuS~ писал(а):пожалуйста конфиг в студию
сорри, конфиг чего?

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

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

Cisco

realmarkiz
Сообщения: 95
Зарегистрирован: Сб июн 24, 2006 5:38 pm

Сообщение realmarkiz »

HikeR писал(а):
~AsmodeuS~ писал(а):пожалуйста конфиг в студию
сорри, конфиг чего?

Респект тебе дружище, у меня тоже заработало на PPTP, вот бы еще и PPPoE сделать :)

HikeR
Сообщения: 30
Зарегистрирован: Вс янв 06, 2008 2:18 pm

Сообщение HikeR »

еще маленькое неудобство.
вот такое уже достаточно давно... где-то не закрыт тег <B>
(обновлялся с ветки 0.4 буквально сегодня)
Изображение

HikeR
Сообщения: 30
Зарегистрирован: Вс янв 06, 2008 2:18 pm

Сообщение HikeR »

еще бяка, в самом низу вылазит содержимое поля выбора групп:
Изображение
после финта ушами в файле Abills\modules\Dv\webinterface, строки 174-177:
$FORM1{GROUP_SEL} = sel_groups();
form_search({ SEARCH_FORM => $html->tpl_show(_include('dv_users_search', 'Dv'),
{ %FORM1 },
{ notprint => 1 }) });
отображение этой бяки пропадает. остальные модули юзающие sel_groups() проверить не могу, ибо не юзаю ;)

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

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

HikeR писал(а):еще маленькое неудобство.
вот такое уже достаточно давно... где-то не закрыт тег <B>
(обновлялся с ветки 0.4 буквально сегодня)
Изображение
тут кажется все нормально

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

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

CID для циско поправил

HikeR
Сообщения: 30
Зарегистрирован: Вс янв 06, 2008 2:18 pm

Сообщение HikeR »

~AsmodeuS~ писал(а):тут кажется все нормально
я предполагал, что жирным выделяется текущая строка и ее родитель, а не все сразу ;)

Ответить