mirror of
https://github.com/ClusterCockpit/cc-metric-store.git
synced 2024-12-26 00:49:05 +01:00
Use type with custom MarshalJSON for metrics
This commit is contained in:
parent
f7310bc70a
commit
8d827e44b4
7
api.go
7
api.go
@ -8,13 +8,14 @@ import (
|
||||
"strconv"
|
||||
"time"
|
||||
|
||||
"github.com/ClusterCockpit/cc-metric-store/lineprotocol"
|
||||
"github.com/gorilla/mux"
|
||||
)
|
||||
|
||||
type HostData struct {
|
||||
Host string `json:"host"`
|
||||
Start int64 `json:"start"`
|
||||
Data []float64 `json:"data"`
|
||||
Host string `json:"host"`
|
||||
Start int64 `json:"start"`
|
||||
Data []lineprotocol.Float `json:"data"`
|
||||
}
|
||||
|
||||
type MetricData struct {
|
||||
|
@ -2,14 +2,29 @@ package lineprotocol
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"math"
|
||||
"strconv"
|
||||
"strings"
|
||||
"time"
|
||||
)
|
||||
|
||||
// Go's JSON encoder for floats does not support NaN (https://github.com/golang/go/issues/3480).
|
||||
// This program uses NaN as a signal for missing data.
|
||||
// For the HTTP JSON API to be able to handle NaN values,
|
||||
// we have to use our own type which implements encoding/json.Marshaler itself.
|
||||
type Float float64
|
||||
|
||||
func (f Float) MarshalJSON() ([]byte, error) {
|
||||
if math.IsNaN(float64(f)) {
|
||||
return []byte("null"), nil
|
||||
}
|
||||
|
||||
return []byte(strconv.FormatFloat(float64(f), 'f', -1, 64)), nil
|
||||
}
|
||||
|
||||
type Metric struct {
|
||||
Name string
|
||||
Value float64
|
||||
Value Float
|
||||
}
|
||||
|
||||
// measurement: node or cpu
|
||||
@ -59,7 +74,7 @@ func Parse(rawline string) (*Line, error) {
|
||||
|
||||
line.Fields = append(line.Fields, Metric{
|
||||
Name: pair[0],
|
||||
Value: field,
|
||||
Value: Float(field),
|
||||
})
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user