1 18 package org.drftpd.slaveselection.filter; 19 20 import java.net.InetAddress ; 21 import java.rmi.RemoteException ; 22 import java.util.Iterator ; 23 import java.util.Properties ; 24 25 import net.sf.drftpd.Bytes; 26 import net.sf.drftpd.NoAvailableSlaveException; 27 import net.sf.drftpd.master.config.FtpConfig; 28 import net.sf.drftpd.master.usermanager.User; 29 import net.sf.drftpd.remotefile.LinkedRemoteFileInterface; 30 import net.sf.drftpd.slave.SlaveStatus; 31 32 import org.apache.log4j.Logger; 33 34 37 public class MaxbandwidthFilter extends Filter { 38 private static final Logger logger = 39 Logger.getLogger(MaxbandwidthFilter.class); 40 41 private long _maxBandwidth; 42 43 public MaxbandwidthFilter(FilterChain ssm, int i, Properties p) { 44 _maxBandwidth = 45 Bytes.parseBytes(FtpConfig.getProperty(p, i + ".maxbandwidth")); 46 } 47 48 public void process( 49 ScoreChart scorechart, 50 User user, 51 InetAddress peer, 52 char direction, 53 LinkedRemoteFileInterface dir) 54 throws NoAvailableSlaveException { 55 for (Iterator iter = scorechart.getSlaveScores().iterator(); 56 iter.hasNext(); 57 ) { 58 ScoreChart.SlaveScore slavescore = 59 (ScoreChart.SlaveScore) iter.next(); 60 SlaveStatus status; 61 try { 62 status = slavescore.getRSlave().getStatus(); 63 } catch (Exception e) { 64 if (e instanceof RemoteException ) { 65 slavescore.getRSlave().handleRemoteException( 66 (RemoteException ) e); 67 } 68 iter.remove(); 69 logger.debug("removed " + slavescore.getRSlave().getName() + " because of exception", e); 70 continue; 71 } 72 if (status.getThroughputDirection(direction) > _maxBandwidth) { 73 logger.debug("removed " + slavescore.getRSlave().getName()); 74 iter.remove(); 75 } 76 } 77 } 78 } | Popular Tags |