cleanup cron

This commit is contained in:
Tyler Renelle 2013-01-28 15:53:26 -05:00
parent 63c6420b87
commit 2db92d72a5
2 changed files with 22 additions and 33 deletions

View file

@ -1,19 +0,0 @@
// run with %mongo server:port/dbname node_modules/moment/moment.js migrations/my_commands.js
var unRegistered = { 'auth.local': { $exists: false }, 'auth.facebook': { $exists: false} },
registered = { $or: [
{ 'auth.local': { $exists: true } },
{ 'auth.facebook': { $exists: true} }
]};
db.users.count(registered);
db.users.count(unRegistered);
db.users.find(unRegistered).forEach(function(user) {
var lastCron = new Date(user.lastCron),
today = new Date(),
diff = Math.abs(moment(today).sod().diff(moment(lastCron).sod(), 'days'));
if (diff > 30) {
db.users.remove({ _id: user._id });
}
});
db.users.count(registered);
db.users.count(unRegistered);

View file

@ -2,9 +2,14 @@ moment = require('moment')
mongo = require("mongoskin")
_ = require('underscore')
module.exports.deleteStaleAccounts = () ->
###
Users are allowed to experiment with the site before registering. Every time a new browser visits habitrpg, a new
"staged" account is created - and if the user later registeres, that staged account is considered a "production" account.
This function removes all staged accounts that have been abandoned - either older than a month, or corrupted in some way (lastCron==undefined)
###
module.exports.deleteStaleAccounts = ->
unRegistered = { "auth.local": {$exists: false} , "auth.facebook": {$exists: false} }
un_registered = { "auth.local": {$exists: false} , "auth.facebook": {$exists: false} }
registered = registered = { $or: [
{ 'auth.local': { $exists: true } },
{ 'auth.facebook': { $exists: true} }
@ -13,21 +18,24 @@ module.exports.deleteStaleAccounts = () ->
collection = mongo.db(process.env.NODE_DB_URI, {safe:true}).collection("users")
collection.count registered, (err, result) -> console.log("#{result} registered users [before]")
collection.count unRegistered, (err, result) -> console.log("#{result} un-registered users [before]")
collection.count un_registered, (err, result) -> console.log("#{result} un-registered users [before]")
today = +new Date
isValidDate = (d) ->
return false if Object::toString.call(d) isnt "[object Date]"
not isNaN(d.getTime())
today = +new Date
collection.findEach unRegistered, (err, user) ->
throw err if err
return unless user?
lastCron = new Date(user.lastCron)
return unless isValidDate(lastCron) # still gotta figure out what to do with users with "undefined" lastCron
diff = Math.abs(moment(today).sod().diff(moment(lastCron).sod(), "days"))
if diff > 15
collection.remove {_id: user._id}, (err, res) -> throw err if err
removeAccount = (collection, id) -> collection.remove {_id: id}, (err, res) -> throw err if err
collection.count registered, (err, result) -> console.log("#{result} registered users [after]")
collection.count unRegistered, (err, result) -> console.log("#{result} un-registered users [after]")
collection.findEach un_registered, (err, user) ->
throw err if err
return unless user? #why does this happen sometimes?
lastCron = new Date(user.lastCron)
if !isValidDate(lastCron)
removeAccount(collection, user._id)
return
diff = Math.abs(moment(today).sod().diff(moment(lastCron).sod(), "days"))
if diff > 30
removeAccount(collection, user._id)
return