package sos.scheduler.job;
import java.io.File;
import java.util.Iterator;
import java.util.Vector;
import sos.spooler.Job_impl;
import sos.util.SOSFile;
/**
* @author andreas.pueschel@sos-berlin.com
*
*
* cleanup temporary files created by other jobs
* Paramters:
* file_path Path for the files to remove
* file_specification Regular expression as file specification
* file_age Minimum file-age either milliseconds or hh:mm[:ss]
* $Id: JobSchedulerCleanupFiles.java 2868 2007-07-31 15:32:00Z al $
*/
public class JobSchedulerCleanupFiles extends Job_impl {
public boolean spooler_process() {
/** give a path for files to remove */
String filePath = System.getProperty("java.io.tmpdir");
/** give a regular expression as file specification */
String fileSpec = "^(sos.*)";
/** give the number of milliseconds, defaults to 24 hours */
long fileAge = 86400000;
/** number of files which causes a warning */
int warningFileLimit = 0;
if (spooler_task.params().var("file_path") != null
&& spooler_task.params().var("file_path").length() > 0) {
filePath = spooler_task.params().var("file_path");
spooler_log.info(".. job parameter [file_path]: " + filePath);
}
if (spooler_task.params().var("file_specification") != null
&& spooler_task.params().var("file_specification").length() > 0) {
fileSpec = spooler_task.params().var("file_specification");
spooler_log.info(".. job parameter [file_specification]: " + fileSpec);
}
if (spooler_task.params().var("file_age") != null
&& spooler_task.params().var("file_age").length() > 0) {
String sFileAge = spooler_task.params().var("file_age");
if (sFileAge.indexOf(":")>-1) fileAge = calculateFileAge(sFileAge);
else fileAge = Long.parseLong(sFileAge);
spooler_log.info(".. job parameter [file_age]: " + fileAge);
}
if (spooler_task.params().var("warning_file_limit") != null
&& spooler_task.params().var("warning_file_limit").length() > 0) {
String sWarningFileLimit = spooler_task.params().var("warning_file_limit");
warningFileLimit = Integer.parseInt(sWarningFileLimit);
spooler_log.info(".. job parameter [warning_file_limit]: " + warningFileLimit);
}
try {
String[] filePaths = filePath.split(";");
String[] fileSpecs = fileSpec.split(";");
for (int i=0; i<filePaths.length; i++){
int counter = 0;
filePath = filePaths[i];
if (filePath.trim().equalsIgnoreCase("java.io.tmpdir"))
filePath = System.getProperty("java.io.tmpdir");
if (filePaths.length == fileSpecs.length){
fileSpec = fileSpecs[i];
} else {
fileSpec = fileSpecs[0];
}
spooler_log.debug1("Looking for files in: "+filePath);
Vector filelist = SOSFile.getFolderlist(filePath, fileSpec, 0);
if ( filelist.size() == 0){
spooler_log.info(".. No files matched.");
}
Iterator iterator = filelist.iterator();
if (warningFileLimit>0 && filelist.size()>=warningFileLimit){
spooler_log.warn(filelist.size()+" files were found in directory "+filePath+". "+
"That is more than warning_file_limit ("+warningFileLimit+").");
}
while(iterator.hasNext()) {
File tempFile = (File)iterator.next();
long interval = System.currentTimeMillis()-tempFile.lastModified();
if ( interval > fileAge ) {
counter += SOSFile.deleteFile(tempFile);
}
}
if (counter > 0) spooler_log.info(counter + (filePath.equals(System.getProperty("java.io.tmpdir")) ? " temporary" : "") + " files removed");
}
} catch (Exception e) {
spooler_log.warn("an error occurred on cleanup of files: " + e.toString());
}
return false;
}
private long calculateFileAge(String hoursMinSec) {
long age=0;
String[] timeArray = hoursMinSec.split(":");
long hours = Long.parseLong(timeArray[0]);
long minutes = Long.parseLong(timeArray[1]);
long seconds = 0;
if (timeArray.length>2){
seconds = Long.parseLong(timeArray[2]);
}
age = hours*3600000+minutes*60000+seconds*1000;
return age;
}
}
|