github.com/liamawhite/cli-with-i18n@v6.32.1-0.20171122084555-dede0a5c3448+incompatible/api/cloudcontroller/ccv2/application_instance.go (about)

     1  package ccv2
     2  
     3  import (
     4  	"encoding/json"
     5  	"strconv"
     6  
     7  	"github.com/liamawhite/cli-with-i18n/api/cloudcontroller"
     8  	"github.com/liamawhite/cli-with-i18n/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.GetAppInstancesRequest,
    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, convertErr := strconv.Atoi(instanceID)
    84  		if convertErr != nil {
    85  			return nil, response.Warnings, convertErr
    86  		}
    87  		instance.ID = id
    88  		returnedInstances[id] = instance
    89  	}
    90  
    91  	return returnedInstances, response.Warnings, nil
    92  }