From b00647413dfcd55ed96c0a316c8c5dc60c77c95c Mon Sep 17 00:00:00 2001 From: Evan Hazlett Date: Fri, 1 May 2015 22:43:34 -0400 Subject: [PATCH] more node detail Signed-off-by: Evan Hazlett --- controller/manager/utils.go | 54 ++++++++++++++++++++++++++------ controller/manager/utils_test.go | 32 ++++++++++++++++--- node.go | 12 ++++--- 3 files changed, 81 insertions(+), 17 deletions(-) diff --git a/controller/manager/utils.go b/controller/manager/utils.go index 7ec0776ce..92d89f0dd 100644 --- a/controller/manager/utils.go +++ b/controller/manager/utils.go @@ -38,6 +38,14 @@ func generateId(n int) string { func parseClusterNodes(driverStatus [][]string) ([]*shipyard.Node, error) { nodes := []*shipyard.Node{} + var node *shipyard.Node + nodeComplete := false + name := "" + addr := "" + containers := "" + reservedCPUs := "" + reservedMemory := "" + labels := []string{} for _, l := range driverStatus { if len(l) != 2 { continue @@ -50,19 +58,47 @@ func parseClusterNodes(driverStatus [][]string) ([]*shipyard.Node, error) { continue } - // cluster info like "Containers" - if strings.Index(label, " └") > -1 { - continue + if strings.Index(label, " └") == -1 { + name = label + addr = data } - // parse node - node := &shipyard.Node{ - Name: label, - Addr: data, + // node info like "Containers" + switch label { + case " └ Containers": + containers = data + case " └ Reserved CPUs": + reservedCPUs = data + case " └ Reserved Memory": + reservedMemory = data + case " └ Labels": + lbls := strings.Split(data, ",") + labels = lbls + nodeComplete = true + default: + continue } - // TODO: get response time - nodes = append(nodes, node) + if nodeComplete { + node = &shipyard.Node{ + Name: name, + Addr: addr, + Containers: containers, + ReservedCPUs: reservedCPUs, + ReservedMemory: reservedMemory, + Labels: labels, + } + nodes = append(nodes, node) + + // reset info + name = "" + addr = "" + containers = "" + reservedCPUs = "" + reservedMemory = "" + labels = []string{} + nodeComplete = false + } } return nodes, nil diff --git a/controller/manager/utils_test.go b/controller/manager/utils_test.go index b71a5ceb5..b7b506317 100644 --- a/controller/manager/utils_test.go +++ b/controller/manager/utils_test.go @@ -10,8 +10,15 @@ func TestParseDriverStatus(t *testing.T) { []string{"\u0008Filters", "affinity, health, constraint"}, []string{"\u0008Nodes", "1"}, []string{"localhost", "127.0.0.1:2375"}, + []string{" └ Containers", "10"}, + []string{" └ Reserved CPUs", "1 / 4"}, + []string{" └ Reserved Memory", "2 / 8.083GiB"}, + []string{" └ Labels", "executiondriver=native-0.2, kernelversion=3.16.0-4-amd64, operatingsystem=Debian GNU/Linux 8 (jessie), storagedriver=btrfs"}, []string{"remote", "1.2.3.4:2375"}, []string{" └ Containers", "3"}, + []string{" └ Reserved CPUs", "0 / 4"}, + []string{" └ Reserved Memory", "0 / 8.083GiB"}, + []string{" └ Labels", "executiondriver=native-0.2, kernelversion=3.16.0-4-amd64, operatingsystem=Debian GNU/Linux 8 (jessie), storagedriver=aufs"}, } nodes, err := parseClusterNodes(driverStatus) @@ -27,18 +34,35 @@ func TestParseDriverStatus(t *testing.T) { n2 := nodes[1] if n1.Name != "localhost" { - t.Fatalf("expected name \"localhost\"; received \"%s\"", n1.Name) + t.Fatalf("expected name 'localhost'; received %q", n1.Name) } if n1.Addr != "127.0.0.1:2375" { - t.Fatalf("expected addr \"127.0.0.1:2375\"; received \"%s\"", n1.Addr) + t.Fatalf("expected addr '127.0.0.1:2375'; received %q", n1.Addr) + } + + if n1.Containers != "10" { + t.Fatalf("expected 10 containers; received %q", n1.Containers) + } + + if n1.ReservedCPUs != "1 / 4" { + t.Fatalf("expected 1 / 4 cpus; received %q", n1.ReservedCPUs) } if n2.Name != "remote" { - t.Fatalf("expected name \"remote\"; received \"%s\"", n2.Name) + t.Fatalf("expected name 'remote'; received %q", n2.Name) } if n2.Addr != "1.2.3.4:2375" { - t.Fatalf("expected addr \"1.2.3.4:2375\"; received \"%s\"", n2.Addr) + t.Fatalf("expected addr '1.2.3.4:2375'; received %q", n2.Addr) } + + if n2.Containers != "3" { + t.Fatalf("expected 3 containers; received %q", n1.Containers) + } + + if n2.ReservedCPUs != "0 / 4" { + t.Fatalf("expected 0 / 4 cpus; received %q", n2.ReservedCPUs) + } + } diff --git a/node.go b/node.go index 804934121..f284ff9fd 100644 --- a/node.go +++ b/node.go @@ -1,8 +1,12 @@ package shipyard type Node struct { - ID string `json:"id,omitempty" gorethink:"id,omitempty"` - Name string `json:"name,omitempty" gorethink:"name,omitempty"` - Addr string `json:"addr,omitempty" gorethink:"addr,omitempty"` - ResponseTime float64 `json:"response_time" gorethink:"response_time,omitempty"` + ID string `json:"id,omitempty" gorethink:"id,omitempty"` + Name string `json:"name,omitempty" gorethink:"name,omitempty"` + Addr string `json:"addr,omitempty" gorethink:"addr,omitempty"` + Containers string `json:"containers,omitempty"` + ReservedCPUs string `json:"reserved_cpus,omitempty"` + ReservedMemory string `json:"reserved_memory,omitempty"` + Labels []string `json:"labels,omitempty"` + ResponseTime float64 `json:"response_time" gorethink:"response_time,omitempty"` }