diff --git a/sinks/gangliaCommon.go b/sinks/gangliaCommon.go index b2a1b2c..f92550b 100644 --- a/sinks/gangliaCommon.go +++ b/sinks/gangliaCommon.go @@ -148,10 +148,14 @@ type GangliaMetricConfig struct { Unit string Group string Value string + Name string } func GetCommonGangliaConfig(point lp.CCMetric) GangliaMetricConfig { mname := GangliaMetricRename(point.Name()) + if oldname, ok := point.GetMeta("oldname"); ok { + mname = GangliaMetricRename(oldname) + } for _, group := range CommonGangliaMetrics { for _, metric := range group.Metrics { if metric.Name == mname { @@ -187,6 +191,7 @@ func GetCommonGangliaConfig(point lp.CCMetric) GangliaMetricConfig { Tmax: metric.Tmax, Unit: metric.Unit, Value: valueStr, + Name: GangliaMetricRename(mname), } } } @@ -198,10 +203,15 @@ func GetCommonGangliaConfig(point lp.CCMetric) GangliaMetricConfig { Tmax: 0, Unit: "", Value: "", + Name: "", } } func GetGangliaConfig(point lp.CCMetric) GangliaMetricConfig { + mname := GangliaMetricRename(point.Name()) + if oldname, ok := point.GetMeta("oldname"); ok { + mname = GangliaMetricRename(oldname) + } group := "" if g, ok := point.GetMeta("group"); ok { group = g @@ -254,5 +264,6 @@ func GetGangliaConfig(point lp.CCMetric) GangliaMetricConfig { Tmax: DEFAULT_GANGLIA_METRIC_TMAX, Unit: unit, Value: valueStr, + Name: GangliaMetricRename(mname), } } diff --git a/sinks/gangliaSink.go b/sinks/gangliaSink.go index 22096af..5324123 100644 --- a/sinks/gangliaSink.go +++ b/sinks/gangliaSink.go @@ -39,16 +39,13 @@ func (s *GangliaSink) Write(point lp.CCMetric) error { //var tagsstr []string var argstr []string - // Get metric name - metricname := GangliaMetricRename(point.Name()) - // Get metric config (type, value, ... in suitable format) conf := GetCommonGangliaConfig(point) if len(conf.Type) == 0 { conf = GetGangliaConfig(point) } if len(conf.Type) == 0 { - return fmt.Errorf("metric %s has no 'value' field", metricname) + return fmt.Errorf("metric %q (Ganglia name %q) has no 'value' field", point.Name(), conf.Name) } if s.config.AddGangliaGroup { @@ -70,7 +67,7 @@ func (s *GangliaSink) Write(point lp.CCMetric) error { if s.config.AddTypeToName { argstr = append(argstr, fmt.Sprintf("--name=%s", GangliaMetricName(point))) } else { - argstr = append(argstr, fmt.Sprintf("--name=%s", metricname)) + argstr = append(argstr, fmt.Sprintf("--name=%s", conf.Name)) } argstr = append(argstr, fmt.Sprintf("--slope=%s", conf.Slope)) argstr = append(argstr, fmt.Sprintf("--value=%s", conf.Value)) diff --git a/sinks/libgangliaSink.go b/sinks/libgangliaSink.go index 1fc7863..3651584 100644 --- a/sinks/libgangliaSink.go +++ b/sinks/libgangliaSink.go @@ -124,24 +124,21 @@ func (s *LibgangliaSink) Write(point lp.CCMetric) error { return s.cstrCache[key] } - // Get metric name - metricname := GangliaMetricRename(point.Name()) - conf := GetCommonGangliaConfig(point) if len(conf.Type) == 0 { conf = GetGangliaConfig(point) } if len(conf.Type) == 0 { - return fmt.Errorf("metric %s has no 'value' field", metricname) + return fmt.Errorf("metric %q (Ganglia name %q) has no 'value' field", point.Name(), conf.Name) } if s.config.AddTypeToName { - metricname = GangliaMetricName(point) + conf.Name = GangliaMetricName(point) } c_value = C.CString(conf.Value) c_type = lookup(conf.Type) - c_name = lookup(metricname) + c_name = lookup(conf.Name) // Add unit unit := ""