module Fflux

Constants

VERSION

Public Class Methods

host=(host) click to toggle source
# File lib/fflux.rb, line 31
def host=(host)
  @@host = host
end
port=(port) click to toggle source
# File lib/fflux.rb, line 27
def port=(port)
  @@port = port
end
setup() { |self| ... } click to toggle source
# File lib/fflux.rb, line 23
def setup
  yield self
end
write(measurement, values = {}, tags = {}) click to toggle source
# File lib/fflux.rb, line 11
def write(measurement, values = {}, tags = {})
  Thread.new do
    socket = UDPSocket.new
    socket.send(
      payload(measurement, values, tags),
      0,
      @@host,
      @@port
    )
  end
end

Private Class Methods

escape(value) click to toggle source
# File lib/fflux.rb, line 66
def escape(value)
  value
    .to_s
    .gsub(",", "\,")
    .gsub(" ", "\ ")
    .gsub(/(.)"(.)/, '\1\"\2')
end
fields(values) click to toggle source
# File lib/fflux.rb, line 44
def fields(values)
  format(values, :format_value)
end
format(tags, processor = :escape) click to toggle source
# File lib/fflux.rb, line 74
def format(tags, processor = :escape)
  return unless tags.any?
  tags.map { |k,v| "#{escape(k)}=#{send(processor, v)}" }.join(",")
end
format_value(value) click to toggle source
# File lib/fflux.rb, line 48
def format_value(value)
  case value
  when String
    "\"#{value}\""
  when Fixnum
    "#{value}i"
  else
    value.to_s
  end
end
key(measurement, tags) click to toggle source
# File lib/fflux.rb, line 59
def key(measurement, tags)
  [
    escape(measurement),
    format(tags)
  ].compact.join(",")
end
payload(measurement, values, tags) click to toggle source
# File lib/fflux.rb, line 37
def payload(measurement, values, tags)
  [
    key(measurement, tags),
    fields(values),
  ].compact.join(" ") + "\n"
end