github.com/franc20/ayesa_sap@v7.0.0-beta.28.0.20200124003224-302d4d52fa6c+incompatible/command/v7/shared/quota_displayer.go (about) 1 package shared 2 3 import ( 4 "fmt" 5 "strconv" 6 "strings" 7 8 "code.cloudfoundry.org/cli/actor/v7action" 9 "code.cloudfoundry.org/cli/command" 10 "code.cloudfoundry.org/cli/types" 11 "code.cloudfoundry.org/cli/util/ui" 12 ) 13 14 const ( 15 MEGABYTE = 1024 * 1024 16 GIGABYTE = 1024 * MEGABYTE 17 TERABYTE = 1024 * GIGABYTE 18 ) 19 20 type QuotaDisplayer struct { 21 ui command.UI 22 } 23 24 func NewQuotaDisplayer(ui command.UI) QuotaDisplayer { 25 return QuotaDisplayer{ui: ui} 26 } 27 28 func (displayer QuotaDisplayer) DisplayQuotasTable(orgQuotas []v7action.OrganizationQuota) { 29 var keyValueTable = [][]string{ 30 {"name", "total memory", "instance memory", "routes", "service instances", "paid service plans", "app instances", "route ports"}, 31 } 32 33 for _, orgQuota := range orgQuotas { 34 keyValueTable = append(keyValueTable, []string{ 35 orgQuota.Name, 36 displayer.presentQuotaMemoryValue(orgQuota.TotalMemory), 37 displayer.presentQuotaMemoryValue(orgQuota.InstanceMemory), 38 displayer.presentQuotaValue(orgQuota.TotalRoutes), 39 displayer.presentQuotaValue(orgQuota.TotalServiceInstances), 40 displayer.presentBooleanValue(orgQuota.PaidServicePlans), 41 displayer.presentQuotaValue(orgQuota.TotalAppInstances), 42 displayer.presentQuotaValue(orgQuota.TotalRoutePorts), 43 }) 44 } 45 46 displayer.ui.DisplayTableWithHeader("", keyValueTable, ui.DefaultTableSpacePadding) 47 } 48 49 func (displayer QuotaDisplayer) DisplaySingleQuota(orgQuota v7action.OrganizationQuota) { 50 orgQuotaTable := [][]string{ 51 {displayer.ui.TranslateText("total memory:"), displayer.presentQuotaMemoryValue(orgQuota.TotalMemory)}, 52 {displayer.ui.TranslateText("instance memory:"), displayer.presentQuotaMemoryValue(orgQuota.InstanceMemory)}, 53 {displayer.ui.TranslateText("routes:"), displayer.presentQuotaValue(orgQuota.TotalRoutes)}, 54 {displayer.ui.TranslateText("service instances:"), displayer.presentQuotaValue(orgQuota.TotalServiceInstances)}, 55 {displayer.ui.TranslateText("paid service plans:"), displayer.presentBooleanValue(orgQuota.PaidServicePlans)}, 56 {displayer.ui.TranslateText("app instances:"), displayer.presentQuotaValue(orgQuota.TotalAppInstances)}, 57 {displayer.ui.TranslateText("route ports:"), displayer.presentQuotaValue(orgQuota.TotalRoutePorts)}, 58 } 59 60 displayer.ui.DisplayKeyValueTable("", orgQuotaTable, 3) 61 } 62 63 func (displayer QuotaDisplayer) presentBooleanValue(limit bool) string { 64 if limit { 65 return "allowed" 66 } else { 67 return "disallowed" 68 } 69 } 70 71 func (displayer QuotaDisplayer) presentQuotaValue(limit types.NullInt) string { 72 if !limit.IsSet { 73 return "unlimited" 74 } else { 75 return strconv.Itoa(limit.Value) 76 } 77 } 78 79 func (displayer QuotaDisplayer) presentQuotaMemoryValue(limit types.NullInt) string { 80 if !limit.IsSet { 81 return "unlimited" 82 } else { 83 return addMemoryUnits(float64(limit.Value) * MEGABYTE) 84 } 85 } 86 87 func addMemoryUnits(bytes float64) string { 88 unit := "" 89 value := bytes 90 91 switch { 92 case bytes >= TERABYTE: 93 unit = "T" 94 value /= TERABYTE 95 case bytes >= GIGABYTE: 96 unit = "G" 97 value /= GIGABYTE 98 case bytes >= MEGABYTE: 99 unit = "M" 100 value /= MEGABYTE 101 case bytes == 0: 102 return "0" 103 } 104 105 stringValue := fmt.Sprintf("%.1f", value) 106 stringValue = strings.TrimSuffix(stringValue, ".0") 107 return fmt.Sprintf("%s%s", stringValue, unit) 108 }