diff --git a/client/custom_exporter.go b/client/custom_exporter.go index 911fc51..68441f7 100644 --- a/client/custom_exporter.go +++ b/client/custom_exporter.go @@ -30,7 +30,7 @@ type metricValueAccessor struct { ptr *uint64 } -func (va metricValueAccessor) set(val float64) { +func (va *metricValueAccessor) set(val float64) { atomic.StoreUint64(va.ptr, math.Float64bits(val)) } @@ -69,6 +69,7 @@ func (e *exporterForPrometheus) registMetric(namespace string, desc metric.Metri func (e *exporterForPrometheus) Describe(ch chan<- *prometheus.Desc) { ptr := atomic.LoadPointer(&e.metricPtr) container := *(*[]metricDesc)(ptr) + for _, v := range container { ch <- v.Desc } @@ -77,6 +78,7 @@ func (e *exporterForPrometheus) Describe(ch chan<- *prometheus.Desc) { func (e *exporterForPrometheus) Collect(ch chan<- prometheus.Metric) { ptr := atomic.LoadPointer(&e.metricPtr) container := *(*[]metricDesc)(ptr) + for _, v := range container { ch <- prometheus.MustNewConstMetric(v.Desc, v.valueType, math.Float64frombits(atomic.LoadUint64(v.val))) } diff --git a/client/operation.go b/client/operation.go index afe9c97..0996521 100644 --- a/client/operation.go +++ b/client/operation.go @@ -277,14 +277,16 @@ func (hc *houstonClient) launch(meta *procmeta) error { exporter := newExporterForPrometheus() accessor := exporter.registMetric(hc.config.MetricNamespace, metric) - prometheus.Register(exporter) - - metricValues[metric.Key] = accessor - logger.Println("metric registered :", metric) + if err := prometheus.Register(exporter); err != nil { + logger.Println("prometheus.Register error :", err) + } else { + metricValues[metric.Key] = accessor + logger.Println("metric registered :", metric) + } } } else { keybytes := metricBuffer[:8] - valbits := binary.BigEndian.Uint64(metricBuffer[8:]) + valbits := binary.LittleEndian.Uint64(metricBuffer[8:]) val := math.Float64frombits(valbits) if accessor, ok := metricValues[string(keybytes)]; ok {