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