Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Deal with server not ready gracefully #68

Open
wants to merge 1 commit into
base: main
Choose a base branch
from

Conversation

dgsuarez
Copy link

@dgsuarez dgsuarez commented Oct 4, 2024

Fixes #49

We've also observed this situation sometimes.

This implements a simple solution, the response is still an error so prometheus should handle it as such, but an exception doesn't bubble up in the app.

I haven't been able to find a way to query any public interface offered by puma to identify the situation, so I'm capturing the exception.

Testing is not straightforward since it depends on timing. One way to do it is to insert a sleep 10 here:

https://github.com/puma/puma/blob/8e7fab5f3992ef056dd9030a89da0372f933e5d4/lib/puma/single.rb#L51

With that, if we make a metrics request right after the app starts we see this code in action:

 $ curl -i localhost:9393
HTTP/1.1 503 Service Unavailable
Content-Type: text/plain
Content-Length: 45

Puma is booting up. Stats are not yet ready.

After 10 seconds requests return the regular prometheus payload:

$ curl -i localhost:9393
HTTP/1.1 200 OK
Content-Type: text/plain
Content-Length: 926

# TYPE puma_backlog gauge
...

@dgsuarez
Copy link
Author

Hey @harmjanblok can you take a look at this one? Thanks!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

NoMethodError: undefined method `stats' for nil:NilClass
2 participants