Add request flag WithUnit and return the metric unit if requested

This commit is contained in:
Thomas Roehl 2023-04-14 18:25:07 +02:00
parent 051cba4666
commit 7c891e1593

9
api.go
View File

@ -30,6 +30,7 @@ type ApiMetricData struct {
Avg Float `json:"avg"` Avg Float `json:"avg"`
Min Float `json:"min"` Min Float `json:"min"`
Max Float `json:"max"` Max Float `json:"max"`
Unit string `json:"unit,omitempty"`
} }
// TODO: Optimize this, just like the stats endpoint! // TODO: Optimize this, just like the stats endpoint!
@ -182,6 +183,7 @@ type ApiQueryRequest struct {
From int64 `json:"from"` From int64 `json:"from"`
To int64 `json:"to"` To int64 `json:"to"`
WithStats bool `json:"with-stats"` WithStats bool `json:"with-stats"`
WithUnit bool `json:"with-unit"`
WithData bool `json:"with-data"` WithData bool `json:"with-data"`
WithPadding bool `json:"with-padding"` WithPadding bool `json:"with-padding"`
Queries []ApiQuery `json:"queries"` Queries []ApiQuery `json:"queries"`
@ -281,7 +283,9 @@ func handleQuery(rw http.ResponseWriter, r *http.Request) {
res := make([]ApiMetricData, 0, len(sels)) res := make([]ApiMetricData, 0, len(sels))
for _, sel := range sels { for _, sel := range sels {
data := ApiMetricData{} data := ApiMetricData{}
data.Data, data.From, data.To, err = memoryStore.Read(sel, query.Metric, req.From, req.To) data.Unit = ""
unit := ""
data.Data, data.From, data.To, unit, err = memoryStore.Read(sel, query.Metric, req.From, req.To)
// log.Printf("data: %#v, %#v, %#v, %#v", data.Data, data.From, data.To, err) // log.Printf("data: %#v, %#v, %#v, %#v", data.Data, data.From, data.To, err)
if err != nil { if err != nil {
msg := err.Error() msg := err.Error()
@ -299,6 +303,9 @@ func handleQuery(rw http.ResponseWriter, r *http.Request) {
if req.WithPadding { if req.WithPadding {
data.PadDataWithNull(req.From, req.To, query.Metric) data.PadDataWithNull(req.From, req.To, query.Metric)
} }
if req.WithUnit {
data.Unit = unit
}
if !req.WithData { if !req.WithData {
data.Data = nil data.Data = nil
} }