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 }