Skip to content

Commit

Permalink
improve tenant status/info UI (#1200)
Browse files Browse the repository at this point in the history
  • Loading branch information
harshavardhana committed Jul 13, 2022
1 parent 22f39ba commit 8af7c3c
Show file tree
Hide file tree
Showing 4 changed files with 41 additions and 24 deletions.
6 changes: 3 additions & 3 deletions kubectl-minio/cmd/color.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,11 +29,11 @@ var (
return !color.NoColor
}

Bold = func() func(a ...interface{}) string {
Bold = func() func(format string, a ...interface{}) string {
if IsTerminal() {
return color.New(color.Bold).SprintFunc()
return color.New(color.Bold).SprintfFunc()
}
return fmt.Sprint
return fmt.Sprintf
}()

RedBold = func() func(format string, a ...interface{}) string {
Expand Down
8 changes: 8 additions & 0 deletions kubectl-minio/cmd/helpers/helpers.go
Original file line number Diff line number Diff line change
Expand Up @@ -206,8 +206,16 @@ func ToYaml(objs []runtime.Object) ([]string, error) {
func GetTable() *table.Table {
t := table.NewWriter(os.Stdout)
t.SetAutoWrapText(false)
t.SetAutoFormatHeaders(true)
t.SetHeaderAlignment(table.ALIGN_LEFT)
t.SetAlignment(table.ALIGN_LEFT)
t.SetCenterSeparator("")
t.SetColumnSeparator("")
t.SetRowSeparator("")
t.SetHeaderLine(false)
t.SetBorder(false)
t.SetTablePadding("\t")
t.SetNoWhiteSpace(true)
return t
}

Expand Down
25 changes: 16 additions & 9 deletions kubectl-minio/cmd/tenant-info.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ import (
"strconv"
"strings"

"github.com/dustin/go-humanize"
"github.com/minio/kubectl-minio/cmd/helpers"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/klog/v2"
Expand Down Expand Up @@ -109,20 +110,26 @@ func printTenantInfo(tenant miniov2.Tenant) {
for _, p := range conSvc.Spec.Ports {
consolePorts = consolePorts + strconv.Itoa(int(p.Port)) + ","
}
fmt.Printf(Bold(fmt.Sprintf("\nTenant '%s', Namespace '%s', Total capacity %s\n\n", tenant.Name, tenant.ObjectMeta.Namespace, helpers.TotalCapacity(tenant))))
fmt.Printf(Blue(" Current status: %s \n", tenant.Status.CurrentState))
fmt.Printf(Blue(" MinIO version: %s \n", tenant.Spec.Image))
fmt.Printf(Blue(" MinIO service: %s/ClusterIP (port %s)\n\n", minSvc.Name, strings.TrimSuffix(minPorts, ",")))
fmt.Printf(Blue(" Console service: %s/ClusterIP (port %s)\n\n", conSvc.Name, strings.TrimSuffix(consolePorts, ",")))
fmt.Printf(Bold(fmt.Sprintf("Tenant '%s', Namespace '%s', Total capacity %s\n\n", tenant.Name, tenant.ObjectMeta.Namespace, helpers.TotalCapacity(tenant))))
fmt.Printf(Blue("Current status: %s\n", tenant.Status.CurrentState))
fmt.Printf(Blue("MinIO version: %s\n", tenant.Spec.Image))
fmt.Printf(Blue("MinIO service: %s/ClusterIP (port %s)\n", minSvc.Name, strings.TrimSuffix(minPorts, ",")))
fmt.Printf(Blue("Console service: %s/ClusterIP (port %s)\n", conSvc.Name, strings.TrimSuffix(consolePorts, ",")))
if tenant.Spec.KES != nil && tenant.Spec.KES.Image != "" {
fmt.Printf(Blue(" KES version: %s \n\n", tenant.Spec.KES.Image))
fmt.Printf(Blue("KES version: %s \n\n", tenant.Spec.KES.Image))
} else {
fmt.Println()
}

t := helpers.GetTable()
t.SetHeader([]string{"Pool", "Servers", "Volumes Per Server", "Capacity Per Volume"})
t.SetHeader([]string{"Pool", "Servers", "Volumes(server)", "Capacity(volume)"})
for i, z := range tenant.Spec.Pools {
t.Append([]string{strconv.Itoa(i), strconv.Itoa(int(z.Servers)), strconv.Itoa(int(z.VolumesPerServer)), z.VolumeClaimTemplate.Spec.Resources.Requests.Storage().String()})
t.Append([]string{
strconv.Itoa(i),
strconv.Itoa(int(z.Servers)),
strconv.Itoa(int(z.VolumesPerServer)),
humanize.IBytes(uint64(z.VolumeClaimTemplate.Spec.Resources.Requests.Storage().Value())),
})
}
t.Render()
fmt.Println()
}
26 changes: 14 additions & 12 deletions kubectl-minio/cmd/tenant-status.go
Original file line number Diff line number Diff line change
Expand Up @@ -127,18 +127,20 @@ func (d *statusCmd) printTenantStatus(tenant *v2.Tenant) error {

func (d *statusCmd) printRawTenantStatus(tenant *v2.Tenant) {
var s strings.Builder
s.WriteString(Blue("Current status: %s \n", tenant.Status.CurrentState))
s.WriteString(Blue("Available replicas: %d \n", tenant.Status.AvailableReplicas))
s.WriteString(Blue("Pools: %d \n", len(tenant.Status.Pools)))
s.WriteString(Blue("Revision: %d \n", tenant.Status.Revision))
s.WriteString(Blue("Sync version: %s \n", tenant.Status.SyncVersion))
s.WriteString(Blue("Provisioned users: %t \n", tenant.Status.ProvisionedUsers))
s.WriteString(Blue("Write quorum: %d \n", tenant.Status.WriteQuorum))
s.WriteString(Blue("Drives online: %d \n", tenant.Status.DrivesOnline))
s.WriteString(Blue("Drives offline: %d \n", tenant.Status.DrivesOffline))
s.WriteString(Blue("Drives healing: %d \n", tenant.Status.DrivesHealing))
s.WriteString(Blue("Health status: %s \n", tenant.Status.HealthStatus))
s.WriteString(Blue("Usable capacity: %s \n", humanize.IBytes(uint64(tenant.Status.Usage.Capacity))))
s.WriteString("=====================\n")
s.WriteString(Bold("Pools: %d \n", len(tenant.Status.Pools)))
s.WriteString(Bold("Revision: %d \n", tenant.Status.Revision))
s.WriteString(Bold("Sync version: %s \n", tenant.Status.SyncVersion))
s.WriteString(Bold("Write quorum: %d \n", tenant.Status.WriteQuorum))
s.WriteString(Bold("Health status: %s \n", tenant.Status.HealthStatus))
s.WriteString(Bold("Drives online: %d \n", tenant.Status.DrivesOnline))
s.WriteString(Bold("Drives offline: %d \n", tenant.Status.DrivesOffline))
s.WriteString(Bold("Drives healing: %d \n", tenant.Status.DrivesHealing))
s.WriteString(Bold("Current status: %s \n", tenant.Status.CurrentState))
s.WriteString(Bold("Usable capacity: %s \n", humanize.IBytes(uint64(tenant.Status.Usage.Capacity))))
s.WriteString(Bold("Provisioned users: %t \n", tenant.Status.ProvisionedUsers))
s.WriteString(Bold("Available replicas: %d \n", tenant.Status.AvailableReplicas))

fmt.Fprintln(d.out, s.String())
}

Expand Down

0 comments on commit 8af7c3c

Please sign in to comment.