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