github.com/franc20/ayesa_sap@v7.0.0-beta.28.0.20200124003224-302d4d52fa6c+incompatible/actor/v2action/space_summary.go (about) 1 package v2action 2 3 import ( 4 "sort" 5 6 "code.cloudfoundry.org/cli/api/cloudcontroller/ccv2/constant" 7 ) 8 9 type SecurityGroupRule struct { 10 Name string 11 Description string 12 Destination string 13 Lifecycle constant.SecurityGroupLifecycle 14 Ports string 15 Protocol string 16 } 17 18 type SpaceSummary struct { 19 Space 20 OrgName string 21 OrgDefaultIsolationSegmentGUID string 22 AppNames []string 23 ServiceInstanceNames []string 24 SpaceQuotaName string 25 RunningSecurityGroupNames []string 26 StagingSecurityGroupNames []string 27 SecurityGroupRules []SecurityGroupRule 28 } 29 30 func (actor Actor) GetSpaceSummaryByOrganizationAndName(orgGUID string, name string) (SpaceSummary, Warnings, error) { 31 var allWarnings Warnings 32 33 org, warnings, err := actor.GetOrganization(orgGUID) 34 allWarnings = append(allWarnings, warnings...) 35 if err != nil { 36 return SpaceSummary{}, allWarnings, err 37 } 38 39 space, warnings, err := actor.GetSpaceByOrganizationAndName(org.GUID, name) 40 allWarnings = append(allWarnings, warnings...) 41 if err != nil { 42 return SpaceSummary{}, allWarnings, err 43 } 44 45 apps, warnings, err := actor.GetApplicationsBySpace(space.GUID) 46 allWarnings = append(allWarnings, warnings...) 47 if err != nil { 48 return SpaceSummary{}, allWarnings, err 49 } 50 51 appNames := make([]string, len(apps)) 52 for i, app := range apps { 53 appNames[i] = app.Name 54 } 55 sort.Strings(appNames) 56 57 serviceInstances, warnings, err := actor.GetServiceInstancesBySpace(space.GUID) 58 allWarnings = append(allWarnings, warnings...) 59 if err != nil { 60 return SpaceSummary{}, allWarnings, err 61 } 62 63 serviceInstanceNames := make([]string, len(serviceInstances)) 64 for i, serviceInstance := range serviceInstances { 65 serviceInstanceNames[i] = serviceInstance.Name 66 } 67 sort.Strings(serviceInstanceNames) 68 69 var spaceQuota SpaceQuota 70 71 if space.SpaceQuotaDefinitionGUID != "" { 72 spaceQuota, warnings, err = actor.GetSpaceQuota(space.SpaceQuotaDefinitionGUID) 73 allWarnings = append(allWarnings, warnings...) 74 if err != nil { 75 return SpaceSummary{}, allWarnings, err 76 } 77 } 78 79 securityGroups, warnings, err := actor.GetSpaceRunningSecurityGroupsBySpace(space.GUID) 80 allWarnings = append(allWarnings, warnings...) 81 if err != nil { 82 return SpaceSummary{}, allWarnings, err 83 } 84 85 var runningSecurityGroupNames []string 86 var stagingSecurityGroupNames []string 87 var securityGroupRules []SecurityGroupRule 88 89 for _, securityGroup := range securityGroups { 90 runningSecurityGroupNames = append(runningSecurityGroupNames, securityGroup.Name) 91 securityGroupRules = append(securityGroupRules, extractSecurityGroupRules(securityGroup, constant.SecurityGroupLifecycleRunning)...) 92 } 93 94 sort.Strings(runningSecurityGroupNames) 95 96 securityGroups, warnings, err = actor.GetSpaceStagingSecurityGroupsBySpace(space.GUID) 97 allWarnings = append(allWarnings, warnings...) 98 if err != nil { 99 return SpaceSummary{}, allWarnings, err 100 } 101 102 for _, securityGroup := range securityGroups { 103 stagingSecurityGroupNames = append(stagingSecurityGroupNames, securityGroup.Name) 104 securityGroupRules = append(securityGroupRules, extractSecurityGroupRules(securityGroup, constant.SecurityGroupLifecycleStaging)...) 105 } 106 107 sort.Strings(stagingSecurityGroupNames) 108 109 sort.Slice(securityGroupRules, func(i int, j int) bool { 110 if securityGroupRules[i].Name < securityGroupRules[j].Name { 111 return true 112 } 113 if securityGroupRules[i].Name > securityGroupRules[j].Name { 114 return false 115 } 116 if securityGroupRules[i].Destination < securityGroupRules[j].Destination { 117 return true 118 } 119 if securityGroupRules[i].Destination > securityGroupRules[j].Destination { 120 return false 121 } 122 return securityGroupRules[i].Lifecycle < securityGroupRules[j].Lifecycle 123 }) 124 125 spaceSummary := SpaceSummary{ 126 Space: space, 127 OrgName: org.Name, 128 OrgDefaultIsolationSegmentGUID: org.DefaultIsolationSegmentGUID, 129 AppNames: appNames, 130 ServiceInstanceNames: serviceInstanceNames, 131 SpaceQuotaName: spaceQuota.Name, 132 RunningSecurityGroupNames: runningSecurityGroupNames, 133 StagingSecurityGroupNames: stagingSecurityGroupNames, 134 SecurityGroupRules: securityGroupRules, 135 } 136 137 return spaceSummary, allWarnings, nil 138 }