github.com/cloud-foundations/dominator@v0.0.0-20221004181915-6e4fee580046/imageserver/httpd/listImages.go (about) 1 package httpd 2 3 import ( 4 "bufio" 5 "fmt" 6 "net/http" 7 8 "github.com/Cloud-Foundations/Dominator/lib/format" 9 "github.com/Cloud-Foundations/Dominator/lib/html" 10 "github.com/Cloud-Foundations/Dominator/lib/image" 11 "github.com/Cloud-Foundations/Dominator/lib/verstr" 12 ) 13 14 func (s state) listImagesHandler(w http.ResponseWriter, req *http.Request) { 15 writer := bufio.NewWriter(w) 16 defer writer.Flush() 17 imageNames := s.imageDataBase.ListImages() 18 verstr.Sort(imageNames) 19 if req.URL.RawQuery == "output=text" { 20 for _, name := range imageNames { 21 fmt.Fprintln(writer, name) 22 } 23 return 24 } 25 fmt.Fprintln(writer, "<title>imageserver images</title>") 26 fmt.Fprintln(writer, `<style> 27 table, th, td { 28 border-collapse: collapse; 29 } 30 </style>`) 31 fmt.Fprintln(writer, "<body>") 32 fmt.Fprintln(writer, "<h3>") 33 fmt.Fprintln(writer, `<table border="1" style="width:100%">`) 34 tw, _ := html.NewTableWriter(writer, true, 35 "Name", "Data Size", "Data Inodes", "Computed Inodes", "Filter Lines", 36 "Triggers", "Branch", "Commit") 37 for _, name := range imageNames { 38 writeImage(tw, name, s.imageDataBase.GetImage(name)) 39 } 40 fmt.Fprintln(writer, "</table>") 41 fmt.Fprintln(writer, "</body>") 42 } 43 44 func writeImage(tw *html.TableWriter, name string, image *image.Image) { 45 tw.WriteRow("", "", 46 fmt.Sprintf("<a href=\"showImage?%s\">%s</a>", name, name), 47 fmt.Sprintf("<a href=\"listImage?%s\">%s</a>", 48 name, format.FormatBytes(image.FileSystem.TotalDataBytes)), 49 fmt.Sprintf("<a href=\"listImage?%s\">%d</a>", 50 name, image.FileSystem.NumRegularInodes), 51 func() string { 52 if num := image.FileSystem.NumComputedRegularInodes(); num < 1 { 53 return "0" 54 } else { 55 return fmt.Sprintf("<a href=\"listComputedInodes?%s\">%d</a>", 56 name, num) 57 } 58 }(), 59 func() string { 60 if image.Filter == nil { 61 return "(sparse filter)" 62 } else if len(image.Filter.FilterLines) < 1 { 63 return "0" 64 } else { 65 return fmt.Sprintf("<a href=\"listFilter?%s\">%d</a>", 66 name, len(image.Filter.FilterLines)) 67 } 68 }(), 69 func() string { 70 if image.Triggers == nil || len(image.Triggers.Triggers) < 1 { 71 return "0" 72 } else { 73 return fmt.Sprintf("<a href=\"listTriggers?%s\">%d</a>", 74 name, len(image.Triggers.Triggers)) 75 } 76 }(), 77 image.BuildBranch, 78 image.BuildCommitId, 79 ) 80 }