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