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;
                }
            }
        }
Exemple #2
0
        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);
        }