Как мне написать плагин Apollo Server для регистрации запроса и его продолжительности - PullRequest
0 голосов
/ 30 января 2020

Я удивлен, что не смог найти библиотеку или пример, чтобы сделать следующее:

Я хочу простой журнал сервера каждого запроса к серверу, в котором будет указано, какой запрос или мутация был запрошен, и прошедшее время, необходимое для выполнения запроса

Я знаю, что есть плагин и расширение фреймворки. Но я не уверен, что лучше всего поддерживать состояние между двумя обратными вызовами: requestDidStart и willSendResponse

, что-то, что выплюнуло бы:

path="createAccountMutation" service=20ms

дополнительный кредит будет чтобы показать размер полезной нагрузки

path="createAccountMutation" service=20ms bytes=355

Хотелось бы увидеть решение в машинописи

Примечание: я нашел apollo-log - но это не помогает длительность запроса

Спасибо!

Ответы [ 2 ]

1 голос
/ 01 февраля 2020

Вот в машинописном тексте

все заслуги достаются Даниэлю Рардену

1 голос
/ 30 января 2020

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

const LogPlugin = {
  requestDidStart(requestContext) {
    const start = Date.now()
    let op

    return {
      didResolveOperation (context) {
        op = context.operationName
      },
      willSendResponse (context) {
        const stop = Date.now()
        const elapsed = stop - start
        const size = JSON.stringify(context.response).length * 2
        console.log(
          `Operation ${op} completed in ${elapsed} ms and returned ${size} bytes`
        )
      }
    }
  },
}

Обратите внимание, что это будет работать только на -запрос базы. Если вам нужно что-то более детальное, например, отслеживать, сколько времени занимает разрешение отдельного поля, вам нужно использовать директиву или middleware

...