Пример #1
0
        public async Task AddCalendar(string schedulerName, string calendarName, bool replace, bool updateTriggers)
        {
            var scheduler = await SchedulerHelper.GetScheduler(schedulerName).ConfigureAwait(false);

            ICalendar calendar = null;
            await scheduler.AddCalendar(calendarName, calendar, replace, updateTriggers).ConfigureAwait(false);
        }
        public HttpResponseMessage SaveKeys()
        {
            try
            {
                var keys  = Request.GetHttpContext().Request["Keys"];
                var model = new CacheKeysModel();
                model.Keys = JsonConvert.DeserializeObject <List <CacheKeyModel> >(keys);
                var taskEnabled = bool.Parse(Request.GetHttpContext().Request["TaskEnabled"]);

                PortalController.Instance.UpdatePortalSetting(PortalSettings.PortalId, Constants.PsCacheKeysToClear(PortalSettings.PortalId), keys, true, null, false);

                if (SchedulerHelper.IsScheduleItemEnabled(TaskTypeName, TaskAssembly) != taskEnabled)
                {
                    if (taskEnabled)
                    {
                        SchedulerHelper.EnableScheduleItem(TaskTypeName, TaskAssembly);
                    }
                    else
                    {
                        SchedulerHelper.DisableScheduleItem(TaskTypeName, TaskAssembly);
                    }
                }

                return(Request.CreateResponse(System.Net.HttpStatusCode.NoContent));
            }
            catch (Exception e)
            {
                return(Request.CreateErrorResponse(HttpStatusCode.BadRequest, "Invalid Json"));
            }
        }
Пример #3
0
 protected override void OnStart(string[] args)
 {
     Task.Run(() =>
     {
         SchedulerHelper.Start();
     });
 }
Пример #4
0
        public override IPublisher <int> CreatePublisher(long elements)
        {
            var dp = new MulticastPublisher <int>();

            Task.Factory.StartNew(() => {
                while (!dp.HasSubscribers)
                {
                    Thread.Sleep(10);
                }
                long start = SchedulerHelper.NowUTC();
                for (int i = 0; i < elements; i++)
                {
                    while (!dp.Offer(i))
                    {
                        Thread.Sleep(1);
                        if (SchedulerHelper.NowUTC() - start > 1000)
                        {
                            return;
                        }
                    }
                }
                dp.Dispose();
            }, TaskCreationOptions.LongRunning);

            return(dp);
        }
Пример #5
0
        public async void ResumeJob_ExistingJob()
        {
            var quartz = await SchedulerHelper.CreateScheduler();

            var service = SetupService(quartz);

            await service.CreateOrUpdate(1, CRON_EVERY_FIVE_MINUTES);

            DateTime?nextRun = await service.GetNextRunTime(1);

            Assert.NotNull(nextRun);
            Assert.True(nextRun > DateTime.Now);

            await service.PauseJob(1);

            DateTime?nextRunPaused = await service.GetNextRunTime(1);

            Assert.Null(nextRunPaused);

            await service.ResumeJob(1);

            DateTime?nextRunResumed = await service.GetNextRunTime(1);

            Assert.NotNull(nextRunResumed);
            Assert.True(nextRunResumed > DateTime.Now);
        }
Пример #6
0
        public async Task AddJob(string schedulerName, string jobGroup, string jobName, string jobType, bool durable, bool requestsRecovery, bool replace = false)
        {
            var scheduler = await SchedulerHelper.GetScheduler(schedulerName).ConfigureAwait(false);

            var jobDetail = new JobDetailImpl(jobName, jobGroup, Type.GetType(jobType), durable, requestsRecovery);
            await scheduler.AddJob(jobDetail, replace).ConfigureAwait(false);
        }
Пример #7
0
        public async Task ResumeJobs(string schedulerName, GroupMatcherModel groupMatcher)
        {
            var scheduler = await SchedulerHelper.GetScheduler(schedulerName).ConfigureAwait(false);

            var matcher = (groupMatcher ?? new GroupMatcherModel()).GetJobGroupMatcher();
            await scheduler.ResumeJobs(matcher).ConfigureAwait(false);
        }
        public async Task <bool> Update(UpdatePushNotificationModel model)
        {
            var pushNotification = await _repository.Filter <PushNotification>(x =>
                                                                               x.Id == model.Id && x.PushNotificationStatusType == PushNotificationStatusType.Scheduled).FirstOrDefaultAsync();

            pushNotification.Description = model.Description;
            pushNotification.Title       = model.Title;
            pushNotification.PushNotificationUserType   = model.PushNotificationUserType;
            pushNotification.PushNotificationActionType = model.PushNotificationActionType;
            pushNotification.PushNotificationStatusType = model.SendingDate > DateTime.UtcNow
                ? PushNotificationStatusType.Scheduled
                : PushNotificationStatusType.Sent;
            pushNotification.SendingDate = model.SendingDate;
            _repository.Update(pushNotification);
            await _repository.SaveChangesAsync();

            if (pushNotification.PushNotificationStatusType == PushNotificationStatusType.Scheduled)
            {
                var date = new DateTime(pushNotification.SendingDate.Year, pushNotification.SendingDate.Month,
                                        pushNotification.SendingDate.Day, pushNotification.SendingDate.Hour,
                                        pushNotification.SendingDate.Minute, pushNotification.SendingDate.Second);
                var sendPushTriggerBuilder = TriggerBuilder.Create()
                                             .WithIdentity($"{nameof(PushNotificationSendingJob)}Trigger#{PushNotificationSendingJob.Name}{pushNotification.Id}")
                                             .StartAt(date);
                dynamic sendPushProp = new ExpandoObject();
                sendPushProp.pushNotificationId = pushNotification.Id;
                await SchedulerHelper.ReSchedule <PushNotificationSendingJob, IJobListener>(new QuartzScheduleModel
                {
                    Name = $"{PushNotificationSendingJob.Name}{pushNotification.Id}",
                    IsListenerRequested = false,
                    DataMap             = sendPushProp,
                    TriggerBuilder      = sendPushTriggerBuilder
                });
            }
            else
            {
                switch (pushNotification.PushNotificationUserType)
                {
                case PushNotificationUserType.All:
                    await SendNotificationUsers(pushNotification, model.AnousmentId);
                    await SendNotificationGuests(pushNotification, model.AnousmentId);

                    break;

                case PushNotificationUserType.Guest:
                    await SendNotificationGuests(pushNotification, model.AnousmentId);

                    break;

                case PushNotificationUserType.Registered:
                    await SendNotificationUsers(pushNotification, model.AnousmentId);

                    break;

                default:
                    throw new ArgumentOutOfRangeException();
                }
            }
            return(true);
        }
Пример #9
0
        private List <ScheduleRule> UpdateRules(List <ScheduleRule> rules, TimerInfo timerInfo, SeriesTimerInfo seriesTimerInfo)
        {
            if (timerInfo != null)
            {
                //Single Recording
                SchedulerHelper.AppendTitleRule(rules, 0, timerInfo.Name);
                SchedulerHelper.AppendChannelsRule(rules, false, new List <Guid> {
                    Guid.Parse(timerInfo.ChannelId)
                });
                SchedulerHelper.AppendOnDateAndDaysOfWeekRule(rules, ScheduleDaysOfWeek.None, timerInfo.StartDate.ToLocalTime());
                SchedulerHelper.AppendAroundTimeRule(rules, timerInfo.StartDate.ToLocalTime());
            }
            else if (seriesTimerInfo != null)
            {
                //Serie Recording
                SchedulerHelper.AppendTitleRule(rules, 0, seriesTimerInfo.Name);
                SchedulerHelper.AppendOnDateAndDaysOfWeekRule(rules, SchedulerHelper.GetScheduleDaysOfWeek(seriesTimerInfo.Days), seriesTimerInfo.StartDate.ToLocalTime());
                SchedulerHelper.AppendNewEpisodesOnlyRule(rules, seriesTimerInfo.RecordNewOnly);

                if (!seriesTimerInfo.RecordAnyTime)
                {
                    SchedulerHelper.AppendAroundTimeRule(rules, seriesTimerInfo.StartDate.ToLocalTime());
                }

                if (!seriesTimerInfo.RecordAnyChannel)
                {
                    SchedulerHelper.AppendChannelsRule(rules, false, new List <Guid> {
                        Guid.Parse(seriesTimerInfo.ChannelId)
                    });
                }
            }

            return(rules);
        }
Пример #10
0
        public async Task PauseTriggers(string schedulerName, GroupMatcherModel groupMatcher)
        {
            var scheduler = await SchedulerHelper.GetScheduler(schedulerName).ConfigureAwait(false);

            var matcher = (groupMatcher ?? new GroupMatcherModel()).GetTriggerGroupMatcher();
            await scheduler.PauseTriggers(matcher).ConfigureAwait(false);
        }
Пример #11
0
        protected void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();

            RegisterRoutes(RouteTable.Routes);

            SchedulerHelper.InitializeFactory();
        }
Пример #12
0
        public async void ResumeJob_NotExistingJob()
        {
            var quartz = await SchedulerHelper.CreateScheduler();

            var service = SetupService(quartz);

            await service.ResumeJob(1);
        }
Пример #13
0
        public async Task <SchedulerModel> SchedulerDetails(string schedulerName)
        {
            var scheduler = await SchedulerHelper.GetScheduler(schedulerName).ConfigureAwait(false);

            var metaData = await scheduler.GetMetaData().ConfigureAwait(false);

            return(new SchedulerModel(scheduler, metaData));
        }
Пример #14
0
        public async Task <JobDetailModel> JobDetails(string schedulerName, string jobGroup, string jobName)
        {
            var scheduler = await SchedulerHelper.GetScheduler(schedulerName).ConfigureAwait(false);

            var jobDetail = await scheduler.GetJobDetail(new JobKey(jobName, jobGroup)).ConfigureAwait(false);

            return(new JobDetailModel(jobDetail));
        }
Пример #15
0
        public async Task <CalendarDetailModel> CalendarDetails(string schedulerName, string calendarName)
        {
            var scheduler = await SchedulerHelper.GetScheduler(schedulerName).ConfigureAwait(false);

            var calendar = await scheduler.GetCalendar(calendarName).ConfigureAwait(false);

            return(CalendarDetailModel.Create(calendar));
        }
Пример #16
0
        public async Task <IReadOnlyList <CurrentlyExecutingJobModel> > CurrentlyExecutingJobs(string schedulerName)
        {
            var scheduler = await SchedulerHelper.GetScheduler(schedulerName).ConfigureAwait(false);

            var currentlyExecutingJobs = await scheduler.GetCurrentlyExecutingJobs().ConfigureAwait(false);

            return(currentlyExecutingJobs.Select(x => new CurrentlyExecutingJobModel(x)).ToList());
        }
Пример #17
0
        public async Task <IReadOnlyList <string> > Calendars(string schedulerName)
        {
            var scheduler = await SchedulerHelper.GetScheduler(schedulerName).ConfigureAwait(false);

            var calendarNames = await scheduler.GetCalendarNames().ConfigureAwait(false);

            return(calendarNames);
        }
Пример #18
0
        public void Start()
        {
            if (ConstValues.Scheduler != null)
            {
                return;
            }
            var schedulerFactory = new StdSchedulerFactory(ConstValues.QuartzConfigs);

            ConstValues.Scheduler = schedulerFactory.GetScheduler().Result;
            ConstValues.Scheduler.Start().Wait();
            var jobs = ConstValues.Scheduler.GetJobKeys(GroupMatcher <JobKey> .AnyGroup()).Result;

            if (jobs.Any())
            {
                ConstValues.Scheduler.ResumeJobs(GroupMatcher <JobKey> .AnyGroup());
            }
            if (!ConstValues.IsServerConnected)
            {
                return;
            }
            var statisticsJob        = new JobKey($"{nameof(StatisticsDataRemoveJob)}#{StatisticsDataRemoveJob.Name}");
            var statisticsJobDetails = ConstValues.Scheduler.GetJobDetail(statisticsJob).Result;

            if (statisticsJobDetails == null)
            {
                //--Not Cron DateTime
                //var trigger = TriggerBuilder.Create()
                //    .WithIdentity($"{nameof(StatisticsDataRemoveJob)}#{StatisticsDataRemoveJob.Name}Trigger")
                //    .StartNow()
                //    .WithSimpleSchedule(x => x.WithInterval(TimeSpan.FromDays(1)).RepeatForever());
                var trigger = TriggerBuilder.Create()
                              .WithIdentity($"{nameof(StatisticsDataRemoveJob)}Trigger#{StatisticsDataRemoveJob.Name}")
                              .WithCronSchedule("0 0 0 ? * * *");
                SchedulerHelper.Schedule <StatisticsDataRemoveJob, IJobListener>(new QuartzScheduleModel
                {
                    Name                = StatisticsDataRemoveJob.Name,
                    TriggerBuilder      = trigger,
                    IsListenerRequested = false,
                    DataMap             = null
                }).ConfigureAwait(true);
            }
            var currencyJob        = new JobKey($"{nameof(AnnoucmentPricesJob)}#{AnnoucmentPricesJob.Name}");
            var currencyJobDetails = ConstValues.Scheduler.GetJobDetail(currencyJob).Result;

            if (currencyJobDetails == null)
            {
                var trigger = TriggerBuilder.Create()
                              .WithIdentity($"{nameof(AnnoucmentPricesJob)}Trigger#{AnnoucmentPricesJob.Name}")
                              .WithCronSchedule("0 0 10 ? * * *");
                SchedulerHelper.Schedule <AnnoucmentPricesJob, IJobListener>(new QuartzScheduleModel
                {
                    Name                = AnnoucmentPricesJob.Name,
                    TriggerBuilder      = trigger,
                    IsListenerRequested = false,
                    DataMap             = null
                }).ConfigureAwait(true);
            }
        }
Пример #19
0
        public async Task <IReadOnlyList <KeyModel> > Jobs(string schedulerName, GroupMatcherModel groupMatcher)
        {
            var scheduler = await SchedulerHelper.GetScheduler(schedulerName).ConfigureAwait(false);

            var matcher = (groupMatcher ?? new GroupMatcherModel()).GetJobGroupMatcher();
            var jobKeys = await scheduler.GetJobKeys(matcher).ConfigureAwait(false);

            return(jobKeys.Select(x => new KeyModel(x)).ToList());
        }
Пример #20
0
        public async void GetNextRunTime_NotExistingJob()
        {
            var quartz = await SchedulerHelper.CreateScheduler();

            var service = SetupService(quartz);

            DateTime?nextRun = await service.GetNextRunTime(2);

            Assert.Null(nextRun);
        }
Пример #21
0
        public async void AddJob()
        {
            var quartz = await SchedulerHelper.CreateScheduler();

            var service = SetupService(quartz);

            await service.CreateOrUpdate(1, CRON_EVERY_FIVE_MINUTES);

            bool jobAdded = await quartz.CheckExists(new JobKey(1.ToString()));

            Assert.True(jobAdded);
        }
Пример #22
0
        public async Task <TriggerDetailModel> TriggerDetails(string schedulerName, string triggerGroup, string triggerName)
        {
            var scheduler = await SchedulerHelper.GetScheduler(schedulerName).ConfigureAwait(false);

            var trigger = await scheduler.GetTrigger(new TriggerKey(triggerName, triggerGroup)).ConfigureAwait(false);

            var calendar = trigger.CalendarName != null
                ? await scheduler.GetCalendar(trigger.CalendarName).ConfigureAwait(false)
                : null;

            return(TriggerDetailModel.Create(trigger, calendar));
        }
Пример #23
0
      protected override void OnStop()
      {
          SchedulerHelper op = new SchedulerHelper();

          op.shutdown();
          ScheduleBase.Scheduler.Shutdown(true);
          //using (FileStream stream = new FileStream(filePath, FileMode.Append))
          //using (StreamWriter writer = new StreamWriter(stream))
          //{
          //    writer.WriteLine($"{DateTime.Now},服务停止!");
          //}
      }
Пример #24
0
        public async void GetCronStringForJob()
        {
            var quartz = await SchedulerHelper.CreateScheduler();

            var service = SetupService(quartz);

            await service.CreateOrUpdate(1, CRON_EVERY_FIVE_MINUTES);

            string cronSchedule = await service.GetCronSchedule(1);

            Assert.Equal(CRON_EVERY_FIVE_MINUTES, cronSchedule);
        }
Пример #25
0
        /// <summary>
        /// Get the recurrent recordings
        /// </summary>
        /// <param name="cancellationToken">The CancellationToken</param>
        /// <returns></returns>
        public async Task <IEnumerable <SeriesTimerInfo> > GetSeriesTimersAsync(CancellationToken cancellationToken)
        {
            _logger.Info(string.Format("[ArgusTV] Start GetSeriesTimer Async"));
            await EnsureConnectionAsync(cancellationToken);

            List <SeriesTimerInfo> seriesTimerInfos = new List <SeriesTimerInfo>();

            try
            {
                List <UpcomingRecording> upcomingRecordings = Proxies.ControlService.GetAllUpcomingRecordings(UpcomingRecordingsFilter.Recordings).Result.GroupBy(u => u.Program.ScheduleId).Select(grp => grp.First()).ToList();

                foreach (UpcomingRecording upcomingRecording in upcomingRecordings)
                {
                    if (upcomingRecording != null && upcomingRecording.Program != null && upcomingRecording.Program.IsPartOfSeries)
                    {
                        var          schedule       = Proxies.SchedulerService.GetScheduleById(upcomingRecording.Program.ScheduleId).Result;
                        ScheduleRule daysOfWeekRule = schedule.Rules.SingleOrDefault(r => r.Type == ScheduleRuleType.DaysOfWeek);

                        var days = new List <DayOfWeek>();

                        if (daysOfWeekRule != null)
                        {
                            days = SchedulerHelper.GetDaysOfWeek((ScheduleDaysOfWeek)daysOfWeekRule.Arguments[0]);
                        }

                        seriesTimerInfos.Add(new SeriesTimerInfo
                        {
                            Id                 = upcomingRecording.Program.ScheduleId.ToString(),
                            ChannelId          = upcomingRecording.Program.Channel.ChannelId.ToString(),
                            Name               = upcomingRecording.Title,
                            Overview           = Proxies.GuideService.GetProgramById(Guid.Parse(upcomingRecording.Program.GuideProgramId.ToString())).Result.Description,
                            StartDate          = upcomingRecording.ActualStartTimeUtc,
                            ProgramId          = upcomingRecording.Program.GuideProgramId.ToString(),
                            EndDate            = upcomingRecording.ActualStopTimeUtc,
                            PostPaddingSeconds = upcomingRecording.Program.PostRecordSeconds,
                            PrePaddingSeconds  = upcomingRecording.Program.PreRecordSeconds,
                            Days               = days
                        });
                    }
                }

                UtilsHelper.DebugInformation(_logger, string.Format("[ArgusTV] GetSeriesTimers with the following TimerInfo: {0}", _jsonSerializer.SerializeToString(seriesTimerInfos)));
            }
            catch (Exception ex)
            {
                _logger.ErrorException("[ArgusTV] GetSeriesTimers async failed", ex);
                throw new LiveTvConflictException();
            }


            return(seriesTimerInfos);
        }
Пример #26
0
        public async Task Start(string schedulerName, int?delayMilliseconds = null)
        {
            var scheduler = await SchedulerHelper.GetScheduler(schedulerName).ConfigureAwait(false);

            if (delayMilliseconds == null)
            {
                await scheduler.Start().ConfigureAwait(false);
            }
            else
            {
                await scheduler.StartDelayed(TimeSpan.FromMilliseconds(delayMilliseconds.Value)).ConfigureAwait(false);
            }
        }
        public IActionResult Get(string id)
        {
            // 不支持匿名函数
            //  Expression<Func<Task>> methoCall1 = () => Task.Factory.StartNew((s) => Console.WriteLine("task1" + s), "aaaa");


            Expression <Func <Task> > methoCall3 = () => _job1.DoTask("22222222222");

            SchedulerHelper.AddOrUpdateJob("jobId3", methoCall3, "17 12 * * *", "ivr_yzx");


            return(Ok(id));
        }
Пример #28
0
 protected override void OnStop()
 {
     try
     {
         SchedulerHelper op = new SchedulerHelper();
         op.shutdown();
         LogWriter.info("服务结束" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
     }
     catch (Exception ex)
     {
         LogWriter.error("服务结束异常:" + ex.ToString());
     }
 }
Пример #29
0
 public void SetHost(HomeGenieService hg, SchedulerItem item)
 {
     homegenie     = hg;
     schedulerItem = item;
     Reset();
     netHelper        = new NetHelper(homegenie);
     serialPortHelper = new SerialPortHelper();
     tcpClientHelper  = new TcpClientHelper();
     udpClientHelper  = new UdpClientHelper();
     mqttClientHelper = new MqttClientHelper();
     knxClientHelper  = new KnxClientHelper();
     schedulerHelper  = new SchedulerHelper(homegenie);
     programHelper    = new ProgramHelperBase(homegenie);
 }
Пример #30
0
        /// <summary>
        /// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        /// </summary>
        /// <param name="app">The passed in Application Builder.</param>
        /// <param name="env">The passed in Environment.</param>
        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            this.logger.LogInformation($"Hosting Environment: {env!.EnvironmentName}");
            this.startupConfig.UseForwardHeaders(app);
            this.startupConfig.UseHttp(app);
            this.startupConfig.UseContentSecurityPolicy(app);
            app.UseStaticFiles();
            this.startupConfig.UseAuth(app);

            if (!env.IsDevelopment())
            {
                app.UseResponseCompression();
            }

            app.UseEndpoints(endpoints =>
            {
                endpoints.MapDefaultControllerRoute();
                endpoints.MapRazorPages();
                endpoints.MapControllers();
                endpoints.MapHangfireDashboard(string.Empty, new DashboardOptions
                {
                    DashboardTitle = this.configuration.GetValue <string>("DashboardTitle", "Hangfire Dashboard"),
                    AppPath        = $"{this.configuration.GetValue<string>("JobScheduler:AdminHome")}",
                    Authorization  = new List <IDashboardAuthorizationFilter> {
                    },                                                           // Very important to set this, or Authorization won't work.
                })
                .RequireAuthorization("AdminUserPolicy");
            });

            app.UseHangfireServer();

            // Schedule Health Gateway Jobs
            BackgroundJob.Enqueue <DBMigrationsJob>(j => j.Migrate());
            SchedulerHelper.ScheduleJob <ICommunicationJob>(this.configuration, "CreateCommEmailsForNewCommunications", j => j.CreateCommunicationEmailsForNewCommunications());
            SchedulerHelper.ScheduleJob <IEmailJob>(this.configuration, "SendLowPriorityEmail", j => j.SendLowPriorityEmails());
            SchedulerHelper.ScheduleJob <IEmailJob>(this.configuration, "SendStandardPriorityEmail", j => j.SendStandardPriorityEmails());
            SchedulerHelper.ScheduleJob <IEmailJob>(this.configuration, "SendHighPriorityEmail", j => j.SendHighPriorityEmails());
            SchedulerHelper.ScheduleJob <IEmailJob>(this.configuration, "SendUrgentPriorityEmail", j => j.SendUrgentPriorityEmails());
            SchedulerHelper.ScheduleDrugLoadJob <FedDrugJob>(this.configuration, "FedApprovedDatabase");
            SchedulerHelper.ScheduleDrugLoadJob <FedDrugJob>(this.configuration, "FedMarketedDatabase");
            SchedulerHelper.ScheduleDrugLoadJob <FedDrugJob>(this.configuration, "FedCancelledDatabase");
            SchedulerHelper.ScheduleDrugLoadJob <FedDrugJob>(this.configuration, "FedDormantDatabase");
            SchedulerHelper.ScheduleDrugLoadJob <ProvincialDrugJob>(this.configuration, "PharmaCareDrugFile");
            SchedulerHelper.ScheduleJob <NotifyUpdatedLegalAgreementsJob>(this.configuration, "NotifyUpdatedLegalAgreements", j => j.Process());
            SchedulerHelper.ScheduleJob <CloseAccountJob>(this.configuration, "CloseAccounts", j => j.Process());
            SchedulerHelper.ScheduleJob <OneTimeJob>(this.configuration, "OneTime", j => j.Process());
            SchedulerHelper.ScheduleJob <CleanCacheJob>(this.configuration, "CleanCache", j => j.Process());

            // SchedulerHelper.ScheduleJob<DeleteEmailJob>(this.configuration, "DeleteEmailJob", j => j.DeleteOldEmails());
        }