/// <summary> /// This event is fired on new file arrival to the watching path. /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void OnCreated(string filePath) { var canbemoved = false; try { if (Path.GetFileName(filePath).Contains("diag")) { Log("Processing...", Path.GetFileName(filePath)); var campaignService = IoC.Container.GetInstance <ICampaignService>(); long filelength = new System.IO.FileInfo(filePath).Length; if (filelength > 0) { using (TextReader sr = new StreamReader(File.Open(filePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))) { var csv = new CsvReader(sr); csv.Configuration.RegisterClassMap <MailMapping>(); csv.Configuration.WillThrowOnMissingField = false; IEnumerable <MailStat> records = csv.GetRecords <MailStat>().Where(i => i.CampaignId > 0).ToList(); IEnumerable <CampaignLogDetails> filteredRecipients = records.Where(r => !string.IsNullOrEmpty(r.Recipient)) .GroupBy(m => new { m.Recipient, m.CampaignId }). Select(g => g.Select(p => new CampaignLogDetails() { BounceCategory = (int?)p.BounceCategory, CampaignId = (int?)p.CampaignId, CampaignRecipientId = p.CampaignRecipientId, CreatedOn = DateTime.UtcNow, DeliveryStatus = (short?)p.DeliveryStatus, OptOutStatus = p.OptOutStatus, Recipient = p.Recipient, Remarks = Path.GetFileName(filePath) + "/" + p.BounceCategory.ToString() + "/", TimeLogged = p.TimeLogged, Status = 1, FileType = 1 }).OrderByDescending(v => v.TimeLogged).First()); InsertCampaignLogDetailsResponce insertResponce = campaignService.InsertCampaignLogDetails(new InsertCampaignLogDetailsRequest() { CampaignLogDetails = filteredRecipients }); canbemoved = true; } } else { _inProcessFileList.Remove(filePath); } } else { canbemoved = true; Log("File Not Processed...", Path.GetFileName(filePath)); } if (canbemoved) { MoveFile(filePath, LogFileType.Diag); } } catch (Exception ex) { _inProcessFileList.Remove(filePath); ExceptionHandler.Current.HandleException(ex, DefaultExceptionPolicies.LOG_ONLY_POLICY, values: filePath); } }
/// <summary> /// This event is fired on new file arrival to the watching path. /// </summary> /// <param name="sender"></param> /// <param name="e"></param> static void onFeedBackLoopFileCreated(string filePath) { var canbemoved = false; try { if (Path.GetFileName(filePath).Contains("feedbackloop")) { Log("Processing...", Path.GetFileName(filePath)); var campaignService = IoC.Container.GetInstance <ICampaignService>(); long filelength = new System.IO.FileInfo(filePath).Length; if (filelength > 0) { using (TextReader sr = new StreamReader(File.Open(filePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))) { var csv = new CsvReader(sr); csv.Configuration.RegisterClassMap <FeedBackLoopMailMapping>(); csv.Configuration.WillThrowOnMissingField = false; var records = csv.GetRecords <FeedBackLoopMailStat>().Where(i => i.CampaignRecipientId > 0).ToList(); //take campaignid and recipient as unique combination, //take latest record. var filteredRecipients = records.GroupBy(m => new { m.CampaignRecipientId }) .Select(g => g.Select(p => new CampaignLogDetails() { CampaignRecipientId = p.CampaignRecipientId, CreatedOn = DateTime.UtcNow, DeliveryStatus = (short?)p.DeliveryStatus, Recipient = p.Recipient, Remarks = Path.GetFileName(filePath) + "/" + (p.Remarks == null? "": p.Remarks.ToString()) + "/", TimeLogged = p.TimeLogged, Status = 1, FileType = 2 }).OrderByDescending(v => v.TimeLogged).First()); InsertCampaignLogDetailsResponce insertResponce = campaignService.InsertCampaignLogDetails(new InsertCampaignLogDetailsRequest() { CampaignLogDetails = filteredRecipients }); canbemoved = true; } } else { inProcessFeedBackLoopFileList.Remove(filePath); } } else { canbemoved = true; Log("File Not Processed...", Path.GetFileName(filePath)); } if (canbemoved) { MoveFile(filePath, LogFileType.FeedBack); } } catch (Exception ex) { inProcessFeedBackLoopFileList.Remove(filePath); ExceptionHandler.Current.HandleException(ex, DefaultExceptionPolicies.LOG_ONLY_POLICY, values: filePath); } }