diff --git a/pkg/fs/preload.go b/pkg/fs/preload.go index 396cf8b..0efc0e6 100644 --- a/pkg/fs/preload.go +++ b/pkg/fs/preload.go @@ -33,7 +33,16 @@ func (q *queue) Add(ph *PreloadHandler, name string, prio int) { return } } - *q = append(*q, &Preload{Name: name, ph: ph}) + p := &Preload{Name: name, ph: ph} + *q = append(*q, p) + file, err := ph.fs.Open(name) + if err == nil { + defer file.Close() + f, ok := file.(*File) + if ok { + p.Size = f.size() + } + } q.Sort() } diff --git a/pkg/srv/interceptor.go b/pkg/srv/interceptor.go index a1c4d7f..3d607be 100644 --- a/pkg/srv/interceptor.go +++ b/pkg/srv/interceptor.go @@ -150,9 +150,10 @@ func (r *responseInterceptor) GetPaths(path string, filesystem *fs.FS, relative return } -func getPreloads(path string, filesystem *fs.FS) (dc dirContents) { +func getPreloads(path string, filesystem *fs.FS) (dc dirContents, size int64) { dc.Base = path for _, p := range filesystem.Preloads() { + size += p.Size dc.Files = append(dc.Files, file{ Name: template.HTML(p.Name), URI: template.HTML(urlencode(p.Name)), diff --git a/pkg/srv/plain.go b/pkg/srv/plain.go index 6362cdf..c5ade8c 100644 --- a/pkg/srv/plain.go +++ b/pkg/srv/plain.go @@ -36,7 +36,7 @@ func (ps *PlainServer) ServeHTTP(w http.ResponseWriter, r *http.Request) { "client", r.RemoteAddr, "method", r.Method, "status", s.Status(), - "uri", r.URL.Path, + "uri", r.RequestURI, ) }() } diff --git a/pkg/srv/srv.go b/pkg/srv/srv.go index 826a7bf..0cd3324 100644 --- a/pkg/srv/srv.go +++ b/pkg/srv/srv.go @@ -26,6 +26,7 @@ const ( type data struct { QuotaCur float64 + QuotaEst float64 QuotaMax float64 Paths dirContents PathAnchor string @@ -58,7 +59,7 @@ func (fs *FileServer) ServeHTTP(w http.ResponseWriter, r *http.Request) { "client", r.RemoteAddr, "method", r.Method, "status", s.Status(), - "uri", r.URL.Path, + "uri", r.RequestURI, ) }() } @@ -118,10 +119,12 @@ func (fs *FileServer) ServeHTTP(w http.ResponseWriter, r *http.Request) { if option == "preloads" { h.Set(csp, indexCSP) cur, max := fs.fs.QuotaUsage() + paths, size := getPreloads(p, fs.fs) err = preloads.Execute(w, data{ QuotaCur: math.Round(float64(cur)/gib*100) / 100, + QuotaEst: math.Round(float64(cur+size)/gib*100) / 100, QuotaMax: float64(max) / gib, - Paths: getPreloads(p, fs.fs), + Paths: paths, }) if err != nil { fs.log.Error(err, "error rendering preloads") diff --git a/pkg/srv/templates/preloads.html b/pkg/srv/templates/preloads.html index 3259872..2060dfd 100644 --- a/pkg/srv/templates/preloads.html +++ b/pkg/srv/templates/preloads.html @@ -3,7 +3,7 @@ [+]: increase priority [-]: decrease priority [s]: stop preloading -Quota: {{.QuotaCur}} / {{.QuotaMax}} GiB +Quota: {{.QuotaCur}} ({{.QuotaEst}}) / {{.QuotaMax}} GiB