Class: LogStash::Inputs::HttpClient
- Inherits:
-
Base
- Object
- Base
- LogStash::Inputs::HttpClient
- Defined in:
- lib/logstash/inputs/httpclient.rb
Instance Method Summary collapse
-
#arr_avg(arr, cutoff, precision) ⇒ Object
def run.
- #register ⇒ Object
-
#run(queue) ⇒ Object
def register.
Instance Method Details
#arr_avg(arr, cutoff, precision) ⇒ Object
def run
100 101 102 103 104 105 106 107 108 109 |
# File 'lib/logstash/inputs/httpclient.rb', line 100 def arr_avg(arr,cutoff,precision) if(arr.size == 0) return 0 end if(arr.size > cutoff) arr.drop(arr.length-cutoff) #removes from beginning of array end #get the average (arr.inject{ |sum, el| sum + el }.to_f / arr.size).round(precision) end |
#register ⇒ Object
57 58 59 |
# File 'lib/logstash/inputs/httpclient.rb', line 57 def register @uri = URI(@url) end |
#run(queue) ⇒ Object
def register
61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 |
# File 'lib/logstash/inputs/httpclient.rb', line 61 def run(queue) queue_times = Array.new #track an average of how long it's taking to queue events into logstash #::start creates a connection to the HTTP server and keeps it alive for the duration Net::HTTP.start @uri.host, @uri.port, :use_ssl => @uri.scheme == 'https' do |http| Stud.interval(@interval) do begin http_start = Time.now request = Net::HTTP::Get.new(@uri.path) request ["X-Logstash-Avg-Queue-Secs"] = arr_avg(queue_times, 20, 3) response = http.request request # Net::HTTPResponse object http_elapsed = Time.now - http_start rescue => e @logger.warn("Http request failed, will retry", :exception => e) @logger.warn(e.backtrace) sleep(@interval) retry end #event = LogStash::Event.new("message" => response.body) @codec.decode(response.body) do |event| event[@response_object_name] = {} if @include_response_headers event[@response_object_name]["headers"] = response end if @include_response_code event[@response_object_name]["code"] = response.code end if @include_http_request_time event[@response_object_name]["took_secs"] = http_elapsed end decorate(event) queue_start = Time.now queue << event queue_elapsed = Time.now - http_start queue_times.push queue_elapsed end end #interval loop end #HTTP keepalive end |