Queue look — различия между версиями
Материал из wiki.standart-n.ru
Aleksnick (обсуждение | вклад) (→Нет поля status в таблице g$profiles) |
Aleksnick (обсуждение | вклад) (→Нет поля status в таблице g$profiles) |
||
Строка 162: | Строка 162: | ||
ALTER TABLE G$PROFILES | ALTER TABLE G$PROFILES | ||
ADD STATUS DM_STATUS | ADD STATUS DM_STATUS | ||
+ | </pre> | ||
+ | |||
+ | <pre> | ||
+ | update g$profiles set status=0 | ||
</pre> | </pre> |
Версия 12:57, 14 января 2016
Инструкция о том, как настроить страницу, которая будет показывать проблемные точки с синхронизацией.
Скрипты, которые написаны ниже, нужно выполнять на серверной базе.
Содержание
Создаем процедуру UTPR_EXTRACT_DT_VER
SET TERM ^ ; create or alter procedure UTPR_EXTRACT_DT_VER ( PARAMS DM_TEXT1024) returns ( VER DM_TEXT) as declare variable I integer; begin /* 33HpO3Do1cf3fXQSycX282P1UwxR1CIFD236LLYBb8bP412PJ45sGihB7OBcg58OECjXRi7Yr52RTmAPAgwKqh=IG4b6vdQpQV48isG3n0O3F6RPh514L6u8NkSYx0WHQlqkG718nQKII63rKB53EAVbF1n34cU3P cmd=senddata2013 profile_id=142-031-547-812 PCID=A96BDCB61670ECA28B439D053F48AC71 exever=1.544 exedate=20141028172002 exesize=566784 dbname=C:\Standart-N\base\ztrade.fdb */ ver=null; i=position('exever=',params); if (i=0) then exit; ver=substring(params from i+7 for position(ascii_char(13)||ascii_char(10),params,i+8)-i-7); suspend; end^ SET TERM ; ^ /* Existing privileges on this procedure */ GRANT EXECUTE ON PROCEDURE UTPR_EXTRACT_DT_VER TO SYSDBA;
Создаем процедуру UTPR_QUEUE_LOOK
SET TERM ^ ; create or alter procedure UTPR_QUEUE_LOOK ( VERB_ALL integer = 0) returns ( CMNT DM_TEXT, PROFILE_ID DM_ID, SPROFILE DM_TEXT, EXEVER DM_DOUBLE, INSERTDT DM_DATETIME, MSECS integer, ENDFLAG integer, ENDTEXT DM_BLOBTEXT) as begin for select id, caption||' ('||DBSECUREKEY||')' from g$profiles where status=0 and caption is not null and id not in (0,1) into :profile_id,:sprofile do begin cmnt='-'; EXEVER=0;INSERTDT='01.01.2000'; ENDFLAG=0;ENDTEXT=''; select first 1 q.insertdt, datediff(millisecond,q.startdt,q.commitdt), endflag, endtext, (select ver from utpr_extract_dt_ver(q.params)) from g$queue q where q.profile_id=:profile_id order by id desc into :INSERTDT,:MSECS,:ENDFLAG,:ENDTEXT,:exever; cmnt=''; if (:exever<1.552) then cmnt=cmnt || 'Версия! '; if (insertdt is null) then cmnt=cmnt || 'Нет входящих пакетов!! '; -- if ((endflag is null) and (insertdt is not null)) then -- cmnt=cmnt || 'Сейчас в обработке... Проверь позже. '; if (endflag=-1) then cmnt=cmnt || 'Ошибка загрузки пакета! '; if (endflag=1 and (datediff(hour,insertdt,current_timestamp)>1)) then begin if (datediff(day,insertdt,current_timestamp)>0) then cmnt=cmnt || 'Уже больше суток нИ слухом нИ духом!! '; else cmnt=cmnt || 'Не на связи больше часа! '; end --cf if ((select count(1) from warebase where sname='' and g$profile_id=:profile_id)>=1) then if (exists(select first 1 part_id from warebase where sname='' and g$profile_id=:profile_id)) then cmnt=cmnt || 'Есть пустые наименования '; if ((VERB_ALL=1) or (cmnt<>'')) then suspend; end end^ SET TERM ; ^ COMMENT ON PARAMETER UTPR_QUEUE_LOOK.VERB_ALL IS '1: выводить все, а не только проблемные'; /* Following GRANT statetements are generated automatically */ GRANT SELECT ON G$PROFILES TO PROCEDURE UTPR_QUEUE_LOOK; GRANT EXECUTE ON PROCEDURE UTPR_EXTRACT_DT_VER TO PROCEDURE UTPR_QUEUE_LOOK; GRANT SELECT ON G$QUEUE TO PROCEDURE UTPR_QUEUE_LOOK; GRANT SELECT ON WAREBASE TO PROCEDURE UTPR_QUEUE_LOOK; /* Existing privileges on this procedure */ GRANT EXECUTE ON PROCEDURE UTPR_QUEUE_LOOK TO SYSDBA;
Создаем файл queue_look.php в папке с синхронизацией
<h1>Имя клиента</h1> <?php //<meta http-equiv="Content-Type" content="text/html; charset=windows-1251"> //проверка кодировки //http://apur.standart-n.ru/sinhro/engine/queue_look.php include("declare.php"); $g_db = ibase_connect($GLOBALS["DB_DATABASENAME"], $GLOBALS["DB_USER"], $GLOBALS["DB_PASSWD"]) or die(" error fbdb connect ".ibase_errmsg()); $it = ibase_trans(IBASE_WRITE + IBASE_COMMITTED + IBASE_REC_VERSION + IBASE_NOWAIT, $g_db) or die(" error start transaction".ibase_errmsg()); $sqltext="select current_timestamp from rdb\$database"; $qList = ibase_query($it, $sqltext); if (!$qList) {die(" error ".ibase_errmsg()."(".$sqltext.")");} $row = ibase_fetch_row($qList); echo "Время сервера: ".$row[0]."<br>"; $sqltext="select CMNT,PROFILE_ID,SPROFILE,EXEVER,INSERTDT,MSECS,ENDFLAG,ENDTEXT from UTPR_QUEUE_LOOK"; $qList = ibase_query($it, $sqltext); if (!$qList) {die(" error ".ibase_errmsg()."(".$sqltext.")");} // echo "<table><tr><td>##</td><td>Комментарий</td><td>Профиль</td><td>Версия</td><td>Дата</td><td>Время обработки</td><td>Флаг завершения</td><td>Техт ответа</td></tr>"; echo "<table class=\"table table-bordered table-hover table-striped\"><tr><td>##</td><td>Комментарий</td><td>Профиль</td><td>Версия</td><td>Дата</td><td>Время обработки</td><td>Флаг завершения</td></tr>"; $i=0; while ($row = ibase_fetch_row($qList)) { $i++; echo "<tr>"; echo "<td>".$i."</td>"; echo "<td>".$row[0]."</td>"; echo "<td>".$row[2]." /".$row[1]."</td>"; echo "<td>".$row[3]."</td>"; echo "<td>".$row[4]."</td>"; echo "<td>".$row[5]."</td>"; echo "<td>".$row[6]."</td>"; // echo "<td>".$row[7]."</td>"; echo "</tr>"; } echo "</table>"; ?>
Возможные проблемы
Нет поля status в таблице g$profiles
Тогда нужно добавить это поле в этой базе и отправить всем по g$tasks
ALTER TABLE G$PROFILES ADD STATUS DM_STATUS
update g$profiles set status=0