source: code/trunk/partage-trash/partage-trash.go@ 53

Last change on this file since 53 was 33, checked in by dev, 4 years ago

Add partage-trash to cleanup expired files

File size: 1.5 KB
Line 
1package main
2
3import (
4 "log"
5 "flag"
6 "os"
7 "time"
8 "path/filepath"
9 "encoding/json"
10
11 "github.com/dustin/go-humanize"
12)
13
14type metadata struct {
15 Filename string
16 Size int64
17 Expiry int64
18}
19
20var conf struct {
21 filepath string
22 metapath string
23}
24
25var verbose bool
26var count int64
27var size int64
28
29func readmeta(filename string) (metadata, error) {
30 j, err := os.ReadFile(filename)
31 if err != nil {
32 return metadata{}, err
33 }
34
35 var meta metadata
36 err = json.Unmarshal(j, &meta)
37 if err != nil {
38 return metadata{}, err
39 }
40
41 return meta, nil
42}
43
44func checkexpiry(path string, info os.FileInfo, err error) error {
45 if filepath.Ext(path) != ".json" {
46 return nil
47 }
48 meta, err := readmeta(path)
49
50 now := time.Now().Unix()
51
52 if meta.Expiry > 0 && now >= meta.Expiry {
53 if verbose {
54 expiration := humanize.Time(time.Unix(meta.Expiry, 0))
55 log.Printf("%s/%s expired %s\n", conf.filepath, meta.Filename, expiration)
56 }
57 os.Remove(conf.filepath + "/" + meta.Filename)
58 os.Remove(path)
59 return nil
60 } else {
61 count++
62 size += meta.Size
63 }
64
65 return nil
66}
67
68func main() {
69 flag.BoolVar(&verbose, "v", false, "Verbose logging")
70 flag.StringVar(&conf.filepath, "f", "./files", "Directory containing files")
71 flag.StringVar(&conf.metapath, "m", "./meta", "Directory containing metadata")
72
73 flag.Parse()
74
75 err := filepath.Walk(conf.metapath, checkexpiry)
76 if err != nil {
77 log.Fatal(err)
78 }
79
80 if verbose && count > 0 {
81 log.Printf("%d file(s) remain on disk (total: %s)", count, humanize.IBytes(uint64(size)))
82 }
83}
Note: See TracBrowser for help on using the repository browser.