Commit 71063a4b authored by Alain Takoudjou's avatar Alain Takoudjou Committed by Alain Takoudjou

[erp5_web_monitoring] don't launch auto-sync when there is no internet access

parent 84832de3
......@@ -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>
......
......@@ -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>
......
......@@ -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')
......
......@@ -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>
......
/*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
......@@ -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>
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment