package master_ui
import (
"fmt"
"html/template"
"strconv"
"strings"
)
const (
_ = iota // ignore first value by assigning to blank identifier
KB float64 = 1 << (10 * iota)
MB
GB
TB
PB
)
func join(data []int64) string {
var ret []string
for _, d := range data {
ret = append(ret, strconv.Itoa(int(d)))
}
return strings.Join(ret, ",")
}
func prettySize(byteSize uint64) string {
sz := float64(byteSize)
switch {
case sz >= PB:
return fmt.Sprintf("%.2f PB", sz/PB)
case sz >= TB:
return fmt.Sprintf("%.2f TB", sz/TB)
case sz >= GB:
return fmt.Sprintf("%.2f GB", sz/GB)
case sz >= MB:
return fmt.Sprintf("%.2f MB", sz/MB)
case sz >= KB:
return fmt.Sprintf("%.2f KB", sz/KB)
}
return fmt.Sprintf("%.0f Bytes", sz)
}
var funcMap = template.FuncMap{
"join": join,
"prettySize": prettySize,
}
var StatusTpl = template.Must(template.New("status").Funcs(funcMap).Parse(`
SeaweedFS {{ .Version }}
Disk Stats
{{ range .DiskStatuses }}
| {{ .Dir }} |
{{ .Free | prettySize }} Free |
{{ end }}
System Stats
| Master |
{{.Master}} |
| Weekly # ReadRequests |
{{ .Counters.ReadRequests.WeekCounter.ToList | join }} |
| Daily # ReadRequests |
{{ .Counters.ReadRequests.DayCounter.ToList | join }} |
| Hourly # ReadRequests |
{{ .Counters.ReadRequests.HourCounter.ToList | join }} |
| Last Minute # ReadRequests |
{{ .Counters.ReadRequests.MinuteCounter.ToList | join }} |
| Concurrent Connections |
{{ .Counters.Connections.WeekCounter.Sum }} |
{{ range $key, $val := .Stats }}
| {{ $key }} |
{{ $val }} |
{{ end }}
Volumes
| Id |
Collection |
Size |
Files |
Trash |
TTL |
{{ range .Volumes }}
{{ .Id }} |
{{ .Collection }} |
{{ .Size | prettySize }} |
{{ .FileCount }} |
{{ .DeleteCount }} / {{.DeletedByteCount | prettySize }} |
{{ .Ttl }} |
{{ end }}
`))