forked from cloudfoundry/cli
-
Notifications
You must be signed in to change notification settings - Fork 0
/
quotas.go
129 lines (108 loc) · 3.26 KB
/
quotas.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
package quota
import (
"fmt"
"strconv"
"github.com/LukasHeimann/cloudfoundrycli/v8/cf/flags"
. "github.com/LukasHeimann/cloudfoundrycli/v8/cf/i18n"
"github.com/LukasHeimann/cloudfoundrycli/v8/cf/api/quotas"
"github.com/LukasHeimann/cloudfoundrycli/v8/cf/api/resources"
"github.com/LukasHeimann/cloudfoundrycli/v8/cf/commandregistry"
"github.com/LukasHeimann/cloudfoundrycli/v8/cf/configuration/coreconfig"
"github.com/LukasHeimann/cloudfoundrycli/v8/cf/formatters"
"github.com/LukasHeimann/cloudfoundrycli/v8/cf/requirements"
"github.com/LukasHeimann/cloudfoundrycli/v8/cf/terminal"
)
type ListQuotas struct {
ui terminal.UI
config coreconfig.Reader
quotaRepo quotas.QuotaRepository
}
func init() {
commandregistry.Register(&ListQuotas{})
}
func (cmd *ListQuotas) MetaData() commandregistry.CommandMetadata {
return commandregistry.CommandMetadata{
Name: "quotas",
Description: T("List available usage quotas"),
Usage: []string{
T("CF_NAME quotas"),
},
}
}
func (cmd *ListQuotas) Requirements(requirementsFactory requirements.Factory, fc flags.FlagContext) ([]requirements.Requirement, error) {
usageReq := requirements.NewUsageRequirement(commandregistry.CLICommandUsagePresenter(cmd),
T("No argument required"),
func() bool {
return len(fc.Args()) != 0
},
)
reqs := []requirements.Requirement{
usageReq,
requirementsFactory.NewLoginRequirement(),
}
return reqs, nil
}
func (cmd *ListQuotas) SetDependency(deps commandregistry.Dependency, pluginCall bool) commandregistry.Command {
cmd.ui = deps.UI
cmd.config = deps.Config
cmd.quotaRepo = deps.RepoLocator.GetQuotaRepository()
return cmd
}
func (cmd *ListQuotas) Execute(c flags.FlagContext) error {
cmd.ui.Say(T("Getting quotas as {{.Username}}...", map[string]interface{}{"Username": terminal.EntityNameColor(cmd.config.Username())}))
quotas, err := cmd.quotaRepo.FindAll()
if err != nil {
return err
}
cmd.ui.Ok()
cmd.ui.Say("")
table := cmd.ui.Table([]string{
T("name"),
T("total memory"),
T("instance memory"),
T("routes"),
T("service instances"),
T("paid plans"),
T("app instances"),
T("route ports"),
})
var megabytes string
for _, quota := range quotas {
if quota.InstanceMemoryLimit == -1 {
megabytes = T("unlimited")
} else {
megabytes = formatters.ByteSize(quota.InstanceMemoryLimit * formatters.MEGABYTE)
}
servicesLimit := strconv.Itoa(quota.ServicesLimit)
if quota.ServicesLimit == -1 {
servicesLimit = T("unlimited")
}
appInstanceLimit := strconv.Itoa(quota.AppInstanceLimit)
if quota.AppInstanceLimit == resources.UnlimitedAppInstances {
appInstanceLimit = T("unlimited")
}
reservedRoutePorts := string(quota.ReservedRoutePorts)
if reservedRoutePorts == resources.UnlimitedReservedRoutePorts {
reservedRoutePorts = T("unlimited")
}
routesLimit := fmt.Sprintf("%d", quota.RoutesLimit)
if routesLimit == resources.UnlimitedRoutes {
routesLimit = T("unlimited")
}
table.Add(
quota.Name,
formatters.ByteSize(quota.MemoryLimit*formatters.MEGABYTE),
megabytes,
routesLimit,
fmt.Sprint(servicesLimit),
formatters.Allowed(quota.NonBasicServicesAllowed),
fmt.Sprint(appInstanceLimit),
fmt.Sprint(reservedRoutePorts),
)
}
err = table.Print()
if err != nil {
return err
}
return nil
}