Отладка выражений

Во многих случаях выражения вычисляются в автономной среде, что серьезно затрудняет их тестирование. Например, когда системный администратор создает выражение для триггера событий тревоги, он не может корректно проверить его в Редакторе выражений, так как у него под рукой нет экземпляров запускающего события, которое могло бы предоставить "реальные" данные. Другими словами, таблица по умолчанию не будет определена в среде вычисления, а выражение не будет выдавать правильный результат при расчете в визуальном редакторе.

Использование журнала вычислений и ошибок

Действие Просмотр событий дает доступ к журналу вычислений выражения определенного контекста, а также к журналу ошибок вычисления.

Каждое действие по вычислению выражения регистрируется как отдельное событие Вычисление. Неудачные попытки вычислить выражение записываются в журнал как события Ошибка вычисления.

Вычисление некоторых выражений не привязано к какому-либо серверному контексту. Для таких выражений описываемый способ отладки работать не будет.

Использование функции трассировки

Язык выражений SberMobile включает в себя очень полезную функцию trace(), которая была разработана для отладки выражения. Эта функция берет любое значение, регистрирует его (чтобы его было видно в Журнале событий) и возвращает неизменным, имея результатом любые другие побочные эффекты.

Способы просмотра значений, вводимых функцией трассировки, различаются:

  • Если выражение вычисляется в SberMobile Server, значения можно просматривать путем активации фильтра событий Трассировка выражения (который является частью ядра установочного пакета SberMobile)

  • Если выражение вычисляется в дашборде, значения можно просматривать в журнале событий.

  • В других случаях значения будут вводиться в стандартном инструменте журналирования (доступ к нему можно получить из консоли, файла и т.п.)

Пример: Предположим, что мы хотим создать тревогу, которая будет появляться при давлении менее 20 единиц и температуре более 50 единиц. Начальное выражение тригерра переменной будет выглядеть следующим образом:

{pressure} < 20 && {temperature} > 50

Однако если тревога не появляется, сложно выяснить, характеризует ли выражение со значением false давление или температуру.

Для осуществления легкой отладки мы можем менять данное выражение следующим образом:

track({pressure}, "Pressure") < 20 && track({temperature}, "Temperature") > 50

После этого мы будем видеть следующий вывод в Журнале событий каждый раз, когда тревога производит проверку:

  • Pressure: 25.3

  • Temperature: 52.7

Это позволяет быстро находить текущие значения и видеть, почему настройка тревоги неправильная.

Другой способ - это отследить состояние отдельных частей выражения вместо "сырых" значений метрик:

track({pressure} < 20, "Pressure Condition") && track({temperature} > 50, "Temperature Condition")

Вывод будет следующий:

  • Pressure Condition: false

  • Temperature Condition: true