diff --git a/client/operation.go b/client/operation.go index b0a6870..228b6e1 100644 --- a/client/operation.go +++ b/client/operation.go @@ -250,19 +250,28 @@ func (hc *houstonClient) launch(meta *procmeta) error { } if readingMetric { + logger.Println("readingMetric is on :", string(buff)) if metricBuffer[len(metricBuffer)-2] == metric.METRIC_TAIL_INLINE { readingMetric = false + logger.Println("readingMetric is off :", string(buff)) metricBuffer = metricBuffer[:len(metricBuffer)-2] if metricBuffer[0] == '{' { var metric metric.MetricDescription - json.Unmarshal(metricBuffer, &metric) + if err := json.Unmarshal(metricBuffer, &metric); err != nil { + logger.Println("unmarshal metric failed :", err, string(metricBuffer)) + continue + } - exporter := newExporterForPrometheus() - accessor := exporter.registMetric(childProcName, metric) - prometheus.MustRegister(exporter) + if _, registered := metricValues[metric.Key]; !registered { + exporter := newExporterForPrometheus() + accessor := exporter.registMetric(childProcName, metric) - metricValues[metric.Key] = accessor + prometheus.Register(exporter) + + metricValues[metric.Key] = accessor + logger.Println("metric registered :", metric) + } } else { keybytes := metricBuffer[:8] valbits := binary.BigEndian.Uint64(metricBuffer[8:])