in dispatch/route.go [59:133]
func NewRoute(cr *config.Route, parent *Route) *Route {
// Create default and overwrite with configured settings.
opts := DefaultRouteOpts
if parent != nil {
opts = parent.RouteOpts
}
if cr.Receiver != "" {
opts.Receiver = cr.Receiver
}
if cr.GroupBy != nil {
opts.GroupBy = map[model.LabelName]struct{}{}
for _, ln := range cr.GroupBy {
opts.GroupBy[ln] = struct{}{}
}
opts.GroupByAll = false
} else {
if cr.GroupByAll {
opts.GroupByAll = cr.GroupByAll
}
}
if cr.GroupWait != nil {
opts.GroupWait = time.Duration(*cr.GroupWait)
}
if cr.GroupInterval != nil {
opts.GroupInterval = time.Duration(*cr.GroupInterval)
}
if cr.RepeatInterval != nil {
opts.RepeatInterval = time.Duration(*cr.RepeatInterval)
}
// Build matchers.
var matchers labels.Matchers
// cr.Match will be deprecated. This for loop appends matchers.
for ln, lv := range cr.Match {
matcher, err := labels.NewMatcher(labels.MatchEqual, ln, lv)
if err != nil {
// This error must not happen because the config already validates the yaml.
panic(err)
}
matchers = append(matchers, matcher)
}
// cr.MatchRE will be deprecated. This for loop appends regex matchers.
for ln, lv := range cr.MatchRE {
matcher, err := labels.NewMatcher(labels.MatchRegexp, ln, lv.String())
if err != nil {
// This error must not happen because the config already validates the yaml.
panic(err)
}
matchers = append(matchers, matcher)
}
// We append the new-style matchers. This can be simplified once the deprecated matcher syntax is removed.
matchers = append(matchers, cr.Matchers...)
sort.Sort(matchers)
opts.MuteTimeIntervals = cr.MuteTimeIntervals
opts.ActiveTimeIntervals = cr.ActiveTimeIntervals
route := &Route{
parent: parent,
RouteOpts: opts,
Matchers: matchers,
Continue: cr.Continue,
}
route.Routes = NewRoutes(cr.Routes, route)
return route
}