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  }