Веб-консоль в Showcase

Материал из Course Orchestra
Перейти к: навигация, поиск
Showcase

Создание решений на КУРС:Showcase

Веб-консоль - это инструмент для отладки решений. Она представляет собой веб-страницу по адресу: http://server:port/webapp/log/lastLogEvents.jsp (горячая комбинация кнопок hotkeys для вызова веб-консоли из Showcase: Ctrl + Shift + Alt + W или Ctrl + Shift + Alt + I), содержащую входные и выходные данные всех запросов к серверу, а также входные и выходные параметры хранимых процедур, вход и выход xsl-трансформаций, полный текст ошибок на сервере, а также другую информацию о работе Showcase. Горячая комбинация кнопок (hotkeys) для вызова веб-консоли из Showcase: Ctrl+Shift+Alt+W или Ctrl+Shift+Alt+I.

Лог представляет собой таблицу с записями. Основной интерес представляют отладочные записи. Каждая отладочная запись содержит следующую информацию:

  • тип сообщения: INFO, WARN или ERROR. Вся отладочная информация имеет тип INFO.
  • время выдачи сообщения в лог.
  • место выдачи сообщения:
    • Command - GWT-запрос или вызов сервлета
    • SQL - вызов хранимой процедуры
    • XSL - вызов XSL трансформации
  • направление передачи данных - вход или выход (INPUT или OUTPUT)
  • текущий пользователь
  • текущая userdata
  • имя выполняемой команды
  • requestId - идентификатор текущего запроса к серверу (генерируется автоматически, по нему можно отслеживать все этапы выполнения выбранной команды).

Записи в логе отсортированы по времени создания.Последние записи показываются вначале. Нужно учитывать, что порядок записей в консоли не обязательно соответствует реальному порядку событий (это связано с многопоточным выполнением приложения). Из всех передаваемых передаваемых в БД или получаемых из БД файлов выводятся в лог только текстовые файлы. Признак текстового файла - расширение. В программу зашит ряд расширений для текстовых файлов:

  • txt
  • xml
  • xsd
  • xsl
  • sql
  • ini
  • properties
  • htm
  • html
  • java
  • cmd
  • py

Кроме того, дополнительные расширения можно настраивать в general.properties (см. ниже).

Список команд Showcase:

  • ChartGetCommand
  • DataPanelGetCommand
  • ExecServerActionCommand
  • GeoMapGetCommand
  • GridExcelExportCommand
  • GridGetCommand
  • MainPageFrameGetCommand
  • MainPageGetCommand
  • NavigatorGetCommand
  • ServerStateGetCommand
  • WebTextGetCommand
  • XFormDownloadCommand
  • XFormGetCommand
  • XFormSaveCommand
  • XFormSQLTransformCommand
  • XFormUploadCommand
  • XFormXSLTransformCommand
  • PNGGetCommand
  • SVGGetCommand
  • JPGGetCommand
  • ExternalCommand
  • WriteToLogFromClientCommand
  • PluginGetCommand

Назначение команд можно понять из их названия.

Таким образом, отследить нужную команду можно следующим образом:

  1. зафиксировать нужного пользователя и userdata
  2. попытать определить - какая команда приводит к ошибке - выбрать из списка и зафиксировать название команды
  3. найти первую запись, относящуюся к данным пользователю, userdata и команде, примерно подходящую по времени, и зафиксировать ее requestId
  4. отследить все записи, относящиеся к данному requestId

Вывод в веб-консоль можно фильтровать с помощью параметров URL, например: http://server:port/webapp/log/lastLogEvents.jsp?param1=value1&param2=value2

Список доступных параметров:

  • level = {INFO, WARN, ERROR}
  • userdata
  • userName
  • requestId
  • commandName = {см. выше}
  • direction = {INPUT, OUTPUT}
  • process = {SERVLET, SQL, XSL}

После развертывания war-файла Showcase веб-консоль должна заработать автоматически. Но обратите внимание, что для работы веб-консоли файл logback.xml должен иметь вид такой же, как в дистрибутиве, а именно содержать следующее:

  • log level не ниже INFO
  • следующий код:
	<appender name="ShowcaseWebConsoleAppender"
		class="ru.curs.showcase.runtime.ShowcaseWebConsoleAppender">
		<filter class="ch.qos.logback.core.filter.EvaluatorFilter">
			<evaluator> <!-- defaults to type ch.qos.logback.classic.boolex.JaninoEventEvaluator -->
				<matcher>
					<Name>ru_curs</Name>
					<regex>^ru[.]curs.+</regex>
				</matcher>
				<expression>ru_curs.matches(logger)</expression>
			</evaluator>
			<OnMismatch>DENY</OnMismatch>
			<OnMatch>NEUTRAL</OnMatch>
		</filter>
	</appender>

	<root level="info">
		<appender-ref ref="ShowcaseWebConsoleAppender" />
	</root>

Кроме того, можно настроить формат вывода информации в консоль: XML или JSON. Для этого нужно в файл WEB-INF\classes\logic.xml добавить следующие строки:

<bean id="objectSerializer" class="ru.curs.showcase.util.xml.XMLObjectToLogSerializer">
</bean>

либо

<bean id="objectSerializer" class="ru.curs.showcase.util.JSONObjectToLogSerializer">
</bean>

Доступны следующие настройки веб-консоли, настраиваемые в WEB-INF\classes\general.properties :

  • число последних записей лога, отображаемых в веб-консоли - параметр internal.log.size
  • дополнительные расширения для текстовых файлов, содержимое которых будет отображено в консоли - web.console.add.text.files.

Страница веб-консоли - это JSP, который можно самостоятельно настраивать. В исходный вариант встроена быстрая навигация - при клике по первому левому столбцу происходит прокрутка на одну запись вперед, при клике по последнему левому столбцу - на одну запись назад.

Вывод из python- и celesta-скриптов

Реализована возможность вывода сообщений из python- и celesta-скриптов как в обычную, так и в вэб-консоль. Этот функционал призван упростить отладку ваших скриптов для Showcase.

Для реализации этого функционала в Showcase создан java-класс PythonWebConsolePrinter из пакета ru.curs.showcase.runtime.logging.

Этот класс имеет публичный статический метод printString(), принимающий на вход строку и при вызове которого будет осуществлён вывод этой строки в обе консоли.

Итак, в скрипте это будет выглядеть так:

импорт:

 from ru.curs.showcase.runtime.logging import PythonWebConsolePrinter

в процедуре:

 PythonWebConsolePrinter.printString("our string")