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

Last change on this file since 64 was 58, checked in by dev, 3 years ago

Add test for errors

File size: 1.9 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 deleted int64
28var size int64
29
30func readmeta(filename string) (metadata, error) {
31 j, err := os.ReadFile(filename)
32 if err != nil {
33 return metadata{}, err
34 }
35
36 var meta metadata
37 err = json.Unmarshal(j, &meta)
38 if err != nil {
39 return metadata{}, err
40 }
41
42 return meta, nil
43}
44
45func checkexpiry(path string, info os.FileInfo, err error) error {
46 if filepath.Ext(path) != ".json" {
47 return nil
48 }
49 meta, err := readmeta(path)
50 if err != nil {
51 log.Fatal(err)
52 }
53
54
55 count++
56
57 now := time.Now().Unix()
58 if verbose {
59 log.Printf("now: %s, expiry: %s\n", now, meta.Expiry);
60 }
61
62 if meta.Expiry > 0 && now >= meta.Expiry {
63 if verbose {
64 expiration := humanize.Time(time.Unix(meta.Expiry, 0))
65 log.Printf("%s/%s: expired %s\n", conf.filepath, meta.Filename, expiration)
66 }
67 if err = os.Remove(conf.filepath + "/" + meta.Filename); err != nil {
68 log.Fatal(err)
69 }
70 if err = os.Remove(path); err != nil {
71 log.Fatal(err)
72 }
73 deleted++
74 return nil
75 } else {
76 if verbose {
77 expiration := humanize.Time(time.Unix(meta.Expiry, 0))
78 log.Printf("%s/%s: expire in %s\n", conf.filepath, meta.Filename, expiration)
79 }
80 size += meta.Size
81 }
82
83 return nil
84}
85
86func main() {
87 flag.BoolVar(&verbose, "v", false, "Verbose logging")
88 flag.StringVar(&conf.filepath, "f", "./files", "Directory containing files")
89 flag.StringVar(&conf.metapath, "m", "./meta", "Directory containing metadata")
90
91 flag.Parse()
92
93 err := filepath.Walk(conf.metapath, checkexpiry)
94 if err != nil {
95 log.Fatal(err)
96 }
97
98 if verbose && count > 0 {
99 log.Printf("%d/%d file(s) deleted (remaining: %s)", deleted, count, humanize.IBytes(uint64(size)))
100 }
101}
Note: See TracBrowser for help on using the repository browser.