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  }