github.com/wallyworld/juju@v0.0.0-20161013125918-6cf1bc9d917a/api/common/modelstatus.go (about)

     1  // Copyright 2016 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package common
     5  
     6  import (
     7  	"github.com/juju/errors"
     8  	"gopkg.in/juju/names.v2"
     9  
    10  	"github.com/juju/juju/api/base"
    11  	"github.com/juju/juju/apiserver/params"
    12  )
    13  
    14  // ModelStatusAPI provides common client-side API functions
    15  // to call into apiserver.common.ModelStatusAPI.
    16  type ModelStatusAPI struct {
    17  	facade base.FacadeCaller
    18  }
    19  
    20  // NewModelStatusAPI creates a ModelStatusAPI on the specified facade,
    21  // and uses this name when calling through the caller.
    22  func NewModelStatusAPI(facade base.FacadeCaller) *ModelStatusAPI {
    23  	return &ModelStatusAPI{facade}
    24  }
    25  
    26  // ModelStatus returns a status summary for each model tag passed in.
    27  func (c *ModelStatusAPI) ModelStatus(tags ...names.ModelTag) ([]base.ModelStatus, error) {
    28  	result := params.ModelStatusResults{}
    29  	models := make([]params.Entity, len(tags))
    30  	for i, tag := range tags {
    31  		models[i] = params.Entity{Tag: tag.String()}
    32  	}
    33  	req := params.Entities{
    34  		Entities: models,
    35  	}
    36  	if err := c.facade.FacadeCall("ModelStatus", req, &result); err != nil {
    37  		return nil, err
    38  	}
    39  
    40  	results := make([]base.ModelStatus, len(result.Results))
    41  	for i, r := range result.Results {
    42  		model, err := names.ParseModelTag(r.ModelTag)
    43  		if err != nil {
    44  			return nil, errors.Annotatef(err, "ModelTag %q at position %d", r.ModelTag, i)
    45  		}
    46  		owner, err := names.ParseUserTag(r.OwnerTag)
    47  		if err != nil {
    48  			return nil, errors.Annotatef(err, "OwnerTag %q at position %d", r.OwnerTag, i)
    49  		}
    50  
    51  		results[i] = base.ModelStatus{
    52  			UUID:               model.Id(),
    53  			Life:               string(r.Life),
    54  			Owner:              owner.Id(),
    55  			HostedMachineCount: r.HostedMachineCount,
    56  			ServiceCount:       r.ApplicationCount,
    57  			TotalMachineCount:  len(r.Machines),
    58  		}
    59  		results[i].Machines = make([]base.Machine, len(r.Machines))
    60  		for j, mm := range r.Machines {
    61  			if mm.Hardware != nil && mm.Hardware.Cores != nil {
    62  				results[i].CoreCount += int(*mm.Hardware.Cores)
    63  			}
    64  			results[i].Machines[j] = base.Machine{
    65  				Id:         mm.Id,
    66  				InstanceId: mm.InstanceId,
    67  				HasVote:    mm.HasVote,
    68  				WantsVote:  mm.WantsVote,
    69  				Status:     mm.Status,
    70  			}
    71  		}
    72  	}
    73  	return results, nil
    74  }