Настройка планировщика
Специально для выполнения периодических процессов (снятие абонплат, очистка таблиц, восстановление лимитов на договоре и т. д.) в системе ABilling предусмотрен планировщик задач, выполняющий задачи в заданные интервалы времени.
Для просмотра/добавления/редактирования/удаления задач зайдите в Сервис⇒Администрирование⇒Планировщик заданий. Перед вами откроется окно управления планировщиком с фильтруемым списком задач. Фильтрация осуществляется по модулям.
Для создания/редактирования/удаления задач воспользуйтесь стандартной панелью инструментов клиента биллинга. При создании/редактировании задачи снизу появится редактор, представленный на рисунке ниже.
Максимальная частота запуска заданий планировщиком - один раз в минуту. Данная частота устанавливается, если во всех полях Время запуска будет поставлена *. Т.е. следует читать так: "любая минута, любой час, любой день месяца, любой день недели, любой месяц".
Если столь высокая частота не требуется, можно уточнить параметры. Например, запуск задачи один раз в месяц 1-го числа в ОО:10 можно задать установкой Дни месяца в 1, Часы в 0, Минуты в 10. При необходимости нескольких значений временных фильтров можно указывать через запятую. Для кратных количеств можно указывать строки вида /n, где n - кратность. Например, */8 для часов установит часы в строку вида *0,8,16. Также можно указывать диапазоны чисел через '-'. Например: 8-16.
Параметр Приоритет показывает приоритет потока, который будет выполнять задачу. Без особой необходимости его не следует менять. Не забудьте поставить состояние Включено. Все задачи сгруппированы по модулям, к которым относятся. Для начала нужно выбрать модуль из выпадающего списка Модуль, затем задачу этого модуля из соответствующего выпадающего списка.
Каждая задача может иметь специфические Параметры запуска, которые должны быть введены в поле Параметры запуска в виде <ключ>=<значение>, каждая пара на новой строке. Параметры к каждой отдельной задаче и рекомендации по частоте её запуска даны далее в руководстве к ядру системы и её модулям.
В качестве тренировки вы можете добавить задачу восстановления временно изменённых лимитов, установив параметры задачи, как показано на рисунке.
Для немедленного запуска задачи планировщика используется контекстное меню, доступное по щелчку правой кнопкой мыши на задаче.
Планировщик автоматически перезагружает список периодических заданий при их редактировании в клиенте биллинга.
Кроме плановых заданий планировщик также исполняет все "тяжёлые" задачи биллинга. Например, начисление абонплат, перерасчёты. Это позволяет более оптимально использовать ОЗУ, выделяя большой объем памяти только планировщику. Также можно разгрузить сервер биллинга, вынося планировщик на отдельную машину. Количество "тяжёлых" задач, стоящих в очереди на обработку, также отображается в окне управления планировщиком в нижней части.
Поэтому планировщик должен работать, даже если список его периодических задач пуст. Задания на выполнение начислений и т.п. передаются сервером биллинга планировщику через базу данных. При этом сам планировщик может быть запущен на другой машине.
На вкладке Состояние планировщика можно посмотреть, чем в данный момент занят планировщик заданий. Отображаются как выполняемые периодические задачи, так и вся очередь тяжелых задач с отображением их текущего статуса (выполняется или ожидает выполнения).
Перенос планировщика на другую машину может быть произведен копированием каталога BillingServer на другую машину и перенастройкой data.properties с указанием URL к БД MySQL на другой машине. Если планировщик перенесен на другую машину, при каждом обновлении биллинга необходимо копирование папки lib на машину планировщика, а также перезапуск самого планировщика.
Параметры работы планировщика настраиваются в конфигурации сервера.
Стандартные задачи планировщика
Вместе с ядром биллинга инсталлируются перечисленные ниже задачи. Некоторые из них могут быть настроены сразу, другие связаны с различными подсистемами биллинга и их следует настраивать по мере их настройки и ввода в эксплуатацию.
Восстановление лимитов - возвращение к исходному значению временно изменённых лимитов. Периодичность запуска - 1 раз в день, в 0 часов, 0 минут. Данная задача восстанавливает лимиты после их временного понижения, более подробно о временном понижении лимитов читайте здесь. Задача может быть настроена сразу, параметров не содержит. Также задача восстанавливает лимиты договоров после просроченных "обещанных платежей" - временных понижений лимитов абонентами провайдера.
Удаление старых договоров - очистка базы биллинга от ненужных договоров с помещением их в архив. Периодичность запуска - любая, оптимально - несколько раз в сутки. Данная задача выполняет чистку базы от старых договоров по правилам, указанным в Менеджере договоров. О настройке Менеджера договоров и параметрах запуска задачи описано здесь.
Генератор заданий на загрузку логов - запускается раз в час и помещает в базу данных задания для загрузки логов с источников за предыдущий час. Данная задача необходима, если вы установили модуль Phone, хотя возможен и более удобен режим автоматической загрузки логов с вызовом скрипта dataloader с параметрами по мере подготовки логов. Данная задача не обязательна.
Рассылка о понижении лимита - напоминает пользователям с пониженным на время лимитом о необходимости оплаты. При этом анализируется не станет ли текущий баланс клиента ниже лимита после его возвращения на исходное значение. В параметрах задачи должны быть указаны:
# Тема письма
email.subject=Напоминание о задолженности
# Код параметра договора типа E-Mail, содержащего E-Mail, на который отсылается письмо
email.pid=<число>
Данная рассылка должна проводится раз в сутки, оптимальное время запуска - середина дня, для предоставления возможности пользователям пополнения баланса. Текст, содержащийся в письме, варьируется в XSL-шаблоне debt_mail.xsl.
Установка статусов договоров - задача должна запускаться раз в сутки в 0 часов 0 минут и изменять актуальные статусы договоров в соответствии с заданиями.
Валидатор - задача должна запускаться раз в период минимальной загрузки системы (например, 3 часа ночи 0 минут). Выполняет проверку базы биллинга на корректность данных, диагностируя ошибки случайных сбоев. Оповещает о наличии ошибок в журналах, которые не были исправлены. В параметрах задачи должно быть указано:
email=<EMail для отправки отчета>
Задача должна отправлять отчет при любом результате проверки. В данный момент производятся проверки журналов ошибок, таблицы баланса на правильность переноса остатков и совпадения суммарных наработок/платежей/расходов с суммами в соответствующих таблицах. В перспективе задача будет вызывать подсистемы валидации модулей и плагинов.
Генератор событий таймера - выполняет генерацию определенного события с заданной периодичностью. В качестве параметров могут быть указаны:
flag=<флаг таймера>
cid=<список id договоров, для которых нужно выполнить скрипт>
gid=<список id групп, для договоров которых нужно выполнить скрипт>
Флаг позволяет различать текущий таймер от других, позволяя обрабатывать только нужные. При этом задача будет выполняться только для указанных договоров или для договоров из указанных групп договоров.