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