From b2ee8711ef991dc6e3753802ea5835b7ae33bb00 Mon Sep 17 00:00:00 2001 From: Daniel Molina Date: Tue, 9 Jun 2015 18:45:59 +0200 Subject: [PATCH] feature #3748: Add template scheduled actions panel --- src/sunstone/public/app/tabs/vms-tab.js | 1 + .../public/app/tabs/vms-tab/actions.js | 7 - .../public/app/tabs/vms-tab/panels/actions.js | 224 ++++++++++++++++++ .../tabs/vms-tab/panels/actions/panelId.js | 3 + 4 files changed, 228 insertions(+), 7 deletions(-) create mode 100644 src/sunstone/public/app/tabs/vms-tab/panels/actions.js create mode 100644 src/sunstone/public/app/tabs/vms-tab/panels/actions/panelId.js diff --git a/src/sunstone/public/app/tabs/vms-tab.js b/src/sunstone/public/app/tabs/vms-tab.js index a39cb88654..cbaa7d4833 100644 --- a/src/sunstone/public/app/tabs/vms-tab.js +++ b/src/sunstone/public/app/tabs/vms-tab.js @@ -23,6 +23,7 @@ define(function(require) { require('./vms-tab/panels/network'), require('./vms-tab/panels/snapshots'), require('./vms-tab/panels/placement'), + require('./vms-tab/panels/actions'), // require('./vms-tab/panels/template') ]; diff --git a/src/sunstone/public/app/tabs/vms-tab/actions.js b/src/sunstone/public/app/tabs/vms-tab/actions.js index 9d7604bebf..2a74706ec2 100644 --- a/src/sunstone/public/app/tabs/vms-tab/actions.js +++ b/src/sunstone/public/app/tabs/vms-tab/actions.js @@ -44,7 +44,6 @@ define(function(require) { "VM.chmod": _commonActions.singleAction('chmod'), "VM.rename": _commonActions.singleAction('rename'), "VM.update_template": _commonActions.singleAction('update'), - "VM.update_actions": _commonActions.singleAction('update'), "VM.deploy_action": _commonActions.singleAction('deploy'), "VM.migrate_action": _commonActions.singleAction('migrate'), "VM.migrate_live_action": _commonActions.singleAction('livemigrate'), @@ -98,12 +97,6 @@ define(function(require) { }, error: onError }, - "VM.deploy" : { - type: "custom", - call: function() { - popUpDeployVMDialog(); - } - }, "VM.silent_deploy_action" : { diff --git a/src/sunstone/public/app/tabs/vms-tab/panels/actions.js b/src/sunstone/public/app/tabs/vms-tab/panels/actions.js new file mode 100644 index 0000000000..59cc4fb85d --- /dev/null +++ b/src/sunstone/public/app/tabs/vms-tab/panels/actions.js @@ -0,0 +1,224 @@ +define(function(require) { + /* + DEPENDENCIES + */ + + var Locale = require('utils/locale'); + var Sunstone = require('sunstone'); + var Humanize = require('utils/humanize'); + var TemplateUtils = require('utils/template-utils'); + + /* + CONSTANTS + */ + + var TAB_ID = require('../tabId'); + var PANEL_ID = require('./actions/panelId'); + var RESOURCE = "VM"; + var XML_ROOT = "VM"; + + /* + CONSTRUCTOR + */ + + function Panel(info) { + this.panelId = PANEL_ID; + this.title = Locale.tr("Actions"); + this.icon = "fa-calendar"; + + this.element = info[XML_ROOT]; + + return this; + }; + + Panel.PANEL_ID = PANEL_ID; + Panel.prototype.html = _html; + Panel.prototype.setup = _setup; + + return Panel; + + /* + FUNCTION DEFINITIONS + */ + + function _html() { + var that = this; + var html = '
\ +
\ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + ' + + fromJSONtoActionsTable(that.element.USER_TEMPLATE.SCHED_ACTION) + + '
' + Locale.tr("ID") + '' + Locale.tr("ACTION") + '' + Locale.tr("TIME") + '' + Locale.tr("DONE") + '' + Locale.tr("MESSAGE") + '' + Locale.tr("Actions") + '
\ +
\ +
'; + + return html; + } + + function _setup(context) { + var that = this; + context.off('click', '#add_scheduling_action'); + context.on('click', '#add_scheduling_action', function() { + $("#add_scheduling_action", context).attr("disabled", "disabled"); + $("#scheduling_actions_table").append('\ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + '); + + return false; + }); + + context.off("click", "#submit_scheduling_action"); + context.on("click", "#submit_scheduling_action", function() { + var date_input_value = $("#date_input", context).val(); + var time_input_value = $("#time_input", context).val(); + + if (date_input_value == "" || time_input_value == "") + return false; + + var time_value = date_input_value + ' ' + time_input_value + + // Calculate MAX_ID + var max_id = -1; + + if (that.element.USER_TEMPLATE.SCHED_ACTION) { + if (!that.element.USER_TEMPLATE.SCHED_ACTION.length) { + var tmp_element = that.element.USER_TEMPLATE.SCHED_ACTION; + that.element.USER_TEMPLATE.SCHED_ACTION = new Array(); + that.element.USER_TEMPLATE.SCHED_ACTION.push(tmp_element); + } + + $.each(that.element.USER_TEMPLATE.SCHED_ACTION, function(i, element) { + if (max_id < element.ID) + max_id = element.ID + }) + } else { + that.element.USER_TEMPLATE.SCHED_ACTION = new Array(); + } + + var new_action = {}; + new_action.ID = parseInt(max_id) + 1; + new_action.ACTION = $("#select_new_action", context).val(); + var epoch_str = new Date(time_value); + + new_action.TIME = parseInt(epoch_str.getTime()) / 1000; + + that.element.USER_TEMPLATE.SCHED_ACTION.push(new_action); + + // Let OpenNebula know + var template_str = TemplateUtils.templateToString(that.element.USER_TEMPLATE); + Sunstone.runAction("VM.update_template", that.element.ID, template_str); + + $("#add_scheduling_action", context).removeAttr("disabled"); + return false; + }); + + // Listener for key,value pair remove action + context.off("click", ".remove_action_x"); + context.on("click", ".remove_action_x", function() { + var index = this.id.substring(6, this.id.length); + var tmp_tmpl = new Array(); + + $.each(that.element.USER_TEMPLATE.SCHED_ACTION, function(i, element) { + if (element.ID != index) + tmp_tmpl[i] = element + }) + + that.element.USER_TEMPLATE.SCHED_ACTION = tmp_tmpl; + var template_str = TemplateUtils.templateToString(that.element.USER_TEMPLATE); + + // Let OpenNebula know + Sunstone.runAction("VM.update_template", that.element.ID, template_str); + }); + + } + + // Returns an HTML string with the json keys and values + function fromJSONtoActionsTable(actions_array) { + var str = "" + var empty = '\ + \ + ' + Locale.tr("No actions to show") + '\ + ' ; + + if (!actions_array) { + return empty; + } + + if (!$.isArray(actions_array)) { + var tmp_array = new Array(); + tmp_array[0] = actions_array; + actions_array = tmp_array; + } + + if (!actions_array.length) { + return empty; + } + + $.each(actions_array, function(index, scheduling_action) { + str += fromJSONtoActionRow(scheduling_action); + }); + + return str; + } + + // Helper for fromJSONtoHTMLTable function + function fromJSONtoActionRow(scheduling_action) { + var done_str = scheduling_action.DONE ? (Humanize.prettyTime(scheduling_action.DONE)) : ""; + var message_str = scheduling_action.MESSAGE ? scheduling_action.MESSAGE : ""; + var time_str = Humanize.prettyTime(scheduling_action.TIME); + + var str = ""; + str += '\ + ' + scheduling_action.ID + '\ + ' + scheduling_action.ACTION + '\ + ' + time_str + '\ + ' + done_str + '\ + ' + message_str + '\ + \ +
\ + \ +
\ + \ + '; + + return str; + } +}); diff --git a/src/sunstone/public/app/tabs/vms-tab/panels/actions/panelId.js b/src/sunstone/public/app/tabs/vms-tab/panels/actions/panelId.js new file mode 100644 index 0000000000..9f583d35fa --- /dev/null +++ b/src/sunstone/public/app/tabs/vms-tab/panels/actions/panelId.js @@ -0,0 +1,3 @@ +define(function(require){ + return 'vm_actions_tab'; +}); \ No newline at end of file