f37e90be18
* add goroutine text profiles to nomad operator debug * add server-id=all to nomad operator debug * fix bug from changing metrics from string to []byte * Add function to return MetricsSummary struct, metrics gotemplate support * fix bug resolving 'server-id=all' when no servers are available * add url to operator_debug tests * removed test section which is used for future operator_debug.go changes * separate metrics from operator, use only structs from go-metrics * ensure parent directories are created as needed * add suggested comments for text debug pprof * move check down to where it is used * add WaitForFiles helper function to wait for multiple files to exist * compact metrics check Co-authored-by: Drew Bailey <2614075+drewbailey@users.noreply.github.com> * fix github's silly apply suggestion Co-authored-by: Drew Bailey <2614075+drewbailey@users.noreply.github.com>
88 lines
1.9 KiB
Go
88 lines
1.9 KiB
Go
package api
|
|
|
|
import (
|
|
"io/ioutil"
|
|
"time"
|
|
)
|
|
|
|
// MetricsSummary holds a roll-up of metrics info for a given interval
|
|
type MetricsSummary struct {
|
|
Timestamp string
|
|
Gauges []GaugeValue
|
|
Points []PointValue
|
|
Counters []SampledValue
|
|
Samples []SampledValue
|
|
}
|
|
|
|
type GaugeValue struct {
|
|
Name string
|
|
Hash string `json:"-"`
|
|
Value float32
|
|
|
|
Labels []Label `json:"-"`
|
|
DisplayLabels map[string]string `json:"Labels"`
|
|
}
|
|
|
|
type PointValue struct {
|
|
Name string
|
|
Points []float32
|
|
}
|
|
|
|
type SampledValue struct {
|
|
Name string
|
|
Hash string `json:"-"`
|
|
*AggregateSample
|
|
Mean float64
|
|
Stddev float64
|
|
|
|
Labels []Label `json:"-"`
|
|
DisplayLabels map[string]string `json:"Labels"`
|
|
}
|
|
|
|
// AggregateSample is used to hold aggregate metrics
|
|
// about a sample
|
|
type AggregateSample struct {
|
|
Count int // The count of emitted pairs
|
|
Rate float64 // The values rate per time unit (usually 1 second)
|
|
Sum float64 // The sum of values
|
|
SumSq float64 `json:"-"` // The sum of squared values
|
|
Min float64 // Minimum value
|
|
Max float64 // Maximum value
|
|
LastUpdated time.Time `json:"-"` // When value was last updated
|
|
}
|
|
|
|
type Label struct {
|
|
Name string
|
|
Value string
|
|
}
|
|
|
|
// Metrics returns a slice of bytes containing metrics, optionally formatted as either json or prometheus
|
|
func (op *Operator) Metrics(q *QueryOptions) ([]byte, error) {
|
|
if q == nil {
|
|
q = &QueryOptions{}
|
|
}
|
|
|
|
metricsReader, err := op.c.rawQuery("/v1/metrics", q)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
metricsBytes, err := ioutil.ReadAll(metricsReader)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return metricsBytes, nil
|
|
}
|
|
|
|
// MetricsSummary returns a MetricsSummary struct and query metadata
|
|
func (op *Operator) MetricsSummary(q *QueryOptions) (*MetricsSummary, *QueryMeta, error) {
|
|
var resp *MetricsSummary
|
|
qm, err := op.c.query("/v1/metrics", &resp, q)
|
|
if err != nil {
|
|
return nil, nil, err
|
|
}
|
|
|
|
return resp, qm, nil
|
|
}
|