From 51128b0d03483a701c851790cbc9d7add508bfce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric=20Krier?= Date: Wed, 8 Dec 2021 00:37:32 +0100 Subject: [PATCH] Add logger and some logging statements issue10943 review387341002 --- src/bus.js | 11 +++++++++-- src/common.js | 10 ++++++++-- src/html_sanitizer.js | 2 +- src/model.js | 33 +++++++++++++++++++++++---------- src/sao.js | 43 ++++++++++++++++++++++++++++++++++++++++++- src/screen.js | 13 ++++++++++++- src/session.js | 4 ++++ src/tab.js | 2 +- src/window.js | 11 +++++++++-- src/wizard.js | 7 ++++++- 10 files changed, 115 insertions(+), 21 deletions(-) diff --git a/src/bus.js b/src/bus.js index 20e31ce435..f059e972e5 100644 --- a/src/bus.js +++ b/src/bus.js @@ -37,6 +37,9 @@ } if (response.message) { last_message = response.message.message_id; + Sao.Logger.info( + "poll channels %s with last message", + Sao.Bus.channels, last_message); Sao.Bus.handle(response.message); } Sao.Bus.listen(last_message, 1); @@ -49,9 +52,13 @@ if (error === "timeout") { Sao.Bus.listen(last_message, 1); } else if (response.status == 501) { - console.log("Bus not supported"); + Sao.Logger.log("Bus not supported"); return; } else { + Sao.Logger.error( + "An exception occured while connection to the bus. " + + "Sleeping for %s seconds", + wait, error); window.setTimeout( Sao.Bus.listen, Math.min(wait * 1000, Sao.config.bus_timeout), @@ -67,7 +74,7 @@ return; } } catch (e) { - (console.error || console.log).call(console, e, e.stack); + Sao.Logger.error(e.message, e.stack); return; } diff --git a/src/common.js b/src/common.js index 1921f1d9c0..5c9b6034da 100644 --- a/src/common.js +++ b/src/common.js @@ -3061,7 +3061,10 @@ var img_url = this._convert(icon); this.loaded_icons[icon_name] = img_url; return img_url; - }.bind(this)); + }.bind(this)) + .fail(function() { + Sao.error("Unknown icon %s", icon_name); + }); } }.bind(this)); }, @@ -3728,7 +3731,10 @@ var order = field.get_search_order(record); var sao_model = new Sao.Model(model); return sao_model.execute('search_read', - [domain, 0, Sao.config.limit, order, ['rec_name']], context); + [domain, 0, Sao.config.limit, order, ['rec_name']], context).fail(function() { + Sao.Logger.warning( + "Unable to search for completion of %s", model); + }); }; Sao.common.Paned = Sao.class_(Object, { diff --git a/src/html_sanitizer.js b/src/html_sanitizer.js index 7e38cd1947..a9f45e85da 100644 --- a/src/html_sanitizer.js +++ b/src/html_sanitizer.js @@ -50,7 +50,7 @@ SOFTWARE. var iframe = document.createElement('iframe'); if (iframe.sandbox === undefined) { // Browser does not support sandboxed iframes - console.warn("Your browser do not support sandboxed iframes," + + Sao.Logger.warn("Your browser do not support sandboxed iframes," + " unable to sanitize HTML."); return input; } diff --git a/src/model.js b/src/model.js index 66f20d6db9..d3c012e98e 100644 --- a/src/model.js +++ b/src/model.js @@ -260,10 +260,10 @@ return jQuery.when(); } var root_group = this.root_group; - console.assert(records.every(function(r) { + Sao.Logger.assert(records.every(function(r) { return r.model.name == this.model.name; }.bind(this)), 'records not from the same model'); - console.assert(records.every(function(r) { + Sao.Logger.assert(records.every(function(r) { return r.group.root_group == root_group; }), 'records not from the same root group'); records = records.filter(function(record) { @@ -1896,10 +1896,17 @@ var digits_name = digits_field.description.relation; var digits_id = digits_field.get(record); if (digits_name && (digits_id !== null) && (digits_id >= 0)) { - digits = Sao.rpc({ - 'method': 'model.' + digits_name + '.get_digits', - 'params': [digits_id, {}], - }, record.model.session, false); + try { + digits = Sao.rpc({ + 'method': 'model.' + digits_name + '.get_digits', + 'params': [digits_id, {}], + }, record.model.session, false); + } catch(e) { + Sao.Logger.warn( + "Fail to fetch digits for %s,%s", + digits_name, digits_id); + return; + } } else { return; } @@ -1925,10 +1932,16 @@ var symbol_name = symbol_field.description.relation; var symbol_id = symbol_field.get(record); if (symbol_name && (symbol_id !== null) && (symbol_id >= 0)) { - return Sao.rpc({ - 'method': 'model.' + symbol_name + '.get_symbol', - 'params': [symbol_id, sign, record.get_context()], - }, record.model.session, false) || ['', 1]; + try { + return Sao.rpc({ + 'method': 'model.' + symbol_name + '.get_symbol', + 'params': [symbol_id, sign, record.get_context()], + }, record.model.session, false) || ['', 1]; + } catch (e) { + Sao.Logger.warn( + "Fail to fetch symbol for %s,%s", + symbol_name, symbol_id); + } } } return ['', 1]; diff --git a/src/sao.js b/src/sao.js index be54e28ee2..9eaf060900 100644 --- a/src/sao.js +++ b/src/sao.js @@ -175,6 +175,47 @@ var Sao = {}; return ClassConstructor; }; + Sao.Logging = Sao.class_(Object, { + init: function() { + this.level = Sao.Logging.ERROR; + }, + set_level: function(level) { + this.level = level; + }, + _log: function(level, logger, args) { + if (this.level <= level) { + logger.apply(console, args); + } + }, + debug: function() { + this._log(Sao.Logging.DEBUG, console.log, arguments); + }, + info: function() { + this._log(Sao.Logging.INFO, console.info, arguments); + }, + warn: function() { + this._log(Sao.Logging.WARNING, console.warn, arguments); + }, + error: function() { + this._log(Sao.Logging.ERROR, console.error, arguments); + }, + critical: function() { + this._log(Sao.Logging.CRITICAL, console.error, arguments); + }, + assert: function() { + if (this.level <= Sao.Logging.DEBUG) { + console.assert.apply(console, arguments); + } + }, + }); + Sao.Logging.CRITICAL = 50; + Sao.Logging.ERROR = 40; + Sao.Logging.WARNING = 30; + Sao.Logging.INFO = 20; + Sao.Logging.DEBUG = 10; + Sao.Logging.NOTSET = 0; + Sao.Logger = new Sao.Logging(); + Sao.Decimal = Number; var _moment_to_string = moment.prototype.toString; @@ -1095,7 +1136,7 @@ var Sao = {}; try { Notification.requestPermission(); } catch (e) { - (console.error || console.log).call(console, e, e.stack); + Sao.Logger.error(e.message, e.stack); } Sao.login(); }); diff --git a/src/screen.js b/src/screen.js index 3a3920a4d9..6b366aa278 100644 --- a/src/screen.js +++ b/src/screen.js @@ -2112,6 +2112,11 @@ Sao.Session.current_session.cache.clear( 'model.ir.ui.view_tree_state.get'); }; + var set_session_fail = function() { + Sao.Logger.warn( + "Unable to set view tree state for %s", + this.model_name); + }.bind(this); for (i = 0, len = this.views.length; i < len; i++) { view = this.views[i]; if (view.view_type == 'form') { @@ -2152,7 +2157,8 @@ view.children_field, JSON.stringify(paths), JSON.stringify(selected_paths)], {}) - .then(clear_cache); + .then(clear_cache) + .fail(set_session_fail); prms.push(prm); } } @@ -2208,6 +2214,11 @@ } this.tree_states[parent_][view.children_field || null] = state; return state; + }.bind(this)) + .fail(function() { + Sao.Logger.warn( + "Unable to get view tree state for %s", + this.model_name); }.bind(this)); } else { state_prm = jQuery.when(state); diff --git a/src/session.js b/src/session.js index 1e6431a15e..3fd8f1d838 100644 --- a/src/session.js +++ b/src/session.js @@ -169,6 +169,9 @@ localStorage.setItem( 'sao_device_cookies', JSON.stringify(device_cookies)); }.bind(this)); + renew_prm.fail(function() { + Sao.error("Cannot renew device cookie"); + }); } }); @@ -427,6 +430,7 @@ delete this.store[prefix][key]; return undefined; } + Sao.Logger.info("(cached)", prefix, key); return Sao.rpc.convertJSONObject(jQuery.parseJSON(data.value)); }, clear: function(prefix) { diff --git a/src/tab.js b/src/tab.js index f9f4a52f99..3966bfa173 100644 --- a/src/tab.js +++ b/src/tab.js @@ -1195,7 +1195,7 @@ uris = [], texts = []; if (evt.dataTransfer.items) { - console.log(evt.dataTransfer.items); + Sao.Logger.debug("Attach drop items:", evt.dataTransfer.items); for (i = 0; i < evt.dataTransfer.items.length; i++) { var item = evt.dataTransfer.items[i]; if (item.kind == 'string') { diff --git a/src/window.js b/src/window.js index 2cdd12cc27..089b8acfec 100644 --- a/src/window.js +++ b/src/window.js @@ -2122,7 +2122,10 @@ return Sao.rpc({ 'method': 'model.ir.email.complete', 'params': [text, Sao.config.limit, {}], - }, this.session); + }, this.session) + .fail(function() { + Sao.Logger.warn("Unable to complete email entry"); + }); }, _email_format: function(value) { return value[1]; @@ -2233,7 +2236,11 @@ 'text': attachment.rec_name, })); }.bind(this)); - }.bind(this)); + }.bind(this)) + .fail(function() { + Sao.Logger.error( + "Could not fetch attachment for", record); + }); this.files = jQuery('
', { 'class': 'col-md-4', diff --git a/src/wizard.js b/src/wizard.js index 1c1b69bdeb..e719165999 100644 --- a/src/wizard.js +++ b/src/wizard.js @@ -121,7 +121,12 @@ 'params': [this.session_id, this.session.context] }, this.session).then(function(action) { this.destroy(action); - }.bind(this)); + }.bind(this)) + .fail(function() { + Sao.Logger.warn( + "Unable to delete session %s of wizard %s", + this.session_id, this.action); + }); }, clean: function() { this.widget.empty();