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

Иногда может возникать ситуация, когда оборудование доступа перезагружается или выходит из строя, при этом появляется необходимость восстановить текущее состояние оборудования или кэша агента 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 данного типа сообщений включает в себя пару «Атрибут — Значение». При обработке запроса система выбирает операторское оборудование, у которого есть активные профили, содержащие атрибут из элемента vc_key со значением из vc_value. По этому оборудованию (их может быть несколько) формируются и отправляются на выполнение агенту HEX команды с типом «Подключение» для всех действующих конфигураций.

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

Пример PL/SQL-скрипта для отправки запроса на формирование команд по шлюзу с IP 10.15.24.38
SET SERVEROUTPUT ON;
DECLARE
  num_N_FIRM_ID NUMBER        := 100;
  vch_Attribute VARCHAR2(100) := 'MikroTik-IP';
  vch_AttrValue VARCHAR2(100) := '10.15.24.38';
  --
  vch_VC_QUEUE_NAME VARCHAR2(30);
  vch_VC_MESSAGE    VARCHAR2(4000);
BEGIN  
  vch_VC_MESSAGE := '
    <system_message>
       <vc_message_type>ProvisioningCurrentStateRequest</vc_message_type>
       <n_firm_id>' || num_N_FIRM_ID || '</n_firm_id>
       <content>
           <vc_key>' || vch_Attribute || '</vc_key>
           <vc_value>' || vch_AttrValue || '</vc_value>
           <n_value />
           <d_value />
       </content>
    </system_message>';
    
  vch_VC_QUEUE_NAME := SS_QUEUES_PKG_S.GET_QUEUE_FOR_FIRM(
                         num_N_FIRM_ID       => num_N_FIRM_ID,
                         num_N_QUEUE_TYPE_ID => CONST.QUEUE_SystemIn);
  
  SS_QUEUES_PKG.ENQUEUE_MESSAGE(
    vch_VC_QUEUE_NAME => vch_VC_QUEUE_NAME,
    vch_VC_MESSAGE    => vch_VC_MESSAGE);
  COMMIT;
  
  DBMS_OUTPUT.PUT_LINE('Queue: ' || vch_VC_QUEUE_NAME);
  DBMS_OUTPUT.PUT_LINE('Message: ' || vch_VC_MESSAGE);
END;
/

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

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

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

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

Пример запроса для отправки профилей и привязок оборудования агенту HARD
<system_message>
    <vc_message_type>ProvisioningSendProfilesAndBinds</vc_message_type>
    <n_firm_id>100</n_firm_id>
</system_message>

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

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

Отправка всех текущих профилей и привязок в очереди для HARD
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 будут отправлены все действующие профили абонентского и операторского оборудования, а также привязки данного оборудования друг к другу и подписки абонентов на службы.

Для отладки можно использовать следующий запрос:

Список сообщений во входящей очереди
SELECT   ENQ_TIME,
         DEQ_TIME,
         CEIL(DEQ_TIME - ENQ_TIME) PROC_DURATION_SEC,
         MSG_STATE,
         NVL(I.USER_DATA.TEXT_LOB, I.USER_DATA.TEXT_VC) MESSAGE
FROM     AQ$AQ_IN_HYDRA_SYS I
ORDER BY ENQ_TIME;
  • No labels