public bool Send(IEnumerable<string> metrics)
{
var data = EventArgsPool.Pop();
//firehose alert! -- keep it moving!
if (null == data)
{
return false;
}
try
{
data.RemoteEndPoint = GetIPEndPoint();
data.SendPacketsElements = metrics.ToMaximumBytePackets()
.Select(bytes => new SendPacketsElement(bytes, 0, bytes.Length, true))
.ToArray();
using (var udpClient = GetUdpClient())
{
udpClient.Client.Connect(data.RemoteEndPoint);
udpClient.Client.SendPacketsAsync(data);
}
Trace.TraceInformation("statsd: {0}", string.Join(",", metrics));
return true;
}
//fire and forget, so just eat intermittent failures / exceptions
catch (Exception e)
{
Trace.TraceError("General Exception when sending metric data to statsD :- Message : {0}, Inner Exception {1}, StackTrace {2}.", e.Message, e.InnerException, e.StackTrace);
}
return false;
}