update start/stop task from windows service
This commit is contained in:
parent
8577c73c4c
commit
d14b5fc01f
16 changed files with 240 additions and 93 deletions
|
@ -880,9 +880,7 @@ CREATE TABLE BackgroundTasks
|
||||||
Severity INT NOT NULL,
|
Severity INT NOT NULL,
|
||||||
Completed BIT,
|
Completed BIT,
|
||||||
NotifyOnComplete BIT,
|
NotifyOnComplete BIT,
|
||||||
Status INT NOT NULL,
|
Status INT NOT NULL
|
||||||
FOREIGN KEY (ScheduleID) REFERENCES Schedule (ScheduleID),
|
|
||||||
FOREIGN KEY (PackageID) REFERENCES Packages (PackageID)
|
|
||||||
)
|
)
|
||||||
GO
|
GO
|
||||||
|
|
||||||
|
@ -913,9 +911,8 @@ GO
|
||||||
|
|
||||||
CREATE TABLE BackgroundTaskStack
|
CREATE TABLE BackgroundTaskStack
|
||||||
(
|
(
|
||||||
TaskStackID INT NOT NULL PRIMARY KEY,
|
TaskStackID INT IDENTITY(1,1) NOT NULL PRIMARY KEY,
|
||||||
TaskID INT NOT NULL,
|
TaskID INT NOT NULL,
|
||||||
Value NVARCHAR(MAX),
|
|
||||||
FOREIGN KEY (TaskID) REFERENCES BackgroundTasks (ID)
|
FOREIGN KEY (TaskID) REFERENCES BackgroundTasks (ID)
|
||||||
)
|
)
|
||||||
GO
|
GO
|
||||||
|
@ -1150,8 +1147,6 @@ CREATE PROCEDURE [dbo].[UpdateBackgroundTask]
|
||||||
@TaskID INT,
|
@TaskID INT,
|
||||||
@ScheduleID INT,
|
@ScheduleID INT,
|
||||||
@PackageID INT,
|
@PackageID INT,
|
||||||
@UserID INT,
|
|
||||||
@EffectiveUserID INT,
|
|
||||||
@TaskName NVARCHAR(255),
|
@TaskName NVARCHAR(255),
|
||||||
@ItemID INT,
|
@ItemID INT,
|
||||||
@ItemName NVARCHAR(255),
|
@ItemName NVARCHAR(255),
|
||||||
|
@ -1167,12 +1162,10 @@ CREATE PROCEDURE [dbo].[UpdateBackgroundTask]
|
||||||
)
|
)
|
||||||
AS
|
AS
|
||||||
|
|
||||||
UPDATE BackgroundTask
|
UPDATE BackgroundTasks
|
||||||
SET
|
SET
|
||||||
ScheduleID = @ScheduleID,
|
ScheduleID = @ScheduleID,
|
||||||
PackageID = @PackageID,
|
PackageID = @PackageID,
|
||||||
UserID = @UserID,
|
|
||||||
EffectiveUserID = @EffectiveUserID,
|
|
||||||
TaskName = @TaskName,
|
TaskName = @TaskName,
|
||||||
ItemID = @ItemID,
|
ItemID = @ItemID,
|
||||||
ItemName = @ItemName,
|
ItemName = @ItemName,
|
||||||
|
@ -1259,4 +1252,35 @@ AS
|
||||||
|
|
||||||
DELETE FROM BackgroundTaskStack
|
DELETE FROM BackgroundTaskStack
|
||||||
WHERE TaskID = @TaskID
|
WHERE TaskID = @TaskID
|
||||||
|
GO
|
||||||
|
|
||||||
|
CREATE PROCEDURE [dbo].[GetProcessBackgroundTasks]
|
||||||
|
(
|
||||||
|
@ActorID INT,
|
||||||
|
@Status 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.UserID = @ActorID AND T.Completed = 0 AND T.Status = @Status
|
||||||
GO
|
GO
|
|
@ -41,25 +41,25 @@ namespace WebsitePanel.EnterpriseServer
|
||||||
{
|
{
|
||||||
#region Properties
|
#region Properties
|
||||||
|
|
||||||
public int Id { get; protected set; }
|
public int Id { get; set; }
|
||||||
|
|
||||||
public String TaskId { get; protected set; }
|
public String TaskId { get; set; }
|
||||||
|
|
||||||
public int ScheduleId { get; set; }
|
public int ScheduleId { get; set; }
|
||||||
|
|
||||||
public int PackageId { get; set; }
|
public int PackageId { get; set; }
|
||||||
|
|
||||||
public int UserId { get; protected set; }
|
public int UserId { get; set; }
|
||||||
|
|
||||||
public int EffectiveUserId { get; protected set; }
|
public int EffectiveUserId { get; set; }
|
||||||
|
|
||||||
public String TaskName { get; protected 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; protected set; }
|
public DateTime StartDate { get; set; }
|
||||||
|
|
||||||
public DateTime FinishDate { get; set; }
|
public DateTime FinishDate { get; set; }
|
||||||
|
|
||||||
|
@ -69,7 +69,7 @@ namespace WebsitePanel.EnterpriseServer
|
||||||
|
|
||||||
public int MaximumExecutionTime { get; set; }
|
public int MaximumExecutionTime { get; set; }
|
||||||
|
|
||||||
public String Source { get; protected set; }
|
public String Source { get; set; }
|
||||||
|
|
||||||
public int Severity { get; set; }
|
public int Severity { get; set; }
|
||||||
|
|
||||||
|
@ -79,9 +79,9 @@ namespace WebsitePanel.EnterpriseServer
|
||||||
|
|
||||||
public BackgroundTaskStatus Status { get; set; }
|
public BackgroundTaskStatus Status { get; set; }
|
||||||
|
|
||||||
public IList<BackgroundTaskLogRecord> Logs { get; set; }
|
public List<BackgroundTaskLogRecord> Logs { get; set; }
|
||||||
|
|
||||||
public IList<BackgroundTaskParameter> Params { get; set; }
|
public List<BackgroundTaskParameter> Params { get; set; }
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
@ -99,10 +99,10 @@ namespace WebsitePanel.EnterpriseServer
|
||||||
}
|
}
|
||||||
|
|
||||||
public BackgroundTask(String taskId, int userId, int effectiveUserId, String source, String taskName, String itemName,
|
public BackgroundTask(String taskId, int userId, int effectiveUserId, String source, String taskName, String itemName,
|
||||||
int itemId, int scheduleId, int packageId, int maximumExecutionTime, IList<BackgroundTaskParameter> parameters)
|
int itemId, int scheduleId, int packageId, int maximumExecutionTime, List<BackgroundTaskParameter> parameters)
|
||||||
: this()
|
: this()
|
||||||
{
|
{
|
||||||
TaskId = TaskId;
|
TaskId = taskId;
|
||||||
UserId = userId;
|
UserId = userId;
|
||||||
EffectiveUserId = effectiveUserId;
|
EffectiveUserId = effectiveUserId;
|
||||||
Source = source;
|
Source = source;
|
||||||
|
@ -164,11 +164,11 @@ namespace WebsitePanel.EnterpriseServer
|
||||||
{
|
{
|
||||||
#region Properties
|
#region Properties
|
||||||
|
|
||||||
public int ParameterId { get; protected set; }
|
public int ParameterId { get; set; }
|
||||||
|
|
||||||
public int TaskId { get; protected set; }
|
public int TaskId { get; set; }
|
||||||
|
|
||||||
public String Name { get; protected set; }
|
public String Name { get; set; }
|
||||||
|
|
||||||
public Object Value { get; set; }
|
public Object Value { get; set; }
|
||||||
|
|
||||||
|
|
|
@ -3,6 +3,8 @@
|
||||||
public enum BackgroundTaskStatus
|
public enum BackgroundTaskStatus
|
||||||
{
|
{
|
||||||
Run = 1,
|
Run = 1,
|
||||||
Abort = 2
|
Abort = 2,
|
||||||
|
Starting = 3,
|
||||||
|
Stopping = 4
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1852,6 +1852,14 @@ namespace WebsitePanel.EnterpriseServer
|
||||||
new SqlParameter("actorId", actorId));
|
new SqlParameter("actorId", actorId));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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));
|
||||||
|
}
|
||||||
|
|
||||||
public static IDataReader GetBackgroundTopTask(int actorId)
|
public static IDataReader GetBackgroundTopTask(int actorId)
|
||||||
{
|
{
|
||||||
return SqlHelper.ExecuteReader(ConnectionString, CommandType.StoredProcedure,
|
return SqlHelper.ExecuteReader(ConnectionString, CommandType.StoredProcedure,
|
||||||
|
@ -1910,7 +1918,7 @@ namespace WebsitePanel.EnterpriseServer
|
||||||
public static IDataReader GetBackgroundTaskLogs(int taskId, DateTime startLogTime)
|
public static IDataReader GetBackgroundTaskLogs(int taskId, DateTime startLogTime)
|
||||||
{
|
{
|
||||||
return SqlHelper.ExecuteReader(ConnectionString, CommandType.StoredProcedure,
|
return SqlHelper.ExecuteReader(ConnectionString, CommandType.StoredProcedure,
|
||||||
ObjectQualifier + "AddBackgroundTaskLogParam",
|
ObjectQualifier + "GetBackgroundTaskLogs",
|
||||||
new SqlParameter("@taskId", taskId),
|
new SqlParameter("@taskId", taskId),
|
||||||
new SqlParameter("@startLogTime", startLogTime));
|
new SqlParameter("@startLogTime", startLogTime));
|
||||||
}
|
}
|
||||||
|
@ -1938,7 +1946,7 @@ namespace WebsitePanel.EnterpriseServer
|
||||||
new SqlParameter("@severity", severity),
|
new SqlParameter("@severity", severity),
|
||||||
new SqlParameter("@completed", completed),
|
new SqlParameter("@completed", completed),
|
||||||
new SqlParameter("@notifyOnComplete", notifyOnComplete),
|
new SqlParameter("@notifyOnComplete", notifyOnComplete),
|
||||||
new SqlParameter("@status", status));
|
new SqlParameter("@status", (int)status));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1456,7 +1456,7 @@ namespace WebsitePanel.EnterpriseServer
|
||||||
|
|
||||||
// place log record
|
// place log record
|
||||||
|
|
||||||
IList<BackgroundTaskParameter> parameters = new List<BackgroundTaskParameter>();
|
List<BackgroundTaskParameter> parameters = new List<BackgroundTaskParameter>();
|
||||||
parameters.Add(new BackgroundTaskParameter("Domain ID", domainId));
|
parameters.Add(new BackgroundTaskParameter("Domain ID", domainId));
|
||||||
parameters.Add(new BackgroundTaskParameter("Domain Type", domainType.ToString()));
|
parameters.Add(new BackgroundTaskParameter("Domain Type", domainType.ToString()));
|
||||||
|
|
||||||
|
|
|
@ -881,7 +881,7 @@ namespace WebsitePanel.EnterpriseServer.Code.HostedSolution
|
||||||
|
|
||||||
public static LyncUserResult AddFederationDomain(int itemId, string domainName, string proxyFqdn)
|
public static LyncUserResult AddFederationDomain(int itemId, string domainName, string proxyFqdn)
|
||||||
{
|
{
|
||||||
IList<BackgroundTaskParameter> parameters = new List<BackgroundTaskParameter>();
|
List<BackgroundTaskParameter> parameters = new List<BackgroundTaskParameter>();
|
||||||
parameters.Add(new BackgroundTaskParameter("domainName", domainName));
|
parameters.Add(new BackgroundTaskParameter("domainName", domainName));
|
||||||
parameters.Add(new BackgroundTaskParameter("proxyFqdn", proxyFqdn));
|
parameters.Add(new BackgroundTaskParameter("proxyFqdn", proxyFqdn));
|
||||||
|
|
||||||
|
|
|
@ -291,7 +291,7 @@ namespace WebsitePanel.EnterpriseServer
|
||||||
return errorCode;
|
return errorCode;
|
||||||
|
|
||||||
// place log record
|
// place log record
|
||||||
IList<BackgroundTaskParameter> parameters = new List<BackgroundTaskParameter>();
|
List<BackgroundTaskParameter> parameters = new List<BackgroundTaskParameter>();
|
||||||
parameters.Add(new BackgroundTaskParameter("Organization ID", organizationId));
|
parameters.Add(new BackgroundTaskParameter("Organization ID", organizationId));
|
||||||
parameters.Add(new BackgroundTaskParameter("DomainName", domainName));
|
parameters.Add(new BackgroundTaskParameter("DomainName", domainName));
|
||||||
|
|
||||||
|
|
|
@ -1268,7 +1268,7 @@ namespace WebsitePanel.EnterpriseServer
|
||||||
|
|
||||||
// place log record
|
// place log record
|
||||||
|
|
||||||
IList<BackgroundTaskParameter> parameters = new List<BackgroundTaskParameter>();
|
List<BackgroundTaskParameter> parameters = new List<BackgroundTaskParameter>();
|
||||||
parameters.Add(new BackgroundTaskParameter("Domain ID", domain.DomainId));
|
parameters.Add(new BackgroundTaskParameter("Domain ID", domain.DomainId));
|
||||||
parameters.Add(new BackgroundTaskParameter("Domain pointer", domain.DomainName));
|
parameters.Add(new BackgroundTaskParameter("Domain pointer", domain.DomainName));
|
||||||
|
|
||||||
|
|
|
@ -58,10 +58,8 @@ namespace WebsitePanel.EnterpriseServer
|
||||||
public static bool IsScheduleActive(int scheduleId)
|
public static bool IsScheduleActive(int scheduleId)
|
||||||
{
|
{
|
||||||
Dictionary<int, BackgroundTask> scheduledTasks = TaskManager.GetScheduledTasks();
|
Dictionary<int, BackgroundTask> scheduledTasks = TaskManager.GetScheduledTasks();
|
||||||
|
|
||||||
ScheduleInfo scheduleInfo = SchedulerController.GetSchedule(scheduleId);
|
return scheduledTasks.ContainsKey(scheduleId);
|
||||||
|
|
||||||
return scheduledTasks.ContainsKey(scheduleId) || scheduleInfo.LastRun > scheduleInfo.LastFinish;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void StartSchedule(SchedulerJob schedule)
|
public static void StartSchedule(SchedulerJob schedule)
|
||||||
|
@ -85,8 +83,10 @@ namespace WebsitePanel.EnterpriseServer
|
||||||
|
|
||||||
public static void ScheduleTasks()
|
public static void ScheduleTasks()
|
||||||
{
|
{
|
||||||
nextSchedule = SchedulerController.GetNextSchedule();
|
RunManualTasks();
|
||||||
|
|
||||||
|
nextSchedule = SchedulerController.GetNextSchedule();
|
||||||
|
|
||||||
// set timer
|
// set timer
|
||||||
if (nextSchedule != null)
|
if (nextSchedule != null)
|
||||||
{
|
{
|
||||||
|
@ -94,9 +94,7 @@ namespace WebsitePanel.EnterpriseServer
|
||||||
{
|
{
|
||||||
// this will put the timer to sleep
|
// this will put the timer to sleep
|
||||||
scheduleTimer.Change(Timeout.Infinite, Timeout.Infinite);
|
scheduleTimer.Change(Timeout.Infinite, Timeout.Infinite);
|
||||||
|
Thread.Sleep(1000);
|
||||||
System.Threading.Thread.Sleep(1000);
|
|
||||||
|
|
||||||
// run immediately
|
// run immediately
|
||||||
RunNextSchedule(null);
|
RunNextSchedule(null);
|
||||||
}
|
}
|
||||||
|
@ -106,13 +104,65 @@ namespace WebsitePanel.EnterpriseServer
|
||||||
TimeSpan ts = nextSchedule.ScheduleInfo.NextRun.Subtract(DateTime.Now);
|
TimeSpan ts = nextSchedule.ScheduleInfo.NextRun.Subtract(DateTime.Now);
|
||||||
if (ts < TimeSpan.Zero)
|
if (ts < TimeSpan.Zero)
|
||||||
ts = TimeSpan.Zero; // cannot be negative !
|
ts = TimeSpan.Zero; // cannot be negative !
|
||||||
|
|
||||||
// invoke after the timespan
|
// invoke after the timespan
|
||||||
scheduleTimer.Change((long)ts.TotalMilliseconds, Timeout.Infinite);
|
scheduleTimer.Change((long)ts.TotalMilliseconds, Timeout.Infinite);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static void RunManualTasks()
|
||||||
|
{
|
||||||
|
var tasks = TaskController.GetProcessTasks(BackgroundTaskStatus.Starting);
|
||||||
|
foreach (var task in tasks)
|
||||||
|
{
|
||||||
|
StartManualTask(task);
|
||||||
|
}
|
||||||
|
tasks = TaskController.GetProcessTasks(BackgroundTaskStatus.Stopping);
|
||||||
|
foreach (var task in tasks)
|
||||||
|
{
|
||||||
|
TaskManager.StopTask(task.TaskId);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
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);
|
||||||
|
|
||||||
|
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);
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var objTask = (SchedulerTask)Activator.CreateInstance(Type.GetType(schedule.Task.TaskType));
|
||||||
|
objTask.DoWork();
|
||||||
|
Thread.Sleep(100000);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
TaskManager.WriteError(ex, "Error executing scheduled task");
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
TaskManager.CompleteTask();
|
||||||
|
}
|
||||||
|
catch (Exception)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// call back for the timer function
|
// call back for the timer function
|
||||||
static void RunNextSchedule(object obj) // obj ignored
|
static void RunNextSchedule(object obj) // obj ignored
|
||||||
{
|
{
|
||||||
|
|
|
@ -31,6 +31,7 @@ using System.Data;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Xml;
|
using System.Xml;
|
||||||
|
using System.Linq;
|
||||||
using WebsitePanel.EnterpriseServer.Base.Scheduling;
|
using WebsitePanel.EnterpriseServer.Base.Scheduling;
|
||||||
|
|
||||||
namespace WebsitePanel.EnterpriseServer
|
namespace WebsitePanel.EnterpriseServer
|
||||||
|
@ -157,30 +158,64 @@ namespace WebsitePanel.EnterpriseServer
|
||||||
{
|
{
|
||||||
// check account
|
// check account
|
||||||
int accountCheck = SecurityContext.CheckAccount(DemandAccount.NotDemo);
|
int accountCheck = SecurityContext.CheckAccount(DemandAccount.NotDemo);
|
||||||
if (accountCheck < 0) return accountCheck;
|
|
||||||
|
if (accountCheck < 0)
|
||||||
|
return accountCheck;
|
||||||
|
|
||||||
SchedulerJob schedule = GetScheduleComplete(scheduleId);
|
SchedulerJob schedule = GetScheduleComplete(scheduleId);
|
||||||
if (schedule == null)
|
if (schedule == null)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
Scheduler.StartSchedule(schedule);
|
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", "RUN_SCHEDULE",
|
||||||
|
schedule.ScheduleInfo.ScheduleName,
|
||||||
|
schedule.ScheduleInfo.ScheduleId,
|
||||||
|
schedule.ScheduleInfo.ScheduleId,
|
||||||
|
schedule.ScheduleInfo.PackageId,
|
||||||
|
schedule.ScheduleInfo.MaxExecutionTime, parameters) { Status = BackgroundTaskStatus.Starting };
|
||||||
|
|
||||||
|
TaskController.AddTask(backgroundTask);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static int StopSchedule(int scheduleId)
|
public static int StopSchedule(int scheduleId)
|
||||||
{
|
{
|
||||||
// check account
|
|
||||||
int accountCheck = SecurityContext.CheckAccount(DemandAccount.NotDemo);
|
int accountCheck = SecurityContext.CheckAccount(DemandAccount.NotDemo);
|
||||||
if (accountCheck < 0) return accountCheck;
|
|
||||||
|
|
||||||
|
if (accountCheck < 0)
|
||||||
|
return accountCheck;
|
||||||
|
|
||||||
SchedulerJob schedule = GetScheduleComplete(scheduleId);
|
SchedulerJob schedule = GetScheduleComplete(scheduleId);
|
||||||
if (schedule == null)
|
if (schedule == null)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
Scheduler.StopSchedule(schedule);
|
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);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void CalculateNextStartTime(ScheduleInfo schedule)
|
public static void CalculateNextStartTime(ScheduleInfo schedule)
|
||||||
|
|
|
@ -89,7 +89,7 @@ namespace WebsitePanel.EnterpriseServer
|
||||||
UserInfo user = PackageController.GetPackageOwner(scheduleInfo.PackageId);
|
UserInfo user = PackageController.GetPackageOwner(scheduleInfo.PackageId);
|
||||||
SecurityContext.SetThreadPrincipal(user.UserId);
|
SecurityContext.SetThreadPrincipal(user.UserId);
|
||||||
|
|
||||||
IList<BackgroundTaskParameter> parameters = new List<BackgroundTaskParameter>();
|
List<BackgroundTaskParameter> parameters = new List<BackgroundTaskParameter>();
|
||||||
foreach (ScheduleTaskParameterInfo prm in scheduleInfo.Parameters)
|
foreach (ScheduleTaskParameterInfo prm in scheduleInfo.Parameters)
|
||||||
{
|
{
|
||||||
parameters.Add(new BackgroundTaskParameter(prm.ParameterId, prm.ParameterValue));
|
parameters.Add(new BackgroundTaskParameter(prm.ParameterId, prm.ParameterValue));
|
||||||
|
|
|
@ -15,6 +15,11 @@ 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;
|
||||||
|
@ -26,6 +31,12 @@ namespace WebsitePanel.EnterpriseServer
|
||||||
DataProvider.GetBackgroundTasks(SecurityContext.User.UserId));
|
DataProvider.GetBackgroundTasks(SecurityContext.User.UserId));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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()
|
||||||
{
|
{
|
||||||
BackgroundTask task = ObjectUtils.FillObjectFromDataReader<BackgroundTask>(
|
BackgroundTask task = ObjectUtils.FillObjectFromDataReader<BackgroundTask>(
|
||||||
|
@ -58,7 +69,7 @@ namespace WebsitePanel.EnterpriseServer
|
||||||
|
|
||||||
AddTaskParams(task.Id, task.Params);
|
AddTaskParams(task.Id, task.Params);
|
||||||
|
|
||||||
if (task.Completed)
|
if (task.Completed || task.Status == BackgroundTaskStatus.Abort)
|
||||||
{
|
{
|
||||||
DeleteTaskStack(task.Id);
|
DeleteTaskStack(task.Id);
|
||||||
}
|
}
|
||||||
|
@ -66,10 +77,10 @@ namespace WebsitePanel.EnterpriseServer
|
||||||
|
|
||||||
public static void DeleteTaskStack(int taskId)
|
public static void DeleteTaskStack(int taskId)
|
||||||
{
|
{
|
||||||
DataProvider.DeleteBackgroundTaskParams(taskId);
|
DataProvider.DeleteBackgroundTaskStack(taskId);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void AddTaskParams(int taskId, IList<BackgroundTaskParameter> parameters)
|
public static void AddTaskParams(int taskId, List<BackgroundTaskParameter> parameters)
|
||||||
{
|
{
|
||||||
foreach (BackgroundTaskParameter param in SerializeParams(parameters))
|
foreach (BackgroundTaskParameter param in SerializeParams(parameters))
|
||||||
{
|
{
|
||||||
|
@ -77,7 +88,7 @@ namespace WebsitePanel.EnterpriseServer
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static IList<BackgroundTaskParameter> GetTaskParams(int taskId)
|
public static List<BackgroundTaskParameter> GetTaskParams(int taskId)
|
||||||
{
|
{
|
||||||
List<BackgroundTaskParameter> parameters = ObjectUtils.CreateListFromDataReader<BackgroundTaskParameter>(
|
List<BackgroundTaskParameter> parameters = ObjectUtils.CreateListFromDataReader<BackgroundTaskParameter>(
|
||||||
DataProvider.GetBackgroundTaskParams(taskId));
|
DataProvider.GetBackgroundTaskParams(taskId));
|
||||||
|
@ -104,8 +115,13 @@ namespace WebsitePanel.EnterpriseServer
|
||||||
return logs;
|
return logs;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static IList<BackgroundTaskParameter> SerializeParams(IList<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());
|
XmlSerializer serializer = new XmlSerializer(param.Value.GetType());
|
||||||
|
@ -121,11 +137,11 @@ namespace WebsitePanel.EnterpriseServer
|
||||||
return parameters;
|
return parameters;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static IList<BackgroundTaskParameter> DeserializeParams(IList<BackgroundTaskParameter> parameters)
|
private static List<BackgroundTaskParameter> DeserializeParams(List<BackgroundTaskParameter> parameters)
|
||||||
{
|
{
|
||||||
foreach (BackgroundTaskParameter param in parameters)
|
foreach (BackgroundTaskParameter param in parameters)
|
||||||
{
|
{
|
||||||
XmlSerializer deserializer = new XmlSerializer(param.Value.GetType());
|
XmlSerializer deserializer = new XmlSerializer(param.SerializerValue.GetType());
|
||||||
StringReader sr = new StringReader(param.SerializerValue);
|
StringReader sr = new StringReader(param.SerializerValue);
|
||||||
|
|
||||||
param.Value = deserializer.Deserialize(sr);
|
param.Value = deserializer.Deserialize(sr);
|
||||||
|
|
|
@ -37,6 +37,8 @@ using System.Web.Caching;
|
||||||
using System.Xml;
|
using System.Xml;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
using WebsitePanel.Providers.Common;
|
using WebsitePanel.Providers.Common;
|
||||||
|
using System.Diagnostics;
|
||||||
|
using System.Linq;
|
||||||
|
|
||||||
namespace WebsitePanel.EnterpriseServer
|
namespace WebsitePanel.EnterpriseServer
|
||||||
{
|
{
|
||||||
|
@ -66,7 +68,7 @@ namespace WebsitePanel.EnterpriseServer
|
||||||
StartTask(source, taskName, null, itemId, parameter);
|
StartTask(source, taskName, null, itemId, parameter);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void StartTask(string source, string taskName, int itemId, IList<BackgroundTaskParameter> parameters)
|
public static void StartTask(string source, string taskName, int itemId, List<BackgroundTaskParameter> parameters)
|
||||||
{
|
{
|
||||||
StartTask(source, taskName, null, itemId, parameters);
|
StartTask(source, taskName, null, itemId, parameters);
|
||||||
}
|
}
|
||||||
|
@ -86,7 +88,7 @@ namespace WebsitePanel.EnterpriseServer
|
||||||
StartTask(source, taskName, itemName, 0, parameter);
|
StartTask(source, taskName, itemName, 0, parameter);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void StartTask(string source, string taskName, object itemName, IList<BackgroundTaskParameter> parameters)
|
public static void StartTask(string source, string taskName, object itemName, List<BackgroundTaskParameter> parameters)
|
||||||
{
|
{
|
||||||
StartTask(source, taskName, itemName, 0, parameters);
|
StartTask(source, taskName, itemName, 0, parameters);
|
||||||
}
|
}
|
||||||
|
@ -96,14 +98,14 @@ namespace WebsitePanel.EnterpriseServer
|
||||||
StartTask(source, taskName, itemName, itemId, 0, parameter);
|
StartTask(source, taskName, itemName, itemId, 0, parameter);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void StartTask(string source, string taskName, object itemName, int itemId, IList<BackgroundTaskParameter> parameters)
|
public static void StartTask(string source, string taskName, object itemName, int itemId, List<BackgroundTaskParameter> parameters)
|
||||||
{
|
{
|
||||||
StartTask(source, taskName, itemName, itemId, 0, 0, -1, parameters);
|
StartTask(source, taskName, itemName, itemId, 0, 0, -1, parameters);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void StartTask(string source, string taskName, object itemName, int itemId, int packageId, BackgroundTaskParameter parameter)
|
public static void StartTask(string source, string taskName, object itemName, int itemId, int packageId, BackgroundTaskParameter parameter)
|
||||||
{
|
{
|
||||||
IList<BackgroundTaskParameter> parameters = new List<BackgroundTaskParameter>();
|
List<BackgroundTaskParameter> parameters = new List<BackgroundTaskParameter>();
|
||||||
if (parameter != null)
|
if (parameter != null)
|
||||||
{
|
{
|
||||||
parameters.Add(parameter);
|
parameters.Add(parameter);
|
||||||
|
@ -123,13 +125,13 @@ namespace WebsitePanel.EnterpriseServer
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void StartTask(string source, string taskName, object itemName, int itemId,
|
public static void StartTask(string source, string taskName, object itemName, int itemId,
|
||||||
int scheduleId, int packageId, int maximumExecutionTime, IList<BackgroundTaskParameter> parameters)
|
int scheduleId, int packageId, int maximumExecutionTime, List<BackgroundTaskParameter> parameters)
|
||||||
{
|
{
|
||||||
StartTask(null, source, taskName, itemName, itemId, scheduleId, packageId, maximumExecutionTime, new List<BackgroundTaskParameter>());
|
StartTask(null, source, taskName, itemName, itemId, scheduleId, packageId, maximumExecutionTime, new List<BackgroundTaskParameter>());
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void StartTask(string taskId, string source, string taskName, object itemName, int itemId,
|
public static void StartTask(string taskId, string source, string taskName, object itemName, int itemId,
|
||||||
int scheduleId, int packageId, int maximumExecutionTime, IList<BackgroundTaskParameter> parameters)
|
int scheduleId, int packageId, int maximumExecutionTime, List<BackgroundTaskParameter> parameters)
|
||||||
{
|
{
|
||||||
if (String.IsNullOrEmpty(taskId))
|
if (String.IsNullOrEmpty(taskId))
|
||||||
{
|
{
|
||||||
|
@ -507,13 +509,43 @@ namespace WebsitePanel.EnterpriseServer
|
||||||
BackgroundTask task = GetTask(taskId);
|
BackgroundTask task = GetTask(taskId);
|
||||||
|
|
||||||
if (task == null)
|
if (task == null)
|
||||||
|
{
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
task.Status = BackgroundTaskStatus.Abort;
|
task.Status = BackgroundTaskStatus.Abort;
|
||||||
|
|
||||||
|
StopProcess(task.TaskId);
|
||||||
|
|
||||||
TaskController.UpdateTask(task);
|
TaskController.UpdateTask(task);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void StopTask(BackgroundTask task)
|
||||||
|
{
|
||||||
|
if (task == null)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
task.Status = BackgroundTaskStatus.Abort;
|
||||||
|
|
||||||
|
StopProcess(task.TaskId);
|
||||||
|
|
||||||
|
TaskController.UpdateTask(task);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void StopProcess(string taskId)
|
||||||
|
{
|
||||||
|
var process = Process.GetProcesses().FirstOrDefault(
|
||||||
|
p => p.ProcessName.Equals(taskId, StringComparison.CurrentCultureIgnoreCase));
|
||||||
|
|
||||||
|
if (process != null)
|
||||||
|
{
|
||||||
|
process.Kill();
|
||||||
|
process.WaitForExit(10000);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
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>();
|
||||||
|
@ -717,7 +749,7 @@ namespace WebsitePanel.EnterpriseServer
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static T StartResultTask<T>(string source, string taskName, int itemId, IList<BackgroundTaskParameter> parameters) where T : ResultObject, new()
|
public static T StartResultTask<T>(string source, string taskName, int itemId, List<BackgroundTaskParameter> parameters) where T : ResultObject, new()
|
||||||
{
|
{
|
||||||
StartTask(source, taskName, itemId, parameters);
|
StartTask(source, taskName, itemId, parameters);
|
||||||
T res = new T();
|
T res = new T();
|
||||||
|
|
|
@ -13,9 +13,8 @@
|
||||||
<asp:TemplateField HeaderText="gvTasksName">
|
<asp:TemplateField HeaderText="gvTasksName">
|
||||||
<ItemStyle Width="40%"></ItemStyle>
|
<ItemStyle Width="40%"></ItemStyle>
|
||||||
<ItemTemplate>
|
<ItemTemplate>
|
||||||
<asp:hyperlink id="lnkTaskName" runat="server" Visible="false">
|
<asp:hyperlink id="lnkTaskName" runat="server">
|
||||||
</asp:hyperlink>
|
</asp:hyperlink>
|
||||||
<asp:Literal ID="litTaskName" runat="server" Visible="false"></asp:Literal>
|
|
||||||
</ItemTemplate>
|
</ItemTemplate>
|
||||||
</asp:TemplateField>
|
</asp:TemplateField>
|
||||||
<asp:BoundField DataField="ItemName" HeaderText="gvTasksItemName"></asp:BoundField>
|
<asp:BoundField DataField="ItemName" HeaderText="gvTasksItemName"></asp:BoundField>
|
||||||
|
@ -27,16 +26,15 @@
|
||||||
</asp:TemplateField>
|
</asp:TemplateField>
|
||||||
<asp:TemplateField HeaderText="gvTasksProgress">
|
<asp:TemplateField HeaderText="gvTasksProgress">
|
||||||
<ItemTemplate>
|
<ItemTemplate>
|
||||||
<asp:Panel ID="pnlProgressBarContainer" runat="server" class="ProgressBarContainer" Visible="false">
|
<div class="ProgressBarContainer">
|
||||||
<asp:Panel id="pnlProgressIndicator" runat="server" CssClass="ProgressBarIndicator"></asp:Panel>
|
<asp:Panel id="pnlProgressIndicator" runat="server" CssClass="ProgressBarIndicator"></asp:Panel>
|
||||||
</asp:Panel>
|
</div>
|
||||||
<asp:Literal ID="litProgressIndicator" runat="server" Visible="false">In Progress</asp:Literal>
|
|
||||||
</ItemTemplate>
|
</ItemTemplate>
|
||||||
</asp:TemplateField>
|
</asp:TemplateField>
|
||||||
<asp:TemplateField HeaderText="gvTasksActions">
|
<asp:TemplateField HeaderText="gvTasksActions">
|
||||||
<ItemTemplate>
|
<ItemTemplate>
|
||||||
<asp:LinkButton ID="cmdStop" runat="server" CommandName="stop"
|
<asp:LinkButton ID="cmdStop" runat="server" CommandName="stop"
|
||||||
CausesValidation="false" Text="Stop" OnClientClick="return confirm('Do you really want to terminate this task?');" Visible="false"></asp:LinkButton>
|
CausesValidation="false" Text="Stop" OnClientClick="return confirm('Do you really want to terminate this task?');"></asp:LinkButton>
|
||||||
</ItemTemplate>
|
</ItemTemplate>
|
||||||
</asp:TemplateField>
|
</asp:TemplateField>
|
||||||
</Columns>
|
</Columns>
|
||||||
|
|
|
@ -66,34 +66,13 @@ namespace WebsitePanel.Portal
|
||||||
|
|
||||||
// find controls
|
// find controls
|
||||||
HyperLink lnkTaskName = (HyperLink)e.Row.FindControl("lnkTaskName");
|
HyperLink lnkTaskName = (HyperLink)e.Row.FindControl("lnkTaskName");
|
||||||
Literal litTaskName = (Literal)e.Row.FindControl("litTaskName");
|
|
||||||
Literal litTaskDuration = (Literal)e.Row.FindControl("litTaskDuration");
|
Literal litTaskDuration = (Literal)e.Row.FindControl("litTaskDuration");
|
||||||
Panel pnlProgressBarContainer = (Panel)e.Row.FindControl("pnlProgressBarContainer");
|
|
||||||
Panel pnlProgressIndicator = (Panel)e.Row.FindControl("pnlProgressIndicator");
|
Panel pnlProgressIndicator = (Panel)e.Row.FindControl("pnlProgressIndicator");
|
||||||
Literal litProgressIndicator = (Literal)e.Row.FindControl("litProgressIndicator");
|
|
||||||
LinkButton cmdStop = (LinkButton)e.Row.FindControl("cmdStop");
|
LinkButton cmdStop = (LinkButton)e.Row.FindControl("cmdStop");
|
||||||
|
|
||||||
if (String.IsNullOrEmpty(task.TaskId))
|
// bind controls
|
||||||
{
|
lnkTaskName.Text = GetAuditLogTaskName(task.Source, task.TaskName);
|
||||||
litTaskName.Visible = true;
|
lnkTaskName.NavigateUrl = EditUrl("TaskID", task.TaskId, "view_details");
|
||||||
litProgressIndicator.Visible = true;
|
|
||||||
|
|
||||||
// bind controls
|
|
||||||
litTaskName.Text = GetAuditLogTaskName(task.Source, task.TaskName);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
lnkTaskName.Visible = true;
|
|
||||||
pnlProgressBarContainer.Visible = true;
|
|
||||||
cmdStop.Visible = true;
|
|
||||||
|
|
||||||
// bind controls
|
|
||||||
lnkTaskName.NavigateUrl = EditUrl("TaskID", task.TaskId, "view_details");
|
|
||||||
lnkTaskName.Text = GetAuditLogTaskName(task.Source, task.TaskName);
|
|
||||||
|
|
||||||
// stop button
|
|
||||||
cmdStop.CommandArgument = task.TaskId;
|
|
||||||
}
|
|
||||||
|
|
||||||
// duration
|
// duration
|
||||||
TimeSpan duration = (TimeSpan)(DateTime.Now - task.StartDate);
|
TimeSpan duration = (TimeSpan)(DateTime.Now - task.StartDate);
|
||||||
|
@ -107,6 +86,9 @@ namespace WebsitePanel.Portal
|
||||||
if (task.IndicatorMaximum > 0)
|
if (task.IndicatorMaximum > 0)
|
||||||
percent = task.IndicatorCurrent * 100 / task.IndicatorMaximum;
|
percent = task.IndicatorCurrent * 100 / task.IndicatorMaximum;
|
||||||
pnlProgressIndicator.Width = Unit.Percentage(percent);
|
pnlProgressIndicator.Width = Unit.Percentage(percent);
|
||||||
|
|
||||||
|
// stop button
|
||||||
|
cmdStop.CommandArgument = task.TaskId;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void gvTasks_RowCommand(object sender, GridViewCommandEventArgs e)
|
protected void gvTasks_RowCommand(object sender, GridViewCommandEventArgs e)
|
||||||
|
|
|
@ -51,7 +51,7 @@ namespace WebsitePanel.Portal
|
||||||
|
|
||||||
private void BindTask()
|
private void BindTask()
|
||||||
{
|
{
|
||||||
DateTime lastLogDate = DateTime.MinValue;
|
DateTime lastLogDate = DateTime.Now.AddYears(-1);
|
||||||
if (ViewState["lastLogDate"] != null)
|
if (ViewState["lastLogDate"] != null)
|
||||||
lastLogDate = (DateTime)ViewState["lastLogDate"];
|
lastLogDate = (DateTime)ViewState["lastLogDate"];
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue