Added logic to remove output dir and changed logging

This commit is contained in:
2020-11-25 00:49:36 -06:00
parent 4b61c811be
commit 6d6f0ed891
3 changed files with 42 additions and 11 deletions

View File

@ -1,8 +1,10 @@
package net.locusworks.s3sync.client; package net.locusworks.s3sync.client;
import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.nio.file.Files; import java.nio.file.Files;
import java.nio.file.Path; import java.nio.file.Path;
import java.util.Comparator;
import java.util.HashSet; import java.util.HashSet;
import java.util.Set; import java.util.Set;
import com.amazonaws.AmazonClientException; import com.amazonaws.AmazonClientException;
@ -138,12 +140,15 @@ public class S3Client implements AutoCloseable {
jsch.addIdentity(identity); jsch.addIdentity(identity);
Session session = jsch.getSession(user, host, port); Session session = jsch.getSession(user, host, port);
session.connect(); session.connect();
try(ScpFromMessage msg = new ScpFromMessage(true, session, remoteFolder, localFolder, true); try(ScpFromMessage msg = new ScpFromMessage(true, session, remoteFolder, localFolder, true); FileManager manager = FileManager.getInstance()) {
FileManager manager = FileManager.getInstance()) {
msg.fileCallback(p -> { msg.fileCallback(p -> {
logger.info(p+"");
if (Files.isRegularFile(p)) { if (Files.isRegularFile(p)) {
uploadFile(xferMgr, p); uploadFile(xferMgr, p);
try {
Files.delete(p);
} catch (Exception ex) {
logger.warn("Unable to delete local file %s: %s", p, ex.getMessage());
}
} }
}); });
msg.execute(); msg.execute();
@ -152,6 +157,10 @@ public class S3Client implements AutoCloseable {
} }
xferMgr.shutdownNow(false); xferMgr.shutdownNow(false);
Files.walk(localFolder)
.sorted(Comparator.reverseOrder())
.map(Path::toFile)
.forEach(File::delete);
} }
public S3Object getObject(String bucketName, String key) { public S3Object getObject(String bucketName, String key) {

View File

@ -13,6 +13,7 @@ import com.jcraft.jsch.JSchException;
import com.jcraft.jsch.Session; import com.jcraft.jsch.Session;
import com.jcraft.jsch.SftpProgressMonitor; import com.jcraft.jsch.SftpProgressMonitor;
import net.locusworks.logger.ApplicationLogger; import net.locusworks.logger.ApplicationLogger;
import net.locusworks.logger.LogLevel;
public abstract class AbstractSshMessage { public abstract class AbstractSshMessage {
@ -138,8 +139,29 @@ public abstract class AbstractSshMessage {
* Log a message to the log listener. * Log a message to the log listener.
* @param message the message to log * @param message the message to log
*/ */
protected void log(final String message) { protected void log(final String message, LogLevel logLevel) {
logger.info(message); switch (logLevel) {
case DEBUG:
logger.debug(message);
break;
case ERROR:
case FATAL:
logger.error(message);
break;
case INFO:
logger.info(message);
break;
case WARN:
logger.warn(message);
break;
case TRACE:
logger.trace(message);
break;
case OFF:
default:
logger.trace(message);
break;
}
} }
/** /**
@ -153,7 +175,7 @@ public abstract class AbstractSshMessage {
final NumberFormat format = NumberFormat.getNumberInstance(); final NumberFormat format = NumberFormat.getNumberInstance();
format.setMaximumFractionDigits(2); format.setMaximumFractionDigits(2);
format.setMinimumFractionDigits(1); format.setMinimumFractionDigits(1);
log("File transfer time: " + format.format(duration) + " Average Rate: " + format.format(totalLength / duration) + " B/s"); log("File transfer time: " + format.format(duration) + " Average Rate: " + format.format(totalLength / duration) + " B/s", LogLevel.DEBUG);
} }
/** /**

View File

@ -36,6 +36,7 @@ import com.jcraft.jsch.Session;
import com.jcraft.jsch.SftpATTRS; import com.jcraft.jsch.SftpATTRS;
import com.jcraft.jsch.SftpException; import com.jcraft.jsch.SftpException;
import net.locusworks.logger.ApplicationLoggerFactory; import net.locusworks.logger.ApplicationLoggerFactory;
import net.locusworks.logger.LogLevel;
import net.locusworks.logger.ApplicationLogger; import net.locusworks.logger.ApplicationLogger;
public class ScpFromMessage extends AbstractSshMessage implements AutoCloseable { public class ScpFromMessage extends AbstractSshMessage implements AutoCloseable {
@ -153,9 +154,8 @@ public class ScpFromMessage extends AbstractSshMessage implements AutoCloseable
command += "-C "; command += "-C ";
} }
command += remoteFile; command += remoteFile;
log(command); log("Executing command: " + command, LogLevel.DEBUG);
final Channel channel = openExecChannel(command); final Channel channel = openExecChannel(command);
log(localFile + "");
try { try {
// get I/O streams for remote scp // get I/O streams for remote scp
final OutputStream out = channel.getOutputStream(); final OutputStream out = channel.getOutputStream();
@ -170,7 +170,7 @@ public class ScpFromMessage extends AbstractSshMessage implements AutoCloseable
channel.disconnect(); channel.disconnect();
} }
} }
log("done\n"); log("Done\n", LogLevel.INFO);
} }
protected boolean getPreserveLastModified() { protected boolean getPreserveLastModified() {
@ -218,7 +218,7 @@ public class ScpFromMessage extends AbstractSshMessage implements AutoCloseable
if (Files.isDirectory(localFile)) { if (Files.isDirectory(localFile)) {
final Path dir = localFile.resolve(directoryName); final Path dir = localFile.resolve(directoryName);
Files.createDirectories(dir); Files.createDirectories(dir);
log("Creating: " + dir); log("Creating: " + dir, LogLevel.DEBUG);
return dir; return dir;
} }
return null; return null;
@ -231,8 +231,8 @@ public class ScpFromMessage extends AbstractSshMessage implements AutoCloseable
end = serverResponse.indexOf(' ', start + 1); end = serverResponse.indexOf(' ', start + 1);
final long filesize = Long.parseLong(serverResponse.substring(start, end)); final long filesize = Long.parseLong(serverResponse.substring(start, end));
final String filename = serverResponse.substring(end + 1); final String filename = serverResponse.substring(end + 1);
log("Receiving: " + filename + " : " + filesize);
final Path transferFile = Files.isDirectory(localFile) ? localFile.resolve(filename) : localFile; final Path transferFile = Files.isDirectory(localFile) ? localFile.resolve(filename) : localFile;
log("Receiving: " + transferFile + " : " + filesize, LogLevel.INFO);
fetchFile(transferFile, filesize, out, in); fetchFile(transferFile, filesize, out, in);
waitForAck(in); waitForAck(in);
sendAck(out); sendAck(out);