Skip to content

endpoint_run.grape callback is called without middlewares #2010

Description

@Kukunin

Hello. I'm trying to add the monitoring by subscribing to 'endpoint_run.grape' via ActiveSupport::Notifications.subscribe.

It works well until an exception occurs inside API. I have a bunch of rescue_from blocks to return different status codes depending on exceptions, such as

rescue_from ActiveRecord::RecordNotFound do
  error!({ error: :not_found }, 404)
end

The problem is when I call an endpoint which raises ActiveRecord::RecordNotFound, it really returns 404 status code, but in my callback data[:endpoint].status is still 200 (however data[:exception_object] is not null).

A quick look at the code shows, that callback wraps only the main call, without middlewares. I believe, it should wrap middlewares too because:

  • middlewares are part of the business logic. It's not good to have 404 returned to a client and 200 reported to the monitoring.
  • timing will be more accurate because the middlewares can eat time too.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions