cmd/stats-read/main.go | 12 ++++++++---- stats.go | 9 +-------- diff --git a/cmd/stats-read/main.go b/cmd/stats-read/main.go index b2b79d9e61a365c3bb422531645461cbe601e75bf681d6c839e7e171c572b6e0..2dc1ae98f769b189490a4a4811cb58cf42792be569d7fee3bad80e09f38c6739 100644 --- a/cmd/stats-read/main.go +++ b/cmd/stats-read/main.go @@ -5,9 +5,11 @@ "bufio" "bytes" "encoding/binary" "encoding/hex" + "errors" "flag" "fmt" "io" + "io/fs" "log" "os" "path" @@ -129,20 +131,22 @@ if *showURLs { var fn string for k, v := range urls { fn = hex.EncodeToString([]byte(k[:])) - fmt.Println(fn[:2]+"/"+fn[2:4]+"/"+fn[4:], v) + fmt.Println(fn, v) } return } - var pth, dn, fn string + var pth string var ctr, size uint64 var br *bufio.Reader for hsh, u := range urls { pth = hex.EncodeToString(hsh[:]) - dn, fn = pth[:2]+"/"+pth[2:4], pth[4:] ctr = 0 size = 0 - fh, err = os.Open(path.Join(*db, dn, fn)) + fh, err = os.Open(path.Join(*db, pth)) if err != nil { + if errors.Is(err, fs.ErrNotExist) { + continue + } log.Fatal(err) } if br == nil { diff --git a/stats.go b/stats.go index 7f47eccd803bdbf82ae365a3a12d2c4636c72b9106fd6654e2344703b0588ab1..87e49b78acb8155d676a17add9e6d454ed2a6c5b29401780d7318db19efac08a 100644 --- a/stats.go +++ b/stats.go @@ -97,13 +97,11 @@ go func() { var hsh0, hsh1 uint64 var pth string - var dn, fn string var fh *os.File var tai tai64n.TAI64 var ok bool hsh := make([]byte, 16) buf := make([]byte, 8+8+8) - dirsKnown := make(map[string]struct{}) for s := range StatsAdd { pth = s.Host + s.U.EscapedPath() + "\n" if _, ok = urlsKnown[pth]; !ok { @@ -114,13 +112,8 @@ hsh0, hsh1 = siphash.Hash128(k0, k1, []byte(pth)) binary.BigEndian.PutUint64(hsh, hsh0) binary.BigEndian.PutUint64(hsh[8:], hsh1) pth = hex.EncodeToString(hsh) - dn, fn = pth[:2]+"/"+pth[2:4], pth[4:] - if _, ok = dirsKnown[dn]; !ok { - os.MkdirAll(path.Join(db, dn), os.FileMode(0o755)) - dirsKnown[dn] = struct{}{} - } fh, err = os.OpenFile( - path.Join(db, dn, fn), + path.Join(db, pth), os.O_WRONLY|os.O_APPEND|os.O_CREATE, os.FileMode(0o640), )