From 20f4b371d10cf73fa1ad83b9268522972e4b06c4 Mon Sep 17 00:00:00 2001 From: vfedosevich Date: Fri, 24 May 2013 15:46:10 +0300 Subject: [PATCH] fixed bugs Scheduler Service --- WebsitePanel/Database/update_db.sql | 218 +++++++++++++----- .../Scheduling/ScheduleInfo.cs | 7 - .../Tasks/BackgroundTask.cs | 7 +- .../Data/DataProvider.cs | 43 ++-- .../SendEmailNotification.cs | 8 +- .../TaskEventHandlers/SystemTriggersAgent.cs | 10 +- .../Packages/PackageController.cs | 4 +- .../Provisioning/BackupController.cs | 3 +- .../SchedulerTasks/BackupDatabaseTask.cs | 2 +- .../SchedulerTasks/BackupTask.cs | 2 +- .../CalculateExchangeDiskspaceTask.cs | 4 +- .../CalculatePackagesBandwidthTask.cs | 4 +- .../CalculatePackagesDiskspaceTask.cs | 4 +- .../SchedulerTasks/CheckWebSiteTask.cs | 4 +- .../SchedulerTasks/FTPFilesTask.cs | 2 +- .../SchedulerTasks/HostedSolutionReport.cs | 2 +- .../NotifyOverusedDatabasesTask.cs | 2 +- .../SchedulerTasks/RunSystemCommandTask.cs | 2 +- .../SendMailNotificationTask.cs | 2 +- .../SuspendOverusedPackagesTask.cs | 2 +- .../SchedulerTasks/ZipFilesTask.cs | 2 +- .../Scheduling/Scheduler.cs | 22 +- .../Scheduling/SchedulerController.cs | 31 +-- .../Tasks/SendEmailNotification.cs | 8 +- .../Tasks/TaskController.cs | 43 ++-- .../Tasks/TaskManager.cs | 75 ++++-- .../Users/UserController.cs | 2 +- .../VirtualizationServerController.cs | 2 +- ...lizationServerControllerForPrivateCloud.cs | 2 +- .../Wizards/WebApplicationsInstaller.cs | 3 +- 30 files changed, 332 insertions(+), 190 deletions(-) diff --git a/WebsitePanel/Database/update_db.sql b/WebsitePanel/Database/update_db.sql index d536e693..862368bd 100644 --- a/WebsitePanel/Database/update_db.sql +++ b/WebsitePanel/Database/update_db.sql @@ -451,12 +451,13 @@ VALUES (1401, 41, N'Lync2013', N'Microsoft Lync Server 2013 Multitenant Hosting END GO --- Scheduler Service -ALTER TABLE Schedule -ADD LastFinish DATETIME NULL -GO +-------------------------------- Scheduler Service------------------------------------------------------ -UPDATE Schedule SET LastFinish = LastRun +IF EXISTS( SELECT * FROM INFORMATION_SCHEMA.COLUMNS + WHERE TABLE_NAME = 'Schedule' + AND COLUMN_NAME = 'LastFinish') +ALTER TABLE Schedule +DROP COLUMN LastFinish GO ALTER PROCEDURE [dbo].[GetSchedule] @@ -478,7 +479,6 @@ SELECT TOP 1 S.ToTime, S.StartTime, S.LastRun, - S.LastFinish, S.NextRun, S.Enabled, S.HistoriesNumber, @@ -538,7 +538,6 @@ SELECT S.ToTime, S.StartTime, S.LastRun, - S.LastFinish, S.NextRun, S.Enabled, 1 AS StatusID, @@ -591,7 +590,6 @@ SELECT S.ToTime, S.StartTime, S.LastRun, - S.LastFinish, S.NextRun, S.Enabled, 1 AS StatusID, @@ -693,7 +691,6 @@ SELECT S.ToTime, S.StartTime, S.LastRun, - S.LastFinish, S.NextRun, S.Enabled, 1 AS StatusID, @@ -739,7 +736,6 @@ ALTER PROCEDURE [dbo].[UpdateSchedule] @ToTime datetime, @StartTime datetime, @LastRun datetime, - @LastFinish datetime, @NextRun datetime, @Enabled bit, @PriorityID nvarchar(50), @@ -770,7 +766,6 @@ SET ToTime = @ToTime, StartTime = @StartTime, LastRun = @LastRun, - LastFinish = @LastFinish, NextRun = @NextRun, Enabled = @Enabled, PriorityID = @PriorityID, @@ -815,54 +810,30 @@ UPDATE ScheduleTasks SET TaskType = RTRIM(TaskType) + '.Code' WHERE SUBSTRING(RTRIM(TaskType), LEN(RTRIM(TaskType)) - 3, 4) <> 'Code' GO -IF EXISTS (SELECT * FROM sys.objects WHERE type = 'P' AND name = 'GetRunningSchedules') +IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'GetRunningSchedules') DROP PROCEDURE GetRunningSchedules GO -CREATE PROCEDURE [dbo].[GetRunningSchedules] -( - @ActorID int -) -AS +IF EXISTS (SELECT * FROM SYS.TABLES WHERE name = 'BackgroundTaskStack') +DROP TABLE BackgroundTaskStack +GO -SELECT - S.ScheduleID, - S.TaskID, - ST.TaskType, - ST.RoleID, - S.PackageID, - S.ScheduleName, - S.ScheduleTypeID, - S.Interval, - S.FromTime, - S.ToTime, - S.StartTime, - S.LastRun, - S.LastFinish, - S.NextRun, - S.Enabled, - 1 AS StatusID, - S.PriorityID, - S.MaxExecutionTime, - S.WeekMonthDay, - ISNULL(0, (SELECT TOP 1 SeverityID FROM AuditLog WHERE ItemID = S.ScheduleID AND SourceName = 'SCHEDULER' ORDER BY StartDate DESC)) AS LastResult, - U.Username, - U.FirstName, - U.LastName, - U.FullName, - U.RoleID, - U.Email -FROM Schedule AS S -INNER JOIN Packages AS P ON S.PackageID = P.PackageID -INNER JOIN ScheduleTasks AS ST ON S.TaskID = ST.TaskID -INNER JOIN UsersDetailed AS U ON P.UserID = U.UserID -WHERE (U.UserID = @ActorID OR U.OwnerID = @ActorID) - AND (ISNULL(S.LastRun, DATEADD(YEAR, -1, GETDATE())) > ISNULL(S.LastFinish, DATEADD(YEAR, -1, GETDATE()))) +IF EXISTS (SELECT * FROM SYS.TABLES WHERE name = 'BackgroundTaskLogs') +DROP TABLE BackgroundTaskLogs +GO + +IF EXISTS (SELECT * FROM SYS.TABLES WHERE name = 'BackgroundTaskParameters') +DROP TABLE BackgroundTaskParameters +GO + +IF EXISTS (SELECT * FROM SYS.TABLES WHERE name = 'BackgroundTasks') +DROP TABLE BackgroundTasks GO CREATE TABLE BackgroundTasks ( ID INT IDENTITY(1,1) NOT NULL PRIMARY KEY, + Guid UNIQUEIDENTIFIER NOT NULL, TaskID NVARCHAR(255), ScheduleID INT NOT NULL, PackageID INT NOT NULL, @@ -917,9 +888,14 @@ CREATE TABLE BackgroundTaskStack ) GO +IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'AddBackgroundTask') +DROP PROCEDURE AddBackgroundTask +GO + CREATE PROCEDURE [dbo].[AddBackgroundTask] ( @BackgroundTaskID INT OUTPUT, + @Guid UNIQUEIDENTIFIER, @TaskID NVARCHAR(255), @ScheduleID INT, @PackageID INT, @@ -942,6 +918,7 @@ AS INSERT INTO BackgroundTasks ( + Guid, TaskID, ScheduleID, PackageID, @@ -962,6 +939,7 @@ INSERT INTO BackgroundTasks ) VALUES ( + @Guid, @TaskID, @ScheduleID, @PackageID, @@ -986,6 +964,10 @@ SET @BackgroundTaskID = SCOPE_IDENTITY() RETURN GO +IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'GetBackgroundTask') +DROP PROCEDURE GetBackgroundTask +GO + CREATE PROCEDURE [dbo].[GetBackgroundTask] ( @ActorID INT, @@ -995,6 +977,7 @@ AS SELECT TOP 1 T.ID, + T.Guid, T.TaskID, T.ScheduleID, T.PackageID, @@ -1019,6 +1002,10 @@ INNER JOIN BackgroundTaskStack AS TS WHERE T.TaskID = @TaskID AND T.UserID = @ActorID GO +IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'GetBackgroundTasks') +DROP PROCEDURE GetBackgroundTasks +GO + CREATE PROCEDURE [dbo].[GetBackgroundTasks] ( @ActorID INT @@ -1027,6 +1014,7 @@ AS SELECT T.ID, + T.Guid, T.TaskID, T.ScheduleId, T.PackageId, @@ -1051,14 +1039,20 @@ INNER JOIN BackgroundTaskStack AS TS WHERE T.UserID = @ActorID GO -CREATE PROCEDURE [dbo].[GetBackgroundTopTask] +IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'GetThreadBackgroundTasks') +DROP PROCEDURE GetThreadBackgroundTasks +GO + +CREATE PROCEDURE [dbo].GetThreadBackgroundTasks ( - @ActorID INT + @ActorID INT, + @Guid UNIQUEIDENTIFIER ) AS -SELECT TOP 1 +SELECT T.ID, + T.Guid, T.TaskID, T.ScheduleId, T.PackageId, @@ -1080,10 +1074,52 @@ SELECT TOP 1 FROM BackgroundTasks AS T INNER JOIN BackgroundTaskStack AS TS ON TS.TaskId = T.ID -WHERE T.UserID = @ActorID +WHERE T.UserID = @ActorID AND T.Guid = @Guid +GO + +IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'GetBackgroundTopTask') +DROP PROCEDURE GetBackgroundTopTask +GO + +CREATE 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.UserID = @ActorID AND T.Guid = @Guid ORDER BY T.StartDate DESC GO +IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'AddBackgroundTaskLog') +DROP PROCEDURE AddBackgroundTaskLog +GO + CREATE PROCEDURE [dbo].[AddBackgroundTaskLog] ( @TaskID INT, @@ -1121,6 +1157,10 @@ VALUES ) GO +IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'GetBackgroundTaskLogs') +DROP PROCEDURE GetBackgroundTaskLogs +GO + CREATE PROCEDURE [dbo].[GetBackgroundTaskLogs] ( @TaskID INT, @@ -1142,8 +1182,13 @@ WHERE L.TaskID = @TaskID AND L.Date >= @StartLogTime ORDER BY L.Date GO +IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'UpdateBackgroundTask') +DROP PROCEDURE UpdateBackgroundTask +GO + CREATE PROCEDURE [dbo].[UpdateBackgroundTask] ( + @Guid UNIQUEIDENTIFIER, @TaskID INT, @ScheduleID INT, @PackageID INT, @@ -1164,6 +1209,7 @@ AS UPDATE BackgroundTasks SET + Guid = @Guid, ScheduleID = @ScheduleID, PackageID = @PackageID, TaskName = @TaskName, @@ -1181,6 +1227,10 @@ SET WHERE ID = @TaskID GO +IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'GetBackgroundTaskParams') +DROP PROCEDURE GetBackgroundTaskParams +GO + CREATE PROCEDURE [dbo].[GetBackgroundTaskParams] ( @TaskID INT @@ -1196,6 +1246,10 @@ FROM BackgroundTaskParameters AS P WHERE P.TaskID = @TaskID GO +IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'AddBackgroundTaskParam') +DROP PROCEDURE AddBackgroundTaskParam +GO + CREATE PROCEDURE [dbo].[AddBackgroundTaskParam] ( @TaskID INT, @@ -1218,6 +1272,10 @@ VALUES ) GO +IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'DeleteBackgroundTaskParams') +DROP PROCEDURE DeleteBackgroundTaskParams +GO + CREATE PROCEDURE [dbo].[DeleteBackgroundTaskParams] ( @TaskID INT @@ -1228,6 +1286,10 @@ DELETE FROM BackgroundTaskParameters WHERE TaskID = @TaskID GO +IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'AddBackgroundTaskStack') +DROP PROCEDURE AddBackgroundTaskStack +GO + CREATE PROCEDURE [dbo].[AddBackgroundTaskStack] ( @TaskID INT @@ -1244,6 +1306,10 @@ VALUES ) GO +IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'DeleteBackgroundTaskStack') +DROP PROCEDURE DeleteBackgroundTaskStack +GO + CREATE PROCEDURE [dbo].[DeleteBackgroundTaskStack] ( @TaskID INT @@ -1254,6 +1320,10 @@ DELETE FROM BackgroundTaskStack WHERE TaskID = @TaskID GO +IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'GetProcessBackgroundTasks') +DROP PROCEDURE GetProcessBackgroundTasks +GO + CREATE PROCEDURE [dbo].[GetProcessBackgroundTasks] ( @ActorID INT, @@ -1283,4 +1353,44 @@ SELECT T.Status FROM BackgroundTasks AS T WHERE T.UserID = @ActorID AND T.Completed = 0 AND T.Status = @Status +GO + +IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'GetScheduleBackgroundTasks') +DROP PROCEDURE GetScheduleBackgroundTasks +GO + +CREATE PROCEDURE [dbo].[GetScheduleBackgroundTasks] +( + @ActorID INT, + @ScheduleID INT +) +AS + +SELECT + T.ID, + 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 +WHERE T.Guid = ( + SELECT Guid FROM BackgroundTasks + WHERE ScheduleID = @ScheduleID + 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 \ No newline at end of file diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Base/Scheduling/ScheduleInfo.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Base/Scheduling/ScheduleInfo.cs index f618286d..4a8d0a54 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Base/Scheduling/ScheduleInfo.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Base/Scheduling/ScheduleInfo.cs @@ -45,7 +45,6 @@ namespace WebsitePanel.EnterpriseServer private DateTime toTime; private DateTime startTime; private DateTime lastRun; - private DateTime lastFinish; private DateTime nextRun; private bool enabled; private string statusId; @@ -122,12 +121,6 @@ namespace WebsitePanel.EnterpriseServer set { this.lastRun = value; } } - public System.DateTime LastFinish - { - get { return this.lastFinish; } - set { this.lastFinish = value; } - } - public System.DateTime NextRun { get { return this.nextRun; } diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Base/Tasks/BackgroundTask.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Base/Tasks/BackgroundTask.cs index afc5546e..6b741c18 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Base/Tasks/BackgroundTask.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Base/Tasks/BackgroundTask.cs @@ -43,6 +43,8 @@ namespace WebsitePanel.EnterpriseServer public int Id { get; set; } + public Guid Guid { get; set; } + public String TaskId { get; set; } public int ScheduleId { get; set; } @@ -98,10 +100,11 @@ namespace WebsitePanel.EnterpriseServer Logs = new List(); } - public BackgroundTask(String taskId, int userId, int effectiveUserId, String source, String taskName, String itemName, + public BackgroundTask(Guid guid, String taskId, int userId, int effectiveUserId, String source, String taskName, String itemName, int itemId, int scheduleId, int packageId, int maximumExecutionTime, List parameters) : this() { + Guid = guid; TaskId = taskId; UserId = userId; EffectiveUserId = effectiveUserId; @@ -172,6 +175,8 @@ namespace WebsitePanel.EnterpriseServer public Object Value { get; set; } + public String TypeName { get; set; } + public String SerializerValue { get; set; } #endregion diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Data/DataProvider.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Data/DataProvider.cs index cc069d0c..85df4b3f 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Data/DataProvider.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Data/DataProvider.cs @@ -1845,29 +1845,46 @@ namespace WebsitePanel.EnterpriseServer new SqlParameter("@taskId", taskId)); } + public static IDataReader GetScheduleBackgroundTasks(int actorId, int scheduleId) + { + return SqlHelper.ExecuteReader(ConnectionString, CommandType.StoredProcedure, + ObjectQualifier + "GetScheduleBackgroundTasks", + new SqlParameter("@actorId", actorId), + new SqlParameter("@scheduleId", scheduleId)); + } + public static IDataReader GetBackgroundTasks(int actorId) { return SqlHelper.ExecuteReader(ConnectionString, CommandType.StoredProcedure, ObjectQualifier + "GetBackgroundTasks", - new SqlParameter("actorId", actorId)); + new SqlParameter("@actorId", actorId)); + } + + public static IDataReader GetBackgroundTasks(int actorId, Guid guid) + { + return SqlHelper.ExecuteReader(ConnectionString, CommandType.StoredProcedure, + ObjectQualifier + "GetThreadBackgroundTasks", + new SqlParameter("@actorId", actorId), + new SqlParameter("@guid", guid)); } public static IDataReader GetProcessBackgroundTasks(int actorId, BackgroundTaskStatus status) { return SqlHelper.ExecuteReader(ConnectionString, CommandType.StoredProcedure, ObjectQualifier + "GetProcessBackgroundTasks", - new SqlParameter("actorId", actorId), - new SqlParameter("status", (int)status)); + new SqlParameter("@actorId", actorId), + new SqlParameter("@status", (int)status)); } - public static IDataReader GetBackgroundTopTask(int actorId) + public static IDataReader GetBackgroundTopTask(int actorId, Guid guid) { return SqlHelper.ExecuteReader(ConnectionString, CommandType.StoredProcedure, ObjectQualifier + "GetBackGroundTopTask", - new SqlParameter("actorId", actorId)); + new SqlParameter("@actorId", actorId), + new SqlParameter("@guid", guid)); } - public static int AddBackgroundTask(string taskId, int scheduleId, int packageId, int userId, + public static int AddBackgroundTask(Guid guid, string taskId, int scheduleId, int packageId, int userId, int effectiveUserId, string taskName, int itemId, string itemName, DateTime startDate, int indicatorCurrent, int indicatorMaximum, int maximumExecutionTime, string source, int severity, bool completed, bool notifyOnComplete, BackgroundTaskStatus status) @@ -1878,6 +1895,7 @@ namespace WebsitePanel.EnterpriseServer SqlHelper.ExecuteNonQuery(ConnectionString, CommandType.StoredProcedure, ObjectQualifier + "AddBackgroundTask", prmId, + new SqlParameter("@guid", guid), new SqlParameter("@taskId", taskId), new SqlParameter("@scheduleId", scheduleId), new SqlParameter("@packageId", packageId), @@ -1923,12 +1941,13 @@ namespace WebsitePanel.EnterpriseServer new SqlParameter("@startLogTime", startLogTime)); } - public static void UpdateBackgroundTask(int taskId, int scheduleId, int packageId, string taskName, int itemId, + public static void UpdateBackgroundTask(Guid guid, int taskId, int scheduleId, int packageId, string taskName, int itemId, string itemName, DateTime finishDate, int indicatorCurrent, int indicatorMaximum, int maximumExecutionTime, string source, int severity, bool completed, bool notifyOnComplete, BackgroundTaskStatus status) { SqlHelper.ExecuteNonQuery(ConnectionString, CommandType.StoredProcedure, ObjectQualifier + "UpdateBackgroundTask", + new SqlParameter("@Guid", guid), new SqlParameter("@taskId", taskId), new SqlParameter("@scheduleId", scheduleId), new SqlParameter("@packageId", packageId), @@ -2002,13 +2021,6 @@ namespace WebsitePanel.EnterpriseServer new SqlParameter("@taskId", taskId)); } - public static IDataReader GetRunningSchedules(int actorId) - { - return SqlHelper.ExecuteReader(ConnectionString, CommandType.StoredProcedure, - ObjectQualifier + "GetRunningSchedules", - new SqlParameter("@actorId", actorId)); - } - public static DataSet GetSchedules(int actorId, int packageId) { return SqlHelper.ExecuteDataset(ConnectionString, CommandType.StoredProcedure, @@ -2107,7 +2119,7 @@ namespace WebsitePanel.EnterpriseServer public static void UpdateSchedule(int actorId, int scheduleId, string taskId, string scheduleName, string scheduleTypeId, int interval, DateTime fromTime, DateTime toTime, DateTime startTime, - DateTime lastRun, DateTime lastFinish, DateTime nextRun, bool enabled, string priorityId, + DateTime lastRun, DateTime nextRun, bool enabled, string priorityId, int historiesNumber, int maxExecutionTime, int weekMonthDay, string xmlParameters) { SqlHelper.ExecuteNonQuery(ConnectionString, CommandType.StoredProcedure, @@ -2122,7 +2134,6 @@ namespace WebsitePanel.EnterpriseServer new SqlParameter("@toTime", toTime), new SqlParameter("@startTime", startTime), new SqlParameter("@lastRun", (lastRun == DateTime.MinValue) ? DBNull.Value : (object)lastRun), - new SqlParameter("@lastFinish", (lastFinish == DateTime.MinValue) ? DBNull.Value : (object)lastFinish), new SqlParameter("@nextRun", nextRun), new SqlParameter("@enabled", enabled), new SqlParameter("@priorityId", priorityId), diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Ecommerce/TaskEventHandlers/SendEmailNotification.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Ecommerce/TaskEventHandlers/SendEmailNotification.cs index 8dbdf99e..114c09e6 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Ecommerce/TaskEventHandlers/SendEmailNotification.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Ecommerce/TaskEventHandlers/SendEmailNotification.cs @@ -45,7 +45,7 @@ namespace WebsitePanel.Ecommerce.EnterpriseServer.TaskEventHandlers /// public override void OnComplete() { - BackgroundTask topTask = TaskController.GetTopTask(); + BackgroundTask topTask = TaskManager.TopTask; if (!TaskManager.HasErrors(topTask)) { @@ -74,7 +74,7 @@ namespace WebsitePanel.Ecommerce.EnterpriseServer.TaskEventHandlers // send an e-mail notification try { - BackgroundTask topTask = TaskController.GetTopTask(); + BackgroundTask topTask = TaskManager.TopTask; bool sendNotification = Utils.ParseBool(topTask.GetParamValue(SystemTaskParams.PARAM_SEND_EMAIL), false); @@ -117,7 +117,7 @@ namespace WebsitePanel.Ecommerce.EnterpriseServer.TaskEventHandlers // try { - BackgroundTask topTask = TaskController.GetTopTask(); + BackgroundTask topTask = TaskManager.TopTask; // Read task parameters Invoice invoice = (Invoice)topTask.GetParamValue(SystemTaskParams.PARAM_INVOICE); @@ -146,7 +146,7 @@ namespace WebsitePanel.Ecommerce.EnterpriseServer.TaskEventHandlers // try { - BackgroundTask topTask = TaskController.GetTopTask(); + BackgroundTask topTask = TaskManager.TopTask; // Read task parameters Contract contract = (Contract)topTask.GetParamValue(SystemTaskParams.PARAM_CONTRACT); diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Ecommerce/TaskEventHandlers/SystemTriggersAgent.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Ecommerce/TaskEventHandlers/SystemTriggersAgent.cs index cc7f4edd..b7b8efec 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Ecommerce/TaskEventHandlers/SystemTriggersAgent.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Ecommerce/TaskEventHandlers/SystemTriggersAgent.cs @@ -44,7 +44,7 @@ namespace WebsitePanel.Ecommerce.EnterpriseServer.TaskEventHandlers public override void OnComplete() { - BackgroundTask topTask = TaskController.GetTopTask(); + BackgroundTask topTask = TaskManager.TopTask; if (!TaskManager.HasErrors(topTask)) { @@ -66,10 +66,8 @@ namespace WebsitePanel.Ecommerce.EnterpriseServer.TaskEventHandlers private void RegisterInvoiceActivationTrigger() { - BackgroundTask topTask = TaskController.GetTopTask(); - // Read contract invoice - Invoice invoice = (Invoice)topTask.GetParamValue(SystemTaskParams.PARAM_INVOICE); + Invoice invoice = (Invoice)TaskManager.TopTask.GetParamValue(SystemTaskParams.PARAM_INVOICE); // TriggerSystem.TriggerController.AddSystemTrigger(invoice.InvoiceId.ToString(), ActivateInvoiceTrigger.STATUS_AWAITING_PAYMENT, typeof(ActivateInvoiceTrigger)); @@ -77,7 +75,7 @@ namespace WebsitePanel.Ecommerce.EnterpriseServer.TaskEventHandlers private void RegisterContractActivationTrigger() { - BackgroundTask topTask = TaskController.GetTopTask(); + BackgroundTask topTask = TaskManager.TopTask; // Ensure the contract has been registered successfully if (topTask.ContainsParam(SystemTaskParams.PARAM_CONTRACT)) @@ -94,7 +92,7 @@ namespace WebsitePanel.Ecommerce.EnterpriseServer.TaskEventHandlers private void ActivatePaymentSystemTriggers() { - BackgroundTask topTask = TaskController.GetTopTask(); + BackgroundTask topTask = TaskManager.TopTask; CustomerPayment payment = (CustomerPayment)topTask.GetParamValue(SystemTaskParams.PARAM_PAYMENT); Contract contract = (Contract)topTask.GetParamValue(SystemTaskParams.PARAM_CONTRACT); diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Packages/PackageController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Packages/PackageController.cs index 9ebfda7d..522000ad 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Packages/PackageController.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Packages/PackageController.cs @@ -617,7 +617,7 @@ namespace WebsitePanel.EnterpriseServer } } - BackgroundTask topTask = TaskController.GetTopTask(); + BackgroundTask topTask = TaskManager.TopTask; topTask.ItemId = userId; topTask.UpdateParamValue("SendLetter", sendLetter); @@ -722,7 +722,7 @@ namespace WebsitePanel.EnterpriseServer if (homeId < 0) result.Result = homeId; - BackgroundTask topTask = TaskController.GetTopTask(); + BackgroundTask topTask = TaskManager.TopTask; topTask.ItemId = userId; topTask.UpdateParamValue("Signup", signup); diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Provisioning/BackupController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Provisioning/BackupController.cs index f11491af..fb4a6d20 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Provisioning/BackupController.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Provisioning/BackupController.cs @@ -342,7 +342,8 @@ namespace WebsitePanel.EnterpriseServer } } - BackgroundTask topTask = TaskController.GetTopTask(); + BackgroundTask topTask = TaskManager.TopTask; + topTask.IndicatorCurrent = topTask.IndicatorMaximum; TaskController.UpdateTask(topTask); diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/BackupDatabaseTask.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/BackupDatabaseTask.cs index f6cfa5b1..9a871c66 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/BackupDatabaseTask.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/BackupDatabaseTask.cs @@ -46,7 +46,7 @@ namespace WebsitePanel.EnterpriseServer // - BACKUP_NAME // - ZIP_BACKUP - BackgroundTask topTask = TaskController.GetTopTask(); + BackgroundTask topTask = TaskManager.TopTask; string databaseGroup = (string)topTask.GetParamValue("DATABASE_GROUP"); string databaseName = (string)topTask.GetParamValue("DATABASE_NAME"); diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/BackupTask.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/BackupTask.cs index cabc75e6..164f5ea9 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/BackupTask.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/BackupTask.cs @@ -54,7 +54,7 @@ namespace WebsitePanel.EnterpriseServer string storeServerFolder; bool deleteTempBackup; - BackgroundTask topTask = TaskController.GetTopTask(); + BackgroundTask topTask = TaskManager.TopTask; try { diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/CalculateExchangeDiskspaceTask.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/CalculateExchangeDiskspaceTask.cs index fb49452f..b6e477cc 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/CalculateExchangeDiskspaceTask.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/CalculateExchangeDiskspaceTask.cs @@ -45,10 +45,8 @@ namespace WebsitePanel.EnterpriseServer public void CalculateDiskspace() { - BackgroundTask topTask = TaskController.GetTopTask(); - // get all space organizations recursively - List items = ExchangeServerController.GetExchangeOrganizations(topTask.PackageId, true); + List items = ExchangeServerController.GetExchangeOrganizations(TaskManager.TopTask.PackageId, true); foreach (Organization item in items) { diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/CalculatePackagesBandwidthTask.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/CalculatePackagesBandwidthTask.cs index 2cf26867..995415f9 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/CalculatePackagesBandwidthTask.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/CalculatePackagesBandwidthTask.cs @@ -50,10 +50,8 @@ namespace WebsitePanel.EnterpriseServer public void CalculateBandwidth() { - BackgroundTask topTask = TaskController.GetTopTask(); - // get all owned packages - List packages = PackageController.GetPackagePackages(topTask.PackageId, true); + List packages = PackageController.GetPackagePackages(TaskManager.TopTask.PackageId, true); TaskManager.Write("Packages to calculate: " + packages.Count.ToString()); foreach (PackageInfo package in packages) diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/CalculatePackagesDiskspaceTask.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/CalculatePackagesDiskspaceTask.cs index d3f15df8..200648cc 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/CalculatePackagesDiskspaceTask.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/CalculatePackagesDiskspaceTask.cs @@ -51,10 +51,8 @@ namespace WebsitePanel.EnterpriseServer public void CalculateDiskspace() { - BackgroundTask topTask = TaskController.GetTopTask(); - // get all owned packages - List packages = PackageController.GetPackagePackages(topTask.PackageId, true); + List packages = PackageController.GetPackagePackages(TaskManager.TopTask.PackageId, true); TaskManager.Write("Packages to calculate: " + packages.Count.ToString()); foreach (PackageInfo package in packages) diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/CheckWebSiteTask.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/CheckWebSiteTask.cs index 438fbc41..574e3d26 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/CheckWebSiteTask.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/CheckWebSiteTask.cs @@ -57,7 +57,7 @@ namespace WebsitePanel.EnterpriseServer // - MAIL_SUBJECT // - MAIL_BODY - BackgroundTask topTask = TaskController.GetTopTask(); + BackgroundTask topTask = TaskManager.TopTask; // get input parameters string url = (string)topTask.GetParamValue("URL"); @@ -128,7 +128,7 @@ namespace WebsitePanel.EnterpriseServer private void SendMailMessage(string url, string message, string content) { - BackgroundTask topTask = TaskController.GetTopTask(); + BackgroundTask topTask = TaskManager.TopTask; // input parameters string mailFrom = (string)topTask.GetParamValue("MAIL_FROM"); diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/FTPFilesTask.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/FTPFilesTask.cs index 35ff4e85..1738f145 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/FTPFilesTask.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/FTPFilesTask.cs @@ -46,7 +46,7 @@ namespace WebsitePanel.EnterpriseServer // - FTP_PASSWORD // - FTP_FOLDER - BackgroundTask topTask = TaskController.GetTopTask(); + BackgroundTask topTask = TaskManager.TopTask; // get input parameters string filePath = (string)topTask.GetParamValue("FILE_PATH"); diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/HostedSolutionReport.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/HostedSolutionReport.cs index 68dea40f..fedeb3e8 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/HostedSolutionReport.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/HostedSolutionReport.cs @@ -51,7 +51,7 @@ namespace WebsitePanel.EnterpriseServer { try { - BackgroundTask topTask = TaskController.GetTopTask(); + BackgroundTask topTask = TaskManager.TopTask; bool isExchange = Utils.ParseBool(topTask.GetParamValue(EXCHANGE_REPORT), false); bool isSharePoint = Utils.ParseBool(topTask.GetParamValue(SHAREPOINT_REPORT), false); diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/NotifyOverusedDatabasesTask.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/NotifyOverusedDatabasesTask.cs index 3700bc0a..b38e5f38 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/NotifyOverusedDatabasesTask.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/NotifyOverusedDatabasesTask.cs @@ -44,7 +44,7 @@ namespace WebsitePanel.EnterpriseServer // - DISKSPACE_OVERUSED // - BANDWIDTH_OVERUSED - BackgroundTask topTask = TaskController.GetTopTask(); + BackgroundTask topTask = TaskManager.TopTask; // get the list of all packages List packages = PackageController.GetPackagePackages(topTask.PackageId, false); diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/RunSystemCommandTask.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/RunSystemCommandTask.cs index 0de5b022..e05bf145 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/RunSystemCommandTask.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/RunSystemCommandTask.cs @@ -42,7 +42,7 @@ namespace WebsitePanel.EnterpriseServer // - SERVER_NAME // - EXECUTABLE_PATH - BackgroundTask topTask = TaskController.GetTopTask(); + BackgroundTask topTask = TaskManager.TopTask; // get input parameters string serverName = (string)topTask.GetParamValue("SERVER_NAME"); diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/SendMailNotificationTask.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/SendMailNotificationTask.cs index a882010c..b7a0308f 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/SendMailNotificationTask.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/SendMailNotificationTask.cs @@ -42,7 +42,7 @@ namespace WebsitePanel.EnterpriseServer // - MAIL_SUBJECT // - MAIL_BODY - BackgroundTask topTask = TaskController.GetTopTask(); + BackgroundTask topTask = TaskManager.TopTask; // get input parameters string mailFrom = (string)topTask.GetParamValue("MAIL_FROM"); diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/SuspendOverusedPackagesTask.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/SuspendOverusedPackagesTask.cs index e5cd0413..e7201be1 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/SuspendOverusedPackagesTask.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/SuspendOverusedPackagesTask.cs @@ -43,7 +43,7 @@ namespace WebsitePanel.EnterpriseServer // - DISKSPACE_OVERUSED // - BANDWIDTH_OVERUSED - BackgroundTask topTask = TaskController.GetTopTask(); + BackgroundTask topTask = TaskManager.TopTask; // get the list of all packages List packages = PackageController.GetPackagePackages(topTask.PackageId, false); diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/ZipFilesTask.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/ZipFilesTask.cs index 52aee2b9..20247fee 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/ZipFilesTask.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/ZipFilesTask.cs @@ -40,7 +40,7 @@ namespace WebsitePanel.EnterpriseServer // - FOLDER // - ZIP_FILE - BackgroundTask topTask = TaskController.GetTopTask(); + BackgroundTask topTask = TaskManager.TopTask; // get input parameters string filesList = (string)topTask.GetParamValue("FOLDER"); diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Scheduling/Scheduler.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Scheduling/Scheduler.cs index bc8b8490..e111920c 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Scheduling/Scheduler.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Scheduling/Scheduler.cs @@ -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) diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Scheduling/SchedulerController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Scheduling/SchedulerController.cs index 62c067d8..1a2c354a 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Scheduling/SchedulerController.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Scheduling/SchedulerController.cs @@ -55,12 +55,6 @@ namespace WebsitePanel.EnterpriseServer DataProvider.GetScheduleTask(SecurityContext.User.UserId, taskId)); } - public static List GetRunningSchedules() - { - return ObjectUtils.CreateListFromDataReader( - 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 diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Tasks/SendEmailNotification.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Tasks/SendEmailNotification.cs index e69beb1f..e36eacb6 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Tasks/SendEmailNotification.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Tasks/SendEmailNotification.cs @@ -40,7 +40,7 @@ namespace WebsitePanel.EnterpriseServer.Tasks public override void OnComplete() { - BackgroundTask topTask = TaskController.GetTopTask(); + BackgroundTask topTask = TaskManager.TopTask; if (!TaskManager.HasErrors(topTask)) { @@ -78,7 +78,7 @@ namespace WebsitePanel.EnterpriseServer.Tasks { try { - BackgroundTask topTask = TaskController.GetTopTask(); + BackgroundTask topTask = TaskManager.TopTask; bool sendLetter = Utils.ParseBool(topTask.GetParamValue("SendLetter"), false); @@ -98,7 +98,7 @@ namespace WebsitePanel.EnterpriseServer.Tasks { try { - BackgroundTask topTask = TaskController.GetTopTask(); + BackgroundTask topTask = TaskManager.TopTask; int userId = Utils.ParseInt(topTask.GetParamValue("UserId").ToString(), 0); bool sendLetter = Utils.ParseBool(topTask.GetParamValue("SendLetter"), false); @@ -125,7 +125,7 @@ namespace WebsitePanel.EnterpriseServer.Tasks { try { - BackgroundTask topTask = TaskController.GetTopTask(); + BackgroundTask topTask = TaskManager.TopTask; bool sendLetter = Utils.ParseBool(topTask.GetParamValue("SendLetter"), false); diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Tasks/TaskController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Tasks/TaskController.cs index 1959d789..d3ece14a 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Tasks/TaskController.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Tasks/TaskController.cs @@ -15,32 +15,39 @@ namespace WebsitePanel.EnterpriseServer BackgroundTask task = ObjectUtils.FillObjectFromDataReader( DataProvider.GetBackgroundTask(SecurityContext.User.UserId, taskId)); - if (task == null) - { - return null; - } - task.Params = GetTaskParams(task.Id); return task; } + public static List GetScheduleTasks(int scheduleId) + { + return ObjectUtils.CreateListFromDataReader( + DataProvider.GetScheduleBackgroundTasks(SecurityContext.User.UserId, scheduleId)); + } + public static List GetTasks() { return ObjectUtils.CreateListFromDataReader( DataProvider.GetBackgroundTasks(SecurityContext.User.UserId)); } + public static List GetTasks(Guid guid) + { + return ObjectUtils.CreateListFromDataReader( + DataProvider.GetBackgroundTasks(SecurityContext.User.UserId, guid)); + } + public static List GetProcessTasks(BackgroundTaskStatus status) { return ObjectUtils.CreateListFromDataReader( DataProvider.GetProcessBackgroundTasks(SecurityContext.User.UserId, status)); } - public static BackgroundTask GetTopTask() + public static BackgroundTask GetTopTask(Guid guid) { BackgroundTask task = ObjectUtils.FillObjectFromDataReader( - DataProvider.GetBackgroundTopTask(SecurityContext.User.UserId)); + DataProvider.GetBackgroundTopTask(SecurityContext.User.UserId, guid)); task.Params = GetTaskParams(task.Id); @@ -49,7 +56,7 @@ namespace WebsitePanel.EnterpriseServer public static void AddTask(BackgroundTask task) { - int taskId = DataProvider.AddBackgroundTask(task.TaskId, task.ScheduleId, task.PackageId, task.UserId, + int taskId = DataProvider.AddBackgroundTask(task.Guid, task.TaskId, task.ScheduleId, task.PackageId, task.UserId, task.EffectiveUserId, task.TaskName, task.ItemId, task.ItemName, task.StartDate, task.IndicatorCurrent, task.IndicatorMaximum, task.MaximumExecutionTime, task.Source, task.Severity, task.Completed, @@ -62,14 +69,14 @@ namespace WebsitePanel.EnterpriseServer public static void UpdateTask(BackgroundTask task) { - DataProvider.UpdateBackgroundTask(task.Id, task.ScheduleId, task.PackageId, task.TaskName, task.ItemId, + 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) + if (task.Completed || task.Status == BackgroundTaskStatus.Abort || task.Status == BackgroundTaskStatus.Stopping) { DeleteTaskStack(task.Id); } @@ -82,6 +89,11 @@ namespace WebsitePanel.EnterpriseServer public static void AddTaskParams(int taskId, List parameters) { + if (parameters == null) + { + return; + } + foreach (BackgroundTaskParameter param in SerializeParams(parameters)) { DataProvider.AddBackgroundTaskParam(taskId, param.Name, param.SerializerValue); @@ -117,14 +129,11 @@ namespace WebsitePanel.EnterpriseServer private static List SerializeParams(List parameters) { - if (parameters == null) - { - return new List(); - } - foreach (BackgroundTaskParameter param in parameters) { - XmlSerializer serializer = new XmlSerializer(param.Value.GetType()); + param.TypeName = param.Value.GetType().Name; + + XmlSerializer serializer = new XmlSerializer(Type.GetType(param.TypeName)); MemoryStream ms = new MemoryStream(); serializer.Serialize(ms, param.Value); @@ -141,7 +150,7 @@ namespace WebsitePanel.EnterpriseServer { foreach (BackgroundTaskParameter param in parameters) { - XmlSerializer deserializer = new XmlSerializer(param.SerializerValue.GetType()); + XmlSerializer deserializer = new XmlSerializer(Type.GetType(param.TypeName)); StringReader sr = new StringReader(param.SerializerValue); param.Value = deserializer.Deserialize(sr); diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Tasks/TaskManager.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Tasks/TaskManager.cs index c45270f6..1c6143dc 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Tasks/TaskManager.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Tasks/TaskManager.cs @@ -52,6 +52,20 @@ namespace WebsitePanel.EnterpriseServer 60000, // start from 1 minute 60000); // invoke each minute + protected static Guid? _Guid; + + public static Guid Guid + { + get + { + if (_Guid == null) + { + _Guid = Guid.NewGuid(); + } + + return _Guid.Value; + } + } public static void StartTask(string source, string taskName) { @@ -142,10 +156,10 @@ namespace WebsitePanel.EnterpriseServer int effectiveUserId = SecurityContext.User.IsPeer ? SecurityContext.User.OwnerId : userId; String itemNameStr = itemName != null ? itemName.ToString() : String.Empty; - BackgroundTask task = new BackgroundTask(taskId, userId, effectiveUserId, source, taskName, itemNameStr, + BackgroundTask task = new BackgroundTask(Guid, taskId, userId, effectiveUserId, source, taskName, itemNameStr, itemId, scheduleId, packageId, maximumExecutionTime, parameters); - List tasks = TaskController.GetTasks(); + List tasks = TaskController.GetTasks(Guid); if (tasks.Count > 0) { @@ -191,10 +205,10 @@ namespace WebsitePanel.EnterpriseServer // ERROR WriteLogRecord(2, ex.Message, ex.StackTrace); - BackgroundTask topTask = TaskController.GetTopTask(); - - return new Exception((topTask != null) ? String.Format("Error executing '{0}' task on '{1}' {2}", - topTask.TaskName, topTask.ItemName, topTask.Source) : String.Format("Error executing task"), ex); + return new Exception((TopTask != null) + ? String.Format("Error executing '{0}' task on '{1}' {2}", + TopTask.TaskName, TopTask.ItemName, TopTask.Source) + : String.Format("Error executing task"), ex); } public static void WriteError(Exception ex, string text, params string[] textParameters) @@ -219,7 +233,7 @@ namespace WebsitePanel.EnterpriseServer private static void WriteLogRecord(int severity, string text, string stackTrace, params string[] textParameters) { - List tasks = TaskController.GetTasks(); + List tasks = TaskController.GetTasks(Guid); if (tasks.Count > 0) { @@ -246,12 +260,12 @@ namespace WebsitePanel.EnterpriseServer public static void CompleteTask() { - List tasks = TaskController.GetTasks(); + List tasks = TaskController.GetTasks(Guid); if (tasks.Count == 0) return; - BackgroundTask topTask = TaskController.GetTopTask(); + BackgroundTask topTask = tasks[tasks.Count - 1]; // call event handler CallTaskEventHandler(topTask, true); @@ -284,7 +298,7 @@ namespace WebsitePanel.EnterpriseServer public static void UpdateParam(String name, Object value) { - BackgroundTask topTask = TaskController.GetTopTask(); + BackgroundTask topTask = TopTask; if (topTask == null) return; @@ -298,7 +312,7 @@ namespace WebsitePanel.EnterpriseServer { set { - BackgroundTask topTask = TaskController.GetTopTask(); + BackgroundTask topTask = TopTask; if (topTask == null) return; @@ -313,7 +327,7 @@ namespace WebsitePanel.EnterpriseServer { set { - BackgroundTask topTask = TaskController.GetTopTask(); + BackgroundTask topTask = TopTask; if (topTask == null) return; @@ -326,7 +340,7 @@ namespace WebsitePanel.EnterpriseServer public static void UpdateParams(Hashtable parameters) { - BackgroundTask topTask = TaskController.GetTopTask(); + BackgroundTask topTask = TopTask; if (topTask == null) return; @@ -393,7 +407,7 @@ namespace WebsitePanel.EnterpriseServer static void PurgeCompletedTasks(object obj) { - List tasks = TaskController.GetTasks(); + List tasks = TaskController.GetTasks(Guid); foreach (BackgroundTask task in tasks) { @@ -411,7 +425,13 @@ namespace WebsitePanel.EnterpriseServer { set { - BackgroundTask topTask = TaskController.GetTopTask(); + BackgroundTask topTask = TopTask; + + if (topTask == null) + { + return; + } + topTask.IndicatorMaximum = value; TaskController.UpdateTask(topTask); @@ -422,11 +442,17 @@ namespace WebsitePanel.EnterpriseServer { get { - return TaskController.GetTopTask().IndicatorCurrent; + return TopTask.IndicatorCurrent; } set { - BackgroundTask topTask = TaskController.GetTopTask(); + BackgroundTask topTask = TopTask; + + if (topTask == null) + { + return; + } + topTask.IndicatorCurrent = value; TaskController.UpdateTask(topTask); @@ -437,11 +463,17 @@ namespace WebsitePanel.EnterpriseServer { get { - return TaskController.GetTopTask().MaximumExecutionTime; + return TopTask.MaximumExecutionTime; } set { - BackgroundTask topTask = TaskController.GetTopTask(); + BackgroundTask topTask = TopTask; + + if (topTask == null) + { + return; + } + topTask.MaximumExecutionTime = value; TaskController.UpdateTask(topTask); @@ -453,6 +485,11 @@ namespace WebsitePanel.EnterpriseServer return task.Severity == 2; } + public static BackgroundTask TopTask + { + get { return TaskController.GetTopTask(Guid); } + } + public static BackgroundTask GetTask(string taskId) { BackgroundTask task = TaskController.GetTask(taskId); diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Users/UserController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Users/UserController.cs index 1f1254e5..f1690bd6 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Users/UserController.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Users/UserController.cs @@ -448,7 +448,7 @@ namespace WebsitePanel.EnterpriseServer return BusinessErrorCodes.ERROR_USER_ALREADY_EXISTS; } - BackgroundTask topTask = TaskController.GetTopTask(); + BackgroundTask topTask = TaskManager.TopTask; topTask.ItemId = userId; topTask.UpdateParamValue("SendLetter", sendLetter); diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Virtualization/VirtualizationServerController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Virtualization/VirtualizationServerController.cs index 7dd16a43..b6dec6b3 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Virtualization/VirtualizationServerController.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Virtualization/VirtualizationServerController.cs @@ -1760,7 +1760,7 @@ namespace WebsitePanel.EnterpriseServer return res; } - BackgroundTask topTask = TaskController.GetTopTask(); + BackgroundTask topTask = TaskManager.TopTask; topTask.ItemId = machine.Id; topTask.ItemName = machine.Name; topTask.PackageId = machine.PackageId; diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/VirtualizationForPrivateCloud/VirtualizationServerControllerForPrivateCloud.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/VirtualizationForPrivateCloud/VirtualizationServerControllerForPrivateCloud.cs index d33712dd..7ec47d27 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/VirtualizationForPrivateCloud/VirtualizationServerControllerForPrivateCloud.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/VirtualizationForPrivateCloud/VirtualizationServerControllerForPrivateCloud.cs @@ -1803,7 +1803,7 @@ namespace WebsitePanel.EnterpriseServer return res; } - BackgroundTask topTask = TaskController.GetTopTask(); + BackgroundTask topTask = TaskManager.TopTask; topTask.ItemId = machine.Id; topTask.ItemName = machine.Name; topTask.PackageId = machine.PackageId; diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Wizards/WebApplicationsInstaller.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Wizards/WebApplicationsInstaller.cs index bea72671..aa40c3dd 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Wizards/WebApplicationsInstaller.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Wizards/WebApplicationsInstaller.cs @@ -101,7 +101,8 @@ namespace WebsitePanel.EnterpriseServer // get application info app = GetApplication(inst.PackageId, inst.ApplicationId); - BackgroundTask topTask = TaskController.GetTopTask(); + BackgroundTask topTask = TaskManager.TopTask; + topTask.ItemName = app.Name; TaskController.UpdateTask(topTask);