public JobTaskResponse GetMailbox(string username, string password) { ThreadContext.Properties["EventClass"] = ApplicationHelpers.GetCurrentMethod(1); ThreadContext.Properties["RemoteAddress"] = ApplicationHelpers.GetClientIP(); ThreadContext.Properties["UserID"] = "CSM_SCHEDTASK"; _stopwatch = System.Diagnostics.Stopwatch.StartNew(); _logger.Debug("-- Start Cron Job --:--Get Mailbox--"); if (!ApplicationHelpers.Authenticate(username, password)) { _logger.DebugFormat("O:--LOGIN--:Error Message/{0}", "Username and/or Password Invalid."); } _auditLog = new AuditLogEntity(); _auditLog.Module = Constants.Module.Batch; _auditLog.Action = Constants.AuditAction.CreateCommPool; _auditLog.IpAddress = ApplicationHelpers.GetClientIP(); JobTaskResponse taskResponse; DateTime schedDateTime = DateTime.Now; try { _logger.Info("I:--START--:--Get Mailbox--"); _commPoolFacade = new CommPoolFacade(); _taskResults = new List <JobTaskResult>(); #region "Retrieve Mail Settings" string hostname = WebConfig.GetPOP3EmailServer(); int port = WebConfig.GetPOP3Port(); bool useSsl = WebConfig.GetMailUseSsl(); List <PoolEntity> poolList = _commPoolFacade.GetActivePoolList(); #endregion if (poolList == null || poolList.Count == 0) { const string errorMessage = "Pool list cannot be null or empty"; taskResponse = new JobTaskResponse { SchedDateTime = schedDateTime, StatusResponse = new StatusResponse { Status = Constants.StatusResponse.Failed, ErrorCode = string.Empty, Description = errorMessage } }; _logger.InfoFormat("O:--FAILED--:Error Message/{0}", errorMessage); _logger.ErrorFormat("Exception occur:\n{0}", errorMessage); AppLog.AuditLog(_auditLog, LogStatus.Fail, errorMessage); return(taskResponse); } Task.Factory.StartNew(() => Parallel.ForEach(poolList, new ParallelOptions { MaxDegreeOfParallelism = WebConfig.GetTotalCountToProcess() }, x => { lock (sync) { var taskResult = _commPoolFacade.AddMailContent(hostname, port, useSsl, x); _taskResults.Add(taskResult); if (taskResult.StatusResponse.Status == Constants.StatusResponse.Success) { AppLog.AuditLog(_auditLog, LogStatus.Success, taskResult.ToString()); } else { AppLog.AuditLog(_auditLog, LogStatus.Fail, string.Format(CultureInfo.InvariantCulture, "Username:{0}\n Error:{1}", taskResult.Username, taskResult.StatusResponse.Description)); } } })).Wait(); _logger.Info("I:--SUCCESS--:--Get Mailbox--"); taskResponse = new JobTaskResponse { SchedDateTime = schedDateTime, StatusResponse = new StatusResponse { Status = Constants.StatusResponse.Success }, JobTaskResults = _taskResults }; return(taskResponse); } catch (Exception ex) { taskResponse = new JobTaskResponse { SchedDateTime = schedDateTime, StatusResponse = new StatusResponse { Status = Constants.StatusResponse.Failed, ErrorCode = string.Empty, Description = ex.Message } }; _logger.InfoFormat("O:--FAILED--:Error Message/{0}", ex.Message); _logger.Error("Exception occur:\n", ex); AppLog.AuditLog(_auditLog, LogStatus.Fail, ex.Message); } finally { _stopwatch.Stop(); _elapsedTime = _stopwatch.ElapsedMilliseconds; _logger.Debug("-- Finish Cron Job --:ElapsedMilliseconds/" + _elapsedTime); } return(taskResponse); }
public JobTaskResponse GetMailbox(string username, string password) { ThreadContext.Properties["EventClass"] = ApplicationHelpers.GetCurrentMethod(1); ThreadContext.Properties["RemoteAddress"] = ApplicationHelpers.GetClientIP(); if (!string.IsNullOrWhiteSpace(username)) { ThreadContext.Properties["UserID"] = username.ToUpperInvariant(); } _stopwatch = System.Diagnostics.Stopwatch.StartNew(); _logger.Debug("-- Start Cron Job --:--Get Mailbox--"); string errorMessage = string.Empty; JobTaskResponse taskResponse = null; DateTime schedDateTime = DateTime.Now; if (!ApplicationHelpers.Authenticate(username, password)) { errorMessage = "Username and/or Password Invalid."; taskResponse = new JobTaskResponse { SchedDateTime = schedDateTime, StatusResponse = new StatusResponse { Status = Constants.StatusResponse.Failed, ErrorCode = string.Empty, Description = errorMessage } }; _logger.InfoFormat("O:--LOGIN--:Error Message/{0}", errorMessage); } _auditLog = new AuditLogEntity(); _auditLog.Module = Constants.Module.Batch; _auditLog.Action = Constants.AuditAction.CreateCommPool; _auditLog.IpAddress = ApplicationHelpers.GetClientIP(); try { #region "BatchProcess Start" if (AppLog.BatchProcessStart(Constants.BatchProcessCode.CreateCommPool, schedDateTime) == false) { _logger.Info("I:--NOT PROCESS--:--Get Mailbox--"); taskResponse = new JobTaskResponse { SchedDateTime = schedDateTime, StatusResponse = new StatusResponse { Status = Constants.StatusResponse.NotProcess, ErrorCode = string.Empty, Description = string.Empty } }; return(taskResponse); } #endregion _logger.Info("I:--START--:--Get Mailbox--"); _commPoolFacade = new CommPoolFacade(); _taskResults = new List <JobTaskResult>(); #region "Retrieve Mail Settings" string hostname = WebConfig.GetPOP3EmailServer(); int port = WebConfig.GetPOP3Port(); bool useSsl = WebConfig.GetMailUseSsl(); List <PoolEntity> poolList = _commPoolFacade.GetActivePoolList(); #endregion if (poolList == null || poolList.Count == 0) { errorMessage = "Pool list cannot be null or empty"; taskResponse = new JobTaskResponse { SchedDateTime = schedDateTime, StatusResponse = new StatusResponse { Status = Constants.StatusResponse.Failed, ErrorCode = string.Empty, Description = errorMessage } }; _logger.InfoFormat("O:--FAILED--:Error Message/{0}", errorMessage); _logger.ErrorFormat("Exception occur:\n{0}", errorMessage); AppLog.AuditLog(_auditLog, LogStatus.Fail, errorMessage); return(taskResponse); } Task.Factory.StartNew(() => Parallel.ForEach(poolList, new ParallelOptions { MaxDegreeOfParallelism = WebConfig.GetTotalCountToProcess() }, x => { lock (sync) { var stopwatch = new System.Diagnostics.Stopwatch(); stopwatch.Start(); var taskDateTime = DateTime.Now; var taskResult = _commPoolFacade.AddMailContent(hostname, port, useSsl, x); taskResult.SchedDateTime = taskDateTime; if (taskResult.StatusResponse.Status == Constants.StatusResponse.Success) { AppLog.AuditLog(_auditLog, LogStatus.Success, taskResult.ToString()); } if (taskResult.StatusResponse.Status == Constants.StatusResponse.Failed) { if (taskResult.NumFailedDelete == 0) { AppLog.AuditLog(_auditLog, LogStatus.Fail, string.Format(CultureInfo.InvariantCulture, "Username:{0}\n Error:{1}", taskResult.Username, taskResult.StatusResponse.Description)); } if (taskResult.NumFailedDelete > 0) { AppLog.AuditLog(_auditLog, LogStatus.Fail, taskResult.ToString()); } } stopwatch.Stop(); taskResult.ElapsedTime = stopwatch.ElapsedMilliseconds; _taskResults.Add(taskResult); } })).Wait(); _logger.Info("O:--SUCCESS--:--Get Mailbox--"); taskResponse = new JobTaskResponse { SchedDateTime = schedDateTime, StatusResponse = new StatusResponse { Status = Constants.StatusResponse.Success }, JobTaskResults = _taskResults }; return(taskResponse); } catch (Exception ex) { taskResponse = new JobTaskResponse { SchedDateTime = schedDateTime, StatusResponse = new StatusResponse { Status = Constants.StatusResponse.Failed, ErrorCode = string.Empty, Description = ex.Message } }; _logger.InfoFormat("O:--FAILED--:Error Message/{0}", ex.Message); _logger.Error("Exception occur:\n", ex); AppLog.AuditLog(_auditLog, LogStatus.Fail, ex.Message); return(taskResponse); } finally { _stopwatch.Stop(); _elapsedTime = _stopwatch.ElapsedMilliseconds; _logger.Debug("-- Finish Cron Job --:ElapsedMilliseconds/" + _elapsedTime); #region "BatchProcess End" if (taskResponse != null && taskResponse.StatusResponse != null && taskResponse.StatusResponse.Status != Constants.StatusResponse.NotProcess) { var batchStatus = Constants.BatchProcessStatus.Fail; var batchDetails = string.Empty; if (taskResponse.StatusResponse.Status == Constants.StatusResponse.Success) { batchStatus = taskResponse.JobTaskResults.Any( x => x.StatusResponse.Status != Constants.StatusResponse.Success) ? Constants.BatchProcessStatus.Fail : Constants.BatchProcessStatus.Success; //batchDetails = StringHelpers.ConvertListToString(taskResponse.JobTaskResults.Select(x => x.ToString()).ToList<object>(), "\n"); if (taskResponse.JobTaskResults != null && taskResponse.JobTaskResults.Count > 0) { foreach (var taskResult in taskResponse.JobTaskResults) { if (taskResult.StatusResponse.Status == Constants.StatusResponse.Success) { batchDetails += taskResult.ToString() + "\n\n"; } if (taskResult.StatusResponse.Status == Constants.StatusResponse.Failed) { if (taskResult.NumFailedDelete == 0) { batchDetails += string.Format(CultureInfo.InvariantCulture, "Username:{0}\n Error:{1} \n\n", taskResult.Username, taskResult.StatusResponse.Description); } else { batchDetails += taskResult.ToString() + "\n\n"; } } } } } else { batchDetails = taskResponse.StatusResponse.Description; } DateTime endTime = taskResponse.SchedDateTime.AddMilliseconds(_elapsedTime); TimeSpan processTime = endTime.Subtract(taskResponse.SchedDateTime); AppLog.BatchProcessEnd(Constants.BatchProcessCode.CreateCommPool, batchStatus, endTime, processTime, batchDetails); } #endregion // Send mail to system administrator ImportJobSendMail(taskResponse); } }