docs/meteor/client/lib/metrics.js

85 lines
1.9 KiB
JavaScript

var remote = require('remote');
var app = remote.require('app');
var crypto = require('crypto');
var uuid = require('node-uuid');
var path = require('path');
var fs = require('fs');
var level = require('levelup');
var db;
Metrics = {};
Metrics.enable = function () {
db.put('metrics.enabled', true);
};
Metrics.disable = function () {
db.put('metrics.enabled', false);
};
Metrics.enabled = function (callback) {
db.get('metrics.enabled', function (err, value) {
if (err) {
callback(false);
} else {
callback(value);
}
});
};
Metrics.trackEvent = function (name) {
if (!name) {
return;
}
db.get('metrics.enabled', function (err, value) {
if (err || !value) {
return;
}
db.get('metrics.uuid', function (err, uuid) {
if (err) {
return;
}
var osVersion = navigator.userAgent.match(/Mac OS X (\d+_\d+_\d+)/)[1].replace(/_/g, '.');
mixpanel.track(name, {
distinct_id: uuid,
version: app.getVersion(),
product: 'Docker GUI',
'Operating System Version': osVersion
});
});
});
};
Metrics.prepareUUID = function (callback) {
db.get('metrics.uuid', function (err, value) {
if (err && err.notFound) {
db.put('metrics.uuid', uuid.v4(), function (err) {
callback();
});
} else {
callback();
}
});
};
Metrics.prepareTracking = function (callback) {
db = level(Util.getMetricsDir());
db.get('metrics.enabled', function (err, value) {
if (err && err.notFound) {
var settings = Settings.findOne();
if (settings && settings.tracking) {
db.put('metrics.enabled', !!settings.tracking, function(err) {
Metrics.prepareUUID(callback);
});
} else {
db.put('metrics.enabled', true, function (err) {
Metrics.prepareUUID(callback);
});
}
} else {
Metrics.prepareUUID(callback);
}
});
};