示例#1
0
        public void TestSaveJobSchedule()
        {
            var jobSchedule = new JobSchedule()
            {
                RelativityScriptId = TEST_SCRIPT_ID,
                WorkspaceId        = TEST_WORKSPACE_ID,
                ExecutionSchedule  = 0x7F,
                ExecutionTime      = JobSchedule.TimeSeconds(DateTime.UtcNow),
                JobEnabled         = true
            };

            var jobInputs = new List <JobScriptInput>()
            {
                new JobScriptInput()
                {
                    InputId    = "scriptInput1",
                    InputName  = "scriptInput1",
                    InputValue = "scriptValue1"
                },
                new JobScriptInput()
                {
                    InputId    = "scriptInput2",
                    InputName  = "scriptInput2",
                    InputValue = "scriptValue2"
                },
            };

            var result = this.JobScheduleRepository.SaveJobSchedule(jobSchedule, jobInputs);

            Assert.That(result > 0);
            Assert.That(this.JobScheduleRepository.GetJobInputs(jobSchedule).All(jsi => jsi.JobScheduleId != 0 && jsi.JobScheduleId == jobSchedule.Id));
        }
示例#2
0
        public void TestCannotActivateRunningJob()
        {
            var jobSchedule = new JobSchedule()
            {
                RelativityScriptId = TEST_SCRIPT_ID,
                WorkspaceId        = TEST_WORKSPACE_ID,
                ExecutionSchedule  = 0x7F,
                ExecutionTime      = JobSchedule.TimeSeconds(DateTime.UtcNow),
                JobEnabled         = true
            };

            var jobInputs = new List <JobScriptInput>()
            {
                new JobScriptInput()
                {
                    InputId    = "scriptInput1",
                    InputName  = "scriptInput1",
                    InputValue = "scriptValue1"
                },
                new JobScriptInput()
                {
                    InputId    = "scriptInput2",
                    InputName  = "scriptInput2",
                    InputValue = "scriptValue2"
                },
            };
            var result = this.JobScheduleRepository.SaveJobSchedule(jobSchedule, jobInputs);
            var status = this.JobScheduleRepository.StartJob(jobSchedule);

            Assert.That(status == JobActivationStatus.Started);
            var activationStatus = this.JobScheduleRepository.ActivateJob(jobSchedule);

            Assert.That(activationStatus == JobActivationStatus.AlreadyRunning);
        }
示例#3
0
        private TimeSpan FindNextTriggerTimeSpanMonthly(JobSchedule schedule, TimeSpan startTimeOffset)
        {
            var result = startTimeOffset;

            if (schedule.TriggerMonths != JobTriggerMonths.NotConfigured)
            {
                var now          = DateTime.UtcNow.ToLocalTime();
                var triggerMonth = GetJobTriggerMonths(now);
                int numberOfDays = DateTime.DaysInMonth(now.Year, now.Month) - now.Day + 1;

                while (!schedule.TriggerMonths.HasFlag(triggerMonth))
                {
                    result       = result.Add(TimeSpan.FromDays(numberOfDays));
                    now          = now.AddDays(numberOfDays);
                    numberOfDays = DateTime.DaysInMonth(now.Year, now.Month);
                    triggerMonth = GetJobTriggerMonths(now);
                }

                result = FindNextTriggerTimeSpanWeekly(schedule, result, now);
            }
            else
            {
                Status = JobStatus.Misconfigured;
                _logger.Log(string.Format("Job by the name of \"{0}\" has a trigger type of \"{1}\" that is misconfigured.  This job will not run!", Configuration.Name, schedule.TriggerType), LogMessageSeverity.Critical);
                result = TimeSpan.MaxValue;
            }

            return(result);
        }
示例#4
0
        private TimeSpan FindNextTriggerTimeSpanWeekly(JobSchedule schedule, TimeSpan startTimeOffset, DateTime startDate)
        {
            var result = startTimeOffset;

            if (schedule.TriggerWeeks != JobTriggerWeeks.NotConfigured && schedule.TriggerDays != JobTriggerDays.NotConfigured)
            {
                var now         = startDate;
                var triggerWeek = GetJobTriggerWeeks(now);

                while (!TriggerWeeksCheck(schedule, now))
                {
                    result      = result.Add(TimeSpan.FromDays(1));
                    now         = now.AddDays(1);
                    triggerWeek = GetJobTriggerWeeks(now);
                }
            }
            else
            {
                Status = JobStatus.Misconfigured;
                _logger.Log(string.Format("Job by the name of \"{0}\" has a trigger type of \"{1}\" that is misconfigured.  This job will not run!", Configuration.Name, schedule.TriggerType), LogMessageSeverity.Critical);
                result = TimeSpan.MaxValue;
            }

            return(result);
        }
        public HttpResponseMessage JobWaypointInsert([FromBody] JobOrderUpdateRequest model)
        {
            if (!ModelState.IsValid)
            {
                return(Request.CreateErrorResponse(HttpStatusCode.BadRequest, ModelState));
            }

            int JobScheduleId = 0;

            JobSchedule Sched = new JobSchedule();

            Sched.JobId      = model.JobId;
            Sched.ScheduleId = model.ScheduleId;
            Sched.Date       = model.Date;
            if (model.Date != null && model.JobId != null)
            {
                try
                {
                    JobScheduleId = _ScheduleService.JobScheduleUpsert(Sched);
                }
                catch (System.Exception ex)
                {
                    throw (ex);
                }
            }
            JobScheduleItemsResponse <int> response = new JobScheduleItemsResponse <int>();

            response.Items = _JobsService.SaveJob(model);

            response.JobScheduleId = JobScheduleId;

            return(Request.CreateResponse(HttpStatusCode.OK, response));
        }
示例#6
0
        public void TestJobHistory()
        {
            var jobSchedule = new JobSchedule()
            {
                RelativityScriptId = TEST_SCRIPT_ID,
                WorkspaceId        = TEST_WORKSPACE_ID,
                ExecutionSchedule  = 0x7F,
                ExecutionTime      = JobSchedule.TimeSeconds(DateTime.UtcNow),
                JobEnabled         = true
            };

            var jobInputs = new List <JobScriptInput>()
            {
                new JobScriptInput()
                {
                    InputId    = "scriptInput1",
                    InputName  = "scriptInput1",
                    InputValue = "scriptValue1"
                },
                new JobScriptInput()
                {
                    InputId    = "scriptInput2",
                    InputName  = "scriptInput2",
                    InputValue = "scriptValue2"
                },
            };
            var result = this.JobScheduleRepository.SaveJobSchedule(jobSchedule, jobInputs);

            this.JobScheduleRepository.StartJob(jobSchedule);
            this.JobScheduleRepository.FinishJob(jobSchedule);
            int count;

            this.JobScheduleRepository.GetJobHistory(jobSchedule, out count);
            Assert.That(count == 1);
        }
示例#7
0
        private JobSchedule GetSchedule()
        {
            JobSchedule schedule;

            if (this.PageEditMode == PageMode.Create)
            {
                TimeFrequencyBase        timeFrequency        = GetTimeFrequency();
                JobScheduleFrequencyBase jobScheduleFrequency = GetJobScheduleFrequency();

                schedule = new JobSchedule(Guid.NewGuid().ToString(),
                                           txtScheduleName.Text, durationStartDate.Value, jobScheduleFrequency)
                {
                    Enabled = chbEnabled.Checked
                };
            }
            else
            {
                schedule                   = JobScheduleAdapter.Instance.Load(p => p.AppendItem("SCHEDULE_ID", this.ScheduleID))[0];
                schedule.Name              = txtScheduleName.Text;
                schedule.Enabled           = chbEnabled.Checked;
                schedule.StartTime         = durationStartDate.Value;
                schedule.ScheduleFrequency = GetJobScheduleFrequency();
            }

            if (radioEndDate.Checked && durationEndDate.Value != null)
            {
                schedule.EndTime = durationEndDate.Value;
            }
            else
            {
                schedule.EndTime = null;
            }

            return(schedule);
        }
示例#8
0
        public string AddJobSchedule <T>(T job, DateTime triggerDatetime)
        {
            var id = BackgroundJob.Schedule(
                () => JobScheduleHandler.Trigger(job),
                triggerDatetime);

            using (var scope = Applibs.AutofacConfig.Container.BeginLifetimeScope())
            {
                var jobName     = job.GetType().Name;
                var repo        = scope.Resolve <IJobScheduleRepository>();
                var jobSchedule = new JobSchedule()
                {
                    JobScheduleId       = id,
                    JobScheduleName     = jobName,
                    JobScheduleContent  = JsonConvert.SerializeObject(job),
                    CreateDateTimeStamp = TimeStampHelper.ToUtcTimeStamp(DateTime.Now)
                };

                repo.Add(jobSchedule);

                Console.WriteLine($"{DateTime.Now}-JobScheduleService AddJobSchedule:{JsonConvert.SerializeObject(jobSchedule)}");
            }

            return(id);
        }
示例#9
0
        public ActionResult Index()
        {
            JobSchedule JobSchedule = new JobSchedule();

            return(View(new LogSearch()
            {
                LogDate_Search = DateTime.Now,
                Jobs = JobSchedule.GetJobName(),
                Types = new List <SelectListItem>()
                {
                    new SelectListItem()
                    {
                        Text = "ALL Records", Value = "ALL", Selected = true
                    },
                    new SelectListItem()
                    {
                        Text = "INFO", Value = "INFO"
                    },
                    new SelectListItem()
                    {
                        Text = "DEBUG", Value = "DEBUG"
                    },
                    new SelectListItem()
                    {
                        Text = "ERROR", Value = "ERROR"
                    },
                    new SelectListItem()
                    {
                        Text = "Warning", Value = "Warning"
                    }
                }
            }));
        }
示例#10
0
        static void Main(string[] args)
        {
            Server server = new Server(".");

            // Get instance of SQL Agent SMO object
            JobServer jobServer = server.JobServer;
            Job job = null;
            JobStep step = null;
            JobSchedule schedule = null;

            // Create a schedule
            schedule = new JobSchedule(jobServer, "Schedule_1");
            schedule.FrequencyTypes = FrequencyTypes.OneTime;
            schedule.ActiveStartDate = DateTime.Today;
            schedule.ActiveStartTimeOfDay = new TimeSpan(DateTime.Now.Hour, (DateTime.Now.Minute + 2), 0);
            schedule.Create();

            // Create Job
            job = new Job(jobServer, "Job_1");
            job.Create();
            job.AddSharedSchedule(schedule.ID);
            job.ApplyToTargetServer(server.Name);

            // Create JobStep
            step = new JobStep(job, "Step_1");
            step.Command = "SELECT 1";
            step.SubSystem = AgentSubSystem.TransactSql;
            step.Create();
        }
        private static void RunTests(JobSchedule schedule, System.Collections.Generic.Dictionary <DateTime, DateTime> validRanges)
        {
            DateTime NOW = startTestTime;
            bool     expected, lastexpected = true;

            try
            {
                while (NOW <= endTestTime)
                {
                    expected = false;
                    NOW      = NOW.AddMinutes(1);
                    //NOW = DateTime.Parse("2/5/2011 9:00:00 PM");
                    foreach (var item in validRanges.Keys)
                    {
                        if (SamayEngine.IsBetWeen(item, validRanges[item], NOW))
                        {
                            expected = true;
                            break;
                        }
                    }


                    bool actual = SamayEngine.IsJobScheduledToRunNow(schedule, NOW);
                    Log(NOW, expected, ref lastexpected);
                    Assert.AreEqual(expected, actual);
                }
            }
            catch
            {
                throw new Exception("Failed for Time: " + NOW.ToString());
            }
        }
        public void TestBadSchedule()
        {
            var jobSchedule       = new JobSchedule();
            var nextExecutionTime = jobSchedule.GetNextExecution(DateTime.UtcNow);

            Assert.That(!nextExecutionTime.HasValue, "Empty schedule entry should have no next execution time");
        }
示例#13
0
        static void Main(string[] args)
        {
            JobSchedule   schedule = new JobSchedule();
            IJob          job      = new TestJob();
            RepeatTrigger trigger  = new RepeatTrigger(new TimeSpan(0, 0, 1), DateTime.Parse("9:00:00"), DateTime.Parse("22:08:00"));

            //trigger.IntervalBaseOnStartTime = true;
            //ITrigger trigger = new RepeatTrigger(new TimeSpan(0, 0, 5), DateTime.Parse("12:22:00"), 10);
            //ITrigger trigger = new SingleTrigger(DateTime.Parse("12:47:00"));
            //ITrigger trigger = new SingleTrigger(DateTime.Parse("12:59:00"),5, new TimeSpan(0, 0, 5));
            //ITrigger trigger = new SingleTrigger(DateTime.Parse("12:00:00"), DateTime.Parse("21:59:00"), 5, new TimeSpan(0, 0, 5));
            //ITrigger trigger2 = new SingleTrigger(DateTime.Parse("12:00:00"), DateTime.Parse("21:59:00"), 5, new TimeSpan(0, 0, 5));
            schedule.Add(job, trigger);
            //IJob job2 = new TestJob("test2",new IJob[] { job});

            schedule.Start();
            //Thread.Sleep(1000);
            //schedule.Add(job2, trigger2);
            //schedule.ClearExpiredJobs();
            Console.ReadKey();
            //schedule.ClearExpiredJobs();

            schedule.Stop(true);
            Console.ReadKey();
        }
示例#14
0
        public void OnDemand()
        {
            var on_demand      = JobSchedule.OnDemand();
            var should_be_null = on_demand.GetNextRunTime();

            Assert.Null(should_be_null);
        }
示例#15
0
        public ActionResult TaskList(String TaskName, string SubmitType)
        {
            JobSchedule         JobSchedule  = new JobSchedule();
            List <ScheduleTask> ScheduleTask = JobSchedule.ScheduleTask();

            if (SubmitType == "Run")
            {
                var ScheduleTask_Run = ScheduleTask.Where(t => t.TaskName.Equals(TaskName)).FirstOrDefault();
                if (ScheduleTask_Run != null)
                {
                    JobSchedule.CreateTask(ScheduleTask_Run, MasterScheduler);
                    MasterScheduler.ResumeJob(ScheduleTask_Run.TaskKey);
                    ScheduleTask_Run.Status = "Enabled";
                    JobSchedule.UpdateScheduleStatus(TaskName, "Enabled");
                }
            }
            else if (SubmitType == "Pause")
            {
                schFactory      = new StdSchedulerFactory();
                MasterScheduler = schFactory.GetScheduler();
                var ScheduleTask_Pause = ScheduleTask.Where(t => t.TaskName.Equals(TaskName)).FirstOrDefault();
                if (ScheduleTask_Pause != null)
                {
                    MasterScheduler.PauseJob(ScheduleTask_Pause.TaskKey);
                    ScheduleTask_Pause.Status = "Disabled";

                    JobSchedule.UpdateScheduleStatus(TaskName, "Disabled");
                }
            }
            return(PartialView(ScheduleTask));
        }
示例#16
0
        private JobScheduleModel NewJobScheduleModel(RelativityScript relativityScript, RelativityWorkspace relativityWorkspace)
        {
            var jobSchedule = new JobSchedule()
            {
                Name = $"{relativityWorkspace.Name} - {relativityScript.Name}",
                RelativityScriptId = relativityScript.RelativityScriptId,
                WorkspaceId        = relativityWorkspace.WorkspaceId
            };

            var inputs = this.RelativityScriptRepository
                         .GetScriptInputs(relativityScript, relativityWorkspace)
                         .Select(i => new JobScriptInputModel(i))
                         .ToList();

            var jobScheduleModel = new JobScheduleModel()
            {
                JobSchedule         = jobSchedule,
                RelativityWorkspace = relativityWorkspace,
                RelativityScript    = relativityScript,
                JobScriptInputs     = inputs,
                IsNew = true
            };

            return(jobScheduleModel);
        }
示例#17
0
        public void AsAbsolute()
        {
            var basic_schedule = JobSchedule.AsAbsolute().WithDailyTime(hour: 12, minute: 0, second: 0);             //every day at noon
            var noon           = basic_schedule.GetNextRunTime();

            var weekly_schedule = JobSchedule.AsAbsolute().WithWeeklyTime(dayOfWeek: DayOfWeek.Monday, hour: 12, minute: 0, second: 0);
            var noon_monday     = weekly_schedule.GetNextRunTime();

            var monthly_schedule = JobSchedule.AsAbsolute().WithMonthlyTime(day: 15, hour: 12, minute: 0, second: 0);
            var noon_15th        = monthly_schedule.GetNextRunTime();

            Assert.NotNull(noon);
            Assert.Equal(12, noon.Value.Hour);
            Assert.Equal(0, noon.Value.Minute);
            Assert.Equal(0, noon.Value.Second);

            Assert.NotNull(noon_monday);
            Assert.Equal(DayOfWeek.Monday, noon_monday.Value.DayOfWeek);
            Assert.Equal(12, noon_monday.Value.Hour);
            Assert.Equal(0, noon_monday.Value.Minute);
            Assert.Equal(0, noon_monday.Value.Second);

            Assert.NotNull(noon_15th);
            Assert.True(noon.Value.Year == DateTime.UtcNow.Year || noon.Value.Month == DateTime.UtcNow.Year + 1);
            Assert.True(noon.Value.Month == DateTime.UtcNow.Month || noon.Value.Month == DateTime.UtcNow.Month + 1);
            Assert.Equal(15, noon_15th.Value.Day);
            Assert.Equal(12, noon_15th.Value.Hour);
            Assert.Equal(0, noon_15th.Value.Minute);
            Assert.Equal(0, noon_15th.Value.Second);
        }
示例#18
0
        public string AddRecurJobSchedule <T>(T job, string cronExpression)
        {
            var id = Guid.NewGuid().ToString();

            RecurringJob.AddOrUpdate(
                id,
                () => JobScheduleHandler.Trigger(job),
                cronExpression);

            using (var scope = Applibs.AutofacConfig.Container.BeginLifetimeScope())
            {
                var jobName     = job.GetType().Name;
                var repo        = scope.Resolve <IJobScheduleRepository>();
                var jobSchedule = new JobSchedule()
                {
                    JobScheduleId       = id,
                    JobScheduleName     = jobName,
                    JobScheduleContent  = JsonConvert.SerializeObject(job),
                    CreateDateTimeStamp = TimeStampHelper.ToUtcTimeStamp(DateTime.Now)
                };

                repo.Add(jobSchedule);

                Console.WriteLine($"{DateTime.Now}-JobScheduleService AddJobSchedule:{JsonConvert.SerializeObject(jobSchedule)}");
            }

            return(id);
        }
示例#19
0
        public async Task <IHttpActionResult> Put([FromBody] JobSchedule jobSchedule)
        {
            try
            {
                var validation = m_db.GetValidationResult(jobSchedule);
                if (validation.IsValid)
                {
                    m_db.JobSchedules.Attach(jobSchedule);
                    m_db.SetModified(jobSchedule);
                    await m_db.SaveChangesAsync();

                    return(Ok(jobSchedule));
                }
                else
                {
                    AddErrorsToModelState(validation, ModelState);
                    return(BadRequest(ModelState));
                }
            }
            catch (Exception e)
            {
                m_logger.Error(e);
                return(new ExceptionResult(e, this));
            }
        }
示例#20
0
        internal static AgentScheduleInfo ConvertToAgentScheduleInfo(JobSchedule schedule)
        {
            AgentScheduleInfo scheduleInfo = new AgentScheduleInfo();

            scheduleInfo.Id                         = schedule.ID;
            scheduleInfo.Name                       = schedule.Name;
            scheduleInfo.JobName                    = " ";
            scheduleInfo.IsEnabled                  = schedule.IsEnabled;
            scheduleInfo.FrequencyTypes             = (Contracts.FrequencyTypes)schedule.FrequencyTypes;
            scheduleInfo.FrequencySubDayTypes       = (Contracts.FrequencySubDayTypes)schedule.FrequencySubDayTypes;
            scheduleInfo.FrequencySubDayInterval    = schedule.FrequencySubDayInterval;
            scheduleInfo.FrequencyRelativeIntervals = (Contracts.FrequencyRelativeIntervals)schedule.FrequencyRelativeIntervals;
            scheduleInfo.FrequencyRecurrenceFactor  = schedule.FrequencyRecurrenceFactor;
            scheduleInfo.FrequencyInterval          = schedule.FrequencyInterval;
            scheduleInfo.DateCreated                = schedule.DateCreated;
            scheduleInfo.ActiveStartTimeOfDay       = schedule.ActiveStartTimeOfDay;
            scheduleInfo.ActiveStartDate            = schedule.ActiveStartDate;
            scheduleInfo.ActiveEndTimeOfDay         = schedule.ActiveEndTimeOfDay;
            scheduleInfo.ActiveEndDate              = schedule.ActiveEndDate;
            scheduleInfo.JobCount                   = schedule.JobCount;
            scheduleInfo.ScheduleUid                = schedule.ScheduleUid;
            var scheduleData = new JobScheduleData(schedule);

            scheduleInfo.Description = scheduleData.Description;
            return(scheduleInfo);
        }
示例#21
0
        public static void AddJobToEngine(Job job, object ScheduleObj)
        {
            jobsList.Add(job);
            job.Enabled = true;

            JobSchedule schedule = new JobSchedule();

            schedule.ScheduleConfig = ScheduleObj;
            job.Schedules           = new List <JobSchedule> {
                schedule
            };

            job.TaskChain = new TaskChain();
            Task task = new Task();

            task.ClassName = "JobsNS.CalculatePi";
            task.LogLevel  = LogLevel.Info;

            TaskParameter p = new TaskParameter();

            p.Name  = "PiLength";
            p.Value = new List <string> {
                "2"
            };
            task.param = new List <TaskParameter> {
                p
            };
            job.TaskChain.Task = new List <Task> {
                task
            };
        }
示例#22
0
        public IHttpActionResult AddJobSchedule(JobSchedule job)
        {
            if (job.id != 0)
            {
                var exist = SipDataEntity.JobSchedule.Where(x => x.id == job.id).FirstOrDefault();
                if (exist != null)
                {
                    //SipDataEntity.JobSchedule.Remove(exist);


                    foreach (JobShift item in job.JobShift)
                    {
                        foreach (ShiftPersons it in item.ShiftPersons)
                        {
                            SipDataEntity.ShiftPersons.AddOrUpdate(it);
                        }
                        SipDataEntity.JobShift.AddOrUpdate(item);
                    }
                    SipDataEntity.JobSchedule.AddOrUpdate(job);

                    // SipDataEntity.SaveChanges();
                }
            }
            else
            {
                SipDataEntity.JobSchedule.Add(job);
            }
            SipDataEntity.SaveChanges();


            return(Ok("Saved"));
        }
        public static bool IsJobScheduledToRunNow(JobSchedule jobSchedule, DateTime NOW)
        {
            switch (jobSchedule.JobScheduleType)
            {
            case JobScheduleTypeEnum.JobScheduleDaily:
                JobScheduleDaily daily = JsonConvert.DeserializeObject <JobScheduleDaily>(jobSchedule.ScheduleConfig.ToString());
                return(IsTimeToRunNow(GetDailyTime(daily, NOW), NOW));

            case JobScheduleTypeEnum.JobScheduleWeekly:
                JobScheduleWeekly weekly = JsonConvert.DeserializeObject <JobScheduleWeekly>(jobSchedule.ScheduleConfig.ToString());
                return(DoWeeklyCheck(weekly, NOW));

            case JobScheduleTypeEnum.JobScheduleMonthly:
                JobScheduleMonthly monthly = JsonConvert.DeserializeObject <JobScheduleMonthly>(jobSchedule.ScheduleConfig.ToString());
                return(IsTimeToRunNow(GetMonthlyTime(monthly, NOW), NOW));

            case JobScheduleTypeEnum.JobScheduleYearly:
                JobScheduleYearly yearly = JsonConvert.DeserializeObject <JobScheduleYearly>(jobSchedule.ScheduleConfig.ToString());
                return(IsTimeToRunNow(GetYearlyTime(yearly, NOW), NOW));

            case JobScheduleTypeEnum.JobScheduleOneTimeOnly:
                JobScheduleOneTimeOnly oneTime = JsonConvert.DeserializeObject <JobScheduleOneTimeOnly>(jobSchedule.ScheduleConfig.ToString());
                return(DoOneTimeOnlyCheck(oneTime, NOW));

            default:
                throw new Exception("Unknown Schedule Type: " + jobSchedule.JobScheduleType.ToString());
            }
        }
示例#24
0
        public JsonResult EditCronString(string TaskName, string CronString)
        {
            JobSchedule JobSchedule = new JobSchedule();

            try
            {
                var Trigger = TriggerBuilder.Create()
                              .WithIdentity(TaskName + "Trigger", TaskName + "TriggerGroup").WithCronSchedule(CronString).Build();
                JobSchedule.UpdateScheduleCron(TaskName, CronString);
                List <ScheduleTask> ScheduleTask = JobSchedule.ScheduleTask();
                var ScheduleTask_Run             = ScheduleTask.Where(t => t.TaskName.Equals(TaskName)).FirstOrDefault();
                if (ScheduleTask_Run != null)
                {
                    var OldStatus = ScheduleTask_Run.Status;
                    MasterScheduler.PauseJob(ScheduleTask_Run.Job.Key);
                    JobSchedule.RemoveTask(ScheduleTask_Run, MasterScheduler);
                    JobSchedule.CreateTask(ScheduleTask_Run, MasterScheduler);
                    if (OldStatus == "Enabled")
                    {
                        MasterScheduler.ResumeJob(ScheduleTask_Run.TaskKey);
                        ScheduleTask_Run.Status = "Enabled";
                    }
                }
                return(Json("Success"));
            }
            catch (Exception ex)
            {
                return(Json(ex.Message));
            }
        }
示例#25
0
 private static ITrigger CreateTrigger(JobSchedule schedule)
 {
     return(TriggerBuilder.Create()
            .WithIdentity($"{schedule.Type.FullName}.trigger")
            .WithCronSchedule(schedule.Cron)
            .WithDescription(schedule.Cron)
            .Build());
 }
示例#26
0
 private static ITrigger CreateTriggerOnlyRun(JobSchedule schedule)
 {
     return(TriggerBuilder
            .Create()
            .WithIdentity($"{schedule.JobType.FullName}.trigger")
            .WithDescription(schedule.CronExpression)
            .Build());
 }
示例#27
0
 private ITrigger CreateJobTrigger(JobSchedule jobSchedule)
 {
     return(TriggerBuilder.Create()
            .WithIdentity($"{jobSchedule.JobType.FullName}.trigger")
            .WithCronSchedule(jobSchedule.CronExpression)
            .WithDescription(jobSchedule.CronExpression)
            .Build());
 }
示例#28
0
 public void Configuration(IAppBuilder app)
 {
     GlobalConfiguration.Configuration.UseSqlServerStorage("HangfireConnectionStringServer");
     RecurringJob.AddOrUpdate(() => JobSchedule.ChangeOrderStatusJob(), Cron.Hourly);
     RecurringJob.AddOrUpdate(() => JobSchedule.SendKeyAdmin(), Cron.Daily);
     app.UseHangfireDashboard();
     app.MapSignalR();
 }
示例#29
0
        /// <summary>
        /// Convert a jobSchedule received with UTC parameters ExecutionTime and Schedule to local
        /// </summary>
        /// <param name="jobSchedule">UTC Jobschedule</param>
        /// <returns>Local Jobschedule</returns>
        public static JobSchedule ConvertUtcToLocal(this JobSchedule jobSchedule)
        {
            int utcExecutionTime = jobSchedule.ExecutionTime + ScheduleConversionHelper.LocalOffset;

            jobSchedule.LastExecutionTime = jobSchedule.LastExecutionTime?.ToLocalTime();
            jobSchedule.NextExecutionTime = jobSchedule.NextExecutionTime?.ToLocalTime();
            return(ShiftSchedule(jobSchedule, utcExecutionTime));
        }
示例#30
0
        public void CreateJob(WAMSQLJob wamJob, string server = "localhost")
        {
            Server srv = null;

            if (server == "localhost")
            {
                srv = ConnectToLocalDatabase(_username, _password);
            }
            else
            {
                srv = ConnectToRemoteDatabase(server, _username, _password);
            }

            if (srv != null)
            {
                try
                {
                    Job job = new Job(srv.JobServer, wamJob.Name);
                    job.Description = wamJob.Description;
                    job.Create();

                    JobStep jobStep = new JobStep(job, wamJob.JobStepName);
                    jobStep.Command         = wamJob.JobStepCommand;
                    jobStep.OnSuccessAction = StepCompletionAction.GoToStep;
                    jobStep.OnSuccessStep   = 2;
                    jobStep.OnFailAction    = StepCompletionAction.GoToStep;
                    jobStep.OnFailStep      = 3;
                    jobStep.Create();

                    JobStep successStep = new JobStep(job, "ReportSuccess");
                    successStep.Command         = $"INSERT INTO WAM.dbo.JobHistory VALUES(NEWID(),{wamJob.JobStepName},'SQL',GETDATE(),'Success',null)";
                    successStep.OnSuccessAction = StepCompletionAction.QuitWithSuccess;
                    successStep.OnFailAction    = StepCompletionAction.GoToStep;
                    successStep.OnFailStep      = 3;
                    successStep.Create();

                    JobStep failStep = new JobStep(job, "ReportFailure");
                    failStep.Command         = $"INSERT INTO WAM.dbo.JobHistory VALUES(NEWID(),{wamJob.JobStepName},'SQL',GETDATE(),'Failure','Not Available'";
                    failStep.OnSuccessAction = StepCompletionAction.QuitWithSuccess;
                    failStep.OnFailAction    = StepCompletionAction.QuitWithFailure;
                    failStep.Create();

                    JobSchedule jobSched = new JobSchedule(job, wamJob.ScheduleName);
                    jobSched.FrequencyTypes            = wamJob.ScheduleFrequencyType;
                    jobSched.FrequencyRecurrenceFactor = wamJob.ScheduleFrequencyRecurrenceFactor;
                    jobSched.FrequencyInterval         = wamJob.ScheduleFrequencyInterval;
                    jobSched.ActiveStartTimeOfDay      = wamJob.ScheduleActiveStartTimeOfDay;
                    jobSched.Create();
                } catch (Exception ex)
                {
                    throw new Exception("Failed To Create Job: " + wamJob.Name + " - " + ex.Message);
                }
            }
            else
            {
                throw new Exception("Failed To Connect to SQL Job Server");
            }
        }
    protected override void MarketInit()
    {
        DateTime curDate = Clock.Now.Date;      //策略当前运行时间

        Console.WriteLine("日期:" + curDate.ToString("yyyy-MM-dd"));
        this.MarketOpen = true;

        //连接数据提供者
        DateTime beginDate = curDate.AddDays(-1);
        DateTime endDate   = curDate.AddMonths(2);

        //下面返回的交易日历是beginDate到endDate前一天为止的交易日历
        this.tradeDates = this.getTradeDates("SHSE", beginDate.ToString("yyyy-MM-dd"), endDate.ToString("yyyy-MM-dd"));

        if ((this.tradeDates.Count > 0) && (!this.tradeDates.Contains(curDate)))
        {
            Console.WriteLine("今天不是交易日");
            this.MarketOpen = false;
            return;
        }
        int i = this.tradeDates.IndexOf(curDate);

        if (i >= 0 && i + 1 < this.tradeDates.Count)
        {
            this.Global["NextTradeDate"] = this.tradeDates[i + 1].ToString("yyyy-MM-dd");        //下一个交易日
        }
        //在实盘模式下需要等待头一天的作业完成,才能市场初始化,进行今天的交易,故而这里设置等待一个信号量
        if (this.StrategyMode == StrategyMode.Live)
        {
            this.autoEvent.WaitOne();
        }
        /*添加市场并初始化*/
        //Marketor marketor=new UpLimitStockMarketor(this);
        //marketor.OnInit();

        if (this.StrategyMode == StrategyMode.Live)
        {
            this.closeAllJobSchedules();
            //在实盘模式下,进行重连接市场数据提供者和交易提供者
            JobSchedule jbs1 = new JobSchedule(this.buildReconnectJobs(),
                                               curDate.Add(new TimeSpan(9, 0, 0)), 5, new TimeSpan(0, 1, 0));
            this.jobSchedules.Add(jbs1);

            //添加随机交易作业
            JobSchedule jbs3 = new JobSchedule(new RandomTradeJob("随机交易作业", this),
                                               curDate.Add(new TimeSpan(11, 11, 0)), 10, new TimeSpan(0, 20, 0));
            this.jobSchedules.Add(jbs3);
            //添加存储交易记录作业
            JobSchedule jbs4 = new JobSchedule(new SaveTradeRecordJob("存储交易记录作业", this),
                                               curDate.Add(new TimeSpan(15, 3, 0)), 10, new TimeSpan(0, 20, 0));
            this.jobSchedules.Add(jbs4);

            //在实盘模式下,调度每天要进行额外的作业,作业完成后发出一个信号量,通知可以进行下一天的交易
            JobSchedule jbs5 = new JobSchedule(this.buildDayJobs(), curDate.Add(new TimeSpan(21, 30, 0))
                                               , 5, new TimeSpan(0, 20, 0), this.autoEvent);
            this.jobSchedules.Add(jbs5);
        }
    }
		public SimpleSchedule(JobSchedule jobSchedule)
		{
			this.ID = jobSchedule.ID;
			this.Name = jobSchedule.Name;
			this.Description = jobSchedule.Description;
			this.Enabled = jobSchedule.Enabled;
			this.StartTime = jobSchedule.StartTime;
			this.EndTime = jobSchedule.EndTime;
		}
        public void remove_obsolete_jobs()
        {
            var schedule = new JobSchedule(new[]
            {
                new JobStatus(typeof (AJob), DateTime.Today),
                new JobStatus(typeof (BJob), DateTime.Today),
            });

            schedule.RemoveObsoleteJobs(new Type[]{typeof(AJob), typeof(CJob)});
            schedule.Find(typeof (BJob)).Status.ShouldEqual(JobExecutionStatus.Inactive);
        }
        public void SetUp()
        {
            theExecutor = new StubJobExecutor();

            theSchedule = new JobSchedule(new[]
            {
                JobStatus.For<AJob>(DateTime.Today),
                JobStatus.For<BJob>(DateTime.Today.AddHours(1)),
                JobStatus.For<CJob>(DateTime.Today.AddHours(2)),
            });

            theGraph = new ScheduledJobGraph();
            theGraph.Jobs.Add(new ScheduledJob<BJob>(new DummyScheduleRule(DateTime.Today.AddHours(1))));
            theGraph.Jobs.Add(new ScheduledJob<CJob>(new DummyScheduleRule(DateTime.Today.AddHours(3))));
            theGraph.Jobs.Add(new ScheduledJob<DJob>(new DummyScheduleRule(DateTime.Today.AddHours(4))));
            theGraph.Jobs.Add(new ScheduledJob<EJob>(new DummyScheduleRule(DateTime.Today.AddHours(5))));

            // not that worried about pushing the time around
            theGraph.DetermineSchedule(now, theExecutor, theSchedule);
        }
示例#35
0
 public JobService()
 {
     var loggerFactory = new DefaultLoggerFactory();
     _logger = loggerFactory.GetLogger(this.GetType().ToString());
     _jobSchedule = new JobSchedule();
 }
示例#36
0
        /// <summary>
        /// 创建立即调度的计划
        /// </summary>
        /// <returns></returns>
        internal static JobSchedule CreateImmediateSchedule()
        {
            DateTime now = DateTime.Now;
            DateTime execTime = now.AddSeconds(2);

            FixedTimeFrequency timeFrequency = new FixedTimeFrequency(new TimeSpan(execTime.Hour, execTime.Minute, execTime.Second));
            DailyJobScheduleFrequency frequency = new DailyJobScheduleFrequency(1, timeFrequency);
            JobSchedule schedule = new JobSchedule(UuidHelper.NewUuidString(), "立即执行", DateTime.Now, frequency);

            schedule.SchduleType = JobSchduleType.Temporary;
            schedule.StartTime = now.AddHours(-1);
            schedule.EndTime = now.AddDays(1);
            return schedule;
        }
示例#37
0
		private static JobSchedule CreateSchedule()
		{
			string scheduleID = Guid.NewGuid().ToString();
			string scheduleName = "计划名称" + DateTime.Now.ToString();
			DateTime sTime = DateTime.Now.AddMonths(-1);
			DateTime eTime = DateTime.Now.AddMonths(1);

			TimeFrequencyBase timeFre = CreateTimeFrequency();
			JobScheduleFrequencyBase schFre = CreateSchFrequency(timeFre);

			JobSchedule schedule = new JobSchedule(scheduleID, scheduleName,
				sTime, eTime, schFre);

			return schedule;
		}
		private JobSchedule GetSchedule()
		{
			JobSchedule schedule;

			if (this.PageEditMode == PageMode.Create)
			{
				TimeFrequencyBase timeFrequency = GetTimeFrequency();
				JobScheduleFrequencyBase jobScheduleFrequency = GetJobScheduleFrequency();

				schedule = new JobSchedule(Guid.NewGuid().ToString(),
					txtScheduleName.Text, durationStartDate.Value, jobScheduleFrequency)
					{
						Enabled = chbEnabled.Checked
					};
			}
			else
			{
				schedule = JobScheduleAdapter.Instance.Load(p => p.AppendItem("SCHEDULE_ID", this.ScheduleID))[0];
				schedule.Name = txtScheduleName.Text;
				schedule.Enabled = chbEnabled.Checked;
				schedule.StartTime = durationStartDate.Value;
				schedule.ScheduleFrequency = GetJobScheduleFrequency();
			}

			if (radioEndDate.Checked && durationEndDate.Value != null)
			{
				schedule.EndTime = durationEndDate.Value;
			}
			else
			{
				schedule.EndTime = null;
			}

			return schedule;
		}
示例#39
0
		private static JobSchedule CreateSingleTimeSchedule()
		{
			DateTime now = DateTime.Now;
			DateTime execTime = now.AddSeconds(6);

			FixedTimeFrequency timeFrequency = new FixedTimeFrequency(new TimeSpan(execTime.Hour, execTime.Minute, execTime.Second));
			DailyJobScheduleFrequency frequency = new DailyJobScheduleFrequency(1, timeFrequency);
			JobSchedule schedule = new JobSchedule(UuidHelper.NewUuidString(), "一般调度", now.AddDays(-1), frequency);

			schedule.SchduleType = JobSchduleType.Temporary;
			schedule.EndTime = now.AddHours(1);

			return schedule;
		}
示例#40
0
        /// <summary>
        /// 创建包含步骤和计划的作业,返回 string  jobid, Kill的JOB
        /// </summary>
        /// <param name="KeyId">对象ID</param>
        /// <returns>返回 string</returns>
        public string Create(string KeyId, string JobType)
        {
            try
            {

                #region 定义变量

                //数据库名称
                string strDatabaseName = string.Empty;

                //作业名称
                string strJobName = string.Empty;

                //作业ID
                string strJobID = string.Empty;

                //作业说明
                string strDescription = string.Empty;

                //开始时间
                DateTime dtStartDate = System.DateTime.Now;

                //计划频率,Daily:每天、Weekly:每周、Monthly:每月、Run Once:只运行一次
                FrequencyTypes FrequencyType = FrequencyTypes.Daily;

                //开始运行时间 如:10:30:00
                string strRunStartDate = string.Empty;

                //结束运行时间,如:11:05:00
                string strRunEndDate = string.Empty;

                //数据库服务名
                string strSQLServer = string.Empty;

                //数据库登录用户
                string strUser = string.Empty;

                //数据库登录密码
                string strPassword = string.Empty;

                //时
                int hours = 0;

                //分
                int minutes = 0;

                //秒
                int seconds = 0;

                //命令行
                string JobCommandString = string.Empty;
                vSchedulerEmailBackup vSchedulerEmailBackupObj = null;

                #endregion

                //返回vSchedulerEmailBackup 对象,根据id查询
                vSchedulerEmailBackupObj = this.FindvSchedulerEmailBackupById(KeyId);
                if (vSchedulerEmailBackupObj != null)
                {
                    #region 变量赋值

                    //strDatabaseName = "ServiceDirectDB";
                    strDatabaseName = this.GetConfig("strDatabaseName");
                    string[] strJobNames = vSchedulerEmailBackupObj.TaskName.Split('-');
                    strJobName = strJobNames[0].ToString() + "-Kill";

                    if (vSchedulerEmailBackupObj.JobID != null)
                    {
                        strJobID = vSchedulerEmailBackupObj.JobID.ToString();
                    }
                    strDescription = "KillUTP";
                    dtStartDate = Convert.ToDateTime(vSchedulerEmailBackupObj.RunOnlyEnd);
                    switch (vSchedulerEmailBackupObj.ScheduleType)
                    {
                        case "Daily":
                            FrequencyType = FrequencyTypes.Daily;
                            break;
                        case "Run Once":
                            FrequencyType = FrequencyTypes.OneTime;
                            break;
                    }
                    DateTime dtRunOnlyStart = Convert.ToDateTime(vSchedulerEmailBackupObj.RunOnlyStart);
                    DateTime dtRunOnlyEnd = Convert.ToDateTime(vSchedulerEmailBackupObj.RunOnlyEnd);
                    strRunStartDate = dtRunOnlyStart.ToLongTimeString();
                    strRunEndDate = dtRunOnlyEnd.ToLongTimeString();

                    //开始运行时间 时:分:秒:
                    hours = dtRunOnlyEnd.Hour;
                    //结束时间减去5分钟之后在运行Kill的JOB
                    minutes = dtRunOnlyEnd.Minute - 5;
                    seconds = dtRunOnlyEnd.Second;

                    //获取自定义config的值
                    strSQLServer = this.GetConfig("strSQLServer");
                    strUser = this.GetConfig("strUser");
                    strPassword = this.GetConfig("strPassword");
                    #endregion
                    #region 创建作业

                    ServiceDirectDBEntities objDB = new ServiceDirectDBEntities();

                    //获取数据库名
                    string strdatabase = objDB.Connection.Database;

                    //获取数据库服务器名
                    string strDataSource = objDB.Connection.DataSource;
                    ServerConnection conn = null;
                    Server myServer = null;
                    conn = new ServerConnection(strSQLServer, strUser, strPassword);
                    myServer = new Server(conn);

                    string KillID = string.Empty;

                    //调用删除job方法,传入job名称
                    //DeleteJob(KillID);
                    DeleteJob(strJobID);

                    Job jb = new Job(myServer.JobServer, strJobName);
                    jb.Description = strDescription;

                    //更改JOB状态
                    if (JobType == "enable")
                    {
                        jb.IsEnabled = true;
                    }
                    switch (JobType)
                    {
                        case "enable":
                            jb.IsEnabled = true;
                            break;
                        case "disable":
                            jb.IsEnabled = false;
                            break;
                        case "Insert":
                            jb.IsEnabled = true;
                            break;
                    }

                    //创建JOB
                    jb.Create();
                    #endregion 创建作业

                    #region 作业步骤

                    Steps steps = new Steps();

                    //创建步骤
                    steps.CreateStepKill(jb, strDatabaseName, KeyId);

                    #endregion 作业步骤

                    #region 作业计划属性

                    JobSchedule jbsch = new JobSchedule(jb, "ScheduleKill");

                    //计划频率,每几天一次
                    jbsch.FrequencyTypes = FrequencyType;
                    if (vSchedulerEmailBackupObj.ScheduleType.Equals("Daily"))
                    {
                        //执行间隔 (天)
                        jbsch.FrequencyInterval = 1;

                        //当天只执行一次
                        jbsch.FrequencySubDayTypes = FrequencySubDayTypes.Once;
                    }
                    if (strRunStartDate != string.Empty)
                    {
                        //开始执行时间
                        jbsch.ActiveStartTimeOfDay = new TimeSpan(hours, minutes, seconds);
                    }

                    //持续时间
                    if (dtStartDate != null)
                    {
                        //开始时间
                        jbsch.ActiveStartDate = dtStartDate;
                    }
                    else
                    {
                        jbsch.ActiveStartDate = DateTime.Now;
                    }

                    //创建SQL代理实例的作业调度
                    jbsch.Create();
                    jb.ApplyToTargetServer(myServer.JobServer.Name);

                    //创建成功后立刻执行一次开始
                    //jb.Start();

                    //创建成功后立刻执行一次结束
                    #endregion 作业计划属性

                    string KillJobID = jb.JobID.ToString();
                    string BillinJobID = string.Empty;
                    BillinJobID = this.CreateBilling(KeyId, JobType, KillJobID);
                    //返回作业GUID
                    return BillinJobID;
                }
                else
                {
                    return "";
                }

            }
            catch (Exception)
            {
                return "";
            }
        }
        private bool UpdateSQLJob(int nPeriod, bool bEnable, int nFreq, ref string err)
        {
            ServerConnection conn = null;
            try
            {
                string connstring = System.Configuration.ConfigurationManager.ConnectionStrings["SQLJob"].ConnectionString;

                System.Data.SqlClient.SqlConnection sqlconn = new System.Data.SqlClient.SqlConnection(connstring);
                conn = new ServerConnection(sqlconn);

                Server server = new Server(conn);

                // Get instance of SQL Agent SMO object
                JobServer jobServer = server.JobServer;
                Job job = jobServer.Jobs["EmailDispatch"];

                if (job == null)
                {
                    // Create Job
                    job = new Job(jobServer, "EmailDispatch");
                    job.Create();
                    //job.AddSharedSchedule(schedule.ID);
                    //job.ApplyToTargetServer(server.Name);
                }

                JobStep step = job.JobSteps["EmailDispatchProcess"];
                if (step == null)
                {
                    // Create JobStep
                    step = new JobStep(job, "EmailDispatchProcess");
                    step.Command = "EXEC P_EmailDispatchForSchedule";
                    step.SubSystem = AgentSubSystem.TransactSql;
                    step.DatabaseName = conn.DatabaseName;

                    step.Create();
                }

                JobSchedule schedule = job.JobSchedules["MinuteDispatch"];
                if (schedule == null)
                {
                    // Create a schedule
                    schedule = new JobSchedule(job, "MinuteDispatch");
                    schedule.ActiveStartDate = DateTime.Today;
                    schedule.FrequencyTypes = FrequencyTypes.Daily;
                    schedule.FrequencyInterval = 1;
                    if (nFreq == 0)
                        schedule.FrequencySubDayTypes = FrequencySubDayTypes.Hour;
                    else if(nFreq == 1)
                        schedule.FrequencySubDayTypes = FrequencySubDayTypes.Minute;

                    schedule.FrequencySubDayInterval = nPeriod;
                    //schedule.ActiveStartTimeOfDay = new TimeSpan(DateTime.Now.Hour, (DateTime.Now.Minute + 2), 0);
                    schedule.Create();

                    job.AddSharedSchedule(schedule.ID);
                    job.ApplyToTargetServer("(local)");

                }
                else
                {
                    if (nFreq == 0)
                        schedule.FrequencySubDayTypes = FrequencySubDayTypes.Hour;
                    else if (nFreq == 1)
                        schedule.FrequencySubDayTypes = FrequencySubDayTypes.Minute;

                    schedule.FrequencySubDayInterval = nPeriod;

                    schedule.Alter();
                }

                job.IsEnabled = bEnable;
                job.Alter();

                conn.Disconnect();
                return true;
            }
            catch (Exception ex)
            {
                err = ex.Message;
                if(conn != null)
                    conn.Disconnect();
                return false;
            }
        }