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 }