feat(score): write user score detail log

This commit is contained in:
OldHawk
2018-05-24 15:51:51 +08:00
parent cd0f0ce382
commit a10d3db01b
7 changed files with 142 additions and 52 deletions

View File

@@ -102,7 +102,7 @@ module.exports = {
* @announceIdleTime: announce time over @announceInterval this value is inactive peer
* @announcePrefix: prefix of torrent file name, is will auto add when user download the torrent files
* @clientBlackListUrl: forbidden download client list url, user can view this list to check forbidden client software
* @announceLogMonths: setting of months to write announce log to db, because the data is too more too big, default value is 1
* @announceLogDays: setting of days to write announce log to db, because the data is too more too big, do not to set a big value
* @daysLogMonths: setting of months to write user days log
* @seedingInFinishedCheck: settings to check whether can seeding an un-download finished torrent
* @downloadCheck: announce download(leech) settings
@@ -134,7 +134,7 @@ module.exports = {
announcePrefix: '{MEAN}.',
sourceInfo: '{MEAN.im} Present by meanTorrent.',
clientBlackListUrl: '/about/black',
announceLogMonths: 1,
announceLogDays: 30,
daysLogMonths: 12,
seedingInFinishedCheck: true,
downloadCheck: {
@@ -429,6 +429,7 @@ module.exports = {
* score system settings
*
* @levelStep: value of each level step, default 500
* @scoreLogDays: setting of days to write score detail log to db, because the data is too more too big, do not to set a big value
* @action: score change action list
* @name: action name
* @value: action score value
@@ -437,8 +438,10 @@ module.exports = {
*/
score: {
levelStep: 1000,
scoreLogDays: 10,
action: {
defaultAction: {name: 'defaultAction', value: 0, enable: true},
adminModify: {name: 'adminModify', value: 0, enable: true},
uploadTorrent: {name: 'uploadTorrent', value: 50, enable: true},
uploadTorrentBeDeleted: {name: 'uploadTorrentBeDeleted', value: -50, enable: true},
@@ -648,14 +651,16 @@ module.exports = {
*
* system trace logs settings
*
* @traceLogDays: setting trace log days, because data to more, do not to set a big value
* @action: trace action list
* @name: action name
* @enable: action enable status, if false, system will not to trace log this action
*
* !IMPORTANT NOTE:
* @userAnnounceData AND @userScoreChange MAKE LARGEST NUMBER DATA RECORD, IF YOU RUNNING MEANTORRENT AT PROD MODE, MUST SET IT TO FALSE
* @userAnnounceData MAKE LARGEST NUMBER DATA RECORD, IF YOU RUNNING MEANTORRENT AT PROD MODE, MUST SET IT TO FALSE
*/
trace: {
traceLogDays: 10,
action: {
AdminUpdateUserRole: {name: 'AdminUpdateUserRole', enable: true},
AdminUpdateUserStatus: {name: 'AdminUpdateUserStatus', enable: true},
@@ -689,9 +694,7 @@ module.exports = {
userSendInvitation: {name: 'userSendInvitation', enable: true},
adminSendOfficialInvitation: {name: 'adminSendOfficialInvitation', enable: true},
userAnnounceData: {name: 'userAnnounceData', enable: false},
userAnnounceFinished: {name: 'userAnnounceFinished', enable: true},
userScoreChange: {name: 'userScoreChange', enable: true},
forumDeleteTopic: {name: 'forumDeleteTopic', enable: true},
forumDeleteReply: {name: 'forumDeleteReply', enable: true}

View File

@@ -15,6 +15,11 @@ var path = require('path'),
Complete = mongoose.model('Complete'),
Message = mongoose.model('Message'),
MailTicket = mongoose.model('MailTicket'),
AnnounceLog = mongoose.model('AnnounceLog'),
UserDaysLog = mongoose.model('UserDaysLog'),
UserMonthsLog = mongoose.model('UserMonthsLog'),
ScoreLog = mongoose.model('ScoreLog'),
Trace = mongoose.model('Trace'),
backup = require('mongodb-backup');
var mtDebug = require(path.resolve('./config/lib/debug'));
@@ -22,9 +27,11 @@ var appConfig = config.meanTorrentConfig.app;
var supportConfig = config.meanTorrentConfig.support;
var backupConfig = config.meanTorrentConfig.backup;
var announceConfig = config.meanTorrentConfig.announce;
var scoreConfig = config.meanTorrentConfig.score;
var signConfig = config.meanTorrentConfig.sign;
var hnrConfig = config.meanTorrentConfig.hitAndRun;
var messageConfig = config.meanTorrentConfig.messages;
var traceConfig = config.meanTorrentConfig.trace;
var inbox = require('inbox');
var simpleParser = require('mailparser').simpleParser;
@@ -75,6 +82,7 @@ module.exports = function (app) {
cronJobs.push(removeGhostPeers());
cronJobs.push(removeOldServerMessages());
cronJobs.push(removeOldLogData());
cronJobs.push(checkUserAccountIdleStatus());
if (hnrConfig.enable) {
@@ -202,12 +210,66 @@ function removeOldServerMessages() {
return cronJob;
}
/**
* removeOldLogData
*/
function removeOldLogData() {
var cronJob = new CronJob({
cronTime: '00 10 1 * * *',
onTick: function () {
logger.info(chalk.green('removeOldLogData: process!'));
//remove announce-log old data
AnnounceLog.remove({
createdAt: {$lt: moment().subtract(announceConfig.announceLogDays, 'days')}
}, function (err) {
if (err) {
logger.error(err);
}
});
//remove user-days-log old data
UserDaysLog.remove({
createdAt: {$lt: moment().subtract(announceConfig.daysLogMonths, 'months')}
}, function (err) {
if (err) {
logger.error(err);
}
});
//remove score-log old data
ScoreLog.remove({
createdAt: {$lt: moment().subtract(scoreConfig.scoreLogDays, 'days')}
}, function (err) {
if (err) {
logger.error(err);
}
});
//remove trace-log old data
Trace.remove({
createdat: {$lt: moment().subtract(traceConfig.traceLogDays, 'days')}
}, function (err) {
if (err) {
logger.error(err);
}
});
},
start: false,
timeZone: appConfig.cronTimeZone
});
cronJob.start();
return cronJob;
}
/**
* checkUserAccountIdleStatus
*/
function checkUserAccountIdleStatus() {
var cronJob = new CronJob({
cronTime: '00 10 1 * * *',
cronTime: '00 15 1 * * *',
// cronTime: '*/30 * * * * *',
onTick: function () {
logger.info(chalk.green('checkUserAccountIdleStatus: process!'));

View File

@@ -44,15 +44,6 @@ module.exports.announceLog = function (user, torrent, data) {
}
});
//remove announce-log old data
AnnounceLog.remove({
createdAt: {$lt: moment().subtract(announceConfig.announceLogMonths, 'months')}
}, function (err) {
if (err) {
logger.error(err);
}
});
//write userDaysLog
var mom = moment().utcOffset(appConfig.dbTimeZone);
var y = mom.get('year');
@@ -80,15 +71,6 @@ module.exports.announceLog = function (user, torrent, data) {
if (err) {
logger.error(err);
} else {
//remove user-days-log old data
UserDaysLog.remove({
createdAt: {$lt: moment().subtract(announceConfig.daysLogMonths, 'months')}
}, function (err) {
if (err) {
logger.error(err);
}
});
//write userMonthsLog
UserMonthsLog.findOneAndUpdate(
{
@@ -146,15 +128,6 @@ module.exports.scoreLog = function (user, score) {
if (err) {
logger.error(err);
} else {
//remove user-days-log old data
UserDaysLog.remove({
createdAt: {$lt: moment().subtract(announceConfig.daysLogMonths, 'months')}
}, function (err) {
if (err) {
logger.error(err);
}
});
//write userMonthsLog
UserMonthsLog.findOneAndUpdate(
{

View File

@@ -7,10 +7,8 @@ var path = require('path'),
common = require(path.resolve('./config/lib/common')),
mongoose = require('mongoose'),
User = mongoose.model('User'),
traceLogCreate = require(path.resolve('./config/lib/tracelog')).create;
ScoreLog = mongoose.model('ScoreLog');
var traceConfig = config.meanTorrentConfig.trace;
var examinationConfig = config.meanTorrentConfig.examination;
var scoreConfig = config.meanTorrentConfig.score;
var mtDebug = require(path.resolve('./config/lib/debug'));
@@ -44,10 +42,18 @@ module.exports.update = function (req, user, action, value, writeLog = true) {
if (err) {
logger.error(err);
} else {
traceLogCreate(req, traceConfig.action.userScoreChange, {
user: user._id,
var sl = new ScoreLog({
user: user,
score: v,
scoreActionName: action.name
reason: {
event: action.name,
params: action.params
}
});
sl.save(function (err) {
if (err) {
logger.error(err);
}
});
}
});

View File

@@ -680,21 +680,14 @@ exports.announce = function (req, res) {
downUnitScore: downUnitScore,
seederUnit: seederUnit,
lifeUnit: lifeUnit
},
info: {
agent: req.get('User-Agent'),
ip: req.cf_ip,
port: query.port
}
};
dataLog.announceLog(req.passkeyuser, req.torrent, logData);
//create trace log
var traceData = {
user: req.passkeyuser._id,
torrent: req.torrent._id,
agent: req.get('User-Agent'),
ip: req.cf_ip,
port: query.port,
traceData: logData
};
traceLogCreate(req, traceConfig.action.userAnnounceData, traceData);
}
}

View File

@@ -0,0 +1,37 @@
'use strict';
/**
* Module dependencies
*/
var mongoose = require('mongoose'),
Schema = mongoose.Schema;
/**
* Peer Schema
*/
var ScoreLogSchema = new Schema({
user: {
type: Schema.Types.ObjectId,
ref: 'User'
},
score: {
type: Schema.Types.Decimal128,
get: function (v) {
return parseFloat(parseFloat(v).toFixed(2)) || 0;
},
default: 0
},
reason: {
event: {type: String, trim: true, default: ''},
params: {type: Object}
},
createdAt: {
type: Date,
default: Date.now
}
}, {usePushEach: true});
ScoreLogSchema.index({user: 1, createdAt: -1});
mongoose.model('ScoreLog', ScoreLogSchema);

View File

@@ -14,6 +14,7 @@ var path = require('path'),
Complete = mongoose.model('Complete'),
moment = require('moment'),
async = require('async'),
ScoreLog = mongoose.model('ScoreLog'),
scoreUpdate = require(path.resolve('./config/lib/score')).update,
errorHandler = require(path.resolve('./modules/core/server/controllers/errors.server.controller')),
traceLogCreate = require(path.resolve('./config/lib/tracelog')).create;
@@ -305,11 +306,26 @@ exports.updateUserScore = function (req, res) {
res.json(user);
//write score detail log
var sl = new ScoreLog({
user: user,
score: sv,
reason: {
event: scoreConfig.action.adminModify.name,
params: undefined
}
});
sl.save(function (err) {
if (err) {
mtDebug.debugError(err);
}
});
//write score days/months log
dataLog.scoreLog(user, sv);
//create trace log
traceLogCreate(req, traceConfig.action.AdminUpdateUserScore, {
user: user._id,
score: req.body.userScore
score: sv
});
});
};