с билингом ишла дока
блок "
Закрытие месяца"
открываеш docs/work.html#month
и читаеш там все написано.
Расчетный период системы NoDeny - месяц. C 1 по 31 число происходит накопление трафика в учетной записи клиента, после чего вступает в действие новый тарифный план, для которого необходимо трафик учитывать с нуля, поэтому при наступлении нового месяца, должны быть выполнены следующие действия:
- формирование платежа-снятия согласно пакета тарификации клиента и потребленного им трафика;
- запись данных в архив;
- обнуление текущего трафика;
- перевод клиентов на заказанные пакеты.
Эти действия выполняет скрипт «перехода на новый месяц» new_month.pl. Вы должны прописать автоматический запуск new_month.pl в начале каждого месяца, например, 1го числа в 00:00, но никак не в конце - к примеру, 31го числа в 23:59 нельзя. Автоматический запуск можно оформить через crontab:
server_www# cd /usr/local/nodeny
server_www# ee crontab.txt
и введите:
0 0 1 * * /usr/bin/perl /usr/local/nodeny/new_month.pl
Поставьте crontab.txt в задания:
server_www# crontab crontab.txt
Текущие задания в crontab-е можно увидеть:
server_www# crontab -l
Должна отобразиться строка, введенная ранее в crontab.txt
Первый раз запустите new_month.pl вручную:
server_www# cd /usr/local/nodeny
server_www# perl new_month.pl
После отработки скрипта, изучите логи в файле NEW_MONTH_LOG_X.XXXX и NEW_MONTH_ERROR_X.XXX. Последний хранит лог ошибок и в обычном случае он не должен существовать, т.е не должно быть ни одной ошибки. Поскольку операция перехода на новый месяц ответственная, вы должны убедиться, что все клиенты были переведены. Если в процессе перевода возникнет ошибка, например, станет недоступна БД либо иной сбой, то скрипт new_month.pl попытается восстановить соединение. Если же это не удастся, то скрипт запишет в NEW_MONTH_ERROR_X.XXX сообщение где произошла ошибка. Когда при изучении данного лога, вы обнаружите, что не все клиенты были переведены - запустите скрипт снова - он не будет повторно переводить клиентов, которые уже прошли эту процедуру.
Кроме того, по окончании работы, new_month.pl записывает соответствующеее итоговое событие в БД, которое вы можете увидеть в админке.
Как было сказано выше, для каждого клиента формируется платеж-снятие согласно пакета тарификации и потребленного им трафика. Хотя скрипт запускается в начале месяца, записи о снятиях проводятся предудущим месяцем - за 5 секунд до его окончания. Это необходимо для корректной отчетности.
Перед «переходом на новый месяц» будет не лишним сделать резервную копию базы данных.
Рекомендуется запускать new_month.pl как можно ближе к 00:01 первого числа месяца. При наступлении 1го числа, трафик продолжает считаться и если осуществить поздно переход, то трафик с начала месяца до момента запуска скрипта будет считаться трафиком за прошлый месяц. Таким образом, будет некоторое несоответствие в данных клиента. Например, абонент скачал 50Мб в январе, наступило 1 февраля, клиент продолжает загружать из интернета информацию. В 4 часа ночи запускается скрипт перехода на новый месяц и считает что клиент загрузил в январе 55Мб (5мб успел загрузить за 4 часа в феврале). Таким образом, с клиента снимутся деньги за 55Мб, после чего трафик обнулится. В статистике клиент будет видеть что 1-го февраля он загрузил 5мб, но на титульной странице будет отображаться 0Мб - т.к. 5Мб уже засчитаны в предыдущий месяц. То есть чем позже будет запущен скрипт new_month.pl, тем больше будет разница в суточных и общих данных.
Запускайте new_month.pl в 00:01 первого числа каждого месяца и такой проблемы у вас не будет.
Если же по каким-либо причинам вам необходимо запустить скрипт не первого числа, то при запуске используйте ключ t:
server_www# perl new_month.pl -t
Условия при которых с наступлением нового месяца не производится списание денежных средств со счета клиента:
1) Если клиент находится в группе, в характеристиках которой указано не производить списание средств (например группа «удаленные»)
2) Если параметр клиента «день начала потребения услуг» отрицательный - означает, что клиент ни одним из его ip не авторизовался и не потреблял интернет никогда с момента создания его данных