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
109 110 111 112 113 114 115 116 117 118 |
# File 'lib/logstash/inputs/httpclient.rb', line 109 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 99 100 101 102 103 104 105 106 107 |
# 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| while true begin sleepIval = @interval begin http_start = Time.now request = Net::HTTP::Get.new(@uri.request_uri) 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(sleepIval) retry end if response["X-More-Events-Available"] == "true" sleepIval = 0 #don't wait if the server indicated there are more events ready now end @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 - queue_start queue_times.push queue_elapsed end ensure sleep(@interval) end end #interval loop end #HTTP keepalive end |