diff --git a/MOE.Common/Business/ControllerEventLogs.cs b/MOE.Common/Business/ControllerEventLogs.cs index f2fbd593..5b99a21d 100644 --- a/MOE.Common/Business/ControllerEventLogs.cs +++ b/MOE.Common/Business/ControllerEventLogs.cs @@ -7,7 +7,11 @@ namespace MOE.Common.Business { public class ControllerEventLogs { - private readonly SPM _db = new SPM(); + public string SignalId { get; } + public DateTime StartDate { get; protected set; } + public DateTime EndDate { get; protected set; } + public List EventCodes { get; } + public List Events { get; set; } public ControllerEventLogs(string signalId, DateTime startDate, DateTime endDate) { @@ -30,12 +34,9 @@ public ControllerEventLogs(string signalID, DateTime startDate, DateTime endDate EndDate = endDate; EventCodes = eventCodes; - var events = from s in _db.Controller_Event_Log - where s.SignalID == signalID && - s.Timestamp >= startDate && - s.Timestamp <= endDate && - eventCodes.Contains(s.EventCode) - select s; + var repository = Models.Repositories.ControllerEventLogRepositoryFactory.Create(); + + var events = repository.GetSignalEventsByEventCodes(signalID, startDate, endDate, eventCodes); Events = events.ToList(); Events.Sort((x, y) => DateTime.Compare(x.Timestamp, y.Timestamp)); @@ -48,13 +49,10 @@ public ControllerEventLogs(string signalID, DateTime startDate, DateTime endDate EndDate = endDate; EventCodes = eventCodes; - var events = from s in db.Controller_Event_Log - where s.SignalID == signalID && - s.Timestamp >= startDate && - s.Timestamp <= endDate && - eventCodes.Contains(s.EventCode) - select s; + var repository = Models.Repositories.ControllerEventLogRepositoryFactory.Create(db); + + var events = repository.GetSignalEventsByEventCodes(signalID, startDate, endDate, eventCodes); Events = events.ToList(); Events.Sort((x, y) => DateTime.Compare(x.Timestamp, y.Timestamp)); } @@ -67,13 +65,9 @@ public ControllerEventLogs(string signalID, DateTime startDate, DateTime endDate EndDate = endDate; EventCodes = eventCodes; - var events = from s in _db.Controller_Event_Log - where s.SignalID == signalID && - s.Timestamp >= startDate && - s.Timestamp <= endDate && - eventCodes.Contains(s.EventCode) && - s.EventParam == eventParam - select s; + var repository = Models.Repositories.ControllerEventLogRepositoryFactory.Create(); + + var events = repository.GetEventsByEventCodesParam(signalID, startDate, endDate, eventCodes, eventParam); Events = events.ToList(); Events = Events.OrderBy(e => e.Timestamp).ThenBy(e => e.EventCode).ToList(); @@ -87,24 +81,12 @@ public ControllerEventLogs(string signalID, DateTime startDate, DateTime endDate EndDate = endDate; EventCodes = eventCodes; - var events = from s in _db.Controller_Event_Log - where s.SignalID == signalID && - s.Timestamp >= startDate && - s.Timestamp <= endDate && - eventCodes.Contains(s.EventCode) && - eventParams.Contains(s.EventParam) - select s; + var repository = Models.Repositories.ControllerEventLogRepositoryFactory.Create(); - Events = events.ToList(); - Events = Events.OrderBy(e => e.Timestamp).ThenBy(e => e.EventCode).ToList(); + Events = repository.GetSignalEventsByEventCodesParams(signalID, startDate, endDate, eventCodes, eventParams) + .OrderBy(e => e.Timestamp).ThenBy(e => e.EventCode).ToList(); } - public string SignalId { get; } - public DateTime StartDate { get; protected set; } - public DateTime EndDate { get; protected set; } - public List EventCodes { get; } - public List Events { get; set; } - public void FillforPreempt(string signalID, DateTime startDate, DateTime endDate) { var Codes = new List(); @@ -112,27 +94,20 @@ public void FillforPreempt(string signalID, DateTime startDate, DateTime endDate for (var i = 101; i <= 111; i++) Codes.Add(i); - var db = new SPM(); - var events = (from s in db.Controller_Event_Log - where s.SignalID == signalID && - s.Timestamp >= startDate && - s.Timestamp <= endDate && - Codes.Contains(s.EventCode) - select s).ToList(); + var repository = Models.Repositories.ControllerEventLogRepositoryFactory.Create(); + var events = repository.GetSignalEventsByEventCodes(signalID, startDate, endDate, Codes); Events.AddRange(events); OrderEventsBytimestamp(); } public void Add105Events(string signalId, DateTime startDate, DateTime endDate) { - var events = (from s in _db.Controller_Event_Log - where s.SignalID == signalId && - s.Timestamp >= startDate && - s.Timestamp <= endDate && - (s.EventCode == 105 || s.EventCode == 111) - select s).ToList(); + + var repository = Models.Repositories.ControllerEventLogRepositoryFactory.Create(); + + var events = repository.GetSignalEventsByEventCodes(signalId, startDate, endDate, new List { 105, 111 }); foreach (var v in events) { v.EventCode = 99; @@ -151,16 +126,9 @@ public void OrderEventsBytimestamp() public static DateTime GetMostRecentRecordTimestamp(string signalID) { - var db = new SPM(); - var twoDaysAgo = DateTime.Now.AddDays(-2); - - var row = (from r in db.Controller_Event_Log - where r.SignalID == signalID && r.Timestamp > twoDaysAgo - orderby r.Timestamp descending - select r).Take(1).FirstOrDefault(); - - + var repository = Models.Repositories.ControllerEventLogRepositoryFactory.Create(); + var row = repository.GetTopEventAfterDate(signalID, twoDaysAgo); if (row != null) return row.Timestamp; return twoDaysAgo; @@ -187,65 +155,24 @@ public void MergeEvents(ControllerEventLogs newEvents) Events.Sort((x, y) => DateTime.Compare(x.Timestamp, y.Timestamp)); } - public static List GetPedPhases(string signalID, DateTime startDate, DateTime endDate) - { - var db = new SPM(); - var pedEventCodes = new List { 21, 45, 90, 22 }; - - var events = (from s in db.Controller_Event_Log - where s.SignalID == signalID && - s.Timestamp >= startDate && - s.Timestamp <= endDate && - pedEventCodes.Contains(s.EventCode) - select s.EventParam).Distinct(); - return events.ToList(); - } - public static int GetPreviousPlan(string signalID, DateTime startDate) { - var db = new SPM(); var endDate = startDate.AddHours(-12); - var planRecord = from r in db.Controller_Event_Log - where r.SignalID == signalID && - r.Timestamp >= endDate && - r.Timestamp <= startDate && - r.EventCode == 131 - select r; + var repository = Models.Repositories.ControllerEventLogRepositoryFactory.Create(); + + var planRecord = repository.GetSignalEventsByEventCode(signalID, startDate, endDate, 131); if (planRecord.Count() > 0) return planRecord.OrderByDescending(s => s.Timestamp).FirstOrDefault().EventParam; return 0; } - public static Controller_Event_Log GetEventBeforeEvent(string signalID, int phase, DateTime startDate) - { - var db = new SPM(); - var endDate = startDate.AddHours(-12); - var eventRecord = (from s in db.Controller_Event_Log - orderby s.Timestamp descending - where s.SignalID == signalID && - s.EventParam == phase && - s.Timestamp <= startDate && - s.Timestamp >= endDate - select s - ).DefaultIfEmpty(null).First(); - return eventRecord; - } - public static Controller_Event_Log GetEventFromPreviousBin(string signalID, int phase, DateTime currentTime, List chosenEvents, TimeSpan lookbackTime) { - var db = new SPM(); + var repository = Models.Repositories.ControllerEventLogRepositoryFactory.Create(); var startTime = currentTime - lookbackTime; - var eventRecord = (from s in db.Controller_Event_Log - where s.SignalID == signalID && - s.EventParam == phase && - s.Timestamp > startTime && - s.Timestamp < currentTime && - chosenEvents.Contains(s.EventCode) - orderby s.Timestamp descending - select s - ).FirstOrDefault(); - - return eventRecord; + return repository.GetEventsByEventCodesParam(signalID, startTime, currentTime, chosenEvents, phase) + .OrderByDescending(s => s.Timestamp) + .FirstOrDefault(); } } } \ No newline at end of file diff --git a/MOE.Common/Models/Repositories/ControllerEventLogRepository.cs b/MOE.Common/Models/Repositories/ControllerEventLogRepository.cs index fad5852f..d4b21829 100644 --- a/MOE.Common/Models/Repositories/ControllerEventLogRepository.cs +++ b/MOE.Common/Models/Repositories/ControllerEventLogRepository.cs @@ -1,18 +1,13 @@ using System; using System.Collections.Generic; -using System.Data.Entity.Core; -using System.Data.Entity.Core.Objects; -using System.Data.SqlClient; using System.Linq; using System.Reflection; -using System.Web.Management; -using Microsoft.EntityFrameworkCore.Internal; namespace MOE.Common.Models.Repositories { public class ControllerEventLogRepository : IControllerEventLogRepository - { - + { + private readonly SPM _db = new SPM(); public ControllerEventLogRepository(SPM db) { @@ -195,8 +190,8 @@ public int GetRecordCount(string signalId, DateTime startTime, DateTime endTime) return _db.Controller_Event_Log.Count(r => r.SignalID == signalId && r.Timestamp >= startTime && r.Timestamp < endTime); - } - catch (Exception ex) + } + catch (Exception ex) { var logRepository = ApplicationEventRepositoryFactory.Create(); @@ -206,7 +201,7 @@ public int GetRecordCount(string signalId, DateTime startTime, DateTime endTime) e.Function = "GetRecordCount"; e.SeverityLevel = ApplicationEvent.SeverityLevels.High; e.Timestamp = DateTime.Now; - e.Description = signalId + " - " +ex.Message; + e.Description = signalId + " - " + ex.Message; logRepository.Add(e); throw ex; } @@ -278,12 +273,12 @@ public List GetSignalEventsByEventCodes(string signalId, select s).ToList(); events.Sort((x, y) => DateTime.Compare(x.Timestamp, y.Timestamp)); return events; - } - //catch (EntityCommandExecutionException ex) - //{ - - //} - + } + //catch (EntityCommandExecutionException ex) + //{ + + //} + catch (Exception ex) { var logRepository = @@ -347,7 +342,7 @@ public List GetTopEventsAfterDateByEventCodesParam(string eventCodes.Contains(c.EventCode)).ToList(); return events .OrderBy(s => s.Timestamp) - .Take(top).ToList(); + .Take(top).ToList(); } catch (Exception e) { @@ -367,7 +362,7 @@ public List GetTopEventsBeforeDateByEventCodesParam(string secondsToCompleteCycle = Convert.ToInt32(settings.CycleCompletionSeconds); try { - var start = timestamp.AddSeconds(secondsToCompleteCycle *-1); + var start = timestamp.AddSeconds(secondsToCompleteCycle * -1); var events = _db.Controller_Event_Log.Where(c => c.SignalID == signalId && c.Timestamp < timestamp && @@ -569,8 +564,8 @@ public Controller_Event_Log GetFirstEventBeforeDate(string signalId, public Controller_Event_Log GetFirstEventAfterDateByEventCodesAndParameter(string signalId, List eventCodes, int eventParam, DateTime start, int secondsToSearch) - { - + { + if (!String.IsNullOrEmpty(signalId)) { try @@ -579,9 +574,9 @@ public Controller_Event_Log GetFirstEventAfterDateByEventCodesAndParameter(strin var tempDate = start.AddSeconds(secondsToSearch); var controllerEvent = _db.Controller_Event_Log.Where(c => c.SignalID == signalId && c.Timestamp > start && - c.Timestamp <= tempDate && - c.EventParam == eventParam&& - eventCodes.Contains(c.EventCode) ) + c.Timestamp <= tempDate && + c.EventParam == eventParam && + eventCodes.Contains(c.EventCode)) .OrderBy(c => c.Timestamp).FirstOrDefault(); return controllerEvent; } @@ -669,10 +664,10 @@ public int GetApproachEventsCountBetweenDates(int approachId, DateTime startTime public DateTime GetMostRecentRecordTimestamp(string signalID) { - MOE.Common.Models.Controller_Event_Log row = (from r in _db.Controller_Event_Log - where r.SignalID == signalID - orderby r.Timestamp descending - select r).Take(1).FirstOrDefault(); + MOE.Common.Models.Controller_Event_Log row = (from r in _db.Controller_Event_Log + where r.SignalID == signalID + orderby r.Timestamp descending + select r).Take(1).FirstOrDefault(); if (row != null) { return row.Timestamp; @@ -681,6 +676,25 @@ orderby r.Timestamp descending { return new DateTime(); } - } + } + + public List GetSignalEventsByEventCodesParams(string signalID, DateTime startDate, DateTime endDate, List eventCodes, List eventParams) + { + return _db.Controller_Event_Log.Where(s => + s.SignalID == signalID && + s.Timestamp >= startDate && + s.Timestamp <= endDate && + eventCodes.Contains(s.EventCode) && + eventParams.Contains(s.EventParam)).ToList(); + } + + public Controller_Event_Log GetTopEventAfterDate(string signalID, DateTime twoDaysAgo) + { + return _db.Controller_Event_Log + .Where(r => r.SignalID == signalID && r.Timestamp > twoDaysAgo) + .OrderByDescending(r => r.Timestamp) + .Take(1) + .FirstOrDefault(); + } } } \ No newline at end of file diff --git a/MOE.Common/Models/Repositories/IControllerEventLogRepository.cs b/MOE.Common/Models/Repositories/IControllerEventLogRepository.cs index 9dc53ce1..643a7d65 100644 --- a/MOE.Common/Models/Repositories/IControllerEventLogRepository.cs +++ b/MOE.Common/Models/Repositories/IControllerEventLogRepository.cs @@ -55,7 +55,7 @@ int GetDetectorActivationCount(string signalId, int GetRecordCountByParameterAndEvent(string signalId, DateTime startTime, DateTime endTime, List eventParameters, List events); - + List GetSignalEventsByEventCodesParams(string signalID, DateTime startDate, DateTime endDate, List eventCodes, List eventParams); List GetRecordsByParameterAndEvent(string signalId, DateTime startTime, DateTime endTime, List eventParameters, List eventCodes); @@ -75,5 +75,6 @@ int GetApproachEventsCountBetweenDates(int approachId, DateTime startTime, DateT Controller_Event_Log GetFirstEventAfterDateByEventCodesAndParameter(string signalId, List eventCodes, int eventParam, DateTime start, int secondsToSearch); + Controller_Event_Log GetTopEventAfterDate(string signalID, DateTime twoDaysAgo); } } \ No newline at end of file