Bug Fix: Scheduled Task Status Updates
Scheduled Task status is more reliable
This commit is contained in:
@@ -18,21 +18,12 @@ namespace Disco.Services.Tasks
|
|||||||
private static Subject<Tuple<string, IEnumerable<ChangedItem>>> taskUpdatesStream = new Subject<Tuple<string, IEnumerable<ChangedItem>>>();
|
private static Subject<Tuple<string, IEnumerable<ChangedItem>>> taskUpdatesStream = new Subject<Tuple<string, IEnumerable<ChangedItem>>>();
|
||||||
private static IDisposable taskUpdatesStreamSubscription;
|
private static IDisposable taskUpdatesStreamSubscription;
|
||||||
|
|
||||||
internal static void Initialize()
|
static ScheduledTaskNotificationsHub()
|
||||||
{
|
|
||||||
if (taskUpdatesStreamSubscription == null)
|
|
||||||
{
|
|
||||||
lock (taskUpdatesStream)
|
|
||||||
{
|
|
||||||
if (taskUpdatesStreamSubscription == null)
|
|
||||||
{
|
{
|
||||||
taskUpdatesStreamSubscription = taskUpdatesStream
|
taskUpdatesStreamSubscription = taskUpdatesStream
|
||||||
.DelayBuffer(TimeSpan.FromMilliseconds(200))
|
.DelayBuffer(TimeSpan.FromMilliseconds(200))
|
||||||
.Subscribe(BroadcastBufferedEvents);
|
.Subscribe(BroadcastBufferedEvents);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
internal static void PublishEvent(string TaskSessionId, IEnumerable<ChangedItem> ChangedItems)
|
internal static void PublishEvent(string TaskSessionId, IEnumerable<ChangedItem> ChangedItems)
|
||||||
{
|
{
|
||||||
@@ -43,16 +34,8 @@ namespace Disco.Services.Tasks
|
|||||||
{
|
{
|
||||||
var taskSessionId = Context.QueryString["TaskSessionId"];
|
var taskSessionId = Context.QueryString["TaskSessionId"];
|
||||||
|
|
||||||
if (string.IsNullOrEmpty(taskSessionId))
|
|
||||||
throw new ArgumentNullException("TaskSessionId");
|
|
||||||
|
|
||||||
var status = ScheduledTasks.GetTaskStatus(taskSessionId);
|
|
||||||
|
|
||||||
if (status == null)
|
|
||||||
throw new ArgumentException("Invalid ScheduledTask SessionId", "TaskSessionId");
|
|
||||||
|
|
||||||
// Send Status:
|
// Send Status:
|
||||||
var currentStatus = ScheduledTaskStatusLive.FromScheduledTaskStatus(status, null);
|
var currentStatus = GetScheduledTaskLiveStatus(taskSessionId);
|
||||||
Clients.Caller.initializeTaskStatus(currentStatus);
|
Clients.Caller.initializeTaskStatus(currentStatus);
|
||||||
|
|
||||||
// Add to Group
|
// Add to Group
|
||||||
@@ -85,5 +68,25 @@ namespace Disco.Services.Tasks
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private ScheduledTaskStatusLive GetScheduledTaskLiveStatus(string TaskSessionId)
|
||||||
|
{
|
||||||
|
if (string.IsNullOrEmpty(TaskSessionId))
|
||||||
|
throw new ArgumentNullException("TaskSessionId");
|
||||||
|
|
||||||
|
var status = ScheduledTasks.GetTaskStatus(TaskSessionId);
|
||||||
|
|
||||||
|
if (status == null)
|
||||||
|
throw new ArgumentException("Invalid ScheduledTask SessionId", "TaskSessionId");
|
||||||
|
|
||||||
|
// Send Status:
|
||||||
|
return ScheduledTaskStatusLive.FromScheduledTaskStatus(status, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
public ScheduledTaskStatusLive GetStatus()
|
||||||
|
{
|
||||||
|
var taskSessionId = Context.QueryString["TaskSessionId"];
|
||||||
|
|
||||||
|
return GetScheduledTaskLiveStatus(taskSessionId);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -28,8 +28,6 @@ namespace Disco.Services.Tasks
|
|||||||
// Scheduled Cleanup
|
// Scheduled Cleanup
|
||||||
ScheduledTaskCleanup.Schedule(_TaskScheduler);
|
ScheduledTaskCleanup.Schedule(_TaskScheduler);
|
||||||
|
|
||||||
ScheduledTaskNotificationsHub.Initialize();
|
|
||||||
|
|
||||||
if (InitiallySchedule)
|
if (InitiallySchedule)
|
||||||
{
|
{
|
||||||
// Discover DiscoScheduledTask
|
// Discover DiscoScheduledTask
|
||||||
|
|||||||
@@ -30,6 +30,7 @@
|
|||||||
<tr data-bind="visible: FinishedTimestamp() && !TaskExceptionMessage()">
|
<tr data-bind="visible: FinishedTimestamp() && !TaskExceptionMessage()">
|
||||||
<td class="finishedMessage" data-bind="css: { finishedRedirect: FinishedUrl }">
|
<td class="finishedMessage" data-bind="css: { finishedRedirect: FinishedUrl }">
|
||||||
<span data-bind="text: FinishedMessage"></span>
|
<span data-bind="text: FinishedMessage"></span>
|
||||||
|
<i class="fa fa-lg fa-cog fa-spin"></i>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr data-bind="visible: TaskExceptionMessage">
|
<tr data-bind="visible: TaskExceptionMessage">
|
||||||
@@ -99,6 +100,7 @@
|
|||||||
var statusViewModel = function (sessionId) {
|
var statusViewModel = function (sessionId) {
|
||||||
var self = this;
|
var self = this;
|
||||||
|
|
||||||
|
self.FullUpdateToken = null;
|
||||||
self.Initialized = ko.observable(false);
|
self.Initialized = ko.observable(false);
|
||||||
|
|
||||||
self.TimestampParse = function (timestamp) {
|
self.TimestampParse = function (timestamp) {
|
||||||
@@ -142,6 +144,11 @@
|
|||||||
self.Finished = function () {
|
self.Finished = function () {
|
||||||
if (self.FinishedTimestamp()) {
|
if (self.FinishedTimestamp()) {
|
||||||
if (self.FinishedUrl() && !self.TaskExceptionMessage()) {
|
if (self.FinishedUrl() && !self.TaskExceptionMessage()) {
|
||||||
|
|
||||||
|
if (self.FullUpdateToken)
|
||||||
|
window.clearTimeout(self.FullUpdateToken);
|
||||||
|
$.connection.hub.stop();
|
||||||
|
|
||||||
if (self.FinishedMessage())
|
if (self.FinishedMessage())
|
||||||
window.setTimeout(function () { window.location.href = self.FinishedUrl(); }, 3000);
|
window.setTimeout(function () { window.location.href = self.FinishedUrl(); }, 3000);
|
||||||
else
|
else
|
||||||
@@ -151,7 +158,6 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
self.Initialize = function (taskStatus) {
|
self.Initialize = function (taskStatus) {
|
||||||
if (!self.Initialized()) {
|
|
||||||
self.TaskName(taskStatus.TaskName);
|
self.TaskName(taskStatus.TaskName);
|
||||||
self.FinishedUrl(taskStatus.FinishedUrl);
|
self.FinishedUrl(taskStatus.FinishedUrl);
|
||||||
|
|
||||||
@@ -172,11 +178,13 @@
|
|||||||
|
|
||||||
self.Finished();
|
self.Finished();
|
||||||
}
|
}
|
||||||
}
|
|
||||||
self.Update = function (taskStatus) {
|
self.Update = function (taskStatus) {
|
||||||
if (!self.Initialized())
|
if (!self.Initialized())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
if (self.FullUpdateToken)
|
||||||
|
window.clearTimeout(self.FullUpdateToken);
|
||||||
|
|
||||||
if (taskStatus) {
|
if (taskStatus) {
|
||||||
$.each(taskStatus, function (key, value) {
|
$.each(taskStatus, function (key, value) {
|
||||||
switch (key) {
|
switch (key) {
|
||||||
@@ -213,6 +221,17 @@
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!self.FinishedTimestamp())
|
||||||
|
self.FullUpdateToken = window.setTimeout(self.FullUpdate, 2000);
|
||||||
|
}
|
||||||
|
|
||||||
|
self.FullUpdate = function () {
|
||||||
|
self.FullUpdateToken = null;
|
||||||
|
|
||||||
|
if (!self.FinishedTimestamp())
|
||||||
|
notificationsHub.server.getStatus()
|
||||||
|
.done(self.Initialize);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -131,7 +131,11 @@ WriteLiteral(">\r\n <span");
|
|||||||
|
|
||||||
WriteLiteral(" data-bind=\"text: FinishedMessage\"");
|
WriteLiteral(" data-bind=\"text: FinishedMessage\"");
|
||||||
|
|
||||||
WriteLiteral("></span>\r\n </td>\r\n </tr>\r\n <tr");
|
WriteLiteral("></span>\r\n <i");
|
||||||
|
|
||||||
|
WriteLiteral(" class=\"fa fa-lg fa-cog fa-spin\"");
|
||||||
|
|
||||||
|
WriteLiteral("></i>\r\n </td>\r\n </tr>\r\n <tr");
|
||||||
|
|
||||||
WriteLiteral(" data-bind=\"visible: TaskExceptionMessage\"");
|
WriteLiteral(" data-bind=\"visible: TaskExceptionMessage\"");
|
||||||
|
|
||||||
@@ -190,7 +194,7 @@ WriteLiteral(" type=\"text/javascript\"");
|
|||||||
WriteLiteral(">\r\n $(function () {\r\n var sessionId = \'");
|
WriteLiteral(">\r\n $(function () {\r\n var sessionId = \'");
|
||||||
|
|
||||||
|
|
||||||
#line 92 "..\..\Areas\Config\Views\Shared\TaskStatus.cshtml"
|
#line 93 "..\..\Areas\Config\Views\Shared\TaskStatus.cshtml"
|
||||||
Write(Model);
|
Write(Model);
|
||||||
|
|
||||||
|
|
||||||
@@ -198,82 +202,90 @@ WriteLiteral(">\r\n $(function () {\r\n var sessionId = \'");
|
|||||||
#line hidden
|
#line hidden
|
||||||
WriteLiteral("\';\r\n\r\n var view = $(\'#Logging_Task_Status\');\r\n var vm = null;\r\n\r\n " +
|
WriteLiteral("\';\r\n\r\n var view = $(\'#Logging_Task_Status\');\r\n var vm = null;\r\n\r\n " +
|
||||||
" var notificationsHub = null;\r\n\r\n var statusViewModel = function (se" +
|
" var notificationsHub = null;\r\n\r\n var statusViewModel = function (se" +
|
||||||
"ssionId) {\r\n var self = this;\r\n\r\n self.Initialized = ko.ob" +
|
"ssionId) {\r\n var self = this;\r\n\r\n self.FullUpdateToken = n" +
|
||||||
"servable(false);\r\n\r\n self.TimestampParse = function (timestamp) {\r\n " +
|
"ull;\r\n self.Initialized = ko.observable(false);\r\n\r\n self.T" +
|
||||||
" if (timestamp) {\r\n if (timestamp.indexOf(\"\\/Dat" +
|
"imestampParse = function (timestamp) {\r\n if (timestamp) {\r\n " +
|
||||||
"e(\") == 0)\r\n return new Date(parseInt(timestamp.substr(6)" +
|
" if (timestamp.indexOf(\"\\/Date(\") == 0)\r\n re" +
|
||||||
"));\r\n else\r\n return (new Date()).setIS" +
|
"turn new Date(parseInt(timestamp.substr(6)));\r\n else\r\n " +
|
||||||
"O8601(timestamp);\r\n }\r\n return new Date();\r\n " +
|
" return (new Date()).setISO8601(timestamp);\r\n }\r\n" +
|
||||||
" }\r\n self.TimestampFormat = function (timestamp) {\r\n " +
|
" return new Date();\r\n }\r\n self.TimestampFor" +
|
||||||
" var addZero = function (v) { v = v + \'\'; if (v.length == 1) v = \'0\' + v; ret" +
|
"mat = function (timestamp) {\r\n var addZero = function (v) { v = v" +
|
||||||
"urn v; }\r\n return timestamp.getFullYear() + \'/\' + addZero((1 + ti" +
|
" + \'\'; if (v.length == 1) v = \'0\' + v; return v; }\r\n return times" +
|
||||||
"mestamp.getMonth())) + \'/\' + addZero(timestamp.getDate()) + \' \' + addZero(timest" +
|
"tamp.getFullYear() + \'/\' + addZero((1 + timestamp.getMonth())) + \'/\' + addZero(t" +
|
||||||
"amp.getHours()) + \':\' + addZero(timestamp.getMinutes()) + \':\' + addZero(timestam" +
|
"imestamp.getDate()) + \' \' + addZero(timestamp.getHours()) + \':\' + addZero(timest" +
|
||||||
"p.getSeconds());\r\n }\r\n\r\n self.SessionId = sessionId;\r\n " +
|
"amp.getMinutes()) + \':\' + addZero(timestamp.getSeconds());\r\n }\r\n\r\n " +
|
||||||
" self.TaskName = ko.observable(null);\r\n\r\n self.Progress = ko.o" +
|
" self.SessionId = sessionId;\r\n self.TaskName = ko.observable(" +
|
||||||
"bservable(0);\r\n self.CurrentProcess = ko.observable(null);\r\n " +
|
"null);\r\n\r\n self.Progress = ko.observable(0);\r\n self.Curren" +
|
||||||
" self.CurrentDescription = ko.observable(null);\r\n\r\n self.IsRunning " +
|
"tProcess = ko.observable(null);\r\n self.CurrentDescription = ko.observ" +
|
||||||
"= ko.observable(null);\r\n\r\n self.TaskExceptionMessage = ko.observable(" +
|
"able(null);\r\n\r\n self.IsRunning = ko.observable(null);\r\n\r\n " +
|
||||||
"null);\r\n\r\n self.FinishedTimestamp = ko.observable(null);\r\n " +
|
"self.TaskExceptionMessage = ko.observable(null);\r\n\r\n self.FinishedTim" +
|
||||||
" self.NextScheduledTimestamp = ko.observable(null)\r\n\r\n self.NextSched" +
|
"estamp = ko.observable(null);\r\n self.NextScheduledTimestamp = ko.obse" +
|
||||||
"uledTimestampFormatted = ko.computed(function () {\r\n return self." +
|
"rvable(null)\r\n\r\n self.NextScheduledTimestampFormatted = ko.computed(f" +
|
||||||
"TimestampFormat(self.TimestampParse(self.NextScheduledTimestamp()));\r\n " +
|
"unction () {\r\n return self.TimestampFormat(self.TimestampParse(se" +
|
||||||
" });\r\n self.FinishedTimestampFormatted = ko.computed(function () {\r\n" +
|
"lf.NextScheduledTimestamp()));\r\n });\r\n self.FinishedTimest" +
|
||||||
" return self.TimestampFormat(self.TimestampParse(self.FinishedTim" +
|
"ampFormatted = ko.computed(function () {\r\n return self.TimestampF" +
|
||||||
"estamp()));\r\n });\r\n\r\n self.FinishedUrl = ko.observable(nul" +
|
"ormat(self.TimestampParse(self.FinishedTimestamp()));\r\n });\r\n\r\n " +
|
||||||
"l);\r\n self.FinishedMessage = ko.observable(null);\r\n\r\n self" +
|
" self.FinishedUrl = ko.observable(null);\r\n self.FinishedMessage " +
|
||||||
".Finished = function () {\r\n if (self.FinishedTimestamp()) {\r\n " +
|
"= ko.observable(null);\r\n\r\n self.Finished = function () {\r\n " +
|
||||||
" if (self.FinishedUrl() && !self.TaskExceptionMessage()) {\r\n " +
|
" if (self.FinishedTimestamp()) {\r\n if (self.FinishedUrl()" +
|
||||||
" if (self.FinishedMessage())\r\n wind" +
|
" && !self.TaskExceptionMessage()) {\r\n\r\n if (self.FullUpda" +
|
||||||
"ow.setTimeout(function () { window.location.href = self.FinishedUrl(); }, 3000);" +
|
"teToken)\r\n window.clearTimeout(self.FullUpdateToken);" +
|
||||||
"\r\n else\r\n window.location.href" +
|
"\r\n $.connection.hub.stop();\r\n\r\n if" +
|
||||||
" = self.FinishedUrl();\r\n }\r\n }\r\n }\r" +
|
" (self.FinishedMessage())\r\n window.setTimeout(functio" +
|
||||||
"\n\r\n self.Initialize = function (taskStatus) {\r\n if (!s" +
|
"n () { window.location.href = self.FinishedUrl(); }, 3000);\r\n " +
|
||||||
"elf.Initialized()) {\r\n self.TaskName(taskStatus.TaskName);\r\n " +
|
" else\r\n window.location.href = self.FinishedUrl()" +
|
||||||
" self.FinishedUrl(taskStatus.FinishedUrl);\r\n\r\n " +
|
";\r\n }\r\n }\r\n }\r\n\r\n self.I" +
|
||||||
" self.Progress(taskStatus.Progress);\r\n self.CurrentProcess" +
|
"nitialize = function (taskStatus) {\r\n self.TaskName(taskStatus.Ta" +
|
||||||
"(taskStatus.CurrentProcess);\r\n self.CurrentDescription(taskSt" +
|
"skName);\r\n self.FinishedUrl(taskStatus.FinishedUrl);\r\n\r\n " +
|
||||||
"atus.CurrentDescription);\r\n\r\n self.IsRunning(taskStatus.IsRun" +
|
" self.Progress(taskStatus.Progress);\r\n self.CurrentProcess(" +
|
||||||
"ning);\r\n\r\n self.TaskExceptionMessage(taskStatus.TaskException" +
|
"taskStatus.CurrentProcess);\r\n self.CurrentDescription(taskStatus." +
|
||||||
"Message);\r\n\r\n self.FinishedTimestamp(taskStatus.FinishedTimes" +
|
"CurrentDescription);\r\n\r\n self.IsRunning(taskStatus.IsRunning);\r\n\r" +
|
||||||
"tamp);\r\n self.NextScheduledTimestamp(taskStatus.NextScheduled" +
|
"\n self.TaskExceptionMessage(taskStatus.TaskExceptionMessage);\r\n\r\n" +
|
||||||
"Timestamp);\r\n\r\n self.FinishedMessage(taskStatus.FinishedMessa" +
|
" self.FinishedTimestamp(taskStatus.FinishedTimestamp);\r\n " +
|
||||||
"ge);\r\n\r\n self.Initialized(true);\r\n\r\n self." +
|
" self.NextScheduledTimestamp(taskStatus.NextScheduledTimestamp);\r\n\r\n " +
|
||||||
"Finished();\r\n }\r\n }\r\n self.Update = functio" +
|
" self.FinishedMessage(taskStatus.FinishedMessage);\r\n\r\n s" +
|
||||||
"n (taskStatus) {\r\n if (!self.Initialized())\r\n " +
|
"elf.Initialized(true);\r\n\r\n self.Finished();\r\n }\r\n " +
|
||||||
"return;\r\n\r\n if (taskStatus) {\r\n $.each(taskSta" +
|
" self.Update = function (taskStatus) {\r\n if (!self.Initiali" +
|
||||||
"tus, function (key, value) {\r\n switch (key) {\r\n " +
|
"zed())\r\n return;\r\n\r\n if (self.FullUpdateToken)" +
|
||||||
" case \'Progress\':\r\n self.Progres" +
|
"\r\n window.clearTimeout(self.FullUpdateToken);\r\n\r\n " +
|
||||||
"s(value);\r\n break;\r\n c" +
|
" if (taskStatus) {\r\n $.each(taskStatus, function (key, val" +
|
||||||
"ase \'CurrentProcess\':\r\n self.CurrentProcess(value" +
|
"ue) {\r\n switch (key) {\r\n case " +
|
||||||
");\r\n break;\r\n case \'Cu" +
|
"\'Progress\':\r\n self.Progress(value);\r\n " +
|
||||||
"rrentDescription\':\r\n self.CurrentDescription(valu" +
|
" break;\r\n case \'CurrentProcess\':\r\n" +
|
||||||
"e);\r\n break;\r\n case \'I" +
|
" self.CurrentProcess(value);\r\n " +
|
||||||
"sRunning\':\r\n self.IsRunning(value);\r\n " +
|
" break;\r\n case \'CurrentDescription\':\r\n " +
|
||||||
" break;\r\n case \'TaskExceptionMessa" +
|
" self.CurrentDescription(value);\r\n " +
|
||||||
"ge\':\r\n self.TaskExceptionMessage(value);\r\n " +
|
" break;\r\n case \'IsRunning\':\r\n " +
|
||||||
" break;\r\n case \'NextScheduled" +
|
" self.IsRunning(value);\r\n bre" +
|
||||||
"Timestamp\':\r\n self.NextScheduledTimestamp(value);" +
|
"ak;\r\n case \'TaskExceptionMessage\':\r\n " +
|
||||||
"\r\n break;\r\n case \'Fini" +
|
" self.TaskExceptionMessage(value);\r\n " +
|
||||||
"shedUrl\':\r\n self.FinishedUrl(value);\r\n " +
|
" break;\r\n case \'NextScheduledTimestamp\':\r\n " +
|
||||||
" break;\r\n case \'FinishedMessage\':" +
|
" self.NextScheduledTimestamp(value);\r\n " +
|
||||||
"\r\n self.FinishedMessage(value);\r\n " +
|
" break;\r\n case \'FinishedUrl\':\r\n " +
|
||||||
" break;\r\n case \'FinishedTimestamp\':\r\n " +
|
" self.FinishedUrl(value);\r\n br" +
|
||||||
" self.FinishedTimestamp(value);\r\n " +
|
"eak;\r\n case \'FinishedMessage\':\r\n " +
|
||||||
" window.setTimeout(self.Finished, 1);\r\n " +
|
" self.FinishedMessage(value);\r\n break;\r" +
|
||||||
" break;\r\n default:\r\n " +
|
"\n case \'FinishedTimestamp\':\r\n " +
|
||||||
" // Ignore\r\n }\r\n });\r\n " +
|
" self.FinishedTimestamp(value);\r\n window.s" +
|
||||||
" }\r\n }\r\n }\r\n\r\n vm = new statusViewModel(sessionId);\r\n " +
|
"etTimeout(self.Finished, 1);\r\n break;\r\n " +
|
||||||
" ko.applyBindings(vm, view[0]);\r\n\r\n // Start Live Connection\r\n " +
|
" default:\r\n // Ignore\r\n " +
|
||||||
" updateWithLive();\r\n\r\n function updateWithLive() {\r\n notific" +
|
" }\r\n });\r\n }\r\n\r\n " +
|
||||||
"ationsHub = $.connection.scheduledTaskNotifications;\r\n notificationsH" +
|
"if (!self.FinishedTimestamp())\r\n self.FullUpdateToken = windo" +
|
||||||
"ub.client.initializeTaskStatus = vm.Initialize;\r\n notificationsHub.cl" +
|
"w.setTimeout(self.FullUpdate, 2000);\r\n }\r\n\r\n self.FullUpda" +
|
||||||
"ient.updateTaskStatus = vm.Update;\r\n\r\n $.connection.hub.qs = { TaskSe" +
|
"te = function () {\r\n self.FullUpdateToken = null;\r\n\r\n " +
|
||||||
"ssionId: sessionId };\r\n $.connection.hub.error(function (error) {\r\n " +
|
" if (!self.FinishedTimestamp())\r\n notificationsHub.server." +
|
||||||
" alert(\'Live-Status Error: \' + error);\r\n });\r\n\r\n " +
|
"getStatus()\r\n .done(self.Initialize);\r\n }\r\n " +
|
||||||
" $.connection.hub.start()\r\n .fail(function (error) {\r\n " +
|
" }\r\n\r\n vm = new statusViewModel(sessionId);\r\n ko.applyBindings" +
|
||||||
" alert(\'Live-Status Connection Error: \' + error);\r\n })" +
|
"(vm, view[0]);\r\n\r\n // Start Live Connection\r\n updateWithLive();\r\n\r" +
|
||||||
";\r\n }\r\n\r\n });\r\n</script>\r\n");
|
"\n function updateWithLive() {\r\n notificationsHub = $.connectio" +
|
||||||
|
"n.scheduledTaskNotifications;\r\n notificationsHub.client.initializeTas" +
|
||||||
|
"kStatus = vm.Initialize;\r\n notificationsHub.client.updateTaskStatus =" +
|
||||||
|
" vm.Update;\r\n\r\n $.connection.hub.qs = { TaskSessionId: sessionId };\r\n" +
|
||||||
|
" $.connection.hub.error(function (error) {\r\n alert(\'Li" +
|
||||||
|
"ve-Status Error: \' + error);\r\n });\r\n\r\n $.connection.hub.st" +
|
||||||
|
"art()\r\n .fail(function (error) {\r\n alert(\'Live" +
|
||||||
|
"-Status Connection Error: \' + error);\r\n });\r\n }\r\n\r\n });" +
|
||||||
|
"\r\n</script>\r\n");
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2797,6 +2797,9 @@
|
|||||||
proxies.scheduledTaskNotifications = this.createHubProxy('scheduledTaskNotifications');
|
proxies.scheduledTaskNotifications = this.createHubProxy('scheduledTaskNotifications');
|
||||||
proxies.scheduledTaskNotifications.client = { };
|
proxies.scheduledTaskNotifications.client = { };
|
||||||
proxies.scheduledTaskNotifications.server = {
|
proxies.scheduledTaskNotifications.server = {
|
||||||
|
getStatus: function () {
|
||||||
|
return proxies.scheduledTaskNotifications.invoke.apply(proxies.scheduledTaskNotifications, $.merge(["GetStatus"], $.makeArray(arguments)));
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
proxies.userUpdates = this.createHubProxy('userUpdates');
|
proxies.userUpdates = this.createHubProxy('userUpdates');
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -101,6 +101,9 @@
|
|||||||
proxies.scheduledTaskNotifications = this.createHubProxy('scheduledTaskNotifications');
|
proxies.scheduledTaskNotifications = this.createHubProxy('scheduledTaskNotifications');
|
||||||
proxies.scheduledTaskNotifications.client = { };
|
proxies.scheduledTaskNotifications.client = { };
|
||||||
proxies.scheduledTaskNotifications.server = {
|
proxies.scheduledTaskNotifications.server = {
|
||||||
|
getStatus: function () {
|
||||||
|
return proxies.scheduledTaskNotifications.invoke.apply(proxies.scheduledTaskNotifications, $.merge(["GetStatus"], $.makeArray(arguments)));
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
proxies.userUpdates = this.createHubProxy('userUpdates');
|
proxies.userUpdates = this.createHubProxy('userUpdates');
|
||||||
|
|||||||
@@ -346,11 +346,18 @@ table.deviceProfileTable th.deviceCount {
|
|||||||
#Logging_Task_Status td.progress {
|
#Logging_Task_Status td.progress {
|
||||||
padding: 8px 10px;
|
padding: 8px 10px;
|
||||||
}
|
}
|
||||||
|
#Logging_Task_Status td.finishedMessage i {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
#Logging_Task_Status td.finishedRedirect {
|
#Logging_Task_Status td.finishedRedirect {
|
||||||
background-position: right center;
|
position: relative;
|
||||||
background-repeat: no-repeat;
|
}
|
||||||
background-image: url(data:image/gif;base64,R0lGODlhEAALAPQAAP///zNah+Hm7dng6O7x9DddiTNah1d3nJqtw3+Xs8fS3k5vlm6JqaGzx4KatcrU4FFymDZciHGMq+ru8t/l7Pb3+V9+oeLo7vT2+MTP3LLB0dTc5fHz9gAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh/hpDcmVhdGVkIHdpdGggYWpheGxvYWQuaW5mbwAh+QQJCwAAACwAAAAAEAALAAAFLSAgjmRpnqSgCuLKAq5AEIM4zDVw03ve27ifDgfkEYe04kDIDC5zrtYKRa2WQgAh+QQJCwAAACwAAAAAEAALAAAFJGBhGAVgnqhpHIeRvsDawqns0qeN5+y967tYLyicBYE7EYkYAgAh+QQJCwAAACwAAAAAEAALAAAFNiAgjothLOOIJAkiGgxjpGKiKMkbz7SN6zIawJcDwIK9W/HISxGBzdHTuBNOmcJVCyoUlk7CEAAh+QQJCwAAACwAAAAAEAALAAAFNSAgjqQIRRFUAo3jNGIkSdHqPI8Tz3V55zuaDacDyIQ+YrBH+hWPzJFzOQQaeavWi7oqnVIhACH5BAkLAAAALAAAAAAQAAsAAAUyICCOZGme1rJY5kRRk7hI0mJSVUXJtF3iOl7tltsBZsNfUegjAY3I5sgFY55KqdX1GgIAIfkECQsAAAAsAAAAABAACwAABTcgII5kaZ4kcV2EqLJipmnZhWGXaOOitm2aXQ4g7P2Ct2ER4AMul00kj5g0Al8tADY2y6C+4FIIACH5BAkLAAAALAAAAAAQAAsAAAUvICCOZGme5ERRk6iy7qpyHCVStA3gNa/7txxwlwv2isSacYUc+l4tADQGQ1mvpBAAIfkECQsAAAAsAAAAABAACwAABS8gII5kaZ7kRFGTqLLuqnIcJVK0DeA1r/u3HHCXC/aKxJpxhRz6Xi0ANAZDWa+kEAA7AAAAAAAAAAAA) /*Images/Status/loading.gif*/;
|
#Logging_Task_Status td.finishedRedirect i {
|
||||||
padding-right: 20px;
|
color: #1e6dab;
|
||||||
|
position: absolute;
|
||||||
|
right: 10px;
|
||||||
|
top: calc(57% - 0.5em);
|
||||||
|
display: inline-block;
|
||||||
}
|
}
|
||||||
#Logging_Task_Status td.exception {
|
#Logging_Task_Status td.exception {
|
||||||
background-color: #FFD8D8;
|
background-color: #FFD8D8;
|
||||||
|
|||||||
@@ -291,11 +291,22 @@ table.deviceProfileTable {
|
|||||||
padding: 8px 10px;
|
padding: 8px 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
td.finishedMessage {
|
||||||
|
i {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
td.finishedRedirect {
|
td.finishedRedirect {
|
||||||
background-position: right center;
|
position: relative;
|
||||||
background-repeat: no-repeat;
|
|
||||||
background-image: url(data:image/gif;base64,R0lGODlhEAALAPQAAP///zNah+Hm7dng6O7x9DddiTNah1d3nJqtw3+Xs8fS3k5vlm6JqaGzx4KatcrU4FFymDZciHGMq+ru8t/l7Pb3+V9+oeLo7vT2+MTP3LLB0dTc5fHz9gAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh/hpDcmVhdGVkIHdpdGggYWpheGxvYWQuaW5mbwAh+QQJCwAAACwAAAAAEAALAAAFLSAgjmRpnqSgCuLKAq5AEIM4zDVw03ve27ifDgfkEYe04kDIDC5zrtYKRa2WQgAh+QQJCwAAACwAAAAAEAALAAAFJGBhGAVgnqhpHIeRvsDawqns0qeN5+y967tYLyicBYE7EYkYAgAh+QQJCwAAACwAAAAAEAALAAAFNiAgjothLOOIJAkiGgxjpGKiKMkbz7SN6zIawJcDwIK9W/HISxGBzdHTuBNOmcJVCyoUlk7CEAAh+QQJCwAAACwAAAAAEAALAAAFNSAgjqQIRRFUAo3jNGIkSdHqPI8Tz3V55zuaDacDyIQ+YrBH+hWPzJFzOQQaeavWi7oqnVIhACH5BAkLAAAALAAAAAAQAAsAAAUyICCOZGme1rJY5kRRk7hI0mJSVUXJtF3iOl7tltsBZsNfUegjAY3I5sgFY55KqdX1GgIAIfkECQsAAAAsAAAAABAACwAABTcgII5kaZ4kcV2EqLJipmnZhWGXaOOitm2aXQ4g7P2Ct2ER4AMul00kj5g0Al8tADY2y6C+4FIIACH5BAkLAAAALAAAAAAQAAsAAAUvICCOZGme5ERRk6iy7qpyHCVStA3gNa/7txxwlwv2isSacYUc+l4tADQGQ1mvpBAAIfkECQsAAAAsAAAAABAACwAABS8gII5kaZ7kRFGTqLLuqnIcJVK0DeA1r/u3HHCXC/aKxJpxhRz6Xi0ANAZDWa+kEAA7AAAAAAAAAAAA) /*Images/Status/loading.gif*/;
|
i {
|
||||||
padding-right: 20px;
|
color: @StatusInformation;
|
||||||
|
position: absolute;
|
||||||
|
right: 10px;
|
||||||
|
top: calc(~"57% - 0.5em");
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
td.exception {
|
td.exception {
|
||||||
|
|||||||
+1
-1
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user