mirror of
https://github.com/golang/go
synced 2024-11-12 04:40:22 -07:00
71 lines
1.7 KiB
Go
71 lines
1.7 KiB
Go
|
package main
|
||
|
|
||
|
import (
|
||
|
"bytes"
|
||
|
"encoding/base64"
|
||
|
"encoding/binary"
|
||
|
"fmt"
|
||
|
"http"
|
||
|
"os"
|
||
|
"regexp"
|
||
|
)
|
||
|
|
||
|
// getHighWater returns the current highwater revision hash for this builder
|
||
|
func (b *Builder) getHighWater() (rev string, err os.Error) {
|
||
|
url := fmt.Sprintf("http://%s/hw-get?builder=%s", *dashboard, b.name)
|
||
|
r, _, err := http.Get(url)
|
||
|
if err != nil {
|
||
|
return
|
||
|
}
|
||
|
buf := new(bytes.Buffer)
|
||
|
_, err = buf.ReadFrom(r.Body)
|
||
|
if err != nil {
|
||
|
return
|
||
|
}
|
||
|
r.Body.Close()
|
||
|
return buf.String(), nil
|
||
|
}
|
||
|
|
||
|
// recordResult sends build results to the dashboard
|
||
|
func (b *Builder) recordResult(buildLog string, c Commit) os.Error {
|
||
|
return httpCommand("build", map[string]string{
|
||
|
"builder": b.name,
|
||
|
"key": b.key,
|
||
|
"node": c.node,
|
||
|
"parent": c.parent,
|
||
|
"user": c.user,
|
||
|
"date": c.date,
|
||
|
"desc": c.desc,
|
||
|
"log": buildLog,
|
||
|
})
|
||
|
}
|
||
|
|
||
|
// match lines like: "package.BechmarkFunc 100000 999 ns/op"
|
||
|
var benchmarkRegexp = regexp.MustCompile("([^\n\t ]+)[\t ]+([0-9]+)[\t ]+([0-9]+) ns/op")
|
||
|
|
||
|
// recordBenchmarks sends benchmark results to the dashboard
|
||
|
func (b *Builder) recordBenchmarks(benchLog string, c Commit) os.Error {
|
||
|
results := benchmarkRegexp.FindAllStringSubmatch(benchLog, -1)
|
||
|
var buf bytes.Buffer
|
||
|
b64 := base64.NewEncoder(base64.StdEncoding, &buf)
|
||
|
for _, r := range results {
|
||
|
for _, s := range r[1:] {
|
||
|
binary.Write(b64, binary.BigEndian, uint16(len(s)))
|
||
|
b64.Write([]byte(s))
|
||
|
}
|
||
|
}
|
||
|
b64.Close()
|
||
|
return httpCommand("benchmarks", map[string]string{
|
||
|
"builder": b.name,
|
||
|
"key": b.key,
|
||
|
"node": c.node,
|
||
|
"benchmarkdata": buf.String(),
|
||
|
})
|
||
|
}
|
||
|
|
||
|
func httpCommand(cmd string, args map[string]string) os.Error {
|
||
|
url := fmt.Sprintf("http://%v/%v", *dashboard, cmd)
|
||
|
_, err := http.PostForm(url, args)
|
||
|
return err
|
||
|
}
|