mirror of
https://github.com/taobataoma/meanTorrent.git
synced 2026-02-26 08:11:01 +01:00
feat(score): write user score detail log
This commit is contained in:
13
config/env/torrents.js
vendored
13
config/env/torrents.js
vendored
@@ -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}
|
||||
|
||||
@@ -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!'));
|
||||
|
||||
@@ -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(
|
||||
{
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
37
modules/data-logs/server/models/score-log.server.model.js
Normal file
37
modules/data-logs/server/models/score-log.server.model.js
Normal 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);
|
||||
@@ -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
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user