package org.gbif.ipt.action.admin;
import org.gbif.ipt.action.BaseAction;
import org.gbif.ipt.config.AppConfig;
import org.gbif.ipt.config.DataDir;
import org.gbif.ipt.service.admin.RegistrationManager;
import org.gbif.ipt.struts2.SimpleTextProvider;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import com.google.inject.Inject;
import org.apache.log4j.Logger;
/**
* The Action responsible for showing IPT logs to the admin.
*/
public class LogsAction extends BaseAction {
private static final long serialVersionUID = -5038153790552063249L;
// logging
private static final Logger LOG = Logger.getLogger(LogsAction.class);
private final DataDir dataDir;
private InputStream inputStream;
private String log;
@Inject
public LogsAction(SimpleTextProvider textProvider, AppConfig cfg, RegistrationManager registrationManager,
DataDir dataDir) {
super(textProvider, cfg, registrationManager);
this.dataDir = dataDir;
}
@Override
public String execute() {
return SUCCESS;
}
public InputStream getInputStream() {
return inputStream;
}
public String getLog() {
return log;
}
public String logfile() throws IOException {
// server file as set in prepare method
File logFile = dataDir.loggingFile(log + ".log");
// Log file must exist and be a file inside the ipt data directory/log
if (logFile.exists() && dataDir.loggingDir().equals(logFile.getParentFile())) {
LOG.debug("Serving logfile " + logFile.getAbsolutePath());
inputStream = new FileInputStream(logFile);
return SUCCESS;
} else {
return NOT_FOUND;
}
}
public void setLog(String log) {
this.log = log;
}
}