github.com/dcarley/cf-cli@v6.24.1-0.20170220111324-4225ff346898+incompatible/api/cloudcontroller/ccv2/application_instance.go (about) 1 package ccv2 2 3 import ( 4 "encoding/json" 5 "strconv" 6 7 "code.cloudfoundry.org/cli/api/cloudcontroller" 8 "code.cloudfoundry.org/cli/api/cloudcontroller/ccv2/internal" 9 ) 10 11 // ApplicationInstanceState reflects the state of the individual app 12 // instance. 13 type ApplicationInstanceState string 14 15 const ( 16 ApplicationInstanceCrashed ApplicationInstanceState = "CRASHED" 17 ApplicationInstanceDown ApplicationInstanceState = "DOWN" 18 ApplicationInstanceFlapping ApplicationInstanceState = "FLAPPING" 19 ApplicationInstanceRunning ApplicationInstanceState = "RUNNING" 20 ApplicationInstanceStarting ApplicationInstanceState = "STARTING" 21 ApplicationInstanceUnknown ApplicationInstanceState = "UNKNOWN" 22 ) 23 24 // ApplicationInstance represents a Cloud Controller Application Instance. 25 type ApplicationInstance struct { 26 // Details are arbitrary information about the instance. 27 Details string 28 29 // ID is the instance ID. 30 ID int 31 32 // Since is the Unix time stamp that represents the time the instance was 33 // created. 34 Since float64 35 36 // State is the instance's state. 37 State ApplicationInstanceState 38 } 39 40 // UnmarshalJSON helps unmarshal a Cloud Controller application instance 41 // response. 42 func (instance *ApplicationInstance) UnmarshalJSON(data []byte) error { 43 var ccInstance struct { 44 Details string `json:"details"` 45 Since float64 `json:"since"` 46 State string `json:"state"` 47 } 48 if err := json.Unmarshal(data, &ccInstance); err != nil { 49 return err 50 } 51 52 instance.Details = ccInstance.Details 53 instance.State = ApplicationInstanceState(ccInstance.State) 54 instance.Since = ccInstance.Since 55 56 return nil 57 } 58 59 // GetApplicationInstancesByApplication returns a list of ApplicationInstance 60 // for a given application. Given the state of an application, it might skip 61 // some application instances. 62 func (client *Client) GetApplicationInstancesByApplication(guid string) (map[int]ApplicationInstance, Warnings, error) { 63 request, err := client.newHTTPRequest(requestOptions{ 64 RequestName: internal.AppInstances, 65 URIParams: Params{"app_guid": guid}, 66 }) 67 if err != nil { 68 return nil, nil, err 69 } 70 71 var instances map[string]ApplicationInstance 72 response := cloudcontroller.Response{ 73 Result: &instances, 74 } 75 76 err = client.connection.Make(request, &response) 77 if err != nil { 78 return nil, response.Warnings, err 79 } 80 81 returnedInstances := map[int]ApplicationInstance{} 82 for instanceID, instance := range instances { 83 id, err := strconv.Atoi(instanceID) 84 if err != nil { 85 return nil, response.Warnings, err 86 } 87 instance.ID = id 88 returnedInstances[id] = instance 89 } 90 91 return returnedInstances, response.Warnings, err 92 }