using System;
namespace NetCoreStack.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 fires every <> minutes.
///
/// The number of minutes to wait between every activation.
public static string MinuteInterval(int interval)
{
return $"*/{interval} * * * *";
}
///
/// Returns cron expression that fires every <> hours.
///
/// The number of hours to wait between every activation.
public static string HourInterval(int interval)
{
return $"0 */{interval} * * *";
}
///
/// Returns cron expression that fires every <> days.
///
/// The number of days to wait between every activation.
public static string DayInterval(int interval)
{
return $"0 0 */{interval} * *";
}
///
/// Returns cron expression that fires every <> months.
///
/// The number of months to wait between every activation.
public static string MonthInterval(int interval)
{
return $"0 0 1 */{interval} *";
}
}
}