more migration fixes, fix up metrics.js

This commit is contained in:
Tyler Renelle
2013-10-30 18:58:09 -07:00
parent 4764bf738c
commit a90f37f35c
4 changed files with 62 additions and 24 deletions

View File

@@ -40,6 +40,11 @@ db.users.find().forEach(function(user){
_.defaults(user.auth.timestamps, {created: new Date(user.lastCron), loggedin: new Date(user.lastCron)}); _.defaults(user.auth.timestamps, {created: new Date(user.lastCron), loggedin: new Date(user.lastCron)});
} }
// Fix missing history
// -------------------------
_.defaults(user, {history:{}});
_.defaults(user.history,{exp:[], todos:[]});
// Add username // Add username
// ------------------------- // -------------------------
if (!user.profile) user.profile = {name:undefined}; if (!user.profile) user.profile = {name:undefined};

View File

@@ -1,9 +1,51 @@
// mongo habitrpg ./migrations/metrics.js // node habitrpg ./migrations/metrics.js
var EXPORT_EMAILS = true;
var mongo = require('mongoskin');
var csv = require('csv');
var _ = require('lodash');
var moment = require('moment');
var db = mongo.db('localhost:27017/habitrpg2?auto_reconnect');
var twoWeeksAgo = moment().subtract(14, 'days');
var angularRewrite = moment('07/09/2013');
var query = {auth: {'$exists':1}};
var fields = {lastCron:1, 'history.exp':1, 'auth.timestamps':1, 'auth.local.email':1};
db.collection('users').find(query, fields).toArray(function(err, items) {
if (err) return console.error({err:err});
var stats = {total: _.size(items), lostToDerby: 0, isActive: 0};
var emails = [];
_.each(items, function(item) {
//if (!item.history || !item.history.exp) console.log(item._id)
//var hasBeenActive = item.history && item.history.exp && item.history.exp.length > 7;
var hasBeenActive = item.auth.timestamps && item.auth.timestamps.created &&
(Math.abs(moment(item.lastCron).diff(item.auth.timestamps.created, 'd')) > 14);
if (hasBeenActive && moment(item.lastCron).isBefore(angularRewrite))
stats.lostToDerby++;
if (hasBeenActive && moment(item.lastCron).isAfter(twoWeeksAgo))
stats.isActive++;
if (item.auth.local) {
emails.push([item.auth.local.email]);
// Facebook emails. Kinda dirty, and there's only ~30 available fb emails anyway.
// } else if (item.auth.facebook && item.auth.facebook.email) {
// emails.push([item.auth.facebook.email])
// } else if (item.auth.facebook && item.auth.facebook.emails && item.auth.facebook.emails[0] && !!item.auth.facebook.emails[0].value) {
// emails.push([item.auth.facebook.emails[0].value])
}
})
stats.emails = _.size(emails);
console.log(stats);
if (EXPORT_EMAILS)
csv().from.array(emails).to.path(__dirname+'/emails.csv')
});
/*
load('./node_modules/moment/moment.js'); load('./node_modules/moment/moment.js');
var today = +new Date,
var
today = +new Date,
twoWeeksAgo = +moment().subtract(14, 'days'); twoWeeksAgo = +moment().subtract(14, 'days');
corrupt = { corrupt = {
@@ -30,9 +72,9 @@ var
{ 'auth.local': { $exists: true }}, { 'auth.local': { $exists: true }},
{ 'auth.facebook': { $exists: true }} { 'auth.facebook': { $exists: true }}
], ],
// $where: function(){ $where: function(){
// return this.history && this.history.exp && this.history.exp.length > 7; return this.history && this.history.exp && this.history.exp.length > 7;
// }, },
'lastCron': {$gt: twoWeeksAgo} 'lastCron': {$gt: twoWeeksAgo}
}; };
@@ -40,3 +82,4 @@ print('corrupt: ' + db.users.count(corrupt));
print('unregistered: ' + db.users.count(un_registered)); print('unregistered: ' + db.users.count(un_registered));
print('registered: ' + db.users.count(registered)); print('registered: ' + db.users.count(registered));
print('active: ' + db.users.count(active)); print('active: ' + db.users.count(active));
*/

View File

@@ -74,6 +74,7 @@
"karma-ng-html2js-preprocessor": "~0.1.0", "karma-ng-html2js-preprocessor": "~0.1.0",
"karma-chai-plugins": "~0.1.0", "karma-chai-plugins": "~0.1.0",
"mocha": "~1.12.1", "mocha": "~1.12.1",
"karma-mocha": "~0.1.0" "karma-mocha": "~0.1.0",
"csv": "~0.3.6"
} }
} }

View File

@@ -81,21 +81,11 @@ var UserSchema = new Schema({
rest: {type: Boolean, 'default': false} // fixme - change to preferences.resting once we're off derby rest: {type: Boolean, 'default': false} // fixme - change to preferences.resting once we're off derby
}, },
history: { history: {
exp: [ exp: [{date: Date, value: Number}],
{ todos: [{data: Date, value: Number}]
date: Date,
value: Number
}
],
todos: [
{
data: Date,
value: Number
}
]
}, },
/* FIXME remove?*/
/* FIXME remove?*/
invitations: { invitations: {
guilds: {type: Array, 'default': []}, guilds: {type: Array, 'default': []},
party: Schema.Types.Mixed party: Schema.Types.Mixed
@@ -153,14 +143,13 @@ var UserSchema = new Schema({
pets: Array pets: Array
}, },
// FIXME store as Date?
lastCron: { lastCron: {
type: Date, type: Date,
'default': Date.now 'default': Date.now
}, },
// FIXME remove?
// FIXME remove?
party: { party: {
//party._id // FIXME make these populate docs? //party._id // FIXME make these populate docs?
current: String, // party._id current: String, // party._id