internal void Run() { Console.WriteLine("Starting queue reader"); while (true) { Task.Delay(2000); using (var dbContext = new MassdropContext()) { var jobs = (from jobItem in dbContext.UrlJobs where jobItem.JobStatus == JobStatus.New select jobItem).ToList(); foreach (Job jobItem in jobs) { jobItem.JobStatus = JobStatus.InQueue; } dbContext.SaveChanges(); jobs.ForEach(x => _JobsQueue.Enqueue(x)); } } }
/// <summary> /// Gets the job by identifier. /// </summary> /// <param name="dbContext">The database context.</param> /// <param name="jobId">The job identifier.</param> /// <returns></returns> public static UrlJob GetUrlJobById(MassdropContext dbContext, int jobId) { var jobItem = (from job in dbContext.UrlJobs where job.Id == jobId select job).FirstOrDefault(); return jobItem; }
public JobsController() { _dbContext = new MassdropContext(); }
internal void Run() { Console.WriteLine("Starting queue executer"); while (true) { Job objTempJobItem; Task.Delay(1000); // Will try to get item from queue if (_JobsQueue.TryDequeue(out objTempJobItem)) { Console.WriteLine(string.Format("Task ID: {0} is working on job ID:{1}",Task.CurrentId, objTempJobItem.Id)); // Will update it's status and save it in DB using (var dbContext = new MassdropContext()) { var jobItem1 = (from jobItem in dbContext.UrlJobs where jobItem.Id == objTempJobItem.Id select jobItem).FirstOrDefault(); jobItem1.JobStatus = JobStatus.InProcess; dbContext.SaveChanges(); } // Will get the executer JobExecuter executerItem = GetJobExecuter(objTempJobItem); if (executerItem != null) { JobStatus finalStatus = JobStatus.Done; string result = null; try { Console.WriteLine(string.Format("Task ID: {0} is executing on job ID:{1}", Task.CurrentId, objTempJobItem.Id)); // Will run the executer job result = executerItem.Execute(); Console.WriteLine(string.Format("Task ID: {0} is executed on job ID:{1}", Task.CurrentId, objTempJobItem.Id)); } catch (Exception ex) { result = ex.Message; finalStatus = JobStatus.Failed; } finally { // Will save the new status and the result in the db using (var dbContext = new MassdropContext()) { var jobItem2 = (from jobItem in dbContext.UrlJobs where jobItem.Id == objTempJobItem.Id select jobItem).FirstOrDefault(); jobItem2.Result = result; jobItem2.JobStatus = finalStatus; dbContext.SaveChanges(); } } Console.WriteLine(string.Format("Task ID: {0} is saved results on job ID:{1}", Task.CurrentId, objTempJobItem.Id)); } } } }