Open
Description
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.