func()

in config/metrics.go [38:80]


func (m *Metric) Validate(c *Config) error {
	if err := m.Definition.Validate(); err != nil {
		return err
	}
	types := 0
	for _, v := range []metricValidator{m.Aggregation, m.Passthrough} {
		if reflect.ValueOf(v).IsNil() {
			continue
		}
		if err := v.Validate(m, c); err != nil {
			return fmt.Errorf("metric %v: %v", m.Name, err)
		}
		types++
	}

	if types == 0 {
		return fmt.Errorf("metric %v: missing buffering configuration", m.Name)
	}

	if types > 1 {
		return fmt.Errorf("metric %v: multiple buffering configurations", m.Name)
	}

	if len(m.Endpoints) == 0 {
		return fmt.Errorf("metric %v: no endpoints defined", m.Name)
	}

	usedEndpoints := make(map[string]bool)
	for _, e := range m.Endpoints {
		if e.Name == "" {
			return fmt.Errorf("metric %v: endpoint missing name", m.Name)
		}
		if !c.Endpoints.exists(e.Name) {
			return fmt.Errorf("metric %v: endpoint does not exist: %v", m.Name, e.Name)
		}
		if usedEndpoints[e.Name] {
			return fmt.Errorf("metric %v: endpoint listed twice: %v", m.Name, e.Name)
		}
		usedEndpoints[e.Name] = true
	}

	return nil
}