mirror of
https://github.com/HabitRPG/habitica.git
synced 2025-12-17 14:47:53 +01:00
more migration fixes, fix up metrics.js
This commit is contained in:
@@ -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};
|
||||||
|
|||||||
@@ -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,13 +72,14 @@ 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}
|
||||||
};
|
};
|
||||||
|
|
||||||
print('corrupt: ' + db.users.count(corrupt));
|
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));
|
||||||
|
*/
|
||||||
@@ -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"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user