Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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);
            }
        }
Exemplo n.º 3
0
        /// <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;
            }
        }