Exemplo n.º 1
0
        private static void QueueEvent(Event evt)
        {
            LineEvent lineEvent = new LineEvent(evt);

            EmailProcessingThread.Push(() =>
            {
                if (!RecentLineEvents.Any())
                {
                    QueryRecentLineEvents();
                }

                List <LineEvent> overlappingLineEvents = QueuedLineEvents
                                                         .Where(queuedLineEvent => lineEvent.Overlaps(queuedLineEvent))
                                                         .ToList();

                if (overlappingLineEvents.Any())
                {
                    QueuedLineEvents.ExceptWith(overlappingLineEvents);
                    lineEvent = overlappingLineEvents.Aggregate(lineEvent, (mergedLineEvent, queuedLineEvent) => mergedLineEvent.Merge(queuedLineEvent));
                }
                else
                {
                    DateTime twoDaysAgo = DateTime.UtcNow.AddDays(-2.0D);

                    if (lineEvent.TimeRange.End > twoDaysAgo)
                    {
                        lineEvent = MergeWithRecentLineEvents(lineEvent);
                    }

                    if (lineEvent.TimeRange.Start < twoDaysAgo)
                    {
                        lineEvent = MergeWithDatabase(lineEvent);
                    }
                }

                if (!QueueLineEvent(lineEvent))
                {
                    GenerateEmail(lineEvent);
                }
            });
        }
Exemplo n.º 2
0
        private static void QueryRecentLineEvents()
        {
            using (AdoDataConnection connection = s_connectionFactory())
            {
                TableOperations <Event> eventTable = new TableOperations <Event>(connection);
                DateTime     twoDaysAgo            = DateTime.UtcNow.AddDays(-2.0D);
                object       twoDaysAgo2           = ToDateTime2(connection, twoDaysAgo);
                List <Event> recentEvents          = eventTable.QueryRecordsWhere("EndTime >= {0}", twoDaysAgo2).ToList();

                foreach (IGrouping <int, Event> grouping in recentEvents.GroupBy(evt => evt.LineID))
                {
                    LineEvent mergedLineEvent = null;

                    foreach (Event evt in grouping)
                    {
                        LineEvent lineEvent = new LineEvent(evt);

                        if ((object)mergedLineEvent == null)
                        {
                            mergedLineEvent = lineEvent;
                        }

                        if (!mergedLineEvent.Overlaps(lineEvent))
                        {
                            RecentLineEvents.Add(mergedLineEvent);
                            mergedLineEvent = lineEvent;
                        }

                        mergedLineEvent = mergedLineEvent.Merge(lineEvent);
                    }

                    RecentLineEvents.Add(mergedLineEvent);
                }
            }

            PurgeOldLineEventsAction.DelayAndExecute(PurgeInterval);
        }