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