github.com/wallyworld/juju@v0.0.0-20161013125918-6cf1bc9d917a/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 }