package enterpriseapp.job; import java.io.File; import java.io.IOException; import java.util.Calendar; import java.util.Collection; import org.apache.commons.io.FileUtils; import org.quartz.Job; import org.quartz.JobBuilder; import org.quartz.JobDetail; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; import org.quartz.JobKey; import org.quartz.SchedulerException; import org.quartz.Trigger; import org.quartz.TriggerBuilder; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import enterpriseapp.EnterpriseApplication; import enterpriseapp.Utils; /** * Quartz job that moves the server log files to a new directory on a monthly basis. * * @author Alejandro Duarte * */ public class LogFilesCollectorJob implements Job { private static Logger logger = LoggerFactory.getLogger(LogFilesCollectorJob.class); @Override public void execute(JobExecutionContext arg0) throws JobExecutionException { Collection<File> files = FileUtils.listFiles(new File(Utils.getServerLogsDirectory()), new String[] {"txt"}, false); File dest = new File(Utils.getServerLogsDirectory() + "/" + Utils.getCurrentYear() + "/" + Utils.getPreviousMonth()); System.out.println(dest.getName()); System.out.println(dest.getAbsolutePath()); for(File src : files) { try { logger.info("Moving " + src.getName()); FileUtils.moveFileToDirectory(src, dest, true); } catch (IOException e) { // We can't move files been used by the server so it's safe(?) to ignore exceptions here logger.warn("Can't move " + src.getName()); // logger.error("Error moving log file.", e); } } logger.info("Log files collected."); scheduleLogFilesCollectorJob(); } /** * Schedules next job execution. */ public static void scheduleLogFilesCollectorJob() { try { Calendar calendar = Calendar.getInstance(); calendar.set(Calendar.MILLISECOND, 0); calendar.set(Calendar.MINUTE, 5); calendar.set(Calendar.HOUR_OF_DAY, 0); calendar.set(Calendar.SECOND, 0); calendar.set(Calendar.DAY_OF_MONTH, 1); calendar.add(Calendar.MONTH, 1); JobKey jobKey = new JobKey(calendar.getTime().toString()); JobDetail job = JobBuilder.newJob(LogFilesCollectorJob.class).withIdentity(jobKey).build(); Trigger trigger = TriggerBuilder.newTrigger().startAt(calendar.getTime()).build(); EnterpriseApplication.getScheduler().scheduleJob(job, trigger); logger.info("LogFilesCollectorJob scheduled at " + Utils.dateToString(calendar.getTime(), Utils.getAlternateDateTimeFormatPattern())); } catch (SchedulerException e) { logger.error("Error shcheduling LogFilesCollectorJob.", e); } } }