public bool Send(IEnumerable <string> metrics) { var data = EventArgsPool.Pop(); //firehose alert! -- keep it moving! if (null == data) { return(false); } try { data.RemoteEndPoint = _ipBasedEndpoint ?? _endPointMapper.GetIPEndPoint(_hostNameOrAddress, _port); //only DNS resolve if we were given a hostname data.SendPacketsElements = metrics.ToMaximumBytePackets() .Select(bytes => new SendPacketsElement(bytes, 0, bytes.Length, true)) .ToArray(); using (var udpClient = GetUdpClient()) { 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); }
public void Send(IEnumerable <string> metrics) { var data = EventArgsPool.Pop(); //firehose alert! -- keep it moving! if (data == null) { return; } data.RemoteEndPoint = _endpointSource.GetEndpoint(); 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); } }
/// <summary> /// Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. /// </summary> /// <param name="disposing"> /// <see langword="true" /> to release both managed and unmanaged resources; /// <see langword="false" /> to release only unmanaged resources. /// </param> private void Dispose(bool disposing) { if (!_disposed) { try { while (_socketPool.Count > 0) { var socket = _socketPool.Pop(); socket?.Dispose(); } } catch (ObjectDisposedException) { // If the pool has already been disposed by the finalizer, ignore the exception if (disposing) { throw; } } _disposed = true; } }