/
prometheus.go
61 lines (49 loc) · 1.07 KB
/
prometheus.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
package prometheus
import (
"context"
"time"
"github.com/prometheus/client_golang/api"
"github.com/prometheus/client_golang/api/prometheus/v1"
"github.com/readytalk/stim/pkg/stimlog"
)
type Prometheus struct {
client *api.Client
config *Config
context context.Context
API v1.API
log Logger
}
type Config struct {
Address string
Log Logger
}
type Logger interface {
Debug(...interface{})
Warn(...interface{})
Fatal(...interface{})
}
func New(config *Config) (*Prometheus, error) {
apiConfig := api.Config{Address: config.Address}
client, err := api.NewClient(apiConfig)
if err != nil {
return nil, err
}
api := v1.NewAPI(client)
p := &Prometheus{client: &client, API: api, context: context.Background()}
if config.Log != nil {
p.log = config.Log
} else {
p.log = stimlog.GetLogger()
}
return p, nil
}
func (p *Prometheus) QueryInstant(query string) (string, error) {
result, err := p.API.Query(p.context, query, time.Now())
if err != nil {
return "", err
}
t := result.Type()
var d []byte
t.UnmarshalJSON(d)
return string(d), nil
}