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

Главная категория => Nodeny 50 => Тема начата: Demeo от 27 Февраля 2012, 10:40:38



Название: Передвинуть время снятия абонплаты
Отправлено: Demeo от 27 Февраля 2012, 10:40:38
Доброго времени суток.

Пользуемся суточной абонплатой (снятие месячной равными долями). Снятие происходит в 2-3 часа ночи (видать, как ядро запустили в первый раз, так оно и поехало по этому времени щелкать). И в связи с этим иногда возникают проблемы в виде "пропавших" суток. По сути, в последний день абонплата снимается не за сутки пользования, а за 2-3 часа (причем глубокой ночи, когда нормальные люди спят), а утром обнаруживается сюрприз в виде заблокированного доступа, тогда как абон собирался еще день пользоваться инетом. Думаю, если передвинуть время снятия абонплаты хотя бы на 23 час, то таких проблем будет меньше...

Вопрос знатокам - как изменить время снятия суточной абонплаты. И, если возможно, сделать его максимально точным (сейчас разбег по снятию около часа)


Название: Re: Передвинуть время снятия абонплаты
Отправлено: 0xbad0c0d3 от 27 Февраля 2012, 11:47:15
файл nodeny.pl
Код:
1069   # снятие абонплат после часа ночи т.к. 1-го числа в 0 часов запуск скрипта перехода на новый месяц
1070   if( $hour_now>1 && $Tarif_loaded )
1071   {
1072      $V && &debug("=== Суточные абонплаты ===");
в строке 1070 и есть время снятия, сейчас это после часа ночи. Вот тут с условием и нужно "играть"


Название: Re: Передвинуть время снятия абонплаты
Отправлено: Demeo от 27 Февраля 2012, 13:07:10
Код:
1070   if( $hour_now>23 && $Tarif_loaded )

Будет снимать после 23? Успеет ли снять всем (~1500 абонов)?


Название: Re: Передвинуть время снятия абонплаты
Отправлено: 0xbad0c0d3 от 27 Февраля 2012, 13:52:56
Да, будет снимать посде 32. А успеет или нет - все зависит от нагрузок на сам MySQL и на систему в целом. Думаю - успеет.


Название: Re: Передвинуть время снятия абонплаты
Отправлено: Efendy от 27 Февраля 2012, 14:02:58
Код:
$When_Periodic_service=$t+3600; # периодичность сервисной функции - час
на всякий случай уменьшить на несколько минут, а то может случиться ситуация, когда последний запуск будет в 22:59:59, а  следующий уже в следующем дне


Название: Re: Передвинуть время снятия абонплаты
Отправлено: Demeo от 27 Февраля 2012, 14:56:37
Спасибо!
Надеюсь 50 минут хватит ;)


Название: Re: Передвинуть время снятия абонплаты
Отправлено: Demeo от 28 Февраля 2012, 08:42:15
В общем, что-то не то... Снимает все равно после 2 часов ночи. Зато есть одна приятность - на снятие по всем абонам уходит порядка 2 минут.

/usr/local/etc/rc.d/nodeny.sh restart - делал


Название: Re: Передвинуть время снятия абонплаты
Отправлено: Demeo от 28 Февраля 2012, 12:04:42
Посмотрел код...

Насколько я смог в нем разобраться, там идет проверка, не снималось ли с человека уже бабло. Но бабло УЖЕ снялось в 2 часа ночи, еще до внесения изменений. Поэтому билинг в 23 часа не стал ничего снимать. Это понятно. Но вот почему он ОПЯТЬ в 2 часа с копейками начал снимать абонку, хотя должен был в 23 - непонятно.

Поставил пока $hour_now>2 - мож что изменится


Название: Re: Передвинуть время снятия абонплаты
Отправлено: 0xbad0c0d3 от 28 Февраля 2012, 14:03:35
Снимается в 2-а ночи потому, что &Periodic_service выплняется раз в час, а т.к. стоит проверка, чтоб время было более часа ночи, то 01:00:00 + 1ч == 02:00:00.
Все верно, идет проверка не снималось ли бабло за текущие сутки, но на время выполнения &Periodic_service это никак не влияет. В первый день, после изменений, бабло не снимит, потому что в текущих сутках уже было снятие (в два ночи), а после изменений мы хотим, чтобы снятия проходили в 23, что является теми же сутками, что и 2-а ночи. В след. сутки все нормализуется. Мб. где-то ошибаюсь?


Название: Re: Передвинуть время снятия абонплаты
Отправлено: Demeo от 28 Февраля 2012, 14:36:55
Я тоже так думал, но потом нарисовалась такая логика: в первый день сняло по-молчанию, в 2 часа. Я поменял на 23, биллинг ничего не снял, потому что уже было снятие - это нормально.

Но на второй день, по идее, не должно было произойти снятие в 2 часа, биллинг должен был ожидать пока не наступит 23 (вот тут кстати, нарисовалась первая моя ошибка - нельзя ставить 23, ибо $hour_now>23 не наступит никогда  ;) Т.е. ставить надо $hour_now>22 или $hour_now=23). Может из-за этого, а может из-за чего еще, но биллинг снял по старинке в 2:26. Т.е. опять пойдет проверка, опять выяснится, что снятие УЖЕ было, соответственно после 23 не будет. Это вроде цикл


Название: Re: Передвинуть время снятия абонплаты
Отправлено: Efendy от 28 Февраля 2012, 17:35:27
/usr/local/etc/rc.d/nodeny.sh restart - делал
бок в этом, ядро перезапускается исключительно через веб-админку. Т.е nodeny.pl после редактирования не был перезагружен.


Название: Re: Передвинуть время снятия абонплаты
Отправлено: Demeo от 28 Февраля 2012, 20:29:10
А вывод насчет того, что $hour_now>23 не наступит никогда - верен?


Название: Re: Передвинуть время снятия абонплаты
Отправлено: Efendy от 28 Февраля 2012, 21:21:57
А вывод насчет того, что $hour_now>23 не наступит никогда - верен?
да, нужно >22


Название: Re: Передвинуть время снятия абонплаты
Отправлено: Demeo от 28 Февраля 2012, 21:41:11
Спасибо


Название: Re: Передвинуть время снятия абонплаты
Отправлено: 0xbad0c0d3 от 29 Февраля 2012, 00:17:25
А вывод насчет того, что $hour_now>23 не наступит никогда - верен?
Верен, если
Код:
$When_Periodic_service=$t+3600
;


Название: Re: Передвинуть время снятия абонплаты
Отправлено: Efendy от 29 Февраля 2012, 01:40:27
не, >23 часов, это не значит 23 часа и несколько минут, это значит 24 часа, а 24 часа - это 0 :)


Название: Re: Передвинуть время снятия абонплаты
Отправлено: Demeo от 29 Февраля 2012, 10:05:00
И все-таки не то пальто... Ранее я писал, что поставил >2, перезапустил ядро в консоли и через веб. Потом поставил >22 и проделал те же манипуляции. Сегодня абонка снялась после 3 часов...

Поставил >3. Наблюдаю...


Название: Re: Передвинуть время снятия абонплаты
Отправлено: Demeo от 12 Марта 2012, 09:25:09
Во я дебил. Как выяснилось, у меня аж 6 ядер было запущено. Соответственно какое-то из них и не давало сместить время снятия. Ща все норм :)