package cc.blynk.server.tools; import cc.blynk.utils.FileUtils; import java.io.File; import java.io.FileOutputStream; import java.nio.ByteBuffer; import java.nio.channels.FileChannel; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; /** * The Blynk Project. * Created by Dmitriy Dumanskiy. * Created on 05.02.17. */ public class ReportingDataCleaner { public static void main(String[] args) { String reportingFolder = args[0]; Path reportingPath = Paths.get(reportingFolder); if (Files.exists(reportingPath)) { System.out.println("Starting processing " + reportingPath.toString()); start(reportingPath); } else { System.out.println(reportingPath.toString() + " not exists."); } } private static void start(Path reportingPath) { File[] allReporting = reportingPath.toFile().listFiles(); if (allReporting == null || allReporting.length == 0) { System.out.println("No files."); return; } System.out.println("Directories number : " + allReporting.length); final int COUNT = 360; int filesCount = 0; int overrideCount = 0; for (File userDirectory : allReporting) { if (userDirectory.isDirectory()) { File[] userFiles = userDirectory.listFiles(); if (userFiles == null || userFiles.length == 0) { System.out.println(userDirectory + " is empty."); try { if (userDirectory.delete()) { System.out.println(userDirectory + " deleted."); } } catch (Exception e) { //ignore } continue; } for (File file : userFiles) { if (filesCount != 0 && filesCount % 1000 == 0) { System.out.println("Visited " + filesCount + " files."); } long fileSize = file.length(); if (file.getPath().endsWith("minute.bin") && fileSize > COUNT * 16) { System.out.println("Found " + file.getPath() + ". Size : " + fileSize); try { Path path = file.toPath(); ByteBuffer userReportingData = FileUtils.read(path, COUNT); userReportingData.flip(); write(file, userReportingData); System.out.println("Successfully copied. Truncated : " + (fileSize - userReportingData.position())); overrideCount++; } catch (Exception e) { System.out.println("Error reading file " + file.getAbsolutePath()); System.out.println("Skipping."); } } filesCount++; } } } System.out.println("Visited : " + filesCount + ". Overrided : " + overrideCount); } private static void write(File file, ByteBuffer data) throws Exception { try (FileChannel channel = new FileOutputStream(file, false).getChannel()) { channel.write(data); } } }