class AppsignalPumaPlugin::Statsd
def gauge(metric_name, value, tags)
def gauge(metric_name, value, tags) send_metric "g", metric_name, value, tags end
def initialize
def initialize # StatsD server location as configured in AppSignal agent StatsD server. @host = "127.0.0.1" @port = ENV.fetch("APPSIGNAL_STATSD_PORT", 8125) end
def send_metric(type, metric_name, metric_value, tags_hash)
def send_metric(type, metric_name, metric_value, tags_hash) tags = tags_hash.map { |key, value| "#{key}:#{value}" }.join(",") data = "#{metric_name}:#{metric_value}|#{type}|##{tags}" # Open (and close) a new socket every time because we don't know when the # plugin will exit and when to cleanly close the socket connection. socket = UDPSocket.new socket.send(data, 0, host, port) ensure socket&.close end