Page tree
Skip to end of metadata
Go to start of metadata

HARD Batch

HARD Batch выполняет отложенные операции, не связанные с обработкой запросов:

  1. Загрузка аккаунтинга;
  2. Очистка устаревшего кэша.
Настройки по-умолчанию заданы в файле conf/batch.yml.
HARD Batch настраивается на запуск по крону для периодического выполнения. В случае, если один процесс HARD Batch еще не завершил работу, а в это время был запущен другой, то последний завершится с ошибкой "There is another hard batch process running right now". Путь к pid-файлу текущего процесса устанавливается в ключе конфигурационного файла batch.pid_path.
Также HARD Batch может быть запущен вручную в foreground-режиме, для этого используется параметр -c. Для явного задания пути к директории с конфигурационными файлами используется ключ -f.

Загрузка аккаунтинга

Задачей загрузки аккаунтинга является создание CDR и записей о трафике в БД на основании данных кэша.

При запуске загрузчика с Mongo считывается снимок коллекции аккаунтинга с фильтрацией по отсутствию признака загруженного пакета и pkt_date меньше даты начала загрузки.

Полученные пакеты группируются по сессии (session_uniq_id) и обрабатываются в следующем порядке:

  1. Start;
  2. Stop;
  3. Interim-Update, если по текущей сессии не было Stop-пакета.
Под обработкой пакета понимается:
  1. Отложенный подбор оборудования, если он требуется;
  2. Подбор CDR по полям записи кэша посредством вызова функции EX_AAA_PKG_S.GET_CDR_ID на основании маппинга, заданного в ключе конфигурационного файла accounting_loader.attribute_mapping.cdr_id;
  3. Вычисление полей CDR по полям записи кэша на основании маппинга, заданного в ключе конфигурационного файла accounting_loader.attribute_mapping.cdr;
  4. Создание CDR посредством вызова EX_AAA_PKG.CDR_PUT;
  5. Вычисление полей EX_DATA_COLLECT по полям записи кэша на основании маппинга, заданного в ключе конфигурационного файла accounting_loader.attribute_mapping.incoming_data_collect и .outgoing_data_collect для входящего и исходящего трафика соответственно;
  6. Создание записей о входящем и исходящем трафике посредством вызова EX_DATA_COLLECT_PKG.EX_DATA_COLLECT_PUT;
  7. Установка признака загруженного пакета (processed) и даты последнего обновления (pkt_date) равной дате начала загрузки аккаунтинга у записи кэша.
В автономном режиме загрузка аккаунтинга, невозможна. В случае попытки загрузки аккаунтинга в автономном режиме в логах появится ошибка "DB connection error".

Отложенный подбор оборудования

В целях ускорения обработки запросов в 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)

Очистка кэша

После завершения загрузки аккаунтига производится очистка устаревшего кэша. Удаляются:

  1. Аккаунтинг с устаревшим pkt_date, помеченный как загруженный (processed = True);
  2. Кэш абонентского оборудования с устаревшим d_last_upd;
  3. Кэш сетевых службы с устаревшим d_last_upd.
Срок, до которого кэш считается устаревшим, рассчитывается как текущее время минус количество минут, указанных в ключе конфигурационного файла cache_cleaner.expire_period.тип_сущности, где тип сущности: accounting, user_equip и netservs для аккаунтинга, абонентского оборудования и сетевых служб соответственно. По-умолчанию все 3 значения равны 1440 минутам (1 сутки).
Очистка кэша производится независимо от автономного режима.

Настройка cron

Для автоматического запуска загрузки отложенных операций по расписанию нужно добавить в /etc/crontab следующую строку:

/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
  • No labels