Added logic to remove output dir and changed logging
This commit is contained in:
@ -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) {
|
||||||
|
@ -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) {
|
||||||
|
switch (logLevel) {
|
||||||
|
case DEBUG:
|
||||||
|
logger.debug(message);
|
||||||
|
break;
|
||||||
|
case ERROR:
|
||||||
|
case FATAL:
|
||||||
|
logger.error(message);
|
||||||
|
break;
|
||||||
|
case INFO:
|
||||||
logger.info(message);
|
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);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -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);
|
||||||
|
Reference in New Issue
Block a user