Tracer Query Language (TQL)

Tracer Query Language (TQL) — это язык запросов для фильтрации и выборки данных в Tracer.

TQL дополняет общие и расширенные фильтры для сбоев и даёт больше возможностей, чем префиксные фильтры (такие как !key:yourKey=yourValue), которые использовались в Tracer ранее.

TQL позволяет

  • использовать логические AND и OR;
  • включать и исключать значения, в том числе "все, кроме";
  • использовать для задания условий операторы сравнения.

Например, можно составить такое выражение:

text !~ "timeout" AND (sdk <= 18 OR sdk IN ("30", "31", "33")) AND (version NOT IN ("1.2.3", "2.0.0") OR versionCode NOT IN ("23400000", "56700000"))
AND (key("Key scenario [386]") != Control AND prop("buildBranch") != "develop")

В практическом смысле это значит, что вы можете

  • гибко настраивать условия алертов;
  • создавать запросы для проведения A/B-тестов, оценки качества релизов, составления сложных отчётов;
  • сохранять (вне интерфейса Tracer) часто используемые запросы и быстро получать нужную выборку.

Как использовать TQL

Поставьте курсор в поле ввода TQL и пользуйтесь подсказками.

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

<поле> <оператор> <значение> AND <поле> <оператор> <значение> OR <поле> <оператор> <значение>

Позже в языке появится поддержка дополнительных полей и предикатов.

Какие поля и операторы поддерживаются

ПолеТипПоддерживаемые операторыПримеры использования
textSTRING~, !~text ~ "crash"
text !~ "error"
versionVERSION=, !=, IN, NOT INversion = 1.2.3
version IN (1.2.3, 2.0.0)
versionCodeINTEGER=, !=, <, <=, >, >=, IN, NOT INversionCode = 123
versionCode IN ("123", "124")
severityENUM=, !=, <, <=, >, >=, IN, NOT INseverity = CRASH
severity IN ("CRASH", "FATAL")
environmentSTRING=, !=, IN, NOT INenvironment = "production"
environment IN ("default", "test")
statusENUM=, !=, IN, NOT INstatus = "Fixed"
status IN ("Fixed", "Regressed")
vendorSTRING=, !=, IN, NOT INvendor = "Google"
vendor IN ("Google", "Apple")
deviceSTRING=, !=, IN, NOT INdevice = "Samsung"
device IN ("Samsung", "Pixel")
sdkINTEGER=, !=, <, <=, >, >=, IN, NOT INsdk < "10"
sdk IN ("30", "31", "33")
issueKeySTRING=, !=, IN, NOT INissueKey = "TRACER-123"
issueKey IN ("TRACER", "BUG")
prop(propName)STRING=, !=, IN, NOT INprop("device") = "Pixel"
key(keyName)STRING=, !=, IN, NOT INkey("errorCode") = "AUTHENTICATION"
componentSTRING=, !=, IN, NOT INcomponent = "main"
component IN ("Login", "Settings")
osSTRING=, !=, IN, NOT INos = "macOS"

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

Посмотрите описание операторов:

ОператорСимволТипы данныхПримечание
EQUALS=STRING, VERSION, ENUM, INTEGERРавно
NOT EQUALS!=STRING, VERSION, ENUM, INTEGERНе равно
GREATER THAN>VERSION, ENUM, INTEGERБольше
GREATER THAN EQUALS>=VERSION, ENUM, INTEGERБольше или равно
LESS THAN<VERSION, ENUM, INTEGERМеньше
LESS THAN EQUALS<=VERSION, ENUM, INTEGERМеньше или равно
ININVERSION, ENUM, INTEGERВходит в список
NOT INNOT INVERSION, ENUM, INTEGERНе входит в список
CONTAINS~STRINGСодержит подстроку
DOES NOT CONTAIN!~STRINGНе содержит подстроку