01: /*
02: * This file is part of DrFTPD, Distributed FTP Daemon.
03: *
04: * DrFTPD is free software; you can redistribute it and/or modify
05: * it under the terms of the GNU General Public License as published by
06: * the Free Software Foundation; either version 2 of the License, or
07: * (at your option) any later version.
08: *
09: * DrFTPD is distributed in the hope that it will be useful,
10: * but WITHOUT ANY WARRANTY; without even the implied warranty of
11: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12: * GNU General Public License for more details.
13: *
14: * You should have received a copy of the GNU General Public License
15: * along with DrFTPD; if not, write to the Free Software
16: * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17: */
18: package org.drftpd.slaveselection.filter;
19:
20: import net.sf.drftpd.NoAvailableSlaveException;
21: import net.sf.drftpd.master.config.FtpConfig;
22:
23: import org.drftpd.PropertyHelper;
24: import org.drftpd.Time;
25: import org.drftpd.master.RemoteSlave;
26: import org.drftpd.remotefile.LinkedRemoteFileInterface;
27: import org.drftpd.usermanager.User;
28:
29: import java.net.InetAddress;
30:
31: import java.util.Iterator;
32: import java.util.Properties;
33:
34: /**
35: * @author mog
36: * @version $Id: MintimeonlineFilter.java 936 2005-01-31 22:25:52Z mog $
37: */
38: public class MintimeonlineFilter extends Filter {
39: private long _minTime;
40: private float _multiplier;
41:
42: public MintimeonlineFilter(FilterChain fc, int i, Properties p) {
43: _minTime = Time.parseTime(PropertyHelper.getProperty(p, i
44: + ".mintime"));
45: _multiplier = BandwidthFilter.parseMultiplier(PropertyHelper
46: .getProperty(p, i + ".multiplier"));
47: }
48:
49: public void process(ScoreChart scorechart, User user,
50: InetAddress peer, char direction,
51: LinkedRemoteFileInterface dir, RemoteSlave sourceSlave)
52: throws NoAvailableSlaveException {
53: process(scorechart, user, peer, direction, dir, System
54: .currentTimeMillis());
55: }
56:
57: protected void process(ScoreChart scorechart, User user,
58: InetAddress peer, char direction,
59: LinkedRemoteFileInterface dir, long currentTime)
60: throws NoAvailableSlaveException {
61: for (Iterator iter = scorechart.getSlaveScores().iterator(); iter
62: .hasNext();) {
63: ScoreChart.SlaveScore score = (ScoreChart.SlaveScore) iter
64: .next();
65: long lastTransfer = currentTime
66: - score.getRSlave().getLastTransferForDirection(
67: direction);
68:
69: if (lastTransfer < _minTime) {
70: score.addScore(-(long) (lastTransfer * _multiplier));
71: }
72: }
73: }
74: }
|