add Volume Ids column only for max 100 volumes for convenience in the master ui.

This commit is contained in:
bingoohuang 2020-05-29 15:37:58 +08:00
parent b4e93b639d
commit 1a642b9876
4 changed files with 77 additions and 0 deletions

View file

@ -76,6 +76,7 @@ var StatusTpl = template.Must(template.New("status").Parse(`<!DOCTYPE html>
<th>Rack</th> <th>Rack</th>
<th>RemoteAddr</th> <th>RemoteAddr</th>
<th>#Volumes</th> <th>#Volumes</th>
<th>Volume Ids</th>
<th>#ErasureCodingShards</th> <th>#ErasureCodingShards</th>
<th>Max</th> <th>Max</th>
</tr> </tr>
@ -89,6 +90,7 @@ var StatusTpl = template.Must(template.New("status").Parse(`<!DOCTYPE html>
<td>{{ $rack.Id }}</td> <td>{{ $rack.Id }}</td>
<td><a href="http://{{ $dn.Url }}/ui/index.html">{{ $dn.Url }}</a></td> <td><a href="http://{{ $dn.Url }}/ui/index.html">{{ $dn.Url }}</a></td>
<td>{{ $dn.Volumes }}</td> <td>{{ $dn.Volumes }}</td>
<td>{{ $dn.VolumeIds}}</td>
<td>{{ $dn.EcShards }}</td> <td>{{ $dn.EcShards }}</td>
<td>{{ $dn.Max }}</td> <td>{{ $dn.Max }}</td>
</tr> </tr>

View file

@ -2,6 +2,7 @@ package topology
import ( import (
"fmt" "fmt"
"github.com/chrislusf/seaweedfs/weed/util"
"strconv" "strconv"
"sync" "sync"
@ -166,6 +167,7 @@ func (dn *DataNode) ToMap() interface{} {
ret := make(map[string]interface{}) ret := make(map[string]interface{})
ret["Url"] = dn.Url() ret["Url"] = dn.Url()
ret["Volumes"] = dn.GetVolumeCount() ret["Volumes"] = dn.GetVolumeCount()
ret["VolumeIds"] = dn.GetVolumeIds()
ret["EcShards"] = dn.GetEcShardCount() ret["EcShards"] = dn.GetEcShardCount()
ret["Max"] = dn.GetMaxVolumeCount() ret["Max"] = dn.GetMaxVolumeCount()
ret["Free"] = dn.FreeSpace() ret["Free"] = dn.FreeSpace()
@ -190,3 +192,19 @@ func (dn *DataNode) ToDataNodeInfo() *master_pb.DataNodeInfo {
} }
return m return m
} }
// GetVolumeIds returns the human readable volume ids limited to count of max 100.
func (dn *DataNode) GetVolumeIds() string {
volumesLen := len(dn.volumes)
if volumesLen > 100 {
return "..."
}
ids := make([]int, 0, volumesLen)
for k := range dn.volumes {
ids = append(ids, int(k))
}
return util.HumanReadableInts(ids...)
}

43
weed/util/inits.go Normal file
View file

@ -0,0 +1,43 @@
package util
import (
"fmt"
"sort"
)
// HumanReadableInts joins a serials of inits into a smart one like 1-3 5 7-10 for human readable.
func HumanReadableInts(ids ...int) string {
sort.Ints(ids)
s := ""
start := 0
last := 0
for i, v := range ids {
if i == 0 {
start = v
last = v
s = fmt.Sprintf("%d", v)
continue
}
if last+1 == v {
last = v
continue
}
if last > start {
s += fmt.Sprintf("-%d", last)
}
s += fmt.Sprintf(" %d", v)
start = v
last = v
}
if last != start {
s += fmt.Sprintf("-%d", last)
}
return s
}

14
weed/util/inits_test.go Normal file
View file

@ -0,0 +1,14 @@
package util
import (
"github.com/stretchr/testify/assert"
"testing"
)
func TestHumanReadableInts(t *testing.T) {
assert.Equal(t, "1-3", HumanReadableInts(1, 2, 3))
assert.Equal(t, "1 3", HumanReadableInts(1, 3))
assert.Equal(t, "1 3 5", HumanReadableInts(5, 1, 3))
assert.Equal(t, "1-3 5", HumanReadableInts(1, 2, 3, 5))
assert.Equal(t, "1-3 5 7-9", HumanReadableInts(7, 9, 8, 1, 2, 3, 5))
}