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 }