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

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

Error out when meta file cannot be read

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 if err != nil {
50 log.Fatal(err)
51 }
52
53 now := time.Now().Unix()
54
55 if meta.Expiry > 0 && now >= meta.Expiry {
56 if verbose {
57 expiration := humanize.Time(time.Unix(meta.Expiry, 0))
58 log.Printf("%s/%s expired %s\n", conf.filepath, meta.Filename, expiration)
59 }
60 os.Remove(conf.filepath + "/" + meta.Filename)
61 os.Remove(path)
62 return nil
63 } else {
64 count++
65 size += meta.Size
66 }
67
68 return nil
69}
70
71func main() {
72 flag.BoolVar(&verbose, "v", false, "Verbose logging")
73 flag.StringVar(&conf.filepath, "f", "./files", "Directory containing files")
74 flag.StringVar(&conf.metapath, "m", "./meta", "Directory containing metadata")
75
76 flag.Parse()
77
78 err := filepath.Walk(conf.metapath, checkexpiry)
79 if err != nil {
80 log.Fatal(err)
81 }
82
83 if verbose && count > 0 {
84 log.Printf("%d file(s) remain on disk (total: %s)", count, humanize.IBytes(uint64(size)))
85 }
86}
Note: See TracBrowser for help on using the repository browser.