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)); }
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); }
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); }
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)); }
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); }
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); }
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); }
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" } } })); }
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"); }
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(); }
public void OnDemand() { var on_demand = JobSchedule.OnDemand(); var should_be_null = on_demand.GetNextRunTime(); Assert.Null(should_be_null); }
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)); }
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); }
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); }
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); }
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)); } }
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); }
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 }; }
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()); } }
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)); } }
private static ITrigger CreateTrigger(JobSchedule schedule) { return(TriggerBuilder.Create() .WithIdentity($"{schedule.Type.FullName}.trigger") .WithCronSchedule(schedule.Cron) .WithDescription(schedule.Cron) .Build()); }
private static ITrigger CreateTriggerOnlyRun(JobSchedule schedule) { return(TriggerBuilder .Create() .WithIdentity($"{schedule.JobType.FullName}.trigger") .WithDescription(schedule.CronExpression) .Build()); }
private ITrigger CreateJobTrigger(JobSchedule jobSchedule) { return(TriggerBuilder.Create() .WithIdentity($"{jobSchedule.JobType.FullName}.trigger") .WithCronSchedule(jobSchedule.CronExpression) .WithDescription(jobSchedule.CronExpression) .Build()); }
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(); }
/// <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)); }
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); }
public JobService() { var loggerFactory = new DefaultLoggerFactory(); _logger = loggerFactory.GetLogger(this.GetType().ToString()); _jobSchedule = new JobSchedule(); }
/// <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; }
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; }
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; }
/// <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; } }