Иногда может возникать ситуация, когда оборудование доступа перезагружается или выходит из строя, при этом появляется необходимость восстановить текущее состояние оборудования или кэша агента HARD.

Для запроса текущего состояния необходимо отправить в системную очередь AIS_NET.HB_SYS_IN_* специальным образом сформированное сообщение, формат которого зависит от типа запроса и описан ниже. Сообщения из данной очереди извлекаются и обрабатываются системным заданием «Обработка входящей системной очереди».

Наименование очереди для конкретной фирмы можно получить c помощью запроса:

SELECT SS_QUEUES_PKG_S.GET_QUEUE_FOR_FIRM(
         num_N_FIRM_ID       => :num_N_FIRM_ID,
         num_N_QUEUE_TYPE_ID => SYS_CONTEXT('CONST', 'QUEUE_SystemIn'))
FROM   DUAL;

Все действия при обработке запроса происходят в рамках фирмы, идентификатор которой указан в элементе system_message.n_firm_id самого запроса.

Формирование команд применения конфигураций

Если необходимо, например, восстановить состояние программного файервола, ограничивающего доступ абонентов в сеть, необходимо отправить в очередь сообщение следующего вида:

<system_message>
    <vc_message_type>ProvisioningCurrentStateRequest</vc_message_type>
    <n_firm_id>100</n_firm_id>
    <content>
        <vc_key>Provider-Equipment-Attribute-Name</vc_key>
        <vc_value>Attribute-Value</vc_value>
        <n_value />
        <d_value />
    </content>
</system_message>

Элемент system_message.content данного типа сообщений включает в себя пару «Атрибут — Значение». Система формирует и отправляет на выполнение агенту HEX команды с типом «Подключение» по всем действующим конфигурациям, в которых участвуют профили операторского оборудования, содержащие атрибут из элемента vc_key со значением из vc_value.

Команды при обработке такого запроса формируются системой только на подключение и только для активных конфигураций. Команды на отключение по оборудованию без активных конфигураций не формируются.

DECLARE
  my_message varchar2(32767);
  
BEGIN  
  my_message := '
<system_message>
    <vc_message_type>ProvisioningCurrentStateRequest</vc_message_type>
    <n_firm_id>100</n_firm_id>
    <content>
            <vc_key>MikroTik-IP</vc_key>
            <vc_value>195.191.246.138</vc_value>
            <n_value />
            <d_value />
    </content>
</system_message>
';
  
  SS_QUEUES_PKG.ENQUEUE_MESSAGE(
    vch_VC_QUEUE_NAME => 'AIS_NET.HB_SYS_IN_1',
    vch_VC_MESSAGE    => my_message);
  
  COMMIT;
END;

Отправка профилей и привязок оборудования агенту HARD

Система отправляет только действующие на момент запроса профили и привязки оборудования. Если кэш агента содержит какие-то старые данные (например агент работал ранее с тестовым экземпляром Гидры), его необходимо сначала очистить от этих записей:

db.profiles.remove({});
db.equipment_binds.remove({});

После очистки кэша агента можно отправить в очередь сообщение следующего вида:

<system_message>
    <vc_message_type>ProvisioningSendProfilesAndBinds</vc_message_type>
    <n_firm_id>100</n_firm_id>
</system_message>

В элементе n_firm_id данного запроса необходимо указать идентификатор фирмы, по которой необходимо отправить данные.

Такую же отправку можно вызвать PL/SQL-скриптом непосредственно из основной БД:

BEGIN
  RP_PROFILES_PKG.SEND_ALL_PROFILES(
    num_N_FIRM_ID   => 100);
  COMMIT;

  EP_EQUIPMENT_PKG.ENQUEUE_BINDS_BY_FIRM(
    num_N_FIRM_ID   => 100,
    b_CommitBatches => CONST.b_TRUE);
  COMMIT;
END;
/


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