/// <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); }
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)); } }
/// <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); }
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); }); }
/// <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); }
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)); } }
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; } }