From 9b849544a2947bb25edcfa41cfafbdf7c5edb255 Mon Sep 17 00:00:00 2001 From: OldHawk Date: Mon, 11 Sep 2017 12:28:52 +0800 Subject: [PATCH] feat(peer): add speed and ratio,percent fields info model peer and auto count ratio and percent --- .../server/models/peer.server.model.js | 58 +++++++++++++++++++ 1 file changed, 58 insertions(+) diff --git a/modules/torrents/server/models/peer.server.model.js b/modules/torrents/server/models/peer.server.model.js index 852e6156..6e0546e7 100644 --- a/modules/torrents/server/models/peer.server.model.js +++ b/modules/torrents/server/models/peer.server.model.js @@ -40,10 +40,26 @@ var PeerSchema = new Schema({ type: Number, default: 0 }, + peer_uspeed: { + type: Number, + default: 0 + }, + peer_dspeed: { + type: Number, + default: 0 + }, + peer_ratio: { + type: Number, + default: 0 + }, peer_left: { type: Number, default: 0 }, + peer_percent: { + type: Number, + default: 0 + }, peer_status: { type: String, default: 'leecher', @@ -73,6 +89,48 @@ var PeerSchema = new Schema({ } }); + +/** + * Hook a pre save method + */ +PeerSchema.pre('save', function (next) { + countRatio(this); + countPercent(this); + next(); +}); + +/** + * Hook a pre update method + */ +PeerSchema.pre('update', function (next) { + countRatio(this); + countPercent(this); + next(); +}); + +/** + * countRatio + * @param t + */ +function countRatio(p) { + if (p.peer_uploaded > 0 && p.peer_downloaded === 0) { + p.peer_ratio = -1; + } else if (p.peer_uploaded === 0 || p.peer_downloaded === 0) { + p.peer_ratio = 0; + } else { + p.peer_ratio = Math.round((p.peer_uploaded / p.peer_downloaded) * 100) / 100; + } +} + +/** + * countPercent + * @param p + */ +function countPercent(p) { + p.peer_percent = Math.round((p.peer_downloaded / (p.peer_downloaded + p.peer_left)) * 10000) / 100; +} + + PeerSchema.index({user: -1, startedat: -1}); PeerSchema.index({info_hash: -1, startedat: -1}); PeerSchema.index({torrent: -1, startedat: -1});