diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_settings_configurator_html.html b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_settings_configurator_html.html index f6ed0a2b771818b3e2a0feda66d8465ca6e345be..09055897f972c8484528174d614584956325e948 100644 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_settings_configurator_html.html +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_settings_configurator_html.html @@ -138,8 +138,8 @@ </table> </div> <div class="padding-10 msgtext-box"></div> - <div class=""> - <legend><strong>With OPML Selection:</strong></legend> + <legend><strong>With OPML Selection:</strong></legend> + <div class="padding-lr-10"> <a href="#" class="ui-btn ui-corner-all ui-btn-inline opml-state"><i class="fa fa-check-square-o"></i> Enable/disable</a> <a href="#" class="ui-btn ui-corner-all ui-btn-inline opml-delete"><i class="fa fa-trash"></i> Delete</a> <a href="#" class="ui-btn ui-corner-all ui-btn-inline opml-test"><i class="fa fa-globe" aria-hidden="true"></i> Test URL Access</a> @@ -147,23 +147,36 @@ <i class="fa fa-spinner fa-2x fa-spin"></i> </span> </div> - <div class="padding-5"> - <fieldset class="sync-interval-controlgroup" data-role="controlgroup" data-type="horizontal"> - <legend><strong>Auto Sync Interval:</strong></legend> - <input type="radio" name="sync-data-timer" id="sync-data-5m" value="300000" checked="checked"> - <label for="sync-data-5m">5 min</label> - <input type="radio" name="sync-data-timer" id="sync-data-10m" value="600000"> - <label for="sync-data-10m">10 min</label> - <input type="radio" name="sync-data-timer" id="sync-data-20m" value="1200000"> - <label for="sync-data-20m">20 min</label> - <input type="radio" name="sync-data-timer" id="sync-data-30m" value="1800000"> - <label for="sync-data-30m">30 min</label> - <input type="radio" name="sync-data-timer" id="sync-data-1h" value="3600000"> - <label for="sync-data-1h">1 h</label> - </fieldset> - <p>Last sync date: <span class="last-sync"></span></p> + <div> + <legend><strong>Auto Sync Time Interval:</strong></legend> + <div class="padding-lr-10"> + <fieldset class="sync-interval-controlgroup" data-role="controlgroup" data-type="horizontal"> + <input type="radio" name="sync-data-timer" id="sync-data-5m" value="300000" checked="checked"> + <label for="sync-data-5m">5 mn</label> + <input type="radio" name="sync-data-timer" id="sync-data-10m" value="600000"> + <label for="sync-data-10m">10 mn</label> + <input type="radio" name="sync-data-timer" id="sync-data-20m" value="1200000"> + <label for="sync-data-20m">20 mn</label> + <input type="radio" name="sync-data-timer" id="sync-data-30m" value="1800000"> + <label for="sync-data-30m">30 mn</label> + <input type="radio" name="sync-data-timer" id="sync-data-1h" value="3600000"> + <label for="sync-data-1h">1 h</label> + </fieldset> + <p>Last sync date: <span class="last-sync"></span></p> + </div> + <legend><strong>Check Online Access Before Sync:</strong></legend> + <div class="padding-lr-10"> + <fieldset data-role="controlgroup" data-type="horizontal"> + <select name="sync-check-offline" id="sync-check-offline" data-role="slider" data-mini="true"> + <option value="off">Off</option> + <option value="on">On</option> + </select> + </fieldset> + </div> <h2><strong>Manual Sync:</strong></h2> - <button class="ui-btn ui-corner-all ui-btn-inline sync-all"><i class="fa fa-download"></i> <span>Sync Data Now</span></button> + <div class="padding-lr-10"> + <button class="ui-btn ui-corner-all ui-btn-inline sync-all"><i class="fa fa-download"></i> <span>Sync Data Now</span></button> + </div> </div> </div> </div> diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_settings_configurator_html.xml b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_settings_configurator_html.xml index 22ff93630772df394a769ee80cb90be19dccb9b8..3ac0a3dfc8c3265ea760549bf004e2a2a5a89455 100644 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_settings_configurator_html.xml +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_settings_configurator_html.xml @@ -239,7 +239,7 @@ </item> <item> <key> <string>serial</string> </key> - <value> <string>961.22105.7758.14592</string> </value> + <value> <string>961.52563.23676.54306</string> </value> </item> <item> <key> <string>state</string> </key> @@ -257,7 +257,7 @@ </tuple> <state> <tuple> - <float>1503497281.04</float> + <float>1504526479.13</float> <string>UTC</string> </tuple> </state> diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_settings_configurator_js.js b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_settings_configurator_js.js index 03330d103cf2bbfcf743296a7c9e4e9392eac41a..3be721aa3bfa950292958965febb42498c5842ae 100644 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_settings_configurator_js.js +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_settings_configurator_js.js @@ -287,6 +287,7 @@ .declareService(function () { var gadget = this, sync_checkbox_list, + online_select_element, alert_box, i; @@ -370,6 +371,15 @@ .push(function (time_interval) { return setSelectSyncTime(time_interval); }) + .push(function () { + return gadget.getSetting("sync_check_offline", "true"); + }) + .push(function (sync_check_offline) { + if (sync_check_offline) { + $(gadget.element.querySelector("select[name='sync-check-offline']")) + .val('on').slider("refresh"); + } + }) .push(function () { var promise_list = []; @@ -419,6 +429,14 @@ } )); + promise_list.push( + $(gadget.element.querySelector("select[name='sync-check-offline']") + ).bind( "change", function() { + var element = gadget.element.querySelector("select[name='sync-check-offline']"); + return gadget.setSetting('sync_check_offline', + ($(element).val() === 'on') ? "true" : "false"); + }) + ); promise_list.push( $(gadget.element.querySelector( "input[name='configure-newpwd']" @@ -676,8 +694,9 @@ }) .push(undefined, function (error) { var msg = ""; - if (error.currentTarget.responseType === "" || - error.currentTarget.responseType === "text") { + if (error.currentTarget !== undefined && + (error.currentTarget.responseType === "" || + error.currentTarget.responseType === "text")) { msg = error.currentTarget.responseText; } alert_box.removeClass('ui-content-hidden') diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_settings_configurator_js.xml b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_settings_configurator_js.xml index dbc811a2e957c2df2ff9e65bb93c83921e6ff030..7ff304bc10ca79b840f60c11f3a40650017b0b4f 100644 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_settings_configurator_js.xml +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_settings_configurator_js.xml @@ -239,7 +239,7 @@ </item> <item> <key> <string>serial</string> </key> - <value> <string>961.40699.48372.17271</string> </value> + <value> <string>961.62212.52900.63880</string> </value> </item> <item> <key> <string>state</string> </key> @@ -257,7 +257,7 @@ </tuple> <state> <tuple> - <float>1503651680.71</float> + <float>1504861845.27</float> <string>UTC</string> </tuple> </state> diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_sync_js.js b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_sync_js.js index 829d936c1787a38f8db09ee1740cf37e1567b886..4061360a2a3578d652f301abf16d9d4d2be3fe58 100644 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_sync_js.js +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_sync_js.js @@ -1,6 +1,7 @@ -/*global window, rJS, RSVP, $, clearTimeout, setTimeout, console */ +/*global window, rJS, RSVP, $, clearTimeout, setTimeout, console, XMLHttpRequest, document */ /*jslint nomen: true, indent: 2, maxerr: 3*/ -(function (window, rJS, RSVP, $, console, clearTimeout, setTimeout) { +(function (window, rJS, RSVP, $, console, clearTimeout, setTimeout, + XMLHttpRequest, document) { "use strict"; var gadget_klass = rJS(window); @@ -23,6 +24,32 @@ .declareMethod("startSync", function (options) { var gadget = this; + function testOnline(url) { + return new RSVP.Promise(function (resolve, reject) { + var xhr = new XMLHttpRequest(); + + xhr.onload = function (event) { + var response = event.target; + if (response.status === 302 || response.status === 200) { + resolve({status: 'OK'}); + } else { + reject({ + status: 'ERROR' + }); + } + }; + + xhr.onerror = function (e) { + reject({ + status: 'ERROR' + }); + }; + + xhr.open("GET", url, true); + xhr.send(""); + }); + } + function formatDate(d) { function addZero(n) { return n < 10 ? "0" + n : n.toString(); @@ -32,79 +59,41 @@ + "-" + addZero(d.getDate()) + " " + addZero(d.getHours()) + ":" + addZero(d.getMinutes()) + ":" + addZero(d.getSeconds()); } - /* - function getErrorLog(error_list) { - // Build error msg from failed sync - var i, - tmp_url, - error_message = ""; - for (i = 0; i < error_list.length; i += 1) { - if (error_list[i].storage_dict.hasOwnProperty('sub_storage')) { - if (error_list[i].storage_dict.sub_storage.hasOwnProperty('sub_storage')) { - tmp_url = error_list[i].storage_dict.sub_storage.sub_storage.url; - } else { - tmp_url = error_list[i].storage_dict.sub_storage.url; + function syncAllStorageWithCheck() { + gadget.props.offline = false; + return gadget.getSetting('sync_check_offline', 'true') + .push(function (check_offline) { + var parser; + if (check_offline === 'true') { + parser = document.createElement("a"); + parser.href = document.URL; + return new RSVP.Queue() + .push(function () { + return testOnline(parser.origin); + }) + .push(undefined, function() { + return {status: "ERROR"}; + }) + .push(function (online_result) { + if (online_result.status === "OK") { + return syncAllStorage(); + } + gadget.props.offline = true; + return $.notify( + "Sync aborted, no internet access...", + { + position: "bottom right", + autoHide: true, + className: "error", + autoHideDelay: 10000 + } + ); + }); } - } else { - tmp_url = error_list[i].storage_dict.url; - } - error_message += "> " + error_list[i].storage_dict.hosting + " > " + - error_list[i].storage_dict.title + "\n"; - error_message += "Cannot download file(s) at " + tmp_url + ".\n\n"; - } - return error_message; - } - - function updateStatus(gadget, storage_dict, status) { - var promise_list = [], - jio_gadget, - url, - i; - - return getJioGadget(gadget, storage_dict) - .push(function (jio_declared_gadget) { - jio_gadget = jio_declared_gadget; - return jio_gadget.allDocs({include_docs: true}); - }) - .push(undefined, function (error) { - console.log(error); - return { - data: { - total_rows: 0 - } - }; - }) - .push(function (jio_docs) { - var tmp; - for (i = 0; i < jio_docs.data.total_rows; i += 1) { - if (jio_docs.data.rows[i].id.startsWith('_replicate_')) { - continue; - } - tmp = jio_docs.data.rows[i].doc; - if (storage_dict.storage_type === "rss") { - if (tmp.category === "WARNING") { - continue; - } - tmp.category = "WARNING"; - } else if (storage_dict.storage_type === "webdav") { - if (tmp.status === "WARNING") { - continue; - } - tmp.status = "WARNING"; - } - promise_list.push(jio_gadget.put( - jio_docs.data.rows[i].id, - tmp - )); - } - return RSVP.all(promise_list); - }) - .push(undefined, function (error) { - console.log("ERROR: update status to WARNING"); - console.log(error); + return syncAllStorage(); }); - }*/ + } function syncAllStorage() { var error_log, @@ -169,19 +158,6 @@ method: 'Monitoring Sync' })*/ }) - /*.push(function () { - var promise_list = [], - i; - // Update all failures monitoring status to Warning - for (i = 0; i < gadget.props.error_list.length; i += 1) { - promise_list.push(updateStatus( - gadget, - gadget.props.error_list[i].storage_dict, - 'WARNING' - )); - } - return RSVP.all(promise_list); - })*/ .push(function () { gadget.props.started = false; return $.notify( @@ -213,7 +189,7 @@ // There was a recent sync don't start a new sync before the time_interval! return; } - return syncAllStorage(); + return syncAllStorageWithCheck(); }) .push(undefined, function (error) { console.error(error); @@ -223,7 +199,10 @@ return gadget.getSetting('sync_data_interval'); }) .push(function (timer_interval) { - if (timer_interval === undefined) { + if (gadget.props.offline === true) { + // Offline mode detected, next check will be in 3 minutes + timer_interval = 180000; + } else if (timer_interval === undefined) { timer_interval = gadget.props.default_sync_interval; } gadget.props.timer_interval = timer_interval; @@ -248,7 +227,7 @@ // sync is running... return; } - return syncAllStorage(); + return syncAllStorageWithCheck(); } // Default sync interval to 5 minutes gadget.props.default_sync_interval = 300000; @@ -289,4 +268,5 @@ }); }); -}(window, rJS, RSVP, $, console, clearTimeout, setTimeout)); \ No newline at end of file +}(window, rJS, RSVP, $, console, clearTimeout, setTimeout, XMLHttpRequest, + document)); \ No newline at end of file diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_sync_js.xml b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_sync_js.xml index f3cce65ebd5bcdd77eab49a8c398ff305290d624..5299c4e6c2814e1bd69da1532c52b414a0862135 100644 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_sync_js.xml +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_sync_js.xml @@ -242,7 +242,7 @@ </item> <item> <key> <string>serial</string> </key> - <value> <string>961.40574.58268.18875</string> </value> + <value> <string>961.62215.16074.40192</string> </value> </item> <item> <key> <string>state</string> </key> @@ -260,7 +260,7 @@ </tuple> <state> <tuple> - <float>1503563500.59</float> + <float>1504861961.08</float> <string>UTC</string> </tuple> </state>