aboutsummaryrefslogtreecommitdiffstats
path: root/stats.go
blob: 61a476bf1fb8b9670ae5c33be8977bf059eeea9d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
package main

import (
	"fmt"
	"sort"
	"time"
)

type statsData struct {
	Name    string
	Count   int
	Longest time.Duration
	Total   time.Duration
}

var stats = map[string]statsData{}

func addStats(name string, v Value, t time.Time) {
	if !katiStatsFlag {
		return
	}
	d := time.Now().Sub(t)
	key := fmt.Sprintf("%s:%s", name, v.String())
	s := stats[key]
	if d > s.Longest {
		s.Longest = d
	}
	s.Total += d
	s.Count++
	stats[key] = s
}

func dumpStats() {
	if !katiStatsFlag {
		return
	}
	var sv byTotalTime
	for k, v := range stats {
		v.Name = k
		sv = append(sv, v)
	}
	sort.Sort(sv)
	for _, s := range sv {
		fmt.Printf("%s,%d,%v,%v\n", s.Name, s.Count, s.Longest, s.Total)
	}
}

type byTotalTime []statsData

func (b byTotalTime) Len() int      { return len(b) }
func (b byTotalTime) Swap(i, j int) { b[i], b[j] = b[j], b[i] }
func (b byTotalTime) Less(i, j int) bool {
	return b[i].Total > b[j].Total
}