Schedulers fixed

This commit is contained in:
vfedosevich 2013-06-03 14:07:52 +03:00
parent c8a8be8894
commit 645229bef1
17 changed files with 278 additions and 85 deletions

View file

@ -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')
@ -1398,4 +1434,88 @@ WHERE T.Guid = (
AND UserID = @ActorID AND UserID = @ActorID
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
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 GO

View file

@ -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
@ -106,8 +100,9 @@ namespace WebsitePanel.EnterpriseServer
IndicatorCurrent = 0; IndicatorCurrent = 0;
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)

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -63,7 +63,7 @@ namespace WebsitePanel.Portal
litTitle.Text = String.Format("{0} &quot;{1}&quot;", litTitle.Text = String.Format("{0} &quot;{1}&quot;",
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));

View file

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

View file

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