private RecurringDateRangeJobOptions CreateRecurringDateRangeJobOptions()
        {
            var options = new RecurringDateRangeJobOptions(() => string.Empty.Reverse())
            {
                RecurringJobOptions = new RecurringJobOptions()
                {
                    QueueName = EnqueuedState.DefaultQueue, TimeZone = TimeZoneInfo.Utc
                },
                CronExpression = "* * * * * *",
                EndDateTime    = DateTime.MaxValue,
                StartDateTime  = DateTime.UtcNow,
                RecurringJobId = "Id"
            };

            return(options);
        }
Beispiel #2
0
        public void AddOrUpdate([NotNull] RecurringDateRangeJobOptions options)
        {
            if (options == null)
            {
                throw new ArgumentNullException(nameof(options));
            }
            options.Validate();
            ValidateCronExpression(options.CronExpression);

            using (var connection = _storage.GetConnection())
            {
                var recurringJob   = new Dictionary <string, string>();
                var invocationData = InvocationData.Serialize(options.Job);

                recurringJob["Job"]        = JobHelper.ToJson(invocationData);
                recurringJob["Cron"]       = options.CronExpression;
                recurringJob["TimeZoneId"] = options.RecurringJobOptions.TimeZone.Id;
                recurringJob["Queue"]      = options.RecurringJobOptions.QueueName;

                var utcStartDate = options.StartDateTime.HasValue ? TimeZoneInfo.ConvertTime(options.StartDateTime.Value, options.RecurringJobOptions.TimeZone, TimeZoneInfo.Utc) : (DateTime?)null;
                var utcEndDate   = options.EndDateTime.HasValue ? TimeZoneInfo.ConvertTime(options.EndDateTime.Value, options.RecurringJobOptions.TimeZone, TimeZoneInfo.Utc) : (DateTime?)null;

                recurringJob["StartDate"] = JobHelper.SerializeDateTime(utcStartDate ?? DateTime.MinValue);
                recurringJob["EndDate"]   = JobHelper.SerializeDateTime(utcEndDate ?? DateTime.MaxValue);
                if (options.UseEndDateTimeComponent.HasValue)
                {
                    recurringJob[HashKeys.UseEndDateTimeComponent] = options.UseEndDateTimeComponent.ToString();
                }

                var existingJob = connection.GetAllEntriesFromHash($"{PluginConstants.JobType}:{options.RecurringJobId}");
                if (existingJob == null)
                {
                    recurringJob["CreatedAt"] = JobHelper.SerializeDateTime(DateTime.UtcNow);
                }

                using (var transaction = connection.CreateWriteTransaction())
                {
                    transaction.SetRangeInHash(
                        $"{PluginConstants.JobType}:{options.RecurringJobId}",
                        recurringJob);

                    transaction.AddToSet(PluginConstants.JobSet, options.RecurringJobId);

                    transaction.Commit();
                }
            }
        }