@@ -19,6 +19,53 @@ def check
1919 end
2020end
2121
22+ class PumaCheck < OkComputer ::Check
23+ attr_reader :threshold
24+
25+ def initialize ( backlog_threshold )
26+ @threshold = backlog_threshold . to_i
27+ end
28+
29+ def check
30+ stats = self . stats
31+
32+ return mark_message "N/A as Puma is not used." if stats . nil?
33+
34+ if stats [ :running ] > 0
35+ mark_message "Puma is running"
36+ else
37+ mark_failure
38+ mark_message "Puma is not running"
39+ end
40+
41+ if stats [ :backlog ] < threshold
42+ mark_message "Backlog ok"
43+ else
44+ mark_failure
45+ mark_message "Backlog congested"
46+ end
47+ end
48+
49+ def stats
50+ return nil unless applicable?
51+ server = Puma ::Server . current
52+ return nil if server . nil?
53+
54+ {
55+ backlog : server . backlog || 0 ,
56+ running : server . running || 0 ,
57+ pool_capacity : server . pool_capacity || 0 ,
58+ max_threads : server . max_threads || 0
59+ }
60+ end
61+
62+ def applicable?
63+ return @applicable unless @applicable . nil?
64+
65+ @applicable = Object . const_defined? ( "Puma::Server" ) && !Puma ::Server . current . nil?
66+ end
67+ end
68+
2269# Register delayed_job backed up test
2370dj_max = OpenProject ::Configuration . health_checks_jobs_queue_count_threshold
2471OkComputer ::Registry . register "delayed_jobs_backed_up" ,
@@ -28,8 +75,11 @@ def check
2875OkComputer ::Registry . register "delayed_jobs_never_ran" ,
2976 DelayedJobNeverRanCheck . new ( dj_never_ran_max )
3077
78+ backlog_threshold = OpenProject ::Configuration . health_checks_backlog_threshold
79+ OkComputer ::Registry . register "puma" , PumaCheck . new ( backlog_threshold )
80+
3181# Make dj backed up optional due to bursts
32- OkComputer . make_optional %w( delayed_jobs_backed_up )
82+ OkComputer . make_optional %w( delayed_jobs_backed_up puma )
3383
3484# Register web worker check for web + database
3585OkComputer ::CheckCollection . new ( 'web' ) . tap do |collection |
@@ -45,6 +95,7 @@ def check
4595 collection . register :mail , OkComputer ::ActionMailerCheck . new
4696 collection . register :delayed_jobs_backed_up , OkComputer ::Registry . fetch ( 'delayed_jobs_backed_up' )
4797 collection . register :delayed_jobs_never_ran , OkComputer ::Registry . fetch ( 'delayed_jobs_never_ran' )
98+ collection . register :puma , OkComputer ::Registry . fetch ( 'puma' )
4899 OkComputer ::Registry . default_collection . register 'full' , collection
49100end
50101
0 commit comments