Как посчитать akkaHttp RejectionHandler отказов и успехов? - PullRequest
0 голосов

Я пытаюсь сосчитать отклонения, которые были возвращены RejectionHandler. Я думаю, способ, которым я делаю это сейчас, не самый лучший или даже неправильный. Я просто пытаюсь вызвать инкрементный метод в моей базе данных, в каждом из обработанных случаев.

  implicit def rejectionHandler: RejectionHandler =
    RejectionHandler.newBuilder()
      .handle {
        case MissingCookieRejection(cookieName) =>
          requestInfoEntry.incrementRjectedNum
          complete(HttpResponse(BadRequest, entity = "No cookies, no service!!!"))
      }
      .handle {
        case AuthorizationFailedRejection =>
          requestInfoEntry.incrementRjectedNum
          complete((Forbidden, "You're out of your depth!"))
      }
      .handle {
        case ValidationRejection(msg, _) =>
          requestInfoEntry.incrementRjectedNum
          complete((InternalServerError, "That wasn't valid! " + msg))
      }
      .handleAll[MethodRejection] { methodRejections =>
        requestInfoEntry.incrementRjectedNum//todo sideeffect ??
        val names = methodRejections.map(_.supported.name)
        complete((MethodNotAllowed, s"Can't do that! Supported: ${names mkString " or "}!"))
      }
      .handleNotFound {
        requestInfoEntry.incrementRjectedNum
        complete((NotFound, "Not here bldghad!"))
      }
      .result()

Пока я "посещаю мою страницу, которая не найдена", Akka HTTP возвращает мне правильный ответ: "Not here bldghad !» каждый раз, когда я обновляю браузер sh на несуществующей веб-странице. Но когда я проверяю свою базу данных, я вижу только один шаг. Могу ли я сделать так, как я делаю вообще? (Мне тоже нужно считать успехи)

PS Возможно, мне нужно работать с кодами состояния и не использовать побочные эффекты. Но какое лучшее место, где я могу это сделать? У меня много контроллеров, и я не хочу перехватывать это на каждом контроллере)

Могу ли я где-нибудь перехватить ответы?

1 Ответ

0 голосов

Я сделал это таким образом, надеюсь, это будет полезно

  def rejectionHandlerWithCounter: RejectionHandler = { (rejections: Seq[Rejection]) =>
    requestInfoEntry.incrementRjectedNum
    Some(complete((StatusCodes.Forbidden)))
  }
...