예제 #1
0
 public void SetUp()
 {
     _bulkSender = Substitute.For <IBulkSender>();
     _target     = new Shipper(_bulkSender, Substitute.For <IInternalLogger>());
     _bulkSender.SendAsync(Arg.Any <ICollection <LogzioLoggingEvent> >(), Arg.Any <BulkSenderOptions>()).Returns(x => Task.FromResult(new HttpResponseMessage(System.Net.HttpStatusCode.OK)));
 }
예제 #2
0
        private void SendLogs(ShipperOptions options, bool flush = false)
        {
            lock (_sendLogsLocker)
            {
                if (_sendLogsTask != null && !_sendLogsTask.IsCompleted)
                {
                    return;
                }

                _sendLogsTask = Task.Run(async() =>
                {
                    do
                    {
                        _timeoutReached = false;
                        var logz        = new List <LogzioLoggingEvent>();
                        for (var i = 0; i < options.BufferSize; i++)
                        {
                            LogzioLoggingEvent log;
                            if (!_queue.TryDequeue(out log))
                            {
                                break;
                            }

                            logz.Add(log);
                        }
                        if (options.Debug)
                        {
                            _internalLogger.Log("Logz.io: Sending [{0}] logs ([{1}] in queue)...", logz.Count, _queue.Count);
                        }

                        if (logz.Count > 0)
                        {
                            int i = 0;
                            do
                            {
                                try
                                {
                                    using (var response = await _bulkSender.SendAsync(logz, options.BulkSenderOptions).ConfigureAwait(false))
                                    {
                                        if (response.IsSuccessStatusCode)
                                        {
                                            break;
                                        }

                                        if (options.Debug)
                                        {
                                            _internalLogger.Log("Logz.io: Failed: " + response.StatusCode);
                                        }
                                    }
                                }
                                catch (Exception ex)
                                {
                                    _internalLogger.Log(ex, "Logz.io: ERROR");
                                }

                                await Task.Delay(options.BulkSenderOptions.RetriesInterval).ConfigureAwait(false);
                            } while (++i < options.BulkSenderOptions.RetriesMaxAttempts);
                        }

                        if (options.Debug)
                        {
                            _internalLogger.Log("Logz.io: Sent logs. [{0}] in queue.", _queue.Count);
                        }
                    } while (_queue.Count >= options.BufferSize || ((_timeoutReached || flush) && !_queue.IsEmpty));
                });
            }
        }