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  }