/
client.go
69 lines (59 loc) · 1.86 KB
/
client.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
62
63
64
65
66
67
68
69
// Copyright 2014 Canonical Ltd.
// Licensed under the AGPLv3, see LICENCE file for details.
// The metricsmanager package contains implementation for an api facade to
// access metrics functions within state
package metricsmanager
import (
"github.com/juju/errors"
"github.com/juju/names/v4"
"github.com/juju/juju/api/base"
"github.com/juju/juju/apiserver/params"
)
// Client provides access to the metrics manager api
type Client struct {
modelTag names.ModelTag
facade base.FacadeCaller
}
// MetricsManagerClient defines the methods on the metricsmanager API end point.
type MetricsManagerClient interface {
CleanupOldMetrics() error
SendMetrics() error
}
var _ MetricsManagerClient = (*Client)(nil)
// NewClient creates a new client for accessing the metricsmanager api
func NewClient(apiCaller base.APICaller) (*Client, error) {
modelTag, ok := apiCaller.ModelTag()
if !ok {
return nil, errors.New("metricsmanager client is not appropriate for controller-only API")
}
facade := base.NewFacadeCaller(apiCaller, "MetricsManager")
return &Client{
modelTag: modelTag,
facade: facade,
}, nil
}
// CleanupOldMetrics looks for metrics that are 24 hours old (or older)
// and have been sent. Any metrics it finds are deleted.
func (c *Client) CleanupOldMetrics() error {
p := params.Entities{Entities: []params.Entity{
{c.modelTag.String()},
}}
var results params.ErrorResults
err := c.facade.FacadeCall("CleanupOldMetrics", p, &results)
if err != nil {
return errors.Trace(err)
}
return results.OneError()
}
// SendMetrics will send any unsent metrics to the collection service.
func (c *Client) SendMetrics() error {
p := params.Entities{Entities: []params.Entity{
{c.modelTag.String()},
}}
var results params.ErrorResults
err := c.facade.FacadeCall("SendMetrics", p, &results)
if err != nil {
return errors.Trace(err)
}
return results.OneError()
}