github.com/cloud-green/juju@v0.0.0-20151002100041-a00291338d3d/api/logger/logger.go (about) 1 // Copyright 2013 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package logger 5 6 import ( 7 "fmt" 8 9 "github.com/juju/names" 10 11 "github.com/juju/juju/api/base" 12 "github.com/juju/juju/api/watcher" 13 "github.com/juju/juju/apiserver/params" 14 ) 15 16 // State provides access to an logger worker's view of the state. 17 type State struct { 18 facade base.FacadeCaller 19 } 20 21 // NewState returns a version of the state that provides functionality 22 // required by the logger worker. 23 func NewState(caller base.APICaller) *State { 24 return &State{base.NewFacadeCaller(caller, "Logger")} 25 } 26 27 // LoggingConfig returns the loggo configuration string for the agent 28 // specified by agentTag. 29 func (st *State) LoggingConfig(agentTag names.Tag) (string, error) { 30 var results params.StringResults 31 args := params.Entities{ 32 Entities: []params.Entity{{Tag: agentTag.String()}}, 33 } 34 err := st.facade.FacadeCall("LoggingConfig", args, &results) 35 if err != nil { 36 // TODO: Not directly tested 37 return "", err 38 } 39 if len(results.Results) != 1 { 40 // TODO: Not directly tested 41 return "", fmt.Errorf("expected 1 result, got %d", len(results.Results)) 42 } 43 result := results.Results[0] 44 if err := result.Error; err != nil { 45 return "", err 46 } 47 return result.Result, nil 48 } 49 50 // WatchLoggingConfig returns a notify watcher that looks for changes in the 51 // logging-config for the agent specified by agentTag. 52 func (st *State) WatchLoggingConfig(agentTag names.Tag) (watcher.NotifyWatcher, error) { 53 var results params.NotifyWatchResults 54 args := params.Entities{ 55 Entities: []params.Entity{{Tag: agentTag.String()}}, 56 } 57 err := st.facade.FacadeCall("WatchLoggingConfig", args, &results) 58 if err != nil { 59 // TODO: Not directly tested 60 return nil, err 61 } 62 if len(results.Results) != 1 { 63 // TODO: Not directly tested 64 return nil, fmt.Errorf("expected 1 result, got %d", len(results.Results)) 65 } 66 result := results.Results[0] 67 if result.Error != nil { 68 // TODO: Not directly tested 69 return nil, result.Error 70 } 71 w := watcher.NewNotifyWatcher(st.facade.RawAPICaller(), result) 72 return w, nil 73 }