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