check_passenger 1.0 → 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.codeclimate.yml +8 -0
- data/.rubocop.yml +32 -0
- data/.travis.yml +9 -0
- data/CHANGELOG.md +23 -0
- data/CONTRIBUTING.md +12 -0
- data/Gemfile +2 -0
- data/README.md +39 -12
- data/bin/check_passenger +58 -23
- data/check_passenger.gemspec +1 -1
- data/lib/check_passenger.rb +2 -2
- data/lib/check_passenger/check.rb +34 -27
- data/lib/check_passenger/nagios_check.rb +12 -15
- data/lib/check_passenger/parser.rb +37 -19
- data/lib/check_passenger/passenger_status.rb +9 -9
- data/lib/check_passenger/version.rb +1 -1
- data/test/passenger-status +7 -8
- data/test/sample_output_1.txt +5 -5
- data/test/sample_output_2.txt +4 -4
- data/test/sample_output_3.txt +4 -4
- data/test/test_check.rb +71 -28
- data/test/test_helper.rb +3 -0
- data/test/test_nagios_check.rb +4 -4
- data/test/test_parser.rb +34 -8
- data/test/test_passenger_status.rb +2 -2
- metadata +23 -36
@@ -1,6 +1,6 @@
|
|
1
1
|
module CheckPassenger
|
2
2
|
module NagiosCheck
|
3
|
-
EXIT_CODES = {
|
3
|
+
EXIT_CODES = {ok: 0, warn: 1, crit: 2}
|
4
4
|
|
5
5
|
private
|
6
6
|
|
@@ -21,13 +21,10 @@ module CheckPassenger
|
|
21
21
|
status_text = line
|
22
22
|
when Hash
|
23
23
|
status_text = line[:text]
|
24
|
-
perf_data << '%s=%d;%s;%s;%s;%s'
|
25
|
-
|
26
|
-
line[:warn], line[:crit],
|
27
|
-
line[:min], line[:max]
|
28
|
-
]
|
24
|
+
perf_data << format('%s=%d;%s;%s;%s;%s',
|
25
|
+
line[:counter], line[:value], line[:warn], line[:crit], line[:min], line[:max])
|
29
26
|
else
|
30
|
-
|
27
|
+
fail ArgumentError
|
31
28
|
end
|
32
29
|
|
33
30
|
if main_status.nil?
|
@@ -42,13 +39,13 @@ module CheckPassenger
|
|
42
39
|
|
43
40
|
def nagios_output(status, data)
|
44
41
|
unless [:ok, :warn, :crit].include?(status)
|
45
|
-
|
42
|
+
fail ArgumentError, "Invalid status provided: #{status}"
|
46
43
|
end
|
47
44
|
|
48
45
|
main_status, status_data, perf_data = nagios_format_output(data)
|
49
46
|
|
50
47
|
if perf_data.is_a?(Array) and perf_data.any?
|
51
|
-
puts '%s|%s'
|
48
|
+
puts format('%s|%s', main_status, perf_data.join(' '))
|
52
49
|
else
|
53
50
|
puts main_status
|
54
51
|
end
|
@@ -60,17 +57,17 @@ module CheckPassenger
|
|
60
57
|
def nagios_range_to_condition(nagios_range)
|
61
58
|
case nagios_range
|
62
59
|
when /^(-?\d+)$/
|
63
|
-
|
60
|
+
->(n) { !(0..$1.to_i).include?(n) }
|
64
61
|
when /^(-?\d+):~?$/
|
65
|
-
|
62
|
+
->(n) { n < $1.to_i }
|
66
63
|
when /^~?:(-?\d+)$/
|
67
|
-
|
64
|
+
->(n) { n > $1.to_i }
|
68
65
|
when /^(-?\d+):(-?\d+)$/
|
69
|
-
|
66
|
+
->(n) { !($1.to_i..$2.to_i).include?(n) }
|
70
67
|
when /^@(-?\d+):(-?\d+)$/
|
71
|
-
|
68
|
+
->(n) { ($1.to_i..$2.to_i).include?(n) }
|
72
69
|
else
|
73
|
-
|
70
|
+
fail ArgumentError, "Cannot process Nagios range: #{nagios_range}"
|
74
71
|
end
|
75
72
|
end
|
76
73
|
|
@@ -1,6 +1,6 @@
|
|
1
1
|
module CheckPassenger
|
2
2
|
class Parser
|
3
|
-
UNIT_MULTIPLIERS = {
|
3
|
+
UNIT_MULTIPLIERS = {'s' => 1, 'm' => 60, 'h' => 3_600, 'd' => 86_400}
|
4
4
|
|
5
5
|
attr_reader :max_pool_size, :passenger_status_output, :passenger_version
|
6
6
|
|
@@ -18,7 +18,7 @@ module CheckPassenger
|
|
18
18
|
app_data = application_data(app_name)
|
19
19
|
app_data[:live_process_count]
|
20
20
|
else
|
21
|
-
@application_data.
|
21
|
+
@application_data.reduce(0) { |a, e| a + e[:live_process_count] }
|
22
22
|
end
|
23
23
|
end
|
24
24
|
|
@@ -27,7 +27,7 @@ module CheckPassenger
|
|
27
27
|
app_data = application_data(app_name)
|
28
28
|
app_data[:memory]
|
29
29
|
else
|
30
|
-
@application_data.
|
30
|
+
@application_data.reduce(0) { |a, e| a + e[:memory] }
|
31
31
|
end
|
32
32
|
end
|
33
33
|
|
@@ -40,15 +40,28 @@ module CheckPassenger
|
|
40
40
|
end
|
41
41
|
end
|
42
42
|
|
43
|
+
def request_count(app_name = nil)
|
44
|
+
if app_name
|
45
|
+
app_data = application_data(app_name)
|
46
|
+
app_data[:request_count]
|
47
|
+
else
|
48
|
+
@application_data.reduce(@top_level_request_count) { |a, e| a + e[:request_count] }
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
def top_level_request_count(_ = nil)
|
53
|
+
@top_level_request_count
|
54
|
+
end
|
55
|
+
|
43
56
|
private
|
44
57
|
|
45
58
|
def application_data(app_name)
|
46
59
|
if app_name
|
47
60
|
data = @application_data.select { |d| d[:name].include?(app_name) }
|
48
61
|
if data.size == 0
|
49
|
-
|
62
|
+
fail NoApplicationError.new('Application is not running', app_name)
|
50
63
|
elsif data.size > 1
|
51
|
-
|
64
|
+
fail MultipleApplicationsError.new("More than one running application match '#{app_name}'", app_name)
|
52
65
|
else
|
53
66
|
return data.first
|
54
67
|
end
|
@@ -57,18 +70,15 @@ module CheckPassenger
|
|
57
70
|
end
|
58
71
|
end
|
59
72
|
|
60
|
-
def
|
73
|
+
def process_alive?(last_used)
|
61
74
|
life_to_seconds(last_used) < LIVE_PROCESS_TTL_IN_SECONDS
|
62
75
|
end
|
63
76
|
|
64
77
|
def life_to_seconds(last_used)
|
65
|
-
last_used.split(/\s+/).
|
78
|
+
last_used.split(/\s+/).reduce(0) do |sum, part|
|
66
79
|
if part =~ /^(\d+)([a-z])$/
|
67
|
-
unless UNIT_MULTIPLIERS.
|
68
|
-
|
69
|
-
'Unknown time unit "%s" in "%s"' % [$2, last_used],
|
70
|
-
passenger_status_output
|
71
|
-
)
|
80
|
+
unless UNIT_MULTIPLIERS.key?($2)
|
81
|
+
fail StatusOutputError.new("Unknown time unit '#{$2}' in '#{last_used}'", passenger_status_output)
|
72
82
|
end
|
73
83
|
sum + $1.to_i * UNIT_MULTIPLIERS[$2]
|
74
84
|
else
|
@@ -82,13 +92,17 @@ module CheckPassenger
|
|
82
92
|
app_data = {}
|
83
93
|
|
84
94
|
app_output =~ /App root: +([^\n]+)/
|
85
|
-
|
95
|
+
fail StatusOutputError.new('Could not find app name', passenger_status_output) unless $1
|
86
96
|
app_data[:name] = $1.strip
|
87
97
|
|
98
|
+
app_output =~ /Requests in queue: *(\d+)/
|
99
|
+
fail StatusOutputError.new('Could not find application queued requests', passenger_status_output) unless $1
|
100
|
+
app_data[:request_count] = $1.strip.to_i
|
101
|
+
|
88
102
|
app_data[:process_count] = app_output.scan(/PID *: *\d+/).size
|
89
|
-
app_data[:memory] = app_output.scan(/Memory *: *(\d+)M/).
|
103
|
+
app_data[:memory] = app_output.scan(/Memory *: *(\d+)M/).reduce(0.0) { |a, e| a + e[0].to_f }
|
90
104
|
app_data[:live_process_count] = (
|
91
|
-
app_output.scan(/Last used *: *([^\n]+)/).select { |m|
|
105
|
+
app_output.scan(/Last used *: *([^\n]+)/).select { |m| process_alive?(m[0]) }
|
92
106
|
).size
|
93
107
|
|
94
108
|
app_data
|
@@ -97,23 +111,27 @@ module CheckPassenger
|
|
97
111
|
|
98
112
|
def parse_passenger_status_output
|
99
113
|
passenger_status_output =~ /^(.*?)-+ +Application groups +-+[^\n]*\n(.*)$/m
|
100
|
-
|
114
|
+
fail StatusOutputError.new('Did not find "Application groups" section', passenger_status_output) unless $1
|
101
115
|
|
102
116
|
generic_data = $1
|
103
117
|
application_data = $2
|
104
118
|
|
105
119
|
generic_data =~ /Version *: *([.\d]+)/
|
106
|
-
|
120
|
+
fail StatusOutputError.new('Could not find Passenger version', passenger_status_output) unless $1
|
107
121
|
@passenger_version = $1
|
108
122
|
|
109
123
|
generic_data =~ /Max pool size *: *(\d+)/
|
110
|
-
|
124
|
+
fail StatusOutputError.new('Could not find max pool size', passenger_status_output) unless $1
|
111
125
|
@max_pool_size = $1.to_i
|
112
126
|
|
113
127
|
generic_data =~ /Processes *: *(\d+)/
|
114
|
-
|
128
|
+
fail StatusOutputError.new('Could not find process count', passenger_status_output) unless $1
|
115
129
|
@process_count = $1.to_i
|
116
130
|
|
131
|
+
generic_data =~ /Requests in top-level queue *: *(\d+)/
|
132
|
+
fail StatusOutputError.new('Could not find top-level queued requests', passenger_status_output) unless $1
|
133
|
+
@top_level_request_count = $1.to_i
|
134
|
+
|
117
135
|
@application_data = parse_application_data(application_data)
|
118
136
|
end
|
119
137
|
end
|
@@ -11,16 +11,16 @@ module CheckPassenger
|
|
11
11
|
|
12
12
|
def passenger_status_executable_path
|
13
13
|
command = if @path and File.exist?(@path)
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
14
|
+
if File.directory?(@path)
|
15
|
+
File.expand_path('passenger-status', @path)
|
16
|
+
else
|
17
|
+
@path
|
18
|
+
end
|
19
|
+
else
|
20
|
+
`which passenger-status`.strip
|
21
|
+
end
|
22
22
|
|
23
|
-
|
23
|
+
fail Errno::ENOENT, 'Cannot find passenger-status' unless File.executable?(command)
|
24
24
|
|
25
25
|
command
|
26
26
|
end
|
data/test/passenger-status
CHANGED
@@ -1,15 +1,13 @@
|
|
1
|
-
#!/
|
1
|
+
#!/bin/bash
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
__END__
|
3
|
+
cat <<'HEREDOC'
|
6
4
|
Version : 4.0.46
|
7
5
|
Date : 2014-09-11 00:57:57 +0200
|
8
6
|
Instance: 32028
|
9
7
|
----------- General information -----------
|
10
8
|
Max pool size : 40
|
11
9
|
Processes : 26
|
12
|
-
Requests in top-level queue :
|
10
|
+
Requests in top-level queue : 10
|
13
11
|
|
14
12
|
----------- Application groups -----------
|
15
13
|
/home/application_1/Site#default:
|
@@ -42,7 +40,7 @@ Requests in top-level queue : 0
|
|
42
40
|
|
43
41
|
/home/application_2/Site#default:
|
44
42
|
App root: /home/application_2/Site
|
45
|
-
Requests in queue:
|
43
|
+
Requests in queue: 2
|
46
44
|
* PID: 26712 Sessions: 0 Processed: 184 Uptime: 21h 36m 36s
|
47
45
|
CPU: 0% Memory : 26M Last used: 1m 11s
|
48
46
|
* PID: 26721 Sessions: 0 Processed: 0 Uptime: 21h 36m 35s
|
@@ -54,7 +52,7 @@ Requests in top-level queue : 0
|
|
54
52
|
|
55
53
|
/home/application_3/Site#default:
|
56
54
|
App root: /home/application_3/Site
|
57
|
-
Requests in queue:
|
55
|
+
Requests in queue: 3
|
58
56
|
* PID: 17507 Sessions: 0 Processed: 2141 Uptime: 21h 43m 33s
|
59
57
|
CPU: 0% Memory : 242M Last used: 5h 51m
|
60
58
|
* PID: 17514 Sessions: 0 Processed: 5967 Uptime: 21h 43m 33s
|
@@ -70,7 +68,7 @@ Requests in top-level queue : 0
|
|
70
68
|
|
71
69
|
/home/application_4/Site#default:
|
72
70
|
App root: /home/application_4/Site
|
73
|
-
Requests in queue:
|
71
|
+
Requests in queue: 4
|
74
72
|
* PID: 32383 Sessions: 0 Processed: 2182 Uptime: 2h 7m 9s
|
75
73
|
CPU: 0% Memory : 76M Last used: 2s ago
|
76
74
|
* PID: 23605 Sessions: 0 Processed: 609 Uptime: 1h 7m 25s
|
@@ -80,3 +78,4 @@ Requests in top-level queue : 0
|
|
80
78
|
* PID: 24379 Sessions: 0 Processed: 275 Uptime: 32m 7s
|
81
79
|
CPU: 0% Memory : 59M Last used: 0s ago
|
82
80
|
|
81
|
+
HEREDOC
|
data/test/sample_output_1.txt
CHANGED
@@ -4,12 +4,12 @@ Instance: 32028
|
|
4
4
|
----------- General information -----------
|
5
5
|
Max pool size : 40
|
6
6
|
Processes : 26
|
7
|
-
Requests in top-level queue :
|
7
|
+
Requests in top-level queue : 10
|
8
8
|
|
9
9
|
----------- Application groups -----------
|
10
10
|
/home/application_1/Site#default:
|
11
11
|
App root: /home/application_1/Site
|
12
|
-
Requests in queue:
|
12
|
+
Requests in queue: 11
|
13
13
|
* PID: 12396 Sessions: 0 Processed: 13322 Uptime: 19h 12m 52s
|
14
14
|
CPU: 0% Memory : 153M Last used: 51m 29s
|
15
15
|
* PID: 12404 Sessions: 0 Processed: 11694 Uptime: 19h 12m 52s
|
@@ -37,7 +37,7 @@ Requests in top-level queue : 0
|
|
37
37
|
|
38
38
|
/home/application_2/Site#default:
|
39
39
|
App root: /home/application_2/Site
|
40
|
-
Requests in queue:
|
40
|
+
Requests in queue: 12
|
41
41
|
* PID: 26712 Sessions: 0 Processed: 184 Uptime: 21h 36m 36s
|
42
42
|
CPU: 0% Memory : 26M Last used: 1m 11s
|
43
43
|
* PID: 26721 Sessions: 0 Processed: 0 Uptime: 21h 36m 35s
|
@@ -49,7 +49,7 @@ Requests in top-level queue : 0
|
|
49
49
|
|
50
50
|
/home/application_3/Site#default:
|
51
51
|
App root: /home/application_3/Site
|
52
|
-
Requests in queue:
|
52
|
+
Requests in queue: 13
|
53
53
|
* PID: 17507 Sessions: 0 Processed: 2141 Uptime: 21h 43m 33s
|
54
54
|
CPU: 0% Memory : 242M Last used: 5h 51m
|
55
55
|
* PID: 17514 Sessions: 0 Processed: 5967 Uptime: 21h 43m 33s
|
@@ -65,7 +65,7 @@ Requests in top-level queue : 0
|
|
65
65
|
|
66
66
|
/home/application_4/Site#default:
|
67
67
|
App root: /home/application_4/Site
|
68
|
-
Requests in queue:
|
68
|
+
Requests in queue: 14
|
69
69
|
* PID: 32383 Sessions: 0 Processed: 2182 Uptime: 2h 7m 9s
|
70
70
|
CPU: 0% Memory : 76M Last used: 2s ago
|
71
71
|
* PID: 23605 Sessions: 0 Processed: 609 Uptime: 1h 7m 25s
|
data/test/sample_output_2.txt
CHANGED
@@ -4,12 +4,12 @@ Instance: 28669
|
|
4
4
|
----------- General information -----------
|
5
5
|
Max pool size : 40
|
6
6
|
Processes : 22
|
7
|
-
Requests in top-level queue :
|
7
|
+
Requests in top-level queue : 12
|
8
8
|
|
9
9
|
----------- Application groups -----------
|
10
10
|
/home/application_1/Site#default:
|
11
11
|
App root: /home/application_1/Site
|
12
|
-
Requests in queue:
|
12
|
+
Requests in queue: 21
|
13
13
|
* PID: 10966 Sessions: 0 Processed: 10840 Uptime: 15h 39m 16s
|
14
14
|
CPU: 1% Memory : 170M Last used: 17s ago
|
15
15
|
* PID: 10974 Sessions: 0 Processed: 0 Uptime: 15h 39m 16s
|
@@ -37,7 +37,7 @@ Requests in top-level queue : 0
|
|
37
37
|
|
38
38
|
/home/application_2/Site#default:
|
39
39
|
App root: /home/application_2/Site
|
40
|
-
Requests in queue:
|
40
|
+
Requests in queue: 22
|
41
41
|
* PID: 1679 Sessions: 0 Processed: 1273 Uptime: 3d 17h 40m 10s
|
42
42
|
CPU: 0% Memory : 45M Last used: 6m 4
|
43
43
|
* PID: 1686 Sessions: 0 Processed: 0 Uptime: 3d 17h 40m 10s
|
@@ -49,7 +49,7 @@ Requests in top-level queue : 0
|
|
49
49
|
|
50
50
|
/home/application_3/Site#default:
|
51
51
|
App root: /home/application_3/Site
|
52
|
-
Requests in queue:
|
52
|
+
Requests in queue: 23
|
53
53
|
* PID: 8170 Sessions: 0 Processed: 13179 Uptime: 1d 12h 8m 46s
|
54
54
|
CPU: 1% Memory : 612M Last used: 0s ag
|
55
55
|
* PID: 8180 Sessions: 0 Processed: 20043 Uptime: 1d 12h 8m 45s
|
data/test/sample_output_3.txt
CHANGED
@@ -4,24 +4,24 @@ Instance: 1965
|
|
4
4
|
----------- General information -----------
|
5
5
|
Max pool size : 50
|
6
6
|
Processes : 6
|
7
|
-
Requests in top-level queue :
|
7
|
+
Requests in top-level queue : 13
|
8
8
|
|
9
9
|
----------- Application groups -----------
|
10
10
|
/home/application_1/Site#default:
|
11
11
|
App root: /home/application_1/Site
|
12
|
-
Requests in queue:
|
12
|
+
Requests in queue: 1
|
13
13
|
* PID: 14518 Sessions: 0 Processed: 11723 Uptime: 20h 8m 7s
|
14
14
|
CPU: 0% Memory : 144M Last used: 1m 33s ag
|
15
15
|
|
16
16
|
/home/application_2/Site#default:
|
17
17
|
App root: /home/application_2/Site
|
18
|
-
Requests in queue:
|
18
|
+
Requests in queue: 32
|
19
19
|
* PID: 14134 Sessions: 0 Processed: 2313 Uptime: 20h 8m 10s
|
20
20
|
CPU: 0% Memory : 63M Last used: 6h 22m 4
|
21
21
|
|
22
22
|
/home/application_3/Site#default:
|
23
23
|
App root: /home/application_3/Site
|
24
|
-
Requests in queue:
|
24
|
+
Requests in queue: 33
|
25
25
|
* PID: 21058 Sessions: 0 Processed: 725 Uptime: 2d 22h 35m 38s
|
26
26
|
CPU: 0% Memory : 30M Last used: 5m 4
|
27
27
|
* PID: 21071 Sessions: 0 Processed: 0 Uptime: 2d 22h 35m 38s
|
data/test/test_check.rb
CHANGED
@@ -5,7 +5,7 @@ describe CheckPassenger::Check do
|
|
5
5
|
it 'returns a PassengerStatus class' do
|
6
6
|
assert_equal 'CheckPassenger::PassengerStatus', CheckPassenger::Check.send(:passenger_status).name
|
7
7
|
assert_equal 'CheckPassenger::PassengerStatus',
|
8
|
-
|
8
|
+
CheckPassenger::Check.send(:passenger_status, File.dirname(__FILE__)).name
|
9
9
|
end
|
10
10
|
end
|
11
11
|
|
@@ -14,9 +14,9 @@ describe CheckPassenger::Check do
|
|
14
14
|
|
15
15
|
output_data.each do |datum|
|
16
16
|
assert_kind_of Hash, datum
|
17
|
-
assert datum.
|
18
|
-
assert datum.
|
19
|
-
assert datum.
|
17
|
+
assert datum.key?(:text)
|
18
|
+
assert datum.key?(:counter)
|
19
|
+
assert datum.key?(:value)
|
20
20
|
end
|
21
21
|
end
|
22
22
|
|
@@ -29,7 +29,7 @@ describe CheckPassenger::Check do
|
|
29
29
|
|
30
30
|
describe '#process_count' do
|
31
31
|
it 'reports global process count' do
|
32
|
-
options = {
|
32
|
+
options = {parsed_data: @parsed_data}
|
33
33
|
output_status, output_data = CheckPassenger::Check.process_count(options)
|
34
34
|
|
35
35
|
assert_equal :ok, output_status
|
@@ -40,7 +40,7 @@ describe CheckPassenger::Check do
|
|
40
40
|
end
|
41
41
|
|
42
42
|
it 'reports global memory' do
|
43
|
-
options = {
|
43
|
+
options = {parsed_data: @parsed_data}
|
44
44
|
output_status, output_data = CheckPassenger::Check.memory(options)
|
45
45
|
|
46
46
|
assert :ok, output_status
|
@@ -51,7 +51,7 @@ describe CheckPassenger::Check do
|
|
51
51
|
end
|
52
52
|
|
53
53
|
it 'reports data for all applications' do
|
54
|
-
options = {
|
54
|
+
options = {parsed_data: @parsed_data, include_all: true}
|
55
55
|
[:process_count, :memory, :live_process_count].each do |counter|
|
56
56
|
output_status, output_data = CheckPassenger::Check.send(counter, options)
|
57
57
|
|
@@ -63,7 +63,7 @@ describe CheckPassenger::Check do
|
|
63
63
|
end
|
64
64
|
|
65
65
|
it 'reports global live process count' do
|
66
|
-
options = {
|
66
|
+
options = {parsed_data: @parsed_data}
|
67
67
|
output_status, output_data = CheckPassenger::Check.live_process_count(options)
|
68
68
|
|
69
69
|
assert :ok, output_status
|
@@ -73,8 +73,30 @@ describe CheckPassenger::Check do
|
|
73
73
|
assert_equal 9, output_data.first[:value]
|
74
74
|
end
|
75
75
|
|
76
|
+
it 'reports global request queue' do
|
77
|
+
options = {parsed_data: @parsed_data}
|
78
|
+
output_status, output_data = CheckPassenger::Check.request_count(options)
|
79
|
+
|
80
|
+
assert :ok, output_status
|
81
|
+
output_data_structure_test(output_data)
|
82
|
+
|
83
|
+
assert_equal 'request_count', output_data.first[:counter]
|
84
|
+
assert_equal 60, output_data.first[:value]
|
85
|
+
end
|
86
|
+
|
87
|
+
it 'reports top-level queue size' do
|
88
|
+
options = {parsed_data: @parsed_data}
|
89
|
+
output_status, output_data = CheckPassenger::Check.top_level_request_count(options)
|
90
|
+
|
91
|
+
assert :ok, output_status
|
92
|
+
output_data_structure_test(output_data)
|
93
|
+
|
94
|
+
assert_equal 'top_level_request_count', output_data.first[:counter]
|
95
|
+
assert_equal 10, output_data.first[:value]
|
96
|
+
end
|
97
|
+
|
76
98
|
it 'reports application process count' do
|
77
|
-
options = {
|
99
|
+
options = {parsed_data: @parsed_data, app_name: 'application_1'}
|
78
100
|
output_status, output_data = CheckPassenger::Check.process_count(options)
|
79
101
|
|
80
102
|
assert_equal :ok, output_status
|
@@ -85,7 +107,7 @@ describe CheckPassenger::Check do
|
|
85
107
|
end
|
86
108
|
|
87
109
|
it 'reports application memory' do
|
88
|
-
options = {
|
110
|
+
options = {parsed_data: @parsed_data, app_name: 'application_2'}
|
89
111
|
output_status, output_data = CheckPassenger::Check.memory(options)
|
90
112
|
|
91
113
|
assert_equal :ok, output_status
|
@@ -96,7 +118,7 @@ describe CheckPassenger::Check do
|
|
96
118
|
end
|
97
119
|
|
98
120
|
it 'reports application live process count' do
|
99
|
-
options = {
|
121
|
+
options = {parsed_data: @parsed_data, app_name: 'application_3'}
|
100
122
|
output_status, output_data = CheckPassenger::Check.live_process_count(options)
|
101
123
|
|
102
124
|
assert_equal :ok, output_status
|
@@ -106,15 +128,26 @@ describe CheckPassenger::Check do
|
|
106
128
|
assert_equal 1, output_data.first[:value]
|
107
129
|
end
|
108
130
|
|
131
|
+
it 'reports application request queue count' do
|
132
|
+
options = {parsed_data: @parsed_data, app_name: 'application_4'}
|
133
|
+
output_status, output_data = CheckPassenger::Check.request_count(options)
|
134
|
+
|
135
|
+
assert_equal :ok, output_status
|
136
|
+
output_data_structure_test(output_data)
|
137
|
+
|
138
|
+
assert_equal 'request_count', output_data.first[:counter]
|
139
|
+
assert_equal 14, output_data.first[:value]
|
140
|
+
end
|
141
|
+
|
109
142
|
it 'sets a warn alert when value over threshold' do
|
110
|
-
options = {
|
111
|
-
output_status,
|
143
|
+
options = {parsed_data: @parsed_data, app_name: 'application_4', warn: '150', crit: '300'}
|
144
|
+
output_status, _output_data = CheckPassenger::Check.memory(options)
|
112
145
|
assert_equal :warn, output_status
|
113
146
|
end
|
114
147
|
|
115
148
|
it 'sets a crit alert when value over threshold' do
|
116
|
-
options = {
|
117
|
-
output_status,
|
149
|
+
options = {parsed_data: @parsed_data, app_name: 'application_4', warn: '75', crit: '150'}
|
150
|
+
output_status, _output_data = CheckPassenger::Check.memory(options)
|
118
151
|
assert_equal :crit, output_status
|
119
152
|
end
|
120
153
|
end
|
@@ -128,33 +161,43 @@ describe CheckPassenger::Check do
|
|
128
161
|
end
|
129
162
|
|
130
163
|
it 'correctly uses singular/plural when reporting counts' do
|
131
|
-
options = {
|
132
|
-
|
164
|
+
options = {parsed_data: @parsed_data}
|
165
|
+
_output_status, output_data = CheckPassenger::Check.process_count(options)
|
133
166
|
assert output_data.first[:text] =~ /\b6 processes\b/, output_data.first[:text]
|
134
|
-
|
167
|
+
_output_status, output_data = CheckPassenger::Check.live_process_count(options)
|
135
168
|
assert output_data.first[:text] =~ /\b1 live process\b/, output_data.first[:text]
|
169
|
+
_output_status, output_data = CheckPassenger::Check.request_count(options)
|
170
|
+
assert output_data.first[:text] =~ /\b79 requests\b/, output_data.first[:text]
|
171
|
+
_output_status, output_data = CheckPassenger::Check.top_level_request_count(options)
|
172
|
+
assert output_data.first[:text] =~ /\b13 top-level requests\b/, output_data.first[:text]
|
136
173
|
|
137
|
-
options = {
|
138
|
-
|
174
|
+
options = {parsed_data: @parsed_data, app_name: 'application_1'}
|
175
|
+
_output_status, output_data = CheckPassenger::Check.process_count(options)
|
139
176
|
assert output_data.first[:text] =~ /\b1 process\b/, output_data.first[:text]
|
140
|
-
|
177
|
+
_output_status, output_data = CheckPassenger::Check.live_process_count(options)
|
141
178
|
assert output_data.first[:text] =~ /\b1 live process\b/, output_data.first[:text]
|
179
|
+
_output_status, output_data = CheckPassenger::Check.request_count(options)
|
180
|
+
assert output_data.first[:text] =~ /\b1 request\b/, output_data.first[:text]
|
142
181
|
|
143
|
-
options = {
|
144
|
-
|
182
|
+
options = {parsed_data: @parsed_data, app_name: 'application_2'}
|
183
|
+
_output_status, output_data = CheckPassenger::Check.process_count(options)
|
145
184
|
assert output_data.first[:text] =~ /\b1 process\b/, output_data.first[:text]
|
146
|
-
|
185
|
+
_output_status, output_data = CheckPassenger::Check.live_process_count(options)
|
147
186
|
assert output_data.first[:text] =~ /\b0 live processes\b/, output_data.first[:text]
|
187
|
+
_output_status, output_data = CheckPassenger::Check.request_count(options)
|
188
|
+
assert output_data.first[:text] =~ /\b32 requests\b/, output_data.first[:text]
|
148
189
|
|
149
|
-
options = {
|
150
|
-
|
190
|
+
options = {parsed_data: @parsed_data, app_name: 'application_3'}
|
191
|
+
_output_status, output_data = CheckPassenger::Check.process_count(options)
|
151
192
|
assert output_data.first[:text] =~ /\b4 processes\b/, output_data.first[:text]
|
152
|
-
|
193
|
+
_output_status, output_data = CheckPassenger::Check.live_process_count(options)
|
153
194
|
assert output_data.first[:text] =~ /\b0 live processes\b/, output_data.first[:text]
|
195
|
+
_output_status, output_data = CheckPassenger::Check.request_count(options)
|
196
|
+
assert output_data.first[:text] =~ /\b33 requests\b/, output_data.first[:text]
|
154
197
|
end
|
155
198
|
|
156
199
|
it 'raises an alert if the application is not running' do
|
157
|
-
options = {
|
200
|
+
options = {parsed_data: @parsed_data, app_name: 'application_4'}
|
158
201
|
output_status, output_data = CheckPassenger::Check.process_count(options)
|
159
202
|
assert_equal :crit, output_status, output_data.inspect
|
160
203
|
end
|