2011-09-22 22:24:43 -04:00
|
|
|
# Standard libraries
|
|
|
|
require 'socket'
|
|
|
|
require 'tempfile'
|
|
|
|
require 'time'
|
|
|
|
require 'etc'
|
|
|
|
require 'uri'
|
|
|
|
require 'stringio'
|
|
|
|
|
|
|
|
require 'thread'
|
|
|
|
|
2016-09-05 14:29:16 -04:00
|
|
|
module Puma
|
|
|
|
autoload :Const, 'puma/const'
|
|
|
|
autoload :Server, 'puma/server'
|
|
|
|
autoload :Launcher, 'puma/launcher'
|
Expose top level Puma.stats API
Right now to get stats for a puma process the only way is to go through the control server. The puma-stats-logger does this by reading in a state file then querying the control server manually.
https://github.com/hired/puma-stats-logger/blob/7ad7798e9d06ff44e047ac56d0307c4ff9c73751/lib/puma_stats_logger/middleware.rb#L28
Instead, I’m proposing adding a top level `Puma.stats` method that will allow anyone inside of the same process to get access to the stats.
This could be instrumented by a gem to theoretically export these stats to say a Heroku dashboard where we could list out backlog or thread count.
The format of stats is a hash, and will change depending on if the server is in “single” or “clustered” mode.
Clustered:
```
{ "workers": 2, "phase": 0, "booted_workers": 2, "old_workers": 0, "worker_status": [{ "pid": 19832, "index": 0, "phase": 0, "booted": true, "last_checkin": "2018-03-12T16:03:12Z", "last_status": { "backlog":0, "running":5 } },{ "pid": 19833, "index": 1, "phase": 0, "booted": true, "last_checkin": "2018-03-12T16:03:12Z", "last_status": { "backlog":0, "running":5 } }] }
```
Single:
```
{ "backlog": 0, "running": 2 }
```
Alternatively if we could somehow enable another process to get these stats from Puma via pumactl by default without requiring any additional in app config, that would also work.
2018-03-12 12:41:39 -04:00
|
|
|
|
|
|
|
def self.stats_object=(val)
|
|
|
|
@get_stats = val
|
|
|
|
end
|
|
|
|
|
|
|
|
def self.stats
|
|
|
|
@get_stats.stats
|
|
|
|
end
|
2016-09-05 14:29:16 -04:00
|
|
|
end
|