github.com/cloud-green/juju@v0.0.0-20151002100041-a00291338d3d/apiserver/cleaner/cleaner.go (about)

     1  // Copyright 2015 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  // The cleaner package implements the API interface
     5  // used by the cleaner worker.
     6  
     7  package cleaner
     8  
     9  import (
    10  	"github.com/juju/loggo"
    11  
    12  	"github.com/juju/juju/apiserver/common"
    13  	"github.com/juju/juju/apiserver/params"
    14  	"github.com/juju/juju/state"
    15  	"github.com/juju/juju/state/watcher"
    16  )
    17  
    18  func init() {
    19  	common.RegisterStandardFacade("Cleaner", 1, NewCleanerAPI)
    20  }
    21  
    22  var logger = loggo.GetLogger("juju.apiserver.cleaner")
    23  
    24  // CleanerAPI implements the API used by the cleaner worker.
    25  type CleanerAPI struct {
    26  	st        StateInterface
    27  	resources *common.Resources
    28  }
    29  
    30  // NewCleanerAPI creates a new instance of the Cleaner API.
    31  func NewCleanerAPI(
    32  	st *state.State,
    33  	res *common.Resources,
    34  	authorizer common.Authorizer,
    35  ) (*CleanerAPI, error) {
    36  	if !authorizer.AuthEnvironManager() {
    37  		return nil, common.ErrPerm
    38  	}
    39  	return &CleanerAPI{
    40  		st:        getState(st),
    41  		resources: res,
    42  	}, nil
    43  }
    44  
    45  // Cleanup triggers a state cleanup
    46  func (api *CleanerAPI) Cleanup() error {
    47  	return api.st.Cleanup()
    48  }
    49  
    50  // WatchChanges watches for cleanups to be perfomed in state
    51  func (api *CleanerAPI) WatchCleanups() (params.NotifyWatchResult, error) {
    52  	watch := api.st.WatchCleanups()
    53  	if _, ok := <-watch.Changes(); ok {
    54  		return params.NotifyWatchResult{
    55  			NotifyWatcherId: api.resources.Register(watch),
    56  		}, nil
    57  	}
    58  	return params.NotifyWatchResult{
    59  		Error: common.ServerError(watcher.EnsureErr(watch)),
    60  	}, nil
    61  }