diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_dispatch_html.html b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_dispatch_html.html index b3da8ae69510af7f8d69545ae5163e09e6e2e1f9..57b2316f583602f0da98fa5f7877346a3e37c134 100644 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_dispatch_html.html +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_dispatch_html.html @@ -5,25 +5,37 @@ ERP5 Page Monitoring Dispatch + - +
+

+   + Monitoring Search +

+
+

Type a text or query. ie: portal_type: "Software Instance" AND title: "foo"

+
+ +
+
+
\ No newline at end of file diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_dispatch_html.xml b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_dispatch_html.xml index 161a7304fad608c81b3d74adbc66b88bcfe8b03a..8e03131f0dcaab1fd9e3b91b71f0cfa86e3c4c74 100644 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_dispatch_html.xml +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_dispatch_html.xml @@ -242,7 +242,7 @@ serial - 963.3574.26713.18039 + 963.33813.35232.64187 state @@ -260,7 +260,7 @@ - 1509121633.77 + 1510936342.8 UTC diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_dispatch_js.js b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_dispatch_js.js index ea7044fbfcc645e57259704d6342b0953b4d6380..75e92f68c5dd43bf34082ad58b014567b8cd55ef 100644 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_dispatch_js.js +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_dispatch_js.js @@ -1,6 +1,6 @@ -/*global window, rJS, Handlebars */ +/*global window, rJS, RSVP, Handlebars */ /*jslint nomen: true, indent: 2, maxerr: 3 */ -(function (window, rJS, Handlebars) { +(function (window, rJS, RSVP, Handlebars) { "use strict"; var gadget_klass = rJS(window), @@ -9,6 +9,56 @@ .innerHTML, dispatch_template = Handlebars.compile(source); + function searchItem(gadget, search_query) { + var redirect_options = {}, + select_list = ["portal_type"]; + if (search_query === undefined || search_query === "") { + return new RSVP.Queue() + .push(function () { + return; + }); + } + return new RSVP.Queue() + .push(function () { + return gadget.getSetting("listbox_lines_limit", 20); + }) + .push(function (lines_limit) { + return gadget.jio_allDocs({ + query: search_query, + select_list: select_list, + limit: [0, lines_limit] + }); + }) + .push(function (result) { + if (result === undefined || result.data.total_rows === 0) { + // no result from the query + return; + } + if (result.data.total_rows === 1) { + // one item found, redirect to it + redirect_options = { + jio_key: result.data.rows[0].id + }; + return gadget.redirect({"command": "index", options: redirect_options}); + } + redirect_options = { + extended_search: gadget.state.query + }; + if (gadget.state.portal_type === undefined) { + // take the first one + gadget.state.portal_type = result.data.rows[0].value.portal_type; + } + if (gadget.state.portal_type === "Hosting Subscription") { + redirect_options.page = "ojsm_hosting_subscription_list"; + } else if (gadget.state.portal_type === "Software Instance") { + redirect_options.page = "ojsm_software_instance_list"; + } else if (gadget.state.portal_type === "promise") { + redirect_options.page = "ojsm_status_list"; + } + return gadget.redirect({"command": "display", options: redirect_options}); + }); + } + gadget_klass ///////////////////////////////////////////////////////////////// @@ -17,21 +67,130 @@ .declareAcquiredMethod("translateHtml", "translateHtml") .declareAcquiredMethod("getUrlFor", "getUrlFor") .declareAcquiredMethod("updateHeader", "updateHeader") + .declareAcquiredMethod("jio_allDocs", "jio_allDocs") + .declareAcquiredMethod("redirect", "redirect") + .declareAcquiredMethod("getSetting", "getSetting") + .declareAcquiredMethod("setSetting", "setSetting") ///////////////////////////////////////////////////////////////// // declared methods ///////////////////////////////////////////////////////////////// + .declareMethod("triggerSubmit", function () { + var argument_list = arguments; + return this.getDeclaredGadget('form_view') + .push(function (gadget) { + return gadget.triggerSubmit.apply(gadget, argument_list); + }); + }) .declareMethod("render", function (options) { - var gadget = this; + var gadget = this, + regex = /portal_type\s*\:\s*[\'\"]([\w+\s+]+)[\'\"]/i, + regex_list = /\(?([\w\d\_]+)\s*\:\s*\(([\"\w\_\d\-\.\s*\,]+)\)\)?/g, + query_list = [], + i, + tmp, + page_title = "Monitoring Search", + original_query, + portal_type, + pt_result, + result; + + result = regex_list.exec(options.query); + if (result !== null) { + tmp = result[2].split(','); + for (i = 0; i < tmp.length; i += 1) { + query_list.push(result[1] + ': ' + tmp[i].trim()); + } + options.query = options.query + .replace(regex_list, '(' + query_list.join(' OR ') + ')'); + } + original_query = JSON.parse(JSON.stringify(options.query || "")); + + pt_result = regex.exec(options.query); + if (pt_result !== null) { + page_title = "Searching " + pt_result[1] + "(s)"; + portal_type = pt_result[1]; + } - gadget.element.innerHTML = dispatch_template({item: options.query || undefined}); return gadget.getUrlFor({command: 'display', options: {page: 'ojsm_status_list'}}) - .push(function (url) { + .push(function (back_url) { return gadget.updateHeader({ - back_url: url, - page_title: "Jump to Object" + page_title: page_title, + back_url: back_url + }); + }) + .push(function () { + return gadget.changeState({ + original_query: original_query, + query: options.query, + portal_type: portal_type || "promise", + import_opml: portal_type === undefined ? false : options.import_opml || true }); }); - }); + }) + .onStateChange(function () { + var gadget = this; + + return new RSVP.Queue() + .push(function () { + if (gadget.state.import_opml) { + return gadget.getSetting('latest_import_date') + .push(function (import_date) { + // If import was never done, or was done more than 2 weeks ago + // 1209600000 = 1000*60*60*24*14 + var current_date = new Date().getTime(); + if (import_date === undefined || + (import_date + 1209600000) < current_date) { + return gadget.setSetting('sync_redirect_options', { + query: gadget.state.original_query, + page: 'ojsm_dispatch' + }) + .push(function () { + return gadget.redirect({command: 'change', options: { + page: "ojsm_erp5_configurator", + type: "erp5" + }}); + }); + } + }); + } + }) + .push(function () { + return gadget.getDeclaredGadget('erp5_searchfield'); + }) + .push(function (searchfield) { + return searchfield.render({ + extended_search: gadget.state.original_query, + focus: true + }); + }) + .push(function () { + return searchItem(gadget, gadget.state.query); + }) + .push(function (search_result) { + if (search_result === undefined && gadget.state.query) { + gadget.element.querySelector('.search-result') + .innerHTML = dispatch_template({}); + } + }); + }) + .onEvent('submit', function () { + var gadget = this; + + return gadget.getDeclaredGadget("erp5_searchfield") + .push(function (search_gadget) { + return search_gadget.getContent(); + }) + .push(function (data) { + var options = { + page: "ojsm_dispatch" + }; + if (data.search) { + options.query = data.search; + return gadget.redirect({command: 'change', options: options}); + } + }); + + }, false, true); -}(window, rJS, Handlebars)); \ No newline at end of file +}(window, rJS, RSVP, Handlebars)); \ No newline at end of file diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_dispatch_js.xml b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_dispatch_js.xml index e57aa57e3bce7aedf62b08bbf40c508e16722929..f7c03c82e394022ac215c992ccb228067796bf7d 100644 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_dispatch_js.xml +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_dispatch_js.xml @@ -238,7 +238,7 @@ serial - 963.29379.61141.36334 + 963.38066.29413.61576 state @@ -256,7 +256,7 @@ - 1510669689.61 + 1540892674.51 UTC diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_erp5_configurator_html.html b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_erp5_configurator_html.html index 1db714aaf40bba49c726ca38e83463ee67cce173..6d6f9ee395f9b450e2d98db095d82e98c994e398 100644 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_erp5_configurator_html.html +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_erp5_configurator_html.html @@ -19,7 +19,7 @@ Your ERP5 Connection parameters -

You have to be logged in this ERP5 prior to synchronising

+

You have to be logged in this ERP5 prior to import OPML


diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_erp5_configurator_html.xml b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_erp5_configurator_html.xml index e3cc07bcc6526cb58f204aee93cd68aeebe05012..f1389b90ec114eff5bf15e915f7b4d69079cbb8b 100644 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_erp5_configurator_html.xml +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_erp5_configurator_html.xml @@ -242,7 +242,7 @@ serial - 962.54628.50882.58453 + 963.27666.8050.30907 state @@ -260,7 +260,7 @@ - 1508258766.54 + 1511257051.71 UTC diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_erp5_configurator_js.js b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_erp5_configurator_js.js index d339b92f8664e2d254bb019fde72afde70085c10..60f1e9c6581520974d86e999ebc78e0d14e60e45 100644 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_erp5_configurator_js.js +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_erp5_configurator_js.js @@ -5,7 +5,7 @@ rJS(window) .setState({ - erp5_url: "https://vifib.erp5.net/web_site_module/renderjs_runner/hateoas/" + erp5_url: "https://slapos.vifib.com/hateoas/" }) ///////////////////////////////////////////////////////////////// // Acquired methods diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_erp5_configurator_js.xml b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_erp5_configurator_js.xml index 3a049dd10fd580dc80de2a0e9ce0c49310212513..71608ad67bc31698b983e6d7b66b5e790200c3c4 100644 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_erp5_configurator_js.xml +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_erp5_configurator_js.xml @@ -250,7 +250,7 @@ serial - 963.16563.15280.46899 + 963.27666.8050.30907 state @@ -268,7 +268,7 @@ - 1509978780.17 + 1511344516.01 UTC diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_hosting_subscription_list_js.js b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_hosting_subscription_list_js.js index 7758225373e2d742aeaab3b9a15799f32b96069f..34944090ad10a76c6acd19c97e6bb4f097d7498e 100644 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_hosting_subscription_list_js.js +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_hosting_subscription_list_js.js @@ -5,83 +5,6 @@ var gadget_klass = rJS(window); - function getHostingData(gadget, filter) { - // optimized way to fetch hosting subscription list - var hosting_dict = {}, - instance_dict = {}, - total_rows = 0; - return gadget.jio_allDocs(filter) - .push(function (result) { - var i; - total_rows = result.data.total_rows; - for (i = 0; i < result.data.total_rows; i += 1) { - hosting_dict[result.data.rows[i].id] = { - id: result.data.rows[i].id, - value: { - url: result.data.rows[i].value.url, - status: "WARNING", - date: 'Not Synchronized', - title: result.data.rows[i].value.title, - amount: 0 - } - }; - } - return gadget.jio_allDocs({ - query: '(portal_type:"opml-outline") OR (portal_type:"global")', - select_list: [ - "parent_url", - "status", - "parent_id", - "date", - "portal_type" - ] - }); - }) - .push(function (result) { - var i, - key, - item, - row_list = []; - for (i = 0; i < result.data.total_rows; i += 1) { - if (result.data.rows[i].value.portal_type === 'opml-outline') { - if (hosting_dict.hasOwnProperty(result.data.rows[i].value.parent_url)) { - instance_dict[result.data.rows[i].id] = { - parent_id: result.data.rows[i].value.parent_url - }; - } - } - } - for (i = 0; i < result.data.total_rows; i += 1) { - if (result.data.rows[i].value.portal_type === 'global') { - if (instance_dict.hasOwnProperty(result.data.rows[i].value.parent_id)) { - instance_dict[result.data.rows[i].value.parent_id].date = - result.data.rows[i].value.date; - instance_dict[result.data.rows[i].value.parent_id].status = - result.data.rows[i].value.status; - } - } - } - //calculate hosting subscription status - for (key in instance_dict) { - if (instance_dict.hasOwnProperty(key)) { - item = hosting_dict[instance_dict[key].parent_id].value; - item.amount += 1; - if (item.status !== "ERROR") { - item.status = instance_dict[key].status || "WARNING"; - } - item.date = instance_dict[key].date || 'Not Synchronized'; - item.synced = item.status !== "WARNING" ? "YES" : "NO"; - } - } - for (key in hosting_dict) { - if (hosting_dict.hasOwnProperty(key)) { - row_list.push(hosting_dict[key]); - } - } - return {data: {total_rows: total_rows, rows: row_list}}; - }); - } - gadget_klass .declareAcquiredMethod("getSetting", "getSetting") .declareAcquiredMethod("redirect", "redirect") @@ -91,38 +14,32 @@ .declareAcquiredMethod("renderApplication", "renderApplication") .declareAcquiredMethod('jio_allDocs', 'jio_allDocs') - .allowPublicAcquisition("getUrlFor", function (param_list) { - if (param_list[0].options.jio_key !== undefined && - param_list[0].options.query.indexOf('portal_type:"opml"') !== -1) { - param_list[0].options.page = "ojsm_hosting_subscription_view"; - param_list[0].options.opml_key = param_list[0].options.jio_key; - } - return this.getUrlFor(param_list[0]); - }) - .allowPublicAcquisition("jio_allDocs", function (param_list) { var gadget = this; - return getHostingData(gadget, param_list[0]) + + return gadget.jio_allDocs(param_list[0]) .push(function (result) { var i, len = result.data.total_rows; for (i = 0; i < len; i += 1) { - if (result.data.rows[i].value.hasOwnProperty("date")) { - result.data.rows[i].value.date = { - allow_empty_time: 0, - ampm_time_style: 0, - css_class: "date_field", - date_only: 0, - description: "The Date", - editable: 0, - hidden: 0, - hidden_day_is_last_day: 0, - "default": new Date(result.data.rows[i].value.date).toUTCString(), - key: "date", - required: 0, - timezone_style: 0, - title: "Status Date", - type: "DateTimeField" + if (result.data.rows[i].value.hasOwnProperty("status_date")) { + result.data.rows[i].value.status_date = { + field_gadget_param: { + allow_empty_time: 0, + ampm_time_style: 0, + css_class: "date_field", + date_only: 0, + description: "The Date", + editable: 0, + hidden: 0, + hidden_day_is_last_day: 0, + "default": result.data.rows[i].value.status_date, + key: "date", + required: 0, + timezone_style: 1, + title: "Status Date", + type: "DateTimeField" + } }; result.data.rows[i].value["listbox_uid:list"] = { key: "listbox_uid:list", @@ -131,14 +48,16 @@ } if (result.data.rows[i].value.hasOwnProperty("status")) { result.data.rows[i].value.status = { - css_class: "", - description: "The Status", - hidden: 0, - "default": result.data.rows[i].value.status, - key: "status", - url: "gadget_erp5_field_status.html", - title: "Status", - type: "GadgetField" + field_gadget_param: { + css_class: "", + description: "The Status", + hidden: 0, + "default": result.data.rows[i].value.status, + key: "status", + url: "gadget_erp5_field_status.html", + title: "Status", + type: "GadgetField" + } }; result.data.rows[i].value["listbox_uid:list"] = { key: "listbox_uid:list", @@ -180,11 +99,10 @@ }) .push(function (form_list) { var column_list = [ + ['status', 'Status'], ['title', 'Hosting Subscription'], - ['amount', 'Instance Amount'], - ['date', 'Status Date'], - ['synced', 'Synced?'], - ['status', 'Status'] + ['instance_amount', 'Instance Amount'], + ['status_date', 'Status Date'] ]; return form_list.render({ erp5_document: { @@ -199,12 +117,12 @@ "lines": lines_limit, "list_method": "portal_catalog", "query": "urn:jio:allDocs?query=%28portal_type%3A%22" + - "opml" + "%22%29AND%28active%3A%22" + - "true" + "%22%29", + "Hosting Subscription" + "%22%29", "portal_type": [], - "search_column_list": [['title', 'Hosting Subscription']], - "sort_column_list": [['title', 'Hosting Subscription']], - "sort": [["title", "ascending"]], + "search_column_list": [['status', 'Status'], ['title', 'Hosting Subscription']], + "sort_column_list": [['status', 'Status'], ['title', 'Hosting Subscription'], + ['instance_amount', 'Instance Amount'], ['status_date', 'Status Date']], + "sort": [['status', 'ascending'], ['title', 'ascending']], "title": "Hosting Subscriptions", "command": "index", "type": "ListBox" diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_hosting_subscription_list_js.xml b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_hosting_subscription_list_js.xml index 06b65c4b25d36be13d8605a2d44139128bd1d1eb..39e55cf0400aa4e22de78355ab9f18c0e57b132d 100644 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_hosting_subscription_list_js.xml +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_hosting_subscription_list_js.xml @@ -239,7 +239,7 @@ serial - 963.27984.14453.52343 + 971.33408.64727.5632 state @@ -257,7 +257,7 @@ - 1510766156.1 + 1542965869.33 UTC diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_import_export_js.js b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_import_export_js.js index 2522c8b0c455790ec42c29a5bcf9ef347d842637..2c4906a4ad3e452829a51cca754efefffdfefd79 100644 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_import_export_js.js +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_import_export_js.js @@ -19,7 +19,7 @@ function getMonitorSetting(gadget) { return gadget.jio_allDocs({ - select_list: ["basic_login", "url", "title", "active"], + select_list: ["basic_login", "url", "title", "active", "state"], query: '(portal_type:"opml")' }) .push(function (opml_result) { @@ -61,6 +61,11 @@ "description": "OPML active state", "type": "boolean", "default": true + }, + "state": { + "description": "OPML requested state", + "type": "string", + "default": "Started" } }, "additionalProperties": false @@ -188,8 +193,11 @@ item = { title: configuration_dict.opml_description[i].title, url: configuration_dict.opml_description[i].href, - active: true, - portal_type: "opml" + active: configuration_dict.opml_description[i].active, + portal_type: "opml", + has_monitor: configuration_dict.opml_description[i] + .href.startsWith("https://"), + state: configuration_dict.opml_description[i].state || "Started" }; for (j = 0; j < configuration_dict.monitor_url.length; j += 1) { if (configuration_dict.monitor_url[j].parent_url === @@ -216,6 +224,8 @@ cred_list = atob(item.basic_login).split(':'); item.username = cred_list[0]; item.password = cred_list[1]; + item.has_monitor = item.url.startsWith("https://"); + item.state = item.state || "Started"; pushSetting(item.url, item); } } @@ -243,48 +253,76 @@ if (status) { return gadget.redirect({ "command": "display", - "options": {"page": "settings_configurator"} + "options": {"page": "ojsm_synchronize"} }); } }); }); } + function getParameterDictFromUrl(uri_param) { + if (uri_param.has('url') && uri_param.has('password') && + uri_param.has('username') && uri_param.get('url').startsWith('http')) { + return { + opml_url: uri_param.get('url').trim(), + username: uri_param.get('username').trim(), + password: uri_param.get('password').trim() + }; + } + } + + function getParameterFromconnectionDict(connection_dict) { + if (connection_dict["monitor-url"] && + connection_dict["monitor-url"].startsWith('http') && + connection_dict["monitor-user"] && + connection_dict["monitor-password"]) { + return { + opml_url: connection_dict["monitor-url"].trim(), + username: connection_dict["monitor-user"].trim(), + password: connection_dict["monitor-password"].trim() + }; + } + } + function readMonitoringParameter(parmeter_xml) { var parser = new DOMParser(), xmlDoc = parser.parseFromString(parmeter_xml, "text/xml"), parameter, uri_param, + json_parameter, + parameter_dict, monitor_dict = {}; + json_parameter = xmlDoc.getElementById("_"); + if (json_parameter !== undefined && json_parameter !== null) { + parameter_dict = JSON.parse(json_parameter.textContent); + if (parameter_dict.hasOwnProperty("monitor-setup-url")) { + return getParameterDictFromUrl( + new URLSearchParams(parameter_dict["monitor-setup-url"]) + ); + } + return getParameterFromconnectionDict(parameter_dict); + } parameter = xmlDoc.getElementById("monitor-setup-url"); if (parameter !== undefined && parameter !== null) { // monitor-setup-url exists uri_param = new URLSearchParams(parameter.textContent); - if (uri_param.has('url') && uri_param.has('password') && - uri_param.has('username') && uri_param.get('url').startsWith('http')) { - return { - opml_url: uri_param.get('url'), - username: uri_param.get('username'), - password: uri_param.get('password') - }; + return getParameterDictFromUrl(uri_param); + } + parameter = xmlDoc.getElementById("monitor-url"); + if (parameter !== undefined && parameter !== null) { + monitor_dict.url = parameter.textContent.trim(); + parameter = xmlDoc.getElementById("monitor-user"); + if (parameter === undefined && parameter !== null) { + return; } - } else { - parameter = xmlDoc.getElementById("monitor-url"); - if (parameter !== undefined && parameter !== null) { - monitor_dict.url = parameter.textContent.trim(); - parameter = xmlDoc.getElementById("monitor-user"); - if (parameter === undefined && parameter !== null) { - return; - } - monitor_dict.username = parameter.textContent.trim(); - parameter = xmlDoc.getElementById("monitor-password"); - if (parameter === undefined && parameter !== null) { - return; - } - monitor_dict.password = parameter.textContent.trim(); - return monitor_dict; + monitor_dict.username = parameter.textContent.trim(); + parameter = xmlDoc.getElementById("monitor-password"); + if (parameter === undefined && parameter !== null) { + return; } + monitor_dict.password = parameter.textContent.trim(); + return monitor_dict; } } @@ -293,11 +331,11 @@ opml_list = [], uid_dict = {}; if (limit === undefined) { - limit = 100; + limit = 300; } return gadget.state.erp5_gadget.allDocs({ query: '(portal_type:"Hosting Subscription") AND (validation_state:"validated")', - select_list: ['title', 'default_predecessor_uid', 'uid'], + select_list: ['title', 'default_predecessor_uid', 'uid', 'slap_state'], limit: [0, limit], sort_on: [ ["creation_date", "descending"] @@ -307,13 +345,19 @@ var i, uid_search_list = []; for (i = 0; i < result.data.total_rows; i += 1) { - hosting_subscription_list.push({ - title: result.data.rows[i].value.title, - relative_url: result.data.rows[i].id - }); - uid_search_list.push(result.data.rows[i].value.uid); - if (result.data.rows[i].value.default_predecessor_uid) { - uid_dict[result.data.rows[i].value.default_predecessor_uid] = i; + if (result.data.rows[i].value.slap_state !== "destroy_requested") { + hosting_subscription_list.push({ + title: result.data.rows[i].value.title, + relative_url: result.data.rows[i].id, + active: (result.data.rows[i].value.slap_state === + "start_requested") ? true : false, + state: (result.data.rows[i].value.slap_state === + "start_requested") ? "Started" : "Stopped" + }); + uid_search_list.push(result.data.rows[i].value.uid); + if (result.data.rows[i].value.default_predecessor_uid) { + uid_dict[result.data.rows[i].value.default_predecessor_uid] = i; + } } } return gadget.state.erp5_gadget.allDocs({ @@ -332,21 +376,25 @@ tmp_uid = result.data.rows[i].value.uid; if (uid_dict.hasOwnProperty(tmp_uid)) { tmp_parameter = readMonitoringParameter(result.data.rows[i].value.connection_xml); - if (tmp_parameter !== undefined) { - opml_list.push({ - portal_type: "opml", - title: hosting_subscription_list[uid_dict[tmp_uid]] - .title, - relative_url: hosting_subscription_list[uid_dict[tmp_uid]] - .relative_url, - url: tmp_parameter.opml_url, - username: tmp_parameter.username, - password: tmp_parameter.password, - basic_login: btoa(tmp_parameter.username + ':' + - tmp_parameter.password), - active: true - }); + if (tmp_parameter === undefined) { + tmp_parameter = {username: "", password: "", opml_url: undefined}; } + opml_list.push({ + portal_type: "opml", + title: hosting_subscription_list[uid_dict[tmp_uid]] + .title, + relative_url: hosting_subscription_list[uid_dict[tmp_uid]] + .relative_url, + url: tmp_parameter.opml_url || String(tmp_uid) + " NO MONITOR", + has_monitor: tmp_parameter.opml_url !== undefined, + username: tmp_parameter.username, + password: tmp_parameter.password, + basic_login: btoa(tmp_parameter.username + ':' + + tmp_parameter.password), + active: tmp_parameter.opml_url !== undefined && + hosting_subscription_list[uid_dict[tmp_uid]].active, + state: hosting_subscription_list[uid_dict[tmp_uid]].state + }); } } return opml_list; @@ -540,7 +588,7 @@ return gadget.state.erp5_gadget.createJio(); }) .push(function () { - return gadget.getSetting('opml_import_limit', 100); + return gadget.getSetting('opml_import_limit', 300); }) .push(function (select_limit) { return getInstanceOPMLListFromMaster(gadget, select_limit); @@ -590,20 +638,23 @@ status: "error" }); } - return gadget.notifySubmitted({ - message: "Configuration Saved!", - status: "success" - }); + return RSVP.all([ + gadget.setSetting("latest_import_date", new Date().getTime()), + gadget.notifySubmitted({ + message: "Configuration Saved!", + status: "success" + }) + ]); }) .push(function () { if (!has_failed) { return gadget.redirect({ "command": "display", - "options": {"page": "settings_configurator"} + "options": {"page": "ojsm_synchronize"} }); } }); } }); }); -}(window, rJS, RSVP, jsen, Handlebars, atob, btoa, DOMParser, URLSearchParams)); +}(window, rJS, RSVP, jsen, Handlebars, atob, btoa, DOMParser, URLSearchParams)); \ No newline at end of file diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_import_export_js.xml b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_import_export_js.xml index b668a91888e59759eb475d457573d29070942a0e..13c5a620b6d93d6f644e22cb004408b18817b554 100644 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_import_export_js.xml +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_import_export_js.xml @@ -250,7 +250,7 @@ serial - 963.27920.40078.20411 + 967.60730.33169.16435 state @@ -268,7 +268,7 @@ - 1510582176.99 + 1530700819.45 UTC diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_jump_html.html b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_jump_html.html index 87ec68251fcfd6b9285eea6530975bc515c31fbc..fb7953375cdfd15cdfd5c8236ef70503489853df 100644 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_jump_html.html +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_jump_html.html @@ -2,7 +2,7 @@ - + ERP5 Page Monitoring Jump diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_opml_add_html.html b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_opml_add_html.html index 1f775495e0e3763cf1375be1b748b070a2df3681..0ec4835085bd2ab725868c5847dcf9e5d02c1bc1 100644 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_opml_add_html.html +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_opml_add_html.html @@ -13,6 +13,7 @@ +
@@ -23,5 +24,13 @@ data-gadget-sandbox="public"> +
+ +
\ No newline at end of file diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_opml_add_html.xml b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_opml_add_html.xml index deef35d9fd391fe0faf3cc5107721056575f07b1..da59feaa53f39df5f1aa778c6529e759ed27d7b0 100644 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_opml_add_html.xml +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_opml_add_html.xml @@ -250,7 +250,7 @@
serial - 963.27666.8050.30907 + 971.63817.9300.38417 state @@ -268,7 +268,7 @@ - 1510675648.98 + 1543855483.74 UTC diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_opml_add_js.js b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_opml_add_js.js index 7c8036b0442598d1856393c18f5857cb8c2f79c0..9a4e29f009e00df7f5c9854e074443e208336ad1 100644 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_opml_add_js.js +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_opml_add_js.js @@ -5,6 +5,7 @@ rJS(window) + .setState({auto_sync: true, check_pwd: true}) ///////////////////////////////////////////////////////////////// // Acquired methods ///////////////////////////////////////////////////////////////// @@ -18,6 +19,16 @@ ///////////////////////////////////////////////////////////////// // declared methods ///////////////////////////////////////////////////////////////// + .onEvent('click', function (event) { + var gadget = this; + + if (event.target.id === "saveOPMLNoPwd") { + return gadget.changeState({check_pwd: false}) + .push(function () { + return gadget.element.querySelector('button[type="submit"]').click(); + }); + } + }, false, false) .onEvent('submit', function () { var gadget = this, opml_gadget, @@ -42,25 +53,42 @@ return gadget.notifySubmitting() .push(function () { doc.title = ""; - return opml_gadget.saveOPML(doc, true); + return opml_gadget.saveOPML(doc, gadget.state.check_pwd); }) - .push(function (status) { + .push(function (state) { var msg = {message: 'OPML document added', status: 'success'}; - if (!status) { + if (!state) { msg = {message: 'Failed to add OPML document', status: "error"}; } return RSVP.all([ gadget.notifySubmitted(msg), - status + state ]); }) .push(function (result_list) { - if (result_list[1]) { + if (result_list[1].status) { + if (gadget.state.auto_sync) { + return gadget.getDeclaredGadget('sync_gadget') + .push(function (sync_gadget) { + // start synchronization now + return sync_gadget.register({now: true}); + }) + .push(function () { + return gadget.redirect({ + "command": "display", + "options": {"page": "ojsm_status_list"} + }); + }); + } return gadget.redirect({ "command": "display", "options": {"page": "settings_configurator"} }); } + if (result_list[1].can_force) { + gadget.element.getElementsByClassName("btn-nopasswd")[0] + .style.display = ""; + } }); } }); @@ -74,6 +102,9 @@ var gadget = this; return RSVP.Queue() .push(function () { + var button_no_pwd = gadget.element.getElementsByClassName("btn-nopasswd"); + + button_no_pwd[0].style.display = "none"; return RSVP.all([ gadget.getDeclaredGadget('form_view'), gadget.getSetting('portal_type') @@ -178,6 +209,12 @@ } }); }) + .push(function () { + return gadget.getSetting("opml_add_auto_sync", "on"); + }) + .push(function (auto_sync) { + return gadget.changeState({auto_sync: auto_sync === "on"}); + }) .push(function () { var new_options; @@ -194,6 +231,14 @@ save_action: true, change_password: chg_pwd_url }); + }) + .push(function () { + return gadget.checkSynchronize(); }); + }) + .declareJob("checkSynchronize", function () { + if (this.state.auto_sync) { + return this.element.querySelector('button[type="submit"]').click(); + } }); }(window, rJS, RSVP)); diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_opml_add_js.xml b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_opml_add_js.xml index eff8b968e11a549e15aee68c49e9a01626005db4..ddbf3251935d212865eb6717e7ee65d139d7428a 100644 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_opml_add_js.xml +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_opml_add_js.xml @@ -250,7 +250,7 @@ serial - 963.29486.6222.37785 + 971.63895.24146.65194 state @@ -268,7 +268,7 @@ - 1510676454.74 + 1543593135.84 UTC diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_resources_view_html.html b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_resources_view_html.html index f077290573b9ee916451470757cf3238fce924fe..b073c9e58f90f92078341fb559f356db5bdc4111 100644 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_resources_view_html.html +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_resources_view_html.html @@ -26,7 +26,6 @@
-

Graph content will be reloaded automatically every minutes.

+
+
+
+
-
-
-
+
+
+
+
+
+
diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_resources_view_html.xml b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_resources_view_html.xml index 72afda147155e5dfae53dc907e0a4bfac478dd35..3af8099bb9c8caa0727778c386d0073fe10cc83a 100644 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_resources_view_html.xml +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_resources_view_html.xml @@ -246,7 +246,7 @@
serial - 963.22427.36654.49664 + 971.40737.38602.8192 state @@ -264,7 +264,7 @@ - 1510327355.11 + 1542206472.63 UTC diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_resources_view_js.js b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_resources_view_js.js index ef97396fb505af602ff69db1e578d486e87a9e8a..215bc0e3a57e8232527fcf5f6b76124aff4ee773 100644 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_resources_view_js.js +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_resources_view_js.js @@ -14,7 +14,7 @@ max_date = data[data.length - 1].split(',')[0]; begin_date = new Date(max_date); end_date = new Date(max_date); - begin_date.setHours(begin_date.getHours() - 2); + begin_date.setHours(begin_date.getHours() - 8); date_window = [Date.parse(begin_date), Date.parse(end_date)]; } return date_window; @@ -60,7 +60,7 @@ date_diff, line_list = [], data_list = [], - axis_dict = {}; + axis_list = []; function convertElement(element) { var element_list = element.split(','); @@ -72,22 +72,32 @@ ]; } //"date, io rw counter, io cycles counter, disk used" - line_list = ["date", "io rw count (Kb/s)", "io cycles count (/1000)"]; //, "disk used"]; - axis_dict["0"] = { - "title": "IO resources usage", - "scale_type": "linear", - "value_type": "date", - "zoom_range": date_window - }; - for (i = 1; i < line_list.length; i += 1) { + line_list = ["io rw count (Kb/s)", "io cycles count (/1000)"]; //, "disk used"]; + axis_list.push({ + "0": { + "title": "IO read/write counter", + "scale_type": "linear", + "value_type": "date", + "zoom_range": date_window + } + }); + axis_list.push({ + "0": { + "title": "IO cycles counter", + "scale_type": "linear", + "value_type": "date", + "zoom_range": date_window + } + }); + for (i = 0; i < line_list.length; i += 1) { line_list[i] = line_list[i].trim(); data_list.push({ value_dict: {"0": [], "1": []}, type: "surface", - axis_mapping_id_dict: {"1": "1_" + i}, + axis_mapping_id_dict: {"1": "1_1"}, title: line_list[i] }); - axis_dict["1_" + i] = {"title": line_list[i], "position": "right"}; + axis_list[i]["1_1"] = {"title": line_list[i], "position": "right"}; } if (gadget.property_dict.io_data.data.length > 2) { prev_element = convertElement(gadget.property_dict.io_data.data[1]); @@ -106,32 +116,52 @@ prev_element = element; } } - return { - value: { - data: data_list, - layout: { - axis_dict : axis_dict, - title: "IO resources usage" + return [ + { + value: { + data: [data_list[0]], + layout: { + axis_dict : axis_list[0], + title: "IO write counter" + } + } + }, + { + value: { + data: [data_list[1]], + layout: { + axis_dict : axis_list[1], + title: "IO cycles counter" + } } } - }; + ]; } - function updateGraph(gadget) { + function updateGraph(gadget, reload_only) { return new RSVP.Queue() .push(function () { - var key, - promise_list = []; - for (key in gadget.property_dict.resource_dict) { - if (gadget.property_dict.resource_dict.hasOwnProperty(key)) { - promise_list.push(loadGraphData(gadget, key)); - } + if (reload_only === true) { + return; } - return RSVP.all(promise_list); - }) - .push(function () { - var data = updateIOData(gadget, gadget.property_dict.date_window); - return gadget.property_dict.graph_io.render(data); + return new RSVP.Queue() + .push(function () { + var key, + promise_list = []; + for (key in gadget.property_dict.resource_dict) { + if (gadget.property_dict.resource_dict.hasOwnProperty(key)) { + promise_list.push(loadGraphData(gadget, key)); + } + } + return RSVP.all(promise_list); + }) + .push(function () { + var data = updateIOData(gadget, gadget.property_dict.date_window); + return RSVP.all([ + gadget.property_dict.graph_io_read.render(data[0]), + gadget.property_dict.graph_io_write.render(data[1]) + ]); + }); }) .push(function () { var data_list = [], @@ -183,11 +213,28 @@ }); }) .push(function () { + //return gadget.element.querySelector('form button[type="submit"]').click(); + return gadget.getDeclaredGadget('form_cpu_graph') + .push(function (form_gadget) { + return form_gadget.getContent(); + }) + .push(function (form_doc) { + return form_doc.cpu_graph_select_key; + }); + }) + .push(function (cpu_graph_key) { var data_list = [], axis_dict = {}, previous_time = 0, line_list, + graph_index = 1, cpu_time_index = -1, + cpu_graph_dict = { + cpu_percent: "CPU percent", + cpu_time: "CPU time", + cpu_threads: "CPU threads", + cpu_process: "total process" + }, i, j; @@ -209,34 +256,40 @@ line_list = ["date", "total process", "CPU percent", "CPU time", "CPU threads"]; } - axis_dict["0"] = { - "title": "Process resources usage", - "scale_type": "linear", - "value_type": "date", - "zoom_range": gadget.property_dict.date_window - }; for (i = 1; i < line_list.length; i += 1) { line_list[i] = line_list[i].trim(); - data_list.push({ - value_dict: {"0": [], "1": []}, - type: "line", - axis_mapping_id_dict: {"1": "1_" + i}, - title: line_list[i] - }); if (line_list[i] === "CPU time") { cpu_time_index = i; } - axis_dict["1_" + i] = {"title": line_list[i], "position": "right"}; + if (line_list[i] === cpu_graph_dict[cpu_graph_key]) { + graph_index = i; + break; + } } + axis_dict["0"] = { + "title": line_list[graph_index], + "scale_type": "linear", + "value_type": "date", + "zoom_range": gadget.property_dict.date_window + }; + axis_dict["1_1"] = {"title": line_list[graph_index], "position": "right"}; + data_list.push({ + value_dict: {"0": [], "1": []}, + type: "line", + axis_mapping_id_dict: {"1": "1_1"}, + title: line_list[graph_index] + }); for (i = 1; i < gadget.property_dict.process_data.data.length; i += 1) { line_list = gadget.property_dict.process_data.data[i].split(','); for (j = 1; j < line_list.length; j += 1) { - // XXX - repeating date everytime - data_list[j - 1].value_dict["0"].push(line_list[0]); - if (j === cpu_time_index) { - data_list[j - 1].value_dict["1"].push(getCPUTime(line_list[j])); - } else { - data_list[j - 1].value_dict["1"].push(line_list[j]); + // Date + if (j === graph_index) { + data_list[0].value_dict["0"].push(line_list[0]); + if (j === cpu_time_index) { + data_list[0].value_dict["1"].push(getCPUTime(line_list[j])); + } else { + data_list[0].value_dict["1"].push(line_list[j]); + } } } } @@ -259,6 +312,7 @@ }) .ready(function (gadget) { gadget.property_dict = {}; + gadget.property_dict.disable_update = true; gadget.property_dict.resource_dict = { memory_resource: "monitor_resource_memory.data", cpu_resource: "monitor_resource_process.data", @@ -278,9 +332,15 @@ }); }) .ready(function (gadget) { - return gadget.getDeclaredGadget("graph_io") - .push(function (graph_io) { - gadget.property_dict.graph_io = graph_io; + return gadget.getDeclaredGadget("graph_io_read") + .push(function (graph_io_read) { + gadget.property_dict.graph_io_read = graph_io_read; + }); + }) + .ready(function (gadget) { + return gadget.getDeclaredGadget("graph_io_write") + .push(function (graph_io_write) { + gadget.property_dict.graph_io_write = graph_io_write; }); }) .ready(function (gadget) { @@ -309,6 +369,11 @@ gadget.getUrlFor({command: 'change', options: { page: 'ojsm_processes_view', key: gadget.state.opml_outline.reference + }}), + gadget.getUrlFor({command: 'change', options: { + page: 'ojsm_resources_view', + key: gadget.state.opml_outline.reference, + auto_reload: "yes" }}) ]); }) @@ -319,6 +384,66 @@ processes_url: url_list[1] }); }) + .push(function () { + return gadget.getDeclaredGadget('form_cpu_graph'); + }) + .push(function (form_view) { + return form_view.render({ + erp5_document: { + "_embedded": {"_view": { + "my_graph_auto_update": { + "description": "Enable graph content automatic update", + "title": "Auto update graph every minutes", + "default": "off", + "items": [ + ["Off", "off"], + ["On", "on"] + ], + "css_class": "", + "editable": 1, + "key": "graph_auto_update_key", + "hidden": 0, + "type": "ListField" + }, + "my_cpu_graph_select": { + "description": "", + "title": "CPU graph to display", + "default": "cpu_percent", + "items": [ + ["CPU Percentage", "cpu_percent"], + ["CPU Used Time", "cpu_time"], + ["CPU Threads Amount", "cpu_threads"], + ["Total Process Amount", "cpu_process"] + ], + "editable": 1, + "key": "cpu_graph_select_key", + "hidden": 0, + "type": "ListField" + } + }}, + "_links": { + "type": { + // form_list display portal_type in header + name: "" + } + } + }, + form_definition: { + group_list: [[ + "left", + [["my_graph_auto_update"], ["my_cpu_graph_select"]] + ], + [ + "right", + [] + ], + [ + "bottom", + [] + ]] + } + }); + }) .push(function () { gadget.property_dict.jio_gadget.createJio({ type: "webhttp", @@ -339,11 +464,29 @@ .declareAcquiredMethod('jio_get', 'jio_get') .declareAcquiredMethod("getUrlFor", "getUrlFor") .declareAcquiredMethod("notifySubmitted", 'notifySubmitted') + .declareAcquiredMethod("redirect", "redirect") + //.declareAcquiredMethod("notifySubmitting", 'notifySubmitting') .onLoop(function () { - return updateGraph(this); + if (!this.property_dict.disable_update) { + return updateGraph(this); + } }, 65000) + .onEvent('change', function (evt) { + var gadget = this; + if (evt.target.getAttribute("name") === "cpu_graph_select_key") { + updateGraph(gadget, true); + } + if (evt.target.getAttribute("name") === "graph_auto_update_key") { + if (evt.target.value == "on") { + gadget.property_dict.disable_update = false; + } else { + gadget.property_dict.disable_update = true; + } + } + }) + ///////////////////////////////////////////////////////////////// // declared service ///////////////////////////////////////////////////////////////// @@ -351,83 +494,6 @@ return updateGraph(this); - /*function toggleSerieVisibility(evt) { - var checkbox = evt.target.nextSibling, - index = $(evt.target).attr('rel'); - if ($(checkbox).prop("checked")) { - $(checkbox).prop("checked", false).checkboxradio("refresh"); - } else { - $(checkbox).prop("checked", true).checkboxradio("refresh"); - } - return gadget.property_dict.graph_cpu.setVisibility(parseInt(index, 10), $(checkbox).prop("checked")) - .push(function () { - return evt; - }); - }*/ - - /**.push(function () { - return gadget.property_dict.graph_cpu.render( - gadget.property_dict.process_data.data.join('\n'), - { - xlabel: ' Process resources usage', - labelsDivStyles: { 'textAlign': 'right' }, - dateWindow: date_window, - }, - "customInteractionModel" - ); - }) - .push(function () { - var label_list = gadget.property_dict.graph_cpu_label_list, - element = 'graph_cpu'; - if (gadget.property_dict.graph_cpu_label_list.length > 0) { - label_list = label_list.slice(1); // remove date column - return gadget.property_dict.graph_cpu.getColors() - .push(function (color_list) { - var label_content, - name_list = [], - i; - for (i = 0; i < label_list.length; i += 1) { - name_list.push({ - name: label_list[i], - id: "label_" + label_list[i].trim().replace(/\s/g, '_'), - color: color_list[i], - graph: element, - index: i - }); - } - label_content = graph_labels_widget({ - label_list: name_list - }); - gadget.property_dict.element.querySelector(".ui-panel-overview ." + element + " .ui-grid-span-1") - .innerHTML = label_content; - return $(gadget.property_dict.element.querySelectorAll("[data-role=controlgroup]")) - .controlgroup().controlgroup("refresh"); - }); - } - }) - .push(function () { - var promise_list = [], - element_list = gadget.property_dict.element.querySelectorAll("label.graph_cpu"), - i; - for (i = 0; i < element_list.length; i += 1) { - promise_list.push( - loopEventListener( - element_list[i], - 'click', - false, - toggleSerieVisibility - ) - ); - if ($(element_list[i]).attr('for').toLowerCase() !== 'label_cpu_percent' && $(element_list[i]).attr('for').toLowerCase() !== 'label_total_process') { - promise_list.push(gadget.property_dict.graph_cpu.setVisibility( - parseInt($(element_list[i]).attr('rel'), 10), false) - ); - promise_list.push($(element_list[i]).click()); - } - } - RSVP.all(promise_list); - return updateGraphTimer(); - })**/ }); }(window, rJS, RSVP)); \ No newline at end of file diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_resources_view_js.xml b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_resources_view_js.xml index 3ba51431805b9a28143569862115de00c93ea0a4..1506dc8531533dc8e53847f5bb1c37c01d4790c4 100644 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_resources_view_js.xml +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_resources_view_js.xml @@ -242,7 +242,7 @@ serial - 963.27984.14453.52343 + 971.43798.57526.26624 state @@ -260,7 +260,7 @@ - 1510651329.34 + 1542387970.17 UTC diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_software_instance_list_js.js b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_software_instance_list_js.js index d724a6c5b66dfdb6395e09577ccd8973745e4165..ff314aab2190a01f2ace6389ca32d06d3cc21682 100644 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_software_instance_list_js.js +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_software_instance_list_js.js @@ -5,10 +5,7 @@ rJS(window) .declareAcquiredMethod("updateHeader", "updateHeader") - .declareAcquiredMethod("redirect", "redirect") - .declareAcquiredMethod("reload", "reload") .declareAcquiredMethod("getSetting", "getSetting") - .declareAcquiredMethod("setSetting", "setSetting") .declareAcquiredMethod("getUrlFor", "getUrlFor") .declareAcquiredMethod("jio_allDocs", "jio_allDocs") @@ -19,22 +16,23 @@ var i, value, len = result.data.total_rows; for (i = 0; i < len; i += 1) { if (result.data.rows[i].value.hasOwnProperty("date")) { - value = new Date(result.data.rows[i].value.date); result.data.rows[i].value.date = { - allow_empty_time: 0, - ampm_time_style: 0, - css_class: "date_field", - date_only: 0, - description: "The Date", - editable: 0, - hidden: 0, - hidden_day_is_last_day: 0, - "default": value.toUTCString(), - key: "date", - required: 0, - timezone_style: 0, - title: "Status Date", - type: "DateTimeField" + field_gadget_param: { + allow_empty_time: 0, + ampm_time_style: 0, + css_class: "date_field", + date_only: 0, + description: "The Date", + editable: 0, + hidden: 0, + hidden_day_is_last_day: 0, + "default": result.data.rows[i].value.date, + key: "date", + required: 0, + timezone_style: 1, + title: "Status Date", + type: "DateTimeField" + } }; result.data.rows[i].value["listbox_uid:list"] = { key: "listbox_uid:list", @@ -44,14 +42,16 @@ if (result.data.rows[i].value.hasOwnProperty("status")) { value = result.data.rows[i].value.status; result.data.rows[i].value.status = { - css_class: "", - description: "The Status", - hidden: 0, - "default": value, - key: "status", - url: "gadget_erp5_field_status.html", - title: "Status", - type: "GadgetField" + field_gadget_param: { + css_class: "", + description: "The Status", + hidden: 0, + "default": value, + key: "status", + url: "gadget_erp5_field_status.html", + title: "Status", + type: "GadgetField" + } }; result.data.rows[i].value["listbox_uid:list"] = { key: "listbox_uid:list", @@ -94,10 +94,11 @@ }) .push(function (form_list) { var column_list = [ + ['status', 'Status'], ['title', 'Instance Title'], - ['hosting-title', 'Hosting Subscription'], - ['date', 'Status Date'], - ['status', 'Status'] + ['specialise_title', 'Hosting Subscription'], + ['aggregate_reference', 'Computer'], + ['date', 'Status Date'] ]; return form_list.render({ erp5_document: { @@ -112,11 +113,11 @@ "lines": lines_limit, "list_method": "portal_catalog", "query": "urn:jio:allDocs?query=portal_type%3A%22" + - "global" + "%22", + "Software%20Instance" + "%22", "portal_type": [], "search_column_list": column_list, "sort_column_list": column_list, - "sort": [["hosting-title", "ascending"]], + "sort": [["status", "ascending"]], "title": "Software Instances", "type": "ListBox" } diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_software_instance_list_js.xml b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_software_instance_list_js.xml index a6ff7e47676326fd99a0a239469f31de3e521e43..34131fe44d8f339e6fb9a9abff082ffb583a1085 100644 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_software_instance_list_js.xml +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_software_instance_list_js.xml @@ -242,7 +242,7 @@ serial - 963.27984.14453.52343 + 971.33401.54396.27033 state @@ -260,7 +260,7 @@ - 1510766173.29 + 1542962938.07 UTC diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_status_list_js.js b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_status_list_js.js index 270e7e70b118df5f0156274f032b5bf9db38e130..88b276133fbc94030c6e9ad671a14b88330ca9b7 100644 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_status_list_js.js +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_status_list_js.js @@ -17,22 +17,23 @@ var i, j, tmp, value, len = result.data.total_rows; for (i = 0; i < len; i += 1) { if (result.data.rows[i].value.hasOwnProperty("lastBuildDate")) { - value = new Date(result.data.rows[i].value.lastBuildDate); result.data.rows[i].value.lastBuildDate = { - allow_empty_time: 0, - ampm_time_style: 0, - css_class: "date_field", - date_only: 0, - description: "The Date", - editable: 0, - hidden: 0, - hidden_day_is_last_day: 0, - "default": value.toUTCString(), - key: "lastBuildDate", - required: 0, - timezone_style: 0, - title: "Promise Date", - type: "DateTimeField" + field_gadget_param: { + //allow_empty_time: 0, + //ampm_time_style: 0, + css_class: "date_field", + date_only: 0, + description: "The Date", + editable: 0, + hidden: 0, + hidden_day_is_last_day: 0, + "default": result.data.rows[i].value.lastBuildDate, + key: "lastBuildDate", + required: 0, + timezone_style: 1, + title: "Promise Date", + type: "DateTimeField" + } }; result.data.rows[i].value["listbox_uid:list"] = { key: "listbox_uid:list", @@ -45,8 +46,8 @@ for (j = 1; j < tmp.length; j += 1) { // first line of text is the date and status if (!value && tmp[j].trim() !== "") { - value += tmp[j].slice(0, 30); - if (tmp[j].length >= 30 || j + 1 < tmp.length) { + value += tmp[j].slice(0, 50); + if (tmp[j].length >= 50 || j + 1 < tmp.length) { // a part of text is not shown value += "..."; } @@ -57,14 +58,16 @@ if (result.data.rows[i].value.hasOwnProperty("category")) { value = result.data.rows[i].value.category; result.data.rows[i].value.category = { - css_class: "", - description: "The Status", - hidden: 0, - "default": value, - key: "category", - url: "gadget_erp5_field_status.html", - title: "Status", - type: "GadgetField" + field_gadget_param: { + css_class: "", + description: "The Status", + hidden: 0, + "default": value, + key: "category", + url: "gadget_erp5_field_status.html", + title: "Status", + type: "GadgetField" + } }; result.data.rows[i].value["listbox_uid:list"] = { key: "listbox_uid:list", @@ -116,12 +119,12 @@ }) .push(function (form_list) { var column_list = [ + ['category', 'Status'], ['source', 'Promise'], ['channel_item', 'Software Instance'], ['channel', 'Hosting Subscription'], ['lastBuildDate', 'Promise Date'], - ['description', 'Message'], - ['category', 'Status'] + ['description', 'Message'] ]; return form_list.render({ erp5_document: { diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_status_list_js.xml b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_status_list_js.xml index 7cb847f400de257be315497262b667d15d4bfca1..d5cb6dacd9e0bc3b84b647fbe15ff27b538079d7 100644 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_status_list_js.xml +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_status_list_js.xml @@ -242,7 +242,7 @@ serial - 963.27984.14453.52343 + 971.52364.9776.56234 state @@ -260,7 +260,7 @@ - 1510766112.11 + 1542962994.23 UTC diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_synchronize_js.js b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_synchronize_js.js index bb94a20a0053d0b26880f5d7cba6e95ea0167d81..8c9dbf6980ed449caa597ce991f9d0871d38ad4d 100644 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_synchronize_js.js +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_synchronize_js.js @@ -9,8 +9,10 @@ ///////////////////////////////////////////////////////////////// .declareAcquiredMethod("updateHeader", "updateHeader") .declareAcquiredMethod("redirect", "redirect") + .declareAcquiredMethod("getSetting", "getSetting") + .declareAcquiredMethod("setSetting", "setSetting") - .declareMethod("render", function () { + .declareMethod("render", function (options) { var gadget = this; return this.updateHeader({ page_title: "Monitoring Synchronization" @@ -23,10 +25,30 @@ }); }) .push(function () { - return gadget.redirect({ - command: "change", - options: {page: "ojsm_status_list"} - }); + var redirect_options = {"page": "ojsm_status_list"}; + if (options.reset === "1") { + // reset redirections + return gadget.setSetting("sync_redirect_options", undefined) + .push(function () { + return gadget.redirect({ + "command": "display", + "options": redirect_options + }); + }); + } + return gadget.getSetting('sync_redirect_options') + .push(function (redirect_dict) { + if (redirect_options) { + redirect_options = redirect_dict; + return gadget.setSetting("sync_redirect_options", undefined); + } + }) + .push(function () { + return gadget.redirect({ + "command": "display", + "options": redirect_options + }); + }); }); }); }(window, rJS)); diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_synchronize_js.xml b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_synchronize_js.xml index 71a85e74ab101a84e881bec43541865f939e1b41..1e2f695ee1d8e4803ac321d21848da0094ba0aed 100644 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_synchronize_js.xml +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_synchronize_js.xml @@ -250,7 +250,7 @@ serial - 963.29336.22296.43468 + 971.18960.44200.52138 state @@ -268,7 +268,7 @@ - 1510668189.54 + 1540897197.53 UTC diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_settings_configurator_html.html b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_settings_configurator_html.html index 2746ce4adf5c21191a085bdfc516394612dc46a4..0e06a357e3bf46a8d36636f8289482c22d575e52 100644 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_settings_configurator_html.html +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_settings_configurator_html.html @@ -2,9 +2,11 @@ - + ERP5 Page Monitoring Settings Configurator + + diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_settings_configurator_html.xml b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_settings_configurator_html.xml index a192562b6f557e203be660c0648e75214dc1baf4..947289dff7b3f0c3df3eede00a7ee0c12ceb3f72 100644 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_settings_configurator_html.xml +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_settings_configurator_html.xml @@ -242,7 +242,7 @@ serial - 963.8904.14589.19234 + 971.40832.39714.27067 state @@ -260,7 +260,7 @@ - 1509441500.96 + 1542210787.16 UTC diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_settings_configurator_js.js b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_settings_configurator_js.js index 13ed4823b8b8fcf4c921651ccfb07512446e024b..5407601fbbaaf6b8bb08f34a3da33878b8c2ad81 100644 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_settings_configurator_js.js +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_settings_configurator_js.js @@ -35,14 +35,16 @@ for (i = 0; i < len; i += 1) { if (result.data.rows[i].value.hasOwnProperty("active")) { result.data.rows[i].value.active = { - css_class: "", - description: "Is Enabled", - hidden: 0, - "default": result.data.rows[i].value.active.toString(), - key: "active", - url: "gadget_erp5_field_status.html", - title: "Enabled", - type: "GadgetField" + field_gadget_param: { + css_class: "", + description: "Is Enabled", + hidden: 0, + "default": result.data.rows[i].value.active.toString(), + key: "active", + url: "gadget_erp5_field_status.html", + title: "Enabled", + type: "GadgetField" + } }; result.data.rows[i].value["listbox_uid:list"] = { key: "listbox_uid:list", @@ -60,6 +62,8 @@ .onEvent('click', function (event) { var gadget = this, + sync_start_time, + success = true, element = gadget.element.querySelector("#destroyOPML"); function removeAllOPML(result) { @@ -96,23 +100,57 @@ return gadget.notifySubmitting() .push(function () { + return gadget.getSetting('sync_start_time'); + }) + .push(function (start_time) { + sync_start_time = start_time; + return gadget.getSetting('latest_sync_time'); + }) + .push(function (finish_time) { + if (finish_time - sync_start_time < 0) { + // sync is running, cannot remove OPML now + success = false; + return RSVP.all([ + gadget.notifySubmitted({ + message: 'Cannot destroy now, please wait until background ' + + 'sync is finished', + status: 'error' + }) + ]); + } element.setAttribute("disabled", "disabled"); return gadget.jio_allDocs({ query: 'portal_type: "opml"', select_list: ['title'] - }); - }) - .push(function (result) { - return removeAllOPML(result); - }) - .push(function () { - return RSVP.all([ - gadget.notifySubmitted({message: 'All OPML removed', status: 'success'}) - ]); + }) + .push(function (result) { + return RSVP.all([ + gadget.setSetting('sync_lock', true), + removeAllOPML(result) + ]); + }) + .push(function () { + return RSVP.all([ + gadget.setSetting('sync_lock', false), + gadget.notifySubmitted({ + message: 'All OPML removed', + status: 'success' + }) + ]); + }, function () { + success = false; + return gadget.setSetting('sync_lock', false); + }); }) .push(function () { - element.textContent = element.textContent.slice(10, element.textContent.length); - return gadget.redirect({"command": "reload"}); + element.textContent = element.textContent.slice( + 10, + element.textContent.length + ); + element.setAttribute('rel', ''); + if (success) { + return gadget.redirect({"command": "reload"}); + } }); } }, false, false) @@ -129,7 +167,11 @@ .push(function (form_doc) { doc = form_doc; return gadget.setSetting('sync_check_offline', - doc.check_online_access === 1 ? 'true' : 'false'); + doc.check_online_access === "on" ? 'true' : 'false'); + }) + .push(function () { + return gadget.setSetting('opml_add_auto_sync', + doc.opml_add_auto_sync || "off"); }) .push(function () { return gadget.setSetting('sync_data_interval', @@ -159,7 +201,8 @@ sync_data_interval, check_online_access, listbox_lines_limit, - opml_import_limit; + opml_import_limit, + opml_add_auto_sync; if (options.url) { // backward compatibility redirect to add opml @@ -169,7 +212,7 @@ return new RSVP.Queue() .push(function () { - return gadget.getSetting('opml_import_limit', 100); + return gadget.getSetting('opml_import_limit', 300); }) .push(function (import_limit) { opml_import_limit = import_limit; @@ -185,14 +228,18 @@ }) .push(function (latest_sync_time) { last_sync_time = latest_sync_time; + return gadget.getSetting("opml_add_auto_sync", "on"); + }) + .push(function (auto_sync) { + opml_add_auto_sync = auto_sync; return gadget.getSetting("sync_check_offline", "true"); }) .push(function (sync_check_offline) { if (sync_check_offline === "true" || sync_check_offline === true || sync_check_offline === undefined) { - check_online_access = "true"; + check_online_access = "on"; } else { - check_online_access = "false"; + check_online_access = ""; } return RSVP.all([ gadget.getDeclaredGadget('form_view'), @@ -201,9 +248,10 @@ }) .push(function (result) { var column_list = [ - ['title', 'OPML Title'], + ['title', 'Title'], ['url', 'Url'], - ['active', 'Enable Sync'] + ['state', 'Requested State'], + ['active', 'Sync Enabled'] ]; return result[0].render({ erp5_document: { @@ -256,6 +304,16 @@ "hidden": 0, "type": "CheckBoxField" }, + "my_opml_add_auto_sync": { + "description": "When Add OPML, start sync automatically", + "title": "Auto Sync Added OPML", + "default": opml_add_auto_sync, + "css_class": "", + "editable": 1, + "key": "opml_add_auto_sync", + "hidden": 0, + "type": "CheckBoxField" + }, "my_opml_import_limit": { "description": "Maximum number of OPML to import", "title": "OPML Import Limit", @@ -297,7 +355,7 @@ "left", [["your_last_sync_date"], ["my_auto_sync_interval"], ["my_listbox_lines_limit"], ["my_opml_import_limit"], - ["my_check_online_access"]] + ["my_check_online_access"], ["my_opml_add_auto_sync"]] ], [ "right", diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_settings_configurator_js.xml b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_settings_configurator_js.xml index 31557e25eac3d9fb74a68352898b27f81b109f84..da13b266c8a9779089c637516d939a4408bbd1d6 100644 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_settings_configurator_js.xml +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_settings_configurator_js.xml @@ -238,7 +238,7 @@ serial - 963.21245.1149.59784 + 971.42397.40766.62515 state @@ -256,7 +256,7 @@ - 1510216637.34 + 1542303383.28 UTC diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_hosting_subscription_view_html.html b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_jio_hosting_subscription_view_html.html similarity index 93% rename from bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_hosting_subscription_view_html.html rename to bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_jio_hosting_subscription_view_html.html index e452ecc271c17c044a14da748d35fa4890fcfacf..f1d74a2a00a4ce35b27d0eef275b23267eaf6c5f 100644 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_hosting_subscription_view_html.html +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_jio_hosting_subscription_view_html.html @@ -10,7 +10,7 @@ - + diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_hosting_subscription_view_html.xml b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_jio_hosting_subscription_view_html.xml similarity index 97% rename from bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_hosting_subscription_view_html.xml rename to bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_jio_hosting_subscription_view_html.xml index 2d2e310fbe1604ce1c7135979fa449eae1860e44..060aec1a45c7ee62a131e8510d1b48fa8ab3a89a 100644 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_hosting_subscription_view_html.xml +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_jio_hosting_subscription_view_html.xml @@ -83,7 +83,7 @@ default_reference - gadget_erp5_page_ojsm_hosting_subscription_view.html + gadget_officejs_jio_hosting_subscription_view.html description @@ -93,7 +93,7 @@ id - gadget_erp5_page_ojsm_hosting_subscription_view_html + gadget_officejs_jio_hosting_subscription_view_html language @@ -246,7 +246,7 @@ serial - 962.46060.41528.54152 + 971.13402.51340.4454 state @@ -264,7 +264,7 @@ - 1507901514.08 + 1540563538.46 UTC diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_hosting_subscription_view_js.js b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_jio_hosting_subscription_view_js.js similarity index 74% rename from bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_hosting_subscription_view_js.js rename to bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_jio_hosting_subscription_view_js.js index a40f0fb4723026064ed3968a60e817f7b35f7ec8..f997f8e541925aac691aa4f7c05a808e8a3c36ef 100644 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_hosting_subscription_view_js.js +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_jio_hosting_subscription_view_js.js @@ -1,19 +1,14 @@ -/*global window, rJS, document, RSVP, Rusha, escape */ +/*global window, rJS, document, RSVP, escape */ /*jslint nomen: true, indent: 2, maxerr: 3*/ -(function (window, rJS, document, RSVP, Rusha, escape) { +(function (window, rJS, document, RSVP, escape) { "use strict"; - var gadget_klass = rJS(window), - rusha = new Rusha(); - - function generateHash(str) { - return rusha.digestFromString(str); - } + var gadget_klass = rJS(window); gadget_klass .setState({ ouline_list: "", - opml: "" + hosting_subscription: "" }) .ready(function (g) { g.props = {}; @@ -45,22 +40,23 @@ len = result.data.total_rows; for (i = 0; i < len; i += 1) { if (result.data.rows[i].value.hasOwnProperty("date")) { - value = new Date(result.data.rows[i].value.date); result.data.rows[i].value.date = { - allow_empty_time: 0, - ampm_time_style: 0, - css_class: "date_field", - date_only: 0, - description: "The Date", - editable: 0, - hidden: 0, - hidden_day_is_last_day: 0, - "default": value.toUTCString(), - key: "date", - required: 0, - timezone_style: 0, - title: "Status Date", - type: "DateTimeField" + field_gadget_param: { + allow_empty_time: 0, + ampm_time_style: 0, + css_class: "date_field", + date_only: 0, + description: "The Date", + editable: 0, + hidden: 0, + hidden_day_is_last_day: 0, + "default": result.data.rows[i].value.date, + key: "date", + required: 0, + timezone_style: 1, + title: "Status Date", + type: "DateTimeField" + } }; result.data.rows[i].value["listbox_uid:list"] = { key: "listbox_uid:list", @@ -70,14 +66,16 @@ if (result.data.rows[i].value.hasOwnProperty("status")) { value = result.data.rows[i].value.status; result.data.rows[i].value.status = { - css_class: "", - description: "The Status", - hidden: 0, - "default": value, - key: "status", - url: "gadget_erp5_field_status.html", - title: "Status", - type: "GadgetField" + field_gadget_param: { + css_class: "", + description: "The Status", + hidden: 0, + "default": value, + key: "status", + url: "gadget_erp5_field_status.html", + title: "Status", + type: "GadgetField" + } }; result.data.rows[i].value["listbox_uid:list"] = { key: "listbox_uid:list", @@ -95,15 +93,21 @@ title: 'Hosting Subscriptions View' }) .push(function () { - return gadget.jio_get(options.opml_key); + return gadget.jio_get(options.jio_key); + }) + .push(function (hosting_doc) { + return gadget.changeState({hosting_subscription: hosting_doc}); + }) + .push(function () { + return gadget.jio_get(gadget.state.hosting_subscription.opml_url); }) .push(function (opml_doc) { return gadget.changeState({opml: opml_doc}); }) .push(function () { return gadget.jio_allDocs({ - query: '(portal_type:"opml-outline") AND (parent_id:"' + - generateHash(options.opml_key) + '")' + query: '(portal_type:"Opml Outline") AND (parent_id:"' + + options.jio_key + '")' }); }) .push(function (ouline_list) { @@ -186,6 +190,12 @@ } for (i = 0; i < gadget.state.instance_dict.data.total_rows; i += 1) { + if (gadget.state.instance_dict.data.rows[i] + .value.aggregate_reference === undefined) { + // Instance is not Synchronized! + promise_list.push(false); + continue; + } gadget_element = document.createElement("div"); element.appendChild(gadget_element); promise_list.push( @@ -201,17 +211,19 @@ .push(function (parameter_gadget_list) { var i, promise_list = []; + gadget.props.parameter_form_list = parameter_gadget_list; for (i = 0; i < parameter_gadget_list.length; i += 1) { - gadget.props.parameter_form_list = parameter_gadget_list; - promise_list.push( - parameter_gadget_list[i].render({ - url: gadget.state.instance_dict.data.rows[i].value._links.private_url.href - .replace('jio_private', 'private') + '/config', - basic_login: gadget.state.opml.basic_login, - title: "Parameters " + gadget.state.instance_dict.data.rows[i].value.title, - parameters: gadget.state.instance_dict.data.rows[i].value.parameters - }) - ); + if (parameter_gadget_list[i]) { + promise_list.push( + parameter_gadget_list[i].render({ + url: gadget.state.instance_dict.data.rows[i].value._links.private_url.href + .replace('jio_private', 'private') + '/config', + basic_login: gadget.state.opml.basic_login, + title: "Parameters " + gadget.state.instance_dict.data.rows[i].value.title, + parameters: gadget.state.instance_dict.data.rows[i].value.parameters + }) + ); + } } return RSVP.all(promise_list); }); @@ -224,11 +236,12 @@ var column_list = [ ['title', 'Instance Title'], ['date', 'Status Date'], + ['aggregate_reference', 'Computer'], ['status', 'Status'] ], j, key_list = [], - instance_query = '(portal_type:"global")'; + instance_query = '(portal_type:"Software Instance")'; if (gadget.state.ouline_list.length === 0) { return; @@ -279,27 +292,27 @@ gadget.getUrlFor({command: 'history_previous'}), gadget.getUrlFor({command: 'store_and_change', options: { page: "ojsm_jump", - jio_key: gadget.state.opml.url, - title: gadget.state.opml.title, + jio_key: gadget.state.hosting_subscription.opml_url, + title: gadget.state.hosting_subscription.title, view_title: "Related OPML", search_page: "ojsm_status_list" }}) ]); }) .push(function (url_list) { - if (gadget.state.ouline_list.length === 0) { + if (gadget.state.hosting_subscription.instance_amount === 0) { gadget.element.querySelector('.hosting-title').textContent = - gadget.state.opml.title + " - Not synchronized!"; + gadget.state.hosting_subscription.title + " - Not synchronized!"; return gadget.updateHeader({ - page_title: "Hosting Subscription: " + gadget.state.opml.title, + page_title: "Hosting Subscription: " + gadget.state.hosting_subscription.title, selection_url: url_list[0], jump_url: url_list[1] }); } gadget.element.querySelector('.hosting-title').textContent = - gadget.state.opml.title; + gadget.state.hosting_subscription.title; return gadget.updateHeader({ - page_title: "Hosting Subscription: " + gadget.state.opml.title, + page_title: "Hosting Subscription: " + gadget.state.hosting_subscription.title, selection_url: url_list[0], jump_url: url_list[1], save_action: true @@ -307,4 +320,4 @@ }); }); -}(window, rJS, document, RSVP, Rusha, escape)); \ No newline at end of file +}(window, rJS, document, RSVP, escape)); \ No newline at end of file diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_hosting_subscription_view_js.xml b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_jio_hosting_subscription_view_js.xml similarity index 97% rename from bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_hosting_subscription_view_js.xml rename to bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_jio_hosting_subscription_view_js.xml index 509bc318194b9014aecbabf256c4a618b3c06275..c07ed56bc1d063fe7091bbe1a859f2ca2d7a2bd7 100644 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_hosting_subscription_view_js.xml +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_jio_hosting_subscription_view_js.xml @@ -83,7 +83,7 @@ default_reference - gadget_erp5_page_ojsm_hosting_subscription_view.js + gadget_officejs_jio_hosting_subscription_view.js description @@ -93,7 +93,7 @@ id - gadget_erp5_page_ojsm_hosting_subscription_view_js + gadget_officejs_jio_hosting_subscription_view_js language @@ -242,7 +242,7 @@ serial - 963.27984.14453.52343 + 972.4007.38246.25361 state @@ -260,7 +260,7 @@ - 1510586789.54 + 1543845609.21 UTC diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_jio_opml_view_js.js b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_jio_opml_view_js.js index 8c318cdbda3d6517650b5067ce2db140cc58a2ef..a48a1ec3166edd244997497c001d5404a0315c03 100644 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_jio_opml_view_js.js +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_jio_opml_view_js.js @@ -1,15 +1,16 @@ /*global window, rJS, RSVP, Handlebars */ /*jslint nomen: true, indent: 2, maxerr: 3 */ -(function (window, rJS, RSVP) { +(function (window, rJS, RSVP, Rusha) { "use strict"; + var rusha = new Rusha(); + rJS(window) ///////////////////////////////////////////////////////////////// // Acquired methods ///////////////////////////////////////////////////////////////// .declareAcquiredMethod("updateHeader", "updateHeader") .declareAcquiredMethod("getUrlFor", "getUrlFor") - .declareAcquiredMethod("redirect", "redirect") .declareAcquiredMethod("notifySubmitting", "notifySubmitting") .declareAcquiredMethod("notifySubmitted", 'notifySubmitted') @@ -39,6 +40,8 @@ doc.confirm_new_password = doc.new_password; doc.password = gadget.state.password; doc.verify_password = 1; + } else { + doc.verify_password = (doc.verify_password === "on") ? 1 : 0; } return opml_gadget.checkOPMLForm(doc); }) @@ -46,24 +49,26 @@ if (state) { return gadget.notifySubmitting() .push(function () { + var verify_opml = doc.title === "" || doc.title === undefined || + doc.verify_password === 1; + if (gadget.state.active === false && doc.active === "on") { + verify_opml = true; + } doc.title = gadget.state.opml_title; - return opml_gadget.saveOPML( - doc, - doc.title === "" || doc.title === undefined || doc.verify_password === 1 - ); + return opml_gadget.saveOPML(doc, verify_opml); }) - .push(function (status) { + .push(function (state) { var msg = {message: 'Document Updated', status: 'success'}; - if (!status) { + if (!state.status) { msg = {message: 'Document update failed', status: "error"}; } return RSVP.all([ gadget.notifySubmitted(msg), - status + state ]); }) .push(function (result) { - if (result[1]) { + if (result[1].status) { return gadget.changeState({ "password": doc.password }); @@ -85,7 +90,8 @@ return gadget.changeState({ "opml_title": doc.title || "", "opml_key": options.jio_key, - "password": doc.password + "password": doc.password, + "active": doc.active }); }) .push(function () { @@ -141,6 +147,17 @@ "hidden": 0, "type": "PasswordField" }, + "my_requested_state": { + "description": "Hosting subscription state", + "title": "Requested State", + "default": doc.state || (doc.active ? "Started" : "Stopped"), + "css_class": "", + "required": 1, + "editable": 0, + "key": "state", + "hidden": 0, + "type": "StringField" + }, "my_active": { "description": "Sync this opml or not", "title": "Active (Enable Sync)", @@ -186,7 +203,7 @@ group_list: [[ "left", [["my_title"], ["my_url"], ["my_username"], ["my_password"], - ["my_active"], ["my_verify_password"], + ["my_requested_state"], ["my_active"], ["my_verify_password"], ["my_new_password"]] ]] } @@ -195,17 +212,16 @@ .push(function () { return new RSVP.Queue() .push(function () { + var hosting_key = rusha.digestFromString(gadget.state.opml_key); return RSVP.all([ gadget.getUrlFor({command: 'history_previous'}), gadget.getUrlFor({command: 'selection_previous'}), gadget.getUrlFor({command: 'selection_next'}), gadget.getUrlFor({command: 'push_history', options: { page: "ojsm_jump", - jio_key: gadget.state.opml_key, + jio_key: hosting_key, title: gadget.state.opml_title, - jump_page: "ojsm_hosting_subscription_view", - view_title: "Related Hosting Subscription", - opml_key: gadget.state.opml_key + view_title: "Related Hosting Subscription" }}), gadget.getUrlFor({command: 'change', options: { page: 'ojsm_opml_delete', @@ -227,4 +243,4 @@ }); }); }); -}(window, rJS, RSVP)); +}(window, rJS, RSVP, Rusha)); diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_jio_opml_view_js.xml b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_jio_opml_view_js.xml index e3e892c0ec07526db0d5c56bf45baa3df1ee0406..bcc8d95f7300bbacd6f07590afdc84b43b08297f 100644 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_jio_opml_view_js.xml +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_jio_opml_view_js.xml @@ -250,7 +250,7 @@ serial - 963.29546.42896.22118 + 971.63925.15236.1962 state @@ -268,7 +268,7 @@ - 1510680193.17 + 1543595657.95 UTC diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_jio_promise_view_js.js b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_jio_promise_view_js.js index b8f5634a06f427aa140c4762809ca81b62c1e266..8a90bcb10769f11fc3e64bdbe1c7296cd165bcc4 100644 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_jio_promise_view_js.js +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_jio_promise_view_js.js @@ -113,9 +113,14 @@ "portal_type", "_links", "_embedded", - "reference" + "reference", + "aggregate_reference", + "ipv6", + "ipv4", + "partition_id", + "software_release" ], - query: '(portal_type:"global") AND (parent_id:"' + + query: '(portal_type:"Software Instance") AND (parent_id:"' + options.doc.parent_id + '")' }); }) @@ -129,14 +134,13 @@ }) .push(function (outline_doc) { // get opml - return gadget.jio_get(outline_doc.parent_url); + return RSVP.all([outline_doc.parent_id, + gadget.jio_get(outline_doc.parent_url)]); }) - .push(function (opml_document) { - opml_doc = opml_document; + .push(function (document_list) { + opml_doc = document_list[1]; return gadget.getUrlFor({command: 'push_history', options: { - jio_key: options.doc.reference, - page: 'ojsm_hosting_subscription_view', - opml_key: opml_document.url + jio_key: document_list[0] }}); }) .push(function (hosting_url) { @@ -148,6 +152,13 @@ public_url: {href: ""}}, _embedded: {instance: {}}}; } + if (software_instance._embedded !== undefined && + software_instance._embedded.hasOwnProperty('instance')) { + software_instance.ipv6 = software_instance._embedded.instance.ipv6; + software_instance.ipv4 = software_instance._embedded.instance.ipv4; + software_instance.partition_id = software_instance._embedded.instance.partition; + software_instance.software_release = software_instance._embedded.instance['software-release']; + } // fix URLs software_instance._links.private_url.href = software_instance ._links.private_url.href.replace("jio_private", "private"); @@ -161,8 +172,8 @@ promise: options.doc, jio_key: options.jio_key, status: options.doc.category, - status_date: new Date(options.doc.pubDate), - report_date: new Date(options.doc.lastBuildDate), + status_date: options.doc.pubDate, + report_date: options.doc.lastBuildDate, title: options.doc.source, promise_output: options.doc.description, private_url: pass_url, @@ -171,10 +182,11 @@ instance_title: software_instance.title, hosting_title: opml_doc.title, hosting_url: hosting_url, - partition_ipv6: software_instance._embedded.instance.ipv6, - computer_partition: software_instance._embedded.instance.partition, - computer_reference: software_instance._embedded.instance.computer, - software_release: software_instance._embedded.instance['software-release'] + partition_ipv6: software_instance.ipv6, + partition_ipv4: software_instance.ipv4, + computer_partition: software_instance.partition_id, + computer_reference: software_instance.aggregate_reference, + software_release: software_instance.software_release }); }); }) @@ -198,6 +210,9 @@ gadget.state.promise.source + ".history" ) .push(undefined, function (error) { + if (error.name === "cancel") { + return undefined; + } return gadget.notifySubmitted({ status: "error", message: "Failed to get promise history content! \n" + @@ -210,9 +225,14 @@ .push(function (status_history) { var i, len, - start, - //lines, - message; + start; + + function addUTCTimezone(date_string) { + if (new RegExp(/[+-][\d]{2}\:?[\d]{2}$/).test(date_string)) { + return date_string; + } + return date_string + "+0000"; + } if (status_history && status_history.hasOwnProperty('data')) { // the status history list is reversed ([old, ...., newest]) @@ -226,57 +246,61 @@ // lines = len - start; //} for (i = start; i >= 0; i -= 1) { - message = status_history.data[i].message.slice(0, 60); - if (message.length >= 60) { - message += "..."; - } result.data.total_rows += 1; result.data.rows.push({ value: { status: { - css_class: "", - description: "The Status", - hidden: 0, - "default": status_history.data[i].status, - key: "status", - url: "gadget_erp5_field_status.html", - title: "Status", - type: "GadgetField" + field_gadget_param: { + css_class: "", + description: "The Status", + hidden: 0, + "default": status_history.data[i].status, + key: "status", + url: "gadget_erp5_field_status.html", + title: "Status", + type: "GadgetField" + } }, start_date: { - allow_empty_time: 0, - ampm_time_style: 0, - css_class: "date_field", - date_only: 0, - description: "The Date", - editable: 0, - hidden: 0, - hidden_day_is_last_day: 0, - "default": new Date(status_history.data[i]['start-date']).toUTCString(), - key: "start_date", - required: 0, - timezone_style: 0, - title: "Date", - type: "DateTimeField" + field_gadget_param: { + allow_empty_time: 0, + ampm_time_style: 0, + css_class: "date_field", + date_only: 0, + description: "The Date", + editable: 0, + hidden: 0, + hidden_day_is_last_day: 0, + "default": addUTCTimezone(status_history.data[i].date || + status_history.data[i]['start-date']), + key: "start_date", + required: 0, + timezone_style: 1, + title: "Date", + type: "DateTimeField" + } }, change_date: { - allow_empty_time: 0, - ampm_time_style: 0, - css_class: "date_field", - date_only: 0, - description: "The Date", - editable: 0, - hidden: 0, - hidden_day_is_last_day: 0, - "default": new Date(status_history.data[i]['change-time'] * 1000) - .toUTCString(), - key: "change_date", - required: 0, - timezone_style: 0, - title: "Status Date", - type: "DateTimeField" + field_gadget_param: { + allow_empty_time: 0, + ampm_time_style: 0, + css_class: "date_field", + date_only: 0, + description: "The Date", + editable: 0, + hidden: 0, + hidden_day_is_last_day: 0, + "default": addUTCTimezone(status_history.data[i]['change-date'] || + new Date(status_history.data[i]['change-time'] * 1000) + .toUTCString()), + key: "change_date", + required: 0, + timezone_style: 1, + title: "Status Date", + type: "DateTimeField" + } }, - message: message, + message: status_history.data[i].message, "listbox_uid:list": { key: "listbox_uid:list", value: 2713 @@ -301,10 +325,10 @@ }) .push(function (form_gadget) { var column_list = [ + ['status', 'Status'], ['start_date', 'Report Date'], - ['change_date', 'Last Change'], - ['message', 'Promise Output'], - ['status', 'Status'] + ['change_date', 'Status Date'], + ['message', 'Promise Output'] ]; return form_gadget.render({ erp5_document: { @@ -335,26 +359,26 @@ "your_status_date": { "description": "", "title": "Status Since", - "default": gadget.state.status_date.toUTCString(), + "default": gadget.state.status_date, "css_class": "", "required": 0, "editable": 0, "key": "status_date", "hidden": 0, - "timezone_style": 0, + "timezone_style": 1, "date_only": 0, "type": "DateTimeField" }, "your_report_date": { "description": "", "title": "Report Date", - "default": gadget.state.report_date.toUTCString(), + "default": gadget.state.report_date, "css_class": "", "required": 0, "editable": 0, "key": "report_date", "hidden": 0, - "timezone_style": 0, + "timezone_style": 1, "date_only": 0, "type": "DateTimeField" }, @@ -434,7 +458,7 @@ "title": "Software Instance", "default": [gadget.state.instance_title], "query": "urn:jio:allDocs?query=%28portal_type%3A%22" + - "opml-outline" + "%22%29AND%28reference%3A%22" + + "Opml Outline" + "%22%29AND%28reference%3A%22" + gadget.state.instance_reference + "%22%29", "css_class": "", "required": 0, @@ -444,6 +468,7 @@ "view": "view", "allow_jump": true, "allow_creation": false, + "sort": [], "relation_item_relative_url": [gadget.state.instance_reference], "type": "RelationStringField" }, diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_jio_promise_view_js.xml b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_jio_promise_view_js.xml index 96d348296acfb9e1f6d15c7e269a16d4a04760f2..f201034603c24dda09ff532d8caf9ac3b2615dbb 100644 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_jio_promise_view_js.xml +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_jio_promise_view_js.xml @@ -250,7 +250,7 @@ serial - 963.29333.34848.27204 + 971.63542.55851.49134 state @@ -268,7 +268,7 @@ - 1510666984.34 + 1543572898.71 UTC diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_jio_global_view_html.html b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_jio_software_instance_view_html.html similarity index 81% rename from bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_jio_global_view_html.html rename to bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_jio_software_instance_view_html.html index d592b30208a02bcbfaaf49ee45dcf71a51ac00ed..cc202a79cef57cdc18b1acf68569d8cd1cb0a172 100644 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_jio_global_view_html.html +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_jio_software_instance_view_html.html @@ -15,11 +15,10 @@ {{title}} - + -
diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_jio_global_view_html.xml b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_jio_software_instance_view_html.xml similarity index 97% rename from bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_jio_global_view_html.xml rename to bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_jio_software_instance_view_html.xml index 3c8244f66153d717856c52a495d0e56c23ca249b..a1880d2bb080dbe4034ed04a5b6958115d664624 100644 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_jio_global_view_html.xml +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_jio_software_instance_view_html.xml @@ -83,7 +83,7 @@ default_reference - gadget_officejs_jio_global_view.html + gadget_officejs_jio_software_instance_view.html description @@ -93,7 +93,7 @@ id - gadget_officejs_jio_global_view_html + gadget_officejs_jio_software_instance_view_html language @@ -250,7 +250,7 @@ serial - 962.47216.7271.9574 + 963.33703.45054.40584 state @@ -268,7 +268,7 @@ - 1507901938.7 + 1514370578.19 UTC diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_jio_global_view_js.js b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_jio_software_instance_view_js.js similarity index 61% rename from bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_jio_global_view_js.js rename to bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_jio_software_instance_view_js.js index 5a0492e894ecdcb2a080f530d53c8a37c0b82eb9..6912273b1bcca7761eb11f7cf3ea31ed8eb8c9e3 100644 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_jio_global_view_js.js +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_jio_software_instance_view_js.js @@ -1,6 +1,6 @@ -/*global window, rJS, RSVP, Handlebars */ +/*global window, rJS, RSVP, Handlebars, atob */ /*jslint nomen: true, indent: 2, maxerr: 3 */ -(function (window, rJS, RSVP, Handlebars) { +(function (window, rJS, RSVP, Handlebars, atob) { "use strict"; var gadget_klass = rJS(window), @@ -10,18 +10,11 @@ link_template = Handlebars.compile(source); gadget_klass .setState({ - jio_gadget: "", instance: "", opml: "", opml_outline: "", graph_value: {} }) - .ready(function (gadget) { - return gadget.getDeclaredGadget("jio_gadget") - .push(function (jio_gadget) { - return gadget.changeState({"jio_gadget": jio_gadget}); - }); - }) ///////////////////////////////////////////////////////////////// // Acquired methods ///////////////////////////////////////////////////////////////// @@ -30,8 +23,6 @@ .declareAcquiredMethod("getUrlFor", "getUrlFor") .declareAcquiredMethod("jio_get", "jio_get") .declareAcquiredMethod("jio_allDocs", "jio_allDocs") - .declareAcquiredMethod("notifySubmitting", "notifySubmitting") - .declareAcquiredMethod("notifySubmitted", 'notifySubmitted') .declareAcquiredMethod("translateHtml", "translateHtml") .declareAcquiredMethod("redirect", "redirect") ///////////////////////////////////////////////////////////////// @@ -39,11 +30,7 @@ ///////////////////////////////////////////////////////////////// .declareMethod("render", function (options) { - var gadget = this, - hosting_subscription, - software_instance, - opml_outline, - opml_doc; + var gadget = this; return new RSVP.Queue() .push(function () { @@ -66,16 +53,6 @@ opml: opml_doc }); }) - .push(function () { - return gadget.state.jio_gadget.createJio({ - type: "webhttp", - // XXX fix of url - url: gadget.state.instance._links.private_url.href - .replace("jio_private", "private") + - 'documents/', - basic_login: gadget.state.opml.basic_login - }); - }) .push(function () { return gadget.getUrlFor({command: 'push_history', options: { jio_key: options.doc.reference, @@ -87,35 +64,49 @@ var pass_url, public_url, private_url, + rss_url, current_document = gadget.state.instance; + if (current_document._embedded !== undefined && + current_document._embedded.hasOwnProperty('instance')) { + current_document.ipv6 = current_document._embedded.instance.ipv6; + current_document.ipv4 = current_document._embedded.instance.ipv4; + current_document.partition_id = current_document._embedded.instance.partition; + current_document.software_release = current_document._embedded.instance['software-release']; + } // fix URLs - private_url = gadget.state.instance._links - .private_url.href.replace("jio_private", "private"); - public_url = gadget.state.instance._links. - public_url.href.replace("jio_public", "public"); - pass_url = "https://" + atob(gadget.state.opml.basic_login) + - "@" + private_url.split("//")[1]; + if (gadget.state.instance._links !== undefined) { + private_url = gadget.state.instance._links + .private_url.href.replace("jio_private", "private"); + public_url = gadget.state.instance._links + .public_url.href.replace("jio_public", "public"); + pass_url = "https://" + atob(gadget.state.opml.basic_login) + + "@" + private_url.split("//")[1]; + rss_url = current_document._links.rss_url.href; + } + if (gadget.state.instance.state === undefined) { + current_document.state = {error: "", success: ""}; + } return gadget.changeState({ jio_key: options.jio_key, status: gadget.state.instance.status, - report_date: new Date(gadget.state.instance.date), + report_date: gadget.state.instance.date, title: current_document.title, error: current_document.state.error, success: current_document.state.success, public_url: public_url, private_url: pass_url, - rss_url: current_document._links.rss_url.href, + rss_url: rss_url, //resource_url: tmp_url, //process_url: tmp_process_url, hosting_title: gadget.state.opml.title, hosting_url: hosting_url, - partition_ipv6: current_document._embedded.instance.ipv6, - partition_ipv4: current_document._embedded.instance.ipv4, - computer_partition: current_document._embedded.instance.partition, - computer_reference: current_document._embedded.instance.computer, - software_release: current_document._embedded.instance['software-release'] + partition_ipv6: current_document.ipv6, + partition_ipv4: current_document.ipv4, + computer_partition: current_document.partition_id, + computer_reference: current_document.aggregate_reference, + software_release: current_document.software_release }); }); }) @@ -133,63 +124,60 @@ var gadget = this; return gadget.jio_allDocs(param_list[0]) .push(function (result) { - var i, value, len = result.data.total_rows; + var i, j, tmp, value, len = result.data.total_rows; for (i = 0; i < len; i += 1) { if (result.data.rows[i].value.hasOwnProperty("lastBuildDate")) { - value = new Date(result.data.rows[i].value.lastBuildDate); result.data.rows[i].value.lastBuildDate = { - allow_empty_time: 0, - ampm_time_style: 0, - css_class: "date_field", - date_only: 0, - description: "The Date", - editable: 0, - hidden: 0, - hidden_day_is_last_day: 0, - "default": value.toUTCString(), - key: "lastBuildDate", - required: 0, - timezone_style: 0, - title: "Promise Date", - type: "DateTimeField" + field_gadget_param: { + allow_empty_time: 0, + ampm_time_style: 0, + css_class: "date_field", + date_only: 0, + description: "The Date", + editable: 0, + hidden: 0, + hidden_day_is_last_day: 0, + "default": result.data.rows[i].value.lastBuildDate, + key: "lastBuildDate", + required: 0, + timezone_style: 1, + title: "Promise Date", + type: "DateTimeField" + } }; result.data.rows[i].value["listbox_uid:list"] = { key: "listbox_uid:list", value: 2713 }; } - if (result.data.rows[i].value.hasOwnProperty("comments")) { - value = result.data.rows[i].value.comments.slice(0, 30); - if (result.data.rows[i].value.comments.length >= 30) { - value += "..."; + if (result.data.rows[i].value.hasOwnProperty("description")) { + tmp = result.data.rows[i].value.description.split('\n'); + value = ""; + for (j = 1; j < tmp.length; j += 1) { + // first line of text is the date and status + if (!value && tmp[j].trim() !== "") { + value += tmp[j].slice(0, 80); + if (tmp[j].length >= 80 || j + 1 < tmp.length) { + // a part of text is not shown + value += "..."; + } + } } - result.data.rows[i].value.comments = { - css_class: "string_field", - description: "The Message", - editable: 0, - hidden: 0, - "default": value, - key: "comments", - required: 0, - title: "Message", - type: "StringField" - }; - result.data.rows[i].value["listbox_uid:list"] = { - key: "listbox_uid:list", - value: 2713 - }; + result.data.rows[i].value.description = value; } if (result.data.rows[i].value.hasOwnProperty("category")) { value = result.data.rows[i].value.category; result.data.rows[i].value.category = { - css_class: "", - description: "The Status", - hidden: 0, - "default": value, - key: "category", - url: "gadget_erp5_field_status.html", - title: "Status", - type: "GadgetField" + field_gadget_param: { + css_class: "", + description: "The Status", + hidden: 0, + "default": value, + key: "category", + url: "gadget_erp5_field_status.html", + title: "Status", + type: "GadgetField" + } }; result.data.rows[i].value["listbox_uid:list"] = { key: "listbox_uid:list", @@ -202,86 +190,97 @@ }) .onStateChange(function () { var gadget = this, - graph_value = {}; + graph_data; if (!gadget.state.hasOwnProperty('status') && !gadget.state.hasOwnProperty('title')) { return; } return new RSVP.Queue() .push(function () { - // Move this to not slow down the page rendering... - return gadget.state.jio_gadget.get( - gadget.state.instance.data.state - ) - .push(undefined, function (error) { - console.log(error); - return {}; - }) - .push(function (element_dict) { - var promise_data = [ - "Date, Success, Error, Warning", - new Date() + ",0,0,0" - ], - data = element_dict.data || promise_data, - data_list = [], - line_list, - i; + var graph_options = { + data_url: "", + data_filename: "monitor_state.data", + basic_login: "" + }; - data_list.push({ - value_dict: {"0": [], "1": []}, - type: "scatter", - axis_mapping_id_dict: {"1": "1_1"}, - title: "promises success" - }); - data_list.push({ - value_dict: {"0": [], "1": []}, - type: "scatter", - axis_mapping_id_dict: {"1": "1_2"}, - title: "promises error" - }); - for (i = 1; i < data.length; i += 1) { - line_list = data[i].split(','); - data_list[0].value_dict["0"].push(line_list[0]); - data_list[0].value_dict["1"].push(line_list[1]); - - // XXX repeating date entry - data_list[1].value_dict["0"].push(line_list[0]); - data_list[1].value_dict["1"].push(line_list[2]); - } - graph_value = { - data: data_list, - layout: { - axis_dict : { - "0": { - "title": "Success/Failure Progression", - "scale_type": "linear", - "value_type": "date" - }, - "1_1": { - "title": "Promises success", - "position": "right" - }, - "1_2": { - "title": "Promises error", - "position": "right" - } - }, - title: "Success/Failure Progression" - } - }; + if (gadget.state.instance._links !== undefined) { + graph_options = { + data_url: gadget.state.instance._links.private_url.href + + 'documents/', + data_filename: gadget.state.instance.data.state, + basic_login: gadget.state.opml.basic_login + }; + } + + graph_options.extract_method = function (element_dict) { + var promise_data = [ + "Date, Success, Error", + new Date() + ",0,0" + ], + data = element_dict.data || promise_data, + data_list = [], + line_list, + i; + + data_list.push({ + value_dict: {"0": [], "1": []}, + type: "scatter", + axis_mapping_id_dict: {"1": "1_1"}, + title: "promises success" + }); + data_list.push({ + value_dict: {"0": [], "1": []}, + type: "scatter", + axis_mapping_id_dict: {"1": "1_2"}, + title: "promises error" }); + for (i = 1; i < data.length; i += 1) { + line_list = data[i].split(','); + data_list[0].value_dict["0"].push(line_list[0]); + data_list[0].value_dict["1"].push(line_list[1]); + + // XXX repeating date entry + data_list[1].value_dict["0"].push(line_list[0]); + data_list[1].value_dict["1"].push(line_list[2]); + } + return data_list; + }; + graph_options.data_dict = { + data: {}, + layout: { + axis_dict : { + "0": { + "title": "Promises Failure Progression", + "scale_type": "linear", + "value_type": "date" + }, + "1_1": { + "title": "Promises success", + "position": "right" + }, + "1_2": { + "title": "Promises error", + "position": "right" + } + }, + title: "Promises Failure Progression" + } + }; + return graph_options; }) - .push(function () { + .push(function (g) { + graph_data = g; //gadget.element.querySelector('.template-view').innerHTML = html; return gadget.getDeclaredGadget('form_view'); }) .push(function (form_gadget) { var column_list = [ - ['source', 'Promise'], - ['lastBuildDate', 'Promise Date'], - ['comments', 'Message'], - ['category', 'Status'] - ]; + ['category', 'Status'], + ['source', 'Promise'], + ['lastBuildDate', 'Promise Date'], + ['description', 'Message'] + ], + hide_link = (gadget.state.instance._links === undefined) ? 1 : 0; return form_gadget.render({ erp5_document: { "_embedded": {"_view": { @@ -311,13 +310,13 @@ "your_report_date": { "description": "", "title": "Report Date", - "default": gadget.state.report_date.toUTCString(), + "default": gadget.state.report_date, "css_class": "", "required": 0, "editable": 0, "key": "report_date", "hidden": 0, - "timezone_style": 0, + "timezone_style": 1, "date_only": 0, "type": "DateTimeField" }, @@ -333,7 +332,7 @@ "required": 0, "editable": 0, "key": "public_url", - "hidden": 0, + "hidden": hide_link, "type": "EditorField" }, "your_private_url": { @@ -348,13 +347,13 @@ "required": 0, "editable": 0, "key": "private_url", - "hidden": 0, + "hidden": hide_link, "type": "EditorField" }, "your_error_count": { "description": "", "title": "Promises Error", - "default": "" + gadget.state.error, + "default": String(gadget.state.error), "css_class": "", "required": 0, "editable": 0, @@ -365,7 +364,7 @@ "your_success_count": { "description": "", "title": "Promises OK", - "default": "" + gadget.state.success, + "default": String(gadget.state.success), "css_class": "", "required": 0, "editable": 0, @@ -385,7 +384,7 @@ "required": 0, "editable": 0, "key": "software_release_url", - "hidden": 0, + "hidden": hide_link, "type": "EditorField" }, "your_rss_url": { @@ -400,7 +399,7 @@ "required": 0, "editable": 0, "key": "rss_url", - "hidden": 0, + "hidden": hide_link, "type": "EditorField" }, "your_hosting_title": { @@ -482,15 +481,15 @@ "type": "ListBox" }, "your_graph_status": { - css_class: "no_label", - description: "The Graph Status", - hidden: 0, - "default": graph_value || {}, - key: "graph_status", - url: "gadget_field_graph_dygraph.html", - title: "", - type: "GadgetField" - } + css_class: "no_label", + description: "The Graph Status", + hidden: 0, + "default": graph_data, + key: "graph_status", + url: "gadget_ojsm_graph_field.html", + title: "", + type: "GadgetField" + } }}, "_links": { "type": { @@ -500,25 +499,34 @@ } }, form_definition: { - group_list: [[ - "left", - [["your_title"], ["your_status"], ["your_status_date"], ["your_report_date"], - ["your_error_count"], ["your_success_count"], ["your_public_url"], ["your_private_url"]] - ], - [ - "right", - [["your_hosting_title"], ["your_instance_title"], ["your_computer_reference"], ["your_computer_partition"], - ["your_partition_ipv4"], ["your_partition_ipv6"], ["your_software_release_url"], - ["your_rss_url"]] - ], - [ - "center", - [["your_graph_status"]] - ], - [ - "bottom", - [["your_instance_promise_list"]] - ]] + group_list: [ + [ + "left", + [ + ["your_title"], ["your_status"], ["your_status_date"], + ["your_report_date"], ["your_error_count"], + ["your_success_count"], ["your_public_url"], + ["your_private_url"] + ] + ], + [ + "right", + [ + ["your_hosting_title"], ["your_instance_title"], + ["your_computer_reference"], ["your_computer_partition"], + ["your_partition_ipv4"], ["your_partition_ipv6"], + ["your_software_release_url"], ["your_rss_url"] + ] + ], + [ + "center", + [["your_graph_status"]] + ], + [ + "bottom", + [["your_instance_promise_list"]] + ] + ] } }); }) @@ -538,15 +546,18 @@ ]); }) .push(function (url_list) { - return gadget.updateHeader({ - page_title: "Instance: " + gadget.state.title, - selection_url: url_list[0], - previous_url: url_list[1], - next_url: url_list[2], - resources_url: url_list[3], - processes_url: url_list[4], - refresh_action: true - }); + var options = { + page_title: "Instance: " + gadget.state.title, + selection_url: url_list[0], + previous_url: url_list[1], + next_url: url_list[2], + refresh_action: true + }; + if (gadget.state.instance._links !== undefined) { + options.resources_url = url_list[3]; + options.processes_url = url_list[4]; + } + return gadget.updateHeader(options); }); }); -}(window, rJS, RSVP, Handlebars)); +}(window, rJS, RSVP, Handlebars, atob)); diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_jio_global_view_js.xml b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_jio_software_instance_view_js.xml similarity index 97% rename from bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_jio_global_view_js.xml rename to bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_jio_software_instance_view_js.xml index 47bf5644689c0d1bd2d492594bd4f6130674dc8c..dfaabc9b036d77ae51f503664619c6b40e892e3c 100644 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_jio_global_view_js.xml +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_jio_software_instance_view_js.xml @@ -83,7 +83,7 @@ default_reference - gadget_officejs_jio_global_view.js + gadget_officejs_jio_software_instance_view.js description @@ -93,7 +93,7 @@ id - gadget_officejs_jio_global_view_js + gadget_officejs_jio_software_instance_view_js language @@ -250,7 +250,7 @@ serial - 962.48890.59022.44748 + 972.4061.47106.61696 state @@ -268,7 +268,7 @@ - 1508949714.27 + 1543848850.64 UTC diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_monitoring_appcache.xml b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_monitoring_appcache.xml index 01d652163f1053efa609efb26193621cddf24deb..635085fa2bc062bb9cbc1530c582b315767a9941 100644 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_monitoring_appcache.xml +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_monitoring_appcache.xml @@ -108,7 +108,7 @@ text_content CACHE MANIFEST\n -# generated on Fri, 15 Nov 2017 15:47:33 +0000\n +# generated on Fri, 19 Nov 2018 12:54:57 +0000\n # XXX + fonts\n # images/ajax-loader.gif\n CACHE:\n @@ -149,6 +149,8 @@ gadget_erp5_router.html\n gadget_erp5_router.js\n gadget_html5_input.html\n gadget_html5_input.js\n +gadget_erp5_configure_editor.html\n +gadget_erp5_configure_editor.js\n gadget_erp5_searchfield.html\n gadget_erp5_searchfield.js\n gadget_erp5_pt_form_list.html\n @@ -205,9 +207,9 @@ gadget_erp5_page_ojsm_hosting_subscription_list.html\n gadget_officejs_monitoring_parameter_view.html\n gadget_erp5_page_settings_configurator.html\n gadget_erp5_page_ojsm_processes_view.html\n -gadget_erp5_page_ojsm_hosting_subscription_view.html\n +gadget_officejs_jio_hosting_subscription_view.html\n gadget_officejs_monitoring_sync.html\n -gadget_officejs_jio_global_view.html\n +gadget_officejs_jio_software_instance_view.html\n gadget_erp5_page_ojsm_software_instance_list.html\n gadget_officejs_monitoring_router.html\n gadget_officejs_jio_promise_view.html\n @@ -223,6 +225,8 @@ gadget_erp5_page_ojsm_synchronize.html\n gadget_erp5_page_ojsm_erp5_configurator.html\n gadget_erp5_page_ojsm_jump.html\n gadget_officejs_monitoring_opml_edit.html\n +gadget_erp5_page_ojsm_dispatch.html\n +gadget_ojsm_graph_field.html\n \n # monitoring js\n gadget_officejs_monitoring_jio.js\n @@ -231,13 +235,12 @@ gadget_officejs_monitoring_parameter_view.js\n gadget_erp5_page_settings_configurator.js\n gadget_erp5_page_ojsm_processes_view.js\n gadget_officejs_monitoring_custom.css\n -gadget_erp5_page_ojsm_hosting_subscription_view.js\n -gadget_global.js\n +gadget_officejs_jio_hosting_subscription_view.js\n gadget_erp5_global.js\n gadget_officejs_monitoring_sync.js\n gadget_erp5_page_ojsm_software_instance_list.js\n gadget_officejs_monitoring_panel.js\n -gadget_officejs_jio_global_view.js\n +gadget_officejs_jio_software_instance_view.js\n gadget_erp5_page_ojsm_import_export.js\n gadget_erp5_page_ojsm_resources_view.js\n gadget_officejs_jio_promise_view.js\n @@ -250,6 +253,8 @@ gadget_erp5_page_ojsm_synchronize.js\n gadget_erp5_page_ojsm_jump.js\n gadget_erp5_page_ojsm_erp5_configurator.js\n gadget_officejs_monitoring_opml_edit.js\n +gadget_erp5_page_ojsm_dispatch.js\n +gadget_ojsm_graph_field.js\n \n # erp5_web_renderjs_ui\n gadget_erp5_editor_panel.html\n @@ -384,7 +389,7 @@ NETWORK:\n serial - 963.30985.26464.16281 + 972.4099.58600.53947 state @@ -402,7 +407,7 @@ NETWORK:\n - 1510766013.21 + 1543855489.22 UTC diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_monitoring_custom_css.css b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_monitoring_custom_css.css index aea7ca308d43e438e2a9200a4fad0ccfa7ec6348..bcbdfcab314456b9e52ebbbfcd43e983440da430 100644 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_monitoring_custom_css.css +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_monitoring_custom_css.css @@ -363,3 +363,11 @@ margin-top: 5px; background-color: #af441a; opacity: 0.5; } + +.search-result { + font-size: 130%; + color: #517286; + padding: 20px 10px; + margin: 30px 25px 10px 0; + border-top: 1px solid #dedede; +} \ No newline at end of file diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_monitoring_custom_css.xml b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_monitoring_custom_css.xml index 594e331eec94194efed0fbbeb001a4dbd24a9b4d..84f5df3094586913c642299560eba626c5f453f6 100644 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_monitoring_custom_css.xml +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_monitoring_custom_css.xml @@ -239,7 +239,7 @@ serial - 962.57554.52005.49783 + 971.43784.34275.28586 state @@ -257,7 +257,7 @@ - 1508428094.57 + 1542388521.4 UTC diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_monitoring_header_html.html b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_monitoring_header_html.html index f1c8643908adcbe9bfceee8b0efae0eccdbeacf0..644a096c6d2fccf7e509927625599c9b4a039226 100644 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_monitoring_header_html.html +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_monitoring_header_html.html @@ -25,7 +25,7 @@ data-i18n=Loading --> - + ERP5 Header diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_monitoring_header_js.xml b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_monitoring_header_js.xml index 08fc0ce8631aa3805a25341aa30dee5ce9813d93..f7d0eecf12cb023220a7c485b904a0cd67255d16 100644 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_monitoring_header_js.xml +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_monitoring_header_js.xml @@ -242,7 +242,7 @@ serial - 962.38483.42476.54152 + 963.27666.8050.30907 state @@ -260,7 +260,7 @@ - 1507899173.02 + 1542277962.83 UTC diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_monitoring_jio_html.html b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_monitoring_jio_html.html index d755449d7407acd26db63006ee535cb0460100cd..434c121b5ae2646de4470bae70a1e7c77a163311 100644 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_monitoring_jio_html.html +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_monitoring_jio_html.html @@ -2,7 +2,7 @@ - + Jio Gadget diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_monitoring_jio_js.js b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_monitoring_jio_js.js index 1a8765fef43994306a4f640e3101b4f0ab93f8e4..f8f51db0c626c9cecf63ee93e7e204ef0497b036 100644 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_monitoring_jio_js.js +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_monitoring_jio_js.js @@ -18,6 +18,7 @@ type: "replicatedopml", remote_storage_unreachable_status: "WARNING", remote_opml_check_time_interval: 86400000, + request_timeout: 25000, // timeout is to 25 second local_sub_storage: { type: "query", sub_storage: { diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_monitoring_jio_js.xml b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_monitoring_jio_js.xml index 1249340b8b0c28acf5ffc24a74b318543b70d44e..cb95f6250fc8f642085e2d192bc6deb56645ac8d 100644 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_monitoring_jio_js.xml +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_monitoring_jio_js.xml @@ -239,7 +239,7 @@ serial - 962.48734.54444.887 + 964.14420.61705.7611 state @@ -257,7 +257,7 @@ - 1507899173.02 + 1513617981.41 UTC diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_monitoring_opml_edit_js.js b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_monitoring_opml_edit_js.js index 2cf97764009c2da3f19c2615c1cc61636daa28cf..7bd0fdd3fbc690d1e9960e386ff36220536c7d4d 100644 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_monitoring_opml_edit_js.js +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_monitoring_opml_edit_js.js @@ -1,6 +1,6 @@ -/*global window, rJS, RSVP, btoa, XMLHttpRequest, Handlebars */ +/*global window, rJS, RSVP, btoa, XMLHttpRequest, Handlebars, jIO */ /*jslint nomen: true, indent: 2, maxerr: 3*/ -(function (window, rJS, RSVP, btoa, XMLHttpRequest, Handlebars) { +(function (window, rJS, RSVP, btoa, XMLHttpRequest, Handlebars, jIO) { "use strict"; var gadget_klass = rJS(window), @@ -108,7 +108,7 @@ }); } - function checkCredential(url, title, hash) { + function checkCredential(url, title, hash, new_hash) { // Verify if login and password are correct for this URL if (url === undefined) { return {status: 'OK'}; @@ -122,6 +122,17 @@ msg: error.msg + ' (' + url + ')', title: title }; + if (new_hash !== undefined) { + // saved password is not valid + // check if inputted password is valid + return testUrl(url, new_hash) + .then(function () { + ko_msg.hash = new_hash; + return ko_msg; + }, function () { + return ko_msg; + }); + } return ko_msg; }); } @@ -135,9 +146,12 @@ basic_login: btoa(doc.username + ':' + doc.password), username: doc.username, password: doc.password, - active: (doc.active === 1) ? true : false + active: (doc.active === "on") ? true : false, + has_monitor: true, + state: doc.state || (doc.active === "on" ? "Started" : "Stopped") }, - update_password_list = []; + update_password_list = [], + allow_force = false; gadget.state.message.textContent = ""; function validateOPML() { @@ -152,7 +166,8 @@ attachment_id: 'enclosure', parser: 'opml', sub_storage: { - type: "http" + type: "http", + timeout: 25000 // timeout after 25 seconds } } }) @@ -162,25 +177,42 @@ }); }) .push(undefined, function (error) { + var message_text, + code = 0; + if (error instanceof jIO.util.jIOError) { + message_text = error.message; + code = error.status_code; + } else if (error instanceof TypeError || error.message) { + message_text = error.message; + } else { + code = error.target.status; + message_text = error.target.responseType === "text" ? + error.target.statusText : ""; + } gadget.state.message .innerHTML = notify_msg_template({ status: 'error', - message: error.target.status + - ": Failed to access OPML URL. " + error.message + message: code + ": Failed to access OPML URL. " + + message_text }); return {data: {total_rows: 0}}; }) .push(function (opml_result) { var i, - check_list = [true]; + check_list = [true], + new_login; if (opml_result.data.total_rows > 0) { opml_dict.title = opml_result.data.rows[0].value.title; + if (doc.new_password) { + new_login = btoa(doc.username + ':' + doc.new_password); + } for (i = 1; i < opml_result.data.total_rows; i += 1) { if (opml_result.data.rows[i].value.url !== undefined) { check_list.push(checkCredential( opml_result.data.rows[i].value.url, opml_result.data.rows[i].value.title, - opml_dict.basic_login + opml_dict.basic_login, + new_login )); update_password_list.push({ base_url: opml_result.data.rows[i].value.url, @@ -195,14 +227,29 @@ }) .push(function (status_list) { var i, - error_msg = ''; + error_msg = '', + used_new_passwd_count = 0; + // in case the current password in opml is wrong and new + // password provided is OK, we set it as the current password in opml. for (i = 1; i < status_list.length; i += 1) { if (status_list[i].status !== 'OK') { + if (status_list[i].hash !== undefined) { + used_new_passwd_count += 1; + } error_msg += 'Login/password invalid for instance: ' + status_list[i].title + '. ' + status_list[i].msg + '\n'; + allow_force = true; } } + if (used_new_passwd_count > 0 && + used_new_passwd_count === (status_list.length - 1)) { + // all backends password are OK, we only update our password + opml_dict.password = doc.new_password; + doc.new_password = ''; + opml_dict.basic_login = status_list[1].hash; + return true; + } if (error_msg !== '') { gadget.state.message .innerHTML = notify_msg_template({ @@ -265,6 +312,8 @@ return new RSVP.Queue() .push(function () { if (verify_password) { + // if verification pass -> instance is started + opml_dict.state = "Started"; return validateOPML(); } return true; @@ -275,10 +324,10 @@ return gadget.jio_put(opml_dict.url, opml_dict) .push(function () { gadget.state.message.textContent = ""; - return status; + return {status: status, can_force: allow_force}; }); } - return status; + return {status: status, can_force: allow_force}; }); } @@ -352,4 +401,4 @@ return saveOPML(this, form_doc, verify_password); }); -}(window, rJS, RSVP, btoa, XMLHttpRequest, Handlebars)); +}(window, rJS, RSVP, btoa, XMLHttpRequest, Handlebars, jIO)); diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_monitoring_opml_edit_js.xml b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_monitoring_opml_edit_js.xml index 03e5584f7a6867062f3e06c0923faf1741367baf..0db1c02cf9c26a37f76a94c7a0f788fb9a2f03dc 100644 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_monitoring_opml_edit_js.xml +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_monitoring_opml_edit_js.xml @@ -242,7 +242,7 @@ serial - 963.29541.62889.7577 + 971.63860.22689.21760 state @@ -260,7 +260,7 @@ - 1510680916.21 + 1543593317.26 UTC diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_monitoring_panel_html.html b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_monitoring_panel_html.html index 00d4f49513d50d1cb952a28a5c420612860c9870..4f77a42f7ef9449b30d167460645c12559adc5c4 100644 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_monitoring_panel_html.html +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_monitoring_panel_html.html @@ -2,7 +2,7 @@ - + ERP5 Panel diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_monitoring_router_html.html b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_monitoring_router_html.html index e46379cecfe5c8eed808cc7e8256be68a10667bf..62997cf8e95587d73edccc023d0a2243df4ab35b 100644 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_monitoring_router_html.html +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_monitoring_router_html.html @@ -2,7 +2,7 @@ - + OfficeJS Router Gadget diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_monitoring_sync_js.js b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_monitoring_sync_js.js index d31fc6bb9005fb61812faa6e17a88ce769e48376..b9ed53c0a9b8111381d1502c06b4b5460089eb1f 100644 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_monitoring_sync_js.js +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_monitoring_sync_js.js @@ -150,15 +150,28 @@ // There was another recent sync don't start a new sync before the time_interval! return; } - return syncAllStorageWithCheck(); + return gadget.getSetting('sync_lock') + .push(function (sync_lock) { + if (!sync_lock) { + gadget.props.sync_locked = false; + return syncAllStorageWithCheck(); + } + gadget.props.sync_locked = true; + return gadget.notifySubmitted({ + message: "Auto sync is currently locked by another task " + + "and will be restarted later...", + status: "error" + }); + }); }) .push(function () { return gadget.getSetting('sync_data_interval'); }) .push(function (timer_interval) { - if (gadget.props.offline === true) { - // Offline mode detected, next check will be in 3 minutes - timer_interval = 180000; + if (gadget.props.offline === true || + gadget.props.sync_locked === true) { + // Offline mode detected or sync locked. Next run in 1 minute + timer_interval = 60000; } else if (timer_interval === undefined) { timer_interval = gadget.props.default_sync_interval; } diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_monitoring_sync_js.xml b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_monitoring_sync_js.xml index 8d5a39af98fa97246f5e0d6c02a16bd27de542f3..ce0560eae9e6f4648459accc0624376a344a7586 100644 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_monitoring_sync_js.xml +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_monitoring_sync_js.xml @@ -242,7 +242,7 @@ serial - 963.29129.42634.5819 + 964.38426.36779.39065 state @@ -260,7 +260,7 @@ - 1510655414.57 + 1515058880.82 UTC diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_ojsm_graph_field_html.html b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_ojsm_graph_field_html.html new file mode 100644 index 0000000000000000000000000000000000000000..8f69fb27e8536efd829c6ad7501ae7d08f9b2e26 --- /dev/null +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_ojsm_graph_field_html.html @@ -0,0 +1,18 @@ + + + + + + ERP5 Gadget Graph + + + + + + + + +
+
+ + \ No newline at end of file diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_ojsm_graph_field_html.xml b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_ojsm_graph_field_html.xml new file mode 100644 index 0000000000000000000000000000000000000000..7f673f1aadeefcf7228b134607ad63cdb6f958bc --- /dev/null +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_ojsm_graph_field_html.xml @@ -0,0 +1,332 @@ + + + + + + + + + + _Access_contents_information_Permission + + + Anonymous + Assignee + Assignor + Associate + Auditor + Manager + Owner + + + + + _Add_portal_content_Permission + + + Assignee + Assignor + Manager + + + + + _Change_local_roles_Permission + + + Assignor + Manager + + + + + _Modify_portal_content_Permission + + + Assignee + Assignor + Manager + + + + + _View_Permission + + + Anonymous + Assignee + Assignor + Associate + Auditor + Manager + Owner + + + + + categories + + + classification/collaborative/team + + + + + content_md5 + + + + + + content_type + text/html + + + default_reference + gadget_ojsm_graph_field.html + + + description + + + + + + id + gadget_ojsm_graph_field_html + + + language + en + + + portal_type + Web Page + + + short_title + + + + + + title + Gadget Officejs Graph + + + version + 001 + + + workflow_history + + AAAAAAAAAAI= + + + + + + + + + + + + + data + + + + document_publication_workflow + + AAAAAAAAAAM= + + + + edit_workflow + + AAAAAAAAAAQ= + + + + processing_status_workflow + + AAAAAAAAAAU= + + + + + + + + + + + + + + + + + + + action + publish_alive + + + actor + zope + + + comment + + + + error_message + + + + time + + + + + + + + + + + 1514308505.48 + UTC + + + + + + + validation_state + published_alive + + + + + + + + + + + + + + + + + action + edit + + + actor + zope + + + comment + + + + + + error_message + + + + serial + 964.25931.6156.58743 + + + state + current + + + time + + + + + + + + + + + 1514370606.61 + UTC + + + + + + + + + + + + + + + + + + + + + action + detect_converted_file + + + actor + zope + + + comment + + + + error_message + + + + external_processing_state + converted + + + serial + 0.0.0.0 + + + time + + + + + + + + + + + 1514307956.78 + UTC + + + + + + + + + + + diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_ojsm_graph_field_js.js b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_ojsm_graph_field_js.js new file mode 100644 index 0000000000000000000000000000000000000000..512bc93b5f902ba144f79c0615ad6a06699e7998 --- /dev/null +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_ojsm_graph_field_js.js @@ -0,0 +1,83 @@ +/*global window, rJS, RSVP */ +/*jslint indent: 2, maxerr: 3 */ +(function (window, rJS, RSVP) { + "use strict"; + + function displayGraph(gadget, data) { + return gadget.getDeclaredGadget('graph_gadget') + .push(function (graph_gadget) { + return graph_gadget.render({value: data}); + }); + } + + rJS(window) + .declareAcquiredMethod("notifySubmitted", 'notifySubmitted') + .declareMethod('render', function (options) { + var field_json = options || {}, + state_dict = { + data_dict: field_json.value.data_dict, + data_url: field_json.value.data_url, + data_filename: field_json.value.data_filename, + extract_method: field_json.value.extract_method, + basic_login: field_json.value.basic_login + }; + return this.changeState(state_dict); + }) + + .onStateChange(function () { + return this.renderGraph(); + }) + + .declareJob('renderGraph', function () { + var gadget = this, + jio_gadget; + if (gadget.state.data_url !== undefined && + gadget.state.data_filename !== undefined) { + return gadget.getDeclaredGadget("jio_gadget") + .push(function (g) { + jio_gadget = g; + return jio_gadget.createJio({ + type: "webhttp", + // XXX fix of url + url: gadget.state.data_url.replace("jio_private", "private"), + basic_login: gadget.state.basic_login + }); + }) + .push(function () { + return jio_gadget.get( + gadget.state.data_filename + ); + }) + .push(undefined, function (error) { + gadget.state.data_dict.data = {}; + return gadget.notifySubmitted({ + message: "Warning: Failed to download graph data file '" + + gadget.state.data_filename + "'!\n " + error.message || "", + status: "error" + }) + .push(function () { + return undefined; + }); + }) + .push(function (data_result) { + if (data_result !== undefined && + gadget.state.extract_method !== undefined) { + return new RSVP.Queue() + .push(function () { + return gadget.state.extract_method( + data_result, + gadget.state.data_filename + ); + }) + .push(function (result) { + gadget.state.data_dict.data = result; + return displayGraph(gadget, gadget.state.data_dict); + }); + } + return displayGraph(gadget, gadget.state.data_dict); + }); + } + return displayGraph(gadget, gadget.state.data_dict); + }); + +}(window, rJS, RSVP)); \ No newline at end of file diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_ojsm_graph_field_js.xml b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_ojsm_graph_field_js.xml new file mode 100644 index 0000000000000000000000000000000000000000..ea01fab25bb5eca627c6ebceeadf63118ef861e9 --- /dev/null +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_ojsm_graph_field_js.xml @@ -0,0 +1,328 @@ + + + + + + + + + + _Access_contents_information_Permission + + + Anonymous + Assignee + Assignor + Associate + Auditor + Manager + Owner + + + + + _Add_portal_content_Permission + + + Assignee + Assignor + Manager + + + + + _Change_local_roles_Permission + + + Assignor + Manager + + + + + _Modify_portal_content_Permission + + + Assignee + Assignor + Manager + + + + + _View_Permission + + + Anonymous + Assignee + Assignor + Associate + Auditor + Manager + Owner + + + + + categories + + + classification/collaborative/team + + + + + content_md5 + + + + + + default_reference + gadget_ojsm_graph_field.js + + + description + + + + + + id + gadget_ojsm_graph_field_js + + + language + en + + + portal_type + Web Script + + + short_title + + + + + + title + Gadget Officejs Monitoring Graph JS + + + version + 001 + + + workflow_history + + AAAAAAAAAAI= + + + + + + + + + + + + + data + + + + document_publication_workflow + + AAAAAAAAAAM= + + + + edit_workflow + + AAAAAAAAAAQ= + + + + processing_status_workflow + + AAAAAAAAAAU= + + + + + + + + + + + + + + + + + + + action + publish_alive + + + actor + zope + + + comment + + + + error_message + + + + time + + + + + + + + + + + 1514308148.29 + UTC + + + + + + + validation_state + published_alive + + + + + + + + + + + + + + + + + action + edit + + + actor + zope + + + comment + + + + + + error_message + + + + serial + 964.26990.55688.60364 + + + state + current + + + time + + + + + + + + + + + 1514372119.82 + UTC + + + + + + + + + + + + + + + + + + + + + action + detect_converted_file + + + actor + zope + + + comment + + + + error_message + + + + external_processing_state + converted + + + serial + 0.0.0.0 + + + time + + + + + + + + + + + 1514308114.16 + UTC + + + + + + + + + + + diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/monitoring_jio_storage_js.js b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/monitoring_jio_storage_js.js index 5d4e27e2f7fc4c108a423329d4f4a10b0ac48565..1a88df3ee984131818efff634267f580de6f9a55 100644 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/monitoring_jio_storage_js.js +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/monitoring_jio_storage_js.js @@ -18,6 +18,7 @@ * "type": "replicatedopml", * "remote_storage_unreachable_status": "WARNING", * "remote_opml_check_time_interval": 86400000, + * "request_timeout": 0, * local_sub_storage: { * type: "query", * sub_storage: { @@ -30,17 +31,50 @@ */ var rusha = new Rusha(), - OPML_ATTACHMENT_NAME = "__opml__"; + OPML_ATTACHMENT_NAME = "__opml__", + ZONE_LIST = [ + "-1200", + "-1100", + "-1000", + "-0900", + "-0800", + "-0700", + "-0600", + "-0500", + "-0400", + "-0300", + "-0200", + "-0100", + "+0000", + "+0100", + "+0200", + "+0300", + "+0400", + "+0500", + "+0600", + "+0700", + "+0800", + "+0900", + "+1000", + "+1100", + "+1200" + ]; function generateHash(str) { return rusha.digestFromString(str); } function createStorage(context, storage_spec, key) { - if (!context._remote_storage_dict.hasOwnProperty(key)) { - context._remote_storage_dict[key] = jIO.createJIO(storage_spec); + var signature; + signature = generateHash(JSON.stringify(storage_spec)); + if (!context._remote_storage_dict.hasOwnProperty(key) || + signature !== context._remote_storage_dict[key].signature) { + context._remote_storage_dict[key] = { + storage: jIO.createJIO(storage_spec), + signature: signature + }; } - return context._remote_storage_dict[key]; + return context._remote_storage_dict[key].storage; } /** @@ -73,6 +107,10 @@ // one day in miliseconds this._remote_opml_check_time_interval = 86400000; } + this._request_timeout = spec.request_timeout; + if (this._request_timeout === undefined) { + this._request_timeout = 0; // no timeout + } } ReplicatedOPMLStorage.prototype.get = function () { @@ -120,13 +158,17 @@ var remove_id_list = [], remove_signature_id_list = []; + // remove related hosting subscription + remove_id_list.push(generateHash(id)); + // removed saved opml content remove_signature_id_list.push({ id: url, name: url }); + // remove all related documents return storage.allDocs({ select_list: ["xmlUrl", "url"], - query: '(portal_type:"opml-outline") AND (parent_url:"' + url + '")' + query: '(portal_type:"Opml Outline") AND (parent_url:"' + url + '")' }) .push(function (document_result) { var i, @@ -243,6 +285,32 @@ }); } + function fixGlobalInstanceDocument(instance) { + // Fix some property as backed is old, to keep backward compatibility + // XXX - this method should be removed when all backend will be upgraded + if (instance._embedded !== undefined) { + if (instance._embedded.instance !== undefined) { + // set aggregate_reference to the computer reference and make it + // searchable + instance.aggregate_reference = instance._embedded.instance.computer; + } + if (instance._embedded.hasOwnProperty('promises')) { + // remove useless information from the document + delete instance._embedded.promises; + } + } + if (instance.hasOwnProperty('hosting-title')) { + // hosting-title should be specialise_title + instance.specialise_title = instance['hosting-title']; + delete instance['hosting-title']; + } + // set portal_type is not defined + if (!instance.hasOwnProperty('portal_type')) { + instance.portal_type = "Software Instance"; + } + return instance; + } + function updateSubStorageStatus(context, signature_dict, next_status) { var key, update_status_queue = new RSVP.Queue(); @@ -278,7 +346,7 @@ }); } - function loadSubStorage(context, storage_spec, parent_id, type) { + function loadSubStorage(context, storage_spec, parent_id, index, type) { var sub_storage, result_dict, storage_key, @@ -293,7 +361,8 @@ type: type || storage_spec.type, current_signature: {}, result: {data: {total_rows: 0}}, - url: url + url: url, + parent_index: index }; return sub_storage.allDocs({include_docs: true}) .push(undefined, function (error) { @@ -333,7 +402,33 @@ }); } - function getOpmlTree(context, opml_url, opml_spec, basic_login) { + function updateHostingSubscriptionState(hosting, element) { + var status = element.status.toUpperCase(); + + if (hosting.instance_amount === 0) { + hosting.status_date = fixDateTimezone(element.date); + } + if (hosting.status === "ERROR") { + return; + } else if (status === "ERROR") { + hosting.status = status; + } else if (status === "WARNING") { + hosting.status = status; + } if (status === "OK" && hosting.status !== status) { + hosting.status = status; + } + } + + function fixDateTimezone(date_string) { + // set default timezone offset to UTC + // XXX should be removed later + if (ZONE_LIST.indexOf(date_string.slice(-5)) === -1) { + return date_string + "+0000"; + } + return date_string; + } + + function getOpmlTree(context, opml_url, opml_spec, basic_login, opml_title) { var opml_storage, opml_document_list = [], delete_key_list = [], @@ -341,10 +436,21 @@ opml_result_list, current_signature_dict = {}, fetch_remote_opml = false, + hosting_subscription, id; id = generateHash(opml_url); opml_storage = createStorage(context, opml_spec, id); + + // Hosting Subscription is build from OPML and it has status + hosting_subscription = { + title: opml_title || "", + portal_type: "Hosting Subscription", + opml_url: opml_url, + status: "WARNING", + instance_amount: 0, + status_date: (new Date()).toUTCString() + "+0000" + }; return getDocumentAsAttachment(context, opml_url, OPML_ATTACHMENT_NAME) .push(function (opml_doc) { var current_time = new Date().getTime(); @@ -400,12 +506,18 @@ result_list = [], header_dict = {}; - if (opml_result_list.data.total_rows > 0 && fetch_remote_opml) { - header_dict = { - dateCreated: opml_result_list.data.rows[0].doc.dateCreated, - dateModified: opml_result_list.data.rows[0].doc.dateModified, - opml_title: opml_result_list.data.rows[0].doc.title - }; + if (opml_result_list.data.total_rows > 0) { + if (opml_result_list.data.rows[0].doc.title) { + hosting_subscription.title = opml_result_list.data.rows[0] + .doc.title; + } + if (fetch_remote_opml) { + header_dict = { + dateCreated: opml_result_list.data.rows[0].doc.dateCreated, + dateModified: opml_result_list.data.rows[0].doc.dateModified, + opml_title: opml_result_list.data.rows[0].doc.title + }; + } } for (i = 1; i < opml_result_list.data.total_rows; i += 1) { @@ -420,10 +532,12 @@ attachment_id: 'enclosure', parser: 'rss', sub_storage: { - type: "http" + type: "http", + timeout: context._request_timeout } }, id_hash, + i, 'promise' )); // Load private docs @@ -433,9 +547,11 @@ { type: 'webhttp', url: item.doc.url.replace('jio_private', 'private'), - basic_login: basic_login + basic_login: basic_login, + timeout: context._request_timeout }, - id_hash + id_hash, + i )); } @@ -454,7 +570,7 @@ delete current_signature_dict[id_hash]; } Object.assign(item.doc, { - portal_type: "opml-outline", + portal_type: "Opml Outline", parent_id: id, parent_url: opml_url, reference: id_hash, @@ -485,15 +601,30 @@ var i, j, start, - extra_dict, - item_signature_dict = {}; + extra_dict; - function applyItemToTree(item, item_result, portal_type, extra_dict) { + function applyItemToTree(item, item_result, extra_dict) { var id_hash, element = item.doc, signature, item_id = item.guid || item.id, - status = (element.status || element.category); + status = (element.status || element.category), + item_signature_dict = {}; + + if (element.type === 'global') { + updateHostingSubscriptionState(hosting_subscription, element); + hosting_subscription.instance_amount += 1; + if (element.aggregate_reference === undefined) { + // XXX - document need to be updated to keep compatibility + element = fixGlobalInstanceDocument(element); + } + // XXX - fixing date timezone + element.date = fixDateTimezone(element.date); + } + // XXX - fixing date timezone + if (element.pubDate !== undefined) { + element.pubDate = fixDateTimezone(element.pubDate); + } id_hash = generateHash(item_result.parent_id + item_result.url + item_id); @@ -509,8 +640,8 @@ }; if (item_result.current_signature.hasOwnProperty(id_hash)) { - if (item_result.current_signature[id_hash].signature - === signature) { + if (item_result.current_signature[id_hash].signature === + signature) { // the document was not modified return delete item_result.current_signature[id_hash]; return; @@ -520,7 +651,8 @@ } Object.assign(element, { parent_id: item_result.parent_id, - portal_type: portal_type || element.type || item_result.type, + portal_type: element.portal_type || element.type || + item_result.type, status: status, reference: id_hash, active: true @@ -529,6 +661,11 @@ id: id_hash, doc: element }); + attachment_document_list.push({ + id: item_result.parent_id, + name: item_result.url, + doc: item_signature_dict + }); } for (i = 0; i < result_list.length; i += 1) { @@ -538,32 +675,20 @@ if (result_list[i].type === "promise") { // the first element of rss is the header extra_dict = { - lastBuildDate: result_list[i].result.data.rows[0].doc - .lastBuildDate, + lastBuildDate: fixDateTimezone(result_list[i].result.data. + rows[0].doc.lastBuildDate), channel: result_list[i].result.data.rows[0].doc.description, channel_item: result_list[i].result.data.rows[0].doc.title }; - applyItemToTree( - result_list[i].result.data.rows[0], - result_list[i], - "rss" - ); start = 1; } for (j = start; j < result_list[i].result.data.total_rows; j += 1) { applyItemToTree( result_list[i].result.data.rows[j], result_list[i], - undefined, extra_dict ); } - attachment_document_list.push({ - id: result_list[i].parent_id, - name: result_list[i].url, - doc: item_signature_dict - }); - item_signature_dict = {}; delete_key_list.push.apply( delete_key_list, Object.keys(result_list[i].current_signature) @@ -578,7 +703,33 @@ doc: result_list[i].current_signature }); } + else if (context._remote_storage_unreachable_status !== undefined) { + if (result_list[i].type === "webhttp") { + // In case it was impossible to get software Instance + // Add an empty Software Instance with unreachable status + applyItemToTree( + { + id: "monitor.global", + doc: { + portal_type: "Software Instance", + status: context._remote_storage_unreachable_status, + title: opml_result_list.data.rows[result_list[i] + .parent_index].doc.title, + date: new Date().toUTCString() + "+0000", + specialise_title: opml_result_list.data.rows[result_list[i] + .parent_index].doc.opml_title + } + }, + result_list[i], + undefined + ); + } + } } + opml_document_list.push({ + id: id, + doc: hosting_subscription + }); return [opml_document_list, delete_key_list, attachment_document_list]; }); } @@ -655,8 +806,8 @@ function syncOpmlStorage(context) { return context._local_sub_storage.allDocs({ - query: '(portal_type:"opml") AND (active:true)', - select_list: ["url", "basic_login"] + query: '(portal_type:"opml") AND (active:true) AND (url:"https://%")', + select_list: ["title", "url", "basic_login"] }) .push(function (storage_result) { var i, @@ -674,10 +825,12 @@ attachment_id: 'enclosure', parser: 'opml', sub_storage: { - type: "http" + type: "http", + timeout: context._request_timeout } }, - storage_spec.basic_login + storage_spec.basic_login, + storage_spec.title ); }) .push(function (result_list) { @@ -690,11 +843,7 @@ }); } for (i = 0; i < storage_result.data.total_rows; i += 1) { - syncFullOpml({ - type: storage_result.data.rows[i].value.type, - url: storage_result.data.rows[i].value.url, - basic_login: storage_result.data.rows[i].value.basic_login - }); + syncFullOpml(storage_result.data.rows[i].value); } return opml_queue; }); diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/monitoring_jio_storage_js.xml b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/monitoring_jio_storage_js.xml index e77ee4c542763967d336dcae484c78139b1d130c..9fd4ae6b236ffa51758d6840df255042d09850dc 100644 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/monitoring_jio_storage_js.xml +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/monitoring_jio_storage_js.xml @@ -239,7 +239,7 @@
serial - 961.39289.49107.2628 + 972.3978.30023.34679 state @@ -257,7 +257,7 @@ - 1503487925.99 + 1543851108.12 UTC diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/monitoring_jio_web_storage_js.js b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/monitoring_jio_web_storage_js.js index 504b8d22dfd04982a205e98a24787df19eed2eb2..4de782302aff571d67ab8e8b0b23fa45a12bf5d3 100644 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/monitoring_jio_web_storage_js.js +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/monitoring_jio_web_storage_js.js @@ -27,6 +27,9 @@ } options.xhrFields.withCredentials = storage._with_credentials; } + if (storage._timeout !== undefined) { + options.timeout = storage._timeout; + } return new RSVP.Queue() .push(function () { return jIO.util.ajax(options); @@ -81,6 +84,7 @@ this._authorization = "Basic " + spec.basic_login; } this._with_credentials = spec.with_credentials; + this._timeout = spec.timeout; } WEBHTTPStorage.prototype.get = function (id) { diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/monitoring_jio_web_storage_js.xml b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/monitoring_jio_web_storage_js.xml index da34ca6e27f32acc8767358e082ccd5138be3782..ebeebfa33a35de65c7fe9ae33e357cc2e31b09b6 100644 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/monitoring_jio_web_storage_js.xml +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/monitoring_jio_web_storage_js.xml @@ -242,7 +242,7 @@ serial - 961.21931.50854.43776 + 963.27666.8050.30907 state @@ -260,7 +260,7 @@ - 1502445069.19 + 1513173954.77 UTC diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/ojsm_gadget_erp5_statusfield_html.html b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/ojsm_gadget_erp5_statusfield_html.html index be706b3ee15adf999a3cb77734ae4fed1db07630..e8a57856ca0c605007de5e0bbfa7327f6ac609f1 100644 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/ojsm_gadget_erp5_statusfield_html.html +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/ojsm_gadget_erp5_statusfield_html.html @@ -2,12 +2,13 @@ - + ERP5 Statusfield +