diff --git a/src/Foundatio.Extensions.Hosting/Jobs/Cron.cs b/src/Foundatio.Extensions.Hosting/Jobs/Cron.cs new file mode 100644 index 00000000..d1ce608d --- /dev/null +++ b/src/Foundatio.Extensions.Hosting/Jobs/Cron.cs @@ -0,0 +1,224 @@ +// This file is part of Hangfire. Copyright © 2013-2014 Hangfire OÜ. +// +// Hangfire is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as +// published by the Free Software Foundation, either version 3 +// of the License, or any later version. +// +// Hangfire is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with Hangfire. If not, see . + +using System; + +namespace Foundatio.Extensions.Hosting.Jobs; + +/// +/// Helper class that provides common values for the cron expressions. +/// +public static class Cron +{ + /// + /// Returns cron expression that fires every minute. + /// + public static string Minutely() + { + return "* * * * *"; + } + + /// + /// Returns cron expression that fires every hour at the first minute. + /// + public static string Hourly() + { + return Hourly(minute: 0); + } + + /// + /// Returns cron expression that fires every hour at the specified minute. + /// + /// The minute in which the schedule will be activated (0-59). + public static string Hourly(int minute) + { + return $"{minute} * * * *"; + } + + /// + /// Returns cron expression that fires every day at 00:00 UTC. + /// + public static string Daily() + { + return Daily(hour: 0); + } + + /// + /// Returns cron expression that fires every day at the first minute of + /// the specified hour in UTC. + /// + /// The hour in which the schedule will be activated (0-23). + public static string Daily(int hour) + { + return Daily(hour, minute: 0); + } + + /// + /// Returns cron expression that fires every day at the specified hour and minute + /// in UTC. + /// + /// The hour in which the schedule will be activated (0-23). + /// The minute in which the schedule will be activated (0-59). + public static string Daily(int hour, int minute) + { + return $"{minute} {hour} * * *"; + } + + /// + /// Returns cron expression that fires every week at Monday, 00:00 UTC. + /// + public static string Weekly() + { + return Weekly(DayOfWeek.Monday); + } + + /// + /// Returns cron expression that fires every week at 00:00 UTC of the specified + /// day of the week. + /// + /// The day of week in which the schedule will be activated. + public static string Weekly(DayOfWeek dayOfWeek) + { + return Weekly(dayOfWeek, hour: 0); + } + + /// + /// Returns cron expression that fires every week at the first minute + /// of the specified day of week and hour in UTC. + /// + /// The day of week in which the schedule will be activated. + /// The hour in which the schedule will be activated (0-23). + public static string Weekly(DayOfWeek dayOfWeek, int hour) + { + return Weekly(dayOfWeek, hour, minute: 0); + } + + /// + /// Returns cron expression that fires every week at the specified day + /// of week, hour and minute in UTC. + /// + /// The day of week in which the schedule will be activated. + /// The hour in which the schedule will be activated (0-23). + /// The minute in which the schedule will be activated (0-59). + public static string Weekly(DayOfWeek dayOfWeek, int hour, int minute) + { + return $"{minute} {hour} * * {(int) dayOfWeek}"; + } + + /// + /// Returns cron expression that fires every month at 00:00 UTC of the first + /// day of month. + /// + public static string Monthly() + { + return Monthly(day: 1); + } + + /// + /// Returns cron expression that fires every month at 00:00 UTC of the specified + /// day of month. + /// + /// The day of month in which the schedule will be activated (1-31). + public static string Monthly(int day) + { + return Monthly(day, hour: 0); + } + + /// + /// Returns cron expression that fires every month at the first minute of the + /// specified day of month and hour in UTC. + /// + /// The day of month in which the schedule will be activated (1-31). + /// The hour in which the schedule will be activated (0-23). + public static string Monthly(int day, int hour) + { + return Monthly(day, hour, minute: 0); + } + + /// + /// Returns cron expression that fires every month at the specified day of month, + /// hour and minute in UTC. + /// + /// The day of month in which the schedule will be activated (1-31). + /// The hour in which the schedule will be activated (0-23). + /// The minute in which the schedule will be activated (0-59). + public static string Monthly(int day, int hour, int minute) + { + return $"{minute} {hour} {day} * *"; + } + + /// + /// Returns cron expression that fires every year on Jan, 1st at 00:00 UTC. + /// + public static string Yearly() + { + return Yearly(month: 1); + } + + /// + /// Returns cron expression that fires every year in the first day at 00:00 UTC + /// of the specified month. + /// + /// The month in which the schedule will be activated (1-12). + public static string Yearly(int month) + { + return Yearly(month, day: 1); + } + + /// + /// Returns cron expression that fires every year at 00:00 UTC of the specified + /// month and day of month. + /// + /// The month in which the schedule will be activated (1-12). + /// The day of month in which the schedule will be activated (1-31). + public static string Yearly(int month, int day) + { + return Yearly(month, day, hour: 0); + } + + /// + /// Returns cron expression that fires every year at the first minute of the + /// specified month, day and hour in UTC. + /// + /// The month in which the schedule will be activated (1-12). + /// The day of month in which the schedule will be activated (1-31). + /// The hour in which the schedule will be activated (0-23). + public static string Yearly(int month, int day, int hour) + { + return Yearly(month, day, hour, minute: 0); + } + + /// + /// Returns cron expression that fires every year at the specified month, day, + /// hour and minute in UTC. + /// + /// The month in which the schedule will be activated (1-12). + /// The day of month in which the schedule will be activated (1-31). + /// The hour in which the schedule will be activated (0-23). + /// The minute in which the schedule will be activated (0-59). + public static string Yearly(int month, int day, int hour, int minute) + { + return $"{minute} {hour} {day} {month} *"; + } + + /// + /// Returns cron expression that never fires. Specifically 31st of February + /// + /// + public static string Never() + { + return Yearly(2, 31); + } +}