|
// keep N-day worth of data |
|
var days=7; |
|
|
|
// change to false to have the script to really exclude old records |
|
// from the database. While true, no change at all will be made to the DB |
|
var dryrun=true; |
|
|
|
var now = new Date().getTime(), |
|
time_criteria = now - days * 86400 * 1000, |
|
time_criteria_in_seconds = time_criteria / 1000; |
|
|
|
print((dryrun ? "[dryrun] " : "") + "pruning data older than " + days + " days (" + time_criteria + ")... "); |
|
|
|
use ace; |
|
var collectionNames = db.getCollectionNames(); |
|
for (i=0; i<collectionNames.length; i++) { |
|
var name = collectionNames[i]; |
|
var query = null; |
|
|
|
if (name === 'event' || name === 'alarm') { |
|
query = {time: {$lt:time_criteria}}; |
|
} |
|
|
|
// rogue ap |
|
if (name === 'rogue') { |
|
query = {last_seen: {$lt:time_criteria_in_seconds}}; |
|
} |
|
|
|
// removes vouchers expired more than '$days' ago |
|
// active and unused vouchers are NOT touched |
|
if (name === 'voucher') { |
|
query = {end_time: {$lt:time_criteria_in_seconds}}; |
|
} |
|
|
|
// guest authorization |
|
if (name === 'guest') { |
|
query = {end: {$lt:time_criteria_in_seconds}}; |
|
} |
|
|
|
// if an user was only seen ONCE, $last_seen will not be defined |
|
// so, if $last_seen not defined, lets use $first_seen instead |
|
// also check if $blocked or $use_fixedip is set. If true, do NOT purge the |
|
// entry no matter how old it is. We want blocked/fixed_ip users to continue |
|
// blocked/fixed_ip. Also noted users should not be deleted. |
|
if (name === 'user') { |
|
query = { blocked: { $ne: true}, use_fixedip: { $ne: true}, noted: { $ne: true}, $or: [ |
|
{last_seen: {$lt:time_criteria_in_seconds} }, |
|
{last_seen: {$exists: false}, first_seen: {$lt:time_criteria_in_seconds} } |
|
] |
|
}; |
|
} |
|
|
|
if (query) { |
|
count1 = db.getCollection(name).count(); |
|
count2 = db.getCollection(name).find(query).count(); |
|
print((dryrun ? "[dryrun] " : "") + "pruning " + count2 + " entries (total " + count1 + ") from " + name + "... "); |
|
if (!dryrun) { |
|
db.getCollection(name).remove(query); |
|
db.runCommand({ compact: name }); |
|
} |
|
} |
|
} |
|
|
|
if (!dryrun) db.repairDatabase(); |
|
|
|
use ace_stat; |
|
var collectionNames = db.getCollectionNames(); |
|
for (i=0; i<collectionNames.length; i++) { |
|
var name = collectionNames[i]; |
|
var query = null; |
|
|
|
// historical stats (stat.*) |
|
if (name.indexOf('stat')==0) { |
|
query = {time: {$lt:time_criteria}}; |
|
} |
|
|
|
if (query) { |
|
count1 = db.getCollection(name).count(); |
|
count2 = db.getCollection(name).find(query).count(); |
|
print((dryrun ? "[dryrun] " : "") + "pruning " + count2 + " entries (total " + count1 + ") from " + name + "... "); |
|
if (!dryrun) { |
|
db.getCollection(name).remove(query); |
|
db.runCommand({ compact: name }); |
|
} |
|
} |
|
} |
|
|
|
if (!dryrun) db.repairDatabase(); |