github.com/loggregator/cli@v6.33.1-0.20180224010324-82334f081791+incompatible/actor/v3action/process_summary.go (about) 1 package v3action 2 3 import ( 4 "fmt" 5 "sort" 6 "strings" 7 8 "code.cloudfoundry.org/cli/api/cloudcontroller/ccv3/constant" 9 ) 10 11 // ProcessSummary represents a process with instance details. 12 type ProcessSummary struct { 13 Process 14 15 InstanceDetails []ProcessInstance 16 } 17 18 type ProcessSummaries []ProcessSummary 19 20 func (p ProcessSummary) TotalInstanceCount() int { 21 return len(p.InstanceDetails) 22 } 23 24 func (p ProcessSummary) HealthyInstanceCount() int { 25 count := 0 26 for _, instance := range p.InstanceDetails { 27 if instance.State == constant.ProcessInstanceRunning { 28 count++ 29 } 30 } 31 return count 32 } 33 34 func (ps ProcessSummaries) Sort() { 35 sort.Slice(ps, func(i int, j int) bool { 36 var iScore int 37 var jScore int 38 39 switch ps[i].Type { 40 case constant.ProcessTypeWeb: 41 iScore = 0 42 default: 43 iScore = 1 44 } 45 46 switch ps[j].Type { 47 case constant.ProcessTypeWeb: 48 jScore = 0 49 default: 50 jScore = 1 51 } 52 53 if iScore == 1 && jScore == 1 { 54 return ps[i].Type < ps[j].Type 55 } 56 return iScore < jScore 57 }) 58 } 59 60 func (ps ProcessSummaries) String() string { 61 ps.Sort() 62 63 var summaries []string 64 for _, p := range ps { 65 summaries = append(summaries, fmt.Sprintf("%s:%d/%d", p.Type, p.HealthyInstanceCount(), p.TotalInstanceCount())) 66 } 67 68 return strings.Join(summaries, ", ") 69 } 70 71 func (actor Actor) getProcessSummariesForApp(appGUID string) (ProcessSummaries, Warnings, error) { 72 var allWarnings Warnings 73 74 ccv3Processes, warnings, err := actor.CloudControllerClient.GetApplicationProcesses(appGUID) 75 allWarnings = Warnings(warnings) 76 if err != nil { 77 return nil, allWarnings, err 78 } 79 80 var processSummaries ProcessSummaries 81 for _, ccv3Process := range ccv3Processes { 82 processGUID := ccv3Process.GUID 83 instances, warnings, err := actor.CloudControllerClient.GetProcessInstances(processGUID) 84 allWarnings = append(allWarnings, Warnings(warnings)...) 85 if err != nil { 86 return nil, allWarnings, err 87 } 88 89 processSummary := ProcessSummary{ 90 Process: Process(ccv3Process), 91 } 92 for _, instance := range instances { 93 processSummary.InstanceDetails = append(processSummary.InstanceDetails, ProcessInstance(instance)) 94 } 95 96 processSummaries = append(processSummaries, processSummary) 97 } 98 99 return processSummaries, allWarnings, nil 100 }