Иногда может возникать ситуация, когда оборудование , ограничивающее доступ абонента к услугам, доступа перезагружается или выходит из строя, при этом появляется необходимость восстановить текущее состояние оборудования или кэша агента HARD по данным Гидры.
Для запроса текущего состояния необходимо отправить в системную очередь AIS_NET.AQHB_SYS_IN_HYDRA_SYS*
специальным образом сформированное сообщение, формат которого зависит от типа запроса и описан ниже. Сообщения из данной очереди извлекаются и обрабатываются системным заданием «Обработка входящей системной очереди».
Наименование очереди для конкретной фирмы можно получить c помощью запроса:
Code Block |
---|
|
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; |
Все действия при обработке запроса происходят в рамках фирмы, идентификатор которой указан в элементе systemMessagesystem_message.n_firm_id
самого запроса.
...
Если необходимо, например, восстановить состояние программного файервола, ограничивающего доступ абонентов в сеть, необходимо отправить в очередь сообщение следующего вида:
Code Block |
---|
title | Формат запрос запроса генерации команд «Подключение» для действующих конфигураций |
---|
|
<systemMessage><system_message>
<vc_message_type>ProvisioningCurrentStateRequest</vc_message_type>
<n_firm_id>100</n_firm_id>
<content>
<line><vc_key>Provider-Equipment-Attribute-Name</vc_key>
<vc_value>Attribute-Value</vc_value>
<vc_key>Provider-Equipment-Attribute-Name-1</vc_key>
<vc_value>Value-1</vc_value> <n_value />
<d_value />
</content>
</system_message> |
Элемент system_message.content
данного типа сообщений включает в себя пару «Атрибут — Значение». При обработке запроса система выбирает операторское оборудование, у которого есть активные профили, содержащие атрибут из элемента vc_key
со значением из vc_value
. По этому оборудованию (их может быть несколько) формируются и отправляются на выполнение агенту HEX команды с типом «Подключение» для всех действующих конфигураций.
Warning |
---|
Команды при обработке такого запроса формируются системой только на подключение и только для активных конфигураций. Команды на отключение по оборудованию без активных конфигураций не формируются. |
Code Block |
---|
language | sql |
---|
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>' </line>|| num_N_FIRM_ID || '</n_firm_id>
<content>
<line> <vc_key>' || <vcvch_key>Provider-Equipment-Attribute-Name-2<Attribute || '</vc_key>
<vc_value>Value-2<value>' || vch_AttrValue || '</vc_value>
</line> <n_value />
<d_value />
</content>
</systemMessage> |
...
</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
Если необходимо восстановить или заполнить заново кэш агента HARD, необходимо Система отправляет только действующие на момент запроса профили и привязки оборудования. Если кэш агента содержит какие-то старые данные (например агент работал ранее с тестовым экземпляром Гидры), его необходимо сначала очистить от этих записей:
Code Block |
---|
|
db.profiles.remove({});
db.equipment_binds.remove({}); |
После очистки кэша агента можно отправить в очередь сообщение следующего вида:
Code Block |
---|
title | Пример запроса для отправки профилей и привязок оборудования агенту HARD |
---|
|
<systemMessage><system_message>
<vc_message_type>ProvisioningSendProfilesAndBinds</vc_message_type>
<n_firm_id>100</n_firm_id>
</systemMessage> |
...
В элементе n_firm_id
данного запроса необходимо указать идентификатор фирмы, по которой необходимо отправить данные.
Такую же отправку можно вызвать PL/SQL-скриптом непосредственно из основной БД:
Code Block |
---|
language | sql |
---|
title | Отправка всех текущих профилей и привязок в очереди для 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 будут отправлены все действующие профили абонентского и операторского оборудования, а также привязки данного оборудования друг к другу и подписки абонентов на службы.
Для отладки можно использовать следующий запрос:
Code Block |
---|
language | sql |
---|
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; |