mirror of
https://github.com/gohugoio/hugo.git
synced 2024-11-07 20:30:36 -05:00
tpl/debug: Add average and median to timer output
This commit is contained in:
parent
5160c7efa5
commit
46bdc03885
2 changed files with 20 additions and 6 deletions
|
@ -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)
|
||||||
|
|
|
@ -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")
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue