summaryrefslogtreecommitdiff
path: root/addons/web_analytics
diff options
context:
space:
mode:
authorvta vta@openerp.com <>2012-10-26 16:02:39 +0200
committervta vta@openerp.com <>2012-10-26 16:02:39 +0200
commit9e758119b16eccd783030d13ea7300f29db54e6f (patch)
tree6c27d181cba37a62503f644ef195dcf439d490eb /addons/web_analytics
parent21b916349a89bb9274667f135f1f9d79908c4057 (diff)
[IMP] Improved tracking code.
bzr revid: vta@openerp.com-20121026140239-22pb87v79y015uy0
Diffstat (limited to 'addons/web_analytics')
-rw-r--r--addons/web_analytics/__openerp__.py2
-rw-r--r--addons/web_analytics/static/src/js/web_analytics.js138
2 files changed, 96 insertions, 44 deletions
diff --git a/addons/web_analytics/__openerp__.py b/addons/web_analytics/__openerp__.py
index 2fa95c7398b..66ec959ac7b 100644
--- a/addons/web_analytics/__openerp__.py
+++ b/addons/web_analytics/__openerp__.py
@@ -31,7 +31,7 @@ Collects web application usage with Google Analytics.
""",
'author': 'OpenERP SA',
'website': 'http://openerp.com',
- 'depends': ['web'],
+ 'depends': ['web', 'auth_signup'],
'data': [],
'installable': True,
'active': False,
diff --git a/addons/web_analytics/static/src/js/web_analytics.js b/addons/web_analytics/static/src/js/web_analytics.js
index e9f83780a2d..e76488e4b45 100644
--- a/addons/web_analytics/static/src/js/web_analytics.js
+++ b/addons/web_analytics/static/src/js/web_analytics.js
@@ -4,32 +4,29 @@ var _gaq = _gaq || []; // asynchronous stack used by google analytics
openerp.web_analytics = function(instance) {
/** The Google Analytics Module inserts the Google Analytics JS Snippet
- * at the top of the page, and sends to google a virtual url each time the
- * openerp url is changed. Google needs a virtual url because it cannot
- * handle sharps in the url. At this time the virtual url only handles the
- * model and view parameters and is of the form /web_analytics/redirect/MODEL/VIEW
- *
- * The pushes of the virtual urls is made by adding a callback to the
+ * at the top of the page, and sends to google an url each time the
+ * openerp url is changed.
+ * The pushes of the urls is made by triggering the 'state_pushed' event in the
* web_client.do_push_state() method which is responsible of changing the openerp current url
*/
+ // Google Analytics Code snippet
+ (function() {
+ var ga = document.createElement('script');
+ ga.type = 'text/javascript';
+ ga.async = true
+ ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+ var s = document.getElementsByTagName('script')[0];
+ s.parentNode.insertBefore(ga,s);
+ })();
+
if (instance.webclient) {
- // _gaq.push(['_setAccount', 'UA-25293939-2']); // fva@openerp.com localhost
- // _gaq.push(['_setAccount', 'UA-28648768-1']); // fva@openerp.com runbot
- // _gaq.push(['_setAccount', 'UA-28648768-1']); // fva@openerp.com
- // _gaq.push(['_setAccount', 'UA-7333765-1']); // fp@openerp.com
- // _gaq.push(['_setAccount', 'UA-7333765-1']); // fp@openerp.com
- // _gaq.push(['_setDomainName', '.openerp.com']);
+ // Set the account and domain to start tracking
_gaq.push(['_setAccount', 'UA-35793871-1']); // vta@openerp.com localhost
- _gaq.push(['_setDomainName', 'none']);
- _gaq.push(['_trackPageview']);
- _gaq.push(['_deleteCustomVar', 1]);
- _gaq.push(['_deleteCustomVar', 2]);
- _gaq.push(['_deleteCustomVar', 3]);
- _gaq.push(['_deleteCustomVar', 4]);
- _gaq.push(['_deleteCustomVar', 5]);
+ _gaq.push(['_setDomainName', 'none']); // Change for the real domain
+ // Track user types
if (instance.session.uid !== 1) {
if ((/\.demo.openerp.com/).test(instance.session.server)) {
_gaq.push(['_setCustomVar', 1, 'User Type', 'Demo User', 1]);
@@ -40,43 +37,98 @@ openerp.web_analytics = function(instance) {
_gaq.push(['_setCustomVar', 1, 'User Type', 'Admin User', 1]);
}
- // Google Analytics Code snippet
- (function() {
- var ga = document.createElement('script');
- ga.type = 'text/javascript';
- ga.async = true
- ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
- var s = document.getElementsByTagName('script')[0];
- s.parentNode.insertBefore(ga,s);
- })();
+ // Track object usage
+ _gaq.push(['_setCustomVar', 2, 'Object', 'no_model', 3]);
+ // Tack view usage
+ _gaq.push(['_setCustomVar', 3, 'View Type', 'default', 3]);
+
+ _gaq.push(['_trackPageview']);
var self = this;
instance.webclient.on('state_pushed', self, function(state) {
- var url = '/' + window.location.hash;
- _gaq.push(['_trackPageview', url]);
- var model = state["model"] || "no_model";
- var view_type = state["view_type"] || "default";
- _gaq.push(['_setCustomVar', 2, 'Object', model, 3]);
- _gaq.push(['_setCustomVar', 3, 'View Type', view_type, 3]);
+ // Track only pages corresponding to a 'normal' view of OpenERP, views
+ // related to client actions are tracked by the action manager
+ if (state.model && state.view_type) {
+ // Track object usage
+ _gaq.push(['_setCustomVar', 2, 'Object', state.model, 3]);
+ // Tack view usage
+ _gaq.push(['_setCustomVar', 3, 'View Type', state.view_type, 3]);
+ // Track the page
+ var url = instance.web_analytics.parseUrl({'model': state.model, 'view_type': state.view_type});
+ _gaq.push(['_trackPageview', url]);
+ }
});
}
+ // Track the events related with the creation and the modification of records
instance.web.FormView = instance.web.FormView.extend({
- save: function(prepend_on_create) {
- if (!this.datarecord.id) {
- _gaq.push(['_trackEvent', this.model, 'on_button_save', 'Save']);
+ init: function(parent, dataset, view_id, options) {
+ this._super.apply(this, arguments);
+ var self = this;
+ this.on('record_created', self, function(r) {
+ var url = instance.web_analytics.parseUrl({'model': this.model, 'view_type': 'form'});
+ _gaq.push(['_trackEvent', this.model, 'on_button_create_save', url]);
+ });
+ this.on('record_saved', self, function(r) {
+ var url = instance.web_analytics.parseUrl({'model': this.model, 'view_type': 'form'});
+ _gaq.push(['_trackEvent', this.model, 'on_button_edit_save', url]);
+ });
+ }
+ });
+
+ // Track client actions
+ instance.web.ActionManager.include({
+ ir_actions_client: function (action, options) {
+ var url = instance.web_analytics.parseUrl({'action': action.tag});
+ _gaq.push(['_trackPageview', url]);
+ return this._super.apply(this, arguments);
+ },
+ });
+
+ // Track button events
+ instance.web.View.include({
+ do_execute_action: function(action_data, dataset, record_id, on_closed) {
+ console.log(action_data);
+ var category = this.model || dataset.model || '';
+ var action;
+ if (action_data.name && _.isNaN(action_data.name-0)) {
+ action = action_data.name;
} else {
- _gaq.push(['_trackEvent', this.model, 'on_button_edit', 'Save']);
+ action = action_data.string || action_data.special || '';
}
+ var label = instance.web_analytics.parseUrl({'model': category, 'view_type': this.view_type});
+ _gaq.push(['_trackEvent', category, action, label]);
return this._super.apply(this, arguments);
- }
+ },
});
- instance.web.form.WidgetButton = instance.web.form.WidgetButton.extend({
- on_confirmed: function() {
- _gaq.push(['_trackEvent', this.view.model, this.node.attrs.name, this.node.attrs.string]);
- return this._super.apply(this, arguments);
+ // Track error events
+ instance.web.CrashManager = instance.web.CrashManager.extend({
+ show_error: function(error) {
+ var hash = window.location.hash;
+ var params = $.deparam(hash.substr(hash.indexOf('#')+1));
+ var options = {};
+ if (params.model && params.view_type) {
+ options = {'model': params.model, 'view_type': params.view_type};
+ } else {
+ options = {'action': params.action};
+ }
+ var label = instance.web_analytics.parseUrl(options);
+ if (error.code) {
+ _gaq.push(['_trackEvent', error.message, error.data.fault_code, label, ,true]);
+ } else {
+ _gaq.push(['_trackEvent', error.type, error.data.debug, label, ,true]);
+ }
+ this._super.apply(this, arguments);
},
});
+ instance.web_analytics.parseUrl = function(options) {
+ var url = '';
+ _.each(options, function(value, key) {
+ url += '/' + key + '=' + value;
+ });
+ return url;
+ };
+
}; \ No newline at end of file