aboutsummaryrefslogtreecommitdiff
path: root/weed/shell/command_volume_list.go
diff options
context:
space:
mode:
Diffstat (limited to 'weed/shell/command_volume_list.go')
-rw-r--r--weed/shell/command_volume_list.go64
1 files changed, 64 insertions, 0 deletions
diff --git a/weed/shell/command_volume_list.go b/weed/shell/command_volume_list.go
new file mode 100644
index 000000000..1d921e4b4
--- /dev/null
+++ b/weed/shell/command_volume_list.go
@@ -0,0 +1,64 @@
+package shell
+
+import (
+ "context"
+ "fmt"
+ "github.com/chrislusf/seaweedfs/weed/pb/master_pb"
+ "io"
+)
+
+func init() {
+ commands = append(commands, &commandVolumeList{})
+}
+
+type commandVolumeList struct {
+}
+
+func (c *commandVolumeList) Name() string {
+ return "volume.list"
+}
+
+func (c *commandVolumeList) Help() string {
+ return "# list all volumes"
+}
+
+func (c *commandVolumeList) Do(args []string, commandEnv *commandEnv, writer io.Writer) error {
+
+ resp, err := commandEnv.masterClient.VolumeList(context.Background())
+
+ if err != nil {
+ return err
+ }
+
+ writeTopologyInfo(writer,resp.TopologyInfo)
+
+ return nil
+}
+
+func writeTopologyInfo(writer io.Writer, t *master_pb.TopologyInfo) {
+ fmt.Fprintf(writer, "Topology volume:%d/%d active:%d free:%d\n", t.VolumeCount, t.MaxVolumeCount, t.ActiveVolumeCount, t.FreeVolumeCount)
+ for _, dc := range t.DataCenterInfos {
+ writeDataCenterInfo(writer, dc)
+ }
+}
+func writeDataCenterInfo(writer io.Writer, t *master_pb.DataCenterInfo) {
+ fmt.Fprintf(writer, " DataCenter %s volume:%d/%d active:%d free:%d\n", t.Id, t.VolumeCount, t.MaxVolumeCount, t.ActiveVolumeCount, t.FreeVolumeCount)
+ for _, r := range t.RackInfos {
+ writeRackInfo(writer, r)
+ }
+}
+func writeRackInfo(writer io.Writer, t *master_pb.RackInfo) {
+ fmt.Fprintf(writer, " Rack %s volume:%d/%d active:%d free:%d\n", t.Id, t.VolumeCount, t.MaxVolumeCount, t.ActiveVolumeCount, t.FreeVolumeCount)
+ for _, dn := range t.DataNodeInfos {
+ writeDataNodeInfo(writer, dn)
+ }
+}
+func writeDataNodeInfo(writer io.Writer, t *master_pb.DataNodeInfo) {
+ fmt.Fprintf(writer, " DataNode %s volume:%d/%d active:%d free:%d\n", t.Id, t.VolumeCount, t.MaxVolumeCount, t.ActiveVolumeCount, t.FreeVolumeCount)
+ for _, vi := range t.VolumeInfos {
+ writeVolumeInformationMessage(writer, vi)
+ }
+}
+func writeVolumeInformationMessage(writer io.Writer, t *master_pb.VolumeInformationMessage) {
+ fmt.Fprintf(writer, " volume %+v \n", t)
+}