You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							560 lines
						
					
					
						
							28 KiB
						
					
					
				
			
		
		
		
			
			
			
		
		
	
	
							560 lines
						
					
					
						
							28 KiB
						
					
					
				
								// Code generated by templ - DO NOT EDIT.
							 | 
						|
								
							 | 
						|
								// templ: version: v0.3.960
							 | 
						|
								package app
							 | 
						|
								
							 | 
						|
								//lint:file-ignore SA4006 This context is only used if a nested component is present.
							 | 
						|
								
							 | 
						|
								import "github.com/a-h/templ"
							 | 
						|
								import templruntime "github.com/a-h/templ/runtime"
							 | 
						|
								
							 | 
						|
								import (
							 | 
						|
									"fmt"
							 | 
						|
									"github.com/seaweedfs/seaweedfs/weed/admin/dash"
							 | 
						|
								)
							 | 
						|
								
							 | 
						|
								func EcVolumeDetails(data dash.EcVolumeDetailsData) templ.Component {
							 | 
						|
									return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
							 | 
						|
										templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
							 | 
						|
										if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
							 | 
						|
											return templ_7745c5c3_CtxErr
							 | 
						|
										}
							 | 
						|
										templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
							 | 
						|
										if !templ_7745c5c3_IsBuffer {
							 | 
						|
											defer func() {
							 | 
						|
												templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
							 | 
						|
												if templ_7745c5c3_Err == nil {
							 | 
						|
													templ_7745c5c3_Err = templ_7745c5c3_BufErr
							 | 
						|
												}
							 | 
						|
											}()
							 | 
						|
										}
							 | 
						|
										ctx = templ.InitializeContext(ctx)
							 | 
						|
										templ_7745c5c3_Var1 := templ.GetChildren(ctx)
							 | 
						|
										if templ_7745c5c3_Var1 == nil {
							 | 
						|
											templ_7745c5c3_Var1 = templ.NopComponent
							 | 
						|
										}
							 | 
						|
										ctx = templ.ClearChildren(ctx)
							 | 
						|
										templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 1, "<div class=\"d-flex justify-content-between flex-wrap flex-md-nowrap align-items-center pt-3 pb-2 mb-3 border-bottom\"><div><h1 class=\"h2\"><i class=\"fas fa-th-large me-2\"></i>EC Volume Details</h1><nav aria-label=\"breadcrumb\"><ol class=\"breadcrumb\"><li class=\"breadcrumb-item\"><a href=\"/admin\" class=\"text-decoration-none\">Dashboard</a></li><li class=\"breadcrumb-item\"><a href=\"/cluster/ec-shards\" class=\"text-decoration-none\">EC Volumes</a></li><li class=\"breadcrumb-item active\" aria-current=\"page\">Volume ")
							 | 
						|
										if templ_7745c5c3_Err != nil {
							 | 
						|
											return templ_7745c5c3_Err
							 | 
						|
										}
							 | 
						|
										var templ_7745c5c3_Var2 string
							 | 
						|
										templ_7745c5c3_Var2, templ_7745c5c3_Err = templ.JoinStringErrs(fmt.Sprintf("%d", data.VolumeID))
							 | 
						|
										if templ_7745c5c3_Err != nil {
							 | 
						|
											return templ.Error{Err: templ_7745c5c3_Err, FileName: `view/app/ec_volume_details.templ`, Line: 18, Col: 115}
							 | 
						|
										}
							 | 
						|
										_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var2))
							 | 
						|
										if templ_7745c5c3_Err != nil {
							 | 
						|
											return templ_7745c5c3_Err
							 | 
						|
										}
							 | 
						|
										templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 2, "</li></ol></nav></div><div class=\"btn-toolbar mb-2 mb-md-0\"><div class=\"btn-group me-2\"><button type=\"button\" class=\"btn btn-sm btn-outline-secondary\" onclick=\"history.back()\"><i class=\"fas fa-arrow-left me-1\"></i>Back</button> <button type=\"button\" class=\"btn btn-sm btn-outline-primary\" onclick=\"window.location.reload()\"><i class=\"fas fa-refresh me-1\"></i>Refresh</button></div></div></div><!-- EC Volume Summary --><div class=\"row mb-4\"><div class=\"col-md-6\"><div class=\"card\"><div class=\"card-header\"><h5 class=\"card-title mb-0\"><i class=\"fas fa-info-circle me-2\"></i>Volume Information</h5></div><div class=\"card-body\"><table class=\"table table-borderless\"><tr><td><strong>Volume ID:</strong></td><td>")
							 | 
						|
										if templ_7745c5c3_Err != nil {
							 | 
						|
											return templ_7745c5c3_Err
							 | 
						|
										}
							 | 
						|
										var templ_7745c5c3_Var3 string
							 | 
						|
										templ_7745c5c3_Var3, templ_7745c5c3_Err = templ.JoinStringErrs(fmt.Sprintf("%d", data.VolumeID))
							 | 
						|
										if templ_7745c5c3_Err != nil {
							 | 
						|
											return templ.Error{Err: templ_7745c5c3_Err, FileName: `view/app/ec_volume_details.templ`, Line: 47, Col: 65}
							 | 
						|
										}
							 | 
						|
										_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var3))
							 | 
						|
										if templ_7745c5c3_Err != nil {
							 | 
						|
											return templ_7745c5c3_Err
							 | 
						|
										}
							 | 
						|
										templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 3, "</td></tr><tr><td><strong>Collection:</strong></td><td>")
							 | 
						|
										if templ_7745c5c3_Err != nil {
							 | 
						|
											return templ_7745c5c3_Err
							 | 
						|
										}
							 | 
						|
										if data.Collection != "" {
							 | 
						|
											templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 4, "<span class=\"badge bg-info\">")
							 | 
						|
											if templ_7745c5c3_Err != nil {
							 | 
						|
												return templ_7745c5c3_Err
							 | 
						|
											}
							 | 
						|
											var templ_7745c5c3_Var4 string
							 | 
						|
											templ_7745c5c3_Var4, templ_7745c5c3_Err = templ.JoinStringErrs(data.Collection)
							 | 
						|
											if templ_7745c5c3_Err != nil {
							 | 
						|
												return templ.Error{Err: templ_7745c5c3_Err, FileName: `view/app/ec_volume_details.templ`, Line: 53, Col: 80}
							 | 
						|
											}
							 | 
						|
											_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var4))
							 | 
						|
											if templ_7745c5c3_Err != nil {
							 | 
						|
												return templ_7745c5c3_Err
							 | 
						|
											}
							 | 
						|
											templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 5, "</span>")
							 | 
						|
											if templ_7745c5c3_Err != nil {
							 | 
						|
												return templ_7745c5c3_Err
							 | 
						|
											}
							 | 
						|
										} else {
							 | 
						|
											templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 6, "<span class=\"text-muted\">default</span>")
							 | 
						|
											if templ_7745c5c3_Err != nil {
							 | 
						|
												return templ_7745c5c3_Err
							 | 
						|
											}
							 | 
						|
										}
							 | 
						|
										templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 7, "</td></tr><tr><td><strong>Status:</strong></td><td>")
							 | 
						|
										if templ_7745c5c3_Err != nil {
							 | 
						|
											return templ_7745c5c3_Err
							 | 
						|
										}
							 | 
						|
										if data.IsComplete {
							 | 
						|
											templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 8, "<span class=\"badge bg-success\"><i class=\"fas fa-check me-1\"></i>Complete (")
							 | 
						|
											if templ_7745c5c3_Err != nil {
							 | 
						|
												return templ_7745c5c3_Err
							 | 
						|
											}
							 | 
						|
											var templ_7745c5c3_Var5 string
							 | 
						|
											templ_7745c5c3_Var5, templ_7745c5c3_Err = templ.JoinStringErrs(data.TotalShards)
							 | 
						|
											if templ_7745c5c3_Err != nil {
							 | 
						|
												return templ.Error{Err: templ_7745c5c3_Err, FileName: `view/app/ec_volume_details.templ`, Line: 64, Col: 100}
							 | 
						|
											}
							 | 
						|
											_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var5))
							 | 
						|
											if templ_7745c5c3_Err != nil {
							 | 
						|
												return templ_7745c5c3_Err
							 | 
						|
											}
							 | 
						|
											templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 9, "/14 shards)</span>")
							 | 
						|
											if templ_7745c5c3_Err != nil {
							 | 
						|
												return templ_7745c5c3_Err
							 | 
						|
											}
							 | 
						|
										} else {
							 | 
						|
											templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 10, "<span class=\"badge bg-warning\"><i class=\"fas fa-exclamation-triangle me-1\"></i>Incomplete (")
							 | 
						|
											if templ_7745c5c3_Err != nil {
							 | 
						|
												return templ_7745c5c3_Err
							 | 
						|
											}
							 | 
						|
											var templ_7745c5c3_Var6 string
							 | 
						|
											templ_7745c5c3_Var6, templ_7745c5c3_Err = templ.JoinStringErrs(data.TotalShards)
							 | 
						|
											if templ_7745c5c3_Err != nil {
							 | 
						|
												return templ.Error{Err: templ_7745c5c3_Err, FileName: `view/app/ec_volume_details.templ`, Line: 68, Col: 117}
							 | 
						|
											}
							 | 
						|
											_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var6))
							 | 
						|
											if templ_7745c5c3_Err != nil {
							 | 
						|
												return templ_7745c5c3_Err
							 | 
						|
											}
							 | 
						|
											templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 11, "/14 shards)</span>")
							 | 
						|
											if templ_7745c5c3_Err != nil {
							 | 
						|
												return templ_7745c5c3_Err
							 | 
						|
											}
							 | 
						|
										}
							 | 
						|
										templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 12, "</td></tr>")
							 | 
						|
										if templ_7745c5c3_Err != nil {
							 | 
						|
											return templ_7745c5c3_Err
							 | 
						|
										}
							 | 
						|
										if !data.IsComplete {
							 | 
						|
											templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 13, "<tr><td><strong>Missing Shards:</strong></td><td>")
							 | 
						|
											if templ_7745c5c3_Err != nil {
							 | 
						|
												return templ_7745c5c3_Err
							 | 
						|
											}
							 | 
						|
											for i, shardID := range data.MissingShards {
							 | 
						|
												if i > 0 {
							 | 
						|
													templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 14, "<span>, </span>")
							 | 
						|
													if templ_7745c5c3_Err != nil {
							 | 
						|
														return templ_7745c5c3_Err
							 | 
						|
													}
							 | 
						|
												}
							 | 
						|
												templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 15, " <span class=\"badge bg-danger\">")
							 | 
						|
												if templ_7745c5c3_Err != nil {
							 | 
						|
													return templ_7745c5c3_Err
							 | 
						|
												}
							 | 
						|
												var templ_7745c5c3_Var7 string
							 | 
						|
												templ_7745c5c3_Var7, templ_7745c5c3_Err = templ.JoinStringErrs(fmt.Sprintf("%02d", shardID))
							 | 
						|
												if templ_7745c5c3_Err != nil {
							 | 
						|
													return templ.Error{Err: templ_7745c5c3_Err, FileName: `view/app/ec_volume_details.templ`, Line: 81, Col: 99}
							 | 
						|
												}
							 | 
						|
												_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var7))
							 | 
						|
												if templ_7745c5c3_Err != nil {
							 | 
						|
													return templ_7745c5c3_Err
							 | 
						|
												}
							 | 
						|
												templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 16, "</span>")
							 | 
						|
												if templ_7745c5c3_Err != nil {
							 | 
						|
													return templ_7745c5c3_Err
							 | 
						|
												}
							 | 
						|
											}
							 | 
						|
											templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 17, "</td></tr>")
							 | 
						|
											if templ_7745c5c3_Err != nil {
							 | 
						|
												return templ_7745c5c3_Err
							 | 
						|
											}
							 | 
						|
										}
							 | 
						|
										templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 18, "<tr><td><strong>Data Centers:</strong></td><td>")
							 | 
						|
										if templ_7745c5c3_Err != nil {
							 | 
						|
											return templ_7745c5c3_Err
							 | 
						|
										}
							 | 
						|
										for i, dc := range data.DataCenters {
							 | 
						|
											if i > 0 {
							 | 
						|
												templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 19, "<span>, </span>")
							 | 
						|
												if templ_7745c5c3_Err != nil {
							 | 
						|
													return templ_7745c5c3_Err
							 | 
						|
												}
							 | 
						|
											}
							 | 
						|
											templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 20, " <span class=\"badge bg-primary\">")
							 | 
						|
											if templ_7745c5c3_Err != nil {
							 | 
						|
												return templ_7745c5c3_Err
							 | 
						|
											}
							 | 
						|
											var templ_7745c5c3_Var8 string
							 | 
						|
											templ_7745c5c3_Var8, templ_7745c5c3_Err = templ.JoinStringErrs(dc)
							 | 
						|
											if templ_7745c5c3_Err != nil {
							 | 
						|
												return templ.Error{Err: templ_7745c5c3_Err, FileName: `view/app/ec_volume_details.templ`, Line: 93, Col: 70}
							 | 
						|
											}
							 | 
						|
											_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var8))
							 | 
						|
											if templ_7745c5c3_Err != nil {
							 | 
						|
												return templ_7745c5c3_Err
							 | 
						|
											}
							 | 
						|
											templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 21, "</span>")
							 | 
						|
											if templ_7745c5c3_Err != nil {
							 | 
						|
												return templ_7745c5c3_Err
							 | 
						|
											}
							 | 
						|
										}
							 | 
						|
										templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 22, "</td></tr><tr><td><strong>Servers:</strong></td><td><span class=\"text-muted\">")
							 | 
						|
										if templ_7745c5c3_Err != nil {
							 | 
						|
											return templ_7745c5c3_Err
							 | 
						|
										}
							 | 
						|
										var templ_7745c5c3_Var9 string
							 | 
						|
										templ_7745c5c3_Var9, templ_7745c5c3_Err = templ.JoinStringErrs(fmt.Sprintf("%d servers", len(data.Servers)))
							 | 
						|
										if templ_7745c5c3_Err != nil {
							 | 
						|
											return templ.Error{Err: templ_7745c5c3_Err, FileName: `view/app/ec_volume_details.templ`, Line: 100, Col: 102}
							 | 
						|
										}
							 | 
						|
										_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var9))
							 | 
						|
										if templ_7745c5c3_Err != nil {
							 | 
						|
											return templ_7745c5c3_Err
							 | 
						|
										}
							 | 
						|
										templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 23, "</span></td></tr><tr><td><strong>Last Updated:</strong></td><td><span class=\"text-muted\">")
							 | 
						|
										if templ_7745c5c3_Err != nil {
							 | 
						|
											return templ_7745c5c3_Err
							 | 
						|
										}
							 | 
						|
										var templ_7745c5c3_Var10 string
							 | 
						|
										templ_7745c5c3_Var10, templ_7745c5c3_Err = templ.JoinStringErrs(data.LastUpdated.Format("2006-01-02 15:04:05"))
							 | 
						|
										if templ_7745c5c3_Err != nil {
							 | 
						|
											return templ.Error{Err: templ_7745c5c3_Err, FileName: `view/app/ec_volume_details.templ`, Line: 106, Col: 104}
							 | 
						|
										}
							 | 
						|
										_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var10))
							 | 
						|
										if templ_7745c5c3_Err != nil {
							 | 
						|
											return templ_7745c5c3_Err
							 | 
						|
										}
							 | 
						|
										templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 24, "</span></td></tr></table></div></div></div><div class=\"col-md-6\"><div class=\"card\"><div class=\"card-header\"><h5 class=\"card-title mb-0\"><i class=\"fas fa-chart-pie me-2\"></i>Shard Distribution</h5></div><div class=\"card-body\"><div class=\"row text-center\"><div class=\"col-4\"><div class=\"border rounded p-3\"><h3 class=\"text-primary mb-1\">")
							 | 
						|
										if templ_7745c5c3_Err != nil {
							 | 
						|
											return templ_7745c5c3_Err
							 | 
						|
										}
							 | 
						|
										var templ_7745c5c3_Var11 string
							 | 
						|
										templ_7745c5c3_Var11, templ_7745c5c3_Err = templ.JoinStringErrs(fmt.Sprintf("%d", data.TotalShards))
							 | 
						|
										if templ_7745c5c3_Err != nil {
							 | 
						|
											return templ.Error{Err: templ_7745c5c3_Err, FileName: `view/app/ec_volume_details.templ`, Line: 125, Col: 98}
							 | 
						|
										}
							 | 
						|
										_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var11))
							 | 
						|
										if templ_7745c5c3_Err != nil {
							 | 
						|
											return templ_7745c5c3_Err
							 | 
						|
										}
							 | 
						|
										templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 25, "</h3><small class=\"text-muted\">Total Shards</small></div></div><div class=\"col-4\"><div class=\"border rounded p-3\"><h3 class=\"text-success mb-1\">")
							 | 
						|
										if templ_7745c5c3_Err != nil {
							 | 
						|
											return templ_7745c5c3_Err
							 | 
						|
										}
							 | 
						|
										var templ_7745c5c3_Var12 string
							 | 
						|
										templ_7745c5c3_Var12, templ_7745c5c3_Err = templ.JoinStringErrs(fmt.Sprintf("%d", len(data.DataCenters)))
							 | 
						|
										if templ_7745c5c3_Err != nil {
							 | 
						|
											return templ.Error{Err: templ_7745c5c3_Err, FileName: `view/app/ec_volume_details.templ`, Line: 131, Col: 103}
							 | 
						|
										}
							 | 
						|
										_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var12))
							 | 
						|
										if templ_7745c5c3_Err != nil {
							 | 
						|
											return templ_7745c5c3_Err
							 | 
						|
										}
							 | 
						|
										templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 26, "</h3><small class=\"text-muted\">Data Centers</small></div></div><div class=\"col-4\"><div class=\"border rounded p-3\"><h3 class=\"text-info mb-1\">")
							 | 
						|
										if templ_7745c5c3_Err != nil {
							 | 
						|
											return templ_7745c5c3_Err
							 | 
						|
										}
							 | 
						|
										var templ_7745c5c3_Var13 string
							 | 
						|
										templ_7745c5c3_Var13, templ_7745c5c3_Err = templ.JoinStringErrs(fmt.Sprintf("%d", len(data.Servers)))
							 | 
						|
										if templ_7745c5c3_Err != nil {
							 | 
						|
											return templ.Error{Err: templ_7745c5c3_Err, FileName: `view/app/ec_volume_details.templ`, Line: 137, Col: 96}
							 | 
						|
										}
							 | 
						|
										_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var13))
							 | 
						|
										if templ_7745c5c3_Err != nil {
							 | 
						|
											return templ_7745c5c3_Err
							 | 
						|
										}
							 | 
						|
										templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 27, "</h3><small class=\"text-muted\">Servers</small></div></div></div><!-- Shard Distribution Visualization --><div class=\"mt-3\"><h6>Present Shards:</h6><div class=\"d-flex flex-wrap gap-1\">")
							 | 
						|
										if templ_7745c5c3_Err != nil {
							 | 
						|
											return templ_7745c5c3_Err
							 | 
						|
										}
							 | 
						|
										for _, shard := range data.Shards {
							 | 
						|
											templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 28, "<span class=\"badge bg-success me-1 mb-1\">")
							 | 
						|
											if templ_7745c5c3_Err != nil {
							 | 
						|
												return templ_7745c5c3_Err
							 | 
						|
											}
							 | 
						|
											var templ_7745c5c3_Var14 string
							 | 
						|
											templ_7745c5c3_Var14, templ_7745c5c3_Err = templ.JoinStringErrs(fmt.Sprintf("%02d", shard.ShardID))
							 | 
						|
											if templ_7745c5c3_Err != nil {
							 | 
						|
												return templ.Error{Err: templ_7745c5c3_Err, FileName: `view/app/ec_volume_details.templ`, Line: 148, Col: 108}
							 | 
						|
											}
							 | 
						|
											_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var14))
							 | 
						|
											if templ_7745c5c3_Err != nil {
							 | 
						|
												return templ_7745c5c3_Err
							 | 
						|
											}
							 | 
						|
											templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 29, "</span>")
							 | 
						|
											if templ_7745c5c3_Err != nil {
							 | 
						|
												return templ_7745c5c3_Err
							 | 
						|
											}
							 | 
						|
										}
							 | 
						|
										templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 30, "</div>")
							 | 
						|
										if templ_7745c5c3_Err != nil {
							 | 
						|
											return templ_7745c5c3_Err
							 | 
						|
										}
							 | 
						|
										if len(data.MissingShards) > 0 {
							 | 
						|
											templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 31, "<h6 class=\"mt-2\">Missing Shards:</h6><div class=\"d-flex flex-wrap gap-1\">")
							 | 
						|
											if templ_7745c5c3_Err != nil {
							 | 
						|
												return templ_7745c5c3_Err
							 | 
						|
											}
							 | 
						|
											for _, shardID := range data.MissingShards {
							 | 
						|
												templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 32, "<span class=\"badge bg-secondary me-1 mb-1\">")
							 | 
						|
												if templ_7745c5c3_Err != nil {
							 | 
						|
													return templ_7745c5c3_Err
							 | 
						|
												}
							 | 
						|
												var templ_7745c5c3_Var15 string
							 | 
						|
												templ_7745c5c3_Var15, templ_7745c5c3_Err = templ.JoinStringErrs(fmt.Sprintf("%02d", shardID))
							 | 
						|
												if templ_7745c5c3_Err != nil {
							 | 
						|
													return templ.Error{Err: templ_7745c5c3_Err, FileName: `view/app/ec_volume_details.templ`, Line: 155, Col: 108}
							 | 
						|
												}
							 | 
						|
												_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var15))
							 | 
						|
												if templ_7745c5c3_Err != nil {
							 | 
						|
													return templ_7745c5c3_Err
							 | 
						|
												}
							 | 
						|
												templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 33, "</span>")
							 | 
						|
												if templ_7745c5c3_Err != nil {
							 | 
						|
													return templ_7745c5c3_Err
							 | 
						|
												}
							 | 
						|
											}
							 | 
						|
											templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 34, "</div>")
							 | 
						|
											if templ_7745c5c3_Err != nil {
							 | 
						|
												return templ_7745c5c3_Err
							 | 
						|
											}
							 | 
						|
										}
							 | 
						|
										templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 35, "</div></div></div></div></div><!-- Shard Details Table --><div class=\"card\"><div class=\"card-header\"><h5 class=\"card-title mb-0\"><i class=\"fas fa-list me-2\"></i>Shard Details</h5></div><div class=\"card-body\">")
							 | 
						|
										if templ_7745c5c3_Err != nil {
							 | 
						|
											return templ_7745c5c3_Err
							 | 
						|
										}
							 | 
						|
										if len(data.Shards) > 0 {
							 | 
						|
											templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 36, "<div class=\"table-responsive\"><table class=\"table table-striped table-hover\"><thead><tr><th><a href=\"#\" onclick=\"sortBy('shard_id')\" class=\"text-dark text-decoration-none\">Shard ID ")
							 | 
						|
											if templ_7745c5c3_Err != nil {
							 | 
						|
												return templ_7745c5c3_Err
							 | 
						|
											}
							 | 
						|
											if data.SortBy == "shard_id" {
							 | 
						|
												if data.SortOrder == "asc" {
							 | 
						|
													templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 37, "<i class=\"fas fa-sort-up ms-1\"></i>")
							 | 
						|
													if templ_7745c5c3_Err != nil {
							 | 
						|
														return templ_7745c5c3_Err
							 | 
						|
													}
							 | 
						|
												} else {
							 | 
						|
													templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 38, "<i class=\"fas fa-sort-down ms-1\"></i>")
							 | 
						|
													if templ_7745c5c3_Err != nil {
							 | 
						|
														return templ_7745c5c3_Err
							 | 
						|
													}
							 | 
						|
												}
							 | 
						|
											} else {
							 | 
						|
												templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 39, "<i class=\"fas fa-sort ms-1 text-muted\"></i>")
							 | 
						|
												if templ_7745c5c3_Err != nil {
							 | 
						|
													return templ_7745c5c3_Err
							 | 
						|
												}
							 | 
						|
											}
							 | 
						|
											templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 40, "</a></th><th><a href=\"#\" onclick=\"sortBy('server')\" class=\"text-dark text-decoration-none\">Server ")
							 | 
						|
											if templ_7745c5c3_Err != nil {
							 | 
						|
												return templ_7745c5c3_Err
							 | 
						|
											}
							 | 
						|
											if data.SortBy == "server" {
							 | 
						|
												if data.SortOrder == "asc" {
							 | 
						|
													templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 41, "<i class=\"fas fa-sort-up ms-1\"></i>")
							 | 
						|
													if templ_7745c5c3_Err != nil {
							 | 
						|
														return templ_7745c5c3_Err
							 | 
						|
													}
							 | 
						|
												} else {
							 | 
						|
													templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 42, "<i class=\"fas fa-sort-down ms-1\"></i>")
							 | 
						|
													if templ_7745c5c3_Err != nil {
							 | 
						|
														return templ_7745c5c3_Err
							 | 
						|
													}
							 | 
						|
												}
							 | 
						|
											} else {
							 | 
						|
												templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 43, "<i class=\"fas fa-sort ms-1 text-muted\"></i>")
							 | 
						|
												if templ_7745c5c3_Err != nil {
							 | 
						|
													return templ_7745c5c3_Err
							 | 
						|
												}
							 | 
						|
											}
							 | 
						|
											templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 44, "</a></th><th><a href=\"#\" onclick=\"sortBy('data_center')\" class=\"text-dark text-decoration-none\">Data Center ")
							 | 
						|
											if templ_7745c5c3_Err != nil {
							 | 
						|
												return templ_7745c5c3_Err
							 | 
						|
											}
							 | 
						|
											if data.SortBy == "data_center" {
							 | 
						|
												if data.SortOrder == "asc" {
							 | 
						|
													templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 45, "<i class=\"fas fa-sort-up ms-1\"></i>")
							 | 
						|
													if templ_7745c5c3_Err != nil {
							 | 
						|
														return templ_7745c5c3_Err
							 | 
						|
													}
							 | 
						|
												} else {
							 | 
						|
													templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 46, "<i class=\"fas fa-sort-down ms-1\"></i>")
							 | 
						|
													if templ_7745c5c3_Err != nil {
							 | 
						|
														return templ_7745c5c3_Err
							 | 
						|
													}
							 | 
						|
												}
							 | 
						|
											} else {
							 | 
						|
												templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 47, "<i class=\"fas fa-sort ms-1 text-muted\"></i>")
							 | 
						|
												if templ_7745c5c3_Err != nil {
							 | 
						|
													return templ_7745c5c3_Err
							 | 
						|
												}
							 | 
						|
											}
							 | 
						|
											templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 48, "</a></th><th><a href=\"#\" onclick=\"sortBy('rack')\" class=\"text-dark text-decoration-none\">Rack ")
							 | 
						|
											if templ_7745c5c3_Err != nil {
							 | 
						|
												return templ_7745c5c3_Err
							 | 
						|
											}
							 | 
						|
											if data.SortBy == "rack" {
							 | 
						|
												if data.SortOrder == "asc" {
							 | 
						|
													templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 49, "<i class=\"fas fa-sort-up ms-1\"></i>")
							 | 
						|
													if templ_7745c5c3_Err != nil {
							 | 
						|
														return templ_7745c5c3_Err
							 | 
						|
													}
							 | 
						|
												} else {
							 | 
						|
													templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 50, "<i class=\"fas fa-sort-down ms-1\"></i>")
							 | 
						|
													if templ_7745c5c3_Err != nil {
							 | 
						|
														return templ_7745c5c3_Err
							 | 
						|
													}
							 | 
						|
												}
							 | 
						|
											} else {
							 | 
						|
												templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 51, "<i class=\"fas fa-sort ms-1 text-muted\"></i>")
							 | 
						|
												if templ_7745c5c3_Err != nil {
							 | 
						|
													return templ_7745c5c3_Err
							 | 
						|
												}
							 | 
						|
											}
							 | 
						|
											templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 52, "</a></th><th class=\"text-dark\">Disk Type</th><th class=\"text-dark\">Shard Size</th><th class=\"text-dark\">Actions</th></tr></thead> <tbody>")
							 | 
						|
											if templ_7745c5c3_Err != nil {
							 | 
						|
												return templ_7745c5c3_Err
							 | 
						|
											}
							 | 
						|
											for _, shard := range data.Shards {
							 | 
						|
												templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 53, "<tr><td><span class=\"badge bg-primary\">")
							 | 
						|
												if templ_7745c5c3_Err != nil {
							 | 
						|
													return templ_7745c5c3_Err
							 | 
						|
												}
							 | 
						|
												var templ_7745c5c3_Var16 string
							 | 
						|
												templ_7745c5c3_Var16, templ_7745c5c3_Err = templ.JoinStringErrs(fmt.Sprintf("%02d", shard.ShardID))
							 | 
						|
												if templ_7745c5c3_Err != nil {
							 | 
						|
													return templ.Error{Err: templ_7745c5c3_Err, FileName: `view/app/ec_volume_details.templ`, Line: 243, Col: 110}
							 | 
						|
												}
							 | 
						|
												_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var16))
							 | 
						|
												if templ_7745c5c3_Err != nil {
							 | 
						|
													return templ_7745c5c3_Err
							 | 
						|
												}
							 | 
						|
												templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 54, "</span></td><td><a href=\"")
							 | 
						|
												if templ_7745c5c3_Err != nil {
							 | 
						|
													return templ_7745c5c3_Err
							 | 
						|
												}
							 | 
						|
												var templ_7745c5c3_Var17 templ.SafeURL
							 | 
						|
												templ_7745c5c3_Var17, templ_7745c5c3_Err = templ.JoinURLErrs(templ.URL("/cluster/volume-servers/" + shard.Server))
							 | 
						|
												if templ_7745c5c3_Err != nil {
							 | 
						|
													return templ.Error{Err: templ_7745c5c3_Err, FileName: `view/app/ec_volume_details.templ`, Line: 246, Col: 106}
							 | 
						|
												}
							 | 
						|
												_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var17))
							 | 
						|
												if templ_7745c5c3_Err != nil {
							 | 
						|
													return templ_7745c5c3_Err
							 | 
						|
												}
							 | 
						|
												templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 55, "\" class=\"text-primary text-decoration-none\"><code class=\"small\">")
							 | 
						|
												if templ_7745c5c3_Err != nil {
							 | 
						|
													return templ_7745c5c3_Err
							 | 
						|
												}
							 | 
						|
												var templ_7745c5c3_Var18 string
							 | 
						|
												templ_7745c5c3_Var18, templ_7745c5c3_Err = templ.JoinStringErrs(shard.Server)
							 | 
						|
												if templ_7745c5c3_Err != nil {
							 | 
						|
													return templ.Error{Err: templ_7745c5c3_Err, FileName: `view/app/ec_volume_details.templ`, Line: 247, Col: 81}
							 | 
						|
												}
							 | 
						|
												_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var18))
							 | 
						|
												if templ_7745c5c3_Err != nil {
							 | 
						|
													return templ_7745c5c3_Err
							 | 
						|
												}
							 | 
						|
												templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 56, "</code></a></td><td><span class=\"badge bg-primary text-white\">")
							 | 
						|
												if templ_7745c5c3_Err != nil {
							 | 
						|
													return templ_7745c5c3_Err
							 | 
						|
												}
							 | 
						|
												var templ_7745c5c3_Var19 string
							 | 
						|
												templ_7745c5c3_Var19, templ_7745c5c3_Err = templ.JoinStringErrs(shard.DataCenter)
							 | 
						|
												if templ_7745c5c3_Err != nil {
							 | 
						|
													return templ.Error{Err: templ_7745c5c3_Err, FileName: `view/app/ec_volume_details.templ`, Line: 251, Col: 103}
							 | 
						|
												}
							 | 
						|
												_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var19))
							 | 
						|
												if templ_7745c5c3_Err != nil {
							 | 
						|
													return templ_7745c5c3_Err
							 | 
						|
												}
							 | 
						|
												templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 57, "</span></td><td><span class=\"badge bg-secondary text-white\">")
							 | 
						|
												if templ_7745c5c3_Err != nil {
							 | 
						|
													return templ_7745c5c3_Err
							 | 
						|
												}
							 | 
						|
												var templ_7745c5c3_Var20 string
							 | 
						|
												templ_7745c5c3_Var20, templ_7745c5c3_Err = templ.JoinStringErrs(shard.Rack)
							 | 
						|
												if templ_7745c5c3_Err != nil {
							 | 
						|
													return templ.Error{Err: templ_7745c5c3_Err, FileName: `view/app/ec_volume_details.templ`, Line: 254, Col: 99}
							 | 
						|
												}
							 | 
						|
												_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var20))
							 | 
						|
												if templ_7745c5c3_Err != nil {
							 | 
						|
													return templ_7745c5c3_Err
							 | 
						|
												}
							 | 
						|
												templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 58, "</span></td><td><span class=\"text-dark\">")
							 | 
						|
												if templ_7745c5c3_Err != nil {
							 | 
						|
													return templ_7745c5c3_Err
							 | 
						|
												}
							 | 
						|
												var templ_7745c5c3_Var21 string
							 | 
						|
												templ_7745c5c3_Var21, templ_7745c5c3_Err = templ.JoinStringErrs(shard.DiskType)
							 | 
						|
												if templ_7745c5c3_Err != nil {
							 | 
						|
													return templ.Error{Err: templ_7745c5c3_Err, FileName: `view/app/ec_volume_details.templ`, Line: 257, Col: 83}
							 | 
						|
												}
							 | 
						|
												_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var21))
							 | 
						|
												if templ_7745c5c3_Err != nil {
							 | 
						|
													return templ_7745c5c3_Err
							 | 
						|
												}
							 | 
						|
												templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 59, "</span></td><td><span class=\"text-success\">")
							 | 
						|
												if templ_7745c5c3_Err != nil {
							 | 
						|
													return templ_7745c5c3_Err
							 | 
						|
												}
							 | 
						|
												var templ_7745c5c3_Var22 string
							 | 
						|
												templ_7745c5c3_Var22, templ_7745c5c3_Err = templ.JoinStringErrs(bytesToHumanReadableUint64(shard.Size))
							 | 
						|
												if templ_7745c5c3_Err != nil {
							 | 
						|
													return templ.Error{Err: templ_7745c5c3_Err, FileName: `view/app/ec_volume_details.templ`, Line: 260, Col: 110}
							 | 
						|
												}
							 | 
						|
												_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var22))
							 | 
						|
												if templ_7745c5c3_Err != nil {
							 | 
						|
													return templ_7745c5c3_Err
							 | 
						|
												}
							 | 
						|
												templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 60, "</span></td><td><a href=\"")
							 | 
						|
												if templ_7745c5c3_Err != nil {
							 | 
						|
													return templ_7745c5c3_Err
							 | 
						|
												}
							 | 
						|
												var templ_7745c5c3_Var23 templ.SafeURL
							 | 
						|
												templ_7745c5c3_Var23, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(fmt.Sprintf("http://%s/ui/index.html", shard.Server)))
							 | 
						|
												if templ_7745c5c3_Err != nil {
							 | 
						|
													return templ.Error{Err: templ_7745c5c3_Err, FileName: `view/app/ec_volume_details.templ`, Line: 263, Col: 121}
							 | 
						|
												}
							 | 
						|
												_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var23))
							 | 
						|
												if templ_7745c5c3_Err != nil {
							 | 
						|
													return templ_7745c5c3_Err
							 | 
						|
												}
							 | 
						|
												templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 61, "\" target=\"_blank\" class=\"btn btn-sm btn-primary\"><i class=\"fas fa-external-link-alt me-1\"></i>Volume Server</a></td></tr>")
							 | 
						|
												if templ_7745c5c3_Err != nil {
							 | 
						|
													return templ_7745c5c3_Err
							 | 
						|
												}
							 | 
						|
											}
							 | 
						|
											templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 62, "</tbody></table></div>")
							 | 
						|
											if templ_7745c5c3_Err != nil {
							 | 
						|
												return templ_7745c5c3_Err
							 | 
						|
											}
							 | 
						|
										} else {
							 | 
						|
											templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 63, "<div class=\"text-center py-4\"><i class=\"fas fa-exclamation-triangle fa-3x text-warning mb-3\"></i><h5>No EC shards found</h5><p class=\"text-muted\">This volume may not be EC encoded yet.</p></div>")
							 | 
						|
											if templ_7745c5c3_Err != nil {
							 | 
						|
												return templ_7745c5c3_Err
							 | 
						|
											}
							 | 
						|
										}
							 | 
						|
										templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 64, "</div></div><script>\n        // Sorting functionality\n        function sortBy(field) {\n            const currentSort = new URLSearchParams(window.location.search).get('sort_by');\n            const currentOrder = new URLSearchParams(window.location.search).get('sort_order') || 'asc';\n            \n            let newOrder = 'asc';\n            if (currentSort === field && currentOrder === 'asc') {\n                newOrder = 'desc';\n            }\n            \n            const url = new URL(window.location);\n            url.searchParams.set('sort_by', field);\n            url.searchParams.set('sort_order', newOrder);\n            window.location.href = url.toString();\n        }\n    </script>")
							 | 
						|
										if templ_7745c5c3_Err != nil {
							 | 
						|
											return templ_7745c5c3_Err
							 | 
						|
										}
							 | 
						|
										return nil
							 | 
						|
									})
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								// Helper function to convert bytes to human readable format (uint64 version)
							 | 
						|
								func bytesToHumanReadableUint64(bytes uint64) string {
							 | 
						|
									const unit = 1024
							 | 
						|
									if bytes < unit {
							 | 
						|
										return fmt.Sprintf("%dB", bytes)
							 | 
						|
									}
							 | 
						|
									div, exp := uint64(unit), 0
							 | 
						|
									for n := bytes / unit; n >= unit; n /= unit {
							 | 
						|
										div *= unit
							 | 
						|
										exp++
							 | 
						|
									}
							 | 
						|
									return fmt.Sprintf("%.1f%cB", float64(bytes)/float64(div), "KMGTPE"[exp])
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								var _ = templruntime.GeneratedTemplate
							 |