package app import ( "fmt" "github.com/seaweedfs/seaweedfs/weed/admin/dash" ) templ Admin(data dash.AdminData) {

Dashboard

if len(clusterHealthIssues(data)) == 0 { } else { } { clusterHealthSummary(data) }

if data.VersionSummary.Mixed() { }
Volumes
{fmt.Sprintf("%d", data.TotalVolumes)}
{fmt.Sprintf("%s limit", formatBytes(int64(data.VolumeSizeLimitMB)*1024*1024))}
@templ.Raw(data.Trends.Volumes)
Disk usage
{formatBytes(data.DiskUsage)}
if data.DiskCapacity > 0 {
of {formatBytes(data.DiskCapacity)} ({fmt.Sprintf("%d%%", calculatePercent64(data.DiskUsage, data.DiskCapacity))})
}
@templ.Raw(data.Trends.DiskUsed)
Chunks
{formatNumber(data.TotalChunks)}
@templ.Raw(data.Trends.Chunks)
EC shards
{fmt.Sprintf("%d", data.TotalEcShards)}
if data.TotalEcVolumes > 0 {
{fmt.Sprintf("in %s", countNoun(data.TotalEcVolumes, "EC volume"))}
}
@templ.Raw(data.Trends.EcShards)
Active tasks
{ data.Trends.TasksValue }
@templ.Raw(data.Trends.Tasks)
Workers
{ data.Trends.WorkersValue }
@templ.Raw(data.Trends.Workers)
if len(data.TierStats) > 0 {
Storage Tiers
for _, tier := range data.TierStats { }
Tier Volumes EC Shards Data Size Disk Used Capacity Usage
if tier.IsRemote { {tier.Name} remote } else { {tier.Name} } {fmt.Sprintf("%d", tier.VolumeCount)} if tier.IsRemote { – } else { {fmt.Sprintf("%d", tier.EcShardCount)} } {formatBytes(tier.DataSize)} if tier.IsRemote || tier.DiskUsed == 0 { – } else { {formatBytes(tier.DiskUsed)} } if tier.IsRemote { – } else { {formatBytes(tier.DiskCapacity)} } if tier.IsRemote { – } else {
{fmt.Sprintf("%d%%", tier.UsagePercent())}
}
}
Master Nodes
for _, master := range data.MasterNodes { }
Address Role
{master.Address} if master.IsLeader { Leader } else { Follower }
Volume Servers
View all
for _, vs := range data.VolumeServers { } if len(data.VolumeServers) == 0 { }
ID Address Data Center Rack Version Volumes EC Shards Usage / Capacity
{vs.ID} {vs.GetDisplayAddress()} {vs.DataCenter} {vs.Rack} {dash.ShortVersion(vs.Version)}
{fmt.Sprintf("%d/%d", vs.Volumes, vs.MaxVolumes)}
if vs.EcShards > 0 { {fmt.Sprintf("%d", vs.EcShards)} if vs.EcVolumes > 0 { ({fmt.Sprintf("%d vol", vs.EcVolumes)}) } } else { – } {formatBytes(vs.DiskUsage)} / {formatBytes(vs.DiskCapacity)} if vs.RemoteSize > 0 {
{formatBytes(vs.RemoteSize)} remote }
No volume servers found
Filer Nodes
View all
for _, filer := range data.FilerNodes { } if len(data.FilerNodes) == 0 { }
Address Data Center Rack Version Last Updated
{filer.Address} {filer.DataCenter} {filer.Rack} {dash.ShortVersion(filer.Version)} {filer.LastUpdated.Format("2006-01-02 15:04:05")}
No filer nodes found
S3 Servers
View all
for _, s3Node := range data.S3Nodes { } if len(data.S3Nodes) == 0 { }
Address Data Center Version Last Updated
{s3Node.Address} {s3Node.DataCenter} {dash.ShortVersion(s3Node.Version)} {s3Node.LastUpdated.Format("2006-01-02 15:04:05")}
No S3 servers found
Vector Servers
View all
for _, vectorNode := range data.VectorNodes { } if len(data.VectorNodes) == 0 { }
Address Kind Version Status
{vectorNode.Address} {vectorNode.Kind} {dash.ShortVersion(vectorNode.Version)} {vectorNode.Status}
No vector servers found
Last updated: {data.LastUpdated.Format("2006-01-02 15:04:05")}
}