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 |