Help us shape the future of Go! Take the 2026 Go Developer Survey

template

package
v0.34.2 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 29, 2026 License: Apache-2.0 Imports: 21 Imported by: 423

Documentation

Index

Constants

This section is empty.

Variables

View Source
var DefaultFuncs = FuncMap{
	"toUpper": strings.ToUpper,
	"toLower": strings.ToLower,
	"title": func(text string) string {

		return cases.Title(language.AmericanEnglish).String(text)
	},
	"trimSpace": strings.TrimSpace,

	"join": func(sep string, s []string) string {
		return strings.Join(s, sep)
	},
	"match": regexp.MatchString,
	"safeHtml": func(text string) tmplhtml.HTML {
		return tmplhtml.HTML(text)
	},
	"safeUrl": func(text string) tmplhtml.URL {
		return tmplhtml.URL(text)
	},
	"urlUnescape": url.QueryUnescape,
	"reReplaceAll": func(pattern, repl, text string) string {
		re := regexp.MustCompile(pattern)
		return re.ReplaceAllString(text, repl)
	},
	"stringSlice": func(s ...string) []string {
		return s
	},

	"routeLabels": func(name string) (string, error) {
		return "", nil
	},

	"date": func(fmt string, t time.Time) string {
		return t.Format(fmt)
	},

	"tz": func(name string, t time.Time) (time.Time, error) {
		loc, err := time.LoadLocation(name)
		if err != nil {
			return time.Time{}, err
		}
		return t.In(loc), nil
	},
	"now":              time.Now,
	"since":            time.Since,
	"humanizeDuration": commonTemplates.HumanizeDuration,

	"toDate": func(layout, s string) time.Time {
		t, _ := time.ParseInLocation(layout, s, time.UTC)
		return t
	},

	"mustToDate": func(layout, s string) (time.Time, error) {
		return time.ParseInLocation(layout, s, time.UTC)
	},
	"toJson": func(v any) (string, error) {
		bytes, err := json.Marshal(v)
		if err != nil {
			return "", err
		}
		return string(bytes), nil
	},

	"base64encode": func(text string) string {
		return base64.URLEncoding.EncodeToString([]byte(text))
	},
	"base64decode": func(text string) (string, error) {
		decoded, err := base64.URLEncoding.DecodeString(text)
		if err != nil {
			return "", err
		}
		return string(decoded), nil
	},
	"list": func(args ...any) ([]any, error) {
		if args == nil {
			return []any{}, nil
		}
		return args, nil
	},
	"append": func(slice []any, args ...any) []any {
		return append(slice, args...)
	},
	"dict": func(values ...any) (map[string]any, error) {
		if len(values)%2 != 0 {
			return nil, fmt.Errorf("dict requires an even number of arguments")
		}

		res := make(map[string]any, len(values)/2)
		for i := 0; i < len(values); i += 2 {
			key, ok := values[i].(string)
			if !ok {
				return nil, fmt.Errorf("dict keys must be strings")
			}
			res[key] = values[i+1]
		}

		return res, nil
	},
}

Functions

func DeepCopyWithTemplate added in v0.30.0

func DeepCopyWithTemplate(value any, tmplTextFunc TemplateFunc) (any, error)

DeepCopyWithTemplate returns a deep copy of a map/slice/array/string/int/bool or combination thereof, executing the provided template (with the provided data) on all string keys or values. All maps are connverted to map[string]any, with all non-string keys discarded.

func MarkRouteLabelsRendered added in v0.34.0

func MarkRouteLabelsRendered(d *Data)

MarkRouteLabelsRendered marks d.RouteLabels as already-rendered, so the routeLabels template function returns the values verbatim rather than executing them a second time.

Types

type Alert

type Alert struct {
	Status       string    `json:"status"`
	Labels       KV        `json:"labels"`
	Annotations  KV        `json:"annotations"`
	StartsAt     time.Time `json:"startsAt"`
	EndsAt       time.Time `json:"endsAt"`
	GeneratorURL string    `json:"generatorURL"`
	Fingerprint  string    `json:"fingerprint"`
}

Alert holds one alert for notification templates.

type Alerts

type Alerts []Alert

Alerts is a list of Alert objects.

func (Alerts) Firing

func (as Alerts) Firing() []Alert

Firing returns the subset of alerts that are firing.

func (Alerts) Resolved

func (as Alerts) Resolved() []Alert

Resolved returns the subset of alerts that are resolved.

type Data

type Data struct {
	Receiver string `json:"receiver"`
	Status   string `json:"status"`
	Alerts   Alerts `json:"alerts"`

	NotificationReason string `json:"notification_reason"`

	GroupLabels       KV `json:"groupLabels"`
	CommonLabels      KV `json:"commonLabels"`
	CommonAnnotations KV `json:"commonAnnotations"`
	RouteLabels       KV `json:"routeLabels"`

	ExternalURL string `json:"externalURL"`
	// contains filtered or unexported fields
}

Data is the data passed to notification templates and webhook pushes.

End-users should not be exposed to Go's type system, as this will confuse them and prevent simple things like simple equality checks to fail. Map everything to float64/string.

type FuncMap

type FuncMap map[string]any

type KV

type KV map[string]string

KV is a set of key/value string pairs.

func (KV) Names

func (kv KV) Names() Strings

Names returns the names of the label names in the LabelSet.

func (KV) Remove

func (kv KV) Remove(keys []string) KV

Remove returns a copy of the key/value set without the given keys.

func (KV) SortedPairs

func (kv KV) SortedPairs() Pairs

SortedPairs returns a sorted list of key/value pairs.

func (KV) String added in v0.26.0

func (kv KV) String() string

func (KV) Values

func (kv KV) Values() Strings

Values returns a list of the values in the LabelSet.

type Option added in v0.26.0

type Option func(text *tmpltext.Template, html *tmplhtml.Template)

Option is generic modifier of the text and html templates used by a Template.

type Pair

type Pair struct {
	Name, Value string
}

Pair is a key/value string pair.

type Pairs

type Pairs []Pair

Pairs is a list of key/value string pairs.

func (Pairs) Names

func (ps Pairs) Names() Strings

Names returns a list of names of the pairs.

func (Pairs) String added in v0.26.0

func (ps Pairs) String() string

func (Pairs) Values

func (ps Pairs) Values() Strings

Values returns a list of values of the pairs.

type Strings added in v0.34.0

type Strings []string

Strings is a list of strings exposed to templates.

func (Strings) Join added in v0.34.0

func (s Strings) Join(sep string) string

Join makes strings.Join accessible from templates, e.g. {{ .GroupLabels.Values.Join ":" }}.

type Template

type Template struct {
	ExternalURL *url.URL
	// contains filtered or unexported fields
}

Template bundles a text and a html template instance.

func FromGlobs

func FromGlobs(paths []string, options ...Option) (*Template, error)

FromGlobs calls ParseGlob on all path globs provided and returns the resulting Template.

func New added in v0.26.0

func New(options ...Option) (*Template, error)

New returns a new Template with the DefaultFuncs added. The DefaultFuncs have precedence over any added custom functions. Options allow customization of the text and html templates in given order.

func (*Template) Data

func (t *Template) Data(recv string, groupLabels, routeLabels model.LabelSet, notificationReason string, alerts ...*types.Alert) *Data

Data assembles data for template expansion.

func (*Template) ExecuteHTMLString

func (t *Template) ExecuteHTMLString(html string, data any) (string, error)

ExecuteHTMLString needs a meaningful doc comment (TODO(fabxc)).

func (*Template) ExecuteTextString

func (t *Template) ExecuteTextString(text string, data any) (string, error)

ExecuteTextString needs a meaningful doc comment (TODO(fabxc)).

func (*Template) FromGlob added in v0.26.0

func (t *Template) FromGlob(path string) error

FromGlob calls ParseGlob on given path glob provided and parses into the template.

func (*Template) Parse added in v0.26.0

func (t *Template) Parse(r io.Reader) error

Parse parses the given text into the template.

func (*Template) RouteLabelRenderer added in v0.34.0

func (t *Template) RouteLabelRenderer(data *Data) func(name string) (string, error)

RouteLabelRenderer returns a function that renders a route label by name from data.RouteLabels. All returned renders share a single resolver, so each label — and any label it cross-references via {{ routeLabels "x" }} — is rendered at most once per call to RouteLabelRenderer (and cycles are still detected). It is used by the dispatch-time expansion of a group's route labels, where many labels are rendered against the same data and may reference each other.

type TemplateFunc added in v0.30.0

type TemplateFunc func(string) (string, error)

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL