github.com/juju/juju@v0.0.0-20240430160146-1752b71fcf00/api/controller/instancepoller/instancepoller.go (about)

     1  // Copyright 2015 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package instancepoller
     5  
     6  import (
     7  	"github.com/juju/errors"
     8  	"github.com/juju/names/v5"
     9  
    10  	"github.com/juju/juju/api/base"
    11  	"github.com/juju/juju/api/common"
    12  	apiwatcher "github.com/juju/juju/api/watcher"
    13  	"github.com/juju/juju/core/watcher"
    14  	"github.com/juju/juju/rpc/params"
    15  )
    16  
    17  const instancePollerFacade = "InstancePoller"
    18  
    19  // API provides access to the InstancePoller API facade.
    20  type API struct {
    21  	*common.ModelWatcher
    22  
    23  	facade base.FacadeCaller
    24  }
    25  
    26  // NewAPI creates a new client-side InstancePoller facade.
    27  func NewAPI(caller base.APICaller) *API {
    28  	if caller == nil {
    29  		panic("caller is nil")
    30  	}
    31  	facadeCaller := base.NewFacadeCaller(caller, instancePollerFacade)
    32  	return &API{
    33  		ModelWatcher: common.NewModelWatcher(facadeCaller),
    34  		facade:       facadeCaller,
    35  	}
    36  }
    37  
    38  // Machine provides access to methods of a state.Machine through the
    39  // facade.
    40  func (api *API) Machine(tag names.MachineTag) (*Machine, error) {
    41  	life, err := common.OneLife(api.facade, tag)
    42  	if err != nil {
    43  		return nil, errors.Trace(err)
    44  	}
    45  	return &Machine{api.facade, tag, life}, nil
    46  }
    47  
    48  var newStringsWatcher = apiwatcher.NewStringsWatcher
    49  
    50  // WatchModelMachines returns a StringsWatcher reporting changes to the
    51  // machine life or agent start timestamps.
    52  func (api *API) WatchModelMachines() (watcher.StringsWatcher, error) {
    53  	var result params.StringsWatchResult
    54  	err := api.facade.FacadeCall("WatchModelMachineStartTimes", nil, &result)
    55  	if err != nil {
    56  		return nil, err
    57  	}
    58  	if result.Error != nil {
    59  		return nil, result.Error
    60  	}
    61  	return newStringsWatcher(api.facade.RawAPICaller(), result), nil
    62  }