Exemplo n.º 1
0
 private static void VerifyValidExecutionTime(SimpleJobDescription jobDescription)
 {
     if (jobDescription.NextExecutionTime < DateTime.Now)
     {
         throw new NextExecutionIsInThePastException("Next execution time is in the past");
     }
 }
Exemplo n.º 2
0
        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");
            }
        }
Exemplo n.º 3
0
        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);
        }
Exemplo n.º 4
0
        public void AddJob(SimpleJobDescription jobDescription)
        {
            if (jobDescription == null)
            {
                throw new ArgumentNullException(nameof(jobDescription));
            }

            CalculateFirstExecution(jobDescription);

            VerifyValidExecutionTime(jobDescription);

            AddEntry(jobDescription);
        }
Exemplo n.º 5
0
 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");
     }
 }
Exemplo n.º 6
0
        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);
            }
        }
Exemplo n.º 7
0
 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");
     }
 }
Exemplo n.º 8
0
 public void RemoveJob(SimpleJobDescription jobDescription)
 {
     throw new NotImplementedException();
 }
Exemplo n.º 9
0
 private void AddEntry(SimpleJobDescription jobDescription) => jobs.Add(jobDescription.NextExecutionTime, jobDescription);