package org.lognavigator.service;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Date;
import java.util.Set;
import java.util.TreeSet;
import org.lognavigator.bean.FileInfo;
import org.lognavigator.bean.LogAccessConfig.LogAccessType;
import org.lognavigator.exception.LogAccessException;
import org.lognavigator.util.Constants;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;
/**
* Log Access Service which simulates the log access results returned by a linux machine
*/
@Service
@Qualifier("fake")
public class FakeLogAccessService implements LogAccessService {
@Override
public InputStream executeCommand(String logAccessConfigId, String shellCommand) throws LogAccessException {
StringBuilder sb = new StringBuilder();
if (shellCommand.equals("ls -l")) {
sb.append("total 40\n");
sb.append("-rw-rw-r-- 1 root root 1189 13 mars 12:22 file1.log\n");
sb.append("-rw-r--r-- 1 root root 1091 24 avril 12:09 file2.log\n");
sb.append("-rw-rw-r-- 1 root root 1788 11 avril 16:12 file3.log\n");
sb.append("-rw-rw-r-- 1 root root 112 13 mars 12:22 file4.log\n");
sb.append("-rw-rw-r-- 1 root root 1078 13 mars 12:22 file5.log\n");
sb.append("-rw-rw-r-- 1 root root 2380 25 févr. 17:58 file6.log\n");
}
else if (shellCommand.startsWith("ls")) {
sb.append("file1.log\n");
sb.append("file2.log\n");
sb.append("file3.log\n");
sb.append("file4.log\n");
sb.append("file5.log\n");
sb.append("file6.log\n");
}
else if (shellCommand.startsWith(Constants.TAR_GZ_FILE_VIEW_COMMAND_START)) {
sb.append("drwx------ Administrators/None 0 2014-03-29 15:33 backup/\n");
sb.append("-rw-r--r-- Administrators/None 298 2014-03-02 11:25 backup/apache-access-3l.log.gz\n");
sb.append("-rw-r--r-- Administrators/None 508 2014-03-02 11:25 backup/apache-access-10l.log.gz\n");
sb.append("-rwx------ Administrators/None 2260 2014-03-02 10:02 backup/apache-access-100l.log.gz\n");
}
else {
sb.append("INFO - message1\n");
sb.append("INFO - message2\n");
sb.append("INFO - message3\n");
sb.append("INFO - message4\n");
sb.append("INFO - message5\n");
}
return new ByteArrayInputStream(sb.toString().getBytes());
}
@Override
public void downloadFile(String logAccessConfigId, String fileName, OutputStream downloadOutputStream) throws LogAccessException {
try {
String fileContent = "content of the file " + fileName;
downloadOutputStream.write(fileContent.getBytes());
}
catch (IOException e) {
throw new LogAccessException("Error when executing downloading " + fileName + " on " + logAccessConfigId, e);
}
}
@Override
public Set<FileInfo> listFiles(String logAccessConfigId, String subPath) throws LogAccessException {
Set<FileInfo> fileInfos = new TreeSet<FileInfo>();
// First file
FileInfo fileInfo1 = new FileInfo();
fileInfo1.setFileName("file1.log");
fileInfo1.setRelativePath("file1.log");
fileInfo1.setDirectory(false);
fileInfo1.setFileSize(10L);
fileInfo1.setLastModified(new Date());
fileInfo1.setLogAccessType(LogAccessType.LOCAL);
fileInfos.add(fileInfo1);
// Second file
FileInfo fileInfo2 = new FileInfo();
fileInfo2.setFileName("file2.log");
fileInfo2.setRelativePath("file2.log");
fileInfo2.setDirectory(false);
fileInfo2.setFileSize(20L);
fileInfo2.setLastModified(new Date());
fileInfo2.setLogAccessType(LogAccessType.LOCAL);
fileInfos.add(fileInfo2);
// Return meta-informations about files and folders
return fileInfos;
}
}