tpl/debug: Add average and median to timer output

This commit is contained in:
Bjørn Erik Pedersen 2023-10-21 15:41:21 +02:00
parent 5160c7efa5
commit 46bdc03885
No known key found for this signature in database
GPG key ID: 330E6E2BD4859D8F
2 changed files with 20 additions and 6 deletions

View file

@ -44,22 +44,33 @@ func New(d *deps.Deps) *Namespace {
l := d.Log.InfoCommand("timer") l := d.Log.InfoCommand("timer")
d.BuildEndListeners.Add(func() { d.BuildEndListeners.Add(func() {
type nameCountDuration struct { type data struct {
Name string Name string
Count int Count int
Average time.Duration
Median time.Duration
Duration time.Duration Duration time.Duration
} }
var timersSorted []nameCountDuration var timersSorted []data
for k, v := range timers { for k, v := range timers {
var total time.Duration var total time.Duration
var median time.Duration
sort.Slice(v, func(i, j int) bool {
return v[i].elapsed < v[j].elapsed
})
if len(v) > 0 {
median = v[len(v)/2].elapsed
}
for _, t := range v { for _, t := range v {
// Stop any running timers. // Stop any running timers.
t.Stop() t.Stop()
total += t.elapsed total += t.elapsed
} }
timersSorted = append(timersSorted, nameCountDuration{k, len(v), total}) average := total / time.Duration(len(v))
timersSorted = append(timersSorted, data{k, len(v), average, median, total})
} }
sort.Slice(timersSorted, func(i, j int) bool { sort.Slice(timersSorted, func(i, j int) bool {
@ -68,7 +79,10 @@ func New(d *deps.Deps) *Namespace {
}) })
for _, t := range timersSorted { for _, t := range timersSorted {
l.WithField("name", t.Name).WithField("count", t.Count).WithField("duration", t.Duration).Logf("") l.WithField("name", t.Name).WithField("count", t.Count).
WithField("duration", t.Duration).
WithField("average", t.Average).
WithField("median", t.Median).Logf("")
} }
ns.timers = make(map[string][]*timer) ns.timers = make(map[string][]*timer)

View file

@ -26,7 +26,7 @@ func TestTimer(t *testing.T) {
baseURL = "https://example.org/" baseURL = "https://example.org/"
disableKinds = ["taxonomy", "term"] disableKinds = ["taxonomy", "term"]
-- layouts/index.html -- -- layouts/index.html --
{{ range seq 2 }} {{ range seq 5 }}
{{ $t := debug.Timer "foo" }} {{ $t := debug.Timer "foo" }}
{{ seq 1 1000 }} {{ seq 1 1000 }}
{{ $t.Stop }} {{ $t.Stop }}
@ -41,5 +41,5 @@ disableKinds = ["taxonomy", "term"]
}, },
).Build() ).Build()
b.AssertLogContains("imer: name \"foo\" count '\\x02' duration") b.AssertLogContains("imer: name \"foo\" count '\\x05' duration")
} }