Class: LogStash::Inputs::HttpClient

Inherits:
Base
  • Object
show all
Defined in:
lib/logstash/inputs/httpclient.rb

Instance Method Summary collapse

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

#registerObject



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