diff options
Diffstat (limited to 'weed/topology/topology_map.go')
| -rw-r--r-- | weed/topology/topology_map.go | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/weed/topology/topology_map.go b/weed/topology/topology_map.go new file mode 100644 index 000000000..ce8e9e663 --- /dev/null +++ b/weed/topology/topology_map.go @@ -0,0 +1,53 @@ +package topology + +func (t *Topology) ToMap() interface{} { + m := make(map[string]interface{}) + m["Max"] = t.GetMaxVolumeCount() + m["Free"] = t.FreeSpace() + var dcs []interface{} + for _, c := range t.Children() { + dc := c.(*DataCenter) + dcs = append(dcs, dc.ToMap()) + } + m["DataCenters"] = dcs + var layouts []interface{} + for _, col := range t.collectionMap.Items() { + c := col.(*Collection) + for _, layout := range c.storageType2VolumeLayout.Items() { + if layout != nil { + tmp := layout.(*VolumeLayout).ToMap() + tmp["collection"] = c.Name + layouts = append(layouts, tmp) + } + } + } + m["layouts"] = layouts + return m +} + +func (t *Topology) ToVolumeMap() interface{} { + m := make(map[string]interface{}) + m["Max"] = t.GetMaxVolumeCount() + m["Free"] = t.FreeSpace() + dcs := make(map[NodeId]interface{}) + for _, c := range t.Children() { + dc := c.(*DataCenter) + racks := make(map[NodeId]interface{}) + for _, r := range dc.Children() { + rack := r.(*Rack) + dataNodes := make(map[NodeId]interface{}) + for _, d := range rack.Children() { + dn := d.(*DataNode) + var volumes []interface{} + for _, v := range dn.GetVolumes() { + volumes = append(volumes, v) + } + dataNodes[d.Id()] = volumes + } + racks[r.Id()] = dataNodes + } + dcs[dc.Id()] = racks + } + m["DataCenters"] = dcs + return m +} |
