fixed bugs Scheduler Service

This commit is contained in:
vfedosevich 2013-05-24 15:46:10 +03:00
parent d14b5fc01f
commit 20f4b371d1
30 changed files with 332 additions and 190 deletions

View file

@ -115,22 +115,15 @@ namespace WebsitePanel.EnterpriseServer
var tasks = TaskController.GetProcessTasks(BackgroundTaskStatus.Starting);
foreach (var task in tasks)
{
StartManualTask(task);
new Thread(() => RunBackgroundTask(task)) {Priority = ThreadPriority.Highest}.Start();
}
tasks = TaskController.GetProcessTasks(BackgroundTaskStatus.Stopping);
foreach (var task in tasks)
{
TaskManager.StopTask(task.TaskId);
TaskManager.StopTask(task);
}
}
private static void StartManualTask(BackgroundTask backgroundTask)
{
new Thread(() => RunBackgroundTask(backgroundTask)) { Priority = ThreadPriority.Highest }.Start();
backgroundTask.Status = BackgroundTaskStatus.Run;
TaskController.UpdateTask(backgroundTask);
}
private static void RunBackgroundTask(BackgroundTask backgroundTask)
{
UserInfo user = PackageController.GetPackageOwner(backgroundTask.PackageId);
@ -138,13 +131,18 @@ namespace WebsitePanel.EnterpriseServer
SecurityContext.SetThreadPrincipal(user.UserId);
var schedule = SchedulerController.GetScheduleComplete(backgroundTask.ScheduleId);
TaskManager.StartTask(backgroundTask.Source, backgroundTask.TaskName, backgroundTask.ItemName, backgroundTask.ItemId, backgroundTask.ScheduleId, backgroundTask.PackageId, backgroundTask.MaximumExecutionTime, backgroundTask.Params);
backgroundTask.Guid = TaskManager.Guid;
backgroundTask.Status = BackgroundTaskStatus.Run;
TaskController.UpdateTask(backgroundTask);
try
{
var objTask = (SchedulerTask)Activator.CreateInstance(Type.GetType(schedule.Task.TaskType));
objTask.DoWork();
Thread.Sleep(100000);
}
catch (Exception ex)

View file

@ -55,12 +55,6 @@ namespace WebsitePanel.EnterpriseServer
DataProvider.GetScheduleTask(SecurityContext.User.UserId, taskId));
}
public static List<ScheduleInfo> GetRunningSchedules()
{
return ObjectUtils.CreateListFromDataReader<ScheduleInfo>(
DataProvider.GetRunningSchedules(SecurityContext.User.UserId));
}
public static DataSet GetSchedules(int packageId)
{
DataSet ds = DataProvider.GetSchedules(SecurityContext.User.UserId, packageId);
@ -170,6 +164,7 @@ namespace WebsitePanel.EnterpriseServer
prm => new BackgroundTaskParameter(prm.ParameterId, prm.ParameterValue)).ToList();
var backgroundTask = new BackgroundTask(
Guid.NewGuid(),
schedule.ScheduleInfo.TaskId,
SecurityContext.User.UserId,
SecurityContext.User.IsPeer
@ -197,22 +192,12 @@ namespace WebsitePanel.EnterpriseServer
if (schedule == null)
return 0;
var parameters = schedule.ScheduleInfo.Parameters.Select(
prm => new BackgroundTaskParameter(prm.ParameterId, prm.ParameterValue)).ToList();
var backgroundTask = new BackgroundTask(
schedule.ScheduleInfo.TaskId,
SecurityContext.User.UserId,
SecurityContext.User.IsPeer
? SecurityContext.User.OwnerId
: SecurityContext.User.UserId, "SCHEDULER", "STOP_SCHEDULE",
schedule.ScheduleInfo.ScheduleName,
schedule.ScheduleInfo.ScheduleId,
schedule.ScheduleInfo.ScheduleId,
schedule.ScheduleInfo.PackageId,
schedule.ScheduleInfo.MaxExecutionTime, parameters) { Status = BackgroundTaskStatus.Stopping };
TaskController.AddTask(backgroundTask);
foreach (BackgroundTask task in TaskController.GetScheduleTasks(scheduleId))
{
task.Status = BackgroundTaskStatus.Stopping;
TaskController.UpdateTask(task);
}
return 0;
@ -338,7 +323,7 @@ namespace WebsitePanel.EnterpriseServer
DataProvider.UpdateSchedule(SecurityContext.User.UserId,
schedule.ScheduleId, schedule.TaskId, schedule.ScheduleName, schedule.ScheduleTypeId,
schedule.Interval, schedule.FromTime, schedule.ToTime, schedule.StartTime,
schedule.LastRun, schedule.LastFinish, schedule.NextRun, schedule.Enabled, schedule.PriorityId,
schedule.LastRun, schedule.NextRun, schedule.Enabled, schedule.PriorityId,
schedule.HistoriesNumber, schedule.MaxExecutionTime, schedule.WeekMonthDay, xmlParameters);
// re-schedule tasks