class Librato::Metrics::Persistence::Direct
Public Instance Methods
persist(client, queued, options={})
click to toggle source
Persist the queued metrics directly to the Metrics
web API.
# File lib/librato/metrics/persistence/direct.rb, line 11 def persist(client, queued, options={}) per_request = options[:per_request] if per_request requests = chunk_queued(queued, per_request) else requests = [queued] end requests.each do |request| resource = if queued[:gauges] || queued[:counters] "metrics" else "measurements" end payload = SmartJSON.write(request) # expects 200 client.connection.post(resource, payload) end end
Private Instance Methods
build_request(type, metrics, globals)
click to toggle source
# File lib/librato/metrics/persistence/direct.rb, line 54 def build_request(type, metrics, globals) {type => metrics}.merge(globals) end
chunk_queued(queued, per_request)
click to toggle source
# File lib/librato/metrics/persistence/direct.rb, line 33 def chunk_queued(queued, per_request) return [queued] if queue_count(queued) <= per_request reqs = [] # separate metric-containing values from global values globals = fetch_globals(queued) top_level_keys.each do |key| metrics = queued[key] next unless metrics if metrics.size <= per_request # we can fit all of this metric type in a single request reqs << build_request(key, metrics, globals) else # going to have to split things up metrics.each_slice(per_request) do |elements| reqs << build_request(key, elements, globals) end end end reqs end
fetch_globals(queued)
click to toggle source
# File lib/librato/metrics/persistence/direct.rb, line 62 def fetch_globals(queued) queued.reject { |k, v| top_level_keys.include?(k) } end
queue_count(queued)
click to toggle source
# File lib/librato/metrics/persistence/direct.rb, line 66 def queue_count(queued) queued.inject(0) { |result, data| result + data.last.size } end
top_level_keys()
click to toggle source
# File lib/librato/metrics/persistence/direct.rb, line 58 def top_level_keys [Librato::Metrics::PLURAL_TYPES, :measurements].flatten end