package com.aol.micro.server.application.registry; import java.io.File; import java.util.Date; import java.util.stream.Stream; import javax.annotation.PostConstruct; import org.apache.commons.io.FileUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; import com.aol.micro.server.rest.jackson.JacksonUtil; @Component public class Cleaner { private final RegisterConfig config; private final int maxLive; @Autowired public Cleaner(RegisterConfig config, @Value("${service.registry.entry.max.live:43200000}") int maxLive) { this.config = config; this.maxLive = maxLive; } @PostConstruct public void deleteOldFilesAfterEachStartup() { cleanDir(new File(config.getOutputDir()), true); } public void clean() { cleanDir(new File(config.getOutputDir()), false); } private void cleanDir(File dir, boolean deleteWithoutCheck) { if (dir.listFiles() != null) { Stream.of(dir.listFiles()).forEach((next) -> { if (next.isDirectory()) { cleanDir(next, deleteWithoutCheck); } if (next.isFile()) { if (deleteWithoutCheck) { next.delete(); } else { checkFile(next); } } }); } } private void checkFile(File f) { try { RegisterEntry entry = JacksonUtil.convertFromJson(FileUtils.readFileToString(f), RegisterEntry.class); if (new Date().getTime() - maxLive > entry.getTime().getTime()) f.delete(); } catch (Exception e) { f.delete(); } } }