Schedulers fixed
This commit is contained in:
parent
c8a8be8894
commit
645229bef1
17 changed files with 278 additions and 85 deletions
|
@ -1000,7 +1000,7 @@ 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.TaskID = @TaskID AND T.UserID = @ActorID
|
WHERE T.TaskID = @TaskID
|
||||||
GO
|
GO
|
||||||
|
|
||||||
IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'GetBackgroundTasks')
|
IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'GetBackgroundTasks')
|
||||||
|
@ -1315,14 +1315,50 @@ IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'DeleteBackgrou
|
||||||
DROP PROCEDURE DeleteBackgroundTaskStack
|
DROP PROCEDURE DeleteBackgroundTaskStack
|
||||||
GO
|
GO
|
||||||
|
|
||||||
CREATE PROCEDURE [dbo].[DeleteBackgroundTaskStack]
|
IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'DeleteBackgroundTasks')
|
||||||
|
DROP PROCEDURE DeleteBackgroundTasks
|
||||||
|
GO
|
||||||
|
|
||||||
|
CREATE PROCEDURE [dbo].[DeleteBackgroundTasks]
|
||||||
(
|
(
|
||||||
@TaskID INT
|
@Guid UNIQUEIDENTIFIER
|
||||||
)
|
)
|
||||||
AS
|
AS
|
||||||
|
|
||||||
DELETE FROM BackgroundTaskStack
|
DELETE FROM BackgroundTaskStack
|
||||||
WHERE TaskID = @TaskID
|
WHERE TaskID IN (SELECT ID FROM BackgroundTasks WHERE Guid = @Guid)
|
||||||
|
|
||||||
|
DELETE FROM BackgroundTaskLogs
|
||||||
|
WHERE TaskID IN (SELECT ID FROM BackgroundTasks WHERE Guid = @Guid)
|
||||||
|
|
||||||
|
DELETE FROM BackgroundTaskParameters
|
||||||
|
WHERE TaskID IN (SELECT ID FROM BackgroundTasks WHERE Guid = @Guid)
|
||||||
|
|
||||||
|
DELETE FROM BackgroundTasks
|
||||||
|
WHERE ID IN (SELECT ID FROM BackgroundTasks WHERE Guid = @Guid)
|
||||||
|
GO
|
||||||
|
|
||||||
|
IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'DeleteBackgroundTask')
|
||||||
|
DROP PROCEDURE DeleteBackgroundTask
|
||||||
|
GO
|
||||||
|
|
||||||
|
CREATE PROCEDURE [dbo].[DeleteBackgroundTask]
|
||||||
|
(
|
||||||
|
@ID INT
|
||||||
|
)
|
||||||
|
AS
|
||||||
|
|
||||||
|
DELETE FROM BackgroundTaskStack
|
||||||
|
WHERE TaskID = @ID
|
||||||
|
|
||||||
|
DELETE FROM BackgroundTaskLogs
|
||||||
|
WHERE TaskID = @ID
|
||||||
|
|
||||||
|
DELETE FROM BackgroundTaskParameters
|
||||||
|
WHERE TaskID = @ID
|
||||||
|
|
||||||
|
DELETE FROM BackgroundTasks
|
||||||
|
WHERE ID = @ID
|
||||||
GO
|
GO
|
||||||
|
|
||||||
IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'GetProcessBackgroundTasks')
|
IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'GetProcessBackgroundTasks')
|
||||||
|
@ -1399,3 +1435,87 @@ WHERE T.Guid = (
|
||||||
AND Completed = 0 AND Status IN (1, 3))
|
AND Completed = 0 AND Status IN (1, 3))
|
||||||
AND T.UserID = @ActorID AND T.Completed = 0 AND T.Status IN (1, 3)
|
AND T.UserID = @ActorID AND T.Completed = 0 AND T.Status IN (1, 3)
|
||||||
GO
|
GO
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
ALTER PROCEDURE [dbo].[GetBackgroundTopTask]
|
||||||
|
(
|
||||||
|
@ActorID INT,
|
||||||
|
@Guid UNIQUEIDENTIFIER
|
||||||
|
)
|
||||||
|
AS
|
||||||
|
|
||||||
|
SELECT TOP 1
|
||||||
|
T.ID,
|
||||||
|
T.Guid,
|
||||||
|
T.TaskID,
|
||||||
|
T.ScheduleId,
|
||||||
|
T.PackageId,
|
||||||
|
T.UserId,
|
||||||
|
T.EffectiveUserId,
|
||||||
|
T.TaskName,
|
||||||
|
T.ItemId,
|
||||||
|
T.ItemName,
|
||||||
|
T.StartDate,
|
||||||
|
T.FinishDate,
|
||||||
|
T.IndicatorCurrent,
|
||||||
|
T.IndicatorMaximum,
|
||||||
|
T.MaximumExecutionTime,
|
||||||
|
T.Source,
|
||||||
|
T.Severity,
|
||||||
|
T.Completed,
|
||||||
|
T.NotifyOnComplete,
|
||||||
|
T.Status
|
||||||
|
FROM BackgroundTasks AS T
|
||||||
|
INNER JOIN BackgroundTaskStack AS TS
|
||||||
|
ON TS.TaskId = T.ID
|
||||||
|
WHERE T.Guid = @Guid
|
||||||
|
ORDER BY T.StartDate ASC
|
||||||
|
GO
|
||||||
|
|
||||||
|
|
||||||
|
ALTER PROCEDURE [dbo].[GetBackgroundTasks]
|
||||||
|
(
|
||||||
|
@ActorID INT
|
||||||
|
)
|
||||||
|
AS
|
||||||
|
|
||||||
|
with GetChildUsersId(id) as (
|
||||||
|
select UserID
|
||||||
|
from Users
|
||||||
|
where UserID = @ActorID
|
||||||
|
union all
|
||||||
|
select C.UserId
|
||||||
|
from GetChildUsersId P
|
||||||
|
inner join Users C on P.id = C.OwnerID
|
||||||
|
)
|
||||||
|
|
||||||
|
SELECT
|
||||||
|
T.ID,
|
||||||
|
T.Guid,
|
||||||
|
T.TaskID,
|
||||||
|
T.ScheduleId,
|
||||||
|
T.PackageId,
|
||||||
|
T.UserId,
|
||||||
|
T.EffectiveUserId,
|
||||||
|
T.TaskName,
|
||||||
|
T.ItemId,
|
||||||
|
T.ItemName,
|
||||||
|
T.StartDate,
|
||||||
|
T.FinishDate,
|
||||||
|
T.IndicatorCurrent,
|
||||||
|
T.IndicatorMaximum,
|
||||||
|
T.MaximumExecutionTime,
|
||||||
|
T.Source,
|
||||||
|
T.Severity,
|
||||||
|
T.Completed,
|
||||||
|
T.NotifyOnComplete,
|
||||||
|
T.Status
|
||||||
|
FROM BackgroundTasks AS T
|
||||||
|
INNER JOIN (SELECT T.Guid, MIN(T.StartDate) AS Date
|
||||||
|
FROM BackgroundTasks AS T
|
||||||
|
INNER JOIN BackgroundTaskStack AS TS
|
||||||
|
ON TS.TaskId = T.ID
|
||||||
|
WHERE T.UserID in (select id from GetChildUsersId)
|
||||||
|
GROUP BY T.Guid) AS TT ON TT.Guid = T.Guid AND TT.Date = T.StartDate
|
||||||
|
GO
|
|
@ -41,7 +41,9 @@ namespace WebsitePanel.EnterpriseServer
|
||||||
{
|
{
|
||||||
#region Fields
|
#region Fields
|
||||||
|
|
||||||
private List<BackgroundTaskParameter> parameters;
|
public List<BackgroundTaskParameter> Params = new List<BackgroundTaskParameter>();
|
||||||
|
|
||||||
|
public List<BackgroundTaskLogRecord> Logs = new List<BackgroundTaskLogRecord>();
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
@ -51,7 +53,7 @@ namespace WebsitePanel.EnterpriseServer
|
||||||
|
|
||||||
public Guid Guid { 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; }
|
||||||
|
|
||||||
|
@ -61,11 +63,11 @@ namespace WebsitePanel.EnterpriseServer
|
||||||
|
|
||||||
public int EffectiveUserId { get; set; }
|
public int EffectiveUserId { get; set; }
|
||||||
|
|
||||||
public String TaskName { get; set; }
|
public string TaskName { get; set; }
|
||||||
|
|
||||||
public int ItemId { get; set; }
|
public int ItemId { get; set; }
|
||||||
|
|
||||||
public String ItemName { get; set; }
|
public string ItemName { get; set; }
|
||||||
|
|
||||||
public DateTime StartDate { get; set; }
|
public DateTime StartDate { get; set; }
|
||||||
|
|
||||||
|
@ -77,7 +79,7 @@ namespace WebsitePanel.EnterpriseServer
|
||||||
|
|
||||||
public int MaximumExecutionTime { get; set; }
|
public int MaximumExecutionTime { get; set; }
|
||||||
|
|
||||||
public String Source { get; set; }
|
public string Source { get; set; }
|
||||||
|
|
||||||
public int Severity { get; set; }
|
public int Severity { get; set; }
|
||||||
|
|
||||||
|
@ -87,14 +89,6 @@ namespace WebsitePanel.EnterpriseServer
|
||||||
|
|
||||||
public BackgroundTaskStatus Status { get; set; }
|
public BackgroundTaskStatus Status { get; set; }
|
||||||
|
|
||||||
public List<BackgroundTaskLogRecord> Logs { get; set; }
|
|
||||||
|
|
||||||
public List<BackgroundTaskParameter> Params
|
|
||||||
{
|
|
||||||
get { return parameters ?? (parameters = new List<BackgroundTaskParameter>()); }
|
|
||||||
set { parameters = value; }
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region Constructors
|
#region Constructors
|
||||||
|
@ -107,7 +101,8 @@ namespace WebsitePanel.EnterpriseServer
|
||||||
IndicatorMaximum = 0;
|
IndicatorMaximum = 0;
|
||||||
Status = BackgroundTaskStatus.Run;
|
Status = BackgroundTaskStatus.Run;
|
||||||
|
|
||||||
Logs = new List<BackgroundTaskLogRecord>();
|
Completed = false;
|
||||||
|
NotifyOnComplete = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public BackgroundTask(Guid guid, 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,
|
||||||
|
@ -132,6 +127,11 @@ namespace WebsitePanel.EnterpriseServer
|
||||||
|
|
||||||
#region Methods
|
#region Methods
|
||||||
|
|
||||||
|
public List<BackgroundTaskLogRecord> GetLogs()
|
||||||
|
{
|
||||||
|
return Logs;
|
||||||
|
}
|
||||||
|
|
||||||
public Object GetParamValue(String name)
|
public Object GetParamValue(String name)
|
||||||
{
|
{
|
||||||
foreach(BackgroundTaskParameter param in Params)
|
foreach(BackgroundTaskParameter param in Params)
|
||||||
|
|
|
@ -212,7 +212,7 @@ namespace WebsitePanel.EnterpriseServer
|
||||||
// try implicit type conversion
|
// try implicit type conversion
|
||||||
props[i].SetValue(obj, propVal, null);
|
props[i].SetValue(obj, propVal, null);
|
||||||
}
|
}
|
||||||
catch
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
// convert to string and then set property value
|
// convert to string and then set property value
|
||||||
try
|
try
|
||||||
|
@ -220,14 +220,14 @@ namespace WebsitePanel.EnterpriseServer
|
||||||
string strVal = propVal.ToString();
|
string strVal = propVal.ToString();
|
||||||
props[i].SetValue(obj, Cast(strVal, props[i].PropertyType), null);
|
props[i].SetValue(obj, Cast(strVal, props[i].PropertyType), null);
|
||||||
}
|
}
|
||||||
catch
|
catch(Exception e)
|
||||||
{
|
{
|
||||||
// skip property init
|
// skip property init
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch{} // just skip
|
catch (Exception e) { } // just skip
|
||||||
} // for properties
|
} // for properties
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1999,11 +1999,18 @@ namespace WebsitePanel.EnterpriseServer
|
||||||
new SqlParameter("@taskId", taskId));
|
new SqlParameter("@taskId", taskId));
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void DeleteBackgroundTaskStack(int taskId)
|
public static void DeleteBackgroundTasks(Guid guid)
|
||||||
{
|
{
|
||||||
SqlHelper.ExecuteNonQuery(ConnectionString, CommandType.StoredProcedure,
|
SqlHelper.ExecuteNonQuery(ConnectionString, CommandType.StoredProcedure,
|
||||||
ObjectQualifier + "DeleteBackgroundTaskStack",
|
ObjectQualifier + "DeleteBackgroundTasks",
|
||||||
new SqlParameter("@taskId", taskId));
|
new SqlParameter("@guid", guid));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void DeleteBackgroundTask(int taskId)
|
||||||
|
{
|
||||||
|
SqlHelper.ExecuteNonQuery(ConnectionString, CommandType.StoredProcedure,
|
||||||
|
ObjectQualifier + "DeleteBackgroundTask",
|
||||||
|
new SqlParameter("@id", taskId));
|
||||||
}
|
}
|
||||||
|
|
||||||
public static IDataReader GetScheduleTasks(int actorId)
|
public static IDataReader GetScheduleTasks(int actorId)
|
||||||
|
|
|
@ -622,7 +622,7 @@ namespace WebsitePanel.EnterpriseServer
|
||||||
topTask.ItemId = userId;
|
topTask.ItemId = userId;
|
||||||
topTask.UpdateParamValue("SendLetter", sendLetter);
|
topTask.UpdateParamValue("SendLetter", sendLetter);
|
||||||
|
|
||||||
TaskController.UpdateTask(topTask);
|
TaskController.UpdateTaskWithParams(topTask);
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
@ -729,7 +729,7 @@ namespace WebsitePanel.EnterpriseServer
|
||||||
topTask.UpdateParamValue("UserId", userId);
|
topTask.UpdateParamValue("UserId", userId);
|
||||||
topTask.UpdateParamValue("SendLetter", sendLetter);
|
topTask.UpdateParamValue("SendLetter", sendLetter);
|
||||||
|
|
||||||
TaskController.UpdateTask(topTask);
|
TaskController.UpdateTaskWithParams(topTask);
|
||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
{
|
{
|
||||||
|
|
|
@ -31,6 +31,7 @@ using System.IO;
|
||||||
using System.Data;
|
using System.Data;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.Threading;
|
||||||
using System.Xml;
|
using System.Xml;
|
||||||
using System.Security.Cryptography;
|
using System.Security.Cryptography;
|
||||||
using System.Security.Cryptography.Xml;
|
using System.Security.Cryptography.Xml;
|
||||||
|
@ -118,7 +119,7 @@ namespace WebsitePanel.EnterpriseServer
|
||||||
{
|
{
|
||||||
TaskManager.StartTask(taskId, "BACKUP", "BACKUP", backupFileName, SecurityContext.User.UserId);
|
TaskManager.StartTask(taskId, "BACKUP", "BACKUP", backupFileName, SecurityContext.User.UserId);
|
||||||
|
|
||||||
// get the list of items to backup
|
// get the list of items to backup
|
||||||
TaskManager.Write("Calculate items to backup");
|
TaskManager.Write("Calculate items to backup");
|
||||||
List<ServiceProviderItem> items = GetBackupItems(userId, packageId, serviceId, serverId);
|
List<ServiceProviderItem> items = GetBackupItems(userId, packageId, serviceId, serverId);
|
||||||
|
|
||||||
|
@ -209,7 +210,7 @@ namespace WebsitePanel.EnterpriseServer
|
||||||
|
|
||||||
// increment progress
|
// increment progress
|
||||||
TaskManager.IndicatorCurrent += 1;
|
TaskManager.IndicatorCurrent += 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
|
@ -805,7 +806,7 @@ namespace WebsitePanel.EnterpriseServer
|
||||||
//
|
//
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
catch
|
catch(Exception e)
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
return false;
|
return false;
|
||||||
|
|
|
@ -29,6 +29,7 @@
|
||||||
using System;
|
using System;
|
||||||
using System.Data;
|
using System.Data;
|
||||||
using System.Configuration;
|
using System.Configuration;
|
||||||
|
using System.Threading;
|
||||||
using System.Web;
|
using System.Web;
|
||||||
using System.Web.Security;
|
using System.Web.Security;
|
||||||
using System.Web.UI;
|
using System.Web.UI;
|
||||||
|
@ -48,6 +49,7 @@ namespace WebsitePanel.EnterpriseServer
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public override void DoWork()
|
public override void DoWork()
|
||||||
{
|
{
|
||||||
|
|
||||||
string backupFileName;
|
string backupFileName;
|
||||||
int storePackageId;
|
int storePackageId;
|
||||||
string storePackageFolder;
|
string storePackageFolder;
|
||||||
|
|
|
@ -43,7 +43,7 @@ namespace WebsitePanel.EnterpriseServer
|
||||||
public sealed class Scheduler
|
public sealed class Scheduler
|
||||||
{
|
{
|
||||||
public static SchedulerJob nextSchedule = null;
|
public static SchedulerJob nextSchedule = null;
|
||||||
private static Timer timer = new Timer(ScheduleTasks, null, 30000, 30000);
|
//private static Timer timer = new Timer(ScheduleTasks, null, 30000, 30000);
|
||||||
|
|
||||||
public static void Start()
|
public static void Start()
|
||||||
{
|
{
|
||||||
|
@ -132,7 +132,7 @@ namespace WebsitePanel.EnterpriseServer
|
||||||
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(40000);
|
// Thread.Sleep(40000);
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
|
|
|
@ -167,19 +167,23 @@ namespace WebsitePanel.EnterpriseServer
|
||||||
var parameters = schedule.ScheduleInfo.Parameters.Select(
|
var parameters = schedule.ScheduleInfo.Parameters.Select(
|
||||||
prm => new BackgroundTaskParameter(prm.ParameterId, prm.ParameterValue)).ToList();
|
prm => new BackgroundTaskParameter(prm.ParameterId, prm.ParameterValue)).ToList();
|
||||||
|
|
||||||
var packageInfo = PackageController.GetPackage(schedule.ScheduleInfo.PackageId);
|
var userInfo = PackageController.GetPackageOwner(schedule.ScheduleInfo.PackageId);
|
||||||
|
|
||||||
var backgroundTask = new BackgroundTask(
|
var backgroundTask = new BackgroundTask(
|
||||||
Guid.NewGuid(),
|
Guid.NewGuid(),
|
||||||
Guid.NewGuid().ToString("N"),
|
Guid.NewGuid().ToString("N"),
|
||||||
SecurityContext.User.UserId,
|
userInfo.OwnerId == 0 ? userInfo.UserId : userInfo.OwnerId,
|
||||||
SecurityContext.User.IsPeer
|
userInfo.UserId,
|
||||||
? SecurityContext.User.OwnerId
|
"SCHEDULER",
|
||||||
: packageInfo.UserId, "SCHEDULER", "RUN_SCHEDULE",
|
"RUN_SCHEDULE",
|
||||||
schedule.ScheduleInfo.ScheduleName,
|
schedule.ScheduleInfo.ScheduleName,
|
||||||
schedule.ScheduleInfo.ScheduleId,
|
schedule.ScheduleInfo.ScheduleId,
|
||||||
schedule.ScheduleInfo.ScheduleId,
|
schedule.ScheduleInfo.ScheduleId,
|
||||||
schedule.ScheduleInfo.PackageId,
|
schedule.ScheduleInfo.PackageId,
|
||||||
schedule.ScheduleInfo.MaxExecutionTime, parameters) { Status = BackgroundTaskStatus.Starting };
|
schedule.ScheduleInfo.MaxExecutionTime, parameters)
|
||||||
|
{
|
||||||
|
Status = BackgroundTaskStatus.Starting
|
||||||
|
};
|
||||||
|
|
||||||
TaskController.AddTask(backgroundTask);
|
TaskController.AddTask(backgroundTask);
|
||||||
|
|
||||||
|
|
|
@ -109,7 +109,7 @@ namespace WebsitePanel.EnterpriseServer
|
||||||
else
|
else
|
||||||
throw new Exception(String.Format("Could not create scheduled task of '{0}' type",
|
throw new Exception(String.Format("Could not create scheduled task of '{0}' type",
|
||||||
task.TaskType));
|
task.TaskType));
|
||||||
// Thread.Sleep(40000);
|
// Thread.Sleep(40000);
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
|
|
|
@ -80,27 +80,57 @@ namespace WebsitePanel.EnterpriseServer
|
||||||
AddTaskParams(taskId, task.Params);
|
AddTaskParams(taskId, task.Params);
|
||||||
|
|
||||||
DataProvider.AddBackgroundTaskStack(taskId);
|
DataProvider.AddBackgroundTaskStack(taskId);
|
||||||
|
|
||||||
return taskId;
|
return taskId;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void UpdateTask(BackgroundTask task)
|
public static void UpdateTaskWithParams(BackgroundTask task)
|
||||||
{
|
{
|
||||||
|
if (UpdateTask(task))
|
||||||
|
{
|
||||||
|
UpdateBackgroundTaskParams(task);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static bool UpdateTask(BackgroundTask task)
|
||||||
|
{
|
||||||
|
if (task.Status == BackgroundTaskStatus.Abort)
|
||||||
|
{
|
||||||
|
DeleteBackgroundTasks(task.Guid);
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (task.Completed)
|
||||||
|
{
|
||||||
|
DeleteBackgroundTask(task.Id);
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
DataProvider.UpdateBackgroundTask(task.Guid, task.Id, task.ScheduleId, task.PackageId, task.TaskName, task.ItemId,
|
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);
|
return true;
|
||||||
|
|
||||||
if (task.Completed || task.Status == BackgroundTaskStatus.Abort)
|
|
||||||
{
|
|
||||||
DeleteTaskStack(task.Id);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void DeleteTaskStack(int taskId)
|
public static void UpdateBackgroundTaskParams(BackgroundTask task)
|
||||||
{
|
{
|
||||||
DataProvider.DeleteBackgroundTaskStack(taskId);
|
DataProvider.DeleteBackgroundTaskParams(task.Id);
|
||||||
|
|
||||||
|
AddTaskParams(task.Id, task.Params);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void DeleteBackgroundTasks(Guid guid)
|
||||||
|
{
|
||||||
|
DataProvider.DeleteBackgroundTasks(guid);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void DeleteBackgroundTask(int id)
|
||||||
|
{
|
||||||
|
DataProvider.DeleteBackgroundTask(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void AddTaskParams(int taskId, List<BackgroundTaskParameter> parameters)
|
public static void AddTaskParams(int taskId, List<BackgroundTaskParameter> parameters)
|
||||||
|
|
|
@ -155,10 +155,13 @@ namespace WebsitePanel.EnterpriseServer
|
||||||
taskId = Guid.NewGuid().ToString("N");
|
taskId = Guid.NewGuid().ToString("N");
|
||||||
}
|
}
|
||||||
|
|
||||||
int userId = SecurityContext.User.OwnerId;
|
var user = SecurityContext.User;
|
||||||
int effectiveUserId = SecurityContext.User.IsPeer
|
|
||||||
? userId
|
int userId = user.OwnerId == 0
|
||||||
: SecurityContext.User.UserId;
|
? user.UserId
|
||||||
|
: user.OwnerId;
|
||||||
|
|
||||||
|
int effectiveUserId = user.UserId;
|
||||||
|
|
||||||
String itemNameStr = itemName != null
|
String itemNameStr = itemName != null
|
||||||
? itemName.ToString()
|
? itemName.ToString()
|
||||||
|
@ -286,23 +289,12 @@ namespace WebsitePanel.EnterpriseServer
|
||||||
// write task execution result to database
|
// write task execution result to database
|
||||||
if (tasks.Count == 1) // single task
|
if (tasks.Count == 1) // single task
|
||||||
{
|
{
|
||||||
// unregister task globally
|
|
||||||
// tasks.Remove(TopTask.TaskId);
|
|
||||||
|
|
||||||
// write to database
|
// write to database
|
||||||
topTask.Logs = TaskController.GetLogs(topTask.Id, topTask.StartDate);
|
AddAuditLog(topTask);
|
||||||
|
|
||||||
string executionLog = FormatExecutionLog(topTask);
|
|
||||||
UserInfo user = UserController.GetUserInternally(topTask.EffectiveUserId);
|
|
||||||
string username = user != null ? user.Username : null;
|
|
||||||
|
|
||||||
AuditLog.AddAuditLogRecord(topTask.TaskId, topTask.Severity, topTask.EffectiveUserId,
|
|
||||||
username, topTask.PackageId, topTask.ItemId,
|
|
||||||
topTask.ItemName, topTask.StartDate, topTask.FinishDate, topTask.Source,
|
|
||||||
topTask.TaskName, executionLog);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
TaskController.UpdateTask(topTask);
|
TaskController.UpdateTask(topTask);
|
||||||
|
StopProcess(topTask);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void UpdateParam(String name, Object value)
|
public static void UpdateParam(String name, Object value)
|
||||||
|
@ -314,7 +306,7 @@ namespace WebsitePanel.EnterpriseServer
|
||||||
|
|
||||||
topTask.UpdateParamValue(name, value);
|
topTask.UpdateParamValue(name, value);
|
||||||
|
|
||||||
TaskController.UpdateTask(topTask);
|
TaskController.UpdateTaskWithParams(topTask);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static int ItemId
|
public static int ItemId
|
||||||
|
@ -359,7 +351,7 @@ namespace WebsitePanel.EnterpriseServer
|
||||||
topTask.UpdateParamValue(key, parameters[key]);
|
topTask.UpdateParamValue(key, parameters[key]);
|
||||||
}
|
}
|
||||||
|
|
||||||
TaskController.UpdateTask(topTask);
|
TaskController.UpdateTaskWithParams(topTask);
|
||||||
}
|
}
|
||||||
|
|
||||||
static string FormatExecutionLog(BackgroundTask task)
|
static string FormatExecutionLog(BackgroundTask task)
|
||||||
|
@ -535,7 +527,7 @@ namespace WebsitePanel.EnterpriseServer
|
||||||
scheduledTasks.Add(task.ScheduleId, task);
|
scheduledTasks.Add(task.ScheduleId, task);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (Exception)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
return scheduledTasks;
|
return scheduledTasks;
|
||||||
|
@ -570,23 +562,51 @@ namespace WebsitePanel.EnterpriseServer
|
||||||
|
|
||||||
task.Status = BackgroundTaskStatus.Abort;
|
task.Status = BackgroundTaskStatus.Abort;
|
||||||
|
|
||||||
StopProcess(task.Id);
|
StopProcess(task);
|
||||||
|
|
||||||
|
if (!HasErrors(task))
|
||||||
|
{
|
||||||
|
task.Severity = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
task.FinishDate = DateTime.Now;
|
||||||
|
|
||||||
|
AddAuditLog(task);
|
||||||
|
|
||||||
TaskController.UpdateTask(task);
|
TaskController.UpdateTask(task);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void StopProcess(int key)
|
private static void StopProcess(BackgroundTask task)
|
||||||
{
|
{
|
||||||
if (_taskThreadsDictionary.ContainsKey(key))
|
if (_taskThreadsDictionary.ContainsKey(task.Id))
|
||||||
{
|
{
|
||||||
if (_taskThreadsDictionary[key] != null)
|
if (_taskThreadsDictionary[task.Id] != null)
|
||||||
if (_taskThreadsDictionary[key].IsAlive)
|
if (_taskThreadsDictionary[task.Id].IsAlive)
|
||||||
_taskThreadsDictionary[key].Abort();
|
{
|
||||||
|
if (!task.Completed)
|
||||||
|
_taskThreadsDictionary[task.Id].Abort();
|
||||||
|
_taskThreadsDictionary[task.Id] = null;
|
||||||
|
}
|
||||||
Thread deleted;
|
Thread deleted;
|
||||||
_taskThreadsDictionary.TryRemove(key,out deleted);
|
_taskThreadsDictionary.TryRemove(task.Id, out deleted);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static void AddAuditLog(BackgroundTask task)
|
||||||
|
{
|
||||||
|
task.Logs = TaskController.GetLogs(task.Id, task.StartDate);
|
||||||
|
|
||||||
|
string executionLog = FormatExecutionLog(task);
|
||||||
|
|
||||||
|
UserInfo user = UserController.GetUserInternally(task.EffectiveUserId);
|
||||||
|
string username = user != null ? user.Username : null;
|
||||||
|
|
||||||
|
AuditLog.AddAuditLogRecord(task.TaskId, task.Severity, task.EffectiveUserId,
|
||||||
|
username, task.PackageId, task.ItemId,
|
||||||
|
task.ItemName, task.StartDate, task.FinishDate, task.Source,
|
||||||
|
task.TaskName, executionLog);
|
||||||
|
}
|
||||||
|
|
||||||
public static List<BackgroundTask> GetUserTasks(int userId)
|
public static List<BackgroundTask> GetUserTasks(int userId)
|
||||||
{
|
{
|
||||||
List<BackgroundTask> list = new List<BackgroundTask>();
|
List<BackgroundTask> list = new List<BackgroundTask>();
|
||||||
|
@ -597,7 +617,7 @@ namespace WebsitePanel.EnterpriseServer
|
||||||
return list; // prohibited user
|
return list; // prohibited user
|
||||||
|
|
||||||
// get user tasks
|
// get user tasks
|
||||||
foreach (BackgroundTask task in TaskController.GetTasks())
|
foreach (BackgroundTask task in TaskController.GetTasks(user.IsPeer ? user.OwnerId : user.UserId))
|
||||||
{
|
{
|
||||||
if (task.UserId == userId && !task.Completed
|
if (task.UserId == userId && !task.Completed
|
||||||
&& task.Status == BackgroundTaskStatus.Run)
|
&& task.Status == BackgroundTaskStatus.Run)
|
||||||
|
|
|
@ -453,7 +453,7 @@ namespace WebsitePanel.EnterpriseServer
|
||||||
topTask.ItemId = userId;
|
topTask.ItemId = userId;
|
||||||
topTask.UpdateParamValue("SendLetter", sendLetter);
|
topTask.UpdateParamValue("SendLetter", sendLetter);
|
||||||
|
|
||||||
TaskController.UpdateTask(topTask);
|
TaskController.UpdateTaskWithParams(topTask);
|
||||||
|
|
||||||
return userId;
|
return userId;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,15 +1,19 @@
|
||||||
using System.ServiceProcess;
|
using System.ServiceProcess;
|
||||||
|
using System.Threading;
|
||||||
using WebsitePanel.EnterpriseServer;
|
using WebsitePanel.EnterpriseServer;
|
||||||
|
|
||||||
namespace WebsitePanel.SchedulerService
|
namespace WebsitePanel.SchedulerService
|
||||||
{
|
{
|
||||||
public partial class SchedulerService : ServiceBase
|
public partial class SchedulerService : ServiceBase
|
||||||
{
|
{
|
||||||
|
private Timer _timer = new Timer(Process, null, 5000, 5000);
|
||||||
|
|
||||||
#region Construcor
|
#region Construcor
|
||||||
|
|
||||||
public SchedulerService()
|
public SchedulerService()
|
||||||
{
|
{
|
||||||
InitializeComponent();
|
InitializeComponent();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
@ -21,6 +25,11 @@ namespace WebsitePanel.SchedulerService
|
||||||
Scheduler.Start();
|
Scheduler.Start();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected static void Process(object callback)
|
||||||
|
{
|
||||||
|
Scheduler.Start();
|
||||||
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -63,7 +63,7 @@ namespace WebsitePanel.Portal
|
||||||
litTitle.Text = String.Format("{0} "{1}"",
|
litTitle.Text = String.Format("{0} "{1}"",
|
||||||
GetAuditLogTaskName(task.Source, task.TaskName),
|
GetAuditLogTaskName(task.Source, task.TaskName),
|
||||||
task.ItemName);
|
task.ItemName);
|
||||||
litStep.Text = LocalizeActivityText(task.Logs.Count > 0 ? task.Logs[0].Text : String.Empty);
|
litStep.Text = LocalizeActivityText(task.GetLogs().Count > 0 ? task.GetLogs()[0].Text : String.Empty);
|
||||||
litStartTime.Text = task.StartDate.ToString();
|
litStartTime.Text = task.StartDate.ToString();
|
||||||
|
|
||||||
// progress
|
// progress
|
||||||
|
@ -77,10 +77,10 @@ namespace WebsitePanel.Portal
|
||||||
|
|
||||||
// execution log
|
// execution log
|
||||||
StringBuilder log = new StringBuilder();
|
StringBuilder log = new StringBuilder();
|
||||||
if (task.Logs.Count > 0)
|
if (task.GetLogs().Count > 0)
|
||||||
ViewState["lastLogDate"] = task.Logs[0].Date.AddTicks(1);
|
ViewState["lastLogDate"] = task.GetLogs()[0].Date.AddTicks(1);
|
||||||
|
|
||||||
foreach (BackgroundTaskLogRecord logRecord in task.Logs)
|
foreach (BackgroundTaskLogRecord logRecord in task.GetLogs())
|
||||||
{
|
{
|
||||||
log.Append("[").Append(GetDurationText(task.StartDate, logRecord.Date)).Append("] ");
|
log.Append("[").Append(GetDurationText(task.StartDate, logRecord.Date)).Append("] ");
|
||||||
log.Append(GetLogLineIdent(logRecord.TextIdent));
|
log.Append(GetLogLineIdent(logRecord.TextIdent));
|
||||||
|
|
|
@ -176,7 +176,7 @@ namespace WebsitePanel.Portal.VPS.UserControls
|
||||||
litElapsed.Text = new TimeSpan(d.Hours, d.Minutes, d.Seconds).ToString();
|
litElapsed.Text = new TimeSpan(d.Hours, d.Minutes, d.Seconds).ToString();
|
||||||
|
|
||||||
// bind records
|
// bind records
|
||||||
repRecords.DataSource = task.Logs;
|
repRecords.DataSource = task.GetLogs();
|
||||||
repRecords.DataBind();
|
repRecords.DataBind();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -213,7 +213,7 @@ namespace WebsitePanel.Portal.VPS.UserControls
|
||||||
|
|
||||||
// gauge
|
// gauge
|
||||||
gauge.Visible = false;
|
gauge.Visible = false;
|
||||||
if (e.Item.ItemIndex == task.Logs.Count - 1)
|
if (e.Item.ItemIndex == task.GetLogs().Count - 1)
|
||||||
{
|
{
|
||||||
gauge.Visible = true;
|
gauge.Visible = true;
|
||||||
gauge.Total = task.IndicatorMaximum;
|
gauge.Total = task.IndicatorMaximum;
|
||||||
|
|
|
@ -183,7 +183,7 @@ namespace WebsitePanel.Portal.VPSForPC.UserControls
|
||||||
litElapsed.Text = new TimeSpan(d.Hours, d.Minutes, d.Seconds).ToString();
|
litElapsed.Text = new TimeSpan(d.Hours, d.Minutes, d.Seconds).ToString();
|
||||||
|
|
||||||
// bind records
|
// bind records
|
||||||
repRecords.DataSource = task.Logs;
|
repRecords.DataSource = task.GetLogs();
|
||||||
repRecords.DataBind();
|
repRecords.DataBind();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -228,7 +228,7 @@ namespace WebsitePanel.Portal.VPSForPC.UserControls
|
||||||
|
|
||||||
// gauge
|
// gauge
|
||||||
gauge.Visible = false;
|
gauge.Visible = false;
|
||||||
if (e.Item.ItemIndex == task.Logs.Count - 1)
|
if (e.Item.ItemIndex == task.GetLogs().Count - 1)
|
||||||
{
|
{
|
||||||
gauge.Visible = true;
|
gauge.Visible = true;
|
||||||
gauge.Total = task.IndicatorMaximum;
|
gauge.Total = task.IndicatorMaximum;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue