コード例 #1
0
        /// <summary>
        /// Make a call to /v1/jobsearch
        /// </summary>
        /// <returns>A Job Request to query against</returns>
        public IJobSearch JobSearch()
        {
            var req = new JobSearchRequest(_Settings);

            WireBeforeRequestEvents(req);
            WireAfterRequestEvents(req);
            return(req);
        }
コード例 #2
0
        public async Task <IActionResult> Index()
        {
            JobSearchRequest model = new JobSearchRequest();

            List <SelectListItem> selects = await _distributedCache.GetOrAddAsync(CacheKeys.AllGroupKey, async() =>
            {
                IReadOnlyCollection <string> groups = await _scheduler.GetJobGroupNames();
                List <SelectListItem> items         = groups.Where(x => !x.Equals(EmailJobKeys.GroupKey, StringComparison.CurrentCultureIgnoreCase) && !x.Equals(NLogJobKey.GroupKey, StringComparison.CurrentCultureIgnoreCase)) // 排除email,nlog分组
                                                      .Select(x => new SelectListItem {
                    Text = x, Value = x
                })
                                                      .ToList();
                items.Insert(0, new SelectListItem {
                    Text = "全部", Value = string.Empty
                });
                return(items);
            }, 3600);   // 缓存1小时

            model.Properties.Add(PropertiesKeys.Key_1, selects);

            return(View(model));
        }
コード例 #3
0
        public async Task <IEnumerable <JobResponse> > Jobs(JobSearchRequest request)
        {
            GroupMatcher <JobKey> matcher = GroupMatcher <JobKey> .AnyGroup();

            if (!string.IsNullOrWhiteSpace(request.Group))
            {
                matcher = GroupMatcher <JobKey> .GroupEquals(request.Group.Trim());
            }

            IReadOnlyCollection <JobKey> jobKeys = await _scheduler.GetJobKeys(matcher); // 根据分组查询条件 获取所有JobKey

            List <JobResponse> items = new List <JobResponse>();

            foreach (JobKey key in jobKeys)
            {
                // 过滤掉邮件通知配置job,NLog日志文件清除Job
                if (string.Equals(key.Name, EmailJobKeys.NameKey, StringComparison.InvariantCultureIgnoreCase) || string.Equals(key.Name, NLogJobKey.NameKey, StringComparison.InvariantCultureIgnoreCase))
                {
                    continue;
                }

                IJobDetail job = await _scheduler.GetJobDetail(key);

                if (job == null)
                {
                    continue;
                }

                JobResponse item = new JobResponse
                {
                    Name          = job.Key.Name,
                    Group         = job.Key.Group,
                    TriggerState  = TriggerState.Complete,
                    HttpMethod    = job.JobDataMap.GetHttpMethod(),
                    RequestUrl    = job.JobDataMap.GetRequestUrl(),
                    TriggerType   = job.JobDataMap.GetTriggerType(),
                    Interval      = job.JobDataMap.GetInterval(),
                    IntervalType  = job.JobDataMap.GetIntervalType(),
                    RepeatCount   = job.JobDataMap.GetRepeatCount(),
                    Cron          = job.JobDataMap.GetCron(),
                    RequestBody   = job.JobDataMap.GetRequestBody(),
                    Description   = job.Description,
                    CreateTime    = job.JobDataMap.GetCreateTime(),
                    StartTime     = job.JobDataMap.GetStartTime(),
                    EndTime       = job.JobDataMap.GetEndTime(),
                    LastException = job.JobDataMap.GetLastException()
                };

                IReadOnlyCollection <ITrigger> triggers = await _scheduler.GetTriggersOfJob(key);

                ITrigger trigger = triggers.FirstOrDefault();   // 获取当前job关联的第一个 trigger
                if (trigger != null)
                {
                    TriggerState triggerState = await _scheduler.GetTriggerState(trigger.Key);  // trigger 状态

                    /****计算时间差***/
                    DateTime?prevFire = trigger.GetPreviousFireTimeUtc()?.LocalDateTime;
                    DateTime?nextFire = trigger.GetNextFireTimeUtc()?.LocalDateTime;
                    TimeSpan span     = TimeSpan.FromSeconds(0);
                    if (prevFire.HasValue && nextFire.HasValue)
                    {
                        span = (nextFire.Value - prevFire.Value);
                    }
                    item.TriggerState = triggerState;
                    item.FirePlan     = $"{span.Days}天{span.Hours}小时{span.Minutes}分{span.Seconds}秒"; // 执行频率
                    item.PrevFireTime = prevFire;
                    item.NextFireTime = nextFire;
                }
                ;

                items.Add(item);
            }

            return(items.WhereIf(!string.IsNullOrWhiteSpace(request.Name), x => x.Name.Contains(request.Name.Trim())).OrderByDescending(x => x.CreateTime));
        }