using bsmd.database; using log4net; using System; using System.Collections.Generic; namespace bsmd.nsw.service { public class Service : IService { private readonly ILog _log = LogManager.GetLogger(typeof(Service)); public NSWEntry[] NSWData(string poc, string fromDateString, string toDateString) { List entries = new List(); DateTime? fromDate = null; if (DateTime.TryParse(fromDateString, out DateTime fromDateParsed)) fromDate = fromDateParsed; DateTime? toDate = null; if (DateTime.TryParse(toDateString, out DateTime toDateParsed)) toDate = toDateParsed; _log.InfoFormat("Received request for {0} between {1} and {2}", poc, fromDate.HasValue ? fromDate.Value.ToString() : "?", toDate.HasValue ? toDate.Value.ToString() : "?"); if (DBManager.Instance.Connect(Properties.Settings.Default.ConnectionString)) { // add search criteria if (!poc.IsNullOrEmpty()) { Dictionary filterDict = new Dictionary(); filterDict.Add(MessageCore.SearchFilterType.FILTER_PORT, poc); uint? from = null, to = null; if (fromDate.HasValue) { from = fromDate.Value.ToUniversalTime().ToUnixTimeStamp(); } if(toDate.HasValue) { to = toDate.Value.ToUniversalTime().ToUnixTimeStamp(); } if (from.HasValue || to.HasValue) filterDict.Add(MessageCore.SearchFilterType.FILTER_ETA, string.Format("{0}:{1}", from?.ToString() ?? "", to?.ToString() ?? "")); int? resultLimit; int? expectedResultNum = DBManager.Instance.GetNumCoresWithFilters(filterDict); if ((expectedResultNum ?? 0) > 100) resultLimit = 100; else resultLimit = expectedResultNum; foreach(MessageCore core in DBManager.Instance.GetMessageCoresWithFilters(filterDict, resultLimit)) { NSWEntry entry = new NSWEntry(); if(core.ETA.HasValue) entry.ETA = core.ETA.Value; entry.IMO_ENI = core.IMOENIDisplay; entry.PoC = core.PoC; Message agntMessage = DBManager.Instance.GetMessage(core, Message.NotificationClass.AGNT); if ((agntMessage != null) && (agntMessage.Elements.Count > 0)) entry.AGNT = agntMessage.Elements[0] as AGNT; Message noanodMessage = DBManager.Instance.GetMessage(core, Message.NotificationClass.NOA_NOD); if ((noanodMessage != null) && (noanodMessage.Elements.Count > 0)) entry.NOA_NOD = noanodMessage.Elements[0] as NOA_NOD; Message statMessage = DBManager.Instance.GetMessage(core, Message.NotificationClass.STAT); if ((statMessage != null) && (statMessage.Elements.Count > 0)) entry.STAT = statMessage.Elements[0] as STAT; Message infoMessage = DBManager.Instance.GetMessage(core, Message.NotificationClass.INFO); if ((infoMessage != null) && (infoMessage.Elements.Count > 0)) entry.INFO = infoMessage.Elements[0] as INFO; entries.Add(entry); } } else { _log.Warn("PoC data missing - ignoring search"); } DBManager.Instance.Disconnect(); } else { _log.Error("failed to connect to database"); } return entries.ToArray(); } } }