From 645229bef11c3f36e18c70dc17b4033adc14332d Mon Sep 17 00:00:00 2001 From: vfedosevich Date: Mon, 3 Jun 2013 14:07:52 +0300 Subject: [PATCH] Schedulers fixed --- WebsitePanel/Database/update_db.sql | 128 +++++++++++++++++- .../Tasks/BackgroundTask.cs | 30 ++-- .../Common/ObjectUtils.cs | 6 +- .../Data/DataProvider.cs | 13 +- .../Packages/PackageController.cs | 4 +- .../Provisioning/BackupController.cs | 7 +- .../SchedulerTasks/BackupTask.cs | 2 + .../Scheduling/Scheduler.cs | 4 +- .../Scheduling/SchedulerController.cs | 16 ++- .../Scheduling/SchedulerJob.cs | 2 +- .../Tasks/TaskController.cs | 48 +++++-- .../Tasks/TaskManager.cs | 76 +++++++---- .../Users/UserController.cs | 2 +- .../SchedulerService.cs | 9 ++ .../WebsitePanel/TasksTaskDetails.ascx.cs | 8 +- .../VPS/UserControls/ServerTabs.ascx.cs | 4 +- .../VPSForPC/UserControls/ServerTabs.ascx.cs | 4 +- 17 files changed, 278 insertions(+), 85 deletions(-) diff --git a/WebsitePanel/Database/update_db.sql b/WebsitePanel/Database/update_db.sql index 50de0516..fcd24049 100644 --- a/WebsitePanel/Database/update_db.sql +++ b/WebsitePanel/Database/update_db.sql @@ -1000,7 +1000,7 @@ SELECT TOP 1 FROM BackgroundTasks AS T INNER JOIN BackgroundTaskStack AS TS ON TS.TaskId = T.ID -WHERE T.TaskID = @TaskID AND T.UserID = @ActorID +WHERE T.TaskID = @TaskID GO IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'GetBackgroundTasks') @@ -1315,14 +1315,50 @@ IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'DeleteBackgrou DROP PROCEDURE DeleteBackgroundTaskStack GO -CREATE PROCEDURE [dbo].[DeleteBackgroundTaskStack] +IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'DeleteBackgroundTasks') +DROP PROCEDURE DeleteBackgroundTasks +GO + +CREATE PROCEDURE [dbo].[DeleteBackgroundTasks] ( - @TaskID INT + @Guid UNIQUEIDENTIFIER ) AS DELETE FROM BackgroundTaskStack -WHERE TaskID = @TaskID +WHERE TaskID IN (SELECT ID FROM BackgroundTasks WHERE Guid = @Guid) + +DELETE FROM BackgroundTaskLogs +WHERE TaskID IN (SELECT ID FROM BackgroundTasks WHERE Guid = @Guid) + +DELETE FROM BackgroundTaskParameters +WHERE TaskID IN (SELECT ID FROM BackgroundTasks WHERE Guid = @Guid) + +DELETE FROM BackgroundTasks +WHERE ID IN (SELECT ID FROM BackgroundTasks WHERE Guid = @Guid) +GO + +IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'DeleteBackgroundTask') +DROP PROCEDURE DeleteBackgroundTask +GO + +CREATE PROCEDURE [dbo].[DeleteBackgroundTask] +( + @ID INT +) +AS + +DELETE FROM BackgroundTaskStack +WHERE TaskID = @ID + +DELETE FROM BackgroundTaskLogs +WHERE TaskID = @ID + +DELETE FROM BackgroundTaskParameters +WHERE TaskID = @ID + +DELETE FROM BackgroundTasks +WHERE ID = @ID GO IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'GetProcessBackgroundTasks') @@ -1398,4 +1434,88 @@ WHERE T.Guid = ( AND UserID = @ActorID AND Completed = 0 AND Status IN (1, 3)) AND T.UserID = @ActorID AND T.Completed = 0 AND T.Status IN (1, 3) +GO + + + +ALTER PROCEDURE [dbo].[GetBackgroundTopTask] +( + @ActorID INT, + @Guid UNIQUEIDENTIFIER +) +AS + +SELECT TOP 1 + T.ID, + T.Guid, + T.TaskID, + T.ScheduleId, + T.PackageId, + T.UserId, + T.EffectiveUserId, + T.TaskName, + T.ItemId, + T.ItemName, + T.StartDate, + T.FinishDate, + T.IndicatorCurrent, + T.IndicatorMaximum, + T.MaximumExecutionTime, + T.Source, + T.Severity, + T.Completed, + T.NotifyOnComplete, + T.Status +FROM BackgroundTasks AS T +INNER JOIN BackgroundTaskStack AS TS + ON TS.TaskId = T.ID +WHERE T.Guid = @Guid +ORDER BY T.StartDate ASC +GO + + +ALTER PROCEDURE [dbo].[GetBackgroundTasks] +( + @ActorID INT +) +AS + + with GetChildUsersId(id) as ( + select UserID + from Users + where UserID = @ActorID + union all + select C.UserId + from GetChildUsersId P + inner join Users C on P.id = C.OwnerID +) + +SELECT + T.ID, + T.Guid, + T.TaskID, + T.ScheduleId, + T.PackageId, + T.UserId, + T.EffectiveUserId, + T.TaskName, + T.ItemId, + T.ItemName, + T.StartDate, + T.FinishDate, + T.IndicatorCurrent, + T.IndicatorMaximum, + T.MaximumExecutionTime, + T.Source, + T.Severity, + T.Completed, + T.NotifyOnComplete, + T.Status +FROM BackgroundTasks AS T +INNER JOIN (SELECT T.Guid, MIN(T.StartDate) AS Date + FROM BackgroundTasks AS T + INNER JOIN BackgroundTaskStack AS TS + ON TS.TaskId = T.ID + WHERE T.UserID in (select id from GetChildUsersId) + GROUP BY T.Guid) AS TT ON TT.Guid = T.Guid AND TT.Date = T.StartDate GO \ No newline at end of file diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Base/Tasks/BackgroundTask.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Base/Tasks/BackgroundTask.cs index 9529583e..bfe596f1 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Base/Tasks/BackgroundTask.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Base/Tasks/BackgroundTask.cs @@ -41,7 +41,9 @@ namespace WebsitePanel.EnterpriseServer { #region Fields - private List parameters; + public List Params = new List(); + + public List Logs = new List(); #endregion @@ -51,7 +53,7 @@ namespace WebsitePanel.EnterpriseServer public Guid Guid { get; set; } - public String TaskId { get; set; } + public string TaskId { get; set; } public int ScheduleId { get; set; } @@ -61,11 +63,11 @@ namespace WebsitePanel.EnterpriseServer public int EffectiveUserId { get; set; } - public String TaskName { get; set; } + public string TaskName { get; set; } public int ItemId { get; set; } - public String ItemName { get; set; } + public string ItemName { get; set; } public DateTime StartDate { get; set; } @@ -77,7 +79,7 @@ namespace WebsitePanel.EnterpriseServer public int MaximumExecutionTime { get; set; } - public String Source { get; set; } + public string Source { get; set; } public int Severity { get; set; } @@ -87,14 +89,6 @@ namespace WebsitePanel.EnterpriseServer public BackgroundTaskStatus Status { get; set; } - public List Logs { get; set; } - - public List Params - { - get { return parameters ?? (parameters = new List()); } - set { parameters = value; } - } - #endregion #region Constructors @@ -106,8 +100,9 @@ namespace WebsitePanel.EnterpriseServer IndicatorCurrent = 0; IndicatorMaximum = 0; Status = BackgroundTaskStatus.Run; - - Logs = new List(); + + Completed = false; + NotifyOnComplete = false; } public BackgroundTask(Guid guid, String taskId, int userId, int effectiveUserId, String source, String taskName, String itemName, @@ -132,6 +127,11 @@ namespace WebsitePanel.EnterpriseServer #region Methods + public List GetLogs() + { + return Logs; + } + public Object GetParamValue(String name) { foreach(BackgroundTaskParameter param in Params) diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Common/ObjectUtils.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Common/ObjectUtils.cs index 1ab1650d..5cb1e7b4 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Common/ObjectUtils.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Common/ObjectUtils.cs @@ -212,7 +212,7 @@ namespace WebsitePanel.EnterpriseServer // try implicit type conversion props[i].SetValue(obj, propVal, null); } - catch + catch (Exception ex) { // convert to string and then set property value try @@ -220,14 +220,14 @@ namespace WebsitePanel.EnterpriseServer string strVal = propVal.ToString(); props[i].SetValue(obj, Cast(strVal, props[i].PropertyType), null); } - catch + catch(Exception e) { // skip property init } } } } - catch{} // just skip + catch (Exception e) { } // just skip } // for properties } } diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Data/DataProvider.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Data/DataProvider.cs index 87af1b43..51775512 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Data/DataProvider.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Data/DataProvider.cs @@ -1999,11 +1999,18 @@ namespace WebsitePanel.EnterpriseServer new SqlParameter("@taskId", taskId)); } - public static void DeleteBackgroundTaskStack(int taskId) + public static void DeleteBackgroundTasks(Guid guid) { SqlHelper.ExecuteNonQuery(ConnectionString, CommandType.StoredProcedure, - ObjectQualifier + "DeleteBackgroundTaskStack", - new SqlParameter("@taskId", taskId)); + ObjectQualifier + "DeleteBackgroundTasks", + new SqlParameter("@guid", guid)); + } + + public static void DeleteBackgroundTask(int taskId) + { + SqlHelper.ExecuteNonQuery(ConnectionString, CommandType.StoredProcedure, + ObjectQualifier + "DeleteBackgroundTask", + new SqlParameter("@id", taskId)); } public static IDataReader GetScheduleTasks(int actorId) diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Packages/PackageController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Packages/PackageController.cs index 522000ad..b8532151 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Packages/PackageController.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Packages/PackageController.cs @@ -622,7 +622,7 @@ namespace WebsitePanel.EnterpriseServer topTask.ItemId = userId; topTask.UpdateParamValue("SendLetter", sendLetter); - TaskController.UpdateTask(topTask); + TaskController.UpdateTaskWithParams(topTask); return result; } @@ -729,7 +729,7 @@ namespace WebsitePanel.EnterpriseServer topTask.UpdateParamValue("UserId", userId); topTask.UpdateParamValue("SendLetter", sendLetter); - TaskController.UpdateTask(topTask); + TaskController.UpdateTaskWithParams(topTask); } finally { diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Provisioning/BackupController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Provisioning/BackupController.cs index fb4a6d20..81406cdd 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Provisioning/BackupController.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Provisioning/BackupController.cs @@ -31,6 +31,7 @@ using System.IO; using System.Data; using System.Text; using System.Collections.Generic; +using System.Threading; using System.Xml; using System.Security.Cryptography; using System.Security.Cryptography.Xml; @@ -118,7 +119,7 @@ namespace WebsitePanel.EnterpriseServer { TaskManager.StartTask(taskId, "BACKUP", "BACKUP", backupFileName, SecurityContext.User.UserId); - // get the list of items to backup + // get the list of items to backup TaskManager.Write("Calculate items to backup"); List items = GetBackupItems(userId, packageId, serviceId, serverId); @@ -209,7 +210,7 @@ namespace WebsitePanel.EnterpriseServer // increment progress TaskManager.IndicatorCurrent += 1; - } + } } } catch (Exception ex) @@ -805,7 +806,7 @@ namespace WebsitePanel.EnterpriseServer // return true; } - catch + catch(Exception e) { // return false; diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/BackupTask.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/BackupTask.cs index 164f5ea9..92a30c81 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/BackupTask.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/BackupTask.cs @@ -29,6 +29,7 @@ using System; using System.Data; using System.Configuration; +using System.Threading; using System.Web; using System.Web.Security; using System.Web.UI; @@ -48,6 +49,7 @@ namespace WebsitePanel.EnterpriseServer /// public override void DoWork() { + string backupFileName; int storePackageId; string storePackageFolder; diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Scheduling/Scheduler.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Scheduling/Scheduler.cs index b882ff82..244ad9a2 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Scheduling/Scheduler.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Scheduling/Scheduler.cs @@ -43,7 +43,7 @@ namespace WebsitePanel.EnterpriseServer public sealed class Scheduler { public static SchedulerJob nextSchedule = null; - private static Timer timer = new Timer(ScheduleTasks, null, 30000, 30000); + //private static Timer timer = new Timer(ScheduleTasks, null, 30000, 30000); public static void Start() { @@ -132,7 +132,7 @@ namespace WebsitePanel.EnterpriseServer var objTask = (SchedulerTask)Activator.CreateInstance(Type.GetType(schedule.Task.TaskType)); objTask.DoWork(); - // Thread.Sleep(40000); + // Thread.Sleep(40000); } catch (Exception ex) { diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Scheduling/SchedulerController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Scheduling/SchedulerController.cs index 220d1fea..be434a2e 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Scheduling/SchedulerController.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Scheduling/SchedulerController.cs @@ -167,19 +167,23 @@ namespace WebsitePanel.EnterpriseServer var parameters = schedule.ScheduleInfo.Parameters.Select( prm => new BackgroundTaskParameter(prm.ParameterId, prm.ParameterValue)).ToList(); - var packageInfo = PackageController.GetPackage(schedule.ScheduleInfo.PackageId); + var userInfo = PackageController.GetPackageOwner(schedule.ScheduleInfo.PackageId); + var backgroundTask = new BackgroundTask( Guid.NewGuid(), Guid.NewGuid().ToString("N"), - SecurityContext.User.UserId, - SecurityContext.User.IsPeer - ? SecurityContext.User.OwnerId - : packageInfo.UserId, "SCHEDULER", "RUN_SCHEDULE", + userInfo.OwnerId == 0 ? userInfo.UserId : userInfo.OwnerId, + userInfo.UserId, + "SCHEDULER", + "RUN_SCHEDULE", schedule.ScheduleInfo.ScheduleName, schedule.ScheduleInfo.ScheduleId, schedule.ScheduleInfo.ScheduleId, schedule.ScheduleInfo.PackageId, - schedule.ScheduleInfo.MaxExecutionTime, parameters) { Status = BackgroundTaskStatus.Starting }; + schedule.ScheduleInfo.MaxExecutionTime, parameters) + { + Status = BackgroundTaskStatus.Starting + }; TaskController.AddTask(backgroundTask); diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Scheduling/SchedulerJob.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Scheduling/SchedulerJob.cs index a27d7c34..7b9d2efd 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Scheduling/SchedulerJob.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Scheduling/SchedulerJob.cs @@ -109,7 +109,7 @@ namespace WebsitePanel.EnterpriseServer else throw new Exception(String.Format("Could not create scheduled task of '{0}' type", task.TaskType)); - // Thread.Sleep(40000); + // Thread.Sleep(40000); } catch (Exception ex) { diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Tasks/TaskController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Tasks/TaskController.cs index f19c4e13..c9bd79b2 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Tasks/TaskController.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Tasks/TaskController.cs @@ -80,27 +80,57 @@ namespace WebsitePanel.EnterpriseServer AddTaskParams(taskId, task.Params); DataProvider.AddBackgroundTaskStack(taskId); + return taskId; } - public static void UpdateTask(BackgroundTask task) + public static void UpdateTaskWithParams(BackgroundTask task) { + if (UpdateTask(task)) + { + UpdateBackgroundTaskParams(task); + } + } + + public static bool UpdateTask(BackgroundTask task) + { + if (task.Status == BackgroundTaskStatus.Abort) + { + DeleteBackgroundTasks(task.Guid); + + return false; + } + + if (task.Completed) + { + DeleteBackgroundTask(task.Id); + + return false; + } + DataProvider.UpdateBackgroundTask(task.Guid, task.Id, task.ScheduleId, task.PackageId, task.TaskName, task.ItemId, task.ItemName, task.FinishDate, task.IndicatorCurrent, task.IndicatorMaximum, task.MaximumExecutionTime, task.Source, task.Severity, task.Completed, task.NotifyOnComplete, task.Status); - AddTaskParams(task.Id, task.Params); - - if (task.Completed || task.Status == BackgroundTaskStatus.Abort) - { - DeleteTaskStack(task.Id); - } + return true; } - public static void DeleteTaskStack(int taskId) + public static void UpdateBackgroundTaskParams(BackgroundTask task) { - DataProvider.DeleteBackgroundTaskStack(taskId); + DataProvider.DeleteBackgroundTaskParams(task.Id); + + AddTaskParams(task.Id, task.Params); + } + + public static void DeleteBackgroundTasks(Guid guid) + { + DataProvider.DeleteBackgroundTasks(guid); + } + + public static void DeleteBackgroundTask(int id) + { + DataProvider.DeleteBackgroundTask(id); } public static void AddTaskParams(int taskId, List parameters) diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Tasks/TaskManager.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Tasks/TaskManager.cs index 4f838220..b2af3f5b 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Tasks/TaskManager.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Tasks/TaskManager.cs @@ -155,10 +155,13 @@ namespace WebsitePanel.EnterpriseServer taskId = Guid.NewGuid().ToString("N"); } - int userId = SecurityContext.User.OwnerId; - int effectiveUserId = SecurityContext.User.IsPeer - ? userId - : SecurityContext.User.UserId; + var user = SecurityContext.User; + + int userId = user.OwnerId == 0 + ? user.UserId + : user.OwnerId; + + int effectiveUserId = user.UserId; String itemNameStr = itemName != null ? itemName.ToString() @@ -286,23 +289,12 @@ namespace WebsitePanel.EnterpriseServer // write task execution result to database if (tasks.Count == 1) // single task { - // unregister task globally - // tasks.Remove(TopTask.TaskId); - // write to database - topTask.Logs = TaskController.GetLogs(topTask.Id, topTask.StartDate); - - string executionLog = FormatExecutionLog(topTask); - UserInfo user = UserController.GetUserInternally(topTask.EffectiveUserId); - string username = user != null ? user.Username : null; - - AuditLog.AddAuditLogRecord(topTask.TaskId, topTask.Severity, topTask.EffectiveUserId, - username, topTask.PackageId, topTask.ItemId, - topTask.ItemName, topTask.StartDate, topTask.FinishDate, topTask.Source, - topTask.TaskName, executionLog); + AddAuditLog(topTask); } TaskController.UpdateTask(topTask); + StopProcess(topTask); } public static void UpdateParam(String name, Object value) @@ -314,7 +306,7 @@ namespace WebsitePanel.EnterpriseServer topTask.UpdateParamValue(name, value); - TaskController.UpdateTask(topTask); + TaskController.UpdateTaskWithParams(topTask); } public static int ItemId @@ -359,7 +351,7 @@ namespace WebsitePanel.EnterpriseServer topTask.UpdateParamValue(key, parameters[key]); } - TaskController.UpdateTask(topTask); + TaskController.UpdateTaskWithParams(topTask); } static string FormatExecutionLog(BackgroundTask task) @@ -535,7 +527,7 @@ namespace WebsitePanel.EnterpriseServer scheduledTasks.Add(task.ScheduleId, task); } } - catch (Exception) + catch (Exception e) { } return scheduledTasks; @@ -570,23 +562,51 @@ namespace WebsitePanel.EnterpriseServer task.Status = BackgroundTaskStatus.Abort; - StopProcess(task.Id); + StopProcess(task); + + if (!HasErrors(task)) + { + task.Severity = 1; + } + + task.FinishDate = DateTime.Now; + + AddAuditLog(task); TaskController.UpdateTask(task); } - private static void StopProcess(int key) + private static void StopProcess(BackgroundTask task) { - if (_taskThreadsDictionary.ContainsKey(key)) + if (_taskThreadsDictionary.ContainsKey(task.Id)) { - if (_taskThreadsDictionary[key] != null) - if (_taskThreadsDictionary[key].IsAlive) - _taskThreadsDictionary[key].Abort(); + if (_taskThreadsDictionary[task.Id] != null) + if (_taskThreadsDictionary[task.Id].IsAlive) + { + if (!task.Completed) + _taskThreadsDictionary[task.Id].Abort(); + _taskThreadsDictionary[task.Id] = null; + } Thread deleted; - _taskThreadsDictionary.TryRemove(key,out deleted); + _taskThreadsDictionary.TryRemove(task.Id, out deleted); } } + private static void AddAuditLog(BackgroundTask task) + { + task.Logs = TaskController.GetLogs(task.Id, task.StartDate); + + string executionLog = FormatExecutionLog(task); + + UserInfo user = UserController.GetUserInternally(task.EffectiveUserId); + string username = user != null ? user.Username : null; + + AuditLog.AddAuditLogRecord(task.TaskId, task.Severity, task.EffectiveUserId, + username, task.PackageId, task.ItemId, + task.ItemName, task.StartDate, task.FinishDate, task.Source, + task.TaskName, executionLog); + } + public static List GetUserTasks(int userId) { List list = new List(); @@ -597,7 +617,7 @@ namespace WebsitePanel.EnterpriseServer return list; // prohibited user // get user tasks - foreach (BackgroundTask task in TaskController.GetTasks()) + foreach (BackgroundTask task in TaskController.GetTasks(user.IsPeer ? user.OwnerId : user.UserId)) { if (task.UserId == userId && !task.Completed && task.Status == BackgroundTaskStatus.Run) diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Users/UserController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Users/UserController.cs index f1690bd6..4f51e249 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Users/UserController.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Users/UserController.cs @@ -453,7 +453,7 @@ namespace WebsitePanel.EnterpriseServer topTask.ItemId = userId; topTask.UpdateParamValue("SendLetter", sendLetter); - TaskController.UpdateTask(topTask); + TaskController.UpdateTaskWithParams(topTask); return userId; } diff --git a/WebsitePanel/Sources/WebsitePanel.SchedulerService/SchedulerService.cs b/WebsitePanel/Sources/WebsitePanel.SchedulerService/SchedulerService.cs index be2e8579..9405a417 100644 --- a/WebsitePanel/Sources/WebsitePanel.SchedulerService/SchedulerService.cs +++ b/WebsitePanel/Sources/WebsitePanel.SchedulerService/SchedulerService.cs @@ -1,15 +1,19 @@ using System.ServiceProcess; +using System.Threading; using WebsitePanel.EnterpriseServer; namespace WebsitePanel.SchedulerService { public partial class SchedulerService : ServiceBase { + private Timer _timer = new Timer(Process, null, 5000, 5000); + #region Construcor public SchedulerService() { InitializeComponent(); + } #endregion @@ -21,6 +25,11 @@ namespace WebsitePanel.SchedulerService Scheduler.Start(); } + protected static void Process(object callback) + { + Scheduler.Start(); + } + #endregion } } \ No newline at end of file diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/TasksTaskDetails.ascx.cs b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/TasksTaskDetails.ascx.cs index a5293d72..a985b297 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/TasksTaskDetails.ascx.cs +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/TasksTaskDetails.ascx.cs @@ -63,7 +63,7 @@ namespace WebsitePanel.Portal litTitle.Text = String.Format("{0} "{1}"", GetAuditLogTaskName(task.Source, task.TaskName), task.ItemName); - litStep.Text = LocalizeActivityText(task.Logs.Count > 0 ? task.Logs[0].Text : String.Empty); + litStep.Text = LocalizeActivityText(task.GetLogs().Count > 0 ? task.GetLogs()[0].Text : String.Empty); litStartTime.Text = task.StartDate.ToString(); // progress @@ -77,10 +77,10 @@ namespace WebsitePanel.Portal // execution log StringBuilder log = new StringBuilder(); - if (task.Logs.Count > 0) - ViewState["lastLogDate"] = task.Logs[0].Date.AddTicks(1); + if (task.GetLogs().Count > 0) + ViewState["lastLogDate"] = task.GetLogs()[0].Date.AddTicks(1); - foreach (BackgroundTaskLogRecord logRecord in task.Logs) + foreach (BackgroundTaskLogRecord logRecord in task.GetLogs()) { log.Append("[").Append(GetDurationText(task.StartDate, logRecord.Date)).Append("] "); log.Append(GetLogLineIdent(logRecord.TextIdent)); diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/VPS/UserControls/ServerTabs.ascx.cs b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/VPS/UserControls/ServerTabs.ascx.cs index 4b0372ca..30b8f974 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/VPS/UserControls/ServerTabs.ascx.cs +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/VPS/UserControls/ServerTabs.ascx.cs @@ -176,7 +176,7 @@ namespace WebsitePanel.Portal.VPS.UserControls litElapsed.Text = new TimeSpan(d.Hours, d.Minutes, d.Seconds).ToString(); // bind records - repRecords.DataSource = task.Logs; + repRecords.DataSource = task.GetLogs(); repRecords.DataBind(); } @@ -213,7 +213,7 @@ namespace WebsitePanel.Portal.VPS.UserControls // gauge gauge.Visible = false; - if (e.Item.ItemIndex == task.Logs.Count - 1) + if (e.Item.ItemIndex == task.GetLogs().Count - 1) { gauge.Visible = true; gauge.Total = task.IndicatorMaximum; diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/VPSForPC/UserControls/ServerTabs.ascx.cs b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/VPSForPC/UserControls/ServerTabs.ascx.cs index 56b6fe22..14cc380e 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/VPSForPC/UserControls/ServerTabs.ascx.cs +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/VPSForPC/UserControls/ServerTabs.ascx.cs @@ -183,7 +183,7 @@ namespace WebsitePanel.Portal.VPSForPC.UserControls litElapsed.Text = new TimeSpan(d.Hours, d.Minutes, d.Seconds).ToString(); // bind records - repRecords.DataSource = task.Logs; + repRecords.DataSource = task.GetLogs(); repRecords.DataBind(); } @@ -228,7 +228,7 @@ namespace WebsitePanel.Portal.VPSForPC.UserControls // gauge gauge.Visible = false; - if (e.Item.ItemIndex == task.Logs.Count - 1) + if (e.Item.ItemIndex == task.GetLogs().Count - 1) { gauge.Visible = true; gauge.Total = task.IndicatorMaximum;