Beispiel #1
0
        /// <summary>
        /// This method retreives all queue items in a specific helpdesk from the database
        /// </summary>
        /// <param name="id">ID of the helpdesk to retrieve queue items from</param>
        /// <returns>A list of the queue items</returns>
        public List <QueueItemDTO> GetQueueItemsByHelpdeskID(int id)
        {
            List <QueueItemDTO> queueItemDTOs = new List <QueueItemDTO>();

            using (helpdesksystemContext context = new helpdesksystemContext())
            {
                var unitIDs    = context.Helpdeskunit.Include("Helpdeskunit").Where(hu => hu.HelpdeskId == id).Select(u => u.UnitId);
                var topicIDs   = context.Topic.Where(t => unitIDs.Contains(t.UnitId)).Select(ti => ti.TopicId).ToList();
                var queueItems = context.Queueitem.Include("Topic.Unit").Include("Student").Where(qi => topicIDs.Contains(qi.TopicId)).ToList();

                foreach (Queueitem queueItem in queueItems)
                {
                    // Only get queueItems that haven't been removed yet.
                    if (queueItem.TimeRemoved == null)
                    {
                        QueueItemDTO queueItemDTO = DAO2DTO(queueItem);
                        var          checkIn      = context.Checkinqueueitem.Where(ch => ch.QueueItemId == queueItem.ItemId).FirstOrDefault();

                        if (checkIn != null)
                        {
                            queueItemDTO.CheckInId = checkIn.CheckInId;
                        }
                        queueItemDTOs.Add(queueItemDTO);
                    }
                }
            }
            return(queueItemDTOs);
        }
        public void RegisterQueueItemProgress(QueueEventType eventType, QueueItemDTO latestItem)
        {
            QueueEventLogDTO eventLogItem = new QueueEventLogDTO
            {
                Message           = string.Format("Queue Data Item {0} is {1}", latestItem.BadgeAwardId, eventType.ToString()),
                QueueEventCreated = DateTime.Now,
                QueueEventId      = (int)eventType,
                BadgeAwardId      = latestItem.BadgeAwardId
            };

            _queueEventLogDAL.Add(eventLogItem);
        }
Beispiel #3
0
        public QueueItemDTO Add(QueueItemDTO item)
        {
            using (Entities context = new Entities())
            {
                QueueItem addedItem = context.QueueItems.Add(new QueueItem
                {
                    BadgeAwardId     = item.BadgeAwardId,
                    QueueItemCreated = DateTime.Now
                });

                context.SaveChanges();

                return(new QueueItemDTO(addedItem.QueueItemId, addedItem.BadgeAwardId, addedItem.QueueItemCreated));
            }
        }
Beispiel #4
0
        /// <summary>
        /// Converts the queue item DTO to a DAO to interact with the database
        /// </summary>
        /// <param name="queueItemDTO">The DTO for the queue item</param>
        /// <returns>The DAO for the queue item</returns>
        private Queueitem DTO2DAO(QueueItemDTO queueItemDTO)
        {
            Queueitem queueItem = new Queueitem
            {
                ItemId      = queueItemDTO.ItemId,
                StudentId   = queueItemDTO.StudentId,
                TopicId     = queueItemDTO.TopicId,
                Description = queueItemDTO.Description,
                TimeAdded   = queueItemDTO.TimeAdded,
                TimeHelped  = queueItemDTO.TimeHelped,
                TimeRemoved = queueItemDTO.TimeRemoved
            };

            return(queueItem);
        }
Beispiel #5
0
        public void TestAdd()
        {
            ExecuteWithTransaction(() =>
            {
                IQueueItemDAL queueItemDAL = IoC.Container.Resolve <IQueueItemDAL>();

                QueueItemDTO queueItem = new QueueItemDTO
                {
                    BadgeAwardId = 1
                };

                QueueItemDTO addedItem = queueItemDAL.Add(queueItem);

                Assert.IsTrue(addedItem.QueueItemId > 0);
            });
        }
Beispiel #6
0
        /// <summary>
        /// Converts the queue item DAO to a DTO to send to the front end
        /// </summary>
        /// <param name="queueItem">The DAO for the queue item</param>
        /// <returns>The DTO for the queue item</returns>
        private QueueItemDTO DAO2DTO(Queueitem queueItem)
        {
            QueueItemDTO queueItemDTO = null;

            queueItemDTO             = new QueueItemDTO();
            queueItemDTO.ItemId      = queueItem.ItemId;
            queueItemDTO.StudentId   = queueItem.StudentId;
            queueItemDTO.Nickname    = queueItem.Student.NickName;
            queueItemDTO.TopicId     = queueItem.TopicId;
            queueItemDTO.Topic       = queueItem.Topic.Name;
            queueItemDTO.Unit        = queueItem.Topic.Unit.Name;
            queueItemDTO.TimeAdded   = queueItem.TimeAdded;
            queueItemDTO.TimeHelped  = queueItem.TimeHelped;
            queueItemDTO.TimeRemoved = queueItem.TimeRemoved;
            queueItemDTO.Description = queueItem.Description;

            return(queueItemDTO);
        }
Beispiel #7
0
        public QueueItemDTO Update(QueueItemDTO item)
        {
            using (Entities context = new Entities())
            {
                QueueItem itemToUpdate = new QueueItem
                {
                    QueueItemId      = item.QueueItemId,
                    BadgeAwardId     = item.BadgeAwardId,
                    QueueItemCreated = item.QueueItemCreated
                };

                context.QueueItems.Attach(itemToUpdate);
                context.Entry(itemToUpdate).State = System.Data.Entity.EntityState.Modified;

                context.SaveChanges();

                return(Get(item.QueueItemId));
            }
        }
Beispiel #8
0
        private static QueueEventLogDTO AddQueueEventLogRecord(IQueueEventLogDAL queueEventLogDAL, IQueueItemDAL queueItemDAL)
        {
            //Grab the top item
            QueueItemDTO queueItemDTO = queueItemDAL.Peek();

            Assert.IsNotNull(queueItemDTO);

            QueueEventLogDTO queueEventLogItem = new QueueEventLogDTO
            {
                Message           = "Test Message",
                QueueEventCreated = DateTime.Now,
                QueueEventId      = 1,
                BadgeAwardId      = queueItemDTO.QueueItemId
            };

            QueueEventLogDTO addedItem = queueEventLogDAL.Add(queueEventLogItem);

            return(addedItem);
        }
        /// <summary>
        /// This method runs the queue process
        /// </summary>
        public void Start()
        {
            var consecutiveErrorCount = 0;

            Logger.Info <QueueProcessor>("The Queue Processor was started");

            while (true)
            {
                try
                {
                    QueueItemDTO latestItem = _queueItemDAL.Peek();

                    if (latestItem != null)
                    {
                        Logger.InfoFormat <QueueProcessor>("Processor peeked item with QueueItemId: {0} and BadgeAwardId: {1}, processing...",
                                                           latestItem.QueueItemId,
                                                           latestItem.BadgeAwardId);

                        _itemProcessor.ProcessItem(latestItem);
                    }
                    else
                    {
                        Logger.InfoFormat <QueueProcessor>("No items found in the queue, sleeping for {0} seconds", SleepInterval / 1000);

                        Thread.Sleep(SleepInterval);
                    }
                    consecutiveErrorCount = 0;
                }
                catch (Exception ex)
                {
                    Logger.Error <QueueProcessor>(ex.Message, ex);
                    consecutiveErrorCount++;
                    if (consecutiveErrorCount >= 5)
                    {
                        //Continuous logging of an error in a tight loop is bad, go to sleep and see if the system
                        //recovers
                        Logger.InfoFormat <QueueProcessor>("Queue processor consecutive error limit exceeded, sleeping for {0} seconds", ErrorSleepInterval / 1000);
                        Thread.Sleep(ErrorSleepInterval);
                    }
                }
            }
        }
        public void ProcessItem(QueueItemDTO latestItem)
        {
            try
            {
                EarnedBadgeItemDTO earnedBadge = _earnedBadgeDAL.GetEarnedBadge(latestItem.BadgeAwardId);

                RegisterQueueItemProgress(QueueEventType.Processing, latestItem);

                PublishUpdates(earnedBadge);

                _queueItemDAL.Delete(latestItem.QueueItemId);

                RegisterQueueItemProgress(QueueEventType.Processed, latestItem);
            }
            catch
            {
                RegisterQueueItemProgress(QueueEventType.Failed, latestItem);
                throw;
            }
        }