c9-core/plugins/c9.ide.run/run_analytics.js

98 wiersze
3.5 KiB
JavaScript

define(function(require, exports, module) {
main.consumes = [
"run", "output", "c9.analytics", "analytics.cookie"
];
main.provides = ["run_analytics"];
module.exports = main;
return main;
function main(options, imports, register) {
var analytics = imports["c9.analytics"];
var cookie = imports["analytics.cookie"];
var run = imports.run;
var output = imports.output;
var COOKIE_RUNNERS_NAME = "c9_runners_timestamp";
var analyticsOptions = {
integrations: {
"All": false
}
};
run.on("create", function(e) {
if (!e.process.runner)
return;
// Gets called whenever one creates a new process
var runner = e.process.runner;
var builtin = runner.$builtin;
var runnerName = runner.caption;
var cmdLength = runner.cmd && runner.cmd.length;
var properties = {
builtin: builtin,
runnerName: runnerName,
numParamsInCommand: cmdLength
};
// Once a day, if the Runner isn't used yet, track in all providers
try {
var rCookie = JSON.parse(cookie.get(COOKIE_RUNNERS_NAME));
if (!rCookie[runnerName] ||
!rCookie[runnerName].lastTimeLogged ||
rCookie[runnerName].lastTimeLogged === "" ||
new Date(parseInt(rCookie[runnerName].lastTimeLogged,
10)).getDate() != new Date().getDate()) {
sendToAllIntegrations(rCookie);
}
}
catch (e) {
sendToAllIntegrations(rCookie);
}
function sendToAllIntegrations(rCookie) {
analyticsOptions.integrations["Mixpanel"] = true;
rCookie = rCookie ? rCookie : {};
rCookie[runnerName] = { lastTimeLogged: Date.now() };
cookie.set(COOKIE_RUNNERS_NAME, JSON.stringify(rCookie), 1);
}
});
// "runConfigSaved" is fired on every change & IDE load, so discarding
// Send event when Runner Name changes, which is effectively saving a
// Runner Config
output.on("runnerNameChanged", function(name) {
analyticsOptions.integrations["Mixpanel"] = true;
var properties = {
runnerName: name
};
analytics.track("Runner Config Saved", properties,
analyticsOptions);
});
// Send event when CWD is set
output.on("cwdSet", function(cwd) {
// we don't want to send the exact CWD (privacy), but it's
// interesting to know if it differs from the root
var properties = {
isRoot: true
};
if (cwd != "/")
properties.isRoot = false;
analytics.track("CWD Set On Runner", properties, analyticsOptions);
});
// Send event when Environment variables are set
output.on("envSet", function(envVariable, config) {
var properties = {
numEnvironmentVariables: Object.keys(config).length
};
analytics.track("Environment Variables Set On Runner", properties,
analyticsOptions);
});
register(null, {
"run_analytics": {}
});
}
});