Page tree

Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: очепятка

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

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

...

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

Code Block
titleФормат запрос запроса генерации команд «Подключение» для действующих конфигураций
<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. По этому оборудованию (их может быть несколько) формируются и отправляются на выполнение агенту HEX команды с типом «Подключение» для всех действующих конфигураций.

Warning

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


Code Block
languagesql
titleПример 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

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

Code Block
languagejs
db.profiles.remove({});
db.equipment_binds.remove({});

...


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

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

Code Block
languagesql
titleСписок сообщений во входящей очереди
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;