func mainCmd(r ring.Ring, b *ring.Builder) error { if r != nil { // TODO: // Version Info (the value as well as the time translation) // Number of tier levels // Replica count // Indication of how risky the assignments are: // Replicas not in distinct tiers, nodes s := r.Stats() report := [][]string{ []string{brimtext.ThousandsSep(int64(s.PartitionCount), ","), "Partitions"}, []string{brimtext.ThousandsSep(int64(s.PartitionBitCount), ","), "Partition Bits"}, []string{brimtext.ThousandsSep(int64(s.NodeCount), ","), "Nodes"}, []string{brimtext.ThousandsSep(int64(s.InactiveNodeCount), ","), "Inactive Nodes"}, []string{brimtext.ThousandsSepU(s.TotalCapacity, ","), "Total Node Capacity"}, []string{fmt.Sprintf("%.02f%%", s.MaxUnderNodePercentage), fmt.Sprintf("Worst Underweight Node (ID %016x)", s.MaxUnderNodeID)}, []string{fmt.Sprintf("%.02f%%", s.MaxOverNodePercentage), fmt.Sprintf("Worst Overweight Node (ID %016x)", s.MaxOverNodeID)}, } reportOpts := brimtext.NewDefaultAlignOptions() reportOpts.Alignments = []brimtext.Alignment{brimtext.Right, brimtext.Left} fmt.Print(brimtext.Align(report, reportOpts)) } if b != nil { // TODO: // Inactive node count // Total capacity report := [][]string{ []string{brimtext.ThousandsSep(int64(len(b.Nodes())), ","), "Nodes"}, []string{brimtext.ThousandsSep(int64(b.ReplicaCount()), ","), "Replicas"}, []string{brimtext.ThousandsSep(int64(b.PointsAllowed()), ","), "Points Allowed"}, []string{brimtext.ThousandsSep(int64(b.MaxPartitionBitCount()), ","), "Max Partition Bits"}, []string{brimtext.ThousandsSep(int64(b.MoveWait()), ","), "Move Wait"}, } reportOpts := brimtext.NewDefaultAlignOptions() reportOpts.Alignments = []brimtext.Alignment{brimtext.Right, brimtext.Left} fmt.Print(brimtext.Align(report, reportOpts)) return nil } return nil }