This is an automated email from the git hooks/post-receive script. New commit to branch develop in repository jtimer. See http://git.chorem.org/jtimer.git commit e511d1c8cd41de0adedf0de96b65541a7f910486 Author: Eric Chatellier <chatellier@codelutin.com> Date: Mon Feb 29 12:00:35 2016 +0100 fixes #1330: Use log rotate to clean old backup --- .../chorem/jtimer/io/GTimerIncrementalSaver.java | 68 ++++++++++++++++++---- 1 file changed, 56 insertions(+), 12 deletions(-) diff --git a/src/main/java/org/chorem/jtimer/io/GTimerIncrementalSaver.java b/src/main/java/org/chorem/jtimer/io/GTimerIncrementalSaver.java index 80195cc..260248f 100644 --- a/src/main/java/org/chorem/jtimer/io/GTimerIncrementalSaver.java +++ b/src/main/java/org/chorem/jtimer/io/GTimerIncrementalSaver.java @@ -26,7 +26,6 @@ import java.io.BufferedInputStream; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; -import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.FileReader; import java.io.IOException; @@ -36,8 +35,15 @@ import java.io.RandomAccessFile; import java.io.Writer; import java.nio.channels.FileChannel; import java.nio.channels.FileLock; +import java.nio.file.DirectoryIteratorException; +import java.nio.file.DirectoryStream; +import java.nio.file.FileSystems; +import java.nio.file.Files; +import java.nio.file.Path; import java.text.DateFormat; import java.text.SimpleDateFormat; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; @@ -45,14 +51,17 @@ import java.util.Collections; import java.util.Comparator; import java.util.Date; import java.util.HashMap; +import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.Properties; +import java.util.Set; import java.util.SortedMap; import java.util.Timer; import java.util.TreeMap; +import java.util.TreeSet; import java.util.regex.Matcher; import java.util.regex.Pattern; import java.util.zip.ZipEntry; @@ -117,6 +126,9 @@ public class GTimerIncrementalSaver extends AbstractSaver implements Saver, /** Lock filename. */ protected static final String LOCK_FILE_NAME = ".lock"; + /** Backup directory name. */ + protected static final String BACKUP_DIRECTORY = "backups"; + /** * Save directory. Init with $user.home/.gtimer */ @@ -391,9 +403,10 @@ public class GTimerIncrementalSaver extends AbstractSaver implements Saver, // post process tasks parseTaskFromSavedMap(taskToPostManaged); - // TODO remove this one day... - // just for development - backupGTimerFiles(); + // manage backup + if (backupGTimerFiles()) { + cleanBackupFiles(); + } // collection to return Collection<TimerProject> projects = mapNumberProject.values(); @@ -757,15 +770,19 @@ public class GTimerIncrementalSaver extends AbstractSaver implements Saver, * For development. * * Save gtimer files (because project collection is sometimes erased) + * + * @return success flag fro creating backup */ - protected void backupGTimerFiles() { + protected boolean backupGTimerFiles() { + + boolean result = false; // build date string format = YYYYMMDDHHMMSS DateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmmss"); String nowString = dateFormat.format(new Date()); // backup directory - String backupDir = saveDirectory + File.separator + "backups"; + String backupDir = saveDirectory + File.separator + BACKUP_DIRECTORY; // build file name String zipFileName = backupDir + File.separator + "backup-" + nowString @@ -811,19 +828,46 @@ public class GTimerIncrementalSaver extends AbstractSaver implements Saver, } } - // Complete the ZIP file - outZip.close(); + result = true; - } catch (FileNotFoundException e) { - if (log.isErrorEnabled()) { - log.error("Can't create archive", e); - } } catch (IOException e) { if (log.isErrorEnabled()) { log.error("Can't create archive", e); } } + return result; + } + + /** + * Clean backup files older than one week. + */ + protected void cleanBackupFiles() { + + // compute date from one week ago + LocalDateTime oneWeekAgo = LocalDateTime.now().minusWeeks(2); + String oneWeekString = oneWeekAgo.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")); + Pattern pattern = Pattern.compile("backup-(\\d{14})\\.zip"); + + // collect each file in backup dir + Path backupDir = FileSystems.getDefault().getPath(saveDirectory, BACKUP_DIRECTORY); + try (DirectoryStream<Path> stream = Files.newDirectoryStream(backupDir, "backup-*.zip")) { + for (Path file : stream) { + String name = file.getFileName().toString(); + Matcher m = pattern.matcher(name); + m.matches(); + String backupDate = m.group(1); + + // delete all files older than two weeks + if (backupDate.compareTo(oneWeekString) < 0) { + Files.delete(file); + } + } + } catch (DirectoryIteratorException|IOException ex) { + if (log.isErrorEnabled()) { + log.error("Can't create backup", ex); + } + } } /** -- To stop receiving notification emails like this one, please contact chorem.org SCM administrator <admin+scm@chorem.org>.