public async Task Entry_FailedToDeliver_MaxRetryReached() { var costUserId = Guid.NewGuid(); var costId = Guid.NewGuid(); var costUser = new CostUser { Email = "*****@*****.**", Id = costUserId }; var data = new Dictionary <string, object>(); data[Constants.ActivityLogData.CostId] = costId; var delivery = new ActivityLogDelivery { RetryCount = MaxRetry, Status = ActivityLogDeliveryStatus.New }; var entry = new ActivityLog { ActivityLogType = ActivityLogType.CostCreated, IpAddress = "127.0.0.1", Data = JsonConvert.SerializeObject(data), Timestamp = DateTime.UtcNow, Created = DateTime.UtcNow, CostUserId = costUserId, CostUser = costUser, ActivityLogDelivery = delivery }; var message = new ActivityLogMessage(); var expected = ActivityLogDeliveryStatus.MaxRetriesReached; await _target.EntryDeliveryFailed(entry, message); entry.ActivityLogDelivery.Status.Should().Be(expected); }
public async void Execute() { Stopwatch sw = new Stopwatch(); sw.Start(); StringBuilder logMessage = new StringBuilder(); try { logMessage.AppendLine("Starting ActivityLogDeliveryJob!"); await _service.UpdateEntriesToProcessing(); var entries = await _service.GetProcessingActivityLogs(); if (entries == null || !entries.Any()) { //not entries to send logMessage.AppendLine("No activity log entries ready for delivery."); } else { List <ActivityLog> successLogs = new List <ActivityLog>(); Dictionary <ActivityLog, ActivityLogMessage> failedLogs = new Dictionary <ActivityLog, ActivityLogMessage>(); foreach (var entry in entries) { ActivityLogMessage message = null; try { entry.ActivityLogDelivery.RetryCount++; logMessage.AppendLine($"Building Activity Log: {entry.Id}"); message = _service.BuildLogMessage(entry); logMessage.AppendLine($"Built Activity Log Message: {message.Message}"); logMessage.AppendLine($"Sending Activity Log: {entry.Id}"); var success = _paperPusherClient.SendMessage(message.Message).Result; if (success) { logMessage.AppendLine($"Successfully sent Activity Log: {entry.Id}"); successLogs.Add(entry); } else { logMessage.AppendLine($"[Warning] Failed to send Activity Log: {entry.Id}"); failedLogs.Add(entry, message); } } catch (Exception ex) { logMessage.AppendLine($"[Error] Failed to send Activity Log: {entry.Id} - {ex}"); failedLogs.Add(entry, message); } } _service.EntriesDeliveredSuccessfully(successLogs); await _service.EntriesDeliveryFailed(failedLogs); } } catch (Exception ex) { logMessage.AppendLine($"[Error] An error occurred whilst executing ActivityLogDeliveryJob. - {ex}"); } finally { sw.Stop(); logMessage.AppendLine($"Finished ActivityLogDeliveryJob! - Effort: {sw.ElapsedMilliseconds}"); Logger.Information(logMessage.ToString()); } }