fetch capacity and simulate task fitting

This commit is contained in:
nhatle 2022-07-26 11:00:07 -07:00
parent 66bd6308ce
commit 2ca005eea8
6 changed files with 167 additions and 1 deletions

View file

@ -106,6 +106,21 @@ func init() {
// fetch quota
fetchCmd.AddCommand(fetchQuotaCmd)
// fetch capacity
fetchCmd.AddCommand(fetchCapacityCmd)
// Hijack help function to hide unnecessary global flags
fetchCapacityCmd.SetHelpFunc(func(cmd *cobra.Command, s []string) {
if cmd.HasInheritedFlags() {
cmd.InheritedFlags().VisitAll(func(f *pflag.Flag) {
if f.Name != "logLevel" {
f.Hidden = true
}
})
}
help(cmd, s)
})
}
var fetchCmd = &cobra.Command{
@ -183,6 +198,14 @@ var fetchQuotaCmd = &cobra.Command{
Run: fetchQuota,
}
var fetchCapacityCmd = &cobra.Command{
Use: "capacity",
PreRun: setConfig,
Short: "Fetch capacity report",
Long: `This command will show detailed capacity report of the cluster`,
Run: fetchCapacity,
}
func fetchTasksConfig(cmd *cobra.Command, args []string) {
log.Infof("Fetching job configuration for [%s/%s/%s] \n", *env, *role, *name)
@ -416,3 +439,40 @@ func fetchQuota(cmd *cobra.Command, args []string) {
}
}
}
//fetchCapacity reports free capacity in details
func fetchCapacity(cmd *cobra.Command, args []string) {
log.Infof("Fetching capacity from %s/offers\n", client.GetSchedulerURL())
report, err := client.AvailOfferReport()
if err != nil {
log.Fatalf("error: %+v\n", err)
}
// convert report to user-friendly structure
capacity := map[string]map[string]map[string]int64{}
for g, gv := range report {
if _, ok := capacity[g]; !ok {
capacity[g] = map[string]map[string]int64{}
}
for r, rc := range gv {
if _, ok := capacity[g][r]; !ok {
capacity[g][r] = map[string]int64{}
}
for v, c := range rc {
capacity[g][r][fmt.Sprint(v)] = c
}
}
}
if toJson {
fmt.Println(internal.ToJSON(capacity))
if err != nil {
log.Fatalf("error: %+v\n", err)
}
} else {
fmt.Println(capacity)
}
}