mirror of
https://github.com/seaweedfs/seaweedfs.git
synced 2024-01-19 02:48:24 +00:00
Merge pull request #1337 from bingoohuang/master
add Volume Ids column only for max 100 volumes for convenience in the master ui.
This commit is contained in:
commit
ea93d21641
|
@ -76,6 +76,7 @@ var StatusTpl = template.Must(template.New("status").Parse(`<!DOCTYPE html>
|
|||
<th>Rack</th>
|
||||
<th>RemoteAddr</th>
|
||||
<th>#Volumes</th>
|
||||
<th>Volume Ids</th>
|
||||
<th>#ErasureCodingShards</th>
|
||||
<th>Max</th>
|
||||
</tr>
|
||||
|
@ -89,6 +90,7 @@ var StatusTpl = template.Must(template.New("status").Parse(`<!DOCTYPE html>
|
|||
<td>{{ $rack.Id }}</td>
|
||||
<td><a href="http://{{ $dn.Url }}/ui/index.html">{{ $dn.Url }}</a></td>
|
||||
<td>{{ $dn.Volumes }}</td>
|
||||
<td>{{ $dn.VolumeIds}}</td>
|
||||
<td>{{ $dn.EcShards }}</td>
|
||||
<td>{{ $dn.Max }}</td>
|
||||
</tr>
|
||||
|
|
|
@ -2,6 +2,7 @@ package topology
|
|||
|
||||
import (
|
||||
"fmt"
|
||||
"github.com/chrislusf/seaweedfs/weed/util"
|
||||
"strconv"
|
||||
"sync"
|
||||
|
||||
|
@ -166,6 +167,7 @@ func (dn *DataNode) ToMap() interface{} {
|
|||
ret := make(map[string]interface{})
|
||||
ret["Url"] = dn.Url()
|
||||
ret["Volumes"] = dn.GetVolumeCount()
|
||||
ret["VolumeIds"] = dn.GetVolumeIds()
|
||||
ret["EcShards"] = dn.GetEcShardCount()
|
||||
ret["Max"] = dn.GetMaxVolumeCount()
|
||||
ret["Free"] = dn.FreeSpace()
|
||||
|
@ -190,3 +192,14 @@ func (dn *DataNode) ToDataNodeInfo() *master_pb.DataNodeInfo {
|
|||
}
|
||||
return m
|
||||
}
|
||||
|
||||
// GetVolumeIds returns the human readable volume ids limited to count of max 100.
|
||||
func (dn *DataNode) GetVolumeIds() string {
|
||||
ids := make([]int, 0, len(dn.volumes))
|
||||
|
||||
for k := range dn.volumes {
|
||||
ids = append(ids, int(k))
|
||||
}
|
||||
|
||||
return util.HumanReadableIntsMax(100, ids...)
|
||||
}
|
||||
|
|
52
weed/util/inits.go
Normal file
52
weed/util/inits.go
Normal file
|
@ -0,0 +1,52 @@
|
|||
package util
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"sort"
|
||||
)
|
||||
|
||||
// HumanReadableIntsMax joins a serials of inits into a smart one like 1-3 5 ... for human readable.
|
||||
func HumanReadableIntsMax(max int, ids ...int) string {
|
||||
if len(ids) <= max {
|
||||
return HumanReadableInts(ids...)
|
||||
}
|
||||
|
||||
return HumanReadableInts(ids[:max]...) + " ..."
|
||||
}
|
||||
|
||||
// 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
|
||||
}
|
19
weed/util/inits_test.go
Normal file
19
weed/util/inits_test.go
Normal file
|
@ -0,0 +1,19 @@
|
|||
package util
|
||||
|
||||
import (
|
||||
"github.com/stretchr/testify/assert"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestHumanReadableIntsMax(t *testing.T) {
|
||||
assert.Equal(t, "1-2 ...", HumanReadableIntsMax(2, 1, 2, 3))
|
||||
assert.Equal(t, "1 3 ...", HumanReadableIntsMax(2, 1, 3, 5))
|
||||
}
|
||||
|
||||
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))
|
||||
}
|
Loading…
Reference in a new issue