class BaselineRedRpm::Reporters::JsonClient
Attributes
sample_memory[RW]
Public Class Methods
new(opts = { :url => nil, :collector => nil, :flush_interval => nil })
click to toggle source
# File lib/baseline_red_rpm/reporters/json_client.rb, line 13 def initialize(opts = { :url => nil, :collector => nil, :flush_interval => nil }) @collector = opts[:collector] @flush_interval = opts[:flush_interval] @spans_uri = URI.parse(opts[:url]) end
Public Instance Methods
start()
click to toggle source
# File lib/baseline_red_rpm/reporters/json_client.rb, line 19 def start @thread = Thread.new do loop do memory_stats = MemoryProfiler.stop emit_batch(@collector.retrieve, memory_stats) start_memory_profiler sleep @flush_interval end end end
stop()
click to toggle source
# File lib/baseline_red_rpm/reporters/json_client.rb, line 32 def stop @thread.terminate if @thread emit_batch(@collector.retrieve) end
Private Instance Methods
compress_body(data, memory_stats)
click to toggle source
# File lib/baseline_red_rpm/reporters/json_client.rb, line 46 def compress_body(data, memory_stats) body = MessagePack.pack({ "name" => BaselineRedRpm.config.application_name, "host" => BaselineRedRpm.host, "memory_stats" => memory_stats, "data" => data }) compressed_body = Zlib::Deflate.deflate(body, Zlib::DEFAULT_COMPRESSION) Base64.encode64(compressed_body) end
emit_batch(spans, memory_stats)
click to toggle source
# File lib/baseline_red_rpm/reporters/json_client.rb, line 58 def emit_batch(spans, memory_stats) return if spans.empty? sock = Net::HTTP.new(@spans_uri.host, @spans_uri.port) sock.use_ssl = ::BaselineRedRpm.config.ssl request = Net::HTTP::Post.new(@spans_uri.request_uri, { "Accept-Encoding" => "gzip", "User-Agent" => "gzip" }) request.body = compress_body(spans, memory_stats) request.content_type = "application/octet-stream" response = sock.start do |http| http.read_timeout = 30 http.request(request) end if response.code != 202 STDERR.puts(response.body) elsif response.code == 200 json = JSON.parse(response.body) BaselineRedRpm.config.sample_memory = json['sample_memory'].present? ? Time.parse(json['sample_memory']) : nil end rescue => e STDERR.puts("Error emitting spans batch: #{e.message}\n#{e.backtrace.join("\n")}") end
start_memory_profiler()
click to toggle source
# File lib/baseline_red_rpm/reporters/json_client.rb, line 39 def start_memory_profiler return unless BaselineRedRpm.config.sample_memory if Time.now.utc - BaselineRedRpm.config.sample_memory < 5.minutes MemoryProfiler.start end end