Реализация мониторинга загрузки котировок в Хранилище
Пошаговое руководство
Для мониторинга предлагается:
- Создать задание (Oracle scheduler), интервал задается на усмотрение администратора системы, рекомендуемое значение 15 минут (в случае, если котировки загружаются чаще чем раз в 5 минут)
В качестве текста задания указать следующий скрипт:
declare
vInfo varchar2(4000); -- текст действия,отправляем
vMaxLstUpdate date; -- Последнее изменение цены
vMarketPlaceCode varchar2(2000); -- Имя площадки
vNeedSend boolean := false; -- отправлять уведомление?
vCNT number := 0; -- технический, проверить, что мы в принципе зашли в курсор
vDateforCheck date := resman.td; -- Дата, с которой ищем котировки
vIntervalMin number := 15; -- Интервал, сколько мы можем подождать котировку, в минутах
begin
vInfo := 'Формируем курсор. Время последней котировки в разрезе торговых систем';
for cur in (select nvl(max(vw.c$lastupdt),resman.td) as MaxLstUpdate, nvl(vw.market_place_code,'NO DATA FOUND') as MarketPlaceCode
from KIP.vw_quotations vw
where 1=1
and vw.c$date >= vDateforCheck
group by vw.market_place_code)
loop
null;
vCNT := vCNT+1 ;
vInfo := vInfo ||chr(10)||'Время последней котировки '||to_char(cur.MaxLstUpdate,'dd.mm.yyyy HH24:MI:SS')||' торговая площадка '||cur.MarketPlaceCode;
IF sysdate-cur.MaxLstUpdate > (1/24/60)*15 THEN
vInfo := vInfo ||chr(10)||' Котировка не обновлялась более 15 минут. Площадка '||cur.MarketPlaceCode;
vNeedSend := true;
END IF;
end loop;
IF vCNT = 0 and sysdate-vDateforCheck > (1/24/60)* NVL(vIntervalMin,1) THEN --проверим, что это не утро, не первые 15 минут нового дня
vInfo := vInfo ||chr(10)||' Сегодня '|| to_char(vDateforCheck,'dd.mm.yyyy HH24:MI:SS')||' котировки еще не загружались';
vNeedSend := true;
END IF;
IF vNeedSend then
resman.pkg_monitoring.send_msg(ialias_msg=>'NAVXLV5_TRANSPORT_ERR',itext=>vInfo);
end if;
DBMS_OUTPUT.PUT_LINE(vInfo);
end;
- В скрипте обратите внимание на значение параметра
vIntervalMin
– сколько в минутах, мы ожидаем котировку, если в течении указанного интервала котировка не поступит в Навигатор, через Систему сообщений будет отправлено сообщение; - Установить в Администраторе Системы сообщений подписку на сообщения с алиасом
NAVXLV5_TRANSPORT_ERR
; - При отсутствии котировок в Хранилище, более заданного в параметре
vIntervalMin
интервала, будет отправлено сообщение о том, что в Хранилище не загружаются котировки.
Пример скрипта создания задания:
DECLARE
vSQL clob;
vRepeat_interval varchar2(200) := 'FREQ=MINUTELY;INTERVAL=20';
BEGIN
vSQL := 'declare
vInfo varchar2(4000); -- текст действия,отправляем
vMaxLstUpdate date; -- Последнее изменение цены
vMarketPlaceCode varchar2(2000); -- Имя площадки
vNeedSend boolean := false; -- отправлять уведомление?
vCNT number := 0; -- технический, проверить, что мы в принципе зашли в курсор
vDateforCheck date := resman.td; -- Дата, с которой ищем котировки
vIntervalMin number := 15; -- Интервал, сколько мы можем подождать котировку, в минутах
begin
vInfo := ''Формируем курсор. Время последней котировки в разрезе торговых систем'';
for cur in (select nvl(max(vw.c$lastupdt),resman.td) as MaxLstUpdate, nvl(vw.market_place_code,''NO DATA FOUND'') as MarketPlaceCode
from KIP.vw_quotations vw
where 1=1
and vw.c$date >= vDateforCheck
group by vw.market_place_code)
loop
null;
vCNT := vCNT+1 ;
vInfo := vInfo ||chr(10)||''Время последней котировки ''||to_char(cur.MaxLstUpdate,''dd.mm.yyyy HH24:MI:SS'')||'' торговая площадка ''||cur.MarketPlaceCode;
IF sysdate-cur.MaxLstUpdate > (1/24/60)*15 THEN
vInfo := vInfo ||chr(10)||'' Котировка не обновлялась более 15 минут. Площадка ''||cur.MarketPlaceCode;
vNeedSend := true;
END IF;
end loop;
IF vCNT = 0 and sysdate-vDateforCheck > (1/24/60)* NVL(vIntervalMin,1) THEN --проверим, что это не утро, не первые 15 минут нового дня
vInfo := vInfo ||chr(10)||'' Сегодня ''|| to_char(vDateforCheck,''dd.mm.yyyy HH24:MI:SS'')||'' котировки еще не загружались'';
vNeedSend := true;
END IF;
IF vNeedSend then
resman.pkg_monitoring.send_msg(ialias_msg=>''NAVXLV5_TRANSPORT_ERR'',itext=>vInfo);
end if;
DBMS_OUTPUT.PUT_LINE(vInfo);
end;';
DBMS_SCHEDULER.CREATE_JOB (
job_name => '"RESMAN"."JOB_PKG_MONITORING"',
job_type => 'PLSQL_BLOCK',
job_action => vSQL,
number_of_arguments => 0,
start_date => sysdate,
repeat_interval => vRepeat_interval,
end_date => NULL,
enabled => FALSE,
auto_drop => FALSE,
comments => 'Мониторинг работы загрузки котировок в Хранилище, раз в 20 минут');
DBMS_SCHEDULER.SET_ATTRIBUTE(
name => '"RESMAN"."JOB_KIP_EH_MONITORING"',
attribute => 'logging_level', value => DBMS_SCHEDULER.LOGGING_OFF);
DBMS_SCHEDULER.enable(
name => '"RESMAN"."JOB_KIP_EH_MONITORING"');
END;
/
Похожие статьи