package org.openslx.imagemaster.server; import java.io.File; import java.util.Date; import java.util.Map; import java.util.Timer; import java.util.TimerTask; import org.apache.log4j.Logger; import org.openslx.imagemaster.Globals; import org.openslx.imagemaster.thrift.iface.FtpCredentials; import org.openslx.imagemaster.util.Util; public class FtpCredentialsScheduler extends TimerTask { private static Logger log = Logger.getLogger( FtpCredentialsScheduler.class ); public static final long timeout = Long.valueOf( Globals.getPropertyInt( Globals.PropInt.FTPTIMEOUT ) ) * 60L * 1000L; // timeout in ms @Override public void run() { // check all folders for ( Map.Entry entry : Globals.ftpServer.users.entrySet() ) { String sessionId = entry.getKey(); String username = entry.getValue().username; File dir = new File( Globals.getPropertyString( Globals.PropString.FTPBASEDIR ) + "/" + username ); if ( !dir.exists() ) continue; File[] list = dir.listFiles(); if ( list.length == 1 ) { if ( ( new Date().getTime() - list[0].lastModified() ) >= timeout ) { log.info( username + "'s files are too old. Deleting him and his folder." ); Util.deleteFolder( dir ); Globals.ftpServer.removeUser( sessionId ); } } else if ( list.length > 1 ) { log.info( username + " uploaded too many files. Deleting his account and his folder." ); Util.deleteFolder( dir ); Globals.ftpServer.removeUser( sessionId ); } else { // check the creation time of the user if ( ( new Date().getTime() - Globals.ftpServer.timeouts.get( username ).getTime() ) >= timeout ) { // remove user and his folder Util.deleteFolder( dir ); Globals.ftpServer.removeUser( sessionId ); log.info( username + " did nothing for too long. Deleting him and his folder" ); } } } //TODO: remove image from process list } public static void startScheduling() { Timer timer = new Timer(); // start timer now and fire every 60 seconds timer.schedule( new FtpCredentialsScheduler(), 0, 60000 ); } }