Exemple #1
0
 public bool Remove(Guid jobId)
 {
     lock (syncLock)
     {
         if (JobRuntimePool.ContainsKey(jobId))
         {
             JobRuntimeInfo jobRuntimeInfo = null;
             JobRuntimePool.TryGetValue(jobId, out jobRuntimeInfo);
             if (jobRuntimeInfo != null)
             {
                 var tiggerKey = new TriggerKey(jobRuntimeInfo.JobModel.JobName,
                                                jobRuntimeInfo.JobModel.JobGroup);
                 scheduler.PauseTrigger(tiggerKey);
                 scheduler.UnscheduleJob(tiggerKey);
                 scheduler.DeleteJob(new JobKey(jobRuntimeInfo.JobModel.JobName,
                                                jobRuntimeInfo.JobModel.JobGroup));
                 JobRuntimePool.TryRemove(jobId, out jobRuntimeInfo);
                 JobOperator.UpdateJobStatus(jobRuntimeInfo.JobModel.ID, 0);
                 if (!JobRuntimePool.Any(p => p.Value.AppDomain == jobRuntimeInfo.AppDomain))
                 {
                     AppDomainLoader <BaseJob> .UnLoad(jobRuntimeInfo.AppDomain);
                 }
                 return(true);
             }
         }
         return(false);
     }
 }
Exemple #2
0
        static int Main(string[] args)
        {
            return((int)HostFactory.Run(x =>
            {
                GlobalConfiguration.ConfigureDBConnectionString();

                x.UseLog4Net("log4net.config");

                x.UseAssemblyInfoForServiceInfo();

                x.Service <WebServer>(s =>
                {
                    s.ConstructUsing(name => new WebServer(new JobWatcher("Jobs", cl =>
                    {
                        var assemblyNames = cl.Select(c => Path.GetFileNameWithoutExtension(c)).ToList();
                        foreach (var assemblyName in assemblyNames)
                        {
                            var jobInfos = JobOperator.GetJobInfoList(assemblyName);
                            JobPoolManager.Instance.RemoveAll(jobInfos.Select(t => t.ID).ToList());
                            jobInfos.ForEach(jobInfo => JobPoolManager.Scheduler.ScheduleJob(jobInfo));
                        }
                    })));
                    s.WhenStarted(tc => tc.Start());
                    s.WhenStopped(tc => tc.Stop());
                });

                x.RunAsLocalSystem();
            }));
        }
        public void TriggerComplete(ITrigger trigger, IJobExecutionContext context, SchedulerInstruction triggerInstructionCode)
        {
            var jobKey = context.JobDetail.Key;

            //Logger.Instance.InfoFormat($"{jobKey.Name}--{jobKey.Group} completed,{context.NextFireTimeUtc.Value.DateTime}");
            JobOperator.UpdateNextFireTimeAsync(jobKey.Name, jobKey.Group, TimeZoneInfo.ConvertTimeFromUtc(context.NextFireTimeUtc.Value.DateTime, TimeZoneInfo.Local)).Wait();
        }
Exemple #4
0
        public override bool BeforeExecute(JobExecutionContext context)
        {
            base.BeforeExecute(context);
            //Gets the dependent job list and schedule them.
            var dependentJobs = JobOperator.GetDependentJobInfoList(context.JobName, context.JobGroup);

            JobExecutor.Execute(dependentJobs);
            return(true);
        }
Exemple #5
0
 public bool RemoveAll(List <Guid> jboIds)
 {
     foreach (var jobId in jboIds)
     {
         JobOperator.UpdateJobStatus(jobId, 0);
         Remove(jobId);
     }
     return(true);
 }
Exemple #6
0
 public virtual void Dispose()
 {
     if (scheduler != null && !scheduler.IsShutdown)
     {
         foreach (var jobId in JobRuntimePool.Keys)
         {
             JobOperator.UpdateJobStatus(jobId, 0);
         }
         scheduler.Shutdown();
     }
 }
        public bool VetoJobExecution(ITrigger trigger, IJobExecutionContext context)
        {
            var jobKey = context.JobDetail.Key;
            //Logger.Instance.InfoFormat($"{jobKey.Name}--{jobKey.Group} executing,{context.FireTimeUtc.Value.DateTime}");
            var jobStatus = JobOperator.GetJobStatus(jobKey.Name, jobKey.Group);

            if (jobStatus == 0)
            {
                return(true);               //When returns true, the job would't be executed.
            }
            JobOperator.UpdateRecentRunTimeAsync(jobKey.Name, jobKey.Group, TimeZoneInfo.ConvertTimeFromUtc(context.FireTimeUtc.Value.DateTime, TimeZoneInfo.Local)).Wait();
            return(false);
        }
Exemple #8
0
        public bool Add(Guid jobId, JobRuntimeInfo jobRuntimeInfo)
        {
            lock (syncLock)
            {
                if (!JobRuntimePool.ContainsKey(jobId))
                {
                    var jobInfo  = jobRuntimeInfo.JobModel;
                    var jobName  = jobInfo.JobName;
                    var jobGroup = string.IsNullOrWhiteSpace(jobInfo.JobGroup) ? null : jobInfo.JobGroup;
                    var jobKey   = new JobKey(jobName, jobGroup);
                    if (JobRuntimePool.TryAdd(jobId, jobRuntimeInfo))
                    {
                        //Set job status to stop
                        if (JobOperator.UpdateJobStatus(jobInfo.ID, 0))
                        {
                            jobInfo.Status = 0;
                        }

                        IDictionary <string, object> jobData = new Dictionary <string, object>()
                        {
                            ["JobId"] = jobInfo.ID.ToString()
                        };

                        //Builds the job detail
                        var jobDetail = JobBuilder.Create <QuartzJob>()
                                        .WithIdentity(jobKey)
                                        .SetJobData(new JobDataMap(jobData))
                                        .Build();

                        //Builds the job trigger
                        var jobTriggerBuilder = TriggerBuilder.Create()
                                                .WithIdentity($"{jobName}Trigger", jobGroup)
                                                .WithDescription($"{jobName} Trigger")
                                                .WithCronSchedule(jobInfo.CronExpression, x => x.WithMisfireHandlingInstructionDoNothing());
                        //if (jobInfo.StartTime.HasValue)
                        //    jobTriggerBuilder.StartAt(jobInfo.StartTime.Value);
                        //if (jobInfo.EndTime.HasValue)
                        //    jobTriggerBuilder.EndAt(jobInfo.EndTime.Value);
                        var jobTrigger = jobTriggerBuilder.Build();

                        //Decides whether to schedule the job by status
                        scheduler.ScheduleJob(jobDetail, jobTrigger);
                        //if (jobInfo.Status == 0) scheduler.PauseJob(jobKey);
                        return(true);
                    }
                }
                return(false);
            }
        }
Exemple #9
0
 public override void AfterExecute(JobExecutionContext context)
 {
     _stopwatch.Stop();
     Logger.Instance.InfoFormat("Execute `{0}` elapsed time:{1} ms.", GetType().FullName, _stopwatch.ElapsedMilliseconds);
     JobOperator.AddJobPerformance(new JobPerformance
     {
         ID         = Guid.NewGuid(),
         JobName    = context.JobName,
         JobGroup   = context.JobGroup,
         StartTime  = _startTime,
         EndTime    = DateTime.Now,
         CPU        = (decimal)AppDomain.CurrentDomain.MonitoringTotalProcessorTime.TotalSeconds,
         Memory     = AppDomain.CurrentDomain.MonitoringSurvivedMemorySize * 1m / 1024 / 1024,
         CreateTime = DateTime.Now
     });
 }
Exemple #10
0
        private dynamic GetJobPerformanceTrend()
        {
            var data = new List <Dictionary <string, dynamic> >();
            var performanceTrendList = JobOperator.GetPerformanceTrend();
            var dates = performanceTrendList.GroupBy(p => p.Date).OrderBy(p => p.Key).Select(p => p.Key).ToList();
            var jobs  = performanceTrendList.GroupBy(p => p.Job).OrderBy(p => p.Key).Select(p => p.Key).ToList();

            foreach (var date in dates)
            {
                var dict = new Dictionary <string, dynamic>();
                dict.Add("period", date);
                foreach (var job in jobs)
                {
                    var jm = performanceTrendList.FirstOrDefault(p => p.Date == date && p.Job == job);
                    dict.Add(job, jm == null ? 0 : jm.ElapsedTime);
                }
                data.Add(dict);
            }
            return(Response.AsJson(new { data = data, ykeys = jobs }));
        }