// Converts configMaps to ConfigDataNode func ConfigMapToConfig(cfg *ConfigMap) *cdata.ConfigDataNode { if cfg == nil { return nil } config := cdata.FromTable(ParseConfig(cfg)) return config }
func (p *pluginControl) validateMetricTypeSubscription(mt core.RequestedMetric, cd *cdata.ConfigDataNode) []serror.SnapError { var serrs []serror.SnapError controlLogger.WithFields(log.Fields{ "_block": "validate-metric-subscription", "namespace": mt.Namespace(), "version": mt.Version(), }).Info("subscription called on metric") m, err := p.metricCatalog.Get(mt.Namespace(), mt.Version()) if err != nil { serrs = append(serrs, serror.New(err, map[string]interface{}{ "name": mt.Namespace().String(), "version": mt.Version(), })) return serrs } // No metric found return error. if m == nil { serrs = append(serrs, serror.New(fmt.Errorf("no metric found cannot subscribe: (%s) version(%d)", mt.Namespace(), mt.Version()))) return serrs } m.config = cd typ, serr := core.ToPluginType(m.Plugin.TypeName()) if serr != nil { return []serror.SnapError{serror.New(err)} } // merge global plugin config if m.config != nil { m.config.ReverseMerge(p.Config.Plugins.getPluginConfigDataNode(typ, m.Plugin.Name(), m.Plugin.Version())) } else { m.config = p.Config.Plugins.getPluginConfigDataNode(typ, m.Plugin.Name(), m.Plugin.Version()) } // When a metric is added to the MetricCatalog, the policy of rules defined by the plugin is added to the metric's policy. // If no rules are defined for a metric, we set the metric's policy to an empty ConfigPolicyNode. // Checking m.policy for nil will not work, we need to check if rules are nil. if m.policy.HasRules() { if m.Config() == nil { serrs = append(serrs, serror.New(fmt.Errorf("Policy defined for metric, (%s) version (%d), but no config defined in manifest", mt.Namespace(), mt.Version()))) return serrs } ncdTable, errs := m.policy.Process(m.Config().Table()) if errs != nil && errs.HasErrors() { for _, e := range errs.Errors() { serrs = append(serrs, serror.New(e)) } return serrs } m.config = cdata.FromTable(*ncdTable) } return serrs }
func (s *subscriptionGroups) validateMetric( metric core.Metric) (serrs []serror.SnapError) { m, err := s.metricCatalog.GetMetric(metric.Namespace(), metric.Version()) if err != nil { serrs = append(serrs, serror.New(err, map[string]interface{}{ "name": metric.Namespace().String(), "version": metric.Version(), })) return serrs } // No metric found return error. if m == nil { serrs = append( serrs, serror.New( fmt.Errorf("no metric found cannot subscribe: (%s) version(%d)", metric.Namespace(), metric.Version()))) return serrs } m.config = metric.Config() typ, serr := core.ToPluginType(m.Plugin.TypeName()) if serr != nil { return []serror.SnapError{serror.New(err)} } // merge global plugin config if m.config != nil { m.config.ReverseMerge( s.Config.Plugins.getPluginConfigDataNode(typ, m.Plugin.Name(), m.Plugin.Version())) } else { m.config = s.Config.Plugins.getPluginConfigDataNode(typ, m.Plugin.Name(), m.Plugin.Version()) } // When a metric is added to the MetricCatalog, the policy of rules defined by the plugin is added to the metric's policy. // If no rules are defined for a metric, we set the metric's policy to an empty ConfigPolicyNode. // Checking m.policy for nil will not work, we need to check if rules are nil. if m.policy.HasRules() { if m.Config() == nil { fields := log.Fields{ "metric": m.Namespace(), "version": m.Version(), "plugin": m.Plugin.Name(), } serrs = append(serrs, serror.New(ErrConfigRequiredForMetric, fields)) return serrs } ncdTable, errs := m.policy.Process(m.Config().Table()) if errs != nil && errs.HasErrors() { for _, e := range errs.Errors() { serrs = append(serrs, serror.New(e)) } return serrs } m.config = cdata.FromTable(*ncdTable) } return serrs }