Class: Isomorfeus::Puppetmaster::Server
- Inherits:
-
Object
- Object
- Isomorfeus::Puppetmaster::Server
show all
- Defined in:
- lib/isomorfeus/puppetmaster/server.rb,
lib/isomorfeus/puppetmaster/server/checker.rb,
lib/isomorfeus/puppetmaster/server/middleware.rb,
lib/isomorfeus/puppetmaster/server/executor_middleware.rb
Defined Under Namespace
Classes: Checker, ExecutorMiddleware, Middleware, Timer
Instance Attribute Summary collapse
Class Method Summary
collapse
Instance Method Summary
collapse
Constructor Details
#initialize(app, port: Isomorfeus::Puppetmaster.server_port, host: Isomorfeus::Puppetmaster.server_host, extra_middleware: []) ⇒ Server
Returns a new instance of Server.
Instance Attribute Details
#app ⇒ Object
Returns the value of attribute app.
35
36
37
|
# File 'lib/isomorfeus/puppetmaster/server.rb', line 35
def app
@app
end
|
#host ⇒ Object
Returns the value of attribute host.
35
36
37
|
# File 'lib/isomorfeus/puppetmaster/server.rb', line 35
def host
@host
end
|
#port ⇒ Object
Returns the value of attribute port.
35
36
37
|
# File 'lib/isomorfeus/puppetmaster/server.rb', line 35
def port
@port
end
|
Class Method Details
.ports ⇒ Object
30
31
32
|
# File 'lib/isomorfeus/puppetmaster/server.rb', line 30
def ports
@ports ||= {}
end
|
Instance Method Details
#boot ⇒ Object
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
|
# File 'lib/isomorfeus/puppetmaster/server.rb', line 115
def boot
unless responsive?
Isomorfeus::Puppetmaster::Server.ports[port_key] = port
@server_thread = Thread.new do
Isomorfeus::Puppetmaster.server.call(middleware, port, host)
end
timer = Isomorfeus::Puppetmaster::Server::Timer.new(expire_in: 60)
until responsive?
raise 'Rack application timed out during boot' if timer.expired?
@server_thread.join(0.1)
end
end
self
end
|
#error ⇒ Object
61
62
63
|
# File 'lib/isomorfeus/puppetmaster/server.rb', line 61
def error
middleware.error
end
|
#on_server(ruby_source = '', &block) ⇒ Object
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
|
# File 'lib/isomorfeus/puppetmaster/server.rb', line 65
def on_server(ruby_source = '', &block)
ruby_source = Isomorfeus::Puppetmaster.block_source_code(&block) if block_given?
request_hash = { 'key' => @request_key, 'code' => ruby_source }
response = if using_ssl?
http = Net::HTTP.start(@host, @port, { use_ssl: true, verify_mode: OpenSSL::SSL::VERIFY_NONE })
http.post('/__executor__', Oj.dump(request_hash, mode: :strict))
else
http = Net::HTTP.start(@host, @port)
http.post('/__executor__', Oj.dump(request_hash, mode: :strict))
end
if response.code == '200'
result_hash = Oj.load(response.body)
if result_hash.key?('error')
error = RuntimeError.new(result_hash['error'])
error.set_backtrace(result_hash['backtrace'])
raise error
end
result_hash['result']
else
raise 'A error occurred.'
end
end
|
#reset_error! ⇒ Object
57
58
59
|
# File 'lib/isomorfeus/puppetmaster/server.rb', line 57
def reset_error!
middleware.clear_error
end
|
#responsive? ⇒ Boolean
96
97
98
99
100
101
102
103
104
|
# File 'lib/isomorfeus/puppetmaster/server.rb', line 96
def responsive?
return false if @server_thread&.join(0)
res = @checker.request { |http| http.get('/__identify__') }
return res.body == app.object_id.to_s if res.is_a?(Net::HTTPSuccess) || res.is_a?(Net::HTTPRedirection)
rescue SystemCallError, Net::ReadTimeout, OpenSSL::SSL::SSLError
false
end
|
#scheme ⇒ Object
92
93
94
|
# File 'lib/isomorfeus/puppetmaster/server.rb', line 92
def scheme
using_ssl? ? 'https' : 'http'
end
|
#using_ssl? ⇒ Boolean
88
89
90
|
# File 'lib/isomorfeus/puppetmaster/server.rb', line 88
def using_ssl?
@checker.ssl?
end
|
#wait_for_pending_requests ⇒ Object
106
107
108
109
110
111
112
113
|
# File 'lib/isomorfeus/puppetmaster/server.rb', line 106
def wait_for_pending_requests
timer = Isomorfeus::Puppetmaster::Server::Timer.new(expire_in: 60)
while pending_requests?
raise 'Requests did not finish in 60 seconds' if timer.expired?
sleep 0.01
end
end
|