예제 #1
0
        /// <summary>
        ///     Converts the string representation of a cron expression to its <see cref="Cron"/> object equivalent.
        /// </summary>
        /// <param name="cronExpr">
        ///     A string that represents the cron expression to convert.
        /// </param>
        /// <returns>
        ///     An object of <see cref="Cron"/>.
        /// </returns>
        /// <exception cref="CronParserException">
        ///     Throw if failed to parse the cron expression.
        /// </exception>
        public static CronInfo Parse(string cronExpr)
        {
            if (String.IsNullOrWhiteSpace(cronExpr) && !Regex.IsMatch(cronExpr, CharacterCheckPattern))
            {
                throw new CronParserException($"Illegal cron expression: {cronExpr}.");
            }

            var constraints = cronExpr.Trim().Split(' ');

            if (constraints.Length != 5)
            {
                throw new CronParserException($"Illegal cron expression: {cronExpr}.");
            }

            var cron = new CronInfo
            {
                ExprMinute     = constraints[0],
                ExprHour       = constraints[1],
                ExprDayOfMonth = constraints[2],
                ExprMonth      = constraints[3],
                ExprDayOfWeek  = constraints[4]
            };

            cron.Minutes     = ParseSingleNode(cron.ExprMinute, MinuteRange);
            cron.Hours       = ParseSingleNode(cron.ExprHour, HourRange);
            cron.DaysOfMonth = ParseSingleNode(cron.ExprDayOfMonth, DayOfMonthRange);
            cron.Months      = ParseSingleNode <Month>(cron.ExprMonth, MonthRange);
            cron.DaysOfWeek  = ParseSingleNode <Models.DayOfWeek>(cron.ExprDayOfWeek, DayOfWeekRange);

            return(cron);
        }
예제 #2
0
        /// <summary>
        ///     Add a cron task to current scheduler with cron information and the action.
        /// </summary>
        /// <param name="cronInfo">
        ///     An object of <see cref="Cron"/>.
        /// </param>
        /// <param name="action">
        ///     An action to run when the scheduled task is triggered.
        /// </param>
        /// <param name="taskId">
        ///     Task's id, which helps you to get a better control of the task. If it's null or empty, a random guid
        ///     will be generated.
        /// </param>
        /// <returns>
        ///     True if the task is scheduled successfully; otherwise, false.
        /// </returns>
        /// <exception cref="ArgumentNullException">
        ///     Throw if cronInfo or action is null.
        /// </exception>
        public bool AddTask(CronInfo cronInfo, Action action, string taskId = null)
        {
            if (cronInfo == null)
            {
                throw new ArgumentNullException(nameof(cronInfo));
            }
            if (action == null)
            {
                throw new ArgumentNullException(nameof(action));
            }

            var task = new CronTask
            {
                Id        = String.IsNullOrEmpty(taskId) ? Guid.NewGuid().ToString("N") : taskId,
                CronInfo  = cronInfo,
                Action    = action,
                IsEnabled = true
            };

            return(AddTask(task));
        }
예제 #3
0
        /// <summary>
        /// Get information from a cron expresison
        /// </summary>
        /// <param name="CronExpression"></param>
        /// <returns></returns>
        public static CronInfo GetCronInfo(string CronExpression)
        {
            CronInfo Result = new CronInfo();

            try
            {
                // Infos => https://docs.oracle.com/cd/E12058_01/doc/doc.1014/e12030/cron_expressions.htm
                if (!String.IsNullOrWhiteSpace(CronExpression))
                {
                    CronExpression = CronExpression.Trim();
                    string[] TabCron = CronExpression.Split(' ');

                    if (TabCron.Length == 7)
                    {
                        string Second     = TabCron[0];
                        string Minute     = TabCron[1];
                        string Hour       = TabCron[2];
                        string DayOfMonth = TabCron[3];
                        string Month      = TabCron[4];
                        string DayOfWeek  = TabCron[5];
                        string Year       = TabCron[6];

                        DateTime Now          = DateTime.UtcNow;
                        DateTime DateSchedule = new DateTime(Now.Year, Now.Month, Now.Day, Convert.ToInt32(Hour), Convert.ToInt32(Minute), Convert.ToInt32(Second)).ToLocalTime();

                        if (DayOfMonth == "*" || DayOfMonth == "?")
                        {
                            Result.Periodicity  = CommonsConst.Periodicities.Daily;;
                            Result.ScheduleInfo = DateSchedule.ToString("HH : mm : ss");
                        }
                    }
                }
            }
            catch (Exception e)
            {
                Result = null;
                Commons.Logger.GenerateError(e, System.Reflection.MethodBase.GetCurrentMethod().DeclaringType, "CronExpression = " + CronExpression);
            }
            return(Result);
        }