public void Distribute(IList <Envelope> envelopes, BLQueue.Queue deliveryQueue, DeliveryDetails details, StringBuilder logger) { foreach (var envelope in envelopes.OrderBy(e => e.PostMarkedDateTime)) { if (IsAiringDistributed(envelope, deliveryQueue.Name)) { logger.AppendWithTime(string.Format("Airing {0} already delivered to the queue", envelope.AiringId)); continue; } var message = JsonConvert.SerializeObject(envelope.Message, Formatting.None, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore }); try { Deliver(envelope, message, deliveryQueue.RoutingKey, details); _queueService.AddHistoricalMessage(envelope.AiringId, envelope.MediaId, message, deliveryQueue.Name, envelope.MessagePriority); _reporter.Report(deliveryQueue, envelope.AiringId, envelope.Message.Action != "Delete", string.Format("Sent successfully to {0} Message: {1}", deliveryQueue.FriendlyName, message), 12); UpdateDeliveredTo(envelope, deliveryQueue.Name); logger.AppendWithTime(string.Format("Airing {0} successfully delivered to the queue", envelope.AiringId)); } catch { _reporter.Report(deliveryQueue, envelope.AiringId, envelope.Message.Action != "Delete", string.Format("Failed to send to {0} Message: {1}", deliveryQueue.FriendlyName, message), 4, true); throw; } } }
private List <BLAiring.Airing> ValidateAirings(BLQueue.Queue queue, IEnumerable <BLAiring.Airing> airings) { var validators = LoadValidators(queue); var ignoreAirings = new List <string>(); if (!validators.Any()) { return(airings.ToList()); } var validator = new Validating.AiringValidator(validators); var validAirings = new List <BLAiring.Airing>(); foreach (var airing in airings) { var results = validator.Validate(airing, queue.Name); if (results.All(r => r.Valid)) { validAirings.Add(airing); } else if (results.Any(r => r.IgnoreQueue)) { ignoreAirings.Add(airing.AssetId); } foreach (var result in results.Where(r => !r.Valid && (r.StatusEnum != BIMNOTFOUND && r.StatusEnum != BIMMISMATCH))) { // Append additional useful information string message = "Queue validation error. "; message += result.Message; LogInformation(string.Format("Validation error. {0} - {1}", airing.AssetId, result.Message)); reportStatusCommand.Report(queue, airing.AssetId, true, message, result.StatusEnum, true); } if (queue.BimRequired) { SendBIMStatus(results, airing, queue); } } if (ignoreAirings.Any()) { UpdateIgnoreQueues(queue.Name, ignoreAirings); } return(validAirings); }