]> git.maquefel.me Git - brevno-suite/hugo/commitdiff
tpl/debug: Add average and median to timer output
authorBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Sat, 21 Oct 2023 13:41:21 +0000 (15:41 +0200)
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Sat, 21 Oct 2023 13:41:21 +0000 (15:41 +0200)
tpl/debug/debug.go
tpl/debug/integration_test.go

index 02fe562c31728313c70528dbeb96ea3e1bc9f07d..dd0593e2721108f3d6dee690857eecebe113903c 100644 (file)
@@ -44,22 +44,33 @@ func New(d *deps.Deps) *Namespace {
        l := d.Log.InfoCommand("timer")
 
        d.BuildEndListeners.Add(func() {
-               type nameCountDuration struct {
+               type data struct {
                        Name     string
                        Count    int
+                       Average  time.Duration
+                       Median   time.Duration
                        Duration time.Duration
                }
 
-               var timersSorted []nameCountDuration
+               var timersSorted []data
 
                for k, v := range timers {
                        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 {
                                // Stop any running timers.
                                t.Stop()
                                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 {
@@ -68,7 +79,10 @@ func New(d *deps.Deps) *Namespace {
                })
 
                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)
index 6520e60fb61716db0643340e3c7a37fb23bb4229..3d120580da4afe0416348308af380d6e7cc06880 100644 (file)
@@ -26,7 +26,7 @@ func TestTimer(t *testing.T) {
 baseURL = "https://example.org/"
 disableKinds = ["taxonomy", "term"]
 -- layouts/index.html --
-{{ range seq 2 }}
+{{ range seq 5 }}
 {{ $t := debug.Timer "foo" }}
 {{ seq 1 1000 }}
 {{ $t.Stop }}
@@ -41,5 +41,5 @@ disableKinds = ["taxonomy", "term"]
                },
        ).Build()
 
-       b.AssertLogContains("imer:  name \"foo\" count '\\x02' duration")
+       b.AssertLogContains("imer:  name \"foo\" count '\\x05' duration")
 }