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

@ -451,12 +451,13 @@ VALUES (1401, 41, N'Lync2013', N'Microsoft Lync Server 2013 Multitenant Hosting
END END
GO GO
-- Scheduler Service -------------------------------- Scheduler Service------------------------------------------------------
ALTER TABLE Schedule
ADD LastFinish DATETIME NULL
GO
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 GO
ALTER PROCEDURE [dbo].[GetSchedule] ALTER PROCEDURE [dbo].[GetSchedule]
@ -478,7 +479,6 @@ SELECT TOP 1
S.ToTime, S.ToTime,
S.StartTime, S.StartTime,
S.LastRun, S.LastRun,
S.LastFinish,
S.NextRun, S.NextRun,
S.Enabled, S.Enabled,
S.HistoriesNumber, S.HistoriesNumber,
@ -538,7 +538,6 @@ SELECT
S.ToTime, S.ToTime,
S.StartTime, S.StartTime,
S.LastRun, S.LastRun,
S.LastFinish,
S.NextRun, S.NextRun,
S.Enabled, S.Enabled,
1 AS StatusID, 1 AS StatusID,
@ -591,7 +590,6 @@ SELECT
S.ToTime, S.ToTime,
S.StartTime, S.StartTime,
S.LastRun, S.LastRun,
S.LastFinish,
S.NextRun, S.NextRun,
S.Enabled, S.Enabled,
1 AS StatusID, 1 AS StatusID,
@ -693,7 +691,6 @@ SELECT
S.ToTime, S.ToTime,
S.StartTime, S.StartTime,
S.LastRun, S.LastRun,
S.LastFinish,
S.NextRun, S.NextRun,
S.Enabled, S.Enabled,
1 AS StatusID, 1 AS StatusID,
@ -739,7 +736,6 @@ ALTER PROCEDURE [dbo].[UpdateSchedule]
@ToTime datetime, @ToTime datetime,
@StartTime datetime, @StartTime datetime,
@LastRun datetime, @LastRun datetime,
@LastFinish datetime,
@NextRun datetime, @NextRun datetime,
@Enabled bit, @Enabled bit,
@PriorityID nvarchar(50), @PriorityID nvarchar(50),
@ -770,7 +766,6 @@ SET
ToTime = @ToTime, ToTime = @ToTime,
StartTime = @StartTime, StartTime = @StartTime,
LastRun = @LastRun, LastRun = @LastRun,
LastFinish = @LastFinish,
NextRun = @NextRun, NextRun = @NextRun,
Enabled = @Enabled, Enabled = @Enabled,
PriorityID = @PriorityID, PriorityID = @PriorityID,
@ -815,54 +810,30 @@ UPDATE ScheduleTasks SET TaskType = RTRIM(TaskType) + '.Code'
WHERE SUBSTRING(RTRIM(TaskType), LEN(RTRIM(TaskType)) - 3, 4) <> 'Code' WHERE SUBSTRING(RTRIM(TaskType), LEN(RTRIM(TaskType)) - 3, 4) <> 'Code'
GO 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 DROP PROCEDURE GetRunningSchedules
GO GO
CREATE PROCEDURE [dbo].[GetRunningSchedules] IF EXISTS (SELECT * FROM SYS.TABLES WHERE name = 'BackgroundTaskStack')
( DROP TABLE BackgroundTaskStack
@ActorID int GO
)
AS
SELECT IF EXISTS (SELECT * FROM SYS.TABLES WHERE name = 'BackgroundTaskLogs')
S.ScheduleID, DROP TABLE BackgroundTaskLogs
S.TaskID, GO
ST.TaskType,
ST.RoleID, IF EXISTS (SELECT * FROM SYS.TABLES WHERE name = 'BackgroundTaskParameters')
S.PackageID, DROP TABLE BackgroundTaskParameters
S.ScheduleName, GO
S.ScheduleTypeID,
S.Interval, IF EXISTS (SELECT * FROM SYS.TABLES WHERE name = 'BackgroundTasks')
S.FromTime, DROP TABLE BackgroundTasks
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())))
GO GO
CREATE TABLE BackgroundTasks CREATE TABLE BackgroundTasks
( (
ID INT IDENTITY(1,1) NOT NULL PRIMARY KEY, ID INT IDENTITY(1,1) NOT NULL PRIMARY KEY,
Guid UNIQUEIDENTIFIER NOT NULL,
TaskID NVARCHAR(255), TaskID NVARCHAR(255),
ScheduleID INT NOT NULL, ScheduleID INT NOT NULL,
PackageID INT NOT NULL, PackageID INT NOT NULL,
@ -917,9 +888,14 @@ CREATE TABLE BackgroundTaskStack
) )
GO GO
IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'AddBackgroundTask')
DROP PROCEDURE AddBackgroundTask
GO
CREATE PROCEDURE [dbo].[AddBackgroundTask] CREATE PROCEDURE [dbo].[AddBackgroundTask]
( (
@BackgroundTaskID INT OUTPUT, @BackgroundTaskID INT OUTPUT,
@Guid UNIQUEIDENTIFIER,
@TaskID NVARCHAR(255), @TaskID NVARCHAR(255),
@ScheduleID INT, @ScheduleID INT,
@PackageID INT, @PackageID INT,
@ -942,6 +918,7 @@ AS
INSERT INTO BackgroundTasks INSERT INTO BackgroundTasks
( (
Guid,
TaskID, TaskID,
ScheduleID, ScheduleID,
PackageID, PackageID,
@ -962,6 +939,7 @@ INSERT INTO BackgroundTasks
) )
VALUES VALUES
( (
@Guid,
@TaskID, @TaskID,
@ScheduleID, @ScheduleID,
@PackageID, @PackageID,
@ -986,6 +964,10 @@ SET @BackgroundTaskID = SCOPE_IDENTITY()
RETURN RETURN
GO GO
IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'GetBackgroundTask')
DROP PROCEDURE GetBackgroundTask
GO
CREATE PROCEDURE [dbo].[GetBackgroundTask] CREATE PROCEDURE [dbo].[GetBackgroundTask]
( (
@ActorID INT, @ActorID INT,
@ -995,6 +977,7 @@ AS
SELECT TOP 1 SELECT TOP 1
T.ID, T.ID,
T.Guid,
T.TaskID, T.TaskID,
T.ScheduleID, T.ScheduleID,
T.PackageID, T.PackageID,
@ -1019,6 +1002,10 @@ INNER JOIN BackgroundTaskStack AS TS
WHERE T.TaskID = @TaskID AND T.UserID = @ActorID WHERE T.TaskID = @TaskID AND T.UserID = @ActorID
GO GO
IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'GetBackgroundTasks')
DROP PROCEDURE GetBackgroundTasks
GO
CREATE PROCEDURE [dbo].[GetBackgroundTasks] CREATE PROCEDURE [dbo].[GetBackgroundTasks]
( (
@ActorID INT @ActorID INT
@ -1027,6 +1014,7 @@ AS
SELECT SELECT
T.ID, T.ID,
T.Guid,
T.TaskID, T.TaskID,
T.ScheduleId, T.ScheduleId,
T.PackageId, T.PackageId,
@ -1051,14 +1039,20 @@ INNER JOIN BackgroundTaskStack AS TS
WHERE T.UserID = @ActorID WHERE T.UserID = @ActorID
GO 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 AS
SELECT TOP 1 SELECT
T.ID, T.ID,
T.Guid,
T.TaskID, T.TaskID,
T.ScheduleId, T.ScheduleId,
T.PackageId, T.PackageId,
@ -1080,10 +1074,52 @@ SELECT TOP 1
FROM BackgroundTasks AS T FROM BackgroundTasks AS T
INNER JOIN BackgroundTaskStack AS TS INNER JOIN BackgroundTaskStack AS TS
ON TS.TaskId = T.ID 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 ORDER BY T.StartDate DESC
GO GO
IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'AddBackgroundTaskLog')
DROP PROCEDURE AddBackgroundTaskLog
GO
CREATE PROCEDURE [dbo].[AddBackgroundTaskLog] CREATE PROCEDURE [dbo].[AddBackgroundTaskLog]
( (
@TaskID INT, @TaskID INT,
@ -1121,6 +1157,10 @@ VALUES
) )
GO GO
IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'GetBackgroundTaskLogs')
DROP PROCEDURE GetBackgroundTaskLogs
GO
CREATE PROCEDURE [dbo].[GetBackgroundTaskLogs] CREATE PROCEDURE [dbo].[GetBackgroundTaskLogs]
( (
@TaskID INT, @TaskID INT,
@ -1142,8 +1182,13 @@ WHERE L.TaskID = @TaskID AND L.Date >= @StartLogTime
ORDER BY L.Date ORDER BY L.Date
GO GO
IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'UpdateBackgroundTask')
DROP PROCEDURE UpdateBackgroundTask
GO
CREATE PROCEDURE [dbo].[UpdateBackgroundTask] CREATE PROCEDURE [dbo].[UpdateBackgroundTask]
( (
@Guid UNIQUEIDENTIFIER,
@TaskID INT, @TaskID INT,
@ScheduleID INT, @ScheduleID INT,
@PackageID INT, @PackageID INT,
@ -1164,6 +1209,7 @@ AS
UPDATE BackgroundTasks UPDATE BackgroundTasks
SET SET
Guid = @Guid,
ScheduleID = @ScheduleID, ScheduleID = @ScheduleID,
PackageID = @PackageID, PackageID = @PackageID,
TaskName = @TaskName, TaskName = @TaskName,
@ -1181,6 +1227,10 @@ SET
WHERE ID = @TaskID WHERE ID = @TaskID
GO GO
IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'GetBackgroundTaskParams')
DROP PROCEDURE GetBackgroundTaskParams
GO
CREATE PROCEDURE [dbo].[GetBackgroundTaskParams] CREATE PROCEDURE [dbo].[GetBackgroundTaskParams]
( (
@TaskID INT @TaskID INT
@ -1196,6 +1246,10 @@ FROM BackgroundTaskParameters AS P
WHERE P.TaskID = @TaskID WHERE P.TaskID = @TaskID
GO GO
IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'AddBackgroundTaskParam')
DROP PROCEDURE AddBackgroundTaskParam
GO
CREATE PROCEDURE [dbo].[AddBackgroundTaskParam] CREATE PROCEDURE [dbo].[AddBackgroundTaskParam]
( (
@TaskID INT, @TaskID INT,
@ -1218,6 +1272,10 @@ VALUES
) )
GO GO
IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'DeleteBackgroundTaskParams')
DROP PROCEDURE DeleteBackgroundTaskParams
GO
CREATE PROCEDURE [dbo].[DeleteBackgroundTaskParams] CREATE PROCEDURE [dbo].[DeleteBackgroundTaskParams]
( (
@TaskID INT @TaskID INT
@ -1228,6 +1286,10 @@ DELETE FROM BackgroundTaskParameters
WHERE TaskID = @TaskID WHERE TaskID = @TaskID
GO GO
IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'AddBackgroundTaskStack')
DROP PROCEDURE AddBackgroundTaskStack
GO
CREATE PROCEDURE [dbo].[AddBackgroundTaskStack] CREATE PROCEDURE [dbo].[AddBackgroundTaskStack]
( (
@TaskID INT @TaskID INT
@ -1244,6 +1306,10 @@ VALUES
) )
GO GO
IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'DeleteBackgroundTaskStack')
DROP PROCEDURE DeleteBackgroundTaskStack
GO
CREATE PROCEDURE [dbo].[DeleteBackgroundTaskStack] CREATE PROCEDURE [dbo].[DeleteBackgroundTaskStack]
( (
@TaskID INT @TaskID INT
@ -1254,6 +1320,10 @@ DELETE FROM BackgroundTaskStack
WHERE TaskID = @TaskID WHERE TaskID = @TaskID
GO GO
IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'GetProcessBackgroundTasks')
DROP PROCEDURE GetProcessBackgroundTasks
GO
CREATE PROCEDURE [dbo].[GetProcessBackgroundTasks] CREATE PROCEDURE [dbo].[GetProcessBackgroundTasks]
( (
@ActorID INT, @ActorID INT,
@ -1283,4 +1353,44 @@ SELECT
T.Status T.Status
FROM BackgroundTasks AS T FROM BackgroundTasks AS T
WHERE T.UserID = @ActorID AND T.Completed = 0 AND T.Status = @Status 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 GO

View file

@ -45,7 +45,6 @@ namespace WebsitePanel.EnterpriseServer
private DateTime toTime; private DateTime toTime;
private DateTime startTime; private DateTime startTime;
private DateTime lastRun; private DateTime lastRun;
private DateTime lastFinish;
private DateTime nextRun; private DateTime nextRun;
private bool enabled; private bool enabled;
private string statusId; private string statusId;
@ -122,12 +121,6 @@ namespace WebsitePanel.EnterpriseServer
set { this.lastRun = value; } set { this.lastRun = value; }
} }
public System.DateTime LastFinish
{
get { return this.lastFinish; }
set { this.lastFinish = value; }
}
public System.DateTime NextRun public System.DateTime NextRun
{ {
get { return this.nextRun; } get { return this.nextRun; }

View file

@ -43,6 +43,8 @@ namespace WebsitePanel.EnterpriseServer
public int Id { get; set; } public int Id { get; set; }
public Guid Guid { get; set; }
public String TaskId { get; set; } public String TaskId { get; set; }
public int ScheduleId { get; set; } public int ScheduleId { get; set; }
@ -98,10 +100,11 @@ namespace WebsitePanel.EnterpriseServer
Logs = new List<BackgroundTaskLogRecord>(); Logs = new List<BackgroundTaskLogRecord>();
} }
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<BackgroundTaskParameter> parameters) int itemId, int scheduleId, int packageId, int maximumExecutionTime, List<BackgroundTaskParameter> parameters)
: this() : this()
{ {
Guid = guid;
TaskId = taskId; TaskId = taskId;
UserId = userId; UserId = userId;
EffectiveUserId = effectiveUserId; EffectiveUserId = effectiveUserId;
@ -172,6 +175,8 @@ namespace WebsitePanel.EnterpriseServer
public Object Value { get; set; } public Object Value { get; set; }
public String TypeName { get; set; }
public String SerializerValue { get; set; } public String SerializerValue { get; set; }
#endregion #endregion

View file

@ -1845,29 +1845,46 @@ namespace WebsitePanel.EnterpriseServer
new SqlParameter("@taskId", taskId)); 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) public static IDataReader GetBackgroundTasks(int actorId)
{ {
return SqlHelper.ExecuteReader(ConnectionString, CommandType.StoredProcedure, return SqlHelper.ExecuteReader(ConnectionString, CommandType.StoredProcedure,
ObjectQualifier + "GetBackgroundTasks", 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) public static IDataReader GetProcessBackgroundTasks(int actorId, BackgroundTaskStatus status)
{ {
return SqlHelper.ExecuteReader(ConnectionString, CommandType.StoredProcedure, return SqlHelper.ExecuteReader(ConnectionString, CommandType.StoredProcedure,
ObjectQualifier + "GetProcessBackgroundTasks", ObjectQualifier + "GetProcessBackgroundTasks",
new SqlParameter("actorId", actorId), new SqlParameter("@actorId", actorId),
new SqlParameter("status", (int)status)); 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, return SqlHelper.ExecuteReader(ConnectionString, CommandType.StoredProcedure,
ObjectQualifier + "GetBackGroundTopTask", 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 effectiveUserId, string taskName, int itemId, string itemName, DateTime startDate,
int indicatorCurrent, int indicatorMaximum, int maximumExecutionTime, string source, int indicatorCurrent, int indicatorMaximum, int maximumExecutionTime, string source,
int severity, bool completed, bool notifyOnComplete, BackgroundTaskStatus status) int severity, bool completed, bool notifyOnComplete, BackgroundTaskStatus status)
@ -1878,6 +1895,7 @@ namespace WebsitePanel.EnterpriseServer
SqlHelper.ExecuteNonQuery(ConnectionString, CommandType.StoredProcedure, SqlHelper.ExecuteNonQuery(ConnectionString, CommandType.StoredProcedure,
ObjectQualifier + "AddBackgroundTask", ObjectQualifier + "AddBackgroundTask",
prmId, prmId,
new SqlParameter("@guid", guid),
new SqlParameter("@taskId", taskId), new SqlParameter("@taskId", taskId),
new SqlParameter("@scheduleId", scheduleId), new SqlParameter("@scheduleId", scheduleId),
new SqlParameter("@packageId", packageId), new SqlParameter("@packageId", packageId),
@ -1923,12 +1941,13 @@ namespace WebsitePanel.EnterpriseServer
new SqlParameter("@startLogTime", startLogTime)); 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 itemName, DateTime finishDate, int indicatorCurrent, int indicatorMaximum, int maximumExecutionTime,
string source, int severity, bool completed, bool notifyOnComplete, BackgroundTaskStatus status) string source, int severity, bool completed, bool notifyOnComplete, BackgroundTaskStatus status)
{ {
SqlHelper.ExecuteNonQuery(ConnectionString, CommandType.StoredProcedure, SqlHelper.ExecuteNonQuery(ConnectionString, CommandType.StoredProcedure,
ObjectQualifier + "UpdateBackgroundTask", ObjectQualifier + "UpdateBackgroundTask",
new SqlParameter("@Guid", guid),
new SqlParameter("@taskId", taskId), new SqlParameter("@taskId", taskId),
new SqlParameter("@scheduleId", scheduleId), new SqlParameter("@scheduleId", scheduleId),
new SqlParameter("@packageId", packageId), new SqlParameter("@packageId", packageId),
@ -2002,13 +2021,6 @@ namespace WebsitePanel.EnterpriseServer
new SqlParameter("@taskId", taskId)); 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) public static DataSet GetSchedules(int actorId, int packageId)
{ {
return SqlHelper.ExecuteDataset(ConnectionString, CommandType.StoredProcedure, return SqlHelper.ExecuteDataset(ConnectionString, CommandType.StoredProcedure,
@ -2107,7 +2119,7 @@ namespace WebsitePanel.EnterpriseServer
public static void UpdateSchedule(int actorId, int scheduleId, string taskId, public static void UpdateSchedule(int actorId, int scheduleId, string taskId,
string scheduleName, string scheduleTypeId, int interval, string scheduleName, string scheduleTypeId, int interval,
DateTime fromTime, DateTime toTime, DateTime startTime, 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) int historiesNumber, int maxExecutionTime, int weekMonthDay, string xmlParameters)
{ {
SqlHelper.ExecuteNonQuery(ConnectionString, CommandType.StoredProcedure, SqlHelper.ExecuteNonQuery(ConnectionString, CommandType.StoredProcedure,
@ -2122,7 +2134,6 @@ namespace WebsitePanel.EnterpriseServer
new SqlParameter("@toTime", toTime), new SqlParameter("@toTime", toTime),
new SqlParameter("@startTime", startTime), new SqlParameter("@startTime", startTime),
new SqlParameter("@lastRun", (lastRun == DateTime.MinValue) ? DBNull.Value : (object)lastRun), 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("@nextRun", nextRun),
new SqlParameter("@enabled", enabled), new SqlParameter("@enabled", enabled),
new SqlParameter("@priorityId", priorityId), new SqlParameter("@priorityId", priorityId),

View file

@ -45,7 +45,7 @@ namespace WebsitePanel.Ecommerce.EnterpriseServer.TaskEventHandlers
/// </summary> /// </summary>
public override void OnComplete() public override void OnComplete()
{ {
BackgroundTask topTask = TaskController.GetTopTask(); BackgroundTask topTask = TaskManager.TopTask;
if (!TaskManager.HasErrors(topTask)) if (!TaskManager.HasErrors(topTask))
{ {
@ -74,7 +74,7 @@ namespace WebsitePanel.Ecommerce.EnterpriseServer.TaskEventHandlers
// send an e-mail notification // send an e-mail notification
try try
{ {
BackgroundTask topTask = TaskController.GetTopTask(); BackgroundTask topTask = TaskManager.TopTask;
bool sendNotification = Utils.ParseBool(topTask.GetParamValue(SystemTaskParams.PARAM_SEND_EMAIL), false); bool sendNotification = Utils.ParseBool(topTask.GetParamValue(SystemTaskParams.PARAM_SEND_EMAIL), false);
@ -117,7 +117,7 @@ namespace WebsitePanel.Ecommerce.EnterpriseServer.TaskEventHandlers
// //
try try
{ {
BackgroundTask topTask = TaskController.GetTopTask(); BackgroundTask topTask = TaskManager.TopTask;
// Read task parameters // Read task parameters
Invoice invoice = (Invoice)topTask.GetParamValue(SystemTaskParams.PARAM_INVOICE); Invoice invoice = (Invoice)topTask.GetParamValue(SystemTaskParams.PARAM_INVOICE);
@ -146,7 +146,7 @@ namespace WebsitePanel.Ecommerce.EnterpriseServer.TaskEventHandlers
// //
try try
{ {
BackgroundTask topTask = TaskController.GetTopTask(); BackgroundTask topTask = TaskManager.TopTask;
// Read task parameters // Read task parameters
Contract contract = (Contract)topTask.GetParamValue(SystemTaskParams.PARAM_CONTRACT); Contract contract = (Contract)topTask.GetParamValue(SystemTaskParams.PARAM_CONTRACT);

View file

@ -44,7 +44,7 @@ namespace WebsitePanel.Ecommerce.EnterpriseServer.TaskEventHandlers
public override void OnComplete() public override void OnComplete()
{ {
BackgroundTask topTask = TaskController.GetTopTask(); BackgroundTask topTask = TaskManager.TopTask;
if (!TaskManager.HasErrors(topTask)) if (!TaskManager.HasErrors(topTask))
{ {
@ -66,10 +66,8 @@ namespace WebsitePanel.Ecommerce.EnterpriseServer.TaskEventHandlers
private void RegisterInvoiceActivationTrigger() private void RegisterInvoiceActivationTrigger()
{ {
BackgroundTask topTask = TaskController.GetTopTask();
// Read contract invoice // 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(), TriggerSystem.TriggerController.AddSystemTrigger(invoice.InvoiceId.ToString(),
ActivateInvoiceTrigger.STATUS_AWAITING_PAYMENT, typeof(ActivateInvoiceTrigger)); ActivateInvoiceTrigger.STATUS_AWAITING_PAYMENT, typeof(ActivateInvoiceTrigger));
@ -77,7 +75,7 @@ namespace WebsitePanel.Ecommerce.EnterpriseServer.TaskEventHandlers
private void RegisterContractActivationTrigger() private void RegisterContractActivationTrigger()
{ {
BackgroundTask topTask = TaskController.GetTopTask(); BackgroundTask topTask = TaskManager.TopTask;
// Ensure the contract has been registered successfully // Ensure the contract has been registered successfully
if (topTask.ContainsParam(SystemTaskParams.PARAM_CONTRACT)) if (topTask.ContainsParam(SystemTaskParams.PARAM_CONTRACT))
@ -94,7 +92,7 @@ namespace WebsitePanel.Ecommerce.EnterpriseServer.TaskEventHandlers
private void ActivatePaymentSystemTriggers() private void ActivatePaymentSystemTriggers()
{ {
BackgroundTask topTask = TaskController.GetTopTask(); BackgroundTask topTask = TaskManager.TopTask;
CustomerPayment payment = (CustomerPayment)topTask.GetParamValue(SystemTaskParams.PARAM_PAYMENT); CustomerPayment payment = (CustomerPayment)topTask.GetParamValue(SystemTaskParams.PARAM_PAYMENT);
Contract contract = (Contract)topTask.GetParamValue(SystemTaskParams.PARAM_CONTRACT); Contract contract = (Contract)topTask.GetParamValue(SystemTaskParams.PARAM_CONTRACT);

View file

@ -617,7 +617,7 @@ namespace WebsitePanel.EnterpriseServer
} }
} }
BackgroundTask topTask = TaskController.GetTopTask(); BackgroundTask topTask = TaskManager.TopTask;
topTask.ItemId = userId; topTask.ItemId = userId;
topTask.UpdateParamValue("SendLetter", sendLetter); topTask.UpdateParamValue("SendLetter", sendLetter);
@ -722,7 +722,7 @@ namespace WebsitePanel.EnterpriseServer
if (homeId < 0) if (homeId < 0)
result.Result = homeId; result.Result = homeId;
BackgroundTask topTask = TaskController.GetTopTask(); BackgroundTask topTask = TaskManager.TopTask;
topTask.ItemId = userId; topTask.ItemId = userId;
topTask.UpdateParamValue("Signup", signup); topTask.UpdateParamValue("Signup", signup);

View file

@ -342,7 +342,8 @@ namespace WebsitePanel.EnterpriseServer
} }
} }
BackgroundTask topTask = TaskController.GetTopTask(); BackgroundTask topTask = TaskManager.TopTask;
topTask.IndicatorCurrent = topTask.IndicatorMaximum; topTask.IndicatorCurrent = topTask.IndicatorMaximum;
TaskController.UpdateTask(topTask); TaskController.UpdateTask(topTask);

View file

@ -46,7 +46,7 @@ namespace WebsitePanel.EnterpriseServer
// - BACKUP_NAME // - BACKUP_NAME
// - ZIP_BACKUP // - ZIP_BACKUP
BackgroundTask topTask = TaskController.GetTopTask(); BackgroundTask topTask = TaskManager.TopTask;
string databaseGroup = (string)topTask.GetParamValue("DATABASE_GROUP"); string databaseGroup = (string)topTask.GetParamValue("DATABASE_GROUP");
string databaseName = (string)topTask.GetParamValue("DATABASE_NAME"); string databaseName = (string)topTask.GetParamValue("DATABASE_NAME");

View file

@ -54,7 +54,7 @@ namespace WebsitePanel.EnterpriseServer
string storeServerFolder; string storeServerFolder;
bool deleteTempBackup; bool deleteTempBackup;
BackgroundTask topTask = TaskController.GetTopTask(); BackgroundTask topTask = TaskManager.TopTask;
try try
{ {

View file

@ -45,10 +45,8 @@ namespace WebsitePanel.EnterpriseServer
public void CalculateDiskspace() public void CalculateDiskspace()
{ {
BackgroundTask topTask = TaskController.GetTopTask();
// get all space organizations recursively // get all space organizations recursively
List<Organization> items = ExchangeServerController.GetExchangeOrganizations(topTask.PackageId, true); List<Organization> items = ExchangeServerController.GetExchangeOrganizations(TaskManager.TopTask.PackageId, true);
foreach (Organization item in items) foreach (Organization item in items)
{ {

View file

@ -50,10 +50,8 @@ namespace WebsitePanel.EnterpriseServer
public void CalculateBandwidth() public void CalculateBandwidth()
{ {
BackgroundTask topTask = TaskController.GetTopTask();
// get all owned packages // get all owned packages
List<PackageInfo> packages = PackageController.GetPackagePackages(topTask.PackageId, true); List<PackageInfo> packages = PackageController.GetPackagePackages(TaskManager.TopTask.PackageId, true);
TaskManager.Write("Packages to calculate: " + packages.Count.ToString()); TaskManager.Write("Packages to calculate: " + packages.Count.ToString());
foreach (PackageInfo package in packages) foreach (PackageInfo package in packages)

View file

@ -51,10 +51,8 @@ namespace WebsitePanel.EnterpriseServer
public void CalculateDiskspace() public void CalculateDiskspace()
{ {
BackgroundTask topTask = TaskController.GetTopTask();
// get all owned packages // get all owned packages
List<PackageInfo> packages = PackageController.GetPackagePackages(topTask.PackageId, true); List<PackageInfo> packages = PackageController.GetPackagePackages(TaskManager.TopTask.PackageId, true);
TaskManager.Write("Packages to calculate: " + packages.Count.ToString()); TaskManager.Write("Packages to calculate: " + packages.Count.ToString());
foreach (PackageInfo package in packages) foreach (PackageInfo package in packages)

View file

@ -57,7 +57,7 @@ namespace WebsitePanel.EnterpriseServer
// - MAIL_SUBJECT // - MAIL_SUBJECT
// - MAIL_BODY // - MAIL_BODY
BackgroundTask topTask = TaskController.GetTopTask(); BackgroundTask topTask = TaskManager.TopTask;
// get input parameters // get input parameters
string url = (string)topTask.GetParamValue("URL"); string url = (string)topTask.GetParamValue("URL");
@ -128,7 +128,7 @@ namespace WebsitePanel.EnterpriseServer
private void SendMailMessage(string url, string message, string content) private void SendMailMessage(string url, string message, string content)
{ {
BackgroundTask topTask = TaskController.GetTopTask(); BackgroundTask topTask = TaskManager.TopTask;
// input parameters // input parameters
string mailFrom = (string)topTask.GetParamValue("MAIL_FROM"); string mailFrom = (string)topTask.GetParamValue("MAIL_FROM");

View file

@ -46,7 +46,7 @@ namespace WebsitePanel.EnterpriseServer
// - FTP_PASSWORD // - FTP_PASSWORD
// - FTP_FOLDER // - FTP_FOLDER
BackgroundTask topTask = TaskController.GetTopTask(); BackgroundTask topTask = TaskManager.TopTask;
// get input parameters // get input parameters
string filePath = (string)topTask.GetParamValue("FILE_PATH"); string filePath = (string)topTask.GetParamValue("FILE_PATH");

View file

@ -51,7 +51,7 @@ namespace WebsitePanel.EnterpriseServer
{ {
try try
{ {
BackgroundTask topTask = TaskController.GetTopTask(); BackgroundTask topTask = TaskManager.TopTask;
bool isExchange = Utils.ParseBool(topTask.GetParamValue(EXCHANGE_REPORT), false); bool isExchange = Utils.ParseBool(topTask.GetParamValue(EXCHANGE_REPORT), false);
bool isSharePoint = Utils.ParseBool(topTask.GetParamValue(SHAREPOINT_REPORT), false); bool isSharePoint = Utils.ParseBool(topTask.GetParamValue(SHAREPOINT_REPORT), false);

View file

@ -44,7 +44,7 @@ namespace WebsitePanel.EnterpriseServer
// - DISKSPACE_OVERUSED // - DISKSPACE_OVERUSED
// - BANDWIDTH_OVERUSED // - BANDWIDTH_OVERUSED
BackgroundTask topTask = TaskController.GetTopTask(); BackgroundTask topTask = TaskManager.TopTask;
// get the list of all packages // get the list of all packages
List<PackageInfo> packages = PackageController.GetPackagePackages(topTask.PackageId, false); List<PackageInfo> packages = PackageController.GetPackagePackages(topTask.PackageId, false);

View file

@ -42,7 +42,7 @@ namespace WebsitePanel.EnterpriseServer
// - SERVER_NAME // - SERVER_NAME
// - EXECUTABLE_PATH // - EXECUTABLE_PATH
BackgroundTask topTask = TaskController.GetTopTask(); BackgroundTask topTask = TaskManager.TopTask;
// get input parameters // get input parameters
string serverName = (string)topTask.GetParamValue("SERVER_NAME"); string serverName = (string)topTask.GetParamValue("SERVER_NAME");

View file

@ -42,7 +42,7 @@ namespace WebsitePanel.EnterpriseServer
// - MAIL_SUBJECT // - MAIL_SUBJECT
// - MAIL_BODY // - MAIL_BODY
BackgroundTask topTask = TaskController.GetTopTask(); BackgroundTask topTask = TaskManager.TopTask;
// get input parameters // get input parameters
string mailFrom = (string)topTask.GetParamValue("MAIL_FROM"); string mailFrom = (string)topTask.GetParamValue("MAIL_FROM");

View file

@ -43,7 +43,7 @@ namespace WebsitePanel.EnterpriseServer
// - DISKSPACE_OVERUSED // - DISKSPACE_OVERUSED
// - BANDWIDTH_OVERUSED // - BANDWIDTH_OVERUSED
BackgroundTask topTask = TaskController.GetTopTask(); BackgroundTask topTask = TaskManager.TopTask;
// get the list of all packages // get the list of all packages
List<PackageInfo> packages = PackageController.GetPackagePackages(topTask.PackageId, false); List<PackageInfo> packages = PackageController.GetPackagePackages(topTask.PackageId, false);

View file

@ -40,7 +40,7 @@ namespace WebsitePanel.EnterpriseServer
// - FOLDER // - FOLDER
// - ZIP_FILE // - ZIP_FILE
BackgroundTask topTask = TaskController.GetTopTask(); BackgroundTask topTask = TaskManager.TopTask;
// get input parameters // get input parameters
string filesList = (string)topTask.GetParamValue("FOLDER"); string filesList = (string)topTask.GetParamValue("FOLDER");

View file

@ -115,22 +115,15 @@ namespace WebsitePanel.EnterpriseServer
var tasks = TaskController.GetProcessTasks(BackgroundTaskStatus.Starting); var tasks = TaskController.GetProcessTasks(BackgroundTaskStatus.Starting);
foreach (var task in tasks) foreach (var task in tasks)
{ {
StartManualTask(task); new Thread(() => RunBackgroundTask(task)) {Priority = ThreadPriority.Highest}.Start();
} }
tasks = TaskController.GetProcessTasks(BackgroundTaskStatus.Stopping); tasks = TaskController.GetProcessTasks(BackgroundTaskStatus.Stopping);
foreach (var task in tasks) 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) private static void RunBackgroundTask(BackgroundTask backgroundTask)
{ {
UserInfo user = PackageController.GetPackageOwner(backgroundTask.PackageId); UserInfo user = PackageController.GetPackageOwner(backgroundTask.PackageId);
@ -138,13 +131,18 @@ namespace WebsitePanel.EnterpriseServer
SecurityContext.SetThreadPrincipal(user.UserId); SecurityContext.SetThreadPrincipal(user.UserId);
var schedule = SchedulerController.GetScheduleComplete(backgroundTask.ScheduleId); 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 try
{ {
var objTask = (SchedulerTask)Activator.CreateInstance(Type.GetType(schedule.Task.TaskType)); var objTask = (SchedulerTask)Activator.CreateInstance(Type.GetType(schedule.Task.TaskType));
objTask.DoWork(); objTask.DoWork();
Thread.Sleep(100000); Thread.Sleep(100000);
} }
catch (Exception ex) catch (Exception ex)

View file

@ -55,12 +55,6 @@ namespace WebsitePanel.EnterpriseServer
DataProvider.GetScheduleTask(SecurityContext.User.UserId, taskId)); 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) public static DataSet GetSchedules(int packageId)
{ {
DataSet ds = DataProvider.GetSchedules(SecurityContext.User.UserId, packageId); DataSet ds = DataProvider.GetSchedules(SecurityContext.User.UserId, packageId);
@ -170,6 +164,7 @@ namespace WebsitePanel.EnterpriseServer
prm => new BackgroundTaskParameter(prm.ParameterId, prm.ParameterValue)).ToList(); prm => new BackgroundTaskParameter(prm.ParameterId, prm.ParameterValue)).ToList();
var backgroundTask = new BackgroundTask( var backgroundTask = new BackgroundTask(
Guid.NewGuid(),
schedule.ScheduleInfo.TaskId, schedule.ScheduleInfo.TaskId,
SecurityContext.User.UserId, SecurityContext.User.UserId,
SecurityContext.User.IsPeer SecurityContext.User.IsPeer
@ -197,22 +192,12 @@ namespace WebsitePanel.EnterpriseServer
if (schedule == null) if (schedule == null)
return 0; return 0;
var parameters = schedule.ScheduleInfo.Parameters.Select( foreach (BackgroundTask task in TaskController.GetScheduleTasks(scheduleId))
prm => new BackgroundTaskParameter(prm.ParameterId, prm.ParameterValue)).ToList(); {
task.Status = BackgroundTaskStatus.Stopping;
var backgroundTask = new BackgroundTask(
schedule.ScheduleInfo.TaskId, TaskController.UpdateTask(task);
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);
return 0; return 0;
@ -338,7 +323,7 @@ namespace WebsitePanel.EnterpriseServer
DataProvider.UpdateSchedule(SecurityContext.User.UserId, DataProvider.UpdateSchedule(SecurityContext.User.UserId,
schedule.ScheduleId, schedule.TaskId, schedule.ScheduleName, schedule.ScheduleTypeId, schedule.ScheduleId, schedule.TaskId, schedule.ScheduleName, schedule.ScheduleTypeId,
schedule.Interval, schedule.FromTime, schedule.ToTime, schedule.StartTime, 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); schedule.HistoriesNumber, schedule.MaxExecutionTime, schedule.WeekMonthDay, xmlParameters);
// re-schedule tasks // re-schedule tasks

View file

@ -40,7 +40,7 @@ namespace WebsitePanel.EnterpriseServer.Tasks
public override void OnComplete() public override void OnComplete()
{ {
BackgroundTask topTask = TaskController.GetTopTask(); BackgroundTask topTask = TaskManager.TopTask;
if (!TaskManager.HasErrors(topTask)) if (!TaskManager.HasErrors(topTask))
{ {
@ -78,7 +78,7 @@ namespace WebsitePanel.EnterpriseServer.Tasks
{ {
try try
{ {
BackgroundTask topTask = TaskController.GetTopTask(); BackgroundTask topTask = TaskManager.TopTask;
bool sendLetter = Utils.ParseBool(topTask.GetParamValue("SendLetter"), false); bool sendLetter = Utils.ParseBool(topTask.GetParamValue("SendLetter"), false);
@ -98,7 +98,7 @@ namespace WebsitePanel.EnterpriseServer.Tasks
{ {
try try
{ {
BackgroundTask topTask = TaskController.GetTopTask(); BackgroundTask topTask = TaskManager.TopTask;
int userId = Utils.ParseInt(topTask.GetParamValue("UserId").ToString(), 0); int userId = Utils.ParseInt(topTask.GetParamValue("UserId").ToString(), 0);
bool sendLetter = Utils.ParseBool(topTask.GetParamValue("SendLetter"), false); bool sendLetter = Utils.ParseBool(topTask.GetParamValue("SendLetter"), false);
@ -125,7 +125,7 @@ namespace WebsitePanel.EnterpriseServer.Tasks
{ {
try try
{ {
BackgroundTask topTask = TaskController.GetTopTask(); BackgroundTask topTask = TaskManager.TopTask;
bool sendLetter = Utils.ParseBool(topTask.GetParamValue("SendLetter"), false); bool sendLetter = Utils.ParseBool(topTask.GetParamValue("SendLetter"), false);

View file

@ -15,32 +15,39 @@ namespace WebsitePanel.EnterpriseServer
BackgroundTask task = ObjectUtils.FillObjectFromDataReader<BackgroundTask>( BackgroundTask task = ObjectUtils.FillObjectFromDataReader<BackgroundTask>(
DataProvider.GetBackgroundTask(SecurityContext.User.UserId, taskId)); DataProvider.GetBackgroundTask(SecurityContext.User.UserId, taskId));
if (task == null)
{
return null;
}
task.Params = GetTaskParams(task.Id); task.Params = GetTaskParams(task.Id);
return task; return task;
} }
public static List<BackgroundTask> GetScheduleTasks(int scheduleId)
{
return ObjectUtils.CreateListFromDataReader<BackgroundTask>(
DataProvider.GetScheduleBackgroundTasks(SecurityContext.User.UserId, scheduleId));
}
public static List<BackgroundTask> GetTasks() public static List<BackgroundTask> GetTasks()
{ {
return ObjectUtils.CreateListFromDataReader<BackgroundTask>( return ObjectUtils.CreateListFromDataReader<BackgroundTask>(
DataProvider.GetBackgroundTasks(SecurityContext.User.UserId)); DataProvider.GetBackgroundTasks(SecurityContext.User.UserId));
} }
public static List<BackgroundTask> GetTasks(Guid guid)
{
return ObjectUtils.CreateListFromDataReader<BackgroundTask>(
DataProvider.GetBackgroundTasks(SecurityContext.User.UserId, guid));
}
public static List<BackgroundTask> GetProcessTasks(BackgroundTaskStatus status) public static List<BackgroundTask> GetProcessTasks(BackgroundTaskStatus status)
{ {
return ObjectUtils.CreateListFromDataReader<BackgroundTask>( return ObjectUtils.CreateListFromDataReader<BackgroundTask>(
DataProvider.GetProcessBackgroundTasks(SecurityContext.User.UserId, status)); DataProvider.GetProcessBackgroundTasks(SecurityContext.User.UserId, status));
} }
public static BackgroundTask GetTopTask() public static BackgroundTask GetTopTask(Guid guid)
{ {
BackgroundTask task = ObjectUtils.FillObjectFromDataReader<BackgroundTask>( BackgroundTask task = ObjectUtils.FillObjectFromDataReader<BackgroundTask>(
DataProvider.GetBackgroundTopTask(SecurityContext.User.UserId)); DataProvider.GetBackgroundTopTask(SecurityContext.User.UserId, guid));
task.Params = GetTaskParams(task.Id); task.Params = GetTaskParams(task.Id);
@ -49,7 +56,7 @@ namespace WebsitePanel.EnterpriseServer
public static void AddTask(BackgroundTask task) 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.EffectiveUserId, task.TaskName, task.ItemId, task.ItemName,
task.StartDate, task.IndicatorCurrent, task.IndicatorMaximum, task.StartDate, task.IndicatorCurrent, task.IndicatorMaximum,
task.MaximumExecutionTime, task.Source, task.Severity, task.Completed, task.MaximumExecutionTime, task.Source, task.Severity, task.Completed,
@ -62,14 +69,14 @@ namespace WebsitePanel.EnterpriseServer
public static void UpdateTask(BackgroundTask task) 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.ItemName, task.FinishDate, task.IndicatorCurrent,
task.IndicatorMaximum, task.MaximumExecutionTime, task.Source, task.IndicatorMaximum, task.MaximumExecutionTime, task.Source,
task.Severity, task.Completed, task.NotifyOnComplete, task.Status); task.Severity, task.Completed, task.NotifyOnComplete, task.Status);
AddTaskParams(task.Id, task.Params); 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); DeleteTaskStack(task.Id);
} }
@ -82,6 +89,11 @@ namespace WebsitePanel.EnterpriseServer
public static void AddTaskParams(int taskId, List<BackgroundTaskParameter> parameters) public static void AddTaskParams(int taskId, List<BackgroundTaskParameter> parameters)
{ {
if (parameters == null)
{
return;
}
foreach (BackgroundTaskParameter param in SerializeParams(parameters)) foreach (BackgroundTaskParameter param in SerializeParams(parameters))
{ {
DataProvider.AddBackgroundTaskParam(taskId, param.Name, param.SerializerValue); DataProvider.AddBackgroundTaskParam(taskId, param.Name, param.SerializerValue);
@ -117,14 +129,11 @@ namespace WebsitePanel.EnterpriseServer
private static List<BackgroundTaskParameter> SerializeParams(List<BackgroundTaskParameter> parameters) private static List<BackgroundTaskParameter> SerializeParams(List<BackgroundTaskParameter> parameters)
{ {
if (parameters == null)
{
return new List<BackgroundTaskParameter>();
}
foreach (BackgroundTaskParameter param in parameters) 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(); MemoryStream ms = new MemoryStream();
serializer.Serialize(ms, param.Value); serializer.Serialize(ms, param.Value);
@ -141,7 +150,7 @@ namespace WebsitePanel.EnterpriseServer
{ {
foreach (BackgroundTaskParameter param in parameters) 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); StringReader sr = new StringReader(param.SerializerValue);
param.Value = deserializer.Deserialize(sr); param.Value = deserializer.Deserialize(sr);

View file

@ -52,6 +52,20 @@ namespace WebsitePanel.EnterpriseServer
60000, // start from 1 minute 60000, // start from 1 minute
60000); // invoke each 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) public static void StartTask(string source, string taskName)
{ {
@ -142,10 +156,10 @@ namespace WebsitePanel.EnterpriseServer
int effectiveUserId = SecurityContext.User.IsPeer ? SecurityContext.User.OwnerId : userId; int effectiveUserId = SecurityContext.User.IsPeer ? SecurityContext.User.OwnerId : userId;
String itemNameStr = itemName != null ? itemName.ToString() : String.Empty; 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); itemId, scheduleId, packageId, maximumExecutionTime, parameters);
List<BackgroundTask> tasks = TaskController.GetTasks(); List<BackgroundTask> tasks = TaskController.GetTasks(Guid);
if (tasks.Count > 0) if (tasks.Count > 0)
{ {
@ -191,10 +205,10 @@ namespace WebsitePanel.EnterpriseServer
// ERROR // ERROR
WriteLogRecord(2, ex.Message, ex.StackTrace); WriteLogRecord(2, ex.Message, ex.StackTrace);
BackgroundTask topTask = TaskController.GetTopTask(); return new Exception((TopTask != null)
? String.Format("Error executing '{0}' task on '{1}' {2}",
return new Exception((topTask != null) ? String.Format("Error executing '{0}' task on '{1}' {2}", TopTask.TaskName, TopTask.ItemName, TopTask.Source)
topTask.TaskName, topTask.ItemName, topTask.Source) : String.Format("Error executing task"), ex); : String.Format("Error executing task"), ex);
} }
public static void WriteError(Exception ex, string text, params string[] textParameters) 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) private static void WriteLogRecord(int severity, string text, string stackTrace, params string[] textParameters)
{ {
List<BackgroundTask> tasks = TaskController.GetTasks(); List<BackgroundTask> tasks = TaskController.GetTasks(Guid);
if (tasks.Count > 0) if (tasks.Count > 0)
{ {
@ -246,12 +260,12 @@ namespace WebsitePanel.EnterpriseServer
public static void CompleteTask() public static void CompleteTask()
{ {
List<BackgroundTask> tasks = TaskController.GetTasks(); List<BackgroundTask> tasks = TaskController.GetTasks(Guid);
if (tasks.Count == 0) if (tasks.Count == 0)
return; return;
BackgroundTask topTask = TaskController.GetTopTask(); BackgroundTask topTask = tasks[tasks.Count - 1];
// call event handler // call event handler
CallTaskEventHandler(topTask, true); CallTaskEventHandler(topTask, true);
@ -284,7 +298,7 @@ namespace WebsitePanel.EnterpriseServer
public static void UpdateParam(String name, Object value) public static void UpdateParam(String name, Object value)
{ {
BackgroundTask topTask = TaskController.GetTopTask(); BackgroundTask topTask = TopTask;
if (topTask == null) if (topTask == null)
return; return;
@ -298,7 +312,7 @@ namespace WebsitePanel.EnterpriseServer
{ {
set set
{ {
BackgroundTask topTask = TaskController.GetTopTask(); BackgroundTask topTask = TopTask;
if (topTask == null) if (topTask == null)
return; return;
@ -313,7 +327,7 @@ namespace WebsitePanel.EnterpriseServer
{ {
set set
{ {
BackgroundTask topTask = TaskController.GetTopTask(); BackgroundTask topTask = TopTask;
if (topTask == null) if (topTask == null)
return; return;
@ -326,7 +340,7 @@ namespace WebsitePanel.EnterpriseServer
public static void UpdateParams(Hashtable parameters) public static void UpdateParams(Hashtable parameters)
{ {
BackgroundTask topTask = TaskController.GetTopTask(); BackgroundTask topTask = TopTask;
if (topTask == null) if (topTask == null)
return; return;
@ -393,7 +407,7 @@ namespace WebsitePanel.EnterpriseServer
static void PurgeCompletedTasks(object obj) static void PurgeCompletedTasks(object obj)
{ {
List<BackgroundTask> tasks = TaskController.GetTasks(); List<BackgroundTask> tasks = TaskController.GetTasks(Guid);
foreach (BackgroundTask task in tasks) foreach (BackgroundTask task in tasks)
{ {
@ -411,7 +425,13 @@ namespace WebsitePanel.EnterpriseServer
{ {
set set
{ {
BackgroundTask topTask = TaskController.GetTopTask(); BackgroundTask topTask = TopTask;
if (topTask == null)
{
return;
}
topTask.IndicatorMaximum = value; topTask.IndicatorMaximum = value;
TaskController.UpdateTask(topTask); TaskController.UpdateTask(topTask);
@ -422,11 +442,17 @@ namespace WebsitePanel.EnterpriseServer
{ {
get get
{ {
return TaskController.GetTopTask().IndicatorCurrent; return TopTask.IndicatorCurrent;
} }
set set
{ {
BackgroundTask topTask = TaskController.GetTopTask(); BackgroundTask topTask = TopTask;
if (topTask == null)
{
return;
}
topTask.IndicatorCurrent = value; topTask.IndicatorCurrent = value;
TaskController.UpdateTask(topTask); TaskController.UpdateTask(topTask);
@ -437,11 +463,17 @@ namespace WebsitePanel.EnterpriseServer
{ {
get get
{ {
return TaskController.GetTopTask().MaximumExecutionTime; return TopTask.MaximumExecutionTime;
} }
set set
{ {
BackgroundTask topTask = TaskController.GetTopTask(); BackgroundTask topTask = TopTask;
if (topTask == null)
{
return;
}
topTask.MaximumExecutionTime = value; topTask.MaximumExecutionTime = value;
TaskController.UpdateTask(topTask); TaskController.UpdateTask(topTask);
@ -453,6 +485,11 @@ namespace WebsitePanel.EnterpriseServer
return task.Severity == 2; return task.Severity == 2;
} }
public static BackgroundTask TopTask
{
get { return TaskController.GetTopTask(Guid); }
}
public static BackgroundTask GetTask(string taskId) public static BackgroundTask GetTask(string taskId)
{ {
BackgroundTask task = TaskController.GetTask(taskId); BackgroundTask task = TaskController.GetTask(taskId);

View file

@ -448,7 +448,7 @@ namespace WebsitePanel.EnterpriseServer
return BusinessErrorCodes.ERROR_USER_ALREADY_EXISTS; return BusinessErrorCodes.ERROR_USER_ALREADY_EXISTS;
} }
BackgroundTask topTask = TaskController.GetTopTask(); BackgroundTask topTask = TaskManager.TopTask;
topTask.ItemId = userId; topTask.ItemId = userId;
topTask.UpdateParamValue("SendLetter", sendLetter); topTask.UpdateParamValue("SendLetter", sendLetter);

View file

@ -1760,7 +1760,7 @@ namespace WebsitePanel.EnterpriseServer
return res; return res;
} }
BackgroundTask topTask = TaskController.GetTopTask(); BackgroundTask topTask = TaskManager.TopTask;
topTask.ItemId = machine.Id; topTask.ItemId = machine.Id;
topTask.ItemName = machine.Name; topTask.ItemName = machine.Name;
topTask.PackageId = machine.PackageId; topTask.PackageId = machine.PackageId;

View file

@ -1803,7 +1803,7 @@ namespace WebsitePanel.EnterpriseServer
return res; return res;
} }
BackgroundTask topTask = TaskController.GetTopTask(); BackgroundTask topTask = TaskManager.TopTask;
topTask.ItemId = machine.Id; topTask.ItemId = machine.Id;
topTask.ItemName = machine.Name; topTask.ItemName = machine.Name;
topTask.PackageId = machine.PackageId; topTask.PackageId = machine.PackageId;

View file

@ -101,7 +101,8 @@ namespace WebsitePanel.EnterpriseServer
// get application info // get application info
app = GetApplication(inst.PackageId, inst.ApplicationId); app = GetApplication(inst.PackageId, inst.ApplicationId);
BackgroundTask topTask = TaskController.GetTopTask(); BackgroundTask topTask = TaskManager.TopTask;
topTask.ItemName = app.Name; topTask.ItemName = app.Name;
TaskController.UpdateTask(topTask); TaskController.UpdateTask(topTask);