coverage/badge.go

75 lines
1.5 KiB
Go

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()
}