fixed status running task & remove re-start scheduling from controller(add field lastfinish - update sql)
This commit is contained in:
parent
c443d94ac3
commit
59b097b10b
6 changed files with 389 additions and 11 deletions
|
@ -450,3 +450,363 @@ INSERT [dbo].[Providers] ([ProviderID], [GroupID], [ProviderName], [DisplayName]
|
|||
VALUES (1401, 41, N'Lync2013', N'Microsoft Lync Server 2013 Multitenant Hosting Pack', N'WebsitePanel.Providers.HostedSolution.Lync2013, WebsitePanel.Providers.HostedSolution.Lync2013', N'Lync', NULL)
|
||||
END
|
||||
GO
|
||||
|
||||
-- Scheduler Service
|
||||
ALTER TABLE Schedule
|
||||
ADD LastFinish DATETIME NULL
|
||||
GO
|
||||
|
||||
UPDATE Schedule SET LastFinish = LastRun
|
||||
GO
|
||||
|
||||
ALTER PROCEDURE [dbo].[GetSchedule]
|
||||
(
|
||||
@ActorID int,
|
||||
@ScheduleID int
|
||||
)
|
||||
AS
|
||||
|
||||
-- select schedule
|
||||
SELECT TOP 1
|
||||
S.ScheduleID,
|
||||
S.TaskID,
|
||||
S.PackageID,
|
||||
S.ScheduleName,
|
||||
S.ScheduleTypeID,
|
||||
S.Interval,
|
||||
S.FromTime,
|
||||
S.ToTime,
|
||||
S.StartTime,
|
||||
S.LastRun,
|
||||
S.LastFinish,
|
||||
S.NextRun,
|
||||
S.Enabled,
|
||||
S.HistoriesNumber,
|
||||
S.PriorityID,
|
||||
S.MaxExecutionTime,
|
||||
S.WeekMonthDay,
|
||||
1 AS StatusID
|
||||
FROM Schedule AS S
|
||||
WHERE
|
||||
S.ScheduleID = @ScheduleID
|
||||
AND dbo.CheckActorPackageRights(@ActorID, S.PackageID) = 1
|
||||
|
||||
-- select task
|
||||
SELECT
|
||||
ST.TaskID,
|
||||
ST.TaskType,
|
||||
ST.RoleID
|
||||
FROM Schedule AS S
|
||||
INNER JOIN ScheduleTasks AS ST ON S.TaskID = ST.TaskID
|
||||
WHERE
|
||||
S.ScheduleID = @ScheduleID
|
||||
AND dbo.CheckActorPackageRights(@ActorID, S.PackageID) = 1
|
||||
|
||||
-- select schedule parameters
|
||||
SELECT
|
||||
S.ScheduleID,
|
||||
STP.ParameterID,
|
||||
STP.DataTypeID,
|
||||
ISNULL(SP.ParameterValue, STP.DefaultValue) AS ParameterValue
|
||||
FROM Schedule AS S
|
||||
INNER JOIN ScheduleTaskParameters AS STP ON S.TaskID = STP.TaskID
|
||||
LEFT OUTER JOIN ScheduleParameters AS SP ON STP.ParameterID = SP.ParameterID AND SP.ScheduleID = S.ScheduleID
|
||||
WHERE
|
||||
S.ScheduleID = @ScheduleID
|
||||
AND dbo.CheckActorPackageRights(@ActorID, S.PackageID) = 1
|
||||
|
||||
RETURN
|
||||
GO
|
||||
|
||||
ALTER PROCEDURE [dbo].[GetScheduleInternal]
|
||||
(
|
||||
@ScheduleID int
|
||||
)
|
||||
AS
|
||||
|
||||
-- select schedule
|
||||
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.HistoriesNumber,
|
||||
S.MaxExecutionTime,
|
||||
S.WeekMonthDay
|
||||
FROM Schedule AS S
|
||||
INNER JOIN ScheduleTasks AS ST ON S.TaskID = ST.TaskID
|
||||
WHERE ScheduleID = @ScheduleID
|
||||
RETURN
|
||||
GO
|
||||
|
||||
ALTER PROCEDURE [dbo].[GetSchedules]
|
||||
(
|
||||
@ActorID int,
|
||||
@PackageID int,
|
||||
@Recursive bit
|
||||
)
|
||||
AS
|
||||
|
||||
-- check rights
|
||||
IF dbo.CheckActorPackageRights(@ActorID, @PackageID) = 0
|
||||
RAISERROR('You are not allowed to access this package', 16, 1)
|
||||
|
||||
DECLARE @Schedules TABLE
|
||||
(
|
||||
ScheduleID int
|
||||
)
|
||||
|
||||
INSERT INTO @Schedules (ScheduleID)
|
||||
SELECT
|
||||
S.ScheduleID
|
||||
FROM Schedule AS S
|
||||
INNER JOIN PackagesTree(@PackageID, @Recursive) AS PT ON S.PackageID = PT.PackageID
|
||||
ORDER BY S.Enabled DESC, S.NextRun
|
||||
|
||||
|
||||
-- select schedules
|
||||
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 @Schedules AS STEMP
|
||||
INNER JOIN Schedule AS S ON STEMP.ScheduleID = S.ScheduleID
|
||||
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
|
||||
|
||||
-- select schedule parameters
|
||||
SELECT
|
||||
S.ScheduleID,
|
||||
STP.ParameterID,
|
||||
STP.DataTypeID,
|
||||
ISNULL(SP.ParameterValue, STP.DefaultValue) AS ParameterValue
|
||||
FROM @Schedules AS STEMP
|
||||
INNER JOIN Schedule AS S ON STEMP.ScheduleID = S.ScheduleID
|
||||
INNER JOIN ScheduleTaskParameters AS STP ON S.TaskID = STP.TaskID
|
||||
LEFT OUTER JOIN ScheduleParameters AS SP ON STP.ParameterID = SP.ParameterID AND SP.ScheduleID = S.ScheduleID
|
||||
RETURN
|
||||
GO
|
||||
|
||||
ALTER PROCEDURE [dbo].[GetSchedulesPaged]
|
||||
(
|
||||
@ActorID int,
|
||||
@PackageID int,
|
||||
@Recursive bit,
|
||||
@FilterColumn nvarchar(50) = '',
|
||||
@FilterValue nvarchar(50) = '',
|
||||
@SortColumn nvarchar(50),
|
||||
@StartRow int,
|
||||
@MaximumRows int
|
||||
)
|
||||
AS
|
||||
BEGIN
|
||||
|
||||
-- check rights
|
||||
IF dbo.CheckActorPackageRights(@ActorID, @PackageID) = 0
|
||||
RAISERROR('You are not allowed to access this package', 16, 1)
|
||||
|
||||
DECLARE @condition nvarchar(400)
|
||||
SET @condition = ' 1 = 1 '
|
||||
|
||||
IF @FilterColumn <> '' AND @FilterColumn IS NOT NULL
|
||||
AND @FilterValue <> '' AND @FilterValue IS NOT NULL
|
||||
SET @condition = @condition + ' AND ' + @FilterColumn + ' LIKE ''' + @FilterValue + ''''
|
||||
|
||||
IF @SortColumn IS NULL OR @SortColumn = ''
|
||||
SET @SortColumn = 'S.ScheduleName ASC'
|
||||
|
||||
DECLARE @sql nvarchar(3500)
|
||||
|
||||
set @sql = '
|
||||
SELECT COUNT(S.ScheduleID) FROM Schedule AS S
|
||||
INNER JOIN PackagesTree(@PackageID, @Recursive) AS PT ON S.PackageID = PT.PackageID
|
||||
INNER JOIN Packages AS P ON S.PackageID = P.PackageID
|
||||
INNER JOIN UsersDetailed AS U ON P.UserID = U.UserID
|
||||
WHERE ' + @condition + '
|
||||
|
||||
DECLARE @Schedules AS TABLE
|
||||
(
|
||||
ScheduleID int
|
||||
);
|
||||
|
||||
WITH TempSchedules AS (
|
||||
SELECT ROW_NUMBER() OVER (ORDER BY ' + @SortColumn + ') as Row,
|
||||
S.ScheduleID
|
||||
FROM Schedule AS S
|
||||
INNER JOIN Packages AS P ON S.PackageID = P.PackageID
|
||||
INNER JOIN PackagesTree(@PackageID, @Recursive) AS PT ON S.PackageID = PT.PackageID
|
||||
INNER JOIN UsersDetailed AS U ON P.UserID = U.UserID
|
||||
WHERE ' + @condition + '
|
||||
)
|
||||
|
||||
INSERT INTO @Schedules
|
||||
SELECT ScheduleID FROM TempSchedules
|
||||
WHERE TempSchedules.Row BETWEEN @StartRow and @StartRow + @MaximumRows - 1
|
||||
|
||||
SELECT
|
||||
S.ScheduleID,
|
||||
S.TaskID,
|
||||
ST.TaskType,
|
||||
ST.RoleID,
|
||||
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,
|
||||
|
||||
-- packages
|
||||
P.PackageID,
|
||||
P.PackageName,
|
||||
|
||||
-- user
|
||||
P.UserID,
|
||||
U.Username,
|
||||
U.FirstName,
|
||||
U.LastName,
|
||||
U.FullName,
|
||||
U.RoleID,
|
||||
U.Email
|
||||
FROM @Schedules AS STEMP
|
||||
INNER JOIN Schedule AS S ON STEMP.ScheduleID = S.ScheduleID
|
||||
INNER JOIN ScheduleTasks AS ST ON S.TaskID = ST.TaskID
|
||||
INNER JOIN Packages AS P ON S.PackageID = P.PackageID
|
||||
INNER JOIN UsersDetailed AS U ON P.UserID = U.UserID'
|
||||
|
||||
exec sp_executesql @sql, N'@PackageID int, @StartRow int, @MaximumRows int, @Recursive bit',
|
||||
@PackageID, @StartRow, @MaximumRows, @Recursive
|
||||
|
||||
END
|
||||
RETURN
|
||||
GO
|
||||
|
||||
ALTER PROCEDURE [dbo].[UpdateSchedule]
|
||||
(
|
||||
@ActorID int,
|
||||
@ScheduleID int,
|
||||
@TaskID nvarchar(100),
|
||||
@ScheduleName nvarchar(100),
|
||||
@ScheduleTypeID nvarchar(50),
|
||||
@Interval int,
|
||||
@FromTime datetime,
|
||||
@ToTime datetime,
|
||||
@StartTime datetime,
|
||||
@LastRun datetime,
|
||||
@LastFinish datetime,
|
||||
@NextRun datetime,
|
||||
@Enabled bit,
|
||||
@PriorityID nvarchar(50),
|
||||
@HistoriesNumber int,
|
||||
@MaxExecutionTime int,
|
||||
@WeekMonthDay int,
|
||||
@XmlParameters ntext
|
||||
)
|
||||
AS
|
||||
|
||||
-- check rights
|
||||
DECLARE @PackageID int
|
||||
SELECT @PackageID = PackageID FROM Schedule
|
||||
WHERE ScheduleID = @ScheduleID
|
||||
|
||||
IF dbo.CheckActorPackageRights(@ActorID, @PackageID) = 0
|
||||
RAISERROR('You are not allowed to access this package', 16, 1)
|
||||
|
||||
BEGIN TRAN
|
||||
|
||||
UPDATE Schedule
|
||||
SET
|
||||
TaskID = @TaskID,
|
||||
ScheduleName = @ScheduleName,
|
||||
ScheduleTypeID = @ScheduleTypeID,
|
||||
Interval = @Interval,
|
||||
FromTime = @FromTime,
|
||||
ToTime = @ToTime,
|
||||
StartTime = @StartTime,
|
||||
LastRun = @LastRun,
|
||||
LastFinish = @LastFinish,
|
||||
NextRun = @NextRun,
|
||||
Enabled = @Enabled,
|
||||
PriorityID = @PriorityID,
|
||||
HistoriesNumber = @HistoriesNumber,
|
||||
MaxExecutionTime = @MaxExecutionTime,
|
||||
WeekMonthDay = @WeekMonthDay
|
||||
WHERE
|
||||
ScheduleID = @ScheduleID
|
||||
|
||||
DECLARE @idoc int
|
||||
--Create an internal representation of the XML document.
|
||||
EXEC sp_xml_preparedocument @idoc OUTPUT, @XmlParameters
|
||||
|
||||
-- Execute a SELECT statement that uses the OPENXML rowset provider.
|
||||
DELETE FROM ScheduleParameters
|
||||
WHERE ScheduleID = @ScheduleID
|
||||
|
||||
INSERT INTO ScheduleParameters
|
||||
(
|
||||
ScheduleID,
|
||||
ParameterID,
|
||||
ParameterValue
|
||||
)
|
||||
SELECT
|
||||
@ScheduleID,
|
||||
ParameterID,
|
||||
ParameterValue
|
||||
FROM OPENXML(@idoc, '/parameters/parameter',1) WITH
|
||||
(
|
||||
ParameterID nvarchar(50) '@id',
|
||||
ParameterValue nvarchar(3000) '@value'
|
||||
) as PV
|
||||
|
||||
-- remove document
|
||||
exec sp_xml_removedocument @idoc
|
||||
|
||||
COMMIT TRAN
|
||||
RETURN
|
||||
GO
|
|
@ -45,6 +45,7 @@ namespace WebsitePanel.EnterpriseServer
|
|||
private DateTime toTime;
|
||||
private DateTime startTime;
|
||||
private DateTime lastRun;
|
||||
private DateTime lastFinish;
|
||||
private DateTime nextRun;
|
||||
private bool enabled;
|
||||
private string statusId;
|
||||
|
@ -121,6 +122,12 @@ 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; }
|
||||
|
|
|
@ -1945,11 +1945,12 @@ namespace WebsitePanel.EnterpriseServer
|
|||
// read identity
|
||||
return Convert.ToInt32(prmId.Value);
|
||||
}
|
||||
|
||||
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 nextRun, bool enabled, string priorityId, int historiesNumber,
|
||||
int maxExecutionTime, int weekMonthDay, string xmlParameters)
|
||||
DateTime lastRun, DateTime lastFinish, DateTime nextRun, bool enabled, string priorityId,
|
||||
int historiesNumber, int maxExecutionTime, int weekMonthDay, string xmlParameters)
|
||||
{
|
||||
SqlHelper.ExecuteNonQuery(ConnectionString, CommandType.StoredProcedure,
|
||||
ObjectQualifier + "UpdateSchedule",
|
||||
|
@ -1963,6 +1964,7 @@ 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),
|
||||
|
@ -1971,6 +1973,7 @@ namespace WebsitePanel.EnterpriseServer
|
|||
new SqlParameter("@weekMonthDay", weekMonthDay),
|
||||
new SqlParameter("@xmlParameters", xmlParameters));
|
||||
}
|
||||
|
||||
public static void DeleteSchedule(int actorId, int scheduleId)
|
||||
{
|
||||
SqlHelper.ExecuteNonQuery(ConnectionString, CommandType.StoredProcedure,
|
||||
|
|
|
@ -58,13 +58,15 @@ namespace WebsitePanel.EnterpriseServer
|
|||
public static bool IsScheduleActive(int scheduleId)
|
||||
{
|
||||
Dictionary<int, BackgroundTask> scheduledTasks = TaskManager.GetScheduledTasks();
|
||||
return scheduledTasks.ContainsKey(scheduleId);
|
||||
|
||||
ScheduleInfo scheduleInfo = SchedulerController.GetSchedule(scheduleId);
|
||||
|
||||
return scheduledTasks.ContainsKey(scheduleId) || scheduleInfo.LastRun > scheduleInfo.LastFinish;
|
||||
}
|
||||
|
||||
public static void StartSchedule(SchedulerJob schedule)
|
||||
{
|
||||
Dictionary<int, BackgroundTask> scheduledTasks = TaskManager.GetScheduledTasks();
|
||||
if (scheduledTasks.ContainsKey(schedule.ScheduleInfo.ScheduleId))
|
||||
if (IsScheduleActive(schedule.ScheduleInfo.ScheduleId))
|
||||
return;
|
||||
|
||||
// run schedule
|
||||
|
@ -125,8 +127,6 @@ namespace WebsitePanel.EnterpriseServer
|
|||
|
||||
static void RunSchedule(SchedulerJob schedule, bool changeNextRun)
|
||||
{
|
||||
|
||||
|
||||
try
|
||||
{
|
||||
// update next run (if required)
|
||||
|
|
|
@ -275,7 +275,7 @@ namespace WebsitePanel.EnterpriseServer
|
|||
schedule.HistoriesNumber, schedule.MaxExecutionTime, schedule.WeekMonthDay, xmlParameters);
|
||||
|
||||
// re-schedule tasks
|
||||
Scheduler.ScheduleTasks();
|
||||
//Scheduler.ScheduleTasks();
|
||||
|
||||
return scheduleId;
|
||||
}
|
||||
|
@ -297,11 +297,11 @@ 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.NextRun, schedule.Enabled, schedule.PriorityId,
|
||||
schedule.LastRun, schedule.LastFinish, schedule.NextRun, schedule.Enabled, schedule.PriorityId,
|
||||
schedule.HistoriesNumber, schedule.MaxExecutionTime, schedule.WeekMonthDay, xmlParameters);
|
||||
|
||||
// re-schedule tasks
|
||||
Scheduler.ScheduleTasks();
|
||||
//Scheduler.ScheduleTasks();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -336,7 +336,7 @@ namespace WebsitePanel.EnterpriseServer
|
|||
DataProvider.DeleteSchedule(SecurityContext.User.UserId, scheduleId);
|
||||
|
||||
// re-schedule tasks
|
||||
Scheduler.ScheduleTasks();
|
||||
//Scheduler.ScheduleTasks();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -223,6 +223,14 @@ namespace WebsitePanel.EnterpriseServer
|
|||
TopTask.TaskName, executionLog);
|
||||
}
|
||||
|
||||
// update last finish time
|
||||
ScheduleInfo scheduleInfo = SchedulerController.GetSchedule(TopTask.ItemId);
|
||||
if (scheduleInfo != null)
|
||||
{
|
||||
scheduleInfo.LastFinish = DateTime.Now;
|
||||
SchedulerController.UpdateSchedule(scheduleInfo);
|
||||
}
|
||||
|
||||
// remove task from the stack
|
||||
TasksStack.RemoveAt(TasksStack.Count - 1);
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue