private void RescheduleProcess(ClientRequestInfo requestInfo)
{
if (requestInfo.Request.Arguments.ContainsHelpRequest || requestInfo.Request.Arguments.OrderedArgCount < 2)
{
StringBuilder helpMessage = new StringBuilder();
helpMessage.Append("Schedules or re-schedules an existing process defined in the service.");
helpMessage.AppendLine();
helpMessage.AppendLine();
helpMessage.Append(" Usage:");
helpMessage.AppendLine();
helpMessage.Append(" Reschedule \"Process Name\" \"Schedule Rule\" -options");
helpMessage.AppendLine();
helpMessage.AppendLine();
helpMessage.Append(" Options:");
helpMessage.AppendLine();
helpMessage.Append(" -?".PadRight(20));
helpMessage.Append("Displays this help message");
helpMessage.AppendLine();
helpMessage.Append(" -save".PadRight(20));
helpMessage.Append("Saves all process schedules to the config file");
helpMessage.AppendLine();
helpMessage.Append(" -list".PadRight(20));
helpMessage.Append("Displays list of all process schedules");
helpMessage.AppendLine();
helpMessage.AppendLine();
helpMessage.Append("NOTE: The schedule rule uses UNIX crontab syntax which consists of 5 parts (For example, \"* * * * *\"). ");
helpMessage.Append("Following is a brief description of each of the 5 parts that make up the rule:");
helpMessage.AppendLine();
helpMessage.AppendLine();
helpMessage.Append(" Part 1 - Minute part; value range 0 to 59. ");
helpMessage.AppendLine();
helpMessage.Append(" Part 2 - Hour part; value range 0 to 23. ");
helpMessage.AppendLine();
helpMessage.Append(" Part 3 - Day of month part; value range 1 to 31. ");
helpMessage.AppendLine();
helpMessage.Append(" Part 4 - Month part; value range 1 to 12. ");
helpMessage.AppendLine();
helpMessage.Append(" Part 5 - Day of week part; value range 0 to 6 (0 = Sunday). ");
helpMessage.AppendLine();
helpMessage.AppendLine();
helpMessage.Append("Following is a description of valid syntax for all parts of the rule:");
helpMessage.AppendLine();
helpMessage.AppendLine();
helpMessage.Append(" * - Any value in the range for the date-time part.");
helpMessage.AppendLine();
helpMessage.Append(" */n - Every nth value for the data-time part.");
helpMessage.AppendLine();
helpMessage.Append(" n1-n2 - Range of values (inclusive) for the date-time part.");
helpMessage.AppendLine();
helpMessage.Append(" n1,n2 - 1 or more specific values for the date-time part.");
helpMessage.AppendLine();
helpMessage.AppendLine();
helpMessage.Append("Examples:");
helpMessage.AppendLine();
helpMessage.AppendLine();
helpMessage.Append(" \"* * * * *\" - Process executes every minute.");
helpMessage.AppendLine();
helpMessage.Append(" \"*/5 * * * *\" - Process executes every 5 minutes.");
helpMessage.AppendLine();
helpMessage.Append(" \"5 * * * *\" - Process executes 5 past every hour.");
helpMessage.AppendLine();
helpMessage.Append(" \"0 0 * * *\" - Process executes every day at midnight.");
helpMessage.AppendLine();
helpMessage.Append(" \"0 0 1 * *\" - Process executes 1st of every month at midnight.");
helpMessage.AppendLine();
helpMessage.Append(" \"0 0 * * 0\" - Process executes every Sunday at midnight.");
helpMessage.AppendLine();
helpMessage.Append(" \"0 0 31 12 *\" - Process executes on December 31 at midnight.");
helpMessage.AppendLine();
helpMessage.Append(" \"5,10 0-2 * * *\" - Process executes 5 and 10 past hours 12am to 2am.");
helpMessage.AppendLine();
helpMessage.AppendLine();
UpdateStatus(requestInfo.Sender.ClientID, UpdateType.Information, helpMessage.ToString());
}
else
{
string processName = requestInfo.Request.Arguments["orderedarg1"];
string scheduleRule = requestInfo.Request.Arguments["orderedarg2"];
bool saveSchedules = requestInfo.Request.Arguments.Exists("save");
bool listSchedules = requestInfo.Request.Arguments.Exists("list");
try
{
// Schedule the process if not scheduled or update its schedule if scheduled.
UpdateStatus(requestInfo.Sender.ClientID, UpdateType.Information, "Attempting to schedule process \"{0}\" with rule \"{1}\"...\r\n\r\n", processName, scheduleRule);
ScheduleProcess(processName, scheduleRule, true);
UpdateStatus(requestInfo.Sender.ClientID, UpdateType.Information, "Successfully scheduled process \"{0}\" with rule \"{1}\".\r\n\r\n", processName, scheduleRule);
if (saveSchedules)
{
requestInfo.Request = ClientRequest.Parse("SaveSchedules");
SaveSchedules(requestInfo);
}
}
catch (Exception ex)
{
LogException(ex);
UpdateStatus(requestInfo.Sender.ClientID, UpdateType.Alarm, "Failed to schedule process \"{0}\". {1}\r\n\r\n", processName, ex.Message);
}
if (!listSchedules)
return;
requestInfo.Request = ClientRequest.Parse("Schedules");
ShowSchedules(requestInfo);
}
}