github.com/mhilton/juju-juju@v0.0.0-20150901100907-a94dd2c73455/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  
    11  	"github.com/juju/juju/api"
    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  	base.ClientFacade
    19  	st     api.Connection
    20  	facade base.FacadeCaller
    21  }
    22  
    23  // MetricsManagerClient defines the methods on the metricsmanager API end point.
    24  type MetricsManagerClient interface {
    25  	CleanupOldMetrics() error
    26  	SendMetrics() error
    27  }
    28  
    29  var _ MetricsManagerClient = (*Client)(nil)
    30  
    31  // NewClient creates a new client for accessing the metricsmanager api
    32  func NewClient(st api.Connection) *Client {
    33  	frontend, backend := base.NewClientFacade(st, "MetricsManager")
    34  	return &Client{ClientFacade: frontend, st: st, facade: backend}
    35  }
    36  
    37  // CleanupOldMetrics looks for metrics that are 24 hours old (or older)
    38  // and have been sent. Any metrics it finds are deleted.
    39  func (c *Client) CleanupOldMetrics() error {
    40  	envTag, err := c.st.EnvironTag()
    41  	if err != nil {
    42  		return errors.Trace(err)
    43  	}
    44  	p := params.Entities{Entities: []params.Entity{
    45  		{envTag.String()},
    46  	}}
    47  	results := new(params.ErrorResults)
    48  	err = c.facade.FacadeCall("CleanupOldMetrics", p, results)
    49  	if err != nil {
    50  		return errors.Trace(err)
    51  	}
    52  	return results.OneError()
    53  }
    54  
    55  // SendMetrics will send any unsent metrics to the collection service.
    56  func (c *Client) SendMetrics() error {
    57  	envTag, err := c.st.EnvironTag()
    58  	if err != nil {
    59  		return errors.Trace(err)
    60  	}
    61  	p := params.Entities{Entities: []params.Entity{
    62  		{envTag.String()},
    63  	}}
    64  	results := new(params.ErrorResults)
    65  	err = c.facade.FacadeCall("SendMetrics", p, results)
    66  	if err != nil {
    67  		return errors.Trace(err)
    68  	}
    69  	return results.OneError()
    70  }