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
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

View file

@ -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; }

View file

@ -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<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)
: 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

View file

@ -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),

View file

@ -45,7 +45,7 @@ namespace WebsitePanel.Ecommerce.EnterpriseServer.TaskEventHandlers
/// </summary>
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);

View file

@ -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);

View file

@ -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);

View file

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

View file

@ -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");

View file

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

View file

@ -45,10 +45,8 @@ namespace WebsitePanel.EnterpriseServer
public void CalculateDiskspace()
{
BackgroundTask topTask = TaskController.GetTopTask();
// 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)
{

View file

@ -50,10 +50,8 @@ namespace WebsitePanel.EnterpriseServer
public void CalculateBandwidth()
{
BackgroundTask topTask = TaskController.GetTopTask();
// 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());
foreach (PackageInfo package in packages)

View file

@ -51,10 +51,8 @@ namespace WebsitePanel.EnterpriseServer
public void CalculateDiskspace()
{
BackgroundTask topTask = TaskController.GetTopTask();
// 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());
foreach (PackageInfo package in packages)

View file

@ -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");

View file

@ -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");

View file

@ -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);

View file

@ -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<PackageInfo> packages = PackageController.GetPackagePackages(topTask.PackageId, false);

View file

@ -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");

View file

@ -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");

View file

@ -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<PackageInfo> packages = PackageController.GetPackagePackages(topTask.PackageId, false);

View file

@ -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");

View file

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

View file

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

View file

@ -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);

View file

@ -15,32 +15,39 @@ namespace WebsitePanel.EnterpriseServer
BackgroundTask task = ObjectUtils.FillObjectFromDataReader<BackgroundTask>(
DataProvider.GetBackgroundTask(SecurityContext.User.UserId, taskId));
if (task == null)
{
return null;
}
task.Params = GetTaskParams(task.Id);
return task;
}
public static List<BackgroundTask> GetScheduleTasks(int scheduleId)
{
return ObjectUtils.CreateListFromDataReader<BackgroundTask>(
DataProvider.GetScheduleBackgroundTasks(SecurityContext.User.UserId, scheduleId));
}
public static List<BackgroundTask> GetTasks()
{
return ObjectUtils.CreateListFromDataReader<BackgroundTask>(
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)
{
return ObjectUtils.CreateListFromDataReader<BackgroundTask>(
DataProvider.GetProcessBackgroundTasks(SecurityContext.User.UserId, status));
}
public static BackgroundTask GetTopTask()
public static BackgroundTask GetTopTask(Guid guid)
{
BackgroundTask task = ObjectUtils.FillObjectFromDataReader<BackgroundTask>(
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<BackgroundTaskParameter> 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<BackgroundTaskParameter> SerializeParams(List<BackgroundTaskParameter> parameters)
{
if (parameters == null)
{
return new List<BackgroundTaskParameter>();
}
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);

View file

@ -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<BackgroundTask> tasks = TaskController.GetTasks();
List<BackgroundTask> 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<BackgroundTask> tasks = TaskController.GetTasks();
List<BackgroundTask> tasks = TaskController.GetTasks(Guid);
if (tasks.Count > 0)
{
@ -246,12 +260,12 @@ namespace WebsitePanel.EnterpriseServer
public static void CompleteTask()
{
List<BackgroundTask> tasks = TaskController.GetTasks();
List<BackgroundTask> 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<BackgroundTask> tasks = TaskController.GetTasks();
List<BackgroundTask> 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);

View file

@ -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);

View file

@ -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;

View file

@ -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;

View file

@ -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);