From c73266b50984dc58a712a290e262686912645d9f Mon Sep 17 00:00:00 2001 From: gmarek Date: Thu, 13 Apr 2017 14:39:43 +0200 Subject: [PATCH] Make resource gatherer get data about etcd resource usage in kubemark setup --- .../framework/get-kubemark-resource-usage.go | 36 +++++++++++++++++-- 1 file changed, 34 insertions(+), 2 deletions(-) diff --git a/test/e2e/framework/get-kubemark-resource-usage.go b/test/e2e/framework/get-kubemark-resource-usage.go index e28347dc310..b3c76ced75a 100644 --- a/test/e2e/framework/get-kubemark-resource-usage.go +++ b/test/e2e/framework/get-kubemark-resource-usage.go @@ -28,15 +28,24 @@ type KubemarkResourceUsage struct { CPUUsageInCores float64 } +func getMasterUsageByPrefix(prefix string) (string, error) { + sshResult, err := SSH(fmt.Sprintf("ps ax -o %%cpu,rss,command | tail -n +2 | grep %v | sed 's/\\s+/ /g'", prefix), GetMasterHost()+":22", TestContext.Provider) + if err != nil { + return "", err + } + return sshResult.Stdout, nil +} + // TODO: figure out how to move this to kubemark directory (need to factor test SSH out of e2e framework) func GetKubemarkMasterComponentsResourceUsage() map[string]*KubemarkResourceUsage { result := make(map[string]*KubemarkResourceUsage) - sshResult, err := SSH("ps ax -o %cpu,rss,command | tail -n +2 | grep kube | sed 's/\\s+/ /g'", GetMasterHost()+":22", TestContext.Provider) + // Get kuberenetes component resource usage + sshResult, err := getMasterUsageByPrefix("kube") if err != nil { Logf("Error when trying to SSH to master machine. Skipping probe") return nil } - scanner := bufio.NewScanner(strings.NewReader(sshResult.Stdout)) + scanner := bufio.NewScanner(strings.NewReader(sshResult)) for scanner.Scan() { var cpu float64 var mem uint64 @@ -48,5 +57,28 @@ func GetKubemarkMasterComponentsResourceUsage() map[string]*KubemarkResourceUsag result[fullName] = &KubemarkResourceUsage{Name: fullName, MemoryWorkingSetInBytes: mem * 1024, CPUUsageInCores: cpu / 100} } } + // Get etcd resource usage + sshResult, err = getMasterUsageByPrefix("bin/etcd") + if err != nil { + Logf("Error when trying to SSH to master machine. Skipping probe") + return nil + } + scanner = bufio.NewScanner(strings.NewReader(sshResult)) + for scanner.Scan() { + var cpu float64 + var mem uint64 + var etcdKind string + fmt.Sscanf(strings.TrimSpace(scanner.Text()), "%f %d /bin/sh -c /usr/local/bin/etcd", &cpu, &mem) + dataDirStart := strings.Index(scanner.Text(), "--data-dir") + if dataDirStart < 0 { + continue + } + fmt.Sscanf(scanner.Text()[dataDirStart:], "--data-dir=/var/%s", &etcdKind) + if etcdKind != "" { + // Gatherer expects pod_name/container_name format + fullName := "etcd/" + etcdKind + result[fullName] = &KubemarkResourceUsage{Name: fullName, MemoryWorkingSetInBytes: mem * 1024, CPUUsageInCores: cpu / 100} + } + } return result }