You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
86 lines
1.4 KiB
86 lines
1.4 KiB
package main
|
|
|
|
import (
|
|
"bufio"
|
|
"fmt"
|
|
"log"
|
|
"os"
|
|
"strings"
|
|
"time"
|
|
)
|
|
|
|
type test struct {
|
|
name string
|
|
t time.Time
|
|
}
|
|
|
|
type result struct {
|
|
totalTime time.Duration
|
|
count int
|
|
}
|
|
|
|
func createReport(f string, m map[string]*result) {
|
|
tests := []test{}
|
|
file, err := os.Open(f)
|
|
if err != nil {
|
|
log.Printf("failed to open file: %s", err)
|
|
return
|
|
}
|
|
defer file.Close()
|
|
|
|
scanner := bufio.NewScanner(file)
|
|
for scanner.Scan() {
|
|
s := strings.Split(scanner.Text(), " ")
|
|
ts := strings.Replace(
|
|
strings.Replace(
|
|
s[0],
|
|
"[",
|
|
"",
|
|
-1,
|
|
),
|
|
"]",
|
|
"",
|
|
-1,
|
|
)
|
|
t, err := time.Parse("15:04:05", ts)
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
qn := strings.Split(s[2], "::")
|
|
tests = append(tests, test{qn[len(qn)-1], t})
|
|
}
|
|
|
|
if err := scanner.Err(); err != nil {
|
|
log.Printf("failed to scan cleanly: %s", err)
|
|
return
|
|
}
|
|
for i, te := range tests {
|
|
if i == 0 {
|
|
continue
|
|
}
|
|
realTime := te.t.Sub(tests[i-1].t)
|
|
e, ok := m[te.name]
|
|
if !ok {
|
|
m[te.name] = &result{
|
|
totalTime: realTime,
|
|
count: 1,
|
|
}
|
|
} else {
|
|
e.totalTime = e.totalTime + realTime
|
|
e.count = e.count + 1
|
|
}
|
|
}
|
|
}
|
|
|
|
func main() {
|
|
m := make(map[string]*result)
|
|
if len(os.Args) < 2 {
|
|
log.Fatal("must provide file")
|
|
}
|
|
for _, a := range os.Args[1:] {
|
|
createReport(a, m)
|
|
}
|
|
for k, v := range m {
|
|
fmt.Printf("%s %s\n", k, (v.totalTime / time.Duration(v.count)))
|
|
}
|
|
}
|
|
|