Все запросы, которые приходят через внешний шлюз логируются, для возможности последующего анализа данных и ошибок.
Все данные собираются в таблице EXCHANGELOG в дополнительной базе лога (firebird 192.168.2.10:9901)
Данные
Название поля
Назначение
Стандартное назначение
LOGTYPE
Тип сообщения:
1 - входящее; 0 - исходящее
MSGID
Идентификатор запроса
MSGTEXT
Текст запроса/ответа
GRPID
Порт подключения
Пользовательское назначение
LOGTEXT
Дополнительные данные из сообщения для анализа
METHOD
Идентификатор источника запроса.
Совпадает со значением в таблице PHPROGRREF.EXTGUID
URI
ACTION
Вызываемая функция
Триггер
Для возможности работы с данными, и их анализом написан триггер, который разбивает полученные данные запроса по полям.
Текст триггера
CREATEORALTERTRIGGERUSER$EXCHANGELOG_WEB FOR EXCHANGELOG
active BEFOREINSERTORUPDATEPOSITION0ASDECLARE p1 INT;
DECLARE p2 INT;
--DECLARE pcode TYPEOFCOLUMN clients.pcode;
DECLARE dcode TYPEOFCOLUMN doctor.dcode;
DECLARE logintype INT;
DECLARE checkmode INT;
DECLARE func ttext255;
BEGIN-- новое сообщение от сервисаIF(NEW.logtype=1)THENBEGINSELECT avalue FROM xml_get_node_value(NEW.msgtext,'MSH.3')INTONEW.method;
p1 =POSITION('<WEB_',NEW.msgtext);
IF(p1>0)THENBEGIN
p2 =POSITION(' ',NEW.msgtext, p1+1);
IF(p2>0)THENNEW.action =TRIM(SUBSTRING(NEW.msgtext FROM p1+1FOR p2-p1));
END-- пользовательская функцияSELECT avalue FROM xml_get_node_value(NEW.msgtext,'FUNCTION')INTO func;
IF(NEW.action ='WEB_USER_DEFINED_HANDLER')THENNEW.action ='USER$WEB_'||func;
-- доп данныеSELECT avalue FROM xml_get_node_value_integer(NEW.msgtext,'PCODE')INTO pcode;
SELECT avalue FROM xml_get_node_value_integer(NEW.msgtext,'DCODE')INTO dcode;
SELECT avalue FROM xml_get_node_value_integer(NEW.msgtext,'LOGINTYPE')INTO logintype;
SELECT avalue FROM xml_get_node_value_integer(NEW.msgtext,'CHECKMODE')INTO checkmode;
IF(COALESCE(NEW.logtext,'')='')THENBEGINNEW.logtext ='';
IF(pcode ISNOTNULL)THENNEW.logtext =NEW.logtext||'&PCODE='||pcode;
IF(dcode ISNOTNULL)THENNEW.logtext =NEW.logtext||'&DCODE='||dcode;
IF(logintype ISNOTNULL)THENNEW.logtext =NEW.logtext||'&CHECKTYPE='||logintype;
IF(checkmode ISNOTNULL)THENNEW.logtext =NEW.logtext||'&CHECKTYPE='||checkmode;
--IF(CHAR_LENGTH(NEW.logtext)>0)THENNEW.logtext =SUBSTRING(NEW.logtext FROM2);
ENDENDEND
Отчеты
Для возможности анализа сделанных запросов за период времени сформирован отчет, встроенный в «Генератор отчетов».
Отчетная форма отображает проведенные запросы, с разделением по источникам данных и указанием статистики: количества и времени выполнения.