Exemplo n.º 1
0
 public void Warn(string message, string source = null)
 {
     try {
         _log.Warn(message, source);
     } catch (Exception ex) {
         try {
             _fallbackLog.Error("Error writing to log.", null, ex);
             _fallbackLog.Warn(message, source);
         } catch {}
     }
 }
Exemplo n.º 2
0
        public void Process()
        {
            if (!_config.Enabled)
            {
                _log.Info(typeof(DefaultEventQueue), "Configuration is disabled. The queue will not be processed.");
                return;
            }

            if (_processingQueue)
            {
                return;
            }

            _processingQueue = true;

            try {
                _log.Trace(typeof(DefaultEventQueue), "Processing queue...");
                _storage.CleanupQueueFiles(_config.GetQueueName(), _config.QueueMaxAge, _config.QueueMaxAttempts);
                _storage.ReleaseStaleLocks(_config.GetQueueName());

                DateTime maxCreatedDate = DateTime.Now;
                int      batchSize      = _config.SubmissionBatchSize;
                var      batch          = _storage.GetEventBatch(_config.GetQueueName(), _serializer, batchSize, maxCreatedDate);
                while (batch.Any())
                {
                    bool deleteBatch = true;

                    try {
                        var events   = batch.Select(b => b.Item2).ToList();
                        var response = _client.PostEvents(events, _config, _serializer);
                        if (response.Success)
                        {
                            _log.FormattedInfo(typeof(DefaultEventQueue), "Sent {0} events to \"{1}\".", batch.Count, _config.ServerUrl);
                        }
                        else if (response.ServiceUnavailable)
                        {
                            // You are currently over your rate limit or the servers are under stress.
                            _log.Error(typeof(DefaultEventQueue), "Server returned service unavailable.");
                            SuspendProcessing();
                            deleteBatch = false;
                        }
                        else if (response.PaymentRequired)
                        {
                            // If the organization over the rate limit then discard the event.
                            _log.Warn(typeof(DefaultEventQueue), "Too many events have been submitted, please upgrade your plan.");
                            SuspendProcessing(discardFutureQueuedItems: true, clearQueue: true);
                        }
                        else if (response.UnableToAuthenticate)
                        {
                            // The api key was suspended or could not be authorized.
                            _log.Error(typeof(DefaultEventQueue), "Unable to authenticate, please check your configuration. The event will not be submitted.");
                            SuspendProcessing(TimeSpan.FromMinutes(15));
                        }
                        else if (response.NotFound || response.BadRequest)
                        {
                            // The service end point could not be found.
                            _log.FormattedError(typeof(DefaultEventQueue), "Error while trying to submit data: {0}", response.Message);
                            SuspendProcessing(TimeSpan.FromHours(4));
                        }
                        else if (response.RequestEntityTooLarge)
                        {
                            if (batchSize > 1)
                            {
                                _log.Error(typeof(DefaultEventQueue), "Event submission discarded for being too large. The event will be retried with a smaller batch size.");
                                batchSize   = Math.Max(1, (int)Math.Round(batchSize / 1.5d, 0));
                                deleteBatch = false;
                            }
                            else
                            {
                                _log.Error(typeof(DefaultEventQueue), "Event submission discarded for being too large. The event will not be submitted.");
                            }
                        }
                        else if (!response.Success)
                        {
                            _log.Error(typeof(DefaultEventQueue), String.Concat("An error occurred while submitting events: ", response.Message));
                            SuspendProcessing();
                            deleteBatch = false;
                        }

                        OnEventsPosted(new EventsPostedEventArgs {
                            Events = events, Response = response
                        });
                    } catch (AggregateException ex) {
                        _log.Error(typeof(DefaultEventQueue), ex, String.Concat("An error occurred while submitting events: ", ex.Flatten().Message));
                        SuspendProcessing();
                        deleteBatch = false;
                    } catch (Exception ex) {
                        _log.Error(typeof(DefaultEventQueue), ex, String.Concat("An error occurred while submitting events: ", ex.Message));
                        SuspendProcessing();
                        deleteBatch = false;
                    }

                    if (deleteBatch)
                    {
                        _storage.DeleteBatch(batch);
                    }
                    else
                    {
                        _storage.ReleaseBatch(batch);
                    }

                    if (!deleteBatch || IsQueueProcessingSuspended)
                    {
                        break;
                    }

                    batch = _storage.GetEventBatch(_config.GetQueueName(), _serializer, batchSize, maxCreatedDate);
                }
            } catch (Exception ex) {
                _log.Error(typeof(DefaultEventQueue), ex, String.Concat("An error occurred while processing the queue: ", ex.Message));
                SuspendProcessing();
            } finally {
                _processingQueue = false;
            }
        }
 public static void FormattedWarn(this IExceptionlessLog log, string format, params object[] args)
 {
     log.Warn(String.Format(format, args));
 }
 public static void FormattedWarn(this IExceptionlessLog log, Type source, string format, params object[] args)
 {
     log.Warn(String.Format(format, args), GetSourceName(source));
 }
 public static void Warn(this IExceptionlessLog log, Type source, string message)
 {
     log.Warn(message, GetSourceName(source));
 }