// 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;
|
|
});
|