diff --git a/dashboard-ui/scripts/scheduledtaskspage.js b/dashboard-ui/scripts/scheduledtaskspage.js index 1b1d273334..88990af577 100644 --- a/dashboard-ui/scripts/scheduledtaskspage.js +++ b/dashboard-ui/scripts/scheduledtaskspage.js @@ -1,63 +1,24 @@ -var ScheduledTasksPage = { +(function ($, document, window) { - onPageShow: function () { - - Dashboard.showLoadingMsg(); - - ScheduledTasksPage.reloadList(true); - - $(ApiClient).on("websocketmessage", ScheduledTasksPage.onWebSocketMessage).on("websocketopen", ScheduledTasksPage.onWebSocketConnectionChange).on("websocketerror", ScheduledTasksPage.onWebSocketConnectionChange).on("websocketclose", ScheduledTasksPage.onWebSocketConnectionChange); - }, - - onPageHide: function () { - $(ApiClient).off("websocketmessage", ScheduledTasksPage.onWebSocketMessage).off("websocketopen", ScheduledTasksPage.onWebSocketConnectionChange).off("websocketerror", ScheduledTasksPage.onWebSocketConnectionChange).off("websocketclose", ScheduledTasksPage.onWebSocketConnectionChange); - ScheduledTasksPage.stopInterval(); - }, - - startInterval: function () { - - if (ApiClient.isWebSocketOpen()) { - ApiClient.sendWebSocketMessage("ScheduledTasksInfoStart", "1500,1500"); - } - }, - - stopInterval: function () { - - if (ApiClient.isWebSocketOpen()) { - ApiClient.sendWebSocketMessage("ScheduledTasksInfoStop"); - } - }, - - onWebSocketMessage: function (e, msg) { - - if (msg.MessageType == "ScheduledTasksInfo") { - ScheduledTasksPage.populateList(msg.Data); - } - }, - - onWebSocketConnectionChange: function() { - ScheduledTasksPage.reloadList(true); - }, - - reloadList: function (updateInterval) { + function reloadList(page, updateInterval) { if (updateInterval) { - ScheduledTasksPage.stopInterval(); + stopInterval(); } ApiClient.getScheduledTasks().done(function (tasks) { - ScheduledTasksPage.populateList(tasks); + + populateList(page, tasks); Dashboard.hideLoadingMsg(); if (updateInterval) { - ScheduledTasksPage.startInterval(); + startInterval(); } }); - }, - - populateList: function (tasks) { + } + function populateList(page, tasks) { tasks = tasks.sort(function (a, b) { a = a.Category + " " + a.Name; @@ -74,8 +35,6 @@ return 1; }); - var page = $($.mobile.activePage); - var html = ""; html += '"; $('#divScheduledTasks', page).html(html).trigger('create'); - }, - - startTask: function (id) { - - ApiClient.startScheduledTask(id).done(function (result) { - - ScheduledTasksPage.reloadList(); - }); - - }, - - stopTask: function (id) { - - ApiClient.stopScheduledTask(id).done(function (result) { - - ScheduledTasksPage.reloadList(); - }); } -}; -$(document).on('pageshow', "#scheduledTasksPage", ScheduledTasksPage.onPageShow).on('pagehide', "#scheduledTasksPage", ScheduledTasksPage.onPageHide); \ No newline at end of file + function getTaskProgressHtml(task) { + var html = ''; + + if (task.State == "Idle") { + + if (task.LastExecutionResult) { + + html += "Last ran " + humane_date(task.LastExecutionResult.EndTimeUtc) + ', taking ' + humane_elapsed(task.LastExecutionResult.StartTimeUtc, task.LastExecutionResult.EndTimeUtc); + + if (task.LastExecutionResult.Status == "Failed") { + html += " (failed)"; + } + else if (task.LastExecutionResult.Status == "Cancelled") { + html += " (cancelled)"; + } + else if (task.LastExecutionResult.Status == "Aborted") { + html += " (Aborted by server shutdown)"; + } + } + } + else if (task.State == "Running") { + + var progress = (task.CurrentProgressPercentage || 0).toFixed(1); + + html += ''; + html += '' + progress + '%'; + html += ''; + + html += "" + progress + "%"; + + } else { + + html += "Stopping"; + } + + return html; + } + + function onWebSocketMessage(e, msg) { + if (msg.MessageType == "ScheduledTasksInfo") { + + var tasks = msg.Data; + + var page = $.mobile.activePage; + + for (var i = 0, length = tasks.length; i < length; i++) { + + var task = tasks[i]; + + $('#' + task.Id, page).html(getTaskProgressHtml(task)); + + var btnTask = $('#btnTask' + task.Id, page); + + if (task.State == "Idle") { + + btnTask.addClass('btnStartTask').removeClass('btnStopTask').show().data('icon', 'play').buttonMarkup("refresh"); + } + else if (task.State == "Running") { + + btnTask.addClass('btnStopTask').removeClass('btnStartTask').show().data('icon', 'stop').buttonMarkup("refresh"); + + } else { + + btnTask.addClass('btnStartTask').removeClass('btnStopTask').hide().data('icon', 'play').buttonMarkup("refresh"); + } + } + } + } + + function onWebSocketConnectionChange() { + reloadList($.mobile.activePage, true); + } + + function startInterval() { + if (ApiClient.isWebSocketOpen()) { + ApiClient.sendWebSocketMessage("ScheduledTasksInfoStart", "1500,1500"); + } + } + + function stopInterval() { + if (ApiClient.isWebSocketOpen()) { + ApiClient.sendWebSocketMessage("ScheduledTasksInfoStop"); + } + } + + $(document).on('pageshow', "#scheduledTasksPage", function () { + + var page = this; + + Dashboard.showLoadingMsg(); + + reloadList(page, true); + + $(ApiClient).on("websocketmessage", onWebSocketMessage).on("websocketopen", onWebSocketConnectionChange).on("websocketerror", onWebSocketConnectionChange).on("websocketclose", onWebSocketConnectionChange); + + $('#divScheduledTasks', page).on('click', '.btnStartTask', function () { + + var id = this.getAttribute('data-taskid'); + ApiClient.startScheduledTask(id).done(function () { + + reloadList(page); + }); + + }).on('click', '.btnStopTask', function () { + + var id = this.getAttribute('data-taskid'); + ApiClient.stopScheduledTask(id).done(function () { + + reloadList(page); + }); + }); + + }).on('pagehide', "#scheduledTasksPage", function () { + + var page = this; + + $(ApiClient).off("websocketmessage", onWebSocketMessage).off("websocketopen", onWebSocketConnectionChange).off("websocketerror", onWebSocketConnectionChange).off("websocketclose", onWebSocketConnectionChange); + stopInterval(); + + $('#divScheduledTasks', page).off('click', '.btnStartTask').off('click', '.btnStopTask'); + }); + +})(jQuery, document, window); \ No newline at end of file