// Interface to stats define(["settings","sugar-web/datastore"], function(preferences, datastore) { var stats = {}; var source = 'Sugarizer'; // Compute stat function computeStat(object, action, label, value) { var stat = {}; stat.user_id = preferences.getNetworkId(); stat.user_agent = navigator.userAgent; stat.timestamp = new Date().getTime(); stat.client_type = util.getClientName(); stat.event_source = source; stat.event_object = object; stat.event_action = action; stat.event_label = label; stat.event_value = value; return stat; } // Send log to the API function sendStats(statslist, ok, notOk) { myserver.postStats(statslist, function() { if (ok) ok(); }, function(response, error) { if (response.code != 20) { console.log("Error sending log"); } if (notOk) notOk(); }); } // Test is stat is active stats.isActive = function() { // No logging privacy if (!preferences.getOptions("stats")) { return false; } // Not connected if (!preferences.isConnected()) { return false; } // Statistics not active on server var info = preferences.getServer(); if (!info || !info.options || !info.options.statistics) { return false; } return true; } // Trace an action stats.trace = function(object, action, label, value) { // Stat is active ? if (!stats.isActive()) { return; } // Compute stat console.log(source+": "+action+"("+object+", "+label+", "+value+")"); var stat = computeStat(object, action, label, value); // Add stat to localStorage array var statslist = datastore.localStorage.getValue('sugar_stats'); if (!statslist) { statslist = []; } statslist.push(stat); // Send stats to server when package size reached datastore.localStorage.setValue('sugar_stats', statslist); if (statslist.length >= constant.statPackageSize) { console.log(source+": "+"Send stat to server"); sendStats(statslist, function() { datastore.localStorage.setValue('sugar_stats', []); }, function() { // Ensure local array don't grow for ever if (statslist.length > constant.statMaxLocalSize) { statslist.shift(); datastore.localStorage.setValue('sugar_stats', statslist); } }); } } return stats; });