added preloads page
This commit is contained in:
parent
b5ae5504a7
commit
333d5cb149
6 changed files with 235 additions and 75 deletions
|
|
@ -56,10 +56,11 @@ type dirs []dir
|
|||
func (dirs) Less(i, j dir) bool { return i.Name < j.Name }
|
||||
|
||||
type file struct {
|
||||
Name template.HTML
|
||||
URI template.HTML
|
||||
Anchor string
|
||||
Status int
|
||||
Name template.HTML
|
||||
URI template.HTML
|
||||
Anchor string
|
||||
Status int
|
||||
Running bool
|
||||
}
|
||||
|
||||
type files []file
|
||||
|
|
@ -128,6 +129,20 @@ func (r *responseInterceptor) GetPaths(path string, fs *fs.FS, relative bool) (d
|
|||
return
|
||||
}
|
||||
|
||||
func getPreloads(path string, fs *fs.FS) (dc dirContents) {
|
||||
dc.Base = path
|
||||
for _, p := range fs.Preloads() {
|
||||
dc.Files = append(dc.Files, file{
|
||||
Name: template.HTML(p.Name),
|
||||
URI: template.HTML(p.Name),
|
||||
Status: p.Status,
|
||||
Running: p.Running,
|
||||
})
|
||||
}
|
||||
slices.SortFunc(dc.Files, dc.Files.Less)
|
||||
return
|
||||
}
|
||||
|
||||
func anchor(s string) string {
|
||||
if i := strings.LastIndex(s, "/"); i > 0 && i+1 < len(s) {
|
||||
s = s[i+1:]
|
||||
|
|
|
|||
|
|
@ -95,6 +95,15 @@ func (fs *FileServer) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
|||
fs.h.ServeHTTP(w, r)
|
||||
return
|
||||
}
|
||||
if option == "preloads" {
|
||||
h.Set(csp, indexCSP)
|
||||
err = preloads.Execute(w, getPreloads(p, fs.fs))
|
||||
if err != nil {
|
||||
fs.log.Error(err, "error rendering preloads")
|
||||
http.Error(w, err.Error(), http.StatusInternalServerError)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
i := &responseInterceptor{w: w}
|
||||
r.Header.Del("If-Modified-Since")
|
||||
|
|
|
|||
|
|
@ -11,7 +11,6 @@ var (
|
|||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<meta name="theme-color" content="#222222">
|
||||
<meta name="description" content="cachefs">
|
||||
<title>cachefs | {{.Base}}</title>
|
||||
<style>
|
||||
body {
|
||||
font: 20px Helvetica, sans-serif;
|
||||
|
|
@ -102,11 +101,18 @@ td {
|
|||
.green {
|
||||
background-color: #4caf50;
|
||||
}
|
||||
.status-yellow {
|
||||
color: #f39c12;
|
||||
}
|
||||
.status-green {
|
||||
color: #4caf50;
|
||||
}
|
||||
span {
|
||||
color: #b2b2b2;
|
||||
font-size: 15px;
|
||||
}
|
||||
</style>
|
||||
<title>cachefs | {{.Base}}</title>
|
||||
</head>`
|
||||
|
||||
index = template.Must(template.New("index").Parse(indexHead + `<body>
|
||||
|
|
@ -114,7 +120,7 @@ span {
|
|||
<pre>[v]: show video
|
||||
[n]: skip file caching
|
||||
[p]: preload file
|
||||
[s]: stop preloading</pre>
|
||||
<a href="/?o=preloads">[Preloads]</a></pre>
|
||||
<table>
|
||||
<tr class="listitem">
|
||||
<td class="listpath up"><a href="../">../</a></td>
|
||||
|
|
@ -132,7 +138,33 @@ span {
|
|||
<tr class="listitem">
|
||||
<td class="listpath"><a id="{{$s.Anchor}}" href="{{$s.URI}}">{{$s.Name}}</a></td>
|
||||
<td class="listoptions">
|
||||
{{if ge $s.Status 0}}<span>{{$s.Status}}%</span>{{end}}<a href="{{$s.URI}}?o=v">[v]</a><a href="{{$s.URI}}?o=n">[n]</a><a href="{{$s.URI}}?o=p">[p]</a><a href="{{$s.URI}}?o=s">[s]</a>
|
||||
{{if ge $s.Status 0}}<span>{{$s.Status}}%</span>{{end}}<a href="{{$s.URI}}?o=v">[v]</a><a href="{{$s.URI}}?o=n">[n]</a><a href="{{$s.URI}}?o=p">[p]</a>
|
||||
</td>
|
||||
</tr>
|
||||
<tr class="spacer"><td colspan="2">
|
||||
{{if ge $s.Status 0}}
|
||||
<div class="spacer {{if le $s.Status 35}}red{{else if le $s.Status 65}}yellow{{else}}green{{end}}" style="width: {{$s.Status}}%;"></div>
|
||||
{{end -}}
|
||||
</td></tr>
|
||||
{{end -}}
|
||||
</table>
|
||||
</article>
|
||||
</body>
|
||||
</html>`))
|
||||
preloads = template.Must(template.New("preloads").Parse(indexHead + `<body>
|
||||
<article>
|
||||
<pre>[v]: show video
|
||||
[s]: stop preloading</pre>
|
||||
<table>
|
||||
<tr class="listitem">
|
||||
<td class="listpath up"><a href="/">/</a></td>
|
||||
<td class="listoptions">[dir]</td>
|
||||
</tr>
|
||||
{{range $s := .Files -}}
|
||||
<tr class="listitem">
|
||||
<td class="listpath"><a href="{{$s.URI}}">{{$s.Name}}</a></td>
|
||||
<td class="listoptions">
|
||||
{{if ge $s.Status 0}}<span>{{$s.Status}}%</span>{{end}}<span class="status-{{if $s.Running}}green">[running{{else}}yellow">[queued{{end}}]</span><a href="{{$s.URI}}?o=v">[v]</a><a href="{{$s.Name}}?o=s">[s]</a>
|
||||
</td>
|
||||
</tr>
|
||||
<tr class="spacer"><td colspan="2">
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue