Sha256: b6ace41f9a4e55cb8b413681fd1b97c1e86fb202268f74c9421cc787018ca21d

Contents?: true

Size: 1.85 KB

Versions: 3

Compression:

Stored size: 1.85 KB

Contents

name 'http transport'

always_start true
ignore_errors true

default[:url] = Kurchatov::Config[:http_transport]
default[:max_size] = 7000
default[:retry] = 3

run_if do
  !!plugin.url
end

helpers do

  def body(events = [])
    { :service => 'service-status',
      :message_type => 'riemann_client_message',
      :message => {:events => events} }.to_json
  end

  def cut_events(events = [])
    events.map {|event| event[:description] = ""}
  end

  # отправляет сообщение с retry
  def send(http_body = "")
    count = 0
    while (count < plugin.retry)
      Log.debug("Send http_body [#{http_body.size}]: #{http_body}")
      _, code = http_post(plugin.url, http_body)
      # если неудачно, пробуем еще раз
      if (code == 0 || code > 300)
        Log.error("Response code: #{code} from #{plugin.url}")
        count+=1
      else
        return
      end
    end
  end

  # отправляем если только размер не превышает максимального
  def safe_send(http_body = "")
    if http_body.size > plugin.max_size
      return false
    end
    send(http_body)
    return true
  end

  # отсылем сообщения
  def safe_send_events(events = [])
    return if (events.nil? || events.size == 0)
    debt_event = []
    until safe_send(body(events))
      if events.size > 1
        debt_event << events.pop
      else
        # одно сообщение не пролазит
        Log.error("Drop message because its too big")
      end
    end
    Log.debug("Ok, #{events.size} events sended, and #{debt_event.size} events in debet")
    safe_send_events(debt_event) if debt_event.size > 0
  end

  def flush
    @events_queue ||= events.to_flush
    safe_send_events(@events_queue) if !@events_queue.nil?
    @events_queue = nil
  end

end

run do
  loop { flush; sleep 1 }
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
kurchatov-0.4.7 lib/kurchatov/responders/http_transport.rb
kurchatov-0.4.6 lib/kurchatov/responders/http_transport.rb
kurchatov-0.4.5 lib/kurchatov/responders/http_transport.rb