h1. Маршрут POS-BI-HOS {{toc}} h2. 1. ПРОБЛЕМА: данные из POS не появляются в базе данных BI Существует несколько возможных причин отсутствия данных в БД: # банально, данные отсутствуют (например, не сделан z-отчёт на АЗС); # на АЗС не работает сервис PosDataExtractor (остановлен, ошибки и т.д.) # данные с АЗС пришли, но ожидают обработки в очереди. В некоторых случаях на это требуется время (при условии работоспособности "@Message Router BI@"); # данные с АЗС пришли, но в процесс обработки прошёл с ошибками и сообщение отправлено в соответствующую очередь @.FAILED.@; # данные находятся в очереди на отправку на стороне АЗС, но не принимаются серверной стороной. Причин может также быть несколько: * физически отсутствует или плохая связь с удалённой станцией; * серверная сторона не устанавливает (принудительно обрывает) соединение. Напимер, исчерпан лимит коннектов или "зависший" коннект; Для более детального анализа, рекоммендуется проделать следующие действия: h3. Проверить на сервере KMG-BI: p(. *1.* Удостовериться, что +сервис "@Message Router BI@" активен+. p(. *2.* ... и отсутствуют проблемы ([ERROR] или [WARN]) в соответствующем log файле: @C:\Program Files\Mastersoft\MasterETL\MessageRouter\log\BI\{EntityName}\Route.log@ p(. *NB!* надо иметь ввиду, что на сервере KMG-BI кроме основного сервиса @Message Router@ присутствует дополнительный сервис "@Message Router BI (bulk)@" для массовой загрузки (вручную) пропущенных данных p(. *3.* Проверить +количество сообщений в состоянии _ожидания обработки_ в очередях ActiveMQ+ "http:// *BI_SERVER*:8161/admin/queues.jsp (список очередей ActiveMQ)":http://admin:amqadmin@172.21.0.190:8161/admin/queues.jsp В случае _"Number of messages pending" <> 0_ смотрим пункт №2 "возможных причин отсутствия данных в БД" Также, можно кликнуть на соответствующую очередь, чтобы просмотреть её содержимое. p(. *NB!* Для доступа к админской панели логин @admin@ и пароль @amqadmin@. h3. Проверить на POS: p(. *1.* Проверить, что +активен сервис "@ActiveMQ@"+. p(. *2.* Проверить, что +активен сервис "@POS Data Extractor@"+ и отсутствуют [ERROR] или [WARN] в log файле: @C:\PosDataExtractor\log\PosDataExtractor.log@ p(. *3.* Проверить +количество сообщений в состоянии _ожидания обработки_ в очередях ActiveMQ POS+ http://localhost:8161/admin/queues.jsp В случае _"Number of messages pending" <> 0_ удостоверяемся, что АЗС присутствует в списке текущих SSL соединений ActiveMQ BI "http:// *BI_SERVER*:8161/admin/connections.jsp (список соединений ActiveMQ)":http://admin:amqadmin@172.21.0.190:8161/admin/connections.jsp , а её IP адрес соответствует коду станции p(. *4.*: При помощи "Manager Console" проверить +содержимое+ очереди "@Регистры\ очередь ActiveMQ@" и архива "@Просмотр ДТЛ\ архив ActiveMQ@". Пустая _*@очередь ActiveMQ@*_ означает, что все сообщения POS обработаны и отправлены локальному экземпляру ActiveMQ. Обработанные сообщения перенесеносятся из _*@очереди ActiveMQ@*_ в _*@архив ActiveMQ@*_. Если данные находятся в _*@архиве ActiveMQ@*_, но на сервере их всё равно нет, то следует проверить поле @причина архивирования@. Значением поля должно быть _*1*_, в ином случае запись сообщения в очередь произошло с ошибкой... h2. 2. ПРОБЛЕМА: данные за прошлый период так и не пришли (потерялись) h3. Инициирование передачи данных из POS "руками" С помощью консольной версии PosDataExtractor (pdecli), можно передать отсутствующие данные из POS на сервер KMG-BI. Запуск производится из папки PosDataExtractor. Данные возможно передавать как за период времени, так и конкретно по номеру, если он известен. За один раз передаётся только один тип ресурса {@Entity@}. Формат записи в случае передачи данных по номеру следующий: *pdecli --entity=*_{EntityName}_ *--resource-id=*_{id}_ *--commit* *например:* @pdecli --entity=zreports --resource-id=4 --commit@ (передаём Z-отчёт №4) Формат записи в случае передачи данных за период времени следующий: *pdecli --entity=*_{EntityName}_ *--period-begin=*_{Start date-time}_ *--period-end=*_{End date-time}_ *--commit*, где формат даты-времени: _гггг-мм-дд_ *Т* _чч:мм_ @(без пробелов)@ *например:* @pdecli --entity=receipts --period-begin=2015-10-11T7:00 --period-end=2015-10-12T20:00 --commit@ (передаём чеки за период с @11 октября 2015г. 7:00@ до @12 октября 2015г. 20:00@) Наиболее распространённые типы ресурсов {@Entity@}, передаваемые с АЗС: * *ZReports* - Z-отчёты * *Receipts* - чеки * *Transactions* - транзакции * *Measurements* - уровнемеры * *GasDeliveries* - поставки топлива p(. *NB!* Приложение +автоматически+ определяет очередь ActiveMQ, необходимую для конкретного ресурса Полное описание приложения (с примерами использования) дано в англоязычной документации "PosDataExtractor console interface (pdecli) (pdecli)":https://files.ips.lv/checkouts/Projects/MasterETL/POS/PosDataExtractor/master/Doc/PdecliUserManual/en_US/. *internal:* На основании результатов запроса _*@bi_zreportholes_ex.sql@*_ можно сформировать "скрипты для автоматической загрузки данных с любой АЗС":https://files.ips.lv/checkouts/Tools/Generators/Web/Kmg/gen-pdecli-scripts.php, которые выполняют массовую загрузку данных за заданный период времени на сервер BI. Данные попадут в отдельные соответствующие @POS.Bulk.>@ очереди и будут обрабатываются собственным сервисом "@Message Router BI (bulk)@". h2. 3. ПРОБЛЕМА: POS/BOS ActiveMQ broker потерял связь с сервером * проверить состояние(статус) сервиса ActiveMQ можно либо в списке сервисов @Computer\Manage\Services@, либо в коммандной строке
sc query ActiveMQ* перезапуск сервиса ActiveMQ на POS/BOS; сервису может потребоваться время как для остановки сервиса, так и для его запуска (около 1 минуты)
sc stop ActiveMQ sc start ActiveMQp(. *NB!* перед остановом сервиса ActiveMQ также рекоммендуется остановить сервис _*@PosDataExtractor@*_ (POS) либо _*@MessageRouterBos@*_ (BOS) * Если ActiveMQ так и не получилось заставить работать как сервис, но данные срочно нужны, в качестве экстренной меры (до первого перезапуска компьютера) можно запустить исполняемую часть ActiveMQ вручную
c: cd \activemq\bin\ activemq.bath3. Определение неправильного кода станции * *POS:* Проверить, что в списке _*SSL connection*_ сервиса ActiveMQ BI "http:// *BI_SERVER*:8161/admin/connections.jsp (список соединений ActiveMQ)":http://admin:amqadmin@172.21.0.190:8161/admin/connections.jsp код АЗС соответствует IP адресу кассы. * *BOS:* Проверить, что в списке _*SSL connection*_ сервиса ActiveMQ HOS "http:// *HOS_SERVER*:8161/admin/connections.jsp (список соединений ActiveMQ)":http://admin:amqadmin@172.21.0.84:8161/admin/connections.jsp код АЗС соответствует IP адресу рабочего места. h2. 4. Что делать при смене кода станции # Поменять код станции на кассе (информация о станции - регистрационный номер) # В файле @c:\activemq\activemq.xml@ на кассе и BOS'e неоходимо указать правильное название брокеров ActiveMQ (*SAP-код* АЗС) # Если данные с неправильными кодами попали в BI, то в таблицах @Receipts, ZReports, Events, GasFillings, TigMeasurements, CardTrns@ необходимо менять содержимое поля @ObjectCode@. Это может быть в некоторых случаях затруднительно, если уже существуют данные для другой/других АЗС с таким же кодом. p(. В дальнейшем, при смене кода АЗС, достаточно будет поменять код станции на кассе и перезапустить инсталлятор MasterETL, который автоматически сделает необходимые настройки ETL рабочего места. *internal:* скрипт _*@bi_codereplace.sql@*_ служит для автоматизации процесса замены таблиц.