github.com/axw/juju@v0.0.0-20161005053422-4bd6544d08d4/api/metricsmanager/client.go (about) 1 // Copyright 2014 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 // The metricsmanager package contains implementation for an api facade to 5 // access metrics functions within state 6 package metricsmanager 7 8 import ( 9 "github.com/juju/errors" 10 "gopkg.in/juju/names.v2" 11 12 "github.com/juju/juju/api/base" 13 "github.com/juju/juju/apiserver/params" 14 ) 15 16 // Client provides access to the metrics manager api 17 type Client struct { 18 modelTag names.ModelTag 19 facade base.FacadeCaller 20 } 21 22 // MetricsManagerClient defines the methods on the metricsmanager API end point. 23 type MetricsManagerClient interface { 24 CleanupOldMetrics() error 25 SendMetrics() error 26 } 27 28 var _ MetricsManagerClient = (*Client)(nil) 29 30 // NewClient creates a new client for accessing the metricsmanager api 31 func NewClient(apiCaller base.APICaller) (*Client, error) { 32 modelTag, ok := apiCaller.ModelTag() 33 if !ok { 34 return nil, errors.New("metricsmanager client is not appropriate for controller-only API") 35 36 } 37 facade := base.NewFacadeCaller(apiCaller, "MetricsManager") 38 return &Client{ 39 modelTag: modelTag, 40 facade: facade, 41 }, nil 42 } 43 44 // CleanupOldMetrics looks for metrics that are 24 hours old (or older) 45 // and have been sent. Any metrics it finds are deleted. 46 func (c *Client) CleanupOldMetrics() error { 47 p := params.Entities{Entities: []params.Entity{ 48 {c.modelTag.String()}, 49 }} 50 var results params.ErrorResults 51 err := c.facade.FacadeCall("CleanupOldMetrics", p, &results) 52 if err != nil { 53 return errors.Trace(err) 54 } 55 return results.OneError() 56 } 57 58 // SendMetrics will send any unsent metrics to the collection service. 59 func (c *Client) SendMetrics() error { 60 p := params.Entities{Entities: []params.Entity{ 61 {c.modelTag.String()}, 62 }} 63 var results params.ErrorResults 64 err := c.facade.FacadeCall("SendMetrics", p, &results) 65 if err != nil { 66 return errors.Trace(err) 67 } 68 return results.OneError() 69 }