Class: LogStash::WebServer
- Inherits:
-
Object
- Object
- LogStash::WebServer
- Extended by:
- Forwardable
- Defined in:
- lib/logstash/webserver.rb
Constant Summary collapse
- DEFAULT_HOST =
"127.0.0.1".freeze
- DEFAULT_PORTS =
(9600..9700).freeze
- DEFAULT_ENVIRONMENT =
'production'.freeze
Instance Attribute Summary collapse
-
#agent ⇒ Object
readonly
Returns the value of attribute agent.
-
#binder ⇒ Object
readonly
Returns the value of attribute binder.
-
#config ⇒ Object
readonly
Returns the value of attribute config.
-
#events ⇒ Object
readonly
Returns the value of attribute events.
-
#http_environment ⇒ Object
readonly
Returns the value of attribute http_environment.
-
#http_host ⇒ Object
readonly
Returns the value of attribute http_host.
-
#http_ports ⇒ Object
readonly
Returns the value of attribute http_ports.
-
#logger ⇒ Object
readonly
Returns the value of attribute logger.
-
#options ⇒ Object
readonly
Returns the value of attribute options.
-
#runner ⇒ Object
readonly
Returns the value of attribute runner.
-
#status ⇒ Object
readonly
Returns the value of attribute status.
Instance Method Summary collapse
- #address ⇒ Object
-
#initialize(logger, agent, options = {}) ⇒ WebServer
constructor
A new instance of WebServer.
- #run ⇒ Object
- #running! ⇒ Object
- #running? ⇒ Boolean
- #start_webserver(port) ⇒ Object
- #stop(options = {}) ⇒ Object
Constructor Details
#initialize(logger, agent, options = {}) ⇒ WebServer
Returns a new instance of WebServer.
21 22 23 24 25 26 27 28 29 30 |
# File 'lib/logstash/webserver.rb', line 21 def initialize(logger, agent, ={}) @logger = logger @agent = agent @http_host = [:http_host] || DEFAULT_HOST @http_ports = [:http_ports] || DEFAULT_PORTS @http_environment = [:http_environment] || DEFAULT_ENVIRONMENT @options = {} @status = nil @running = Concurrent::AtomicBoolean.new(false) end |
Instance Attribute Details
#agent ⇒ Object (readonly)
Returns the value of attribute agent.
13 14 15 |
# File 'lib/logstash/webserver.rb', line 13 def agent @agent end |
#binder ⇒ Object (readonly)
Returns the value of attribute binder.
13 14 15 |
# File 'lib/logstash/webserver.rb', line 13 def binder @binder end |
#config ⇒ Object (readonly)
Returns the value of attribute config.
13 14 15 |
# File 'lib/logstash/webserver.rb', line 13 def config @config end |
#events ⇒ Object (readonly)
Returns the value of attribute events.
13 14 15 |
# File 'lib/logstash/webserver.rb', line 13 def events @events end |
#http_environment ⇒ Object (readonly)
Returns the value of attribute http_environment.
13 14 15 |
# File 'lib/logstash/webserver.rb', line 13 def http_environment @http_environment end |
#http_host ⇒ Object (readonly)
Returns the value of attribute http_host.
13 14 15 |
# File 'lib/logstash/webserver.rb', line 13 def http_host @http_host end |
#http_ports ⇒ Object (readonly)
Returns the value of attribute http_ports.
13 14 15 |
# File 'lib/logstash/webserver.rb', line 13 def http_ports @http_ports end |
#logger ⇒ Object (readonly)
Returns the value of attribute logger.
13 14 15 |
# File 'lib/logstash/webserver.rb', line 13 def logger @logger end |
#options ⇒ Object (readonly)
Returns the value of attribute options.
13 14 15 |
# File 'lib/logstash/webserver.rb', line 13 def @options end |
#runner ⇒ Object (readonly)
Returns the value of attribute runner.
13 14 15 |
# File 'lib/logstash/webserver.rb', line 13 def runner @runner end |
#status ⇒ Object (readonly)
Returns the value of attribute status.
13 14 15 |
# File 'lib/logstash/webserver.rb', line 13 def status @status end |
Instance Method Details
#address ⇒ Object
66 67 68 |
# File 'lib/logstash/webserver.rb', line 66 def address "#{http_host}:#{@port}" end |
#run ⇒ Object
32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
# File 'lib/logstash/webserver.rb', line 32 def run logger.debug("Starting puma") stop # Just in case running! http_ports.each_with_index do |port, idx| begin if running? @port = port logger.debug("Trying to start WebServer", :port => @port) start_webserver(@port) else break # we are closing down the server so just get out of the loop end rescue Errno::EADDRINUSE if http_ports.count == 1 raise Errno::EADDRINUSE.new(I18n.t("logstash.web_api.cant_bind_to_port", :port => http_ports.first)) elsif idx == http_ports.count-1 raise Errno::EADDRINUSE.new(I18n.t("logstash.web_api.cant_bind_to_port_in_range", :http_ports => http_ports)) end end end end |
#running! ⇒ Object
58 59 60 |
# File 'lib/logstash/webserver.rb', line 58 def running! @running.make_true end |
#running? ⇒ Boolean
62 63 64 |
# File 'lib/logstash/webserver.rb', line 62 def running? @running.value end |
#start_webserver(port) ⇒ Object
75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 |
# File 'lib/logstash/webserver.rb', line 75 def start_webserver(port) # wrap any output that puma could generate into a wrapped logger # use the puma namespace to override STDERR, STDOUT in that scope. Puma::STDERR.logger = logger Puma::STDOUT.logger = logger io_wrapped_logger = LogStash::IOWrappedLogger.new(logger) app = LogStash::Api::RackApp.app(logger, agent, http_environment) events = ::Puma::Events.new(io_wrapped_logger, io_wrapped_logger) @server = ::Puma::Server.new(app, events) @server.add_tcp_listener(http_host, port) logger.info("Successfully started Logstash API endpoint", :port => port) set_http_address_metric("#{http_host}:#{port}") @server.run.join end |
#stop(options = {}) ⇒ Object
70 71 72 73 |
# File 'lib/logstash/webserver.rb', line 70 def stop(={}) @running.make_false @server.stop(true) if @server end |