несколько вопросов и предложений.
несколько вопросов и предложений.
всем привет. сразу хочу передать привет... то есть поблагодарить автора за сей нелегкий, но полезный труд.
имеется циска 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 рассылка писем запрещена.
немного сумбурно, но все же.
имеется циска 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 раза.
еще немного.
7. Система/ MISC/ Словарь/ - изменения не сохраняются :( можно конечно и в файлик залезть, но через веб удобнее.
поставил словарям владельца www-data, иначе говоря, юзера, из под которого работает апач. теперь все меняется.
8. Отчёт/ Dialup / VPN/ Использовано/ Месяц/ - при выборе пользователя логичнее было бы попадать в его статистику, а не его карточку, и которой до статистики еще 4 нажатия.
также при нажатии ссылки " часы" получаю пустой отввет и ошибку в логе:
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 раз.
такс, по 8-му вопросу нашел сам:
Abills/modules/Dv/webintrfaces
строки в районе 1130-1140
index=15 надо заменить на index=106, тогда будет попадать в статистику юзера с детализацией сессий на выбранный день.
по вопросу ежедневного (ежемесячного) начисления фиксированной суммы. изменил в таблицах поля дневгого и месячного платежа так, чтобы они могли принимать отицательные значения.
напсал скриптик, который в 00:01 каждый день обновляется депозит юзера, у которого в тарифном плане стоит отрицательная сумма:
#!/usr/bin/php5
может кому пригодится такой извращенский способ замены контроля траффика по алайвам ;)
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],
...
по вопросу ежедневного (ежемесячного) начисления фиксированной суммы. изменил в таблицах поля дневгого и месячного платежа так, чтобы они могли принимать отицательные значения.
напсал скриптик, который в 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();
?>
еще косяк обнаружился. не присваивалось значение CID (Calling-Station-ID), хотя циска успешно слала и Client-IP-Addres, и Tunnel-Client-Endpoin. мак-адрес она ни в какую не хочет, зараза ;)
ошибка здесь:
/libexec/racct.pl
строки в районе 230-240
отредактировал вот так:
то есть сменил направление и убрал ":0" в конце.
подозреваю, что по уму надо бы ввести проверку на значение переменной $conf{octets_direction}, но в моем случае оно равно 'user', и этот вариант работает. везде поле CID стало заполнятся, соответсвенно заработала проверка клиентов по CID-у.
и еще. появилась потребность в в проверке IP юзера, который желает приконектится. есть у нас товарищи, которым нужно работать из дома, это решается указанием их внешних айпишников (ну или мак-адресов, если бы циска их отдавала). юзеры без заполненного поля CID конектятся без проблем. пока что зафаерволил на цмске все внешние подключения к порту VPN сервера, кроме этих товарищей.
вот сижу и думаю, что лучше, подождать, может автор добавит такую возможность в будущих версиях, или заюзать скрипт для динамического обновления фаервольных правил ;)
ошибка здесь:
/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'};
}
подозреваю, что по уму надо бы ввести проверку на значение переменной $conf{octets_direction}, но в моем случае оно равно 'user', и этот вариант работает. везде поле CID стало заполнятся, соответсвенно заработала проверка клиентов по CID-у.
и еще. появилась потребность в в проверке IP юзера, который желает приконектится. есть у нас товарищи, которым нужно работать из дома, это решается указанием их внешних айпишников (ну или мак-адресов, если бы циска их отдавала). юзеры без заполненного поля CID конектятся без проблем. пока что зафаерволил на цмске все внешние подключения к порту VPN сервера, кроме этих товарищей.
вот сижу и думаю, что лучше, подождать, может автор добавит такую возможность в будущих версиях, или заюзать скрипт для динамического обновления фаервольных правил ;)
-
- Site Admin
- Сообщения: 5749
- Зарегистрирован: Пт янв 28, 2005 3:11 pm
- Контактная информация:
-
- Site Admin
- Сообщения: 5749
- Зарегистрирован: Пт янв 28, 2005 3:11 pm
- Контактная информация:
-
- Сообщения: 95
- Зарегистрирован: Сб июн 24, 2006 5:38 pm
еще бяка, в самом низу вылазит содержимое поля выбора групп:

после финта ушами в файле Abills\modules\Dv\webinterface, строки 174-177:

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