Files
seaweedfs/weed/admin/view/app/template_helpers.go
T
Chris Lu 494589001a admin: add monitoring page templates
Six server-rendered pages (overview plus volume server, filer, S3,
master and worker detail) built from shared chartCard and statCard
components, following the existing Bootstrap card and table conventions.
Charts are inline SVG, so no chart library is pulled in. Pages show a
'no metrics yet' notice until the first scrapes land.
2026-09-14 23:59:38 -07:00

101 lines
2.0 KiB
Go

package app
import (
"fmt"
"strconv"
"strings"
)
// diskUsageWarnPct is where disk-usage charts draw their reference line.
const diskUsageWarnPct = 85.0
// diskThreshold returns the disk-usage reference line for chart options.
func diskThreshold() *float64 {
v := diskUsageWarnPct
return &v
}
// formatBytes converts bytes to human readable format
func formatBytes(bytes int64) string {
if bytes == 0 {
return "0 B"
}
units := []string{"B", "KB", "MB", "GB", "TB", "PB"}
var i int
value := float64(bytes)
for value >= 1024 && i < len(units)-1 {
value /= 1024
i++
}
if i == 0 {
return fmt.Sprintf("%.0f %s", value, units[i])
}
return fmt.Sprintf("%.1f %s", value, units[i])
}
// formatNumber formats large numbers with commas
func formatNumber(num int64) string {
if num == 0 {
return "0"
}
str := strconv.FormatInt(num, 10)
result := ""
for i, char := range str {
if i > 0 && (len(str)-i)%3 == 0 {
result += ","
}
result += string(char)
}
return result
}
// calculatePercent calculates percentage for progress bars
func calculatePercent(current, max int) int {
if max == 0 {
return 0
}
return (current * 100) / max
}
func pluginLaneDisplayName(lane string) string {
normalized := strings.TrimSpace(strings.ToLower(lane))
if normalized == "" || normalized == "default" {
return "Default"
}
parts := strings.Fields(strings.ReplaceAll(normalized, "_", " "))
if len(parts) == 0 {
return "Default"
}
for i, part := range parts {
if part == "" {
continue
}
parts[i] = strings.ToUpper(part[:1]) + part[1:]
}
return strings.Join(parts, " ")
}
func pluginLaneTitle(lane string) string {
return pluginLaneDisplayName(lane) + " Workers"
}
func pluginLaneDescription(lane string) string {
switch strings.TrimSpace(strings.ToLower(lane)) {
case "iceberg":
return "Iceberg maintenance workers, scheduler state, queue, and execution flows."
case "lifecycle":
return "Lifecycle workers, scheduler state, queue, and execution flows."
default:
return "Default workers, scheduler state, queue, and execution flows."
}
}