update start/stop task from windows service

This commit is contained in:
vfedosevich 2013-05-23 18:18:25 +03:00
parent 8577c73c4c
commit d14b5fc01f
16 changed files with 240 additions and 93 deletions

View file

@ -880,9 +880,7 @@ CREATE TABLE BackgroundTasks
Severity INT NOT NULL,
Completed BIT,
NotifyOnComplete BIT,
Status INT NOT NULL,
FOREIGN KEY (ScheduleID) REFERENCES Schedule (ScheduleID),
FOREIGN KEY (PackageID) REFERENCES Packages (PackageID)
Status INT NOT NULL
)
GO
@ -913,9 +911,8 @@ GO
CREATE TABLE BackgroundTaskStack
(
TaskStackID INT NOT NULL PRIMARY KEY,
TaskStackID INT IDENTITY(1,1) NOT NULL PRIMARY KEY,
TaskID INT NOT NULL,
Value NVARCHAR(MAX),
FOREIGN KEY (TaskID) REFERENCES BackgroundTasks (ID)
)
GO
@ -1150,8 +1147,6 @@ CREATE PROCEDURE [dbo].[UpdateBackgroundTask]
@TaskID INT,
@ScheduleID INT,
@PackageID INT,
@UserID INT,
@EffectiveUserID INT,
@TaskName NVARCHAR(255),
@ItemID INT,
@ItemName NVARCHAR(255),
@ -1167,12 +1162,10 @@ CREATE PROCEDURE [dbo].[UpdateBackgroundTask]
)
AS
UPDATE BackgroundTask
UPDATE BackgroundTasks
SET
ScheduleID = @ScheduleID,
PackageID = @PackageID,
UserID = @UserID,
EffectiveUserID = @EffectiveUserID,
TaskName = @TaskName,
ItemID = @ItemID,
ItemName = @ItemName,
@ -1259,4 +1252,35 @@ AS
DELETE FROM BackgroundTaskStack
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

View file

@ -41,25 +41,25 @@ namespace WebsitePanel.EnterpriseServer
{
#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 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 String ItemName { get; set; }
public DateTime StartDate { get; protected set; }
public DateTime StartDate { get; set; }
public DateTime FinishDate { get; set; }
@ -69,7 +69,7 @@ namespace WebsitePanel.EnterpriseServer
public int MaximumExecutionTime { get; set; }
public String Source { get; protected set; }
public String Source { get; set; }
public int Severity { get; set; }
@ -79,9 +79,9 @@ namespace WebsitePanel.EnterpriseServer
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
@ -99,10 +99,10 @@ namespace WebsitePanel.EnterpriseServer
}
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()
{
TaskId = TaskId;
TaskId = taskId;
UserId = userId;
EffectiveUserId = effectiveUserId;
Source = source;
@ -164,11 +164,11 @@ namespace WebsitePanel.EnterpriseServer
{
#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; }

View file

@ -3,6 +3,8 @@
public enum BackgroundTaskStatus
{
Run = 1,
Abort = 2
Abort = 2,
Starting = 3,
Stopping = 4
}
}

View file

@ -1852,6 +1852,14 @@ namespace WebsitePanel.EnterpriseServer
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)
{
return SqlHelper.ExecuteReader(ConnectionString, CommandType.StoredProcedure,
@ -1910,7 +1918,7 @@ namespace WebsitePanel.EnterpriseServer
public static IDataReader GetBackgroundTaskLogs(int taskId, DateTime startLogTime)
{
return SqlHelper.ExecuteReader(ConnectionString, CommandType.StoredProcedure,
ObjectQualifier + "AddBackgroundTaskLogParam",
ObjectQualifier + "GetBackgroundTaskLogs",
new SqlParameter("@taskId", taskId),
new SqlParameter("@startLogTime", startLogTime));
}
@ -1938,7 +1946,7 @@ namespace WebsitePanel.EnterpriseServer
new SqlParameter("@severity", severity),
new SqlParameter("@completed", completed),
new SqlParameter("@notifyOnComplete", notifyOnComplete),
new SqlParameter("@status", status));
new SqlParameter("@status", (int)status));
}

View file

@ -1456,7 +1456,7 @@ namespace WebsitePanel.EnterpriseServer
// 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 Type", domainType.ToString()));

View file

@ -881,7 +881,7 @@ namespace WebsitePanel.EnterpriseServer.Code.HostedSolution
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("proxyFqdn", proxyFqdn));

View file

@ -291,7 +291,7 @@ namespace WebsitePanel.EnterpriseServer
return errorCode;
// 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("DomainName", domainName));

View file

@ -1268,7 +1268,7 @@ namespace WebsitePanel.EnterpriseServer
// 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 pointer", domain.DomainName));

View file

@ -58,10 +58,8 @@ namespace WebsitePanel.EnterpriseServer
public static bool IsScheduleActive(int scheduleId)
{
Dictionary<int, BackgroundTask> scheduledTasks = TaskManager.GetScheduledTasks();
ScheduleInfo scheduleInfo = SchedulerController.GetSchedule(scheduleId);
return scheduledTasks.ContainsKey(scheduleId) || scheduleInfo.LastRun > scheduleInfo.LastFinish;
return scheduledTasks.ContainsKey(scheduleId);
}
public static void StartSchedule(SchedulerJob schedule)
@ -85,8 +83,10 @@ namespace WebsitePanel.EnterpriseServer
public static void ScheduleTasks()
{
nextSchedule = SchedulerController.GetNextSchedule();
RunManualTasks();
nextSchedule = SchedulerController.GetNextSchedule();
// set timer
if (nextSchedule != null)
{
@ -94,9 +94,7 @@ namespace WebsitePanel.EnterpriseServer
{
// this will put the timer to sleep
scheduleTimer.Change(Timeout.Infinite, Timeout.Infinite);
System.Threading.Thread.Sleep(1000);
Thread.Sleep(1000);
// run immediately
RunNextSchedule(null);
}
@ -106,13 +104,65 @@ namespace WebsitePanel.EnterpriseServer
TimeSpan ts = nextSchedule.ScheduleInfo.NextRun.Subtract(DateTime.Now);
if (ts < TimeSpan.Zero)
ts = TimeSpan.Zero; // cannot be negative !
// invoke after the timespan
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
static void RunNextSchedule(object obj) // obj ignored
{

View file

@ -31,6 +31,7 @@ using System.Data;
using System.Collections.Generic;
using System.Text;
using System.Xml;
using System.Linq;
using WebsitePanel.EnterpriseServer.Base.Scheduling;
namespace WebsitePanel.EnterpriseServer
@ -157,30 +158,64 @@ namespace WebsitePanel.EnterpriseServer
{
// check account
int accountCheck = SecurityContext.CheckAccount(DemandAccount.NotDemo);
if (accountCheck < 0) return accountCheck;
if (accountCheck < 0)
return accountCheck;
SchedulerJob schedule = GetScheduleComplete(scheduleId);
if (schedule == null)
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;
}
public static int StopSchedule(int scheduleId)
{
// check account
int accountCheck = SecurityContext.CheckAccount(DemandAccount.NotDemo);
if (accountCheck < 0) return accountCheck;
if (accountCheck < 0)
return accountCheck;
SchedulerJob schedule = GetScheduleComplete(scheduleId);
if (schedule == null)
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;
}
public static void CalculateNextStartTime(ScheduleInfo schedule)

View file

@ -89,7 +89,7 @@ namespace WebsitePanel.EnterpriseServer
UserInfo user = PackageController.GetPackageOwner(scheduleInfo.PackageId);
SecurityContext.SetThreadPrincipal(user.UserId);
IList<BackgroundTaskParameter> parameters = new List<BackgroundTaskParameter>();
List<BackgroundTaskParameter> parameters = new List<BackgroundTaskParameter>();
foreach (ScheduleTaskParameterInfo prm in scheduleInfo.Parameters)
{
parameters.Add(new BackgroundTaskParameter(prm.ParameterId, prm.ParameterValue));

View file

@ -15,6 +15,11 @@ namespace WebsitePanel.EnterpriseServer
BackgroundTask task = ObjectUtils.FillObjectFromDataReader<BackgroundTask>(
DataProvider.GetBackgroundTask(SecurityContext.User.UserId, taskId));
if (task == null)
{
return null;
}
task.Params = GetTaskParams(task.Id);
return task;
@ -26,6 +31,12 @@ namespace WebsitePanel.EnterpriseServer
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()
{
BackgroundTask task = ObjectUtils.FillObjectFromDataReader<BackgroundTask>(
@ -58,7 +69,7 @@ namespace WebsitePanel.EnterpriseServer
AddTaskParams(task.Id, task.Params);
if (task.Completed)
if (task.Completed || task.Status == BackgroundTaskStatus.Abort)
{
DeleteTaskStack(task.Id);
}
@ -66,10 +77,10 @@ namespace WebsitePanel.EnterpriseServer
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))
{
@ -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>(
DataProvider.GetBackgroundTaskParams(taskId));
@ -104,8 +115,13 @@ namespace WebsitePanel.EnterpriseServer
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)
{
XmlSerializer serializer = new XmlSerializer(param.Value.GetType());
@ -121,11 +137,11 @@ namespace WebsitePanel.EnterpriseServer
return parameters;
}
private static IList<BackgroundTaskParameter> DeserializeParams(IList<BackgroundTaskParameter> parameters)
private static List<BackgroundTaskParameter> DeserializeParams(List<BackgroundTaskParameter> 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);
param.Value = deserializer.Deserialize(sr);

View file

@ -37,6 +37,8 @@ using System.Web.Caching;
using System.Xml;
using System.Reflection;
using WebsitePanel.Providers.Common;
using System.Diagnostics;
using System.Linq;
namespace WebsitePanel.EnterpriseServer
{
@ -66,7 +68,7 @@ namespace WebsitePanel.EnterpriseServer
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);
}
@ -86,7 +88,7 @@ namespace WebsitePanel.EnterpriseServer
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);
}
@ -96,14 +98,14 @@ namespace WebsitePanel.EnterpriseServer
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);
}
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)
{
parameters.Add(parameter);
@ -123,13 +125,13 @@ namespace WebsitePanel.EnterpriseServer
}
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>());
}
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))
{
@ -507,13 +509,43 @@ namespace WebsitePanel.EnterpriseServer
BackgroundTask task = GetTask(taskId);
if (task == null)
{
return;
}
task.Status = BackgroundTaskStatus.Abort;
StopProcess(task.TaskId);
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)
{
List<BackgroundTask> list = new List<BackgroundTask>();
@ -717,7 +749,7 @@ namespace WebsitePanel.EnterpriseServer
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);
T res = new T();

View file

@ -13,9 +13,8 @@
<asp:TemplateField HeaderText="gvTasksName">
<ItemStyle Width="40%"></ItemStyle>
<ItemTemplate>
<asp:hyperlink id="lnkTaskName" runat="server" Visible="false">
<asp:hyperlink id="lnkTaskName" runat="server">
</asp:hyperlink>
<asp:Literal ID="litTaskName" runat="server" Visible="false"></asp:Literal>
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="ItemName" HeaderText="gvTasksItemName"></asp:BoundField>
@ -27,16 +26,15 @@
</asp:TemplateField>
<asp:TemplateField HeaderText="gvTasksProgress">
<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>
<asp:Literal ID="litProgressIndicator" runat="server" Visible="false">In Progress</asp:Literal>
</div>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="gvTasksActions">
<ItemTemplate>
<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>
</asp:TemplateField>
</Columns>

View file

@ -66,34 +66,13 @@ namespace WebsitePanel.Portal
// find controls
HyperLink lnkTaskName = (HyperLink)e.Row.FindControl("lnkTaskName");
Literal litTaskName = (Literal)e.Row.FindControl("litTaskName");
Literal litTaskDuration = (Literal)e.Row.FindControl("litTaskDuration");
Panel pnlProgressBarContainer = (Panel)e.Row.FindControl("pnlProgressBarContainer");
Panel pnlProgressIndicator = (Panel)e.Row.FindControl("pnlProgressIndicator");
Literal litProgressIndicator = (Literal)e.Row.FindControl("litProgressIndicator");
LinkButton cmdStop = (LinkButton)e.Row.FindControl("cmdStop");
if (String.IsNullOrEmpty(task.TaskId))
{
litTaskName.Visible = true;
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;
}
// bind controls
lnkTaskName.Text = GetAuditLogTaskName(task.Source, task.TaskName);
lnkTaskName.NavigateUrl = EditUrl("TaskID", task.TaskId, "view_details");
// duration
TimeSpan duration = (TimeSpan)(DateTime.Now - task.StartDate);
@ -107,6 +86,9 @@ namespace WebsitePanel.Portal
if (task.IndicatorMaximum > 0)
percent = task.IndicatorCurrent * 100 / task.IndicatorMaximum;
pnlProgressIndicator.Width = Unit.Percentage(percent);
// stop button
cmdStop.CommandArgument = task.TaskId;
}
protected void gvTasks_RowCommand(object sender, GridViewCommandEventArgs e)

View file

@ -51,7 +51,7 @@ namespace WebsitePanel.Portal
private void BindTask()
{
DateTime lastLogDate = DateTime.MinValue;
DateTime lastLogDate = DateTime.Now.AddYears(-1);
if (ViewState["lastLogDate"] != null)
lastLogDate = (DateTime)ViewState["lastLogDate"];