class Metriks::Sematext::Reporter
Public Class Methods
new(options = {})
click to toggle source
# File lib/metriks/sematext.rb, line 22 def initialize(options = {}) @client = options[:client] @client ||= ::Sematext::Metrics::Client.sync(options[:token]) @interval = options[:interval] || 60 @registry = options[:registry] || Metriks::Registry.default @on_error = options[:on_error] || proc { |ex| } end
Public Instance Methods
restart()
click to toggle source
# File lib/metriks/sematext.rb, line 51 def restart stop start end
start()
click to toggle source
# File lib/metriks/sematext.rb, line 30 def start @tread ||= Thread.new do loop do sleep @interval Thread.new do begin write rescue Exception => ex @on_error[ex] rescue nil end end end end end
stop()
click to toggle source
# File lib/metriks/sematext.rb, line 46 def stop @thread.kill if @thread @thread = nil end
write()
click to toggle source
# File lib/metriks/sematext.rb, line 56 def write datapoints = [] @registry.each do |name, metric| datapoints += case metric when Metriks::Counter [ create_datapoints(name, metric, [:count], [:min, :max, :avg]) ] when Metriks::Meter [ create_datapoints(name, metric, [:count], [:avg], :count), create_datapoints(name, metric, [:mean_rate], [:avg], :rate) ] when Metriks::UtilizationTimer [ create_datapoints(name, metric, [:min], [:min]), create_datapoints(name, metric, [:max], [:max]), create_datapoints(name, metric, [:mean], [:avg], :time), create_datapoints(name, metric, [:mean_rate], [:avg], :rate), create_datapoints(name, metric, [ :mean_utilization ], [:avg], :utilization) ] when Metriks::Histogram [ create_datapoints(name, metric, [:min], [:min]), create_datapoints(name, metric, [:max], [:max]), create_datapoints(name, metric, [:mean], [:avg]), ] when Metriks::Timer [ create_datapoints(name, metric, [:min], [:min]), create_datapoints(name, metric, [:max], [:max]), create_datapoints(name, metric, [:mean], [:avg], :time), create_datapoints(name, metric, [:mean_rate], [:avg], :rate) ] end end datapoints.flatten! results = @client.send_batch datapoints results.each do |result| raise "Sending failed: #{result[:response]}" unless result[:status] == :succeed end if results end
Private Instance Methods
create_datapoints(name, metric, keys, agg_types, type = nil)
click to toggle source
# File lib/metriks/sematext.rb, line 104 def create_datapoints(name, metric, keys, agg_types, type = nil) datapoints = [] keys.each do |key| agg_types.each do |agg_type| datapoint = { :name => name, :value => metric.send(key), :agg_type => agg_type, :filter1 => "aggregation=#{agg_type}" } datapoint[:filter2] = "type=#{type}" if type datapoints << datapoint end end datapoints end