Class: PhusionPassenger::MessageClient
- Inherits:
-
Object
- Object
- PhusionPassenger::MessageClient
show all
- Includes:
- Utils
- Defined in:
- lib/phusion_passenger/message_client.rb
Overview
A convenience class for communicating with MessageServer servers, for example the ApplicationPool server.
Constant Summary
Constants included
from Utils
Utils::NULL
Instance Method Summary
collapse
Methods included from Utils
#connect_to_server, #generate_random_id, #get_socket_address_type, #global_backtrace_report, included, #install_options_as_ivars, #local_socket_address?, mktmpdir, #print_exception, #process_is_alive?, #require_option, #split_by_null_into_hash
Constructor Details
#initialize(username, password, address = "unix:#{Utils.passenger_tmpdir}/socket") ⇒ MessageClient
Connect to the given server. By default it connects to the current generation’s helper server.
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
|
# File 'lib/phusion_passenger/message_client.rb', line 39
def initialize(username, password, address = "unix:#{Utils.passenger_tmpdir}/socket")
@socket = connect_to_server(address)
begin
@channel = MessageChannel.new(@socket)
result = @channel.read
if result.nil?
raise EOFError
elsif result.size != 2 || result[0] != "version"
raise IOError, "The message server didn't sent a valid version identifier"
elsif result[1] != "1"
raise IOError, "Unsupported message server protocol version #{result[1]}"
end
@channel.write_scalar(username)
@channel.write_scalar(password)
result = @channel.read
if result.nil?
raise EOFError
elsif result[0] != "ok"
raise SecurityError, result[0]
end
rescue Exception
@socket.close
raise
end
end
|
Instance Method Details
#check_security_response ⇒ Object
175
176
177
178
179
180
181
182
183
184
185
186
187
|
# File 'lib/phusion_passenger/message_client.rb', line 175
def check_security_response
begin
result = @channel.read
rescue
auto_disconnect
raise
end
if result.nil?
raise EOFError
elsif result[0] != "Passed security"
raise SecurityError, result[0]
end
end
|
68
69
70
71
|
# File 'lib/phusion_passenger/message_client.rb', line 68
def close
@socket.close if @socket
@channel = @socket = nil
end
|
#connected? ⇒ Boolean
73
74
75
|
# File 'lib/phusion_passenger/message_client.rb', line 73
def connected?
return !!@channel
end
|
#helper_agent_backtraces ⇒ Object
HelperAgent BacktracesServer methods ###
124
125
126
127
128
|
# File 'lib/phusion_passenger/message_client.rb', line 124
def helper_agent_backtraces
write("backtraces")
check_security_response
return read_scalar
end
|
#helper_agent_requests ⇒ Object
116
117
118
119
120
|
# File 'lib/phusion_passenger/message_client.rb', line 116
def helper_agent_requests
write("requests")
check_security_response
return read_scalar
end
|
#logging_agent_status ⇒ Object
LoggingAgent AdminServer methods ###
132
133
134
135
136
|
# File 'lib/phusion_passenger/message_client.rb', line 132
def logging_agent_status
write("status")
check_security_response
return read_scalar
end
|
#pool_detach_process(pid) ⇒ Object
79
80
81
82
83
84
85
86
87
88
|
# File 'lib/phusion_passenger/message_client.rb', line 79
def pool_detach_process(pid)
write("detach_process", pid)
check_security_response
result = read
if result.nil?
raise EOFError
else
return result.first == "true"
end
end
|
#pool_detach_process_by_key(detach_key) ⇒ Object
90
91
92
93
94
95
96
97
98
99
|
# File 'lib/phusion_passenger/message_client.rb', line 90
def pool_detach_process_by_key(detach_key)
write("detach_process_by_key", detach_key)
check_security_response
result = read
if result.nil?
raise EOFError
else
return result.first == "true"
end
end
|
#pool_status(options = {}) ⇒ Object
101
102
103
104
105
106
107
108
|
# File 'lib/phusion_passenger/message_client.rb', line 101
def pool_status(options = {})
write("inspect", *options.to_a.flatten)
check_security_response
return read_scalar
rescue
auto_disconnect
raise
end
|
110
111
112
113
114
|
# File 'lib/phusion_passenger/message_client.rb', line 110
def pool_xml
write("toXml", true)
check_security_response
return read_scalar
end
|
Low level I/O methods ###
140
141
142
143
144
145
|
# File 'lib/phusion_passenger/message_client.rb', line 140
def read
return @channel.read
rescue
auto_disconnect
raise
end
|
#read_scalar ⇒ Object
161
162
163
164
165
166
|
# File 'lib/phusion_passenger/message_client.rb', line 161
def read_scalar
return @channel.read_scalar
rescue
auto_disconnect
raise
end
|
#recv_io(klass = IO, negotiate = true) ⇒ Object
168
169
170
171
172
173
|
# File 'lib/phusion_passenger/message_client.rb', line 168
def recv_io(klass = IO, negotiate = true)
return @channel.recv_io(klass, negotiate)
rescue
auto_disconnect
raise
end
|
#write(*args) ⇒ Object
147
148
149
150
151
152
|
# File 'lib/phusion_passenger/message_client.rb', line 147
def write(*args)
@channel.write(*args)
rescue
auto_disconnect
raise
end
|
#write_scalar(*args) ⇒ Object
154
155
156
157
158
159
|
# File 'lib/phusion_passenger/message_client.rb', line 154
def write_scalar(*args)
@channel.write_scalar(*args)
rescue
auto_disconnect
raise
end
|