コード例 #1
0
 public IReadOnlyCollection <Schedule> FilterBy(string description) =>
 _scheduler
 .GetTriggerKeys(GroupMatcher <TriggerKey> .AnyGroup())
 .Select(k => _scheduler.GetTrigger(k))
 .Where(t => t.Description.StartsWith(description, true, CultureInfo.CurrentCulture))
 .Select(Convert)
 .ToList();
コード例 #2
0
        public JsonResult RemoveCalendar(string calendarname)
        {
            try
            {
                //遍历所有的trigger,然后删除 deleteCalendar
                var triggerkeys = scheduler.GetTriggerKeys(GroupMatcher <TriggerKey> .AnyGroup());

                foreach (var tkey in triggerkeys)
                {
                    var trigger = scheduler.GetTrigger(tkey);

                    if (trigger.CalendarName == calendarname)
                    {
                        var newtrigger = trigger.GetTriggerBuilder().ModifiedByCalendar(null).Build();

                        scheduler.RescheduleJob(newtrigger.Key, newtrigger);
                    }
                }

                //只有先解除引用,才能删除calendar
                var isSuccess = scheduler.DeleteCalendar(calendarname);

                return(Json(1));
            }
            catch (Exception ex)
            {
                throw;
            }
        }
コード例 #3
0
ファイル: QuartzHelper.cs プロジェクト: sinxiaji/QuartzHelper
        /// <summary>
        /// 删除指定分组的Jobs
        /// </summary>
        /// <param name="group">Job分组名称</param>
        /// <param name="compareWith">分组名称匹配规则</param>
        /// <returns>true if all of the Jobs were found and deleted, false if one or more were not</returns>
        public static async Task <bool> DeleteJobsAsync(string group, StringOperator compareWith)
        {
            GroupMatcher <JobKey> matcher;

            if (Equals(compareWith, StringOperator.Contains))
            {
                matcher = GroupMatcher <JobKey> .GroupContains(group);
            }
            else if (Equals(compareWith, StringOperator.EndsWith))
            {
                matcher = GroupMatcher <JobKey> .GroupEndsWith(group);
            }
            else if (Equals(compareWith, StringOperator.Equality))
            {
                matcher = GroupMatcher <JobKey> .GroupEquals(group);
            }
            else if (Equals(compareWith, StringOperator.StartsWith))
            {
                matcher = GroupMatcher <JobKey> .GroupStartsWith(group);
            }
            else
            {
                matcher = GroupMatcher <JobKey> .AnyGroup();
            }

            return(await GetScheduler().DeleteJobs((await GetScheduler().GetJobKeys(matcher)).ToList()));
        }
コード例 #4
0
        public async Task <IActionResult> Index()
        {
            var keys       = (await Scheduler.GetJobKeys(GroupMatcher <JobKey> .AnyGroup())).OrderBy(x => x.ToString());
            var list       = new List <JobListItem>();
            var knownTypes = new List <string>();

            foreach (var key in keys)
            {
                var detail = await GetJobDetail(key);

                var item = new JobListItem()
                {
                    Concurrent  = !detail.ConcurrentExecutionDisallowed,
                    Persist     = detail.PersistJobDataAfterExecution,
                    Recovery    = detail.RequestsRecovery,
                    JobName     = key.Name,
                    Group       = key.Group,
                    Type        = detail.JobType.FullName,
                    History     = Histogram.Empty,
                    Description = detail.Description,
                };
                knownTypes.Add(detail.JobType.RemoveAssemblyDetails());
                list.Add(item);
            }

            Services.Cache.UpdateJobTypes(knownTypes);

            ViewBag.Groups = (await Scheduler.GetJobGroupNames()).GroupArray();

            return(View(list));
        }
コード例 #5
0
        /// <summary>
        /// 返回job对应的trigger
        /// </summary>
        /// <param name="jobName">任务名称</param>
        /// <returns></returns>
        public async Task <List <ITrigger> > GetJobToTrig(string jobName)
        {
            JobKey          jobKey      = (await sched.GetJobKeys(GroupMatcher <JobKey> .AnyGroup())).Where(b => b.Name == jobName).FirstOrDefault();
            List <ITrigger> triggerList = (await sched.GetTriggersOfJob(jobKey)).ToList();

            return(triggerList);
        }
コード例 #6
0
        /// <summary>
        /// Get a specified number of upcoming jobs
        /// </summary>
        /// <param name="count"></param>
        /// <returns></returns>
        public IEnumerable <FireInstance> GetUpcomingJobs(int count)
        {
            IList <FireInstance> temp = new List <FireInstance>();

            var allTriggerKeys = _scheduler.GetTriggerKeys(GroupMatcher <TriggerKey> .AnyGroup());

            foreach (var triggerKey in allTriggerKeys)
            {
                ITrigger trigger = _scheduler.GetTrigger(triggerKey);

                ICalendar cal = null;
                if (!string.IsNullOrEmpty(trigger.CalendarName))
                {
                    cal = _scheduler.GetCalendar(trigger.CalendarName);
                }
                var fireTimes = TriggerUtils.ComputeFireTimes(trigger as IOperableTrigger, cal, count);

                foreach (var dateTimeOffset in fireTimes)
                {
                    temp.Add(new FireInstance
                    {
                        FireTimeUtc  = dateTimeOffset,
                        JobName      = trigger.JobKey.Name,
                        JobGroup     = trigger.JobKey.Group,
                        TriggerName  = trigger.Key.Name,
                        TriggerGroup = trigger.Key.Group,
                        JobId        = _persistanceStore.GetJobId(trigger.JobKey)
                    });
                }
            }

            IList <FireInstance> retval = temp.OrderBy(i => i.FireTimeUtc).Take(count).ToList();

            return(retval);
        }
コード例 #7
0
        public async Task <List <JobInfo> > GetAllTasks()
        {
            var jobList = new List <JobInfo>();

            if (string.IsNullOrEmpty(SchedulerName))
            {
                return(jobList);
            }
            Scheduler = await _factory.GetScheduler(SchedulerName);

            if (Scheduler != null)
            {
                var tasks = await Scheduler.GetJobKeys(GroupMatcher <JobKey> .AnyGroup());

                foreach (var task in tasks)
                {
                    var detail = await Scheduler.GetJobDetail(task);

                    var triggers = await Scheduler.GetTriggersOfJob(task);

                    jobList.Add(new JobInfo
                    {
                        Name        = task.Name,
                        Description = detail?.Description,
                        Trigger     = ProcessTriggers(triggers)
                    });
                }
            }

            return(jobList);
        }
コード例 #8
0
        public async Task JobExecution()
        {
            Assert.That(TestJob.Executed, Is.False);

            var jobDetail = JobBuilder
                            .Create <TestJob>()
                            .Build();

            var trigger = TriggerBuilder.Create()
                          .StartNow()
                          .Build();

            var scheduler = _container.Resolve <IScheduler>();

            scheduler.ListenerManager.AddJobListener(
                _container.Resolve <IJobListener>(),
                GroupMatcher <JobKey> .AnyGroup());
            await scheduler.Start();

            await scheduler.ScheduleJob(jobDetail, trigger);

            Assert.That(await Task.Run(() => TestJob.AutoResetEvent.WaitOne(1000)), Is.True);
            Assert.That(TestJob.Executed, Is.True);

            await scheduler.Shutdown();
        }
コード例 #9
0
        static async Task MainAsync()
        {
            var schedulerFactory = new StdSchedulerFactory();
            var scheduler        = await schedulerFactory.GetScheduler();

            await scheduler.Start();

            Console.WriteLine($"任务调度器已启动");

            //添加Listener
            scheduler.ListenerManager.AddJobListener(new MyJobListener(), GroupMatcher <JobKey> .AnyGroup());
            scheduler.ListenerManager.AddTriggerListener(new MyTriggerListener(), GroupMatcher <TriggerKey> .AnyGroup());

            //await ScheduleHelloQuartzJob(scheduler);
            await ScheduleSayHelloJob(scheduler);

            await Task.Delay(TimeSpan.FromSeconds(5));

            //获取JobDetail
            var jobDetail = await scheduler.GetJobDetail(new JobKey("SayHelloJob-Tom", "DemoGroup"));

            if (jobDetail != null)
            {
                var runSuccess = jobDetail.JobDataMap.Get("RunSuccess");
                Console.WriteLine($"{jobDetail.Key} run success: {runSuccess}");
            }
            else
            {
                Console.WriteLine($"获取JobDetail失败");
            }
        }
コード例 #10
0
ファイル: Program.cs プロジェクト: heniu75/CodeIn60Seconds
        static void Main(string[] args)
        {
            var scheduler = new StdSchedulerFactory().GetScheduler();

            // add scheduler listener
            scheduler.ListenerManager.AddSchedulerListener(new SchedulerListener());

            // add global job listener
            scheduler.ListenerManager.AddJobListener(new JobListener(), GroupMatcher <JobKey> .AnyGroup());

            // add global trigger listener
            scheduler.ListenerManager.AddTriggerListener(new TriggerListener(), GroupMatcher <TriggerKey> .AnyGroup());

            // add jobs & triggers
            scheduler.ScheduleJob(
                JobBuilder.Create <ExampleJob>().WithIdentity("MyJob", "MyJobGroup").Build(),
                TriggerBuilder.Create().WithIdentity("MyTrigger", "MyTriggerGroup")
                .WithSimpleSchedule(s => s.WithIntervalInSeconds(2).RepeatForever()).Build());


            scheduler.Start();        // start scheduler
            Thread.Sleep(5000);       // sleep the main thread (Quartz will fire the job 3x on other threads)
            scheduler.Shutdown(true); // stop the scheduler

            Console.ReadLine();
        }
コード例 #11
0
        static void Main(string[] args)
        {
            var properties = new NameValueCollection();

            properties["quartz.scheduler.instanceName"]    = "RemoteServer";
            properties["quartz.threadPool.type"]           = "Quartz.Simpl.SimpleThreadPool, Quartz";
            properties["quartz.threadPool.threadCount"]    = "5";
            properties["quartz.threadPool.threadPriority"] = "Normal";
            //properties["quartz.scheduler.exporter.type"] = "Quartz.Simpl.RemotingSchedulerExporter, Quartz";
            properties["quartz.scheduler.exporter.port"]                 = "555";             //端口号
            properties["quartz.scheduler.exporter.bindName"]             = "QuartzScheduler"; //名称
            properties["quartz.scheduler.exporter.channelType"]          = "tcp";             //通道类型
            properties["quartz.scheduler.exporter.channelName"]          = "httpQuartz";
            properties["quartz.scheduler.exporter.rejectRemoteRequests"] = "true";
            properties["quartz.jobStore.clustered"] = "true";                                                                                  //集群配置
            //指定quartz持久化数据库的配置
            properties["quartz.jobStore.type"]                    = "Quartz.Impl.AdoJobStore.JobStoreTX, Quartz";                              //存储类型
            properties["quartz.serializer.type"]                  = "json";
            properties["quartz.jobStore.tablePrefix"]             = "Qrtz_";                                                                   //表名前缀
            properties["quartz.jobStore.driverDelegateType"]      = "Quartz.Impl.AdoJobStore.SqlServerDelegate, Quartz";                       //驱动类型
            properties["quartz.jobStore.dataSource"]              = "myDS";                                                                    //数据源名称
            properties["quartz.dataSource.myDS.connectionString"] = @"Data Source=.;Initial Catalog=QuartzManager;User ID=sa;Password=123456"; //连接字符串
            properties["quartz.dataSource.myDS.provider"]         = "SqlServer";                                                               //数据库版本
            properties["quartz.scheduler.instanceId"]             = "AUTO";
            var schedulerFactory = new StdSchedulerFactory(properties);
            var scheduler        = schedulerFactory.GetScheduler().Result;

            scheduler.ListenerManager.AddJobListener(new QuartzJobListener(), GroupMatcher <JobKey> .AnyGroup());
            scheduler.Start();
            Console.ReadKey();
        }
コード例 #12
0
 public async Task StartAsync()
 {
     _scheduler = await new StdSchedulerFactory().GetScheduler();
     await _serviceProvider.DoDapperServiceAsync(DefaultDbConfig, async (unitOfWork) =>
     {
         IJobConfigRepository jobConfigRepository             = ConnectionFactory.GetConnectionProvider(DefaultDbConfig.ConnectionType).GetRepository <IJobConfigRepository>(unitOfWork);
         IHolidayCalendarRepository holidayCalendarRepository = ConnectionFactory.GetConnectionProvider(DefaultDbConfig.ConnectionType).GetRepository <IHolidayCalendarRepository>(unitOfWork);
         var activeJobConfigs = await jobConfigRepository.GetActiveJobConfigs();
         List <HolidayCalendar> holidayCalendars = new List <HolidayCalendar>();
         if (activeJobConfigs.Any(r => r.HolidayCalendarId.HasValue))
         {
             holidayCalendars = (await holidayCalendarRepository.GetAllAsync()).ToList();
             Quartz.Impl.Calendar.HolidayCalendar calendar = new Quartz.Impl.Calendar.HolidayCalendar();
             foreach (var holidayCalendar in holidayCalendars)
             {
                 if (activeJobConfigs.Any(r => r.HolidayCalendarId == holidayCalendar.Id))
                 {
                     await AddCalendar(holidayCalendar);
                 }
             }
         }
         foreach (var activeJobConfig in activeJobConfigs)
         {
             IJobDetail job   = CreateJobDetail(activeJobConfig);
             ITrigger trigger = CreateJobTriggerAsync(activeJobConfig, holidayCalendars);
             await _scheduler.ScheduleJob(job, trigger);
         }
         _scheduler.ListenerManager.AddJobListener(QuartzJobListener, GroupMatcher <JobKey> .AnyGroup());
         await _scheduler.Start();
     });
 }
コード例 #13
0
        public async Task <List <QuartzJobInfo> > GetAllQuartzJobConfigs()
        {
            List <QuartzJobInfo> quartzJobInfos = new List <QuartzJobInfo>();
            var allJobKeys = await _scheduler.GetJobKeys(GroupMatcher <JobKey> .AnyGroup());

            foreach (JobKey jobKey in allJobKeys)
            {
                var detail = await _scheduler.GetJobDetail(jobKey);

                var triggers = await _scheduler.GetTriggersOfJob(jobKey);

                var temptrigger = triggers.FirstOrDefault();

                quartzJobInfos.Add(new QuartzJobInfo()
                {
                    JobGroup         = jobKey.Group,
                    JobName          = jobKey.Name,
                    Description      = detail.Description,
                    TriggerName      = temptrigger.Key.Name,
                    StrTriggerState  = _scheduler.GetTriggerState(temptrigger.Key).ToString(),
                    NextFireTime     = temptrigger.GetNextFireTimeUtc()?.LocalDateTime,
                    PreviousFireTime = temptrigger.GetPreviousFireTimeUtc()?.LocalDateTime,
                    CalendarName     = temptrigger.CalendarName,
                    Priority         = temptrigger.Priority
                });
            }

            return(quartzJobInfos);
        }
コード例 #14
0
        public static IScheduler AddQuartzAndStart(this IServiceCollection services, string filename)
        {
            string connstr = BuildDatabase(filename);

            NameValueCollection quartzProps = new NameValueCollection
            {
                { "quartz.serializer.type", "json" },
                { "quartz.threadPool.type", "Quartz.Simpl.SimpleThreadPool, Quartz" },
                { "quartz.threadPool.threadCount", "10" },
                { "quartz.jobStore.type", "Quartz.Impl.AdoJobStore.JobStoreTX, Quartz" },
                { "quartz.jobStore.misfireThreshold", "60000" },
                { "quartz.jobStore.lockHandler.type", "Quartz.Impl.AdoJobStore.UpdateLockRowSemaphore, Quartz" },
                { "quartz.jobStore.dataSource", "default" },
                { "quartz.jobStore.tablePrefix", "qrtz_" },
                { "quartz.jobStore.driverDelegateType", "Quartz.Impl.AdoJobStore.SQLiteDelegate, Quartz" },
                { "quartz.dataSource.default.provider", "SQLite-Microsoft" },
                { "quartz.dataSource.default.connectionString", connstr }
            };
            StdSchedulerFactory factory   = new StdSchedulerFactory(quartzProps);
            IScheduler          scheduler = factory.GetScheduler().GetAwaiter().GetResult();

            services.AddSingleton(scheduler);

            scheduler.ListenerManager.AddJobListener(new JobChainHandler(), GroupMatcher <JobKey> .AnyGroup());
            scheduler.StartDelayed(TimeSpan.FromSeconds(5));
            return(scheduler);
        }
コード例 #15
0
        public async Task <IActionResult> AdditionalData()
        {
            var list = new List <object>();

            if (histStore != null)
            {
                var keys = await Scheduler.GetTriggerKeys(GroupMatcher <TriggerKey> .AnyGroup());

                //var history = await HistoryStore.FilterLastOfEveryTrigger(10);
                var history = await histStore.FilterLastOfEveryJob(10);

                var historyByTrigger = history.ToLookup(x => x.Trigger);

                foreach (var key in keys)
                {
                    list.Add(new
                    {
                        TriggerName  = key.Name,
                        TriggerGroup = key.Group,
                        History      = historyByTrigger.TryGet(key.ToString()).ToHistogram(),
                    });
                }
            }

            return(View(list));
        }
コード例 #16
0
        /// <summary>
        /// Get all the fire times within a specified date range
        /// </summary>
        /// <param name="start"></param>
        /// <param name="end"></param>
        /// <returns></returns>
        public IEnumerable <TriggerFireTime> GetFireTimesBetween(DateTime start, DateTime end)
        {
            IList <TriggerFireTime> retval = new List <TriggerFireTime>();

            var allTriggerKeys = _scheduler.GetTriggerKeys(GroupMatcher <TriggerKey> .AnyGroup());

            foreach (var triggerKey in allTriggerKeys)
            {
                ITrigger  trigger = _scheduler.GetTrigger(triggerKey);
                ICalendar cal     = null;
                if (!string.IsNullOrEmpty(trigger.CalendarName))
                {
                    cal = _scheduler.GetCalendar(trigger.CalendarName);
                }
                var fireTimes = TriggerUtils.ComputeFireTimesBetween(trigger as IOperableTrigger, cal, start, end);

                foreach (var fireTime in fireTimes)
                {
                    retval.Add(new TriggerFireTime
                    {
                        FireDateTime = fireTime,
                        JobName      = trigger.JobKey.Name,
                        JobGroup     = trigger.JobKey.Group,
                        TriggerName  = trigger.Key.Name,
                        TriggerGroup = trigger.Key.Group
                    });
                }
            }

            return(retval);
        }
コード例 #17
0
        public void GetJobNames_ForPresentJobs_ReturnsNames()
        {
            _mockScheduler.Expect(s => s.GetJobKeys(GroupMatcher <JobKey> .AnyGroup()))
            .Return(new Quartz.Collection.HashSet <JobKey>()
            {
                JobKey.Create("job1", "SOD"), JobKey.Create("job2", "SOD")
            });

            IJobDetail job1 = GetMockJob("job1", "SOD");
            IJobDetail job2 = GetMockJob("job2", "SOD");

            var trigger = MockRepository.GenerateMock <ITrigger>();

            trigger.Expect(t => t.GetNextFireTimeUtc()).Return(new DateTimeOffset(DateTime.UtcNow.AddMinutes(5))).Repeat.Twice();
            trigger.Expect(t => t.Key).Return(new TriggerKey("someKey")).Repeat.Twice();
            var triggers = new List <ITrigger>()
            {
                trigger
            };

            _mockScheduler.Expect(s => s.GetJobDetail(Arg <JobKey> .Is.TypeOf)).Return(job1).Repeat.Once();
            _mockScheduler.Expect(s => s.GetJobDetail(Arg <JobKey> .Is.TypeOf)).Return(job2).Repeat.Once();
            _mockScheduler.Expect(s => s.GetTriggersOfJob(Arg <JobKey> .Is.TypeOf)).Return(triggers).Repeat.Times(4);
            _mockScheduler.Expect(s => s.GetTriggerState(Arg <TriggerKey> .Is.TypeOf)).Return(TriggerState.Normal).Repeat.Twice();

            var result = _interactor.GetJobs();

            Assert.AreEqual(2, result.Count);
            Assert.AreEqual("SOD.job1", result[0].Name);
            Assert.AreEqual("SOD.job2", result[1].Name);

            job1.VerifyAllExpectations();
            job2.VerifyAllExpectations();
        }
コード例 #18
0
        public static List <TriggerInfo> GetAllTriggers(this IScheduler scheduler)
        {
            List <TriggerInfo> tr = new List <TriggerInfo>();

            var allTriggerKeys = scheduler.GetTriggerKeys(GroupMatcher <TriggerKey> .AnyGroup());

            foreach (var triggerKey in allTriggerKeys)
            {
                var triggerdetails = scheduler.GetTrigger(triggerKey);
                var Jobdetails     = scheduler.GetJobDetail(triggerdetails.JobKey);


                var state = scheduler.GetTriggerState(triggerKey);


                TriggerInfo ti = new TriggerInfo();
                ti.TriggerKey = triggerdetails.Key.Name;
                ti.JobName    = triggerdetails.JobKey.Name;
                ti.State      = state.ToString();

                var date = triggerdetails.GetNextFireTimeUtc()?.DateTime;
                if (date.HasValue)
                {
                    ti.NextFireTimeUTC = date.Value.ToLocalTime().ToString();
                }



                tr.Add(ti);

                // Console.WriteLine("IsCompleted -" + triggerdetails.IsCompleted + " |  TriggerKey  - " + triggerdetails.Result.Key.Name + " Job key -" + triggerdetails.Result.JobKey.Name);
            }

            return(tr);
        }
コード例 #19
0
        public async Task Start()
        {
            IServiceProvider serviceProvider = GetServiceProvider();

            ISchedulerFactory sf = new StdSchedulerFactory();

            _scheduler = await sf.GetScheduler();

            await _scheduler.Start();

            JobListener listener = serviceProvider.GetService <JobListener>();

            _scheduler.ListenerManager.AddJobListener(listener, GroupMatcher <JobKey> .AnyGroup());//注册监听器

            _scheduler.JobFactory = serviceProvider.GetService <JobFactory>();

            IJobDetail job = JobBuilder.Create <JobService>()
                             .WithIdentity(JobHelper.BaseJobName, JobHelper.BaseJobGroup)
                             .Build();
            ITrigger trigger = TriggerBuilder.Create()
                               .WithIdentity(JobHelper.BaseTriggerName, JobHelper.BaseTriggerGroup)
                               .StartNow()
                               .WithSimpleSchedule(x => x
                                                   .WithIntervalInSeconds(60)
                                                   .RepeatForever())
                               .Build();

            await _scheduler.ScheduleJob(job, trigger);
        }
コード例 #20
0
        public async Task <ActionResult <IEnumerable <JobDto> > > GetSchedulerJobs()
        {
            var jobKeys = await this._scheduler.GetJobKeys(GroupMatcher <JobKey> .AnyGroup());

            var asyncJobs = jobKeys.Select(async key =>
            {
                var detail = await GetJobDetail(key.Name, key.Group);

                var triggers  = await this._scheduler.GetTriggersOfJob(key);
                var nextFires = triggers.Select(x => x.GetNextFireTimeUtc()?.UtcDateTime).ToArray();
                Dictionary <string, ExecutionHistoryEntry> historyByJob = await GetJobHistory();

                return(new JobDto
                {
                    Name = key.Name,
                    Group = key.Group,
                    Concurrent = !detail.ConcurrentExecutionDisallowed,
                    Persist = detail.PersistJobDataAfterExecution,
                    Recovery = detail.RequestsRecovery,
                    Type = detail.JobType.FullName,
                    Description = detail.Description,
                    // History = historyByJob?.GetValueOrDefault(key.ToString(), null), //.ToHistogram(),
                    NextFireTime = nextFires.Where(x => x != null).OrderBy(x => x).FirstOrDefault()
                });
            });

            var jobTuples = await Task.WhenAll(asyncJobs);

            return(Ok(jobTuples));
        }
コード例 #21
0
        public async Task <IActionResult> AdditionalData()
        {
            var keys = await Scheduler.GetJobKeys(GroupMatcher <JobKey> .AnyGroup());

            var history = await Scheduler.Context.GetExecutionHistoryStore().FilterLastOfEveryJob(10);

            var historyByJob = history.ToLookup(x => x.Job);

            var list = new List <object>();

            foreach (var key in keys)
            {
                var triggers = await Scheduler.GetTriggersOfJob(key);

                var nextFires = triggers.Select(x => x.GetNextFireTimeUtc()?.UtcDateTime).ToArray();

                list.Add(new
                {
                    JobName      = key.Name, key.Group,
                    History      = historyByJob.TryGet(key.ToString()).ToHistogram(),
                    NextFireTime = nextFires.Where(x => x != null).OrderBy(x => x).FirstOrDefault()?.ToDefaultFormat(),
                });
            }

            return(View(list));
        }
コード例 #22
0
ファイル: clsGlobal.cs プロジェクト: git-thinh/test
        public static string[] list_jobs()
        {
            var a = m_scheduler.GetJobKeys(GroupMatcher <JobKey> .AnyGroup())
                    .GetAwaiter().GetResult().Select(x => x.Name).ToArray();

            return(a);
        }
コード例 #23
0
        /// <summary>
        /// 返回所有任务键
        /// </summary>
        /// <returns></returns>
        public async Task <List <JobKey> > GetJobAll()
        {
            //获取所有job
            List <JobKey> jobKeys = (await sched.GetJobKeys(GroupMatcher <JobKey> .AnyGroup())).ToList();

            return(jobKeys);
        }
コード例 #24
0
        public async Task <ICollection <QuartzJob> > GetScheduledJobs()
        {
            var jobKeys = await _scheduler.GetJobKeys(GroupMatcher <JobKey> .AnyGroup());

            return(jobKeys.Aggregate(new List <QuartzJob>(), (jobs, jobKey) =>
            {
                var jobDetail = _scheduler.GetJobDetail(jobKey).Result;

                var quartzJob = new QuartzJob();

                quartzJob.Name = jobDetail.Key.Name;
                quartzJob.Group = jobDetail.Key.Group;
                quartzJob.Parameters = GetParameters(jobDetail).ToArray();

                var triggers = _scheduler.GetTriggersOfJob(jobDetail.Key).Result;

                quartzJob.Triggers = triggers.Select(trigger => new QuartzTrigger()
                {
                    Name = trigger.Key.Name,
                    Group = trigger.Key.Group,
                    NextFireTime = trigger.GetNextFireTimeUtc()
                }).ToList();

                jobs.Add(quartzJob);

                return jobs;
            }));
        }
コード例 #25
0
        public JsonResult TriggerList()
        {
            List <CronTriggerImpl> triggerList = new List <CronTriggerImpl>();

            //第一步:获取所有的trigger信息
            var triggerKeys = scheduler.GetTriggerKeys(GroupMatcher <TriggerKey> .AnyGroup());

            foreach (var triggerkey in triggerKeys)
            {
                var triggerDetail = (CronTriggerImpl)scheduler.GetTrigger(triggerkey);

                triggerList.Add(triggerDetail);
            }

            var json = JsonConvert.SerializeObject(triggerList.Select(i => new
            {
                i.FullName,
                i.FullJobName,
                i.CronExpressionString,
                JobClassName  = scheduler.GetJobDetail(i.JobKey).JobType.FullName,
                StartFireTime = i.StartTimeUtc.LocalDateTime.ToString("yyyy-MM-dd HH:mm:ss"),
                PrevFireTime  = i.GetPreviousFireTimeUtc()?.LocalDateTime.ToString("yyyy-MM-dd HH:mm:ss"),
                NextFireTime  = i.GetNextFireTimeUtc()?.LocalDateTime.ToString("yyyy-MM-dd HH:mm:ss"),
                TriggerStatus = scheduler.GetTriggerState(new TriggerKey(i.Name, i.Group)).ToString(),
                i.Priority,
                i.Description,
                i.Name,
                i.Group,
                i.CalendarName
            }));

            return(Json(json));
        }
コード例 #26
0
        public async Task <IEnumerable <string> > GetAllJobGroups()
        {
            var jobGroups = (await _scheduler.GetJobKeys(GroupMatcher <JobKey> .AnyGroup()))
                            .Select(k => k.Group).Distinct();

            return(jobGroups);
        }
コード例 #27
0
        protected void AddJobListener()
        {
            //scheduler.ListenerManager.AddTriggerListener(new MyTriggerListener(), GroupMatcher<TriggerKey>.AnyGroup());
            scheduler.ListenerManager.AddJobListener(new MyJobListener(), GroupMatcher <JobKey> .AnyGroup());

            scheduler.ListenerManager.AddSchedulerListener(new MySchedulerListener());
        }
コード例 #28
0
        public async Task <List <JobKeyWithDescription> > GetAllJobKeysWithDescription()
        {
            var jobKeys = await _scheduler.GetJobKeys(GroupMatcher <JobKey> .AnyGroup());

            var jobKeysWithDescription = new List <JobKeyWithDescription>();

            foreach (var jobKey in jobKeys)
            {
                var jobDetail = await _scheduler.GetJobDetail(jobKey);

                var triggers = await _scheduler.GetTriggersOfJob(jobKey);

                jobKeysWithDescription.Add(
                    new JobKeyWithDescription
                {
                    JobName         = jobKey.Name,
                    JobGroup        = jobKey.Group,
                    Description     = jobDetail.Description,
                    RequestRecovery = jobDetail.RequestsRecovery,
                    IsDurable       = jobDetail.Durable,
                    Triggers        = _mapper.Map <List <ITrigger>, List <TriggerKeyWithDescription> >(triggers.ToList())
                });
            }

            return(jobKeysWithDescription);
        }
コード例 #29
0
        public SchedulerData GetSchedulerData()
        {
            IScheduler        scheduler = _scheduler;
            SchedulerMetaData metadata  = scheduler.GetMetaData();

            IList <ExecutingJobInfo> inProgressJobs = metadata.SchedulerRemote ? (IList <ExecutingJobInfo>) new ExecutingJobInfo[0] :
                                                      scheduler
                                                      .GetCurrentlyExecutingJobs()
                                                      .Select(x => new ExecutingJobInfo
            {
                UniqueTriggerKey = x.Trigger.Key.ToString(),
                FireInstanceId   = x.FireInstanceId
            })
                                                      .ToList();

            return(new SchedulerData
            {
                Name = scheduler.SchedulerName,
                InstanceId = scheduler.SchedulerInstanceId,
                JobGroups = GetJobGroups(scheduler),
                Status = GetSchedulerStatus(scheduler),
                JobsExecuted = metadata.NumberOfJobsExecuted,
                JobsTotal = scheduler.IsShutdown ? 0 : scheduler.GetJobKeys(GroupMatcher <JobKey> .AnyGroup()).Count,
                RunningSince = metadata.RunningSince.ToDateTime(),
                InProgress = inProgressJobs
            });
        }
コード例 #30
0
        /// <summary>
        ///
        /// </summary>
        /// <typeparam name="TJob"></typeparam>
        /// <param name="keyValues"></param>
        /// <param name="schedulerName"></param>
        /// <returns></returns>
        public async Task RunJobAsync <TJob>(JobDataMap keyValues = null, string schedulerName = "DefaultQuartzScheduler") where TJob : IJob
        {
            foreach (QuartzJobAttribute quartzJob in typeof(TJob).GetCustomAttributes(typeof(QuartzJobAttribute), true))
            {
                var scheduler = await _schedulerFactory.GetScheduler(schedulerName);

                var jobKey = new JobKey(quartzJob.Name, quartzJob.Group);
                scheduler.ListenerManager.AddJobListener(new JobListener(), GroupMatcher <JobKey> .AnyGroup());
                if (await scheduler.CheckExists(jobKey))
                {
                    await scheduler.ResumeJob(jobKey);

                    continue;
                }
                var jobDetail = JobBuilder.Create <TJob>()
                                .WithIdentity(quartzJob.Name, quartzJob.Group)
                                .Build();

                var trigger = TriggerBuilder.Create()
                              .WithIdentity(quartzJob.Name, quartzJob.Group)
                              .StartNow();

                if (!string.IsNullOrEmpty(quartzJob.Cron))
                {
                    trigger.WithCronSchedule(quartzJob.Cron);
                }
                else
                {
                    trigger.WithSimpleSchedule(x => x.WithRepeatCount(0));
                }

                await scheduler.ScheduleJob(jobDetail, trigger.Build());
            }
        }