-
Notifications
You must be signed in to change notification settings - Fork 929
/
application_summary.go
132 lines (110 loc) · 4.03 KB
/
application_summary.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
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
package v7action
import (
"code.cloudfoundry.org/cli/actor/actionerror"
"code.cloudfoundry.org/cli/api/cloudcontroller/ccv3"
)
type ApplicationSummary struct {
Application
ProcessSummaries ProcessSummaries
Routes []Route
}
// v7action.DetailedApplicationSummary represents an application with its processes and droplet.
type DetailedApplicationSummary struct {
ApplicationSummary
CurrentDroplet Droplet
}
func (a ApplicationSummary) GetIsolationSegmentName() (string, bool) {
if a.hasIsolationSegment() {
return a.ProcessSummaries[0].InstanceDetails[0].IsolationSegment, true
}
return "", false
}
func (a ApplicationSummary) hasIsolationSegment() bool {
return len(a.ProcessSummaries) > 0 &&
len(a.ProcessSummaries[0].InstanceDetails) > 0 &&
len(a.ProcessSummaries[0].InstanceDetails[0].IsolationSegment) > 0
}
func (actor Actor) GetAppSummariesForSpace(spaceGUID string, labelSelector string) ([]ApplicationSummary, Warnings, error) {
var allWarnings Warnings
var allSummaries []ApplicationSummary
keys := []ccv3.Query{
ccv3.Query{Key: ccv3.SpaceGUIDFilter, Values: []string{spaceGUID}},
ccv3.Query{Key: ccv3.OrderBy, Values: []string{ccv3.NameOrder}},
}
if len(labelSelector) > 0 {
keys = append(keys, ccv3.Query{Key: ccv3.LabelSelectorFilter, Values: []string{labelSelector}})
}
apps, warnings, err := actor.CloudControllerClient.GetApplications(keys...)
allWarnings = append(allWarnings, warnings...)
if err != nil {
return nil, allWarnings, err
}
for _, app := range apps {
summary, summaryWarnings, err := actor.createSummary(actor.convertCCToActorApplication(app), false)
allWarnings = append(allWarnings, summaryWarnings...)
if err != nil {
return nil, allWarnings, err
}
allSummaries = append(allSummaries, summary)
}
return allSummaries, allWarnings, nil
}
func (actor Actor) GetDetailedAppSummary(appName, spaceGUID string, withObfuscatedValues bool) (DetailedApplicationSummary, Warnings, error) {
var allWarnings Warnings
app, actorWarnings, err := actor.GetApplicationByNameAndSpace(appName, spaceGUID)
allWarnings = append(allWarnings, actorWarnings...)
if err != nil {
return DetailedApplicationSummary{}, actorWarnings, err
}
summary, warnings, err := actor.createSummary(app, withObfuscatedValues)
allWarnings = append(allWarnings, warnings...)
if err != nil {
return DetailedApplicationSummary{}, allWarnings, err
}
detailedSummary, warnings, err := actor.addDroplet(summary)
allWarnings = append(allWarnings, warnings...)
if err != nil {
return DetailedApplicationSummary{}, allWarnings, err
}
return detailedSummary, allWarnings, err
}
func (actor Actor) createSummary(app Application, withObfuscatedValues bool) (ApplicationSummary, Warnings, error) {
var allWarnings Warnings
processSummaries, processWarnings, err := actor.getProcessSummariesForApp(app.GUID, withObfuscatedValues)
allWarnings = append(allWarnings, processWarnings...)
if err != nil {
return ApplicationSummary{}, allWarnings, err
}
var appRoutes []Route
routes, warnings, err := actor.GetApplicationRoutes(app.GUID)
allWarnings = append(allWarnings, warnings...)
if err != nil {
return ApplicationSummary{}, allWarnings, err
}
appRoutes = routes
return ApplicationSummary{
Application: Application{
Name: app.Name,
GUID: app.GUID,
State: app.State,
LifecycleType: app.LifecycleType,
LifecycleBuildpacks: app.LifecycleBuildpacks,
},
ProcessSummaries: processSummaries,
Routes: appRoutes,
}, allWarnings, nil
}
func (actor Actor) addDroplet(summary ApplicationSummary) (DetailedApplicationSummary, Warnings, error) {
var allWarnings Warnings
droplet, warnings, err := actor.GetCurrentDropletByApplication(summary.GUID)
allWarnings = append(allWarnings, warnings...)
if err != nil {
if _, ok := err.(actionerror.DropletNotFoundError); !ok {
return DetailedApplicationSummary{}, allWarnings, err
}
}
return DetailedApplicationSummary{
ApplicationSummary: summary,
CurrentDroplet: droplet,
}, allWarnings, nil
}