/// <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); }
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)); }
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)); }