35
36
37
38
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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
|
# File 'lib/webash.rb', line 35
def self.run(config_file)
puts "Starting Webash"
configure(config_file)
@server = WEBrick::HTTPServer.new :Port => nil, :DoNotListen => true, :Logger => WEBrick::Log.new("/dev/null")
trap 'INT' do @server.shutdown end
@config["listeners"].each do |listener, listener_config|
puts "Listening on #{listener}"
@server.listen("0.0.0.0", listener)
vhost = WEBrick::HTTPServer.new :Port => listener, :DoNotListen => true, :ServerName => nil, :Logger => WEBrick::Log.new("/dev/null")
listener_config.each do |url_config|
puts "Registering #{url_config["url"]} on #{listener}"
vhost.mount_proc url_config["url"] do |req, res|
export_params = []
req.query.each do |key, value|
export_params.push("export #{key}=#{value}")
end
if export_params.any?
export_string = export_params.join(";") + ";"
else
export_string = ""
end
res.body = %x(#{export_string} #{url_config["command"]})
exit_code = $?.exitstatus
if url_config["exit_codes"]
http_code = url_config["exit_codes"].select do |http_status, codes|
codes.include?(exit_code)
end.keys.first
else
http_code = nil
end
if http_code
res.status = http_code
else
if exit_code == 0
res.status = 200
else
res.status = 503
end
end
end
end
@server.virtual_host vhost
end
@server.start
end
|