HARD Batch
HARD Batch выполняет отложенные операции, не связанные с обработкой запросов:
- Загрузка аккаунтинга;
- Очистка устаревшего кэша.
Загрузка аккаунтинга
Задачей загрузки аккаунтинга является создание CDR и записей о трафике в БД на основании данных кэша.
При запуске загрузчика с Mongo считывается снимок коллекции аккаунтинга с фильтрацией по отсутствию признака загруженного пакета и pkt_date меньше даты начала загрузки.
Полученные пакеты группируются по сессии (session_uniq_id) и обрабатываются в следующем порядке:
- Start;
- Stop;
- Interim-Update, если по текущей сессии не было Stop-пакета.
- Отложенный подбор оборудования, если он требуется;
- Подбор CDR по полям записи кэша посредством вызова функции EX_AAA_PKG_S.GET_CDR_ID на основании маппинга, заданного в ключе конфигурационного файла accounting_loader.attribute_mapping.cdr_id;
- Вычисление полей CDR по полям записи кэша на основании маппинга, заданного в ключе конфигурационного файла accounting_loader.attribute_mapping.cdr;
- Создание CDR посредством вызова EX_AAA_PKG.CDR_PUT;
- Вычисление полей EX_DATA_COLLECT по полям записи кэша на основании маппинга, заданного в ключе конфигурационного файла accounting_loader.attribute_mapping.incoming_data_collect и .outgoing_data_collect для входящего и исходящего трафика соответственно;
- Создание записей о входящем и исходящем трафике посредством вызова EX_DATA_COLLECT_PKG.EX_DATA_COLLECT_PUT;
- Установка признака загруженного пакета (processed) и даты последнего обновления (pkt_date) равной дате начала загрузки аккаунтинга у записи кэша.
Отложенный подбор оборудования
В целях ускорения обработки запросов в HARD 2 подбор абонентского оборудования для пакета аккаунтинга выполняется отложенно, если в кэше абонентского оборудования не находится актуальных данных на момент обработки запроса. В этом случае заполнение оборудования производится HARD Batch на этапе загрузки аккаунтинга. При этом делается запрос в БД для подбора оборудования. Результат сохраняется в кэш абонентского оборудования и может быть использован для обработки последующих пакетов.
Если при отложенном поодборе оборудования происходит ошибка, например, если в БД не нашлось подходящей записи, то пакет не будет загружен, а также не будет отмечен как загруженный и, как следствие, не будет удален при очистке коллекции аккаунтинга.
Настройка маппингов
- Ключи маппинга соответствуют параметрам процедур/функций, для которых они используются.
- Ключи чувствительны к регистру. По соглашению о наименовании параметров префикс пишется в нижнем регистре, а остальная часть в верхнем, например: num_N_AB_BYTES.
Для обращения к полям записи кэша используется переменная packet:
num_N_CDR_ID: packet.cdr_id dt_SEANCE_BEGIN: packet.begin_date
Для установки пустого значения поля используется специальное значение null. Также можно использовать числовые и строковые константы.
Параметры чувствительны к типу данных – например, поле с префиксом vch_ имеет строковый тип, следовательно если требуется записать в него число в строковом представлении, следует использовать явное приведение к строке:
vch_EXT_SEANCE_ID: str(packet.acct_session_id)
Очистка кэша
После завершения загрузки аккаунтига производится очистка устаревшего кэша. Удаляются:
- Аккаунтинг с устаревшим pkt_date, помеченный как загруженный (processed = True);
- Кэш абонентского оборудования с устаревшим d_last_upd;
- Кэш сетевых службы с устаревшим d_last_upd.
Настройка cron
Для автоматического запуска загрузки отложенных операций по расписанию нужно добавить в /etc/crontab следующую строку:
# HARD accounting loader and cache cleaner */3 * * * * hard /opt/hydra/hard/init/hard.sh -f /etc/hydra/hard batch >/dev/null 2>&1