package main import ( "bytes" "fmt" "net/http" "text/template" "github.com/gorilla/mux" ) var baseTemplate *template.Template func init() { baseTemplate = template.New("svgTemplate") baseTemplate, _ = baseTemplate.Parse(svgTemplate) } func badgeFromCommit(w http.ResponseWriter, r *http.Request) { commitID := mux.Vars(r)["commit"] result := svgFromHash(commitID) w.Header().Set("Content-Type", "image/svg+xml") fmt.Fprint(w, result) } func badgeFromProject(w http.ResponseWriter, r *http.Request) { projectName := mux.Vars(r)["project"] tagName := mux.Vars(r)["tag"] commitRow, err := db.Query("SELECT commit_hash FROM alias WHERE project_name=? AND project_tag=?", projectName, tagName) if err != nil { panic(err) } if !commitRow.Next() { fmt.Fprint(w, unknownCoveragePill()) return } var commitHash string commitRow.Scan(&commitHash) commitRow.Close() result := svgFromHash(commitHash) w.Header().Set("Content-Type", "image/svg+xml") fmt.Fprint(w, result) } func svgFromHash(commit string) string { result, err := db.Query("SELECT percentage FROM badge WHERE commit_hash=?", commit) defer result.Close() if err != nil { panic(err) } if !result.Next() { return unknownCoveragePill() } var percentage float64 result.Scan(&percentage) fillColour := percentageToRGB(percentage) pill := CoveragePill{ toOneDecimal(percentage*100) + "%", baseColour, fillColour, } buf := &bytes.Buffer{} baseTemplate.Execute(buf, pill) return buf.String() }