From 6d5af85eee5250a20faa986ac26a2098016fb32e Mon Sep 17 00:00:00 2001 From: Bryan Boreham Date: Thu, 20 Oct 2016 14:01:14 +0100 Subject: [PATCH] Report count of active IP addresses in status --- ipam/space/space.go | 8 ++++++++ ipam/space/space_test.go | 3 +++ ipam/status.go | 2 ++ prog/weaver/http.go | 3 ++- 4 files changed, 15 insertions(+), 1 deletion(-) diff --git a/ipam/space/space.go b/ipam/space/space.go index f0acb0db..69ad28a9 100644 --- a/ipam/space/space.go +++ b/ipam/space/space.go @@ -88,6 +88,14 @@ func (s *Space) Claim(addr address.Address) error { return nil } +func (s *Space) NumOwnedAddresses() address.Count { + res := address.Count(0) + for i := 0; i < len(s.ours); i += 2 { + res += address.Length(s.ours[i+1], s.ours[i]) + } + return res +} + func (s *Space) NumFreeAddresses() address.Count { res := address.Count(0) for i := 0; i < len(s.free); i += 2 { diff --git a/ipam/space/space_test.go b/ipam/space/space_test.go index 486410f5..29797047 100644 --- a/ipam/space/space_test.go +++ b/ipam/space/space_test.go @@ -98,16 +98,19 @@ func TestSpaceAllocate(t *testing.T) { space1 := makeSpace(start, size) require.Equal(t, address.Count(20), space1.NumFreeAddresses()) + require.Equal(t, address.Count(0), space1.NumOwnedAddresses()) space1.assertInvariants() _, addr1 := space1.Allocate(address.NewRange(start, size)) require.Equal(t, testAddr1, addr1.String(), "address") require.Equal(t, address.Count(19), space1.NumFreeAddresses()) + require.Equal(t, address.Count(1), space1.NumOwnedAddresses()) space1.assertInvariants() _, addr2 := space1.Allocate(address.NewRange(start, size)) require.False(t, addr2.String() == testAddr1, "address") require.Equal(t, address.Count(18), space1.NumFreeAddresses()) + require.Equal(t, address.Count(2), space1.NumOwnedAddresses()) require.Equal(t, address.Count(13), space1.NumFreeAddressesInRange(address.Range{Start: ip(testAddr1), End: ip(testAddrx)})) require.Equal(t, address.Count(18), space1.NumFreeAddressesInRange(address.Range{Start: ip(testAddr1), End: ip(testAddry)})) space1.assertInvariants() diff --git a/ipam/status.go b/ipam/status.go index a65de527..1b4c7ab4 100644 --- a/ipam/status.go +++ b/ipam/status.go @@ -10,6 +10,7 @@ type Status struct { Paxos *paxos.Status Range string RangeNumIPs int + ActiveIPs int DefaultSubnet string Entries []EntryStatus PendingClaims []ClaimStatus @@ -52,6 +53,7 @@ func NewStatus(allocator *Allocator, defaultSubnet address.CIDR) *Status { paxosStatus, allocator.universe.String(), int(allocator.universe.Size()), + int(allocator.space.NumOwnedAddresses()), defaultSubnet.String(), newEntryStatusSlice(allocator), newClaimStatusSlice(allocator), diff --git a/prog/weaver/http.go b/prog/weaver/http.go index 1c3b92e9..f539ad12 100644 --- a/prog/weaver/http.go +++ b/prog/weaver/http.go @@ -57,7 +57,8 @@ var rootTemplate = template.New("root").Funcs(map[string]interface{}{ // print the local info first if ourStats := peerStats[router.Name]; ourStats != nil { - printOwned(router.Name, ourStats.nickname, "", ourStats.ips) + activeStr := fmt.Sprintf("(%d active)", status.ActiveIPs) + printOwned(router.Name, ourStats.nickname, activeStr, ourStats.ips) } // and then the rest