class Datadog::Statsd::Connection
Attributes
logger[R]
telemetry[R]
Public Class Methods
new(telemetry: nil, logger: nil)
click to toggle source
# File lib/datadog/statsd/connection.rb, line 6 def initialize(telemetry: nil, logger: nil) @telemetry = telemetry @logger = logger end
Public Instance Methods
reset_telemetry()
click to toggle source
# File lib/datadog/statsd/connection.rb, line 11 def reset_telemetry telemetry.reset if telemetry end
write(payload)
click to toggle source
not thread safe: ‘Sender` instances that use this are required to properly synchronize or sequence calls to this method
# File lib/datadog/statsd/connection.rb, line 16 def write(payload) logger.debug { "Statsd: #{payload}" } if logger send_message(payload) telemetry.sent(packets: 1, bytes: payload.length) if telemetry true rescue StandardError => boom # Try once to reconnect if the socket has been closed retries ||= 1 if retries <= 1 && (boom.is_a?(Errno::ENOTCONN) or boom.is_a?(Errno::ECONNREFUSED) or boom.is_a?(IOError) && boom.message =~ /closed stream/i) retries += 1 begin close connect retry rescue StandardError => e boom = e end end telemetry.dropped_writer(packets: 1, bytes: payload.length) if telemetry logger.error { "Statsd: #{boom.class} #{boom}" } if logger nil end
Private Instance Methods
close()
click to toggle source
# File lib/datadog/statsd/connection.rb, line 55 def close raise 'Should be implemented by subclass' end
connect()
click to toggle source
# File lib/datadog/statsd/connection.rb, line 51 def connect raise 'Should be implemented by subclass' end