private static void VerifyValidExecutionTime(SimpleJobDescription jobDescription) { if (jobDescription.NextExecutionTime < DateTime.Now) { throw new NextExecutionIsInThePastException("Next execution time is in the past"); } }
public void GetDescription(SimpleJobDescription jobDescription) { jobDescription.TriggerType = triggerType; switch (triggerType) { case TriggerType.Delayed: jobDescription.ExactStartTime = DateTime.Now.Add(this.DelayedExecution); jobDescription.TimeOfDay = default; jobDescription.SucceedesJobId = string.Empty; break; case TriggerType.ExactTime: jobDescription.ExactStartTime = ExactStartTime; jobDescription.TimeOfDay = default; jobDescription.SucceedesJobId = string.Empty; break; case TriggerType.JobFinished: jobDescription.ExactStartTime = default; jobDescription.TimeOfDay = default; jobDescription.SucceedesJobId = JobId; jobDescription.SucceedsOnlyOnSuccess = OnlyIfSuccessfull; break; case TriggerType.TimeOfDay: jobDescription.ExactStartTime = default; jobDescription.TimeOfDay = TimeOfDay; jobDescription.SucceedesJobId = string.Empty; break; default: throw new Exception("Unknown trigger type specified"); } }
public SimpleJobDescription Build() { var description = new SimpleJobDescription { Identifier = this.Identifier, Job = this.Job, Repetition = this.Repetition.Repeat, IntervalInMilliseconds = this.Repetition.IntervalConfiguration.Interval }; TriggerConfiguration.GetDescription(description); return(description); }
public void AddJob(SimpleJobDescription jobDescription) { if (jobDescription == null) { throw new ArgumentNullException(nameof(jobDescription)); } CalculateFirstExecution(jobDescription); VerifyValidExecutionTime(jobDescription); AddEntry(jobDescription); }
public void ScheduleJob(SimpleJobDescription jobDescriptor) { if (jobDescriptor.TriggerType == TriggerType.ExactTime) { timeBasedQueue.AddJob(jobDescriptor); } else if (jobDescriptor.TriggerType == TriggerType.JobFinished) { jobTriggeringQueue.AddJob(jobDescriptor); } else { throw new JobTypeNotSupportedException($"The job type {jobDescriptor.GetType().Name} is not supported in the SimpleController"); } }
public SimpleJobDescription Next() { lock (lockOnThis) { if (jobs.Count == 0) { return(null); } var job = jobs.FirstOrDefault(); if (job.Key <= DateTime.Now) { var nextJob = new SimpleJobDescription(job.Value); CalculateNextExecutionTime(nextJob); jobs.Remove(job.Key); jobs.Add(nextJob.NextExecutionTime, nextJob); return(job.Value); } return(null); } }
private static void CalculateNextExecutionTime(SimpleJobDescription jobDescription) { if (jobDescription.TriggerType == TriggerType.ExactTime) { jobDescription.NextExecutionTime = jobDescription.NextExecutionTime.AddMilliseconds(jobDescription.IntervalInMilliseconds); } else if (jobDescription.TriggerType == TriggerType.TimeOfDay) { var now = DateTime.Now; if (now.Date.Add(jobDescription.TimeOfDay) < now) { jobDescription.NextExecutionTime = now.Date.AddDays(1).Add(jobDescription.TimeOfDay); } else { jobDescription.NextExecutionTime = now.Date.Add(jobDescription.TimeOfDay); } } else { throw new InvalidTriggerException("Only ExactStartTimeTriggerDescription types are allowed for time based queue"); } }
public void RemoveJob(SimpleJobDescription jobDescription) { throw new NotImplementedException(); }
private void AddEntry(SimpleJobDescription jobDescription) => jobs.Add(jobDescription.NextExecutionTime, jobDescription);