Трассировка и отладка GraphQL-запросов в сервисе доступа к хранилищу данных
Сервис доступа к данным поддерживает работу с GraphQL-запросами.
Трассировка GraphQL-запросов позволяет:
- отлаживать GraphQL-запросы;
- выявлять проблемы производительности для построения более эффективных запросов;
- выявлять изменения модели хранилища на этапе разработки.
При включении трассировки сервис доступа к хранилищу данных вместе с данными возвращает:
- текст GraphQL-запроса;
- SQL-запрос, в который транслировался исходный GraphQL-запрос;
- C#-выражение, использовавшееся для генерации SQL-запроса.
Включение трассировки через административную консоль
Чтобы включить у пользователя трассировку в административной консоли в разделе Security следует:
-
настроить права на трассировку. Для настройки права на трассировку на вкладке Namespaces административной консоли выбрать и нажать DataService, на вкладке Objects выбрать объект TraceRequest, нажать ссылку в столбце Permission, на открывшейся вкладке Permission в поле Operation Type выбрать значение Trace, в поле Permission выбрать Allow.
-
добавить два параметра в GraphQl-клиенте:
- diagTraceId = GUID: любой GUID, например, 9967c1c7-4a39-4e09-9bd8-aae4aca10522;
- diagTraceLevel = ‘log level’: уровень логирования с которым пишется диагностическая информация в системный лог сервиса. Может иметь следующие значения:
- I: information;
- D: debug;
- T: trace.
Результаты трассировки GraphQL-запросов будут доступны после выполнения GraphQL-запроса или мутации.
Включение трассировки при вызове метода API
При работе с хранилищем через сторонних клиентов, например Altair, чтобы включить режим трассировки в GraphQL-запрос требуется добавить http-заголовки:
- diagTraceId = GUID: идентификатор сессии трассировки, значение типа GUID
- diagTraceLevel = ‘log level’: уровень логирования с которым пишется диагностическая информация в системный лог сервиса. Может иметь следующие значения:
- I: information;
- D: debug;
- T: trace.
Затем выполнить запрос к хранилищу, например:
{
system_file(take:2) {
items {
name,
Id
}
pageInfo {
hasNextPage
hasPreviousPage
}
totalCount
}
}
В ответе на запрос будет получена дополнительная информация трассировщика:
{
"data": {
"system_file": {
"items": [
{
"name": "fake.ifc",
"Id": "6cb74db8-d711-4b94-8b98-fdff132d852a"
},
{
"name": "test_file_1 (1).txt",
"Id": "ca43049d-31b5-479c-b600-a18fbed5ef4a"
}
],
"pageInfo": {
"hasNextPage": true,
"hasPreviousPage": false
},
"totalCount": 92
}
},
"extensions": {
"traceInfo": {
//время выполнения запроса
"duration": "00:00:00.0564246",
"traceId": "F47F47AA-D34D-4788-9F68-E4882E75794B",
//GraphQL запрос
"query": "{system_file(take: 2){items {name, Id}pageInfo {hasNextPage,hasPreviousPage} totalCount}}",
//SQL запрос
"sql": "-- @__p_0='3' SELECT v.name, v.id AS \"Id\" FROM system.v_file AS v LIMIT @__p_0"
}
}
}