metrics: Add simple template metrics feature

This commit is contained in:
Cameron Moore
2017-09-26 13:03:04 -05:00
committed by Bjørn Erik Pedersen
parent cb8eb47260
commit b4a14c25fe
7 changed files with 159 additions and 3 deletions

View File

@@ -15,6 +15,7 @@ package tpl
import (
"io"
"time"
"text/template/parse"
@@ -22,6 +23,7 @@ import (
texttemplate "text/template"
bp "github.com/gohugoio/hugo/bufferpool"
"github.com/gohugoio/hugo/metrics"
)
var (
@@ -66,13 +68,16 @@ type TemplateDebugger interface {
// TemplateAdapter implements the TemplateExecutor interface.
type TemplateAdapter struct {
Template
Metrics metrics.Provider
}
// Execute executes the current template. The actual execution is performed
// by the embedded text or html template, but we add an implementation here so
// we can add a timer for some metrics.
func (t *TemplateAdapter) Execute(w io.Writer, data interface{}) error {
// TODO(moorereason) metrics fmt.Println("Execute:", t.Name())
if t.Metrics != nil {
defer t.Metrics.MeasureSince(t.Name(), time.Now())
}
return t.Template.Execute(w, data)
}

View File

@@ -112,15 +112,25 @@ func (t *templateHandler) Lookup(name string) *tpl.TemplateAdapter {
// in the text template collection.
// The templates are stored without the prefix identificator.
name = strings.TrimPrefix(name, textTmplNamePrefix)
return t.text.Lookup(name)
te := t.text.Lookup(name)
if te != nil {
te.Metrics = t.Deps.Metrics
}
return te
}
// Look in both
if te := t.html.Lookup(name); te != nil {
te.Metrics = t.Deps.Metrics
return te
}
return t.text.Lookup(name)
te := t.text.Lookup(name)
if te != nil {
te.Metrics = t.Deps.Metrics
}
return te
}
func (t *templateHandler) clone(d *deps.Deps) *templateHandler {