69 lines
2.2 KiB
Go
69 lines
2.2 KiB
Go
|
/*
|
||
|
* Datadog API for Go
|
||
|
*
|
||
|
* Please see the included LICENSE file for licensing information.
|
||
|
*
|
||
|
* Copyright 2013 by authors and contributors.
|
||
|
*/
|
||
|
|
||
|
package datadog
|
||
|
|
||
|
import "strconv"
|
||
|
|
||
|
// DataPoint is a tuple of [UNIX timestamp, value]. This has to use floats
|
||
|
// because the value could be non-integer.
|
||
|
type DataPoint [2]float64
|
||
|
|
||
|
// Metric represents a collection of data points that we might send or receive
|
||
|
// on one single metric line.
|
||
|
type Metric struct {
|
||
|
Metric string `json:"metric,omitempty"`
|
||
|
Points []DataPoint `json:"points,omitempty"`
|
||
|
Type string `json:"type,omitempty"`
|
||
|
Host string `json:"host,omitempty"`
|
||
|
Tags []string `json:"tags,omitempty"`
|
||
|
}
|
||
|
|
||
|
// Series represents a collection of data points we get when we query for timeseries data
|
||
|
type Series struct {
|
||
|
Metric string `json:"metric,omitempty"`
|
||
|
DisplayName string `json:"display_name,omitempty"`
|
||
|
Points []DataPoint `json:"pointlist,omitempty"`
|
||
|
Start float64 `json:"start,omitempty"`
|
||
|
End float64 `json:"end,omitempty"`
|
||
|
Interval int `json:"interval,omitempty"`
|
||
|
Aggr string `json:"aggr,omitempty"`
|
||
|
Length int `json:"length,omitempty"`
|
||
|
Scope string `json:"scope,omitempty"`
|
||
|
Expression string `json:"expression,omitempty"`
|
||
|
}
|
||
|
|
||
|
// reqPostSeries from /api/v1/series
|
||
|
type reqPostSeries struct {
|
||
|
Series []Metric `json:"series,omitempty"`
|
||
|
}
|
||
|
|
||
|
// reqMetrics is the container for receiving metric results.
|
||
|
type reqMetrics struct {
|
||
|
Series []Series `json:"series,omitempty"`
|
||
|
}
|
||
|
|
||
|
// PostMetrics takes as input a slice of metrics and then posts them up to the
|
||
|
// server for posting data.
|
||
|
func (client *Client) PostMetrics(series []Metric) error {
|
||
|
return client.doJsonRequest("POST", "/v1/series",
|
||
|
reqPostSeries{Series: series}, nil)
|
||
|
}
|
||
|
|
||
|
// QueryMetrics takes as input from, to (seconds from Unix Epoch) and query string and then requests
|
||
|
// timeseries data for that time peried
|
||
|
func (client *Client) QueryMetrics(from, to int64, query string) ([]Series, error) {
|
||
|
var out reqMetrics
|
||
|
err := client.doJsonRequest("GET", "/v1/query?from="+strconv.FormatInt(from, 10)+"&to="+strconv.FormatInt(to, 10)+"&query="+query,
|
||
|
nil, &out)
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
return out.Series, nil
|
||
|
}
|