Prechádzať zdrojové kódy

agent add RtmpFileCleaner.java test-case

reghao 3 mesiacov pred
rodič
commit
9f95a895a6
1 zmenil súbory, kde vykonal 125 pridanie a 0 odobranie
  1. 125 0
      agent/src/test/java/RtmpFileCleaner.java

+ 125 - 0
agent/src/test/java/RtmpFileCleaner.java

@@ -0,0 +1,125 @@
+import java.io.File;
+import java.io.IOException;
+import java.nio.file.FileVisitResult;
+import java.nio.file.FileVisitor;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.attribute.BasicFileAttributes;
+import java.time.Duration;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.Set;
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.ScheduledThreadPoolExecutor;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * @author reghao
+ * @date 2025-12-18 13:43:47
+ */
+public class RtmpFileCleaner {
+    static ScheduledExecutorService scheduler = new ScheduledThreadPoolExecutor(1);
+    static Set set = Set.of("22", "23", "00", "01", "02", "03", "04", "05", "06", "07");
+
+    static void test() {
+        LocalDateTime now = LocalDateTime.now();
+        String filename = "cam204-1765896327_20251216_224527.flv";
+        String[] strArr = filename.replace(".flv", "").split("_");
+        String date = strArr[1];
+        String time = strArr[2];
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMdd HHmmss");
+        LocalDateTime localDateTime = LocalDateTime.parse(date + " " + time, formatter);
+
+        String hour = time.substring(0, 2);
+        if (set.contains(hour)) {
+        }
+
+        Duration duration = Duration.between(localDateTime, now);
+        long result = duration.getSeconds() - 3600L*12;
+        System.out.println(result);
+    }
+
+    public static void main(String[] args) {
+        String baseDir = "/opt/data/ngxflv/rtmp";
+        scheduler.scheduleAtFixedRate(new CleanerTask(baseDir), 0, 8, TimeUnit.HOURS);
+    }
+
+    static class CleanerTask implements Runnable {
+        private final String baseDir;
+        private LocalDateTime now;
+
+        public CleanerTask(String baseDir) {
+            this.baseDir = baseDir;
+        }
+
+        @Override
+        public void run() {
+            now = LocalDateTime.now();
+            try {
+                walkDir(Path.of(baseDir));
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+            System.out.printf("%s RtmpFileCleaner task completed.\n", now);
+        }
+
+        private void walkDir(Path path) throws IOException {
+            Files.walkFileTree(path, new FileVisitor<Path>() {
+                @Override
+                public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException {
+                    return FileVisitResult.CONTINUE;
+                }
+
+                @Override
+                public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
+                    try {
+                        process(file.toFile());
+                    } catch (Exception e) {
+                        e.printStackTrace();
+                    }
+                    return FileVisitResult.CONTINUE;
+                }
+
+                @Override
+                public FileVisitResult visitFileFailed(Path file, IOException exc) throws IOException {
+                    return FileVisitResult.CONTINUE;
+                }
+
+                @Override
+                public FileVisitResult postVisitDirectory(Path dir, IOException exc) throws IOException {
+                    return FileVisitResult.CONTINUE;
+                }
+            });
+        }
+
+        private void process(File file) {
+            String filename  = file.getName();
+            String[] strArr = filename.replace(".flv", "").split("_");
+            String date = strArr[1];
+            String time = strArr[2];
+            DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMdd HHmmss");
+            LocalDateTime localDateTime = LocalDateTime.parse(date + " " + time, formatter);
+
+            LocalDateTime current = LocalDateTime.now();
+            String hour = time.substring(0, 2);
+            if (set.contains(hour)) {
+                if (file.delete()) {
+                    System.out.printf("%s Deleting file %s\n", current, file.getAbsolutePath());
+                } else {
+                    System.out.printf("%s Deleting file %s failed\n", current, file.getAbsolutePath());
+                }
+                return;
+            }
+
+            Duration duration = Duration.between(localDateTime, now);
+            long result = duration.getSeconds() - 3600L*24;
+            if (result > 0) {
+                if (file.delete()) {
+                    System.out.printf("%s Deleting file %s\n", current, file.getAbsolutePath());
+                } else {
+                    System.out.printf("%s Deleting file %s failed\n", current, file.getAbsolutePath());
+                }
+            }
+        }
+    }
+}