github.com/makyo/juju@v0.0.0-20160425123129-2608902037e9/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/juju/apiserver/common"
    11  	"github.com/juju/juju/apiserver/params"
    12  	"github.com/juju/juju/state"
    13  	"github.com/juju/juju/state/watcher"
    14  )
    15  
    16  func init() {
    17  	common.RegisterStandardFacade("Cleaner", 2, NewCleanerAPI)
    18  }
    19  
    20  // CleanerAPI implements the API used by the cleaner worker.
    21  type CleanerAPI struct {
    22  	st        StateInterface
    23  	resources *common.Resources
    24  }
    25  
    26  // NewCleanerAPI creates a new instance of the Cleaner API.
    27  func NewCleanerAPI(
    28  	st *state.State,
    29  	res *common.Resources,
    30  	authorizer common.Authorizer,
    31  ) (*CleanerAPI, error) {
    32  	if !authorizer.AuthModelManager() {
    33  		return nil, common.ErrPerm
    34  	}
    35  	return &CleanerAPI{
    36  		st:        getState(st),
    37  		resources: res,
    38  	}, nil
    39  }
    40  
    41  // Cleanup triggers a state cleanup
    42  func (api *CleanerAPI) Cleanup() error {
    43  	return api.st.Cleanup()
    44  }
    45  
    46  // WatchChanges watches for cleanups to be perfomed in state
    47  func (api *CleanerAPI) WatchCleanups() (params.NotifyWatchResult, error) {
    48  	watch := api.st.WatchCleanups()
    49  	if _, ok := <-watch.Changes(); ok {
    50  		return params.NotifyWatchResult{
    51  			NotifyWatcherId: api.resources.Register(watch),
    52  		}, nil
    53  	}
    54  	return params.NotifyWatchResult{
    55  		Error: common.ServerError(watcher.EnsureErr(watch)),
    56  	}, nil
    57  }