branch develop updated (a78a41a -> e511d1c)
This is an automated email from the git hooks/post-receive script. New change to branch develop in repository jtimer. See http://git.chorem.org/jtimer.git from a78a41a fixes #1328: When idle popup is displayed, show in the popup the current running taks(s) new e511d1c fixes #1330: Use log rotate to clean old backup The 1 revisions listed above as "new" are entirely new to this repository and will be described in separate emails. The revisions listed as "adds" were already present in the repository and have only been added to this reference. Detailed log of new commits: 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 Summary of changes: .../chorem/jtimer/io/GTimerIncrementalSaver.java | 68 ++++++++++++++++++---- 1 file changed, 56 insertions(+), 12 deletions(-) -- To stop receiving notification emails like this one, please contact chorem.org SCM administrator <admin+scm@chorem.org>.
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>.
participants (1)
-
chorem.org scm