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))); }
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)); }); } }