Files
smpp-tester/benchmark/benchmark.go
PhatPhuckDave 7faa683237
All checks were successful
Run Tests / Test (push) Successful in 24s
Benchmark BufferPool / RunBenchmarks (push) Successful in 26s
Print first date then commit hash for benchmark results
2024-07-24 11:16:57 +02:00

163 lines
4.4 KiB
Go

package main
import (
"flag"
"log"
"os"
"os/exec"
"path"
"strings"
"time"
)
func init() {
}
func main() {
setid := flag.Bool("setid", false, "Set the git user name and email to benchmark")
flag.Parse()
log.Printf("Starting benchmarking...")
if *setid {
setId()
}
head := getHeadHash()
log.Printf("HEAD at %s", head)
err := os.MkdirAll("results", 0755)
if err != nil {
log.Fatalf("Error creating results directory with %v", err)
}
now := time.Now().Format(time.DateOnly)
resultFile := path.Join(".", "results", now+"_"+head+".txt")
log.Printf("Writing results to %s", resultFile)
outFile, err := os.Create(resultFile)
if err != nil {
log.Fatalf("Error creating result file %s with %v", resultFile, err)
}
cmd := exec.Command("go", "test", "-bench", ".", "./pdu")
cmd.Dir = "../"
cmd.Stdout = outFile
log.Printf("Running benchmark...")
err = cmd.Run()
if err != nil {
log.Fatal(err)
}
log.Printf("Benchmarking done; writing results to git...")
log.Printf("Removing local benchmark branch")
removeLocalBenchmarkBranch()
time.Sleep(200 * time.Millisecond)
log.Printf("Fetching benchmark branch")
fetchBenchmark()
time.Sleep(200 * time.Millisecond)
log.Printf("Tracking benchmark branch")
trackBenchmark()
time.Sleep(200 * time.Millisecond)
log.Printf("Checking out benchmark branch")
checkoutBenchmark()
time.Sleep(200 * time.Millisecond)
log.Printf("Adding benchmark results")
addResults()
time.Sleep(200 * time.Millisecond)
log.Printf("Committing benchmark results")
commitBenchmark()
time.Sleep(200 * time.Millisecond)
log.Printf("Pushing benchmark results")
pushBenchmark()
log.Printf("Done")
}
func removeLocalBenchmarkBranch() {
gitBranch := exec.Command("git", "branch", "-D", "benchmark")
gitBranch.Dir = "../"
out, err := gitBranch.CombinedOutput()
if err != nil {
log.Printf("Could not remove local benchmark branch with code %v and error %v", err, string(out))
}
}
func getHeadHash() string {
cmd := exec.Command("git", "rev-parse", "HEAD")
cmd.Dir = "../"
out, err := cmd.CombinedOutput()
if err != nil {
log.Fatalf("Could not get HEAD with code %v and error %v", err, string(out))
}
return strings.TrimSpace(string(out))
}
func fetchBenchmark() {
gitFetch := exec.Command("git", "fetch", "origin", "benchmark")
gitFetch.Dir = "../"
out, err := gitFetch.CombinedOutput()
if err != nil {
log.Fatalf("Could not fetch benchmark branch with code %v and error %v", err, string(out))
}
}
func trackBenchmark() {
gitTrack := exec.Command("git", "branch", "--track", "benchmark", "origin/benchmark")
gitTrack.Dir = "../"
out, err := gitTrack.CombinedOutput()
if err != nil {
log.Fatalf("Could not track benchmark branch with code %v and error %v", err, string(out))
}
}
func checkoutBenchmark() {
gitCheckout := exec.Command("git", "checkout", "benchmark")
gitCheckout.Dir = "../"
out, err := gitCheckout.CombinedOutput()
if err != nil {
log.Fatalf("Could not checkout benchmark branch with code %v and error %v", err, string(out))
}
}
func setId() {
gitConfig := exec.Command("git", "config", "user.name", "benchmark")
gitConfig.Dir = "../"
out, err := gitConfig.CombinedOutput()
if err != nil {
log.Fatalf("Could not set user name with code %v and error %v", err, string(out))
}
gitConfig = exec.Command("git", "config", "user.email", "benchmark@smpptester")
gitConfig.Dir = "../"
out, err = gitConfig.CombinedOutput()
if err != nil {
log.Fatalf("Could not set user email with code %v and error %v", err, string(out))
}
}
func addResults() {
gitAdd := exec.Command("git", "add", "benchmark/results")
gitAdd.Dir = "../"
out, err := gitAdd.CombinedOutput()
if err != nil {
log.Fatalf("Could not add results with code %v and error %v", err, string(out))
}
}
func commitBenchmark() {
gitCommit := exec.Command("git", "commit", "-am", "Benchmark results")
gitCommit.Dir = "../"
out, err := gitCommit.CombinedOutput()
if err != nil {
log.Fatalf("Could not commit benchmark results with code %v and error %v", err, string(out))
}
}
func pushBenchmark() {
gitPush := exec.Command("git", "push", "origin", "benchmark")
gitPush.Dir = "../"
out, err := gitPush.CombinedOutput()
if err != nil {
log.Fatalf("Could not push benchmark results with code %v and error %v", err, string(out))
}
}